fiboui 2.8.3 → 2.8.5

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 +1,1345 @@
1
- export { Box, Card, List, ListTile, Table, Tags, Banner, Collapse, Grid, GridItem, AssetCard, ProfileCard, CollectionCard, ContentCard } from './index.js';
1
+ // Generated by dts-bundle-generator v9.5.1
2
+
3
+ import React$1 from 'react';
4
+ import { CSSProperties, ReactElement, ReactNode } from 'react';
5
+
6
+ type Buildable = {
7
+ /** @deprecated Builders are React elements; `.build()` is optional. */
8
+ build(): React$1.ReactNode;
9
+ };
10
+ type FiboChild = React$1.ReactNode | Buildable;
11
+ type FiboChildren = FiboChild | readonly FiboChild[] | (() => FiboChild | readonly FiboChild[]);
12
+ type FiboThemeName = "material" | "cupertino" | "web" | "noir";
13
+ interface ResponsiveStyles {
14
+ mobile?: React$1.CSSProperties;
15
+ tablet?: React$1.CSSProperties;
16
+ desktop?: React$1.CSSProperties;
17
+ }
18
+ type AlignAxis = "start" | "center" | "end" | "stretch" | "baseline" | "between" | "around" | "evenly" | "space-between" | "space-around" | "space-evenly" | "spaceBetween" | "spaceAround" | "spaceEvenly";
19
+ interface TextStyle {
20
+ fontSize?: string | number;
21
+ fontWeight?: string | number;
22
+ fontFamily?: string;
23
+ color?: string;
24
+ lineHeight?: string | number;
25
+ letterSpacing?: string | number;
26
+ }
27
+ type StatusType = "success" | "warning" | "error" | "info";
28
+ declare const FIBO_BREAKPOINTS: {
29
+ readonly sm: 640;
30
+ readonly md: 768;
31
+ readonly lg: 1024;
32
+ readonly xl: 1280;
33
+ };
34
+ type BreakpointKey = keyof typeof FIBO_BREAKPOINTS;
35
+ type Listener<T> = (value: T) => void;
36
+ type Unsubscribe = () => void;
37
+ interface Subscribable<T> {
38
+ subscribe(listener: Listener<T>): Unsubscribe;
39
+ subscribeEffect(effect: Effect): void;
40
+ unsubscribeEffect(effect: Effect): void;
41
+ }
42
+ interface BindableSignal<T = unknown> {
43
+ readonly value: T;
44
+ subscribe(listener: Listener<T>): Unsubscribe;
45
+ }
46
+ declare class Effect {
47
+ private fn;
48
+ private dependencies;
49
+ private _onDispose?;
50
+ constructor(fn: () => void);
51
+ run(): void;
52
+ track(dep: Subscribable<any>): void;
53
+ trigger(): void;
54
+ cleanup(): void;
55
+ dispose(): void;
56
+ }
57
+ declare class Signal<T> implements Subscribable<T> {
58
+ private _value;
59
+ private listeners;
60
+ private effects;
61
+ private readonly _initial;
62
+ constructor(_value: T);
63
+ get value(): T;
64
+ /** Current value without tracking. Replays use this so a node does not subscribe twice. */
65
+ peek(): T;
66
+ set value(newValue: T);
67
+ /** Replace the value. Same notify path as `.value = next`. */
68
+ set(next: T): this;
69
+ /**
70
+ * Write a value, or an updater `(prev) => next`.
71
+ * Function-valued signals should use `.set()` / `.value =` so the function is stored, not called.
72
+ * Not named `update`: `listSignal.update(id, patch)` is the item patch.
73
+ */
74
+ change(next: T | ((prev: T) => T)): this;
75
+ /** Restore the value passed to `signal(initial)`. */
76
+ reset(): this;
77
+ subscribe(listener: Listener<T>): Unsubscribe;
78
+ subscribeEffect(effect: Effect): void;
79
+ unsubscribeEffect(effect: Effect): void;
80
+ private _notifyDepth;
81
+ private notify;
82
+ }
83
+ declare class Observable<T> implements Subscribable<T> {
84
+ private _value;
85
+ private listeners;
86
+ private effects;
87
+ constructor(_value: T);
88
+ get(): T;
89
+ set(newValue: T): void;
90
+ subscribe(listener: Listener<T>): Unsubscribe;
91
+ subscribeEffect(effect: Effect): void;
92
+ unsubscribeEffect(effect: Effect): void;
93
+ private notify;
94
+ }
95
+ declare abstract class GestureBuilder {
96
+ abstract wrap(children: React$1.ReactNode): React$1.ReactNode;
97
+ }
98
+ interface AnimationOptions {
99
+ duration?: number;
100
+ curve?: "linear" | "easeIn" | "easeOut" | "easeInOut" | "spring" | string;
101
+ damping?: number;
102
+ stiffness?: number;
103
+ velocity?: number;
104
+ mass?: number;
105
+ onComplete?: () => void;
106
+ }
107
+ interface Signal<T> {
108
+ spring(target: T, options?: Partial<AnimationOptions>): void;
109
+ animate(target: T, options?: Partial<AnimationOptions>): void;
110
+ snapTo(target: T, options?: Partial<AnimationOptions>): void;
111
+ }
112
+ declare const INTERACTION_EFFECTS: readonly [
113
+ "grow",
114
+ "shrink",
115
+ "pulse",
116
+ "pulseGrow",
117
+ "pulseShrink",
118
+ "push",
119
+ "pop",
120
+ "bounceIn",
121
+ "bounceOut",
122
+ "rotate",
123
+ "growRotate",
124
+ "float",
125
+ "sink",
126
+ "bob",
127
+ "hang",
128
+ "skew",
129
+ "skewForward",
130
+ "skewBackward",
131
+ "wobbleHorizontal",
132
+ "wobbleVertical",
133
+ "wobbleToBottomRight",
134
+ "wobbleToTopRight",
135
+ "wobbleTop",
136
+ "wobbleBottom",
137
+ "wobbleSkew",
138
+ "buzz",
139
+ "buzzOut",
140
+ "forward",
141
+ "backward",
142
+ "nudge",
143
+ "fade",
144
+ "backPulse",
145
+ "sweepToRight",
146
+ "sweepToLeft",
147
+ "sweepToBottom",
148
+ "sweepToTop",
149
+ "bounceToRight",
150
+ "bounceToLeft",
151
+ "bounceToBottom",
152
+ "bounceToTop",
153
+ "radialOut",
154
+ "radialIn",
155
+ "rectangleIn",
156
+ "rectangleOut",
157
+ "shutterInHorizontal",
158
+ "shutterOutHorizontal",
159
+ "shutterInVertical",
160
+ "shutterOutVertical",
161
+ "iconBack",
162
+ "iconForward",
163
+ "iconDown",
164
+ "iconUp",
165
+ "iconSpin",
166
+ "iconDrop",
167
+ "iconFade",
168
+ "iconFloatAway",
169
+ "iconSinkAway",
170
+ "iconGrow",
171
+ "iconShrink",
172
+ "iconPulse",
173
+ "iconPulseGrow",
174
+ "iconPulseShrink",
175
+ "iconPush",
176
+ "iconPop",
177
+ "iconBounce",
178
+ "iconRotate",
179
+ "iconGrowRotate",
180
+ "iconFloat",
181
+ "iconSink",
182
+ "iconBob",
183
+ "iconHang",
184
+ "iconWobbleHorizontal",
185
+ "iconWobbleVertical",
186
+ "iconBuzz",
187
+ "iconBuzzOut",
188
+ "borderFade",
189
+ "hollow",
190
+ "trim",
191
+ "rippleOut",
192
+ "rippleIn",
193
+ "outlineOut",
194
+ "outlineIn",
195
+ "roundCorners",
196
+ "underlineFromLeft",
197
+ "underlineFromCenter",
198
+ "underlineFromRight",
199
+ "reveal",
200
+ "underlineReveal",
201
+ "overlineFromLeft",
202
+ "overlineFromCenter",
203
+ "overlineFromRight",
204
+ "overlineReveal",
205
+ "shadowGrow",
206
+ "shadowFloat",
207
+ "shadowGlow",
208
+ "shadowRadial",
209
+ "boxShadowOutset",
210
+ "boxShadowInset",
211
+ "lift",
212
+ "glow",
213
+ "bubbleTop",
214
+ "bubbleRight",
215
+ "bubbleBottom",
216
+ "bubbleLeft",
217
+ "bubbleFloatTop",
218
+ "bubbleFloatRight",
219
+ "bubbleFloatBottom",
220
+ "bubbleFloatLeft",
221
+ "curlTopLeft",
222
+ "curlTopRight",
223
+ "curlBottomRight",
224
+ "curlBottomLeft"
225
+ ];
226
+ type InteractionEffectName = (typeof INTERACTION_EFFECTS)[number];
227
+ interface LogicalAxes {
228
+ paddingHorizontal(value: string | number): this;
229
+ paddingVertical(value: string | number): this;
230
+ paddingX(value: string | number): this;
231
+ paddingY(value: string | number): this;
232
+ px(value: string | number): this;
233
+ py(value: string | number): this;
234
+ marginHorizontal(value: string | number): this;
235
+ marginVertical(value: string | number): this;
236
+ marginX(value: string | number): this;
237
+ marginY(value: string | number): this;
238
+ mx(value: string | number): this;
239
+ my(value: string | number): this;
240
+ borderHorizontal(value: string | number): this;
241
+ borderVertical(value: string | number): this;
242
+ borderX(value: string | number): this;
243
+ borderY(value: string | number): this;
244
+ borderWidthHorizontal(value: string | number): this;
245
+ borderWidthVertical(value: string | number): this;
246
+ borderColorHorizontal(value: string | number): this;
247
+ borderColorVertical(value: string | number): this;
248
+ roundedTop(value: string | number): this;
249
+ roundedBottom(value: string | number): this;
250
+ roundedLeft(value: string | number): this;
251
+ roundedRight(value: string | number): this;
252
+ insetHorizontal(value: string | number): this;
253
+ insetVertical(value: string | number): this;
254
+ insetX(value: string | number): this;
255
+ insetY(value: string | number): this;
256
+ gapX(value: string | number): this;
257
+ gapY(value: string | number): this;
258
+ }
259
+ type CssFluentMethods = {
260
+ [K in keyof React$1.CSSProperties]-?: (value: React$1.CSSProperties[K] | number | string) => CssFluentProxy;
261
+ } & {
262
+ /** Escape hatch: any CSS property (camel or kebab). */
263
+ css(property: string, value: string | number): CssFluentProxy;
264
+ /** Merge a raw style object. */
265
+ style(extra: React$1.CSSProperties): CssFluentProxy;
266
+ };
267
+ type CssFluentProxy = CssFluentMethods & LogicalAxes & {
268
+ /** Shorthand for `backgroundColor` (FiboBuilder / List / Checkbox state paints). */
269
+ bg(color: string): CssFluentProxy;
270
+ toStyle(): React$1.CSSProperties;
271
+ toCSSString(): string;
272
+ };
273
+ type CssFluentHost = {
274
+ setProp(prop: string, value: string | number): void;
275
+ mergeStyle(extra: React$1.CSSProperties): void;
276
+ toStyle(): React$1.CSSProperties;
277
+ toCSSString(): string;
278
+ };
279
+ declare class CssStyleStore implements CssFluentHost {
280
+ protected _style: React$1.CSSProperties;
281
+ /** Shorthand for `backgroundColor` (same as FiboBuilder / ListItemStyleBuilder). */
282
+ bg(color: string): this;
283
+ setProp(prop: string, value: string | number): void;
284
+ /** Flutter / RN: left + right. */
285
+ paddingHorizontal(value: number | string): this;
286
+ /** Flutter / RN: top + bottom. */
287
+ paddingVertical(value: number | string): this;
288
+ paddingX(value: number | string): this;
289
+ paddingY(value: number | string): this;
290
+ marginHorizontal(value: number | string): this;
291
+ marginVertical(value: number | string): this;
292
+ marginX(value: number | string): this;
293
+ marginY(value: number | string): this;
294
+ mergeStyle(extra: React$1.CSSProperties): void;
295
+ toStyle(): React$1.CSSProperties;
296
+ toCSSString(): string;
297
+ }
298
+ interface PseudoStateBuilder extends LogicalAxes {
299
+ boxShadow(value: string | number): this;
300
+ }
301
+ declare class PseudoStateBuilder {
302
+ private pseudoState;
303
+ private parentBuilder;
304
+ private isGroup;
305
+ private transitionDuration;
306
+ private transitionEasing;
307
+ private transitionDelay;
308
+ private transitionProperties;
309
+ private transforms;
310
+ private _boxLonghands;
311
+ constructor(pseudoState: string, parentBuilder: FiboBuilder, isGroup?: boolean);
312
+ /**
313
+ * Apply a named interaction effect (full Hover.css–inspired catalog).
314
+ * Works on any pseudo trigger — hover, press/active, focus, groupHover, etc.
315
+ * Stamps CSS classes; sheet is fiboui-owned (not a Hover.css vendor).
316
+ */
317
+ effect(name: InteractionEffectName | string): this;
318
+ bg(color: string): this;
319
+ /** Same longhand as `.bg()` — interpolates against the resting surface. */
320
+ backgroundColor(value: string): this;
321
+ color(value: string): this;
322
+ text(color: string): this;
323
+ opacity(value: number): this;
324
+ borderColor(value: string): this;
325
+ transform(value: string): this;
326
+ scale(value: number): this;
327
+ translateX(value: number | string): this;
328
+ translateY(value: number | string): this;
329
+ rotate(degrees: number): this;
330
+ shadow(value: string | number): this;
331
+ css(property: string, value: string | number): this;
332
+ padding(value: string | number): this;
333
+ p(value: string | number): this;
334
+ margin(value: string | number): this;
335
+ transition(value: string): this;
336
+ transition(properties: string | string[], duration: number, easing?: string, delay?: number): this;
337
+ duration(ms: number): this;
338
+ easing(value: "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "spring" | string): this;
339
+ ease(value: string): this;
340
+ delay(ms: number): this;
341
+ properties(props: string[]): this;
342
+ private applyTransition;
343
+ private flushTransform;
344
+ private set;
345
+ private commit;
346
+ end(): FiboBuilder;
347
+ }
348
+ declare const When: {
349
+ readonly hover: "hover";
350
+ readonly focus: "focus";
351
+ readonly active: "active";
352
+ readonly visited: "visited";
353
+ readonly disabled: "disabled";
354
+ readonly on: "on";
355
+ readonly off: "off";
356
+ readonly checked: "checked";
357
+ readonly unchecked: "unchecked";
358
+ readonly indeterminate: "indeterminate";
359
+ readonly mixed: "mixed";
360
+ };
361
+ type When = (typeof When)[keyof typeof When];
362
+ type WhenStyle = React$1.CSSProperties | string | ((builder: any) => void);
363
+ interface SpringOptions {
364
+ stiffness?: number;
365
+ damping?: number;
366
+ mass?: number;
367
+ }
368
+ declare const MOTION_PRESETS: readonly [
369
+ "fadeIn",
370
+ "fadeOut",
371
+ "fade",
372
+ "slideUp",
373
+ "slideDown",
374
+ "slideLeft",
375
+ "slideRight",
376
+ "scaleIn",
377
+ "scaleOut",
378
+ "scale",
379
+ "blurIn",
380
+ "blurOut",
381
+ "blur",
382
+ "pop",
383
+ "bounce"
384
+ ];
385
+ type MotionPreset = (typeof MOTION_PRESETS)[number];
386
+ interface CustomMotion {
387
+ from: Record<string, string | number>;
388
+ to: Record<string, string | number>;
389
+ duration?: number;
390
+ ease?: string;
391
+ delay?: number;
392
+ stiffness?: number;
393
+ damping?: number;
394
+ mass?: number;
395
+ }
396
+ interface ThemeColors {
397
+ primary: string;
398
+ primaryVariant?: string;
399
+ primaryContainer?: string;
400
+ onPrimaryContainer?: string;
401
+ secondary: string;
402
+ secondaryVariant?: string;
403
+ secondaryContainer?: string;
404
+ onSecondaryContainer?: string;
405
+ tertiary?: string;
406
+ onTertiary?: string;
407
+ tertiaryContainer?: string;
408
+ onTertiaryContainer?: string;
409
+ background: string;
410
+ surface: string;
411
+ surfaceVariant?: string;
412
+ onSurfaceVariant?: string;
413
+ error: string;
414
+ errorContainer?: string;
415
+ onErrorContainer?: string;
416
+ success?: string;
417
+ warning?: string;
418
+ info?: string;
419
+ onPrimary: string;
420
+ onSecondary: string;
421
+ onBackground: string;
422
+ onSurface: string;
423
+ onError: string;
424
+ /** Borders / hairlines — maps to `--fibo-outline`. */
425
+ outline?: string;
426
+ outlineVariant?: string;
427
+ /** Maps to `--fibo-surface-container-low` (M3 card surfaces). */
428
+ surfaceContainerLow?: string;
429
+ }
430
+ interface ThemeTypography {
431
+ h1: TextStyle;
432
+ h2: TextStyle;
433
+ h3: TextStyle;
434
+ h4: TextStyle;
435
+ h5: TextStyle;
436
+ h6: TextStyle;
437
+ body: TextStyle;
438
+ caption: TextStyle;
439
+ label: TextStyle;
440
+ }
441
+ interface ThemeSpacing {
442
+ xs: string;
443
+ sm: string;
444
+ md: string;
445
+ lg: string;
446
+ xl: string;
447
+ }
448
+ interface ThemeBorderRadius {
449
+ /** Maps to `--fibo-radius-xs` when set (CSS sheets already define it). */
450
+ xs?: string;
451
+ sm: string;
452
+ md: string;
453
+ lg: string;
454
+ /** Maps to `--fibo-radius-xl` when set (CSS sheets already define it). */
455
+ xl?: string;
456
+ full: string;
457
+ }
458
+ interface ThemeShadows {
459
+ sm: string;
460
+ md: string;
461
+ lg: string;
462
+ }
463
+ interface FiboTheme {
464
+ name: FiboThemeName;
465
+ colors: ThemeColors;
466
+ typography: ThemeTypography;
467
+ spacing: ThemeSpacing;
468
+ borderRadius: ThemeBorderRadius;
469
+ shadows: ThemeShadows;
470
+ fontFamily: string;
471
+ }
472
+ declare const FIBO_THEMES: {
473
+ readonly material: FiboTheme;
474
+ readonly cupertino: FiboTheme;
475
+ readonly web: FiboTheme;
476
+ readonly noir: FiboTheme;
477
+ };
478
+ type FiboThemePreset = keyof typeof FIBO_THEMES;
479
+ type ThemeInput = FiboTheme | FiboThemePreset;
480
+ declare enum Colors {
481
+ Primary = "primary",
482
+ OnPrimary = "on-primary",
483
+ PrimaryContainer = "primary-container",
484
+ OnPrimaryContainer = "on-primary-container",
485
+ Secondary = "secondary",
486
+ OnSecondary = "on-secondary",
487
+ SecondaryContainer = "secondary-container",
488
+ OnSecondaryContainer = "on-secondary-container",
489
+ Tertiary = "tertiary",
490
+ OnTertiary = "on-tertiary",
491
+ TertiaryContainer = "tertiary-container",
492
+ OnTertiaryContainer = "on-tertiary-container",
493
+ Error = "error",
494
+ OnError = "on-error",
495
+ Success = "success",
496
+ Warning = "warning",
497
+ Info = "info",
498
+ Background = "background",
499
+ OnBackground = "on-background",
500
+ Surface = "surface",
501
+ OnSurface = "on-surface",
502
+ SurfaceVariant = "surface-variant",
503
+ OnSurfaceVariant = "on-surface-variant",
504
+ Outline = "outline",
505
+ Transparent = "transparent",
506
+ Black = "black",
507
+ White = "white"
508
+ }
509
+ declare enum ShadowSize {
510
+ Sm = "sm",
511
+ Md = "md",
512
+ Lg = "lg",
513
+ Xl = "xl",
514
+ Xl2 = "2xl"
515
+ }
516
+ declare enum ShadowPreset {
517
+ Card = "card",
518
+ Button = "button",
519
+ Modal = "modal",
520
+ Float = "float",
521
+ Inner = "inner"
522
+ }
523
+ declare enum ShadowDirection {
524
+ Top = "top",
525
+ Bottom = "bottom",
526
+ Left = "left",
527
+ Right = "right",
528
+ TopBottom = "top-bottom",
529
+ LeftRight = "left-right",
530
+ Vertical = "vertical",
531
+ Horizontal = "horizontal",
532
+ All = "all"
533
+ }
534
+ type ShadowConfig = ShadowSize | ShadowPreset | string | 0 | null | [
535
+ string,
536
+ number?
537
+ ] | [
538
+ ShadowDirection | string,
539
+ ShadowSize | string
540
+ ] | [
541
+ ShadowDirection | string,
542
+ string
543
+ ] | [
544
+ ShadowDirection | string,
545
+ string,
546
+ number?
547
+ ] | [
548
+ ShadowDirection | string,
549
+ ShadowSize | string,
550
+ string,
551
+ number?
552
+ ];
553
+ type PseudoStateFn = (builder: PseudoStateBuilder) => void | PseudoStateBuilder;
554
+ declare abstract class FiboBuilder {
555
+ /** @internal Extra DOM props forwarded to the host element. */
556
+ protected _props: Record<string, any>;
557
+ protected _style: React$1.CSSProperties;
558
+ protected _cssStyles: React$1.CSSProperties;
559
+ protected _classNames: string[];
560
+ protected _children: React$1.ReactNode[];
561
+ /** Resolved theme for this subtree (SwiftUI Environment / Flutter Theme). */
562
+ protected _theme?: FiboTheme;
563
+ protected _state: Map<string, any>;
564
+ protected _providers: Map<string, any>;
565
+ protected _observers: Set<Observable<any>>;
566
+ protected _signals: Set<BindableSignal<any>>;
567
+ /** Explicit `.bindSignal()` / `.observer()` owns nested reads. A direct wire does not. */
568
+ protected _ownsReads: boolean;
569
+ /** @internal Direct `method(signal.value)` calls replayed when that signal changes. */
570
+ protected _replays: Array<() => void>;
571
+ protected _isObserver: boolean;
572
+ protected _gesture?: GestureBuilder;
573
+ protected _animationConfig?: Partial<AnimationOptions>;
574
+ protected _animatedProps: Map<string, Signal<any>>;
575
+ protected _transforms: string[];
576
+ protected _transitionClass?: string;
577
+ /** True while transition class was auto-managed for hover/effect presets (expandable). */
578
+ protected _autoEffectTransition: boolean;
579
+ protected _effectTransitionProps: string[];
580
+ /**
581
+ * When true, getStyle() promotes background/border shorthands to longhands and
582
+ * (optionally) stamps a resting translate3d so pseudo transforms ease cleanly.
583
+ */
584
+ protected _smoothSurface: boolean;
585
+ protected _smoothNeedsRestTransform: boolean;
586
+ protected _motionClass?: string;
587
+ protected _staggerMs?: number;
588
+ protected _reveal?: {
589
+ preset: string;
590
+ once?: boolean;
591
+ rootMargin?: string;
592
+ threshold?: number;
593
+ };
594
+ protected _scrollProgress: boolean;
595
+ protected _viewTransition?: string;
596
+ protected _reducedMotion: "reduce" | "never";
597
+ protected _usesCssMotion: boolean;
598
+ protected _explicitScrollMargin: boolean;
599
+ /** Shrink-wrap: skip the default `w-full` / `self-stretch` on Row and Column. */
600
+ protected _hug: boolean;
601
+ /**
602
+ * Unset every CSS property on this component and what it renders inside.
603
+ * Chain `.style()`, `.px()`, `.flex()` and the rest after this to put back only what you want.
604
+ */
605
+ protected _resetStyle: boolean;
606
+ /** Kebab box longhands already stamped (`padding-left`, …) so later shorthand cannot clobber them. */
607
+ protected _boxLonghands: Set<string>;
608
+ resetStyle(): this;
609
+ protected isReset(): boolean;
610
+ hug(): this;
611
+ protected isHug(): boolean;
612
+ id(value: string): this;
613
+ /**
614
+ * Scroll target. Same as `.id()`, plus `scroll-margin-top` so the section
615
+ * is not hidden under a sticky header. Pair with `scrollTo('#name')`.
616
+ */
617
+ anchor(value: string): this;
618
+ /**
619
+ * Explicit `scroll-margin-top` on this node (overrides the sticky CSS variable
620
+ * that `.anchor()` applies).
621
+ */
622
+ scrollMargin(value: number | string): this;
623
+ /** Stamp a class onto the host. Used by PseudoStateBuilder (hashed `:hover` etc.). */
624
+ addClassName(name: string): this;
625
+ /**
626
+ * React list key. After this is called, React reads the key as a string
627
+ * on both the builder element and the inner host wrapper.
628
+ * Builders are valid elements — you do not need `.build()`.
629
+ */
630
+ key(value: string | number): this;
631
+ private setBoxLonghand;
632
+ private setBoxShorthand;
633
+ paddingHorizontal(value: string | number): this;
634
+ paddingVertical(value: string | number): this;
635
+ padding(value: string | number): this;
636
+ marginHorizontal(value: string | number): this;
637
+ marginVertical(value: string | number): this;
638
+ margin(value: string | number): this;
639
+ /** Inline layout wins over a host that hardcodes flex on the element (Form, Scaffold). */
640
+ protected layoutStyle(patch: React$1.CSSProperties): this;
641
+ /** Last write of a key lives in one bag so getStyle() does not let earlier `.css()` beat later `.style()`. */
642
+ private dropConflictingKeys;
643
+ private trackBoxLonghandsFrom;
644
+ flexDirection(direction: "row" | "column" | "row-reverse" | "column-reverse"): this;
645
+ /** Flutter `textDirection`. */
646
+ textDirection(direction: "ltr" | "rtl"): this;
647
+ /** Flutter `textBaseline`. Both modes align on the flex baseline. */
648
+ textBaseline(baseline: "alphabetic" | "ideographic"): this;
649
+ /** Flutter `clipBehavior`. `none` shows overflow; the other two clip. */
650
+ clip(behavior: "none" | "hardEdge" | "antiAlias"): this;
651
+ /**
652
+ * Flutter `mainAxisSize`. `min` hugs the current flex direction.
653
+ * `max` stretches along that same axis.
654
+ */
655
+ mainAxisSize(size: "min" | "max"): this;
656
+ zIndex(value: number): this;
657
+ alignItems(alignment: "start" | "center" | "end" | "stretch" | "baseline"): this;
658
+ alignSelf(alignment: "start" | "center" | "end" | "stretch" | "baseline" | "auto"): this;
659
+ flexWrap(wrap: "wrap" | "nowrap" | "wrap-reverse"): this;
660
+ /**
661
+ * Main-axis distribution. Accepts Tailwind shortcuts (`between`) and CSS/Flutter
662
+ * names (`space-between` / `spaceBetween`).
663
+ */
664
+ justifyContent(justify: "start" | "center" | "end" | "between" | "around" | "evenly" | "space-between" | "space-around" | "space-evenly" | "spaceBetween" | "spaceAround" | "spaceEvenly"): this;
665
+ /** True when flexDirection is column / column-reverse (default is row). */
666
+ protected isVerticalFlex(): boolean;
667
+ /**
668
+ * Both screen axes. `.align(Align.center)` and `.align('center')` do the same.
669
+ * `between` packs the main axis and starts the cross axis.
670
+ */
671
+ align(alignment: AlignAxis): this;
672
+ /**
673
+ * Horizontal (screen X) alignment. Same meaning on Row and Column:
674
+ * left / center / right of the container — not “main axis”.
675
+ */
676
+ alignX(alignment: AlignAxis): this;
677
+ /**
678
+ * Vertical (screen Y) alignment. Same meaning on Row and Column:
679
+ * top / center / bottom of the container — not “cross axis”.
680
+ */
681
+ alignY(alignment: AlignAxis): this;
682
+ protected applyMainAlign(alignment: AlignAxis | string): this;
683
+ protected applyCrossAlign(alignment: AlignAxis | string): this;
684
+ flex(value?: number | string): this;
685
+ grid(): this;
686
+ inlineFlex(): this;
687
+ inlineGrid(): this;
688
+ block(): this;
689
+ inlineBlock(): this;
690
+ hidden(): this;
691
+ center(): this;
692
+ /** Center on the horizontal screen axis (uses `.alignX('center')`). */
693
+ centerX(): this;
694
+ /** Center on the vertical screen axis (uses `.alignY('center')`). */
695
+ centerY(): this;
696
+ spaceBetween(): this;
697
+ spaceAround(): this;
698
+ spaceEvenly(): this;
699
+ fill(): this;
700
+ fillWidth(): this;
701
+ fillHeight(): this;
702
+ square(size: number | string): this;
703
+ circle(): this;
704
+ opacity(value: number): this;
705
+ p(value: number | string): this;
706
+ px(value: number | string): this;
707
+ py(value: number | string): this;
708
+ paddingX(value: number | string): this;
709
+ paddingY(value: number | string): this;
710
+ m(value: number | string): this;
711
+ mx(value: number | string): this;
712
+ my(value: number | string): this;
713
+ marginX(value: number | string): this;
714
+ marginY(value: number | string): this;
715
+ bg(color: string | Colors): this;
716
+ text(color: string | Colors): this;
717
+ color(value: string | Colors): this;
718
+ private resolveSemanticColor;
719
+ shadow(config?: ShadowConfig): this;
720
+ /**
721
+ * Breakpoint styles compiled to CSS `@media` (same engine as `.md()`).
722
+ * Tiers stay mutually exclusive: mobile `<768`, tablet `768–1023`, desktop `≥1024`.
723
+ * No `window.innerWidth` — hydrate-safe.
724
+ */
725
+ responsive(styles: ResponsiveStyles): this;
726
+ /**
727
+ * CSS `@media` (min-width or a raw query). Compiles to a class — no resize JS.
728
+ *
729
+ * @example Box().padding(8).media('md', { padding: 16 }).media('(prefers-color-scheme: dark)', { backgroundColor: '#111' })
730
+ */
731
+ media(query: BreakpointKey | string, styles: React$1.CSSProperties): this;
732
+ private registerMediaStyles;
733
+ sm(styles: React$1.CSSProperties): this;
734
+ md(styles: React$1.CSSProperties): this;
735
+ lg(styles: React$1.CSSProperties): this;
736
+ xl(styles: React$1.CSSProperties): this;
737
+ rounded(value: string | number): this;
738
+ borderRadius(value: string | number): this;
739
+ borderColor(value: string): this;
740
+ /**
741
+ * A passed size is a lock: `min-*` plus `flex-shrink: 0`, so a flex parent
742
+ * (the Scaffold body) cannot divide the viewport across these children.
743
+ * `400`, `'320px'`, `Size.full`, and `Space.md` all count. `flex(1)` afterwards
744
+ * opts back into sharing space.
745
+ */
746
+ private lockAxis;
747
+ width(value: string | number): this;
748
+ paint(property: string, value: string): this;
749
+ height(value: string | number): this;
750
+ gap(value: string | number): this;
751
+ clean(): this;
752
+ borderInput(color?: string, focusColor?: string): this;
753
+ weight(value: string | number): this;
754
+ onClick(handler: (event: React$1.MouseEvent<any>) => void): this;
755
+ state<T>(key: string, initialValue: T): this;
756
+ getState<T>(key: string): T | undefined;
757
+ setState<T>(key: string, value: T): this;
758
+ provide<T>(key: string, value: T): this;
759
+ consume<T>(key: string): T | undefined;
760
+ observer(options?: string | number | {
761
+ key?: string | number;
762
+ }): this;
763
+ observe<T>(observable: Observable<T>): this;
764
+ bindSignal<T>(signal: BindableSignal<T>): this;
765
+ /**
766
+ * @internal Wire a direct `method(signal.value)` to this node.
767
+ * Does not claim reads that happen later in a children function.
768
+ */
769
+ adoptWire(signals: Subscribable<unknown>[], replay: () => void): void;
770
+ /** @internal */
771
+ runReplays(): void;
772
+ translateX(value: Signal<number> | number): this;
773
+ translateY(value: Signal<number> | number): this;
774
+ scale(value: Signal<number> | number): this;
775
+ rotate(degrees: Signal<number> | number): this;
776
+ gesture(gesture: GestureBuilder): this;
777
+ animation(config: Partial<AnimationOptions>): this;
778
+ protected hasStateManagement(): boolean;
779
+ className(className: string): this;
780
+ classNames(classNames: string[]): this;
781
+ css(styles: React$1.CSSProperties): this;
782
+ style(style: React$1.CSSProperties): this;
783
+ props(props: Record<string, any>): this;
784
+ protected _transitionDuration: number;
785
+ protected _transitionEasing: string;
786
+ protected _transitionDelay: number;
787
+ protected _transitionProperties: string[];
788
+ /**
789
+ * Apply CSS transition
790
+ *
791
+ * Overload 1: String syntax
792
+ * Example: .transition('all 0.2s ease-in-out')
793
+ *
794
+ * Overload 2: Shorthand with parameters
795
+ * Example: .transition('all', 200, 'ease-out')
796
+ * Example: .transition('all', 200, 'ease-out', 50)
797
+ */
798
+ transition(value: string): this;
799
+ transition(properties: string | string[], duration: number, easing?: string, delay?: number): this;
800
+ /**
801
+ * Set transition duration in milliseconds
802
+ * Example: .duration(200) → 200ms
803
+ */
804
+ duration(ms: number): this;
805
+ /**
806
+ * Set transition easing function
807
+ * Example: .easing('ease-in-out')
808
+ */
809
+ easing(value: "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | "spring" | string): this;
810
+ /** Alias of `.easing()`. `'spring'` becomes CSS `linear()`. */
811
+ ease(value: string): this;
812
+ /**
813
+ * Set transition delay in milliseconds
814
+ * Example: .delay(100) → 100ms delay
815
+ */
816
+ delay(ms: number): this;
817
+ /**
818
+ * Set which properties to transition
819
+ * Example: .properties(['color', 'transform'])
820
+ */
821
+ properties(props: string[]): this;
822
+ /**
823
+ * Apply the built transition to the element
824
+ */
825
+ protected _applyTransition(): void;
826
+ private replaceTransitionClass;
827
+ /**
828
+ * CSS enter/exit preset. Compiles to `@keyframes` — no rAF.
829
+ * @example Box().animate('fadeIn').duration(300).ease('spring')
830
+ */
831
+ animate(preset: MotionPreset | string, options?: {
832
+ duration?: number;
833
+ ease?: string;
834
+ delay?: number;
835
+ from?: number | string;
836
+ stiffness?: number;
837
+ damping?: number;
838
+ mass?: number;
839
+ }): this;
840
+ animate(custom: CustomMotion): this;
841
+ /** CSS `linear()` spring. Works on `.animate()` and `.transition()` / `.hover()`. */
842
+ spring(options?: SpringOptions): this;
843
+ reducedMotion(mode?: "reduce" | "never"): this;
844
+ press(callback?: (builder: PseudoStateBuilder) => void | PseudoStateBuilder): this;
845
+ /**
846
+ * Shortcut: `.hover(h => h.effect(name))`.
847
+ * Named interaction effect on `:hover` (forward, float, grow, nudge, …).
848
+ */
849
+ hoverEffect(name: string): this;
850
+ /**
851
+ * Shortcut: `.press(p => p.effect(name))` (maps to `:active`).
852
+ */
853
+ pressEffect(name: string): this;
854
+ /**
855
+ * Shortcut: `.focus(f => f.effect(name))`.
856
+ */
857
+ focusEffect(name: string): this;
858
+ /**
859
+ * Shortcut: `.active(a => a.effect(name))`.
860
+ */
861
+ activeEffect(name: string): this;
862
+ /**
863
+ * Shortcut: `.groupHover(h => h.effect(name))`.
864
+ */
865
+ groupHoverEffect(name: string): this;
866
+ focusVisible(): PseudoStateBuilder;
867
+ focusVisible(callback: PseudoStateFn): this;
868
+ stagger(ms: number): this;
869
+ /** Scroll-reveal: IntersectionObserver toggles `.fibo-inview`. */
870
+ reveal(preset?: string | {
871
+ preset?: string;
872
+ once?: boolean;
873
+ rootMargin?: string;
874
+ threshold?: number;
875
+ }, options?: {
876
+ once?: boolean;
877
+ rootMargin?: string;
878
+ threshold?: number;
879
+ }): this;
880
+ /** Alias of `.reveal()` for scroll-triggered presets. */
881
+ onScroll(preset?: string): this;
882
+ /** CSS `animation-timeline: view()` / `scroll()`; IntersectionObserver reveal is the fallback. */
883
+ scrollTimeline(kind?: "view" | "scroll"): this;
884
+ scrollProgress(): this;
885
+ smoothScroll(): this;
886
+ scrollSnap(axis?: "x" | "y" | "both"): this;
887
+ scrollSnapAlign(align?: "start" | "center" | "end"): this;
888
+ sticky(top?: number | string | boolean): this;
889
+ /**
890
+ * Publish `--fibo-sticky-offset` on `:root` so `.anchor()` / `html` scroll-padding
891
+ * clear this bar. Header uses the real bar height.
892
+ */
893
+ protected publishStickyOffset(value: number | string): void;
894
+ viewTransition(name: string): this;
895
+ /** Default `:focus-visible` ring. Pass a callback to customize. */
896
+ focusRing(color?: string): this;
897
+ protected ensureInteractiveTransition(): void;
898
+ /**
899
+ * Prepare resting styles + transition so pseudo-state longhands (bg/border/transform)
900
+ * interpolate instead of snapping. Safe to call repeatedly from PseudoStateBuilder.
901
+ * @internal
902
+ */
903
+ prepareSmoothInteraction(properties: string[]): void;
904
+ /** @internal Convert inline background/border shorthands → longhands. */
905
+ promoteSurfaceLonghands(): void;
906
+ /** @internal Stamp translate3d(0,0,0) when no resting transform exists. */
907
+ ensureRestTransform(): void;
908
+ /**
909
+ * Ensure the base element transitions the properties an interaction effect needs.
910
+ * Expands an auto-managed transition; no-ops if the caller set `.transition(...)`
911
+ * explicitly or a motion animation class is present.
912
+ * @internal Used by PseudoStateBuilder.effect() and hover/press shortcuts.
913
+ */
914
+ ensureEffectTransition(properties: string[]): void;
915
+ /**
916
+ * Apply a theme to this node and descendants (CSS vars inherit).
917
+ * Fluent: `.theme("noir")` | `.theme(noirTheme)` | `.theme(extendTheme(webTheme, {…}))`.
918
+ * SSR-safe: class + inline vars on first paint (no useEffect).
919
+ */
920
+ theme(input: ThemeInput): this;
921
+ /** Prefer dark/light system chrome for native controls under this subtree. */
922
+ colorScheme(scheme: "light" | "dark" | "light dark"): this;
923
+ hover(): PseudoStateBuilder;
924
+ hover(callback: PseudoStateFn): this;
925
+ /**
926
+ * Paint for a `When` state. Hover / focus / active / visited / disabled
927
+ * write a CSS pseudo on this node. `on` / `off` are for Checkbox and Switch.
928
+ *
929
+ * ```ts
930
+ * Row().when(When.hover, (s) => s.bg('#c8ff00'))
931
+ * ```
932
+ */
933
+ when(state: When, style: WhenStyle): this;
934
+ focus(): PseudoStateBuilder;
935
+ focus(callback: PseudoStateFn): this;
936
+ active(): PseudoStateBuilder;
937
+ active(callback: PseudoStateFn): this;
938
+ visited(): PseudoStateBuilder;
939
+ visited(callback: PseudoStateFn): this;
940
+ disabledState(): PseudoStateBuilder;
941
+ disabledState(callback: PseudoStateFn): this;
942
+ focusWithin(): PseudoStateBuilder;
943
+ focusWithin(callback: PseudoStateFn): this;
944
+ firstChild(): PseudoStateBuilder;
945
+ firstChild(callback: PseudoStateFn): this;
946
+ lastChild(): PseudoStateBuilder;
947
+ lastChild(callback: PseudoStateFn): this;
948
+ groupHover(): PseudoStateBuilder;
949
+ groupHover(callback: PseudoStateFn): this;
950
+ groupFocus(): PseudoStateBuilder;
951
+ groupFocus(callback: PseudoStateFn): this;
952
+ groupActive(): PseudoStateBuilder;
953
+ groupActive(callback: PseudoStateFn): this;
954
+ groupFocusWithin(): PseudoStateBuilder;
955
+ groupFocusWithin(callback: PseudoStateFn): this;
956
+ group(): this;
957
+ protected _childFunction?: () => FiboChild | FiboChild[];
958
+ children(children: FiboChildren): this;
959
+ protected getClassName(): string;
960
+ protected getStyle(): React$1.CSSProperties;
961
+ protected processChildren(): React$1.ReactNode[];
962
+ protected getChildFunction(): (() => FiboChild | FiboChild[]) | undefined;
963
+ /**
964
+ * @deprecated Builders are React elements. Returning or nesting the builder is enough.
965
+ * `.build()` still assembles the host tree for older call sites.
966
+ */
967
+ abstract build(): React$1.ReactElement;
968
+ }
969
+ type KnownKeys<T> = {
970
+ [K in keyof T]: string extends K ? never : number extends K ? never : K;
971
+ } extends {
972
+ [_ in keyof T]: infer U;
973
+ } ? U : never;
974
+ type StyleBuilder<T> = T & LogicalAxes & {
975
+ [K in KnownKeys<React$1.CSSProperties>]-?: (value: React$1.CSSProperties[K]) => StyleBuilder<T>;
976
+ } & React$1.ReactElement;
977
+ declare class BoxBuilder extends FiboBuilder {
978
+ children(children: FiboChildren): this;
979
+ props(value: Record<string, any>): this;
980
+ build(): React$1.ReactElement;
981
+ }
982
+ export declare const Box: () => StyleBuilder<BoxBuilder>;
983
+ declare class CardBuilder extends FiboBuilder {
984
+ private _text;
985
+ private _subtitle?;
986
+ private _number?;
987
+ private _color?;
988
+ private _header?;
989
+ private _footer?;
990
+ private _as?;
991
+ text(value: string): this;
992
+ /** Alias of `.text()` — same slot as Banner/ListTile/Alert `.title()`. */
993
+ title(value: string): this;
994
+ subtitle(value: string): this;
995
+ number(value: string): this;
996
+ children(children: FiboChildren): this;
997
+ header(node: FiboChild): this;
998
+ footer(node: FiboChild): this;
999
+ as(tag: keyof HTMLElementTagNameMap | string): this;
1000
+ props(value: Record<string, any>): this;
1001
+ color(value: string): this;
1002
+ build(): React$1.ReactElement;
1003
+ }
1004
+ export declare const Card: () => StyleBuilder<CardBuilder>;
1005
+ declare class ListItemStyleBuilder extends CssStyleStore {
1006
+ padding(value: number | string): this;
1007
+ paddingX(value: number | string): this;
1008
+ paddingY(value: number | string): this;
1009
+ /** SwiftUI-ish: `listRowInsets` */
1010
+ insets(value: number | string): this;
1011
+ bg(color: string): this;
1012
+ /** SwiftUI-ish: `listRowBackground` */
1013
+ background(color: string): this;
1014
+ color(value: string): this;
1015
+ rounded(value?: number | string): this;
1016
+ border(value: number | string): this;
1017
+ borderBottom(value: string): this;
1018
+ /** Alias of `.boxShadow(...)` — full CSS `box-shadow` string or `0` → `none`. */
1019
+ shadow(value: number | string): this;
1020
+ boxShadow(value: number | string): this;
1021
+ opacity(value: number): this;
1022
+ /** Space after each row. */
1023
+ spacing(value: number | string): this;
1024
+ css(property: string, value: string | number): this;
1025
+ style(extra: React$1.CSSProperties): this;
1026
+ }
1027
+ type ListVariant = "default" | "card" | "floating";
1028
+ declare class ListBuilder<T = any> extends FiboBuilder {
1029
+ private _items;
1030
+ /** Plain `signal(array)`. Read on each rebuild. */
1031
+ private _source?;
1032
+ /** `listSignal`. Rows subscribe by `_id`. The list shell only hears membership. */
1033
+ private _liveList?;
1034
+ private _renderItem?;
1035
+ private _onItemPress?;
1036
+ private _variant;
1037
+ private _separator;
1038
+ private _onEndReached?;
1039
+ private _loading;
1040
+ private _threshold;
1041
+ private _containerHeight;
1042
+ private _resetItemStyles;
1043
+ private _direction;
1044
+ private _customItemHover?;
1045
+ private _customItemActive?;
1046
+ private _customItemFocus?;
1047
+ /** Universal row chrome — applies to every child wrapper. */
1048
+ private _itemStyle?;
1049
+ /** Kept and re-invoked on each rebuild (`List().items(fn)` / bindSignal). */
1050
+ private _itemsFn?;
1051
+ /** Placeholder when `items.length === 0` (plain array or empty `listSignal`). */
1052
+ private _empty?;
1053
+ /**
1054
+ * Entries to show.
1055
+ *
1056
+ * - **UI mode** (same as `.children`): `List().items([ListTile()…, Text(…)])`
1057
+ * - **Data mode**: `List().items(rows).renderItem((row) => ListTile().title(row.name))`
1058
+ * - **Live list**: `List().items(listSignal).renderItem((row) => ListTile().title(row.title))`
1059
+ * - **Live fn**: `List().items(() => todos.value).bindSignal(todos)` — fn re-runs on rebuild
1060
+ */
1061
+ items(items: T[] | FiboChildren | BindableSignal<T[]> | (() => T[])): this;
1062
+ /**
1063
+ * UI mode — any builders / nodes (ListTile, Text, Row, …).
1064
+ * Equivalent to `.items([...])` without `renderItem`.
1065
+ */
1066
+ children(children: FiboChildren): this;
1067
+ /** Shared path so `.children` and `.items` stay interchangeable for UI. */
1068
+ private setListEntries;
1069
+ /**
1070
+ * Map raw data from `.items(data)` → UI. Skip this when items are already
1071
+ * ListTile / Text / builders (use `.children` or `.items` alone).
1072
+ */
1073
+ renderItem(fn: (item: T, index: number) => React$1.ReactNode): this;
1074
+ /**
1075
+ * Same press for every row. The row is the target; the click reaches it
1076
+ * from the item. A row that needs its own action keeps that inside `renderItem`.
1077
+ *
1078
+ * ```ts
1079
+ * List().items(todos).onPress((todo) => toggle(todo.id)).renderItem((todo) => TodoItem(todo))
1080
+ * ```
1081
+ */
1082
+ onPress(handler: (item: T, index: number) => void): this;
1083
+ /** Alias of `.onPress()`. */
1084
+ onTap(handler: (item: T, index: number) => void): this;
1085
+ /**
1086
+ * Shown when there are no rows — empty array or empty `listSignal`.
1087
+ * Accepts a string, a node, a builder, or a factory that re-runs on rebuild.
1088
+ *
1089
+ * ```ts
1090
+ * List().items(todos).empty('No todos').renderItem((t) => Text(t.title))
1091
+ * List().items([]).empty(Text('Nothing'))
1092
+ * List().items(todos).empty(() => Text(`Count ${todos.length}`))
1093
+ * ```
1094
+ */
1095
+ empty(content: FiboChild | (() => FiboChild)): this;
1096
+ variant(variant: ListVariant): this;
1097
+ separator(show?: boolean): this;
1098
+ onEndReached(handler: () => void): this;
1099
+ loading(isLoading: boolean): this;
1100
+ threshold(value: number): this;
1101
+ containerHeight(height: number): this;
1102
+ resetItemStyles(reset?: boolean): this;
1103
+ direction(dir: "horizontal" | "vertical"): this;
1104
+ reset(): this;
1105
+ /**
1106
+ * Universal row style (all children).
1107
+ * SwiftUI: `listRowBackground` / `listRowInsets` · Flutter: `ListTileTheme`.
1108
+ *
1109
+ * ```ts
1110
+ * List()
1111
+ * .itemStyle((s) => s.padding(14).bg('#fff').rounded(12))
1112
+ * .when(When.hover, (h) => h.bg('#f3f4f6'))
1113
+ * .children([ListTile().title('A'), ListTile().title('B')])
1114
+ * ```
1115
+ */
1116
+ itemStyle(style: React$1.CSSProperties | ((builder: ListItemStyleBuilder & CssFluentProxy) => void | ListItemStyleBuilder | CssFluentProxy)): this;
1117
+ /** SwiftUI `listRowBackground` — shorthand for `.itemStyle(s => s.bg(color))`. */
1118
+ itemBackground(color: string): this;
1119
+ /** SwiftUI `listRowInsets` — shorthand for `.itemStyle(s => s.insets(value))`. */
1120
+ itemInsets(value: number | string): this;
1121
+ /**
1122
+ * Row paint for `When.hover` / `When.focus` / `When.active`.
1123
+ * Other states fall through to the node pseudo (the list box itself).
1124
+ */
1125
+ when(state: When, style: WhenStyle): this;
1126
+ private paintItem;
1127
+ build(): React$1.ReactElement;
1128
+ }
1129
+ export declare const List: <T = any>() => StyleBuilder<ListBuilder<T>>;
1130
+ declare class ListTileBuilder extends FiboBuilder {
1131
+ private _leading?;
1132
+ private _title?;
1133
+ private _subtitle?;
1134
+ private _trailing?;
1135
+ private _chevron;
1136
+ private _divider;
1137
+ private _dividerColor?;
1138
+ private _onPress?;
1139
+ private _href?;
1140
+ private _disabled;
1141
+ private _dense;
1142
+ leading(node: FiboChild): this;
1143
+ icon(node: FiboChild): this;
1144
+ title(value: string | FiboChild): this;
1145
+ subtitle(value: string | FiboChild): this;
1146
+ trailing(node: FiboChild): this;
1147
+ chevron(show?: boolean): this;
1148
+ divider(show?: boolean, color?: string): this;
1149
+ onPress(handler: () => void): this;
1150
+ /** Flutter-style alias of `.onPress()`. */
1151
+ onTap(handler: () => void): this;
1152
+ href(url: string): this;
1153
+ disabled(value?: boolean): this;
1154
+ dense(value?: boolean): this;
1155
+ build(): React$1.ReactElement;
1156
+ }
1157
+ export declare const ListTile: () => StyleBuilder<ListTileBuilder>;
1158
+ type TableVariant = "default" | "clean";
1159
+ type TableDensity = "compact" | "standard" | "relaxed";
1160
+ interface TableColumn<T = any> {
1161
+ header: string;
1162
+ accessor?: keyof T;
1163
+ render?: (item: T) => React$1.ReactNode;
1164
+ width?: string;
1165
+ align?: "left" | "center" | "right";
1166
+ /** When true, this header sorts even if the table is not `.sortable()`. `false` opts out. */
1167
+ sortable?: boolean;
1168
+ }
1169
+ declare class TableBuilder<T = any> extends FiboBuilder {
1170
+ private _data;
1171
+ /** Plain `signal(array)`. Read on each rebuild. */
1172
+ private _source?;
1173
+ /** `listSignal`. Rows subscribe by `_id`. */
1174
+ private _liveList?;
1175
+ private _columns;
1176
+ private _variant;
1177
+ private _density;
1178
+ private _striped;
1179
+ private _width;
1180
+ private _sortable;
1181
+ data(items: T[] | BindableSignal<T[]>): this;
1182
+ columns(cols: TableColumn<T>[]): this;
1183
+ variant(variant: TableVariant): this;
1184
+ density(density: TableDensity): this;
1185
+ striped(enable?: boolean): this;
1186
+ width(value: string | number): this;
1187
+ /** Header clicks sort that column ascending, then descending (`aria-sort`). */
1188
+ sortable(enable?: boolean): this;
1189
+ build(): React$1.ReactElement;
1190
+ }
1191
+ export declare const Table: <T = any>() => StyleBuilder<TableBuilder<T>>;
1192
+ interface TagItem {
1193
+ title: string;
1194
+ }
1195
+ declare class TagsBuilder extends FiboBuilder {
1196
+ private _items;
1197
+ /** Plain `signal(array)`. Read on each rebuild. */
1198
+ private _source?;
1199
+ /** `listSignal`. Tags subscribe by `_id`. */
1200
+ private _liveList?;
1201
+ constructor(items?: TagItem[]);
1202
+ items(items: TagItem[] | BindableSignal<TagItem[]>): this;
1203
+ build(): React$1.ReactElement;
1204
+ }
1205
+ export declare const Tags: (items?: TagItem[] | undefined) => StyleBuilder<TagsBuilder>;
1206
+ declare class BannerBuilder extends FiboBuilder {
1207
+ private _status;
1208
+ private _title;
1209
+ private _subtitle?;
1210
+ constructor(title?: string);
1211
+ status(value: StatusType): this;
1212
+ /** Docs alias: `.status()` is the Banner intent. */
1213
+ intent(value: StatusType): this;
1214
+ title(value: string): this;
1215
+ subtitle(value: string): this;
1216
+ children(children: FiboChildren): this;
1217
+ build(): React$1.ReactElement;
1218
+ }
1219
+ export declare const Banner: (title?: string | undefined) => StyleBuilder<BannerBuilder>;
1220
+ declare class CollapseBuilder extends FiboBuilder {
1221
+ _title: React$1.ReactNode | string;
1222
+ _content: React$1.ReactNode;
1223
+ _defaultExpanded: boolean;
1224
+ _expanded?: boolean;
1225
+ _onToggle?: (isOpen: boolean) => void;
1226
+ title(value: React$1.ReactNode | string): this;
1227
+ content(value: FiboChild): this;
1228
+ /** Docs and fluent trees use `.children()`; keep it as the panel body. */
1229
+ children(value: FiboChildren): this;
1230
+ isOpen(value: boolean): this;
1231
+ defaultOpen(value: boolean): this;
1232
+ onToggle(handler: (isOpen: boolean) => void): this;
1233
+ build(): React$1.ReactElement;
1234
+ }
1235
+ export declare const Collapse: () => StyleBuilder<CollapseBuilder>;
1236
+ type GridVariant = "standard" | "masonry" | "bento";
1237
+ type GridGap = "none" | "sm" | "md" | "lg" | "xl" | number;
1238
+ type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
1239
+ type GridAutoFlow = "row" | "column" | "dense";
1240
+ interface ResponsiveCols {
1241
+ sm?: GridCols;
1242
+ md?: GridCols;
1243
+ lg?: GridCols;
1244
+ xl?: GridCols;
1245
+ }
1246
+ declare class GridBuilder extends FiboBuilder {
1247
+ private _variant;
1248
+ private _columns;
1249
+ private _gap;
1250
+ private _rowGap?;
1251
+ private _columnGap?;
1252
+ private _rows?;
1253
+ private _templateColumns?;
1254
+ private _templateRows?;
1255
+ private _autoFlow?;
1256
+ variant(v: GridVariant): this;
1257
+ columns(cols: GridCols | ResponsiveCols): this;
1258
+ rows(count: number): this;
1259
+ gap(g: GridGap): this;
1260
+ rowGap(g: GridGap | string | number): this;
1261
+ columnGap(g: GridGap | string | number): this;
1262
+ templateColumns(template: string): this;
1263
+ /** CSS name — same as `.templateColumns()`, wins over numeric `.columns()`. */
1264
+ gridTemplateColumns(template: string): this;
1265
+ templateRows(template: string): this;
1266
+ autoFlow(flow: GridAutoFlow): this;
1267
+ build(): React$1.ReactElement;
1268
+ }
1269
+ declare class GridItemBuilder extends FiboBuilder {
1270
+ private _colSpan?;
1271
+ private _rowSpan?;
1272
+ private _colStart?;
1273
+ private _colEnd?;
1274
+ private _rowStart?;
1275
+ private _rowEnd?;
1276
+ colSpan(span: number): this;
1277
+ rowSpan(span: number): this;
1278
+ colStart(start: number): this;
1279
+ colEnd(end: number): this;
1280
+ rowStart(start: number): this;
1281
+ rowEnd(end: number): this;
1282
+ build(): React$1.ReactElement;
1283
+ }
1284
+ export declare const Grid: () => StyleBuilder<GridBuilder>;
1285
+ export declare const GridItem: () => StyleBuilder<GridItemBuilder>;
1286
+ declare class AssetCardBuilder extends FiboBuilder {
1287
+ private _image;
1288
+ private _title;
1289
+ private _price;
1290
+ private _likes;
1291
+ private _timeLeft?;
1292
+ image(url: string): this;
1293
+ title(text: string): this;
1294
+ price(value: string | number): this;
1295
+ likes(count: string | number): this;
1296
+ timeLeft(time: string): this;
1297
+ build(): React$1.ReactElement;
1298
+ }
1299
+ export declare const AssetCard: () => StyleBuilder<AssetCardBuilder>;
1300
+ declare class ProfileCardBuilder extends FiboBuilder {
1301
+ private _banner;
1302
+ private _avatar;
1303
+ private _name;
1304
+ private _handle;
1305
+ private _stats;
1306
+ banner(url: string): this;
1307
+ avatar(url: string): this;
1308
+ name(text: string): this;
1309
+ handle(text: string): this;
1310
+ stats(stats: {
1311
+ items: string;
1312
+ owners: string;
1313
+ floor: string;
1314
+ }): this;
1315
+ build(): React$1.ReactElement;
1316
+ }
1317
+ export declare const ProfileCard: () => StyleBuilder<ProfileCardBuilder>;
1318
+ declare class CollectionCardBuilder extends FiboBuilder {
1319
+ private _image;
1320
+ private _title;
1321
+ private _author;
1322
+ private _items;
1323
+ image(url: string): this;
1324
+ title(text: string): this;
1325
+ author(text: string): this;
1326
+ items(text: string): this;
1327
+ build(): React$1.ReactElement;
1328
+ }
1329
+ export declare const CollectionCard: () => StyleBuilder<CollectionCardBuilder>;
1330
+ declare class ContentCardBuilder extends FiboBuilder {
1331
+ private _image?;
1332
+ private _title?;
1333
+ private _description?;
1334
+ private _date?;
1335
+ private _source?;
1336
+ image(url: string): this;
1337
+ title(text: string): this;
1338
+ description(text: string): this;
1339
+ date(text: string): this;
1340
+ source(text: string): this;
1341
+ build(): React$1.ReactElement;
1342
+ }
1343
+ export declare const ContentCard: () => StyleBuilder<ContentCardBuilder>;
1344
+
1345
+ export {};