@almadar/ui 2.22.1 → 2.23.0

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.
@@ -4,5 +4,7 @@ export interface AvlEffectProps extends AvlBaseProps {
4
4
  effectType: AvlEffectType;
5
5
  size?: number;
6
6
  label?: string;
7
+ /** V2: Render a category-colored background circle behind the icon. */
8
+ showBackground?: boolean;
7
9
  }
8
10
  export declare const AvlEffect: React.FC<AvlEffectProps>;
@@ -1,10 +1,15 @@
1
1
  import React from 'react';
2
2
  import type { AvlBaseProps } from './types';
3
+ import { type StateRole } from './types';
3
4
  export interface AvlStateProps extends AvlBaseProps {
4
5
  name?: string;
5
6
  isInitial?: boolean;
6
7
  isTerminal?: boolean;
7
8
  width?: number;
8
9
  height?: number;
10
+ /** V2: Role-based fill color. When set, overrides monochrome rendering. */
11
+ role?: StateRole;
12
+ /** V2: Number of transitions touching this state. Drives proportional width. */
13
+ transitionCount?: number;
9
14
  }
10
15
  export declare const AvlState: React.FC<AvlStateProps>;
@@ -1,5 +1,7 @@
1
1
  export type { AvlBaseProps, AvlEffectType, AvlFieldTypeKind, AvlPersistenceKind, AvlOperatorNamespace, } from './types';
2
2
  export { AVL_OPERATOR_COLORS, AVL_FIELD_TYPE_SHAPES } from './types';
3
+ export type { StateRole, EffectCategory } from './types';
4
+ export { STATE_COLORS, EFFECT_CATEGORY_COLORS, EFFECT_TYPE_TO_CATEGORY, CONNECTION_COLORS, getStateRole } from './types';
3
5
  export { AvlOrbital, type AvlOrbitalProps } from './AvlOrbital';
4
6
  export { AvlEntity, type AvlEntityProps } from './AvlEntity';
5
7
  export { AvlTrait, type AvlTraitProps } from './AvlTrait';
@@ -17,3 +17,37 @@ export type AvlPersistenceKind = 'persistent' | 'runtime' | 'singleton' | 'insta
17
17
  export type AvlOperatorNamespace = 'arithmetic' | 'comparison' | 'logic' | 'string' | 'collection' | 'time' | 'control' | 'async';
18
18
  export declare const AVL_OPERATOR_COLORS: Record<AvlOperatorNamespace, string>;
19
19
  export declare const AVL_FIELD_TYPE_SHAPES: Record<AvlFieldTypeKind, string>;
20
+ export type StateRole = 'initial' | 'terminal' | 'hub' | 'error' | 'default';
21
+ export declare const STATE_COLORS: Record<StateRole, {
22
+ fill: string;
23
+ border: string;
24
+ }>;
25
+ export type EffectCategory = 'ui' | 'data' | 'communication' | 'lifecycle' | 'control';
26
+ export declare const EFFECT_CATEGORY_COLORS: Record<EffectCategory, {
27
+ color: string;
28
+ bg: string;
29
+ }>;
30
+ export declare const EFFECT_TYPE_TO_CATEGORY: Record<AvlEffectType, EffectCategory>;
31
+ export declare const CONNECTION_COLORS: {
32
+ readonly forward: {
33
+ readonly color: "#1E293B";
34
+ readonly width: 2;
35
+ readonly dash: "none";
36
+ };
37
+ readonly backward: {
38
+ readonly color: "#94A3B8";
39
+ readonly width: 1.5;
40
+ readonly dash: "6 3";
41
+ };
42
+ readonly selfLoop: {
43
+ readonly color: "#CBD5E1";
44
+ readonly width: 1;
45
+ readonly dash: "3 2";
46
+ };
47
+ readonly emitListen: {
48
+ readonly color: "#F97316";
49
+ readonly width: 1.5;
50
+ readonly dash: "4 3";
51
+ };
52
+ };
53
+ export declare function getStateRole(name: string, isInitial?: boolean, isTerminal?: boolean, transitionCount?: number, maxTransitionCount?: number): StateRole;
@@ -15393,7 +15393,7 @@ var SplitSection = ({
15393
15393
  className
15394
15394
  ),
15395
15395
  padding: "lg",
15396
- children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-start", isImageLeft && "lg:flex-row-reverse"), children: [
15396
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
15397
15397
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
15398
15398
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
15399
15399
  ] })
@@ -15363,7 +15363,7 @@ var SplitSection = ({
15363
15363
  className
15364
15364
  ),
15365
15365
  padding: "lg",
15366
- children: /* @__PURE__ */ jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-start", isImageLeft && "lg:flex-row-reverse"), children: [
15366
+ children: /* @__PURE__ */ jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
15367
15367
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
15368
15368
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
15369
15369
  ] })
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export interface AvlSwimLaneProps {
3
+ listenedEvents: string[];
4
+ emittedEvents: string[];
5
+ centerWidth: number;
6
+ height: number;
7
+ color?: string;
8
+ children: React.ReactNode;
9
+ }
10
+ export declare const AvlSwimLane: React.FC<AvlSwimLaneProps>;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { type AvlEffectType } from '../../atoms/avl/types';
3
+ export interface AvlTransitionLaneEffect {
4
+ type: AvlEffectType | string;
5
+ }
6
+ export interface AvlTransitionLaneProps {
7
+ event: string;
8
+ guard?: string;
9
+ effects: AvlTransitionLaneEffect[];
10
+ width: number;
11
+ x?: number;
12
+ y?: number;
13
+ isBackward?: boolean;
14
+ isSelfLoop?: boolean;
15
+ color?: string;
16
+ onTransitionClick?: () => void;
17
+ }
18
+ export declare const AvlTransitionLane: React.FC<AvlTransitionLaneProps>;
@@ -4,6 +4,8 @@ export { AvlClosedCircuit, type AvlClosedCircuitProps, type AvlClosedCircuitStat
4
4
  export { AvlEmitListen, type AvlEmitListenProps } from './AvlEmitListen';
5
5
  export { AvlSlotMap, type AvlSlotMapProps, type AvlSlotMapSlot } from './AvlSlotMap';
6
6
  export { AvlExprTree, type AvlExprTreeProps, type AvlExprTreeNode } from './AvlExprTree';
7
+ export { AvlTransitionLane, type AvlTransitionLaneProps, type AvlTransitionLaneEffect } from './AvlTransitionLane';
8
+ export { AvlSwimLane, type AvlSwimLaneProps } from './AvlSwimLane';
7
9
  export { ringPositions, arcPath, radialPositions, gridPositions, curveControlPoint } from './avl-layout';
8
10
  export { Avl3DOrbitalNode, type Avl3DOrbitalNodeProps } from './Avl3DOrbitalNode';
9
11
  export { Avl3DCrossWire, type Avl3DCrossWireProps } from './Avl3DCrossWire';
@@ -1,8 +1,8 @@
1
1
  /**
2
- * AvlTraitScene - Zoom Level 3
2
+ * AvlTraitScene V2 - Zoom Level 3
3
3
  *
4
- * Shows a trait's state machine using ELK (elkjs) for automatic
5
- * node and edge label placement. No label overlap.
4
+ * Left-to-right horizontal flow with color-coded states,
5
+ * transition lanes, and swim lanes for emit/listen events.
6
6
  */
7
7
  import React from 'react';
8
8
  import type { TraitLevelData } from './avl-schema-parser';
@@ -1,11 +1,8 @@
1
1
  /**
2
- * AvlTransitionScene - Zoom Level 4
2
+ * AvlTransitionScene V2 - Zoom Level 4
3
3
  *
4
- * Shows a single transition in detail as a vertical flow:
5
- * FromState -> Event card -> Guard -> Effects -> ToState
6
- *
7
- * Labels are placed in cards between arrow segments,
8
- * never overlapping the lines.
4
+ * Card layout replacing vertical waterfall.
5
+ * Reads like a spec card: from to, trigger, guard, effects.
9
6
  */
10
7
  import React from 'react';
11
8
  import type { TransitionLevelData } from './avl-schema-parser';
@@ -2952,6 +2952,35 @@ var AVL_OPERATOR_COLORS = {
2952
2952
  control: "#E74C3C",
2953
2953
  async: "#E91E8F"
2954
2954
  };
2955
+ var STATE_COLORS = {
2956
+ initial: { fill: "#22C55E1F", border: "#16A34A" },
2957
+ terminal: { fill: "#EF44441F", border: "#DC2626" },
2958
+ hub: { fill: "#3B82F61F", border: "#2563EB" },
2959
+ error: { fill: "#F59E0B1F", border: "#D97706" },
2960
+ default: { fill: "#6B72801F", border: "#4B5563" }
2961
+ };
2962
+ var EFFECT_CATEGORY_COLORS = {
2963
+ ui: { color: "#8B5CF6", bg: "#8B5CF614" },
2964
+ data: { color: "#3B82F6", bg: "#3B82F614" },
2965
+ communication: { color: "#F97316", bg: "#F9731614" },
2966
+ lifecycle: { color: "#10B981", bg: "#10B98114" },
2967
+ control: { color: "#6B7280", bg: "#6B728014" }
2968
+ };
2969
+ var EFFECT_TYPE_TO_CATEGORY = {
2970
+ "render-ui": "ui",
2971
+ "navigate": "ui",
2972
+ "set": "data",
2973
+ "persist": "data",
2974
+ "fetch": "data",
2975
+ "emit": "communication",
2976
+ "notify": "communication",
2977
+ "call-service": "communication",
2978
+ "spawn": "lifecycle",
2979
+ "despawn": "lifecycle",
2980
+ "do": "control",
2981
+ "if": "control",
2982
+ "log": "control"
2983
+ };
2955
2984
  var AvlOrbital = ({
2956
2985
  cx = 0,
2957
2986
  cy = 0,
@@ -3223,19 +3252,33 @@ var AvlApplication = ({
3223
3252
  ] });
3224
3253
  };
3225
3254
  AvlApplication.displayName = "AvlApplication";
3255
+ function computeWidth(explicit, transitionCount) {
3256
+ if (explicit != null) return explicit;
3257
+ if (transitionCount == null) return 100;
3258
+ if (transitionCount >= 5) return 160;
3259
+ if (transitionCount >= 3) return 130;
3260
+ return 100;
3261
+ }
3226
3262
  var AvlState = ({
3227
3263
  x = 0,
3228
3264
  y = 0,
3229
3265
  name,
3230
3266
  isInitial = false,
3231
3267
  isTerminal = false,
3232
- width = 100,
3268
+ width: explicitWidth,
3233
3269
  height = 40,
3234
3270
  color = "var(--color-primary)",
3235
3271
  opacity = 1,
3236
- className
3272
+ className,
3273
+ role,
3274
+ transitionCount
3237
3275
  }) => {
3276
+ const width = computeWidth(explicitWidth, transitionCount);
3238
3277
  const rx = height / 2;
3278
+ const roleColors = role ? STATE_COLORS[role] : null;
3279
+ const fillColor = roleColors ? roleColors.fill : "none";
3280
+ const strokeColor = roleColors ? roleColors.border : color;
3281
+ const textColor = roleColors ? roleColors.border : color;
3239
3282
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { className, opacity, transform: `translate(${x},${y})`, children: [
3240
3283
  isInitial && /* @__PURE__ */ jsxRuntime.jsx(
3241
3284
  "circle",
@@ -3243,7 +3286,7 @@ var AvlState = ({
3243
3286
  cx: -16,
3244
3287
  cy: height / 2,
3245
3288
  r: 6,
3246
- fill: color
3289
+ fill: strokeColor
3247
3290
  }
3248
3291
  ),
3249
3292
  isTerminal && /* @__PURE__ */ jsxRuntime.jsx(
@@ -3256,7 +3299,7 @@ var AvlState = ({
3256
3299
  rx: rx + 4,
3257
3300
  ry: rx + 4,
3258
3301
  fill: "none",
3259
- stroke: color,
3302
+ stroke: strokeColor,
3260
3303
  strokeWidth: 1,
3261
3304
  opacity: 0.5
3262
3305
  }
@@ -3270,8 +3313,8 @@ var AvlState = ({
3270
3313
  height,
3271
3314
  rx,
3272
3315
  ry: rx,
3273
- fill: "none",
3274
- stroke: color,
3316
+ fill: fillColor,
3317
+ stroke: strokeColor,
3275
3318
  strokeWidth: 2
3276
3319
  }
3277
3320
  ),
@@ -3282,8 +3325,9 @@ var AvlState = ({
3282
3325
  y: height / 2,
3283
3326
  textAnchor: "middle",
3284
3327
  dominantBaseline: "central",
3285
- fill: color,
3286
- fontSize: 11,
3328
+ fill: textColor,
3329
+ fontSize: role ? 14 : 11,
3330
+ fontWeight: role ? 600 : 400,
3287
3331
  fontFamily: "inherit",
3288
3332
  children: name
3289
3333
  }
@@ -3552,18 +3596,27 @@ var AvlEffect = ({
3552
3596
  label,
3553
3597
  color = "var(--color-primary)",
3554
3598
  opacity = 1,
3555
- className
3599
+ className,
3600
+ showBackground = false
3556
3601
  }) => {
3602
+ const category = EFFECT_TYPE_TO_CATEGORY[effectType];
3603
+ const catColors = EFFECT_CATEGORY_COLORS[category];
3604
+ const iconColor = showBackground ? catColors.color : color;
3557
3605
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { className, opacity, children: [
3558
- effectIcon(effectType, x, y, size, color),
3606
+ showBackground && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3607
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: y, r: size * 1.2, fill: catColors.bg }),
3608
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: y, r: size * 1.2, fill: "none", stroke: catColors.color, strokeWidth: 0.5, opacity: 0.3 })
3609
+ ] }),
3610
+ effectIcon(effectType, x, y, size, iconColor),
3559
3611
  label && /* @__PURE__ */ jsxRuntime.jsx(
3560
3612
  "text",
3561
3613
  {
3562
3614
  x,
3563
3615
  y: y + size + 10,
3564
3616
  textAnchor: "middle",
3565
- fill: color,
3566
- fontSize: 8,
3617
+ fill: iconColor,
3618
+ fontSize: 11,
3619
+ fontWeight: 500,
3567
3620
  fontFamily: "inherit",
3568
3621
  opacity: 0.7,
3569
3622
  children: label
@@ -275,6 +275,7 @@ type AvlEffectType = 'render-ui' | 'set' | 'persist' | 'fetch' | 'emit' | 'navig
275
275
  type AvlFieldTypeKind = 'string' | 'number' | 'boolean' | 'date' | 'enum' | 'object' | 'array';
276
276
  type AvlPersistenceKind = 'persistent' | 'runtime' | 'singleton' | 'instance';
277
277
  type AvlOperatorNamespace = 'arithmetic' | 'comparison' | 'logic' | 'string' | 'collection' | 'time' | 'control' | 'async';
278
+ type StateRole = 'initial' | 'terminal' | 'hub' | 'error' | 'default';
278
279
 
279
280
  interface AvlOrbitalProps {
280
281
  cx?: number;
@@ -327,6 +328,10 @@ interface AvlStateProps extends AvlBaseProps {
327
328
  isTerminal?: boolean;
328
329
  width?: number;
329
330
  height?: number;
331
+ /** V2: Role-based fill color. When set, overrides monochrome rendering. */
332
+ role?: StateRole;
333
+ /** V2: Number of transitions touching this state. Drives proportional width. */
334
+ transitionCount?: number;
330
335
  }
331
336
  declare const AvlState: React.FC<AvlStateProps>;
332
337
 
@@ -364,6 +369,8 @@ interface AvlEffectProps extends AvlBaseProps {
364
369
  effectType: AvlEffectType;
365
370
  size?: number;
366
371
  label?: string;
372
+ /** V2: Render a category-colored background circle behind the icon. */
373
+ showBackground?: boolean;
367
374
  }
368
375
  declare const AvlEffect: React.FC<AvlEffectProps>;
369
376
 
@@ -2946,6 +2946,35 @@ var AVL_OPERATOR_COLORS = {
2946
2946
  control: "#E74C3C",
2947
2947
  async: "#E91E8F"
2948
2948
  };
2949
+ var STATE_COLORS = {
2950
+ initial: { fill: "#22C55E1F", border: "#16A34A" },
2951
+ terminal: { fill: "#EF44441F", border: "#DC2626" },
2952
+ hub: { fill: "#3B82F61F", border: "#2563EB" },
2953
+ error: { fill: "#F59E0B1F", border: "#D97706" },
2954
+ default: { fill: "#6B72801F", border: "#4B5563" }
2955
+ };
2956
+ var EFFECT_CATEGORY_COLORS = {
2957
+ ui: { color: "#8B5CF6", bg: "#8B5CF614" },
2958
+ data: { color: "#3B82F6", bg: "#3B82F614" },
2959
+ communication: { color: "#F97316", bg: "#F9731614" },
2960
+ lifecycle: { color: "#10B981", bg: "#10B98114" },
2961
+ control: { color: "#6B7280", bg: "#6B728014" }
2962
+ };
2963
+ var EFFECT_TYPE_TO_CATEGORY = {
2964
+ "render-ui": "ui",
2965
+ "navigate": "ui",
2966
+ "set": "data",
2967
+ "persist": "data",
2968
+ "fetch": "data",
2969
+ "emit": "communication",
2970
+ "notify": "communication",
2971
+ "call-service": "communication",
2972
+ "spawn": "lifecycle",
2973
+ "despawn": "lifecycle",
2974
+ "do": "control",
2975
+ "if": "control",
2976
+ "log": "control"
2977
+ };
2949
2978
  var AvlOrbital = ({
2950
2979
  cx = 0,
2951
2980
  cy = 0,
@@ -3217,19 +3246,33 @@ var AvlApplication = ({
3217
3246
  ] });
3218
3247
  };
3219
3248
  AvlApplication.displayName = "AvlApplication";
3249
+ function computeWidth(explicit, transitionCount) {
3250
+ if (explicit != null) return explicit;
3251
+ if (transitionCount == null) return 100;
3252
+ if (transitionCount >= 5) return 160;
3253
+ if (transitionCount >= 3) return 130;
3254
+ return 100;
3255
+ }
3220
3256
  var AvlState = ({
3221
3257
  x = 0,
3222
3258
  y = 0,
3223
3259
  name,
3224
3260
  isInitial = false,
3225
3261
  isTerminal = false,
3226
- width = 100,
3262
+ width: explicitWidth,
3227
3263
  height = 40,
3228
3264
  color = "var(--color-primary)",
3229
3265
  opacity = 1,
3230
- className
3266
+ className,
3267
+ role,
3268
+ transitionCount
3231
3269
  }) => {
3270
+ const width = computeWidth(explicitWidth, transitionCount);
3232
3271
  const rx = height / 2;
3272
+ const roleColors = role ? STATE_COLORS[role] : null;
3273
+ const fillColor = roleColors ? roleColors.fill : "none";
3274
+ const strokeColor = roleColors ? roleColors.border : color;
3275
+ const textColor = roleColors ? roleColors.border : color;
3233
3276
  return /* @__PURE__ */ jsxs("g", { className, opacity, transform: `translate(${x},${y})`, children: [
3234
3277
  isInitial && /* @__PURE__ */ jsx(
3235
3278
  "circle",
@@ -3237,7 +3280,7 @@ var AvlState = ({
3237
3280
  cx: -16,
3238
3281
  cy: height / 2,
3239
3282
  r: 6,
3240
- fill: color
3283
+ fill: strokeColor
3241
3284
  }
3242
3285
  ),
3243
3286
  isTerminal && /* @__PURE__ */ jsx(
@@ -3250,7 +3293,7 @@ var AvlState = ({
3250
3293
  rx: rx + 4,
3251
3294
  ry: rx + 4,
3252
3295
  fill: "none",
3253
- stroke: color,
3296
+ stroke: strokeColor,
3254
3297
  strokeWidth: 1,
3255
3298
  opacity: 0.5
3256
3299
  }
@@ -3264,8 +3307,8 @@ var AvlState = ({
3264
3307
  height,
3265
3308
  rx,
3266
3309
  ry: rx,
3267
- fill: "none",
3268
- stroke: color,
3310
+ fill: fillColor,
3311
+ stroke: strokeColor,
3269
3312
  strokeWidth: 2
3270
3313
  }
3271
3314
  ),
@@ -3276,8 +3319,9 @@ var AvlState = ({
3276
3319
  y: height / 2,
3277
3320
  textAnchor: "middle",
3278
3321
  dominantBaseline: "central",
3279
- fill: color,
3280
- fontSize: 11,
3322
+ fill: textColor,
3323
+ fontSize: role ? 14 : 11,
3324
+ fontWeight: role ? 600 : 400,
3281
3325
  fontFamily: "inherit",
3282
3326
  children: name
3283
3327
  }
@@ -3546,18 +3590,27 @@ var AvlEffect = ({
3546
3590
  label,
3547
3591
  color = "var(--color-primary)",
3548
3592
  opacity = 1,
3549
- className
3593
+ className,
3594
+ showBackground = false
3550
3595
  }) => {
3596
+ const category = EFFECT_TYPE_TO_CATEGORY[effectType];
3597
+ const catColors = EFFECT_CATEGORY_COLORS[category];
3598
+ const iconColor = showBackground ? catColors.color : color;
3551
3599
  return /* @__PURE__ */ jsxs("g", { className, opacity, children: [
3552
- effectIcon(effectType, x, y, size, color),
3600
+ showBackground && /* @__PURE__ */ jsxs(Fragment, { children: [
3601
+ /* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: size * 1.2, fill: catColors.bg }),
3602
+ /* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: size * 1.2, fill: "none", stroke: catColors.color, strokeWidth: 0.5, opacity: 0.3 })
3603
+ ] }),
3604
+ effectIcon(effectType, x, y, size, iconColor),
3553
3605
  label && /* @__PURE__ */ jsx(
3554
3606
  "text",
3555
3607
  {
3556
3608
  x,
3557
3609
  y: y + size + 10,
3558
3610
  textAnchor: "middle",
3559
- fill: color,
3560
- fontSize: 8,
3611
+ fill: iconColor,
3612
+ fontSize: 11,
3613
+ fontWeight: 500,
3561
3614
  fontFamily: "inherit",
3562
3615
  opacity: 0.7,
3563
3616
  children: label
@@ -4039,7 +4039,7 @@ var SplitSection = ({
4039
4039
  className
4040
4040
  ),
4041
4041
  padding: "lg",
4042
- children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-start", isImageLeft && "lg:flex-row-reverse"), children: [
4042
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
4043
4043
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
4044
4044
  /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
4045
4045
  ] })
@@ -4015,7 +4015,7 @@ var SplitSection = ({
4015
4015
  className
4016
4016
  ),
4017
4017
  padding: "lg",
4018
- children: /* @__PURE__ */ jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-start", isImageLeft && "lg:flex-row-reverse"), children: [
4018
+ children: /* @__PURE__ */ jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
4019
4019
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
4020
4020
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
4021
4021
  ] })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "2.22.1",
3
+ "version": "2.23.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",