juxscript 1.1.16 → 1.1.17

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,28 +42,12 @@ 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 (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
- * }
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.
65
49
  */
66
- abstract update(prop: string, value: any): void;
50
+ update(prop: string, value: any): void;
67
51
  /**
68
52
  * Set component style
69
53
  */
@@ -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":"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"}
@@ -40,6 +40,44 @@ 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
+ }
43
81
  /* ═════════════════════════════════════════════════════════════════
44
82
  * COMMON FLUENT API (Inherited by all components)
45
83
  * ═════════════════════════════════════════════════════════════════ */
@@ -78,28 +78,47 @@ export abstract class BaseComponent<TState extends BaseState = BaseState> {
78
78
  abstract render(targetId?: string): this;
79
79
 
80
80
  /**
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
- * }
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.
101
85
  */
102
- abstract update(prop: string, value: any): void;
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
+ }
103
122
 
104
123
  /* ═════════════════════════════════════════════════════════════════
105
124
  * 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 by BaseComponent when state changes.
40
- * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
39
+ * Called automatically when state changes.
40
+ * Extends BaseComponent's update() to handle Hero-specific properties.
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;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"}
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"}
@@ -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
- * ═════════════════════════════════════════════════════════════════ */
33
30
  /**
34
- * Called automatically by BaseComponent when state changes.
35
- * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
31
+ * Called automatically when state changes.
32
+ * Extends BaseComponent's update() to handle Hero-specific properties.
36
33
  */
37
34
  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'); // ✅ BEM naming
53
+ const contentEl = hero.querySelector('.jux-hero-body');
54
54
  if (contentEl)
55
55
  contentEl.innerHTML = value;
56
56
  break;
57
57
  case 'cta':
58
- const ctaEl = hero.querySelector('.jux-hero-cta'); // ✅ BEM naming
58
+ const ctaEl = hero.querySelector('.jux-hero-cta');
59
59
  if (ctaEl)
60
60
  ctaEl.textContent = value;
61
61
  break;
62
62
  case 'ctaLink':
63
- const ctaLinkEl = hero.querySelector('.jux-hero-cta'); // ✅ BEM naming
63
+ const ctaLinkEl = hero.querySelector('.jux-hero-cta');
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); // ✅ BEM modifier
73
+ hero.classList.toggle('jux-hero-centered', value);
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
-
66
62
  /**
67
- * Called automatically by BaseComponent when state changes.
68
- * Centralizes DOM manipulation so setters don't have to drill/repeat logic.
63
+ * Called automatically when state changes.
64
+ * Extends BaseComponent's update() to handle Hero-specific properties.
69
65
  */
70
66
  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'); // ✅ BEM naming
86
+ const contentEl = hero.querySelector('.jux-hero-body');
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; // ✅ BEM naming
91
+ const ctaEl = hero.querySelector('.jux-hero-cta') as HTMLElement;
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; // ✅ BEM naming
96
+ const ctaLinkEl = hero.querySelector('.jux-hero-cta') as HTMLAnchorElement;
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); // ✅ BEM modifier
107
+ hero.classList.toggle('jux-hero-centered', value);
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.16",
3
+ "version": "1.1.17",
4
4
  "type": "module",
5
5
  "description": "A JavaScript UX authorship platform",
6
6
  "main": "index.js",