juxscript 1.1.108 → 1.1.109

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,78 +1,37 @@
1
1
  import { BaseComponent, BaseState } from '../base/BaseComponent.js';
2
+ import { LayoutExtensions } from '../base/LayoutExtensions.js';
2
3
  export interface StackOptions {
3
- spacing?: 'none' | 'tight' | 'default' | 'loose';
4
+ spacing?: 'none' | 'tight' | 'normal' | 'loose';
4
5
  align?: 'start' | 'center' | 'end' | 'stretch';
5
6
  justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
6
7
  divider?: boolean;
7
8
  responsive?: boolean;
8
- class?: string;
9
- style?: string;
10
9
  }
11
- export interface ChildStyleFunction {
12
- (index: number): string;
13
- }
14
- interface StackState extends BaseState {
10
+ export interface StackState extends BaseState {
15
11
  spacing: string;
16
- align?: string;
17
- justify?: string;
12
+ align: string;
13
+ justify: string;
18
14
  divider: boolean;
19
15
  responsive: boolean;
20
- children: Array<any>;
21
- childStyles?: ChildStyleFunction | string[];
22
16
  }
23
- /**
24
- * BaseStack - Foundation for all stack layout components
25
- */
26
17
  export declare abstract class BaseStack extends BaseComponent<StackState> {
18
+ protected children: Record<string, any> | any[];
27
19
  protected abstract baseClassName: string;
28
- private _inlineStyles;
29
- _container: HTMLElement | null;
20
+ protected _container: HTMLElement | null;
21
+ protected _childStyleFunction: ((index: number) => string) | null;
30
22
  constructor(id: string, children: Record<string, any> | any[], options?: StackOptions);
31
23
  protected getTriggerEvents(): readonly string[];
32
24
  protected getCallbackEvents(): readonly string[];
33
- spacing(value: 'none' | 'tight' | 'default' | 'loose'): this;
25
+ spacing(value: 'none' | 'tight' | 'normal' | 'loose'): this;
34
26
  align(value: 'start' | 'center' | 'end' | 'stretch'): this;
35
27
  justify(value: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'): this;
36
- divider(value?: boolean): this;
37
- responsive(value?: boolean): this;
38
- private _addStyle;
39
- private _updateStyleAttribute;
40
- padding(value: string): this;
41
- margin(value: string): this;
42
- border(value: string): this;
43
- borderRadius(value: string): this;
44
- width(value: string): this;
45
- height(value: string): this;
46
- minWidth(value: string): this;
47
- maxWidth(value: string): this;
48
- minHeight(value: string): this;
49
- maxHeight(value: string): this;
50
- background(value: string): this;
51
- backgroundColor(value: string): this;
52
- boxShadow(value: string): this;
53
- opacity(value: string | number): this;
54
- position(value: string): this;
55
- top(value: string): this;
56
- right(value: string): this;
57
- bottom(value: string): this;
58
- left(value: string): this;
59
- zIndex(value: string | number): this;
60
- overflow(value: string): this;
61
- overflowX(value: string): this;
62
- overflowY(value: string): this;
63
- display(value: string): this;
64
- cursor(value: string): this;
65
- transform(value: string): this;
66
- transformOrigin(value: string): this;
67
- transition(value: string): this;
68
- animation(value: string): this;
69
- childStyle(stylesOrFunction: string[] | ChildStyleFunction): this;
70
- cascade(baseOffset?: number, axis?: 'x' | 'y' | 'both' | 'horizontal' | 'vertical' | 'xy'): this;
71
- fan(angle?: number, origin?: string): this;
72
- scaleProgressive(startScale?: number, step?: number, origin?: string): this;
73
- fade(startOpacity?: number, step?: number): this;
74
- blur(startBlur?: number, step?: number): this;
75
- stagger(baseDelay?: number): this;
28
+ divider(value: boolean): this;
29
+ responsive(value: boolean): this;
30
+ childStyle(fn: (index: number) => string): this;
31
+ protected getChildStyle(index: number): string;
32
+ fade(topOpacity?: number, step?: number): this;
33
+ cascade(offset?: number, direction?: 'horizontal' | 'vertical' | 'both'): this;
34
+ scaleProgressive(topScale?: number, step?: number): this;
76
35
  fadeIn(): this;
77
36
  slideIn(direction?: 'up' | 'down' | 'left' | 'right'): this;
78
37
  scaleIn(): this;
@@ -113,9 +72,9 @@ export declare abstract class BaseStack extends BaseComponent<StackState> {
113
72
  animateStagger(animation?: 'fade' | 'slide' | 'scale' | 'bounce', direction?: 'up' | 'down' | 'left' | 'right'): this;
114
73
  protected buildClasses(): string;
115
74
  protected renderChild(child: any, index: number): HTMLElement;
116
- private getChildStyle;
117
75
  render(targetId?: string | HTMLElement | BaseComponent<any>): this;
118
76
  update(prop: string, value: any): void;
119
77
  }
120
- export {};
78
+ export interface BaseStack extends LayoutExtensions {
79
+ }
121
80
  //# sourceMappingURL=BaseStack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseStack.d.ts","sourceRoot":"","sources":["BaseStack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseStack.d.ts","sourceRoot":"","sources":["BaseStack.ts"],"names":[],"mappings":"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"}
@@ -2,31 +2,25 @@ import { BaseComponent } from '../base/BaseComponent.js';
2
2
  // Event definitions
3
3
  const TRIGGER_EVENTS = [];
4
4
  const CALLBACK_EVENTS = [];
5
- /**
6
- * BaseStack - Foundation for all stack layout components
7
- */
8
5
  export class BaseStack extends BaseComponent {
9
6
  constructor(id, children, options = {}) {
10
- const childArray = Array.isArray(children)
11
- ? children
12
- : Object.values(children);
13
7
  super(id, {
14
8
  visible: true,
15
9
  disabled: false,
16
10
  loading: false,
17
- class: options.class ?? '',
18
- style: options.style ?? '',
11
+ class: '',
12
+ style: '',
19
13
  attributes: {},
20
- spacing: options.spacing ?? 'default',
21
- align: options.align,
22
- justify: options.justify,
23
- divider: options.divider ?? false,
24
- responsive: options.responsive ?? false,
25
- children: childArray,
26
- childStyles: undefined
14
+ spacing: options.spacing || 'normal',
15
+ align: options.align || 'start',
16
+ justify: options.justify || 'start',
17
+ divider: options.divider || false,
18
+ responsive: options.responsive || false
27
19
  });
28
- this._inlineStyles = new Map();
29
- this._container = null; // ✅ Make public for nesting
20
+ this.children = children;
21
+ this._container = null;
22
+ this._childStyleFunction = null;
23
+ // ✅ Layout extensions are automatically applied in BaseComponent constructor
30
24
  }
31
25
  getTriggerEvents() {
32
26
  return TRIGGER_EVENTS;
@@ -39,130 +33,78 @@ export class BaseStack extends BaseComponent {
39
33
  * ═════════════════════════════════════════════════════════════════ */
40
34
  spacing(value) {
41
35
  this.state.spacing = value;
36
+ if (this._container) {
37
+ this._container.className = this.buildClasses();
38
+ }
42
39
  return this;
43
40
  }
44
41
  align(value) {
45
42
  this.state.align = value;
43
+ if (this._container) {
44
+ this._container.className = this.buildClasses();
45
+ }
46
46
  return this;
47
47
  }
48
48
  justify(value) {
49
49
  this.state.justify = value;
50
+ if (this._container) {
51
+ this._container.className = this.buildClasses();
52
+ }
50
53
  return this;
51
54
  }
52
- divider(value = true) {
55
+ divider(value) {
53
56
  this.state.divider = value;
57
+ if (this._container) {
58
+ this._container.className = this.buildClasses();
59
+ }
54
60
  return this;
55
61
  }
56
- responsive(value = true) {
62
+ responsive(value) {
57
63
  this.state.responsive = value;
64
+ if (this._container) {
65
+ this._container.className = this.buildClasses();
66
+ }
58
67
  return this;
59
68
  }
60
69
  /* ═════════════════════════════════════════════════════════════════
61
- * FLUENT STYLE API
70
+ * CHILD STYLING
62
71
  * ═════════════════════════════════════════════════════════════════ */
63
- _addStyle(property, value) {
64
- this._inlineStyles.set(property, value);
65
- this._updateStyleAttribute();
72
+ childStyle(fn) {
73
+ this._childStyleFunction = fn;
66
74
  return this;
67
75
  }
68
- _updateStyleAttribute() {
69
- const styleString = Array.from(this._inlineStyles.entries())
70
- .map(([prop, val]) => `${prop}: ${val}`)
71
- .join('; ');
72
- this.state.style = styleString;
73
- }
74
- padding(value) { return this._addStyle('padding', value); }
75
- margin(value) { return this._addStyle('margin', value); }
76
- border(value) { return this._addStyle('border', value); }
77
- borderRadius(value) { return this._addStyle('border-radius', value); }
78
- width(value) { return this._addStyle('width', value); }
79
- height(value) { return this._addStyle('height', value); }
80
- minWidth(value) { return this._addStyle('min-width', value); }
81
- maxWidth(value) { return this._addStyle('max-width', value); }
82
- minHeight(value) { return this._addStyle('min-height', value); }
83
- maxHeight(value) { return this._addStyle('max-height', value); }
84
- background(value) { return this._addStyle('background', value); }
85
- backgroundColor(value) { return this._addStyle('background-color', value); }
86
- boxShadow(value) { return this._addStyle('box-shadow', value); }
87
- opacity(value) { return this._addStyle('opacity', String(value)); }
88
- position(value) { return this._addStyle('position', value); }
89
- top(value) { return this._addStyle('top', value); }
90
- right(value) { return this._addStyle('right', value); }
91
- bottom(value) { return this._addStyle('bottom', value); }
92
- left(value) { return this._addStyle('left', value); }
93
- zIndex(value) { return this._addStyle('z-index', String(value)); }
94
- overflow(value) { return this._addStyle('overflow', value); }
95
- overflowX(value) { return this._addStyle('overflow-x', value); }
96
- overflowY(value) { return this._addStyle('overflow-y', value); }
97
- display(value) { return this._addStyle('display', value); }
98
- cursor(value) { return this._addStyle('cursor', value); }
99
- transform(value) { return this._addStyle('transform', value); }
100
- transformOrigin(value) { return this._addStyle('transform-origin', value); }
101
- transition(value) { return this._addStyle('transition', value); }
102
- animation(value) { return this._addStyle('animation', value); }
76
+ getChildStyle(index) {
77
+ return this._childStyleFunction ? this._childStyleFunction(index) : '';
78
+ }
103
79
  /* ═════════════════════════════════════════════════════════════════
104
- * PROGRESSIVE CHILD STYLING
80
+ * Z-STACK SPECIFIC EFFECTS
105
81
  * ═════════════════════════════════════════════════════════════════ */
106
- childStyle(stylesOrFunction) {
107
- this.state.childStyles = stylesOrFunction;
82
+ fade(topOpacity = 1, step = 0.2) {
83
+ this._childStyleFunction = (index) => `opacity: ${Math.max(0, topOpacity - index * step)};`;
108
84
  return this;
109
85
  }
110
- cascade(baseOffset = 20, axis = 'both') {
111
- this.state.childStyles = (index) => {
112
- const offset = baseOffset * index;
113
- if (axis === 'horizontal' || axis === 'x') {
114
- return `margin-left: ${offset}px;`;
86
+ cascade(offset = 20, direction = 'both') {
87
+ this._childStyleFunction = (index) => {
88
+ if (direction === 'horizontal') {
89
+ return `margin-left: ${index * offset}px;`;
115
90
  }
116
- else if (axis === 'vertical' || axis === 'y') {
117
- return `margin-top: ${offset}px;`;
91
+ else if (direction === 'vertical') {
92
+ return `margin-top: ${index * offset}px;`;
118
93
  }
119
94
  else {
120
- return `margin-left: ${offset}px; margin-top: ${offset}px;`;
95
+ return `margin-left: ${index * offset}px; margin-top: ${index * offset}px;`;
121
96
  }
122
97
  };
123
98
  return this;
124
99
  }
125
- fan(angle = 5, origin = 'bottom center') {
126
- this.state.childStyles = (index) => {
127
- const rotation = angle * index;
128
- return `transform: rotate(${rotation}deg); transform-origin: ${origin};`;
129
- };
130
- return this;
131
- }
132
- scaleProgressive(startScale = 1, step = 0.05, origin = 'center') {
133
- this.state.childStyles = (index) => {
134
- const scale = startScale - (step * index);
135
- return `transform: scale(${scale}); transform-origin: ${origin};`;
136
- };
137
- return this;
138
- }
139
- fade(startOpacity = 1, step = 0.15) {
140
- this.state.childStyles = (index) => {
141
- const opacity = Math.max(0.1, startOpacity - (step * index));
142
- return `opacity: ${opacity};`;
143
- };
144
- return this;
145
- }
146
- blur(startBlur = 0, step = 2) {
147
- this.state.childStyles = (index) => {
148
- const blur = startBlur + (step * index);
149
- return `filter: blur(${blur}px);`;
150
- };
151
- return this;
152
- }
153
- stagger(baseDelay = 100) {
154
- this.state.childStyles = (index) => {
155
- const delay = baseDelay * index;
156
- return `animation-delay: ${delay}ms;`;
157
- };
100
+ scaleProgressive(topScale = 1, step = 0.1) {
101
+ this._childStyleFunction = (index) => `transform: scale(${Math.max(0.1, topScale - index * step)});`;
158
102
  return this;
159
103
  }
160
104
  /* ═════════════════════════════════════════════════════════════════
161
105
  * ANIMATION API (Fluent)
162
106
  * ═════════════════════════════════════════════════════════════════ */
163
- /* ─────────────────────────────────────────────────────────────────
164
- * Stack-Level Animations (Animate the container)
165
- * ───────────────────────────────────────────────────────────────── */
107
+ /* Stack-Level Animations */
166
108
  fadeIn() {
167
109
  return this.addClass('jux-stack-fade-in');
168
110
  }
@@ -193,9 +135,7 @@ export class BaseStack extends BaseComponent {
193
135
  glow() {
194
136
  return this.addClass('jux-stack-glow');
195
137
  }
196
- /* ─────────────────────────────────────────────────────────────────
197
- * Item-Level Animations (Animate the children)
198
- * ───────────────────────────────────────────────────────────────── */
138
+ /* Item-Level Animations */
199
139
  fadeInItems() {
200
140
  return this.addClass('jux-stack-fade-in-items');
201
141
  }
@@ -226,9 +166,7 @@ export class BaseStack extends BaseComponent {
226
166
  glowItems() {
227
167
  return this.addClass('jux-stack-glow-items');
228
168
  }
229
- /* ─────────────────────────────────────────────────────────────────
230
- * Speed Modifiers (Control animation duration)
231
- * ───────────────────────────────────────────────────────────────── */
169
+ /* Speed Modifiers */
232
170
  instant() {
233
171
  return this.addClass('jux-stack-instant');
234
172
  }
@@ -244,9 +182,7 @@ export class BaseStack extends BaseComponent {
244
182
  slower() {
245
183
  return this.addClass('jux-stack-slower');
246
184
  }
247
- /* ─────────────────────────────────────────────────────────────────
248
- * Timing Functions (Control animation easing)
249
- * ───────────────────────────────────────────────────────────────── */
185
+ /* Timing Functions */
250
186
  linear() {
251
187
  return this.addClass('jux-stack-linear');
252
188
  }
@@ -268,15 +204,11 @@ export class BaseStack extends BaseComponent {
268
204
  elasticTiming() {
269
205
  return this.addClass('jux-stack-elastic-timing');
270
206
  }
271
- /* ─────────────────────────────────────────────────────────────────
272
- * Delay Control
273
- * ───────────────────────────────────────────────────────────────── */
207
+ /* Delay Control */
274
208
  delay(ms) {
275
209
  return this.addClass(`jux-stack-delay-${ms}`);
276
210
  }
277
- /* ─────────────────────────────────────────────────────────────────
278
- * Stagger & Interactive
279
- * ───────────────────────────────────────────────────────────────── */
211
+ /* Stagger & Interactive */
280
212
  staggered() {
281
213
  return this.addClass('jux-stack-stagger');
282
214
  }
@@ -289,9 +221,7 @@ export class BaseStack extends BaseComponent {
289
221
  smoothItems() {
290
222
  return this.addClass('jux-stack-smooth-items');
291
223
  }
292
- /* ─────────────────────────────────────────────────────────────────
293
- * Convenience Combos
294
- * ───────────────────────────────────────────────────────────────── */
224
+ /* Convenience Combos */
295
225
  animateStagger(animation = 'fade', direction) {
296
226
  if (animation === 'slide' && direction) {
297
227
  this.slideIn(direction);
@@ -308,18 +238,18 @@ export class BaseStack extends BaseComponent {
308
238
  return this.staggered();
309
239
  }
310
240
  /* ═════════════════════════════════════════════════════════════════
311
- * RENDER HELPERS
241
+ * RENDER
312
242
  * ═════════════════════════════════════════════════════════════════ */
313
243
  buildClasses() {
314
- const { spacing, align, justify, divider, responsive } = this.state;
244
+ const { spacing, align, justify, divider, responsive, class: userClass } = this.state;
315
245
  const classes = [this.baseClassName];
316
- if (spacing !== 'default') {
246
+ if (spacing !== 'normal') {
317
247
  classes.push(`${this.baseClassName}-${spacing}`);
318
248
  }
319
- if (align) {
249
+ if (align !== 'start') {
320
250
  classes.push(`jux-stack-${align}`);
321
251
  }
322
- if (justify) {
252
+ if (justify !== 'start') {
323
253
  classes.push(`jux-stack-justify-${justify}`);
324
254
  }
325
255
  if (divider) {
@@ -328,8 +258,8 @@ export class BaseStack extends BaseComponent {
328
258
  if (responsive) {
329
259
  classes.push(`${this.baseClassName}-responsive`);
330
260
  }
331
- if (this.state.class) {
332
- classes.push(this.state.class);
261
+ if (userClass) {
262
+ classes.push(userClass);
333
263
  }
334
264
  return classes.join(' ');
335
265
  }
@@ -339,12 +269,12 @@ export class BaseStack extends BaseComponent {
339
269
  if (child && typeof child === 'object' && '_container' in child && child._container instanceof HTMLElement) {
340
270
  childElement = child._container;
341
271
  }
342
- // ✅ Priority 2: Check if it's a JUX Component (has render method and container property)
272
+ // ✅ Priority 2: Check if it's a JUX Component (has render method)
343
273
  else if (child && typeof child === 'object' && typeof child.render === 'function') {
344
274
  // Create temporary container to render into
345
275
  const tempContainer = document.createElement('div');
346
- tempContainer.style.display = 'contents'; // Don't add extra wrapper
347
- // Render the component into temp container
276
+ tempContainer.style.display = 'contents';
277
+ // Render the component
348
278
  child.render(tempContainer);
349
279
  // Extract the rendered element
350
280
  if (child.container && child.container.firstElementChild) {
@@ -357,7 +287,7 @@ export class BaseStack extends BaseComponent {
357
287
  childElement = tempContainer;
358
288
  }
359
289
  }
360
- // ✅ Priority 3: Check if it's already a DOM element
290
+ // ✅ Priority 3: Already a DOM element
361
291
  else if (child instanceof HTMLElement) {
362
292
  childElement = child;
363
293
  }
@@ -379,41 +309,28 @@ export class BaseStack extends BaseComponent {
379
309
  }
380
310
  return childElement;
381
311
  }
382
- getChildStyle(index) {
383
- const { childStyles } = this.state;
384
- if (!childStyles)
385
- return '';
386
- if (typeof childStyles === 'function') {
387
- return childStyles(index);
388
- }
389
- if (Array.isArray(childStyles)) {
390
- return childStyles[index] || '';
391
- }
392
- return '';
393
- }
394
- /* ═════════════════════════════════════════════════════════════════
395
- * RENDER
396
- * ═════════════════════════════════════════════════════════════════ */
397
312
  render(targetId) {
398
313
  const container = this._setupContainer(targetId);
399
- const wrapper = document.createElement('div');
400
- wrapper.className = this.buildClasses();
401
- wrapper.id = this._id;
314
+ const stackDiv = document.createElement('div');
315
+ stackDiv.id = this._id;
316
+ stackDiv.className = this.buildClasses();
402
317
  if (this.state.style) {
403
- wrapper.setAttribute('style', this.state.style);
318
+ stackDiv.setAttribute('style', this.state.style);
404
319
  }
405
- // Render all children
406
- this.state.children.forEach((child, index) => {
320
+ // Handle both array and object children
321
+ const childArray = Array.isArray(this.children)
322
+ ? this.children
323
+ : Object.values(this.children);
324
+ childArray.forEach((child, index) => {
407
325
  const childEl = this.renderChild(child, index);
408
- wrapper.appendChild(childEl);
326
+ stackDiv.appendChild(childEl);
409
327
  });
410
- this._wireStandardEvents(wrapper);
411
- // ✅ Store wrapper as _container for nesting
412
- this._container = wrapper;
413
- container.appendChild(wrapper);
328
+ this._wireStandardEvents(stackDiv);
329
+ container.appendChild(stackDiv);
330
+ this._container = stackDiv;
414
331
  return this;
415
332
  }
416
333
  update(prop, value) {
417
- // Stack components are typically static
334
+ // Stacks don't need reactive updates
418
335
  }
419
336
  }