juxscript 1.1.17 → 1.1.18

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.
@@ -42,12 +42,28 @@ export declare abstract class BaseComponent<TState extends BaseState = BaseState
42
42
  protected abstract getCallbackEvents(): readonly string[];
43
43
  abstract render(targetId?: string): this;
44
44
  /**
45
- * REACTIVE UPDATE HOOK (PUBLIC, CONCRETE)
46
- * Called automatically when this.state[prop] changes via Proxy.
47
- * Default implementation handles base properties.
48
- * Children can override to add component-specific logic.
45
+ * REACTIVE UPDATE HOOK (REQUIRED - PUBLIC)
46
+ * Called automatically when this.state[prop] changes via the Proxy.
47
+ * Every component MUST implement this to handle state changes.
48
+ *
49
+ * This is PUBLIC because:
50
+ * - Components may need to call it manually
51
+ * - Allows external updates without full re-render
52
+ * - Part of the component's public API
53
+ *
54
+ * @param prop - The state property that changed
55
+ * @param value - The new value
56
+ *
57
+ * @example
58
+ * update(prop: string, value: any): void {
59
+ * const el = document.getElementById(this._id);
60
+ * if (!el) return;
61
+ *
62
+ * if (prop === 'label') el.textContent = value;
63
+ * if (prop === 'visible') el.style.display = value ? '' : 'none';
64
+ * }
49
65
  */
50
- update(prop: string, value: any): void;
66
+ abstract update(prop: string, value: any): void;
51
67
  /**
52
68
  * Set component style
53
69
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["BaseComponent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["BaseComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGlD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,8BAAsB,aAAa,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IAEpE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,GAAG,IAAI,CAAQ;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAM;IACtE,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,WAAW,CAAC,EAAE,QAAQ,CAAA;KACzB,CAAC,CAAM;IACR,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;IAC9D,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;gBAEnD,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAgC5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IACxD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IACzD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAExC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAM/C;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS1B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUhC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7B;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,gBAAgB,IAAI,IAAI;IASxB;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAO/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAS7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,MAAM,IAAI,IAAI;IAYd,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAW5C;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,IAAI;IAkBzG,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIjD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIlD,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAcnE,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;IAwBzD,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMzD;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IA0B/B,QAAQ,CAAC,YAAY,EAAE,GAAG,GAAG,IAAI;IAWjC;;;;;;OAMG;IACH,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAE5B;CACJ"}
@@ -40,44 +40,6 @@ export class BaseComponent {
40
40
  }
41
41
  });
42
42
  }
43
- /**
44
- * REACTIVE UPDATE HOOK (PUBLIC, CONCRETE)
45
- * Called automatically when this.state[prop] changes via Proxy.
46
- * Default implementation handles base properties.
47
- * Children can override to add component-specific logic.
48
- */
49
- update(prop, value) {
50
- if (!this.container)
51
- return;
52
- const el = this.container.querySelector(`#${this._id}`);
53
- if (!el)
54
- return;
55
- // Handle base properties
56
- switch (prop) {
57
- case 'visible':
58
- el.style.display = value ? '' : 'none';
59
- break;
60
- case 'class':
61
- const baseClasses = el.className.split(' ').filter(c => c.startsWith('jux-'));
62
- const userClasses = value.split(' ').filter((c) => c);
63
- el.className = [...baseClasses, ...userClasses].join(' ');
64
- break;
65
- case 'style':
66
- el.setAttribute('style', value);
67
- break;
68
- case 'disabled':
69
- el.setAttribute('aria-disabled', String(value));
70
- const inputs = el.querySelectorAll('input, button, select, textarea');
71
- inputs.forEach(input => {
72
- input.disabled = value;
73
- });
74
- break;
75
- case 'loading':
76
- el.classList.toggle('jux-loading', value);
77
- el.setAttribute('aria-busy', String(value));
78
- break;
79
- }
80
- }
81
43
  /* ═════════════════════════════════════════════════════════════════
82
44
  * COMMON FLUENT API (Inherited by all components)
83
45
  * ═════════════════════════════════════════════════════════════════ */
@@ -78,47 +78,28 @@ export abstract class BaseComponent<TState extends BaseState = BaseState> {
78
78
  abstract render(targetId?: string): this;
79
79
 
80
80
  /**
81
- * REACTIVE UPDATE HOOK (PUBLIC, CONCRETE)
82
- * Called automatically when this.state[prop] changes via Proxy.
83
- * Default implementation handles base properties.
84
- * Children can override to add component-specific logic.
81
+ * REACTIVE UPDATE HOOK (REQUIRED - PUBLIC)
82
+ * Called automatically when this.state[prop] changes via the Proxy.
83
+ * Every component MUST implement this to handle state changes.
84
+ *
85
+ * This is PUBLIC because:
86
+ * - Components may need to call it manually
87
+ * - Allows external updates without full re-render
88
+ * - Part of the component's public API
89
+ *
90
+ * @param prop - The state property that changed
91
+ * @param value - The new value
92
+ *
93
+ * @example
94
+ * update(prop: string, value: any): void {
95
+ * const el = document.getElementById(this._id);
96
+ * if (!el) return;
97
+ *
98
+ * if (prop === 'label') el.textContent = value;
99
+ * if (prop === 'visible') el.style.display = value ? '' : 'none';
100
+ * }
85
101
  */
86
- update(prop: string, value: any): void {
87
- if (!this.container) return;
88
-
89
- const el = this.container.querySelector(`#${this._id}`) as HTMLElement;
90
- if (!el) return;
91
-
92
- // Handle base properties
93
- switch (prop) {
94
- case 'visible':
95
- el.style.display = value ? '' : 'none';
96
- break;
97
-
98
- case 'class':
99
- const baseClasses = el.className.split(' ').filter(c => c.startsWith('jux-'));
100
- const userClasses = value.split(' ').filter((c: string) => c);
101
- el.className = [...baseClasses, ...userClasses].join(' ');
102
- break;
103
-
104
- case 'style':
105
- el.setAttribute('style', value);
106
- break;
107
-
108
- case 'disabled':
109
- el.setAttribute('aria-disabled', String(value));
110
- const inputs = el.querySelectorAll('input, button, select, textarea');
111
- inputs.forEach(input => {
112
- (input as HTMLInputElement).disabled = value;
113
- });
114
- break;
115
-
116
- case 'loading':
117
- el.classList.toggle('jux-loading', value);
118
- el.setAttribute('aria-busy', String(value));
119
- break;
120
- }
121
- }
102
+ abstract update(prop: string, value: any): void;
122
103
 
123
104
  /* ═════════════════════════════════════════════════════════════════
124
105
  * COMMON FLUENT API (Inherited by all components)
@@ -36,8 +36,8 @@ export declare class Hero extends BaseComponent<HeroState> {
36
36
  protected getTriggerEvents(): readonly string[];
37
37
  protected getCallbackEvents(): readonly string[];
38
38
  /**
39
- * Called automatically when state changes.
40
- * Extends BaseComponent's update() to handle Hero-specific properties.
39
+ * Called automatically by BaseComponent when state changes.
40
+ * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
41
41
  */
42
42
  update(prop: string, value: any): void;
43
43
  title(value: string): this;
@@ -1 +1 @@
1
- {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["hero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMnE,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,SAAS,GAAG,SAAS,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,qBAAa,IAAK,SAAQ,aAAa,CAAC,SAAS,CAAC;gBACpC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB;IAoBjD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAIhD;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAkDtC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAatF,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKvC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAS9B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAsEhC;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,CAEhE"}
1
+ {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["hero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMnE,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,SAAS,GAAG,SAAS,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,qBAAa,IAAK,SAAQ,aAAa,CAAC,SAAS,CAAC;gBACpC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB;IAoBjD,SAAS,CAAC,gBAAgB,IAAI,SAAS,MAAM,EAAE;IAI/C,SAAS,CAAC,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAQhD;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA8CtC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAatF,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKvC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAS9B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAsEhC;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,CAEhE"}
@@ -27,14 +27,14 @@ export class Hero extends BaseComponent {
27
27
  getCallbackEvents() {
28
28
  return CALLBACK_EVENTS;
29
29
  }
30
+ /* ═════════════════════════════════════════════════════════════════
31
+ * REACTIVE DOM UPDATES
32
+ * ═════════════════════════════════════════════════════════════════ */
30
33
  /**
31
- * Called automatically when state changes.
32
- * Extends BaseComponent's update() to handle Hero-specific properties.
34
+ * Called automatically by BaseComponent when state changes.
35
+ * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
33
36
  */
34
37
  update(prop, value) {
35
- // First, call parent to handle base properties (visible, class, style, etc.)
36
- super.update(prop, value);
37
- // Then handle Hero-specific properties
38
38
  const hero = document.getElementById(this._id);
39
39
  if (!hero)
40
40
  return;
@@ -50,17 +50,17 @@ export class Hero extends BaseComponent {
50
50
  subtitleEl.textContent = value;
51
51
  break;
52
52
  case 'content':
53
- const contentEl = hero.querySelector('.jux-hero-body');
53
+ const contentEl = hero.querySelector('.jux-hero-body'); // ✅ BEM naming
54
54
  if (contentEl)
55
55
  contentEl.innerHTML = value;
56
56
  break;
57
57
  case 'cta':
58
- const ctaEl = hero.querySelector('.jux-hero-cta');
58
+ const ctaEl = hero.querySelector('.jux-hero-cta'); // ✅ BEM naming
59
59
  if (ctaEl)
60
60
  ctaEl.textContent = value;
61
61
  break;
62
62
  case 'ctaLink':
63
- const ctaLinkEl = hero.querySelector('.jux-hero-cta');
63
+ const ctaLinkEl = hero.querySelector('.jux-hero-cta'); // ✅ BEM naming
64
64
  if (ctaLinkEl)
65
65
  ctaLinkEl.href = value;
66
66
  break;
@@ -70,7 +70,7 @@ export class Hero extends BaseComponent {
70
70
  hero.style.backgroundRepeat = value.repeat;
71
71
  break;
72
72
  case 'centered':
73
- hero.classList.toggle('jux-hero-centered', value);
73
+ hero.classList.toggle('jux-hero-centered', value); // ✅ BEM modifier
74
74
  break;
75
75
  }
76
76
  }
@@ -59,15 +59,15 @@ export class Hero extends BaseComponent<HeroState> {
59
59
  return CALLBACK_EVENTS;
60
60
  }
61
61
 
62
+ /* ═════════════════════════════════════════════════════════════════
63
+ * REACTIVE DOM UPDATES
64
+ * ═════════════════════════════════════════════════════════════════ */
65
+
62
66
  /**
63
- * Called automatically when state changes.
64
- * Extends BaseComponent's update() to handle Hero-specific properties.
67
+ * Called automatically by BaseComponent when state changes.
68
+ * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
65
69
  */
66
70
  update(prop: string, value: any): void {
67
- // First, call parent to handle base properties (visible, class, style, etc.)
68
- super.update(prop, value);
69
-
70
- // Then handle Hero-specific properties
71
71
  const hero = document.getElementById(this._id);
72
72
  if (!hero) return;
73
73
 
@@ -83,17 +83,17 @@ export class Hero extends BaseComponent<HeroState> {
83
83
  break;
84
84
 
85
85
  case 'content':
86
- const contentEl = hero.querySelector('.jux-hero-body');
86
+ const contentEl = hero.querySelector('.jux-hero-body'); // ✅ BEM naming
87
87
  if (contentEl) contentEl.innerHTML = value;
88
88
  break;
89
89
 
90
90
  case 'cta':
91
- const ctaEl = hero.querySelector('.jux-hero-cta') as HTMLElement;
91
+ const ctaEl = hero.querySelector('.jux-hero-cta') as HTMLElement; // ✅ BEM naming
92
92
  if (ctaEl) ctaEl.textContent = value;
93
93
  break;
94
94
 
95
95
  case 'ctaLink':
96
- const ctaLinkEl = hero.querySelector('.jux-hero-cta') as HTMLAnchorElement;
96
+ const ctaLinkEl = hero.querySelector('.jux-hero-cta') as HTMLAnchorElement; // ✅ BEM naming
97
97
  if (ctaLinkEl) ctaLinkEl.href = value;
98
98
  break;
99
99
 
@@ -104,7 +104,7 @@ export class Hero extends BaseComponent<HeroState> {
104
104
  break;
105
105
 
106
106
  case 'centered':
107
- hero.classList.toggle('jux-hero-centered', value);
107
+ hero.classList.toggle('jux-hero-centered', value); // ✅ BEM modifier
108
108
  break;
109
109
  }
110
110
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juxscript",
3
- "version": "1.1.17",
3
+ "version": "1.1.18",
4
4
  "type": "module",
5
5
  "description": "A JavaScript UX authorship platform",
6
6
  "main": "index.js",