@almadar/ui 5.125.0 → 5.126.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.
@@ -0,0 +1,1086 @@
1
+ import React from 'react';
2
+ import { EventKey, EventPayload, AssetUrl, Asset } from '@almadar/core';
3
+ import { LucideIcon } from 'lucide-react';
4
+
5
+ /**
6
+ * Box Component
7
+ *
8
+ * A versatile layout primitive that provides spacing, background, border, and shadow controls.
9
+ * Think of it as a styled div with consistent design tokens.
10
+ */
11
+
12
+ type BoxPadding = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
13
+ type BoxMargin = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "auto";
14
+ type BoxBg = "transparent" | "primary" | "secondary" | "muted" | "accent" | "surface" | "overlay";
15
+ type BoxRounded = "none" | "sm" | "md" | "lg" | "xl" | "2xl" | "full";
16
+ type BoxShadow = "none" | "sm" | "md" | "lg" | "xl";
17
+ interface BoxProps extends React.HTMLAttributes<HTMLDivElement> {
18
+ /** Additional CSS classes applied to the root element. */
19
+ className?: string;
20
+ /** Data-theme attribute applied to the root element for CSS theme scoping (e.g. almadar-website-dark). */
21
+ 'data-theme'?: string;
22
+ /** Padding on all sides */
23
+ padding?: BoxPadding;
24
+ /** Horizontal padding (overrides padding for x-axis) */
25
+ paddingX?: BoxPadding;
26
+ /** Vertical padding (overrides padding for y-axis) */
27
+ paddingY?: BoxPadding;
28
+ /** Margin on all sides */
29
+ margin?: BoxMargin;
30
+ /** Horizontal margin */
31
+ marginX?: BoxMargin;
32
+ /** Vertical margin */
33
+ marginY?: BoxMargin;
34
+ /** Background color */
35
+ bg?: BoxBg;
36
+ /** Show border */
37
+ border?: boolean;
38
+ /** Border radius */
39
+ rounded?: BoxRounded;
40
+ /** Box shadow */
41
+ shadow?: BoxShadow;
42
+ /** Display type */
43
+ display?: "block" | "inline" | "inline-block" | "flex" | "inline-flex" | "grid";
44
+ /** Fill available width */
45
+ fullWidth?: boolean;
46
+ /** Fill available height */
47
+ fullHeight?: boolean;
48
+ /** Overflow behavior */
49
+ overflow?: "auto" | "hidden" | "visible" | "scroll";
50
+ /** Position */
51
+ position?: "relative" | "absolute" | "fixed" | "sticky";
52
+ /** HTML element to render as */
53
+ as?: React.ElementType;
54
+ /** Declarative event name — emits UI:{action} via eventBus on click */
55
+ action?: EventKey;
56
+ /** Payload to include with the action event */
57
+ actionPayload?: EventPayload;
58
+ /** Declarative hover event — emits UI:{hoverEvent} with { hovered: true/false } on mouseEnter/mouseLeave */
59
+ hoverEvent?: EventKey;
60
+ /** When true (default), a touch/pen tap also fires `hoverEvent` (toggling hovered) so hover-only reveals work on touch. */
61
+ tapReveal?: boolean;
62
+ /** Maximum width (CSS value, e.g., "550px", "80rem") */
63
+ maxWidth?: string;
64
+ /** Children elements */
65
+ children?: React.ReactNode;
66
+ }
67
+ /**
68
+ * Box - Versatile container component with design tokens
69
+ */
70
+ declare const Box: React.ForwardRefExoticComponent<BoxProps & React.RefAttributes<HTMLDivElement>>;
71
+
72
+ /**
73
+ * Stack Component
74
+ *
75
+ * A layout primitive for arranging children in a vertical or horizontal stack with consistent spacing.
76
+ * Includes convenience exports VStack and HStack for common use cases.
77
+ */
78
+
79
+ type StackDirection = "horizontal" | "vertical";
80
+ type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
81
+ type StackAlign = "start" | "center" | "end" | "stretch" | "baseline";
82
+ type StackJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
83
+ interface StackProps {
84
+ /** Stack direction */
85
+ direction?: StackDirection;
86
+ /** Gap between children */
87
+ gap?: StackGap;
88
+ /** Align items on the cross axis */
89
+ align?: StackAlign;
90
+ /** Justify items on the main axis */
91
+ justify?: StackJustify;
92
+ /** Allow items to wrap */
93
+ wrap?: boolean;
94
+ /** Reverse the order of children */
95
+ reverse?: boolean;
96
+ /** Fill available space (flex: 1) */
97
+ flex?: boolean;
98
+ /** Custom class name */
99
+ className?: string;
100
+ /** Inline styles */
101
+ style?: React.CSSProperties;
102
+ /** Children elements */
103
+ children?: React.ReactNode;
104
+ /** HTML element to render as */
105
+ as?: React.ElementType;
106
+ /** Click handler */
107
+ onClick?: (e: React.MouseEvent) => void;
108
+ /** Keyboard handler */
109
+ onKeyDown?: (e: React.KeyboardEvent) => void;
110
+ /** Role for accessibility */
111
+ role?: string;
112
+ /** Tab index for focus management */
113
+ tabIndex?: number;
114
+ /** Declarative event name — emits UI:{action} via eventBus on click */
115
+ action?: EventKey;
116
+ /** Payload to include with the action event */
117
+ actionPayload?: EventPayload;
118
+ /** When true, horizontal stacks flip to vertical below the md breakpoint (768px) */
119
+ responsive?: boolean;
120
+ }
121
+ /**
122
+ * VStack - Vertical stack shorthand
123
+ */
124
+ interface VStackProps extends Omit<StackProps, "direction"> {
125
+ }
126
+ declare const VStack: React.FC<VStackProps>;
127
+ /**
128
+ * HStack - Horizontal stack shorthand
129
+ */
130
+ interface HStackProps extends Omit<StackProps, "direction"> {
131
+ }
132
+ declare const HStack: React.FC<HStackProps>;
133
+
134
+ /**
135
+ * Typography Atom Component
136
+ *
137
+ * Text elements following the KFlow design system with theme-aware styling.
138
+ */
139
+
140
+ type TypographyVariant = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "heading" | "subheading" | "body1" | "body2" | "body" | "caption" | "overline" | "small" | "large" | "label";
141
+ /** `none` = no size override — the variant's baked size applies. */
142
+ type TypographySize = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
143
+ interface TypographyProps {
144
+ /** Typography variant */
145
+ variant?: TypographyVariant;
146
+ /** Heading level (1-6) - alternative to variant for headings */
147
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
148
+ /** Text color */
149
+ color?: "primary" | "secondary" | "muted" | "error" | "success" | "warning" | "inherit";
150
+ /** Text alignment */
151
+ align?: "left" | "center" | "right";
152
+ /** Font weight override — `none` = no override, the variant's baked weight applies */
153
+ weight?: "none" | "light" | "normal" | "medium" | "semibold" | "bold";
154
+ /** Font size override */
155
+ size?: TypographySize;
156
+ /** Truncate with ellipsis (single line) */
157
+ truncate?: boolean;
158
+ /** Overflow handling mode */
159
+ overflow?: "visible" | "hidden" | "wrap" | "clamp-2" | "clamp-3";
160
+ /** Custom HTML element */
161
+ as?: keyof React.JSX.IntrinsicElements;
162
+ /** HTML id attribute */
163
+ id?: string;
164
+ /** Additional class names */
165
+ className?: string;
166
+ /** Inline style */
167
+ style?: React.CSSProperties;
168
+ /** Text content (alternative to children) */
169
+ content?: React.ReactNode;
170
+ /** Children elements */
171
+ children?: React.ReactNode;
172
+ }
173
+ declare const Typography: React.FC<TypographyProps>;
174
+
175
+ /**
176
+ * Cross-cutting atom-level prop shapes shared across the design system.
177
+ */
178
+
179
+ /**
180
+ * Canonical semantic color palette. Values are the Tailwind / CSS-var token
181
+ * names that every component in the design system understands. Prefer this
182
+ * over a bare `string` for any `color` or `variant` prop.
183
+ */
184
+ type ColorToken = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'muted';
185
+ /**
186
+ * A labelled link/CTA used by marketing molecules (HeroSection, CTABanner,
187
+ * PricingCard) for their primary/secondary call-to-action props.
188
+ */
189
+ type LinkAction = {
190
+ label: string;
191
+ href: string;
192
+ };
193
+ /** An image with its required alt text. */
194
+ type ImageSource = {
195
+ src: AssetUrl;
196
+ alt: string;
197
+ };
198
+
199
+ /**
200
+ * Icon Atom Component
201
+ *
202
+ * Renders an icon from the active icon family (Layer 1 Iconography axis —
203
+ * see lib/iconFamily.ts). Canonical names are lucide kebab-case; the resolver
204
+ * dispatches to phosphor / tabler / fa-solid when `--icon-family` selects them,
205
+ * re-rendering automatically on theme switch.
206
+ *
207
+ * Supports two APIs:
208
+ * - `icon` prop: Pass a LucideIcon component directly (bypasses family resolver
209
+ * — used for direct lucide component refs, stays in lucide regardless of theme)
210
+ * - `name` prop: Pass a canonical kebab-case name (family-aware, swaps on theme)
211
+ */
212
+
213
+ type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
214
+ type IconAnimation = 'spin' | 'pulse' | 'none';
215
+
216
+ /**
217
+ * Canonical icon-input type: a Lucide component reference OR a canonical
218
+ * kebab-case icon name string. The single source of truth for every
219
+ * icon-bearing prop across `@almadar/ui` — pattern-sync's parser maps this
220
+ * union to the `icon` config type, so the factory inspector renders an
221
+ * IconPicker and a string name resolves via `resolveIcon`. Never declare an
222
+ * icon prop as `React.ReactNode` (it collapses to a non-editable `node`).
223
+ */
224
+ type IconInput = LucideIcon | string;
225
+ interface IconProps {
226
+ /**
227
+ * Lucide icon component (preferred for type-safe usage), OR a canonical
228
+ * kebab-case icon name string — a string is treated exactly like `name` so
229
+ * trait/factory authors can pass an icon by name through the `icon` prop.
230
+ */
231
+ icon?: IconInput;
232
+ /** Icon name as string (resolved from iconMap) */
233
+ name?: string;
234
+ /** Size of the icon */
235
+ size?: IconSize;
236
+ /** Semantic palette token or an arbitrary Tailwind color class. */
237
+ color?: ColorToken | string;
238
+ /** Animation type */
239
+ animation?: IconAnimation;
240
+ /** Additional CSS classes */
241
+ className?: string;
242
+ /** Icon stroke width - uses theme default if not specified */
243
+ strokeWidth?: number;
244
+ /** Inline style */
245
+ style?: React.CSSProperties;
246
+ }
247
+ declare const Icon: React.FC<IconProps>;
248
+
249
+ type ButtonVariant = "primary" | "secondary" | "ghost" | "danger" | "success" | "warning" | "default";
250
+ type ButtonSize = "sm" | "md" | "lg";
251
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
252
+ /** Additional CSS classes applied to the root element. */
253
+ className?: string;
254
+ variant?: ButtonVariant;
255
+ size?: ButtonSize;
256
+ isLoading?: boolean;
257
+ /** Left icon: a Lucide component or a canonical icon name string (e.g. "plus", "trash"). */
258
+ leftIcon?: IconInput;
259
+ /** Right icon: a Lucide component or a canonical icon name string. */
260
+ rightIcon?: IconInput;
261
+ /** Alias for leftIcon */
262
+ icon?: IconInput;
263
+ /** Alias for rightIcon */
264
+ iconRight?: IconInput;
265
+ /** Asset image rendered as the leading icon; takes precedence over icon/leftIcon when provided. */
266
+ iconAsset?: Asset;
267
+ /** Declarative event name — emits UI:{action} via eventBus on click */
268
+ action?: EventKey;
269
+ /** Payload to include with the action event */
270
+ actionPayload?: EventPayload;
271
+ /** Button label text (alternative to children for schema-driven rendering) */
272
+ label?: string;
273
+ /** Disable the button (greys out, blocks click events) */
274
+ disabled?: boolean;
275
+ /** Test identifier for automated tests */
276
+ 'data-testid'?: string;
277
+ }
278
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
279
+
280
+ type BadgeVariant = "default" | "primary" | "secondary" | "success" | "warning" | "danger" | "error" | "info" | "neutral";
281
+ type BadgeSize = "sm" | "md" | "lg";
282
+ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
283
+ /** Additional CSS classes applied to the root element. */
284
+ className?: string;
285
+ variant?: BadgeVariant;
286
+ size?: BadgeSize;
287
+ /** Numeric count or amount to display in badge */
288
+ amount?: number;
289
+ /** Badge label text (alternative to children for schema-driven rendering).
290
+ * Numeric values are auto-coerced to string for rendering — common case
291
+ * is unread counts, error counts, status codes, etc. */
292
+ label?: string | number;
293
+ /** Lucide icon component or canonical kebab-case icon name string */
294
+ icon?: IconInput;
295
+ /** Asset image rendered as the badge icon; takes precedence over icon when provided. */
296
+ iconAsset?: Asset;
297
+ /** When set, renders a small X button on the right of the badge that
298
+ * invokes this handler — turns the badge into a removable chip.
299
+ * Used by the TagInput molecule and other "list of removable values"
300
+ * surfaces. */
301
+ onRemove?: () => void;
302
+ /** Accessible label for the remove button. Defaults to "Remove". */
303
+ removeLabel?: string;
304
+ }
305
+ declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
306
+
307
+ type CardShadow = "none" | "sm" | "md" | "lg";
308
+ /**
309
+ * Layer 2 visual treatment for the card pattern — orthogonal to the semantic
310
+ * `variant` (which conveys role / state).
311
+ */
312
+ type CardLook = "elevated" | "flat-bordered" | "borderless-divider" | "ticket" | "invoice" | "chip" | "tile-image-first";
313
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
314
+ /** Additional CSS classes applied to the root element. */
315
+ className?: string;
316
+ variant?: "default" | "bordered" | "elevated" | "interactive";
317
+ padding?: "none" | "sm" | "md" | "lg";
318
+ /** Card title - renders in header if provided */
319
+ title?: string;
320
+ /** Card subtitle - renders below title */
321
+ subtitle?: string;
322
+ /** Shadow size override */
323
+ shadow?: CardShadow;
324
+ /** Layer 2 visual treatment — orthogonal to the semantic variant. */
325
+ look?: CardLook;
326
+ /** Card content */
327
+ children?: React.ReactNode;
328
+ /** Declarative event key emitted on click for trait dispatch */
329
+ action?: EventKey;
330
+ /** Shows a skeleton/spinner overlay while true. */
331
+ loading?: boolean;
332
+ }
333
+ declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
334
+
335
+ /**
336
+ * Divider Atom Component
337
+ *
338
+ * A divider component for separating content sections.
339
+ */
340
+
341
+ type DividerOrientation = "horizontal" | "vertical";
342
+ type DividerVariant = "solid" | "dashed" | "dotted";
343
+ interface DividerProps {
344
+ /**
345
+ * Orientation of the divider
346
+ * @default 'horizontal'
347
+ */
348
+ orientation?: DividerOrientation;
349
+ /**
350
+ * Text label to display in the divider
351
+ */
352
+ label?: string;
353
+ /**
354
+ * Line style variant
355
+ * @default 'solid'
356
+ */
357
+ variant?: DividerVariant;
358
+ /**
359
+ * Additional CSS classes
360
+ */
361
+ className?: string;
362
+ }
363
+ declare const Divider: React.FC<DividerProps>;
364
+
365
+ /**
366
+ * Center Component
367
+ *
368
+ * A layout utility that centers its children horizontally and/or vertically.
369
+ */
370
+
371
+ interface CenterProps {
372
+ /** Center inline (width fits content) vs block (full width) */
373
+ inline?: boolean;
374
+ /** Center only horizontally */
375
+ horizontal?: boolean;
376
+ /** Center only vertically */
377
+ vertical?: boolean;
378
+ /** Minimum height (useful for vertical centering) */
379
+ minHeight?: string | number;
380
+ /** Fill available height */
381
+ fullHeight?: boolean;
382
+ /** Fill available width */
383
+ fullWidth?: boolean;
384
+ /** Custom class name */
385
+ className?: string;
386
+ /** Inline styles */
387
+ style?: React.CSSProperties;
388
+ /** Children elements */
389
+ children: React.ReactNode;
390
+ /** HTML element to render as */
391
+ as?: React.ElementType;
392
+ }
393
+ /**
394
+ * Center - Centers content horizontally and/or vertically
395
+ */
396
+ declare const Center: React.FC<CenterProps>;
397
+
398
+ /**
399
+ * Spacer Component
400
+ *
401
+ * A flexible spacer that expands to fill available space in a flex container.
402
+ * Useful for pushing elements apart or creating consistent spacing.
403
+ */
404
+
405
+ type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto';
406
+ interface SpacerProps {
407
+ /** Fixed size (auto = flex grow) */
408
+ size?: SpacerSize;
409
+ /** Orientation (for fixed sizes) */
410
+ axis?: 'horizontal' | 'vertical';
411
+ /** Custom class name */
412
+ className?: string;
413
+ }
414
+ /**
415
+ * Spacer - Flexible spacing element for flex layouts
416
+ *
417
+ * Usage:
418
+ * - size="auto" (default): Expands to fill available space (flex: 1)
419
+ * - size="md": Fixed size spacing
420
+ */
421
+ declare const Spacer: React.FC<SpacerProps>;
422
+
423
+ type ContentSectionBackground = "default" | "alt" | "dark" | "gradient";
424
+ type ContentSectionPadding = "sm" | "md" | "lg";
425
+ interface ContentSectionProps {
426
+ /** Section content */
427
+ children: React.ReactNode;
428
+ /** Background style */
429
+ background?: ContentSectionBackground;
430
+ /** Vertical padding size */
431
+ padding?: ContentSectionPadding;
432
+ /** HTML id for anchor linking */
433
+ id?: string;
434
+ /** Additional class names */
435
+ className?: string;
436
+ }
437
+ declare const ContentSection: React.ForwardRefExoticComponent<ContentSectionProps & React.RefAttributes<HTMLDivElement>>;
438
+
439
+ /**
440
+ * HeroSection Molecule Component
441
+ *
442
+ * A full-width hero section for landing pages and marketing content.
443
+ * Composes atoms: Box, VStack, HStack, Badge, Typography, Button.
444
+ * Optionally includes an InstallBox molecule for CLI commands.
445
+ */
446
+
447
+ interface HeroSectionProps {
448
+ tag?: string;
449
+ tagVariant?: 'primary' | 'secondary' | 'accent';
450
+ title: string;
451
+ titleAccent?: string;
452
+ subtitle: string;
453
+ primaryAction?: LinkAction;
454
+ secondaryAction?: LinkAction;
455
+ installCommand?: string;
456
+ image?: ImageSource;
457
+ imagePosition?: 'below' | 'right' | 'background';
458
+ background?: 'dark' | 'gradient' | 'subtle';
459
+ align?: 'center' | 'left';
460
+ /** Background element (SVG animation, etc.) rendered behind hero content */
461
+ backgroundElement?: React.ReactNode;
462
+ children?: React.ReactNode;
463
+ className?: string;
464
+ }
465
+ declare const HeroSection: React.FC<HeroSectionProps>;
466
+
467
+ /**
468
+ * CTABanner Molecule Component
469
+ *
470
+ * A call-to-action banner with title, subtitle, and action buttons.
471
+ * Uses the site's theme naturally - no forced color inversions.
472
+ */
473
+
474
+ type CTABannerBackground = 'default' | 'alt' | 'dark' | 'gradient' | 'primary';
475
+ interface CTABannerProps {
476
+ /** Banner headline */
477
+ title: string;
478
+ /** Supporting text below the title */
479
+ subtitle?: string;
480
+ /** Primary action button config */
481
+ primaryAction?: LinkAction;
482
+ /** Secondary action button config */
483
+ secondaryAction?: LinkAction;
484
+ /** Background style */
485
+ background?: CTABannerBackground;
486
+ /** Content alignment */
487
+ align?: 'center' | 'left';
488
+ /** Additional class names */
489
+ className?: string;
490
+ }
491
+ declare const CTABanner: React.FC<CTABannerProps>;
492
+
493
+ /**
494
+ * FeatureCard Molecule Component
495
+ *
496
+ * A card highlighting a feature with icon, title, description, and optional link.
497
+ * Composes Card, VStack, Icon, Typography, and Button atoms.
498
+ */
499
+
500
+ /**
501
+ * FeatureCard — an icon-led card pairing a title and description to call out a
502
+ * single product feature.
503
+ *
504
+ * @capabilities feature highlight, benefit callout, product capability card, feature-grid tile
505
+ */
506
+ interface FeatureCardProps {
507
+ icon?: IconInput;
508
+ /** Feature title */
509
+ title: string;
510
+ /** Feature description */
511
+ description: string;
512
+ /** Optional link URL */
513
+ href?: string;
514
+ /** Label for the link button */
515
+ linkLabel?: string;
516
+ /** Card visual variant */
517
+ variant?: 'default' | 'bordered' | 'elevated' | 'interactive';
518
+ /** Card size affecting icon and spacing */
519
+ size?: 'sm' | 'md' | 'lg';
520
+ /** Additional class names */
521
+ className?: string;
522
+ }
523
+ declare const FeatureCard: React.FC<FeatureCardProps>;
524
+
525
+ /**
526
+ * FeatureGrid Molecule Component
527
+ *
528
+ * A responsive grid layout for displaying multiple FeatureCards.
529
+ * Composes SimpleGrid and FeatureCard molecules.
530
+ */
531
+
532
+ interface FeatureGridProps {
533
+ /** Array of feature card configurations */
534
+ items: FeatureCardProps[];
535
+ /** Number of grid columns */
536
+ columns?: 2 | 3 | 4 | 6;
537
+ /** Gap between grid items */
538
+ gap?: 'sm' | 'md' | 'lg';
539
+ /** Additional class names */
540
+ className?: string;
541
+ }
542
+ declare const FeatureGrid: React.FC<FeatureGridProps>;
543
+
544
+ /**
545
+ * PricingCard Molecule Component
546
+ *
547
+ * A pricing tier card showing plan name, price, features, and CTA button.
548
+ * Composes atoms: Card, VStack, HStack, Badge, Typography, Icon, Divider, Spacer, Button.
549
+ */
550
+
551
+ /**
552
+ * PricingCard — a single pricing-tier card with price, billing period, feature
553
+ * list, and call-to-action.
554
+ *
555
+ * @capabilities pricing tier, plan card, subscription tier, plan comparison card, price plan
556
+ */
557
+ interface PricingCardProps {
558
+ name: string;
559
+ price: string;
560
+ description?: string;
561
+ features: string[];
562
+ action: LinkAction;
563
+ highlighted?: boolean;
564
+ badge?: string;
565
+ className?: string;
566
+ }
567
+ declare const PricingCard: React.FC<PricingCardProps>;
568
+
569
+ /**
570
+ * PricingGrid Molecule Component
571
+ *
572
+ * A responsive grid of PricingCard molecules.
573
+ * Composes: SimpleGrid + PricingCard.
574
+ */
575
+
576
+ interface PricingGridProps {
577
+ plans: PricingCardProps[];
578
+ className?: string;
579
+ }
580
+ declare const PricingGrid: React.FC<PricingGridProps>;
581
+
582
+ /**
583
+ * SplitSection Molecule Component
584
+ *
585
+ * A two-column content section with text on one side and an image (or custom content) on the other.
586
+ * Composes Box, HStack, VStack, Typography, and Icon atoms.
587
+ */
588
+
589
+ interface SplitSectionProps {
590
+ title: string;
591
+ description: string | React.ReactNode;
592
+ bullets?: string[];
593
+ image?: ImageSource;
594
+ imagePosition?: 'left' | 'right';
595
+ background?: 'default' | 'alt';
596
+ children?: React.ReactNode;
597
+ className?: string;
598
+ }
599
+ declare const SplitSection: React.FC<SplitSectionProps>;
600
+
601
+ /**
602
+ * InstallBox Molecule Component
603
+ *
604
+ * A copyable command display box for install/CLI commands.
605
+ * Shows a monospace command with a copy-to-clipboard button.
606
+ */
607
+
608
+ interface InstallBoxProps {
609
+ /** The command to display and copy */
610
+ command: string;
611
+ /** Optional label above the command */
612
+ label?: string;
613
+ /** Additional class names */
614
+ className?: string;
615
+ }
616
+ declare const InstallBox: React.FC<InstallBoxProps>;
617
+
618
+ /**
619
+ * StepFlow Molecule Component
620
+ *
621
+ * A step-by-step progress indicator supporting horizontal and vertical orientations.
622
+ * Composes Center, Typography, Icon, HStack, VStack, Box, and Divider atoms.
623
+ */
624
+
625
+ interface StepItemProps {
626
+ number?: number;
627
+ title: string;
628
+ description: string;
629
+ icon?: IconInput;
630
+ }
631
+ interface StepFlowProps {
632
+ steps: StepItemProps[];
633
+ orientation?: 'horizontal' | 'vertical';
634
+ showConnectors?: boolean;
635
+ className?: string;
636
+ }
637
+ declare const StepFlow: React.FC<StepFlowProps>;
638
+
639
+ /**
640
+ * StatsGrid Molecule Component
641
+ *
642
+ * A responsive grid of stat items showing value + label pairs.
643
+ * Composes: SimpleGrid + VStack + Typography.
644
+ * Uses StatDisplay internally when available for consistent styling.
645
+ */
646
+
647
+ interface StatItem {
648
+ value: string;
649
+ label: string;
650
+ }
651
+ interface StatsGridProps {
652
+ stats: StatItem[];
653
+ columns?: 2 | 3 | 4 | 6;
654
+ className?: string;
655
+ }
656
+ declare const StatsGrid: React.FC<StatsGridProps>;
657
+
658
+ /**
659
+ * TagCloud Molecule Component
660
+ *
661
+ * A collection of tags displayed as badges in a wrapping layout.
662
+ * Composes HStack and Badge atoms.
663
+ */
664
+
665
+ interface TagCloudItem {
666
+ label: string;
667
+ href?: string;
668
+ variant?: string;
669
+ }
670
+ interface TagCloudProps {
671
+ tags: string[] | TagCloudItem[];
672
+ variant?: 'default' | 'primary' | 'accent';
673
+ className?: string;
674
+ }
675
+ declare const TagCloud: React.FC<TagCloudProps>;
676
+
677
+ /**
678
+ * CommunityLinks Molecule Component
679
+ *
680
+ * Displays community platform links (GitHub, Discord, Twitter) as styled buttons.
681
+ * Composes VStack, HStack, Typography, Button, and Icon atoms.
682
+ */
683
+
684
+ interface GithubLink {
685
+ url: string;
686
+ stars?: number;
687
+ }
688
+ interface DiscordLink {
689
+ url: string;
690
+ members?: number;
691
+ }
692
+ interface TwitterLink {
693
+ url: string;
694
+ followers?: number;
695
+ }
696
+ interface CommunityLinksProps {
697
+ github?: GithubLink;
698
+ discord?: DiscordLink;
699
+ twitter?: TwitterLink;
700
+ heading?: string;
701
+ subtitle?: string;
702
+ className?: string;
703
+ }
704
+ declare const CommunityLinks: React.FC<CommunityLinksProps>;
705
+
706
+ /**
707
+ * ServiceCatalog Molecule Component
708
+ *
709
+ * Displays a grid of services organized by layer, each shown as a card
710
+ * with a layer badge and service name.
711
+ */
712
+
713
+ interface ServiceCatalogItem {
714
+ name: string;
715
+ layer: string;
716
+ layerColor?: string;
717
+ }
718
+ interface ServiceCatalogProps {
719
+ /** List of services to display */
720
+ services: ServiceCatalogItem[];
721
+ /** Additional class names */
722
+ className?: string;
723
+ }
724
+ declare const ServiceCatalog: React.FC<ServiceCatalogProps>;
725
+
726
+ /**
727
+ * ShowcaseCard Molecule Component
728
+ *
729
+ * A card for showcasing projects, demos, or portfolio items with an image, badge, and description.
730
+ * Composes Card, Box, VStack, Badge, and Typography atoms.
731
+ */
732
+
733
+ interface ShowcaseCardProps {
734
+ title: string;
735
+ description?: string;
736
+ image: ImageSource;
737
+ href?: string;
738
+ badge?: string;
739
+ accentColor?: string;
740
+ className?: string;
741
+ }
742
+ declare const ShowcaseCard: React.FC<ShowcaseCardProps>;
743
+
744
+ /**
745
+ * TeamCard Molecule Component
746
+ *
747
+ * A card displaying a team member with avatar, name, role, and bio.
748
+ * Composes Card, VStack, Avatar, and Typography atoms.
749
+ */
750
+
751
+ interface TeamCardProps {
752
+ name: string;
753
+ nameAr?: string;
754
+ role: string;
755
+ bio: string;
756
+ avatar?: AssetUrl | {
757
+ initials: string;
758
+ };
759
+ className?: string;
760
+ }
761
+ declare const TeamCard: React.FC<TeamCardProps>;
762
+
763
+ /**
764
+ * CaseStudyCard Molecule Component
765
+ *
766
+ * A card for displaying case studies with category badge, title,
767
+ * description, and a call-to-action link button.
768
+ */
769
+
770
+ /**
771
+ * CaseStudyCard — a card summarizing a customer case study with logo, headline
772
+ * result, and link.
773
+ *
774
+ * @capabilities customer story, success story, client story card, results showcase, proof-point card
775
+ */
776
+ interface CaseStudyCardProps {
777
+ /** Case study title */
778
+ title: string;
779
+ /** Short description of the case study */
780
+ description: string;
781
+ /** Category label shown as a badge */
782
+ category: string;
783
+ /** Custom background color for the category badge (CSS value) */
784
+ categoryColor?: string;
785
+ /** URL the card links to */
786
+ href: string;
787
+ /** Label for the link button */
788
+ linkLabel?: string;
789
+ /** Additional class names */
790
+ className?: string;
791
+ }
792
+ declare const CaseStudyCard: React.FC<CaseStudyCardProps>;
793
+
794
+ /**
795
+ * ArticleSection Molecule Component
796
+ *
797
+ * A centered content section with a title and constrained max-width,
798
+ * suitable for article or documentation layouts.
799
+ */
800
+
801
+ interface ArticleSectionProps {
802
+ /** Section title */
803
+ title: string;
804
+ /** Section content */
805
+ children: React.ReactNode;
806
+ /** Maximum width constraint */
807
+ maxWidth?: 'sm' | 'md' | 'lg';
808
+ /** Additional class names */
809
+ className?: string;
810
+ }
811
+ declare const ArticleSection: React.FC<ArticleSectionProps>;
812
+
813
+ /**
814
+ * SimpleGrid Component
815
+ *
816
+ * A simplified grid that automatically adjusts columns based on available space.
817
+ * Perfect for card layouts and item collections.
818
+ */
819
+
820
+ type SimpleGridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
821
+ interface SimpleGridProps {
822
+ /** Minimum width of each child (e.g., 200, "200px", "15rem") */
823
+ minChildWidth?: number | string;
824
+ /** Maximum number of columns */
825
+ maxCols?: 1 | 2 | 3 | 4 | 5 | 6;
826
+ /** Exact number of columns (disables auto-fit) */
827
+ cols?: 1 | 2 | 3 | 4 | 5 | 6;
828
+ /** Gap between items */
829
+ gap?: SimpleGridGap;
830
+ /** Custom class name */
831
+ className?: string;
832
+ /** Children elements */
833
+ children: React.ReactNode;
834
+ }
835
+ /**
836
+ * SimpleGrid - Auto-responsive grid layout
837
+ */
838
+ declare const SimpleGrid: React.FC<SimpleGridProps>;
839
+
840
+ /**
841
+ * MarketingFooter Molecule Component
842
+ *
843
+ * A themed footer for marketing/documentation sites.
844
+ * Displays link columns, optional logo, and copyright text.
845
+ * Uses @almadar/ui theme CSS variables for consistent branding.
846
+ */
847
+
848
+ interface FooterLinkItem {
849
+ label: string;
850
+ href: string;
851
+ }
852
+ interface FooterLinkColumn {
853
+ title: string;
854
+ items: FooterLinkItem[];
855
+ }
856
+ interface FooterLogo {
857
+ src: AssetUrl;
858
+ alt: string;
859
+ href?: string;
860
+ }
861
+ interface MarketingFooterProps {
862
+ columns: FooterLinkColumn[];
863
+ copyright?: string;
864
+ logo?: FooterLogo;
865
+ className?: string;
866
+ }
867
+ declare const MarketingFooter: React.FC<MarketingFooterProps>;
868
+
869
+ /**
870
+ * GradientDivider Molecule Component
871
+ *
872
+ * A horizontal line that fades from transparent at edges to primary color at center.
873
+ * Used between major sections for visual separation without hard background-color breaks.
874
+ */
875
+
876
+ interface GradientDividerProps {
877
+ /** Semantic palette token or a raw CSS color value. Defaults to 'primary'. */
878
+ color?: ColorToken | string;
879
+ /** Additional class names */
880
+ className?: string;
881
+ }
882
+ declare const GradientDivider: React.FC<GradientDividerProps>;
883
+
884
+ /**
885
+ * PullQuote Molecule Component
886
+ *
887
+ * Large italic text with a thick left border in primary color.
888
+ * Breaks up prose walls on long-form pages like Vision and case studies.
889
+ */
890
+
891
+ interface PullQuoteProps {
892
+ /** The quote text */
893
+ children: string;
894
+ /** Additional class names */
895
+ className?: string;
896
+ }
897
+ declare const PullQuote: React.FC<PullQuoteProps>;
898
+
899
+ /**
900
+ * AnimatedCounter Molecule Component
901
+ *
902
+ * Counts from 0 to a target value on scroll-into-view using IntersectionObserver.
903
+ * Replaces static stat numbers with animated versions for visual impact.
904
+ */
905
+
906
+ interface AnimatedCounterProps {
907
+ /** Target value to count to. Strings allow display formats (e.g. "500+", "99.9%", "3x"); numbers are coerced. */
908
+ value: string | number;
909
+ /** Label displayed below the number */
910
+ label: string;
911
+ /** Animation duration in ms */
912
+ duration?: number;
913
+ /** Additional class names */
914
+ className?: string;
915
+ }
916
+ declare const AnimatedCounter: React.FC<AnimatedCounterProps>;
917
+
918
+ type RevealTrigger = 'scroll' | 'hover' | 'manual';
919
+ type RevealAnimation = 'fade-up' | 'fade-down' | 'fade-in' | 'fade-left' | 'fade-right' | 'scale' | 'scale-up' | 'none';
920
+ interface AnimatedRevealProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
921
+ /** Additional CSS classes applied to the root element. */
922
+ className?: string;
923
+ /** What triggers the animation */
924
+ trigger?: RevealTrigger;
925
+ /** Built-in animation preset */
926
+ animation?: RevealAnimation;
927
+ /** Animation duration in ms (default: 600) */
928
+ duration?: number;
929
+ /** Delay before animation starts in ms (default: 0) */
930
+ delay?: number;
931
+ /** How much of the element must be visible before triggering, 0-1 (default: 0.15) */
932
+ threshold?: number;
933
+ /** Animate only the first time the element enters the viewport (default: true) */
934
+ once?: boolean;
935
+ /** Manual control: when trigger='manual', set this to true to animate */
936
+ animate?: boolean;
937
+ /** Easing function (default: cubic-bezier(0.16, 1, 0.3, 1)) */
938
+ easing?: string;
939
+ /** Children: ReactNode or render function receiving animated state */
940
+ children: React.ReactNode | ((animated: boolean) => React.ReactNode);
941
+ }
942
+ declare const AnimatedReveal: React.ForwardRefExoticComponent<AnimatedRevealProps & React.RefAttributes<HTMLDivElement>>;
943
+
944
+ type GraphicAnimation = 'draw' | 'fill' | 'pulse' | 'morph';
945
+ interface AnimatedGraphicProps extends React.HTMLAttributes<HTMLDivElement> {
946
+ /** Additional CSS classes applied to the root element. */
947
+ className?: string;
948
+ /** URL to an SVG file. Fetched and inlined to enable stroke/fill animations. */
949
+ src?: AssetUrl;
950
+ /** Inline SVG string. Takes precedence over src if both provided. */
951
+ svgContent?: string;
952
+ /** Animation type applied to SVG paths/shapes */
953
+ animation?: GraphicAnimation;
954
+ /** Whether to run the animation (default: false). Controlled externally or via AnimatedReveal. */
955
+ animate?: boolean;
956
+ /** Animation duration in ms (default: 1200) */
957
+ duration?: number;
958
+ /** Delay before animation starts in ms (default: 0) */
959
+ delay?: number;
960
+ /** Easing function (default: cubic-bezier(0.16, 1, 0.3, 1)) */
961
+ easing?: string;
962
+ /** Width of the graphic container */
963
+ width?: string | number;
964
+ /** Height of the graphic container */
965
+ height?: string | number;
966
+ /** Stroke color override for SVG paths */
967
+ strokeColor?: string;
968
+ /** Fill color for the 'fill' animation end state */
969
+ fillColor?: string;
970
+ /** Alt text for accessibility */
971
+ alt?: string;
972
+ }
973
+ declare const AnimatedGraphic: React.ForwardRefExoticComponent<AnimatedGraphicProps & React.RefAttributes<HTMLDivElement>>;
974
+
975
+ /**
976
+ * PatternTile Atom
977
+ *
978
+ * Mathematically correct Islamic geometric pattern tiles using the
979
+ * Polygons-in-Contact (PIC) method (Hankin 1925, formalized by Kaplan 2005).
980
+ *
981
+ * Construction: A regular polygon tiling is overlaid with star motifs.
982
+ * Each motif touches the enclosing polygon at EDGE MIDPOINTS only.
983
+ * Two rays emanate from each midpoint into the polygon at a specific
984
+ * CONTACT ANGLE (theta). Where rays from adjacent midpoints intersect,
985
+ * they form the star points. Gap tiles (squares, triangles) between
986
+ * polygons receive inferred geometry by extending boundary rays inward.
987
+ *
988
+ * Variants:
989
+ * star8 — 8-fold star-and-cross on 4.8.8 tiling (theta = 67.5 deg)
990
+ * star6 — 6-fold star on hexagonal tiling (theta = 60 deg)
991
+ * khatam — 8-fold rosette with interlocking kites (theta = 72 deg)
992
+ * star10 — 10-fold girih on decagonal tiling (theta = 72 deg)
993
+ * star12 — 12-fold on dodecagonal tiling (theta = 75 deg)
994
+ *
995
+ * All tiles use stroke only (no fill), rendering as transparent overlays.
996
+ */
997
+
998
+ type PatternVariant = 'star8' | 'star6' | 'khatam' | 'star10' | 'star12' | 'rosette-double' | 'rosette-filled' | 'seigaiha' | 'greek-key' | 'celtic-knot' | 'kolam' | 'arch' | 'arabesque-vine' | 'arabesque-net';
999
+ interface PatternTileProps {
1000
+ /** Which geometric pattern to render */
1001
+ variant?: PatternVariant;
1002
+ /** Tile unit size in SVG units */
1003
+ size?: number;
1004
+ /** Stroke color (CSS variable or hex) */
1005
+ color?: string;
1006
+ /** Line thickness */
1007
+ strokeWidth?: number;
1008
+ className?: string;
1009
+ }
1010
+ declare const PatternTile: React.FC<PatternTileProps>;
1011
+ /** Returns the tile dimensions for a given variant and size */
1012
+ declare function getTileDimensions(variant: PatternVariant, size: number): {
1013
+ width: number;
1014
+ height: number;
1015
+ };
1016
+
1017
+ /**
1018
+ * GeometricPattern Molecule
1019
+ *
1020
+ * Composes PatternTile into reusable layout modes for Islamic geometric
1021
+ * background decoration. Supports four modes:
1022
+ *
1023
+ * background — full tiling fill behind content
1024
+ * left/right — pattern fades from one side toward the other
1025
+ * frame — thin decorative strips above and below content
1026
+ *
1027
+ * Uses SVG <pattern> for efficient tiling and <mask> for fade effects.
1028
+ * All rendering is pure SVG (SSR-safe, no browser APIs).
1029
+ */
1030
+
1031
+ interface GeometricPatternProps {
1032
+ /** Which geometric tile design */
1033
+ variant?: PatternVariant;
1034
+ /** Layout mode */
1035
+ mode?: 'background' | 'left' | 'right' | 'dual' | 'around' | 'frame';
1036
+ /** Overall opacity (default: 0.06) */
1037
+ opacity?: number;
1038
+ /** Stroke color passed to PatternTile */
1039
+ color?: string;
1040
+ /** Tile scale multiplier (default: 1) */
1041
+ scale?: number;
1042
+ /** Stroke width passed to PatternTile */
1043
+ strokeWidth?: number;
1044
+ /** Content to wrap (used in frame mode) */
1045
+ children?: React.ReactNode;
1046
+ className?: string;
1047
+ }
1048
+ declare const GeometricPattern: React.FC<GeometricPatternProps>;
1049
+
1050
+ /**
1051
+ * EdgeDecoration Molecule
1052
+ *
1053
+ * Standalone SVG decorative elements positioned on section edges.
1054
+ * Unlike GeometricPattern (which tiles small units), these are large
1055
+ * singular shapes placed at specific positions: left edge, right edge,
1056
+ * or both.
1057
+ *
1058
+ * Variants:
1059
+ * arch — Concentric pointed mihrab arches (half-circles opening inward)
1060
+ * vine — Flowing arabesque scroll tendrils running vertically
1061
+ * lattice — Fine curved diamond lattice mesh
1062
+ *
1063
+ * Each variant renders as an absolutely-positioned SVG on one or both
1064
+ * sides of the parent container.
1065
+ */
1066
+
1067
+ type EdgeVariant = 'arch' | 'vine' | 'lattice';
1068
+ type EdgeSide = 'left' | 'right' | 'both';
1069
+ interface EdgeDecorationProps {
1070
+ /** Which decorative element */
1071
+ variant?: EdgeVariant;
1072
+ /** Which side(s) to place the decoration */
1073
+ side?: EdgeSide;
1074
+ /** Overall opacity (default: 0.15) */
1075
+ opacity?: number;
1076
+ /** Semantic palette token or a raw CSS color value for the stroke. */
1077
+ color?: ColorToken | string;
1078
+ /** Stroke width */
1079
+ strokeWidth?: number;
1080
+ /** Width of the decoration area as percentage of container (default: 15) */
1081
+ width?: number;
1082
+ className?: string;
1083
+ }
1084
+ declare const EdgeDecoration: React.FC<EdgeDecorationProps>;
1085
+
1086
+ export { AnimatedCounter, type AnimatedCounterProps, AnimatedGraphic, type AnimatedGraphicProps, AnimatedReveal, type AnimatedRevealProps, ArticleSection, type ArticleSectionProps, Badge, Box, Button, CTABanner, type CTABannerProps, Card, CaseStudyCard, type CaseStudyCardProps, Center, CommunityLinks, type CommunityLinksProps, ContentSection, type ContentSectionProps, Divider, EdgeDecoration, type EdgeDecorationProps, type EdgeSide, type EdgeVariant, FeatureCard, type FeatureCardProps, FeatureGrid, type FeatureGridProps, type FooterLinkColumn, type FooterLinkItem, GeometricPattern, type GeometricPatternProps, GradientDivider, type GradientDividerProps, type GraphicAnimation, HStack, HeroSection, type HeroSectionProps, Icon, InstallBox, type InstallBoxProps, MarketingFooter, type MarketingFooterProps, PatternTile, type PatternTileProps, type PatternVariant, PricingCard, type PricingCardProps, PricingGrid, type PricingGridProps, PullQuote, type PullQuoteProps, type RevealAnimation, type RevealTrigger, ServiceCatalog, type ServiceCatalogProps, ShowcaseCard, type ShowcaseCardProps, SimpleGrid, Spacer, SplitSection, type SplitSectionProps, StatsGrid, type StatsGridProps, StepFlow, type StepFlowProps, type StepItemProps, TagCloud, type TagCloudProps, TeamCard, type TeamCardProps, Typography, VStack, getTileDimensions };