flet-box 0.0.0-stage → 1.0.2

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.
Files changed (178) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -2
  3. package/bin/cli.js +394 -0
  4. package/bin/commands/buildAndroid.js +200 -0
  5. package/bin/commands/buildIOS.js +237 -0
  6. package/bin/commands/create.js +406 -0
  7. package/bin/commands/createBundle.js +375 -0
  8. package/bin/commands/createComponent.js +115 -0
  9. package/bin/commands/createScreen.js +161 -0
  10. package/bin/commands/killServer.js +107 -0
  11. package/bin/commands/package.js +131 -0
  12. package/bin/commands/release.js +189 -0
  13. package/bin/commands/runBundle.js +62 -0
  14. package/bin/commands/runCloudflare.js +89 -0
  15. package/bin/commands/runNative.js +109 -0
  16. package/bin/commands/runServer.js +390 -0
  17. package/bin/ota/loader.js +361 -0
  18. package/bin/utils/bundleConfig.js +178 -0
  19. package/bin/utils/capacitor.js +137 -0
  20. package/bin/utils/colors.js +215 -0
  21. package/bin/utils/helpers.js +80 -0
  22. package/bin/utils/spinner.js +96 -0
  23. package/bin/utils/templates.js +1824 -0
  24. package/bin/utils/version.js +108 -0
  25. package/package.json +58 -4
  26. package/src/animations/AnimatedBox.js +607 -0
  27. package/src/animations/AnimatedText.js +105 -0
  28. package/src/animations/MatrixRain.js +220 -0
  29. package/src/animations/ParallaxBox.js +369 -0
  30. package/src/animations/animate.js +332 -0
  31. package/src/animations/index.js +25 -0
  32. package/src/app.js +41 -0
  33. package/src/assets/icon-1024-maskable.png +0 -0
  34. package/src/assets/icon-192-maskable.png +0 -0
  35. package/src/assets/icon-192.png +0 -0
  36. package/src/assets/icon-512-maskable.png +0 -0
  37. package/src/assets/icon-512.png +0 -0
  38. package/src/assets/logo.png +0 -0
  39. package/src/core/App.js +44 -0
  40. package/src/core/hmr-client.js +142 -0
  41. package/src/core/index.js +34 -0
  42. package/src/core/pwa.js +100 -0
  43. package/src/core/runApp.js +430 -0
  44. package/src/create-index.sh +237 -0
  45. package/src/fonts/MaterialIcons-Regular.woff2 +0 -0
  46. package/src/fonts/icons.css +23 -0
  47. package/src/index.d.ts +1930 -0
  48. package/src/index.js +288 -0
  49. package/src/navigations/AdaptiveScaffold.js +149 -0
  50. package/src/navigations/AppBar.js +331 -0
  51. package/src/navigations/BottomNavigation.js +298 -0
  52. package/src/navigations/CollapsibleSideBar.js +139 -0
  53. package/src/navigations/Drawer.js +333 -0
  54. package/src/navigations/DrawerItem.js +260 -0
  55. package/src/navigations/Router.js +475 -0
  56. package/src/navigations/Scaffold.js +537 -0
  57. package/src/navigations/Tabs.js +384 -0
  58. package/src/navigations/index.js +57 -0
  59. package/src/services/RamStore.js +213 -0
  60. package/src/services/Session.js +310 -0
  61. package/src/services/Storage.js +309 -0
  62. package/src/services/http.js +350 -0
  63. package/src/services/index.js +57 -0
  64. package/src/tools/animation.js +42 -0
  65. package/src/tools/array.js +95 -0
  66. package/src/tools/border.js +28 -0
  67. package/src/tools/clipboard.js +104 -0
  68. package/src/tools/color.js +329 -0
  69. package/src/tools/createList.js +215 -0
  70. package/src/tools/delay.js +55 -0
  71. package/src/tools/device.js +138 -0
  72. package/src/tools/dict.js +297 -0
  73. package/src/tools/dimensions.js +118 -0
  74. package/src/tools/filter.js +41 -0
  75. package/src/tools/flex.js +26 -0
  76. package/src/tools/gradient.js +34 -0
  77. package/src/tools/grid.js +57 -0
  78. package/src/tools/index.js +38 -0
  79. package/src/tools/mapList.js +107 -0
  80. package/src/tools/margin.js +93 -0
  81. package/src/tools/memo.js +60 -0
  82. package/src/tools/os.js +104 -0
  83. package/src/tools/padding.js +93 -0
  84. package/src/tools/print.js +69 -0
  85. package/src/tools/random.js +299 -0
  86. package/src/tools/ref.js +70 -0
  87. package/src/tools/rgba.js +4 -0
  88. package/src/tools/shadow.js +23 -0
  89. package/src/tools/string.js +85 -0
  90. package/src/tools/time.js +674 -0
  91. package/src/tools/transform.js +68 -0
  92. package/src/tools/transition.js +48 -0
  93. package/src/tools/useState.js +268 -0
  94. package/src/tools/uuid.js +42 -0
  95. package/src/utils/TextInputValidator.js +256 -0
  96. package/src/utils/composeUpdate.js +65 -0
  97. package/src/utils/getWidgetProps.js +35 -0
  98. package/src/utils/index.js +76 -0
  99. package/src/utils/markdownParser.js +368 -0
  100. package/src/utils/mediaTime.js +79 -0
  101. package/src/utils/navigation.js +263 -0
  102. package/src/utils/scriptInjector.js +73 -0
  103. package/src/utils/stackPosition.js +31 -0
  104. package/src/utils/stopWebRefresh.js +77 -0
  105. package/src/utils/styleInjector.js +38 -0
  106. package/src/utils/syntaxHighlight.js +339 -0
  107. package/src/utils/themes.js +347 -0
  108. package/src/utils/units.js +87 -0
  109. package/src/utils/visualEffects.js +169 -0
  110. package/src/widget-factory/addChildren.js +114 -0
  111. package/src/widget-factory/assignProps.js +256 -0
  112. package/src/widget-factory/createWidget.js +28 -0
  113. package/src/widget-factory/effects.js +132 -0
  114. package/src/widget-factory/index.js +7 -0
  115. package/src/widget-factory/lifecycle.js +210 -0
  116. package/src/widget-factory/makeParentable.js +89 -0
  117. package/src/widget-factory/pixTool.js +40 -0
  118. package/src/widget-factory/processProps.js +122 -0
  119. package/src/widget-factory/reactivity.js +98 -0
  120. package/src/widget-factory/remTool.js +34 -0
  121. package/src/widget-factory/stackPosition.js +87 -0
  122. package/src/widget-factory/stringTool.js +26 -0
  123. package/src/widget-factory/tools.js +249 -0
  124. package/src/widget-factory/translateProps.js +1049 -0
  125. package/src/widget-factory/warnings.js +284 -0
  126. package/src/widget-factory/widgetFactory.js +200 -0
  127. package/src/widgets/Accordion.js +562 -0
  128. package/src/widgets/AdMob.js +315 -0
  129. package/src/widgets/AdSense.js +268 -0
  130. package/src/widgets/AlertDialog.js +162 -0
  131. package/src/widgets/Audio.js +311 -0
  132. package/src/widgets/Avatar.js +210 -0
  133. package/src/widgets/Badge.js +189 -0
  134. package/src/widgets/BottomSheet.js +287 -0
  135. package/src/widgets/Button.js +247 -0
  136. package/src/widgets/Card.js +33 -0
  137. package/src/widgets/Carousel.js +301 -0
  138. package/src/widgets/Chart.js +632 -0
  139. package/src/widgets/Checkbox.js +106 -0
  140. package/src/widgets/Chip.js +153 -0
  141. package/src/widgets/CircularBar.js +352 -0
  142. package/src/widgets/CircularChart.js +549 -0
  143. package/src/widgets/CodeViewer.js +236 -0
  144. package/src/widgets/Column.js +29 -0
  145. package/src/widgets/Container.js +31 -0
  146. package/src/widgets/DataTable.js +257 -0
  147. package/src/widgets/Divider.js +93 -0
  148. package/src/widgets/DraggBox.js +115 -0
  149. package/src/widgets/Dropdown.js +505 -0
  150. package/src/widgets/DroppBox.js +180 -0
  151. package/src/widgets/FloatingActionButton.js +91 -0
  152. package/src/widgets/GridView.js +20 -0
  153. package/src/widgets/Icon.js +33 -0
  154. package/src/widgets/Image.js +15 -0
  155. package/src/widgets/Input.js +565 -0
  156. package/src/widgets/Inspector.js +254 -0
  157. package/src/widgets/InstallButton.js +110 -0
  158. package/src/widgets/ListTile.js +224 -0
  159. package/src/widgets/ListView.js +503 -0
  160. package/src/widgets/Markdown.js +1236 -0
  161. package/src/widgets/Modal.js +496 -0
  162. package/src/widgets/Pagination.js +195 -0
  163. package/src/widgets/ProgressBar.js +178 -0
  164. package/src/widgets/QRCode.js +467 -0
  165. package/src/widgets/Radio.js +132 -0
  166. package/src/widgets/Rating.js +261 -0
  167. package/src/widgets/Row.js +29 -0
  168. package/src/widgets/Skeleton.js +243 -0
  169. package/src/widgets/Slider.js +527 -0
  170. package/src/widgets/SnackBar.js +227 -0
  171. package/src/widgets/Stack.js +29 -0
  172. package/src/widgets/Stepper.js +296 -0
  173. package/src/widgets/Switch.js +102 -0
  174. package/src/widgets/Text.js +98 -0
  175. package/src/widgets/Tooltip.js +267 -0
  176. package/src/widgets/TreeView.js +370 -0
  177. package/src/widgets/Video.js +92 -0
  178. package/src/widgets/index.js +52 -0
package/src/index.d.ts ADDED
@@ -0,0 +1,1930 @@
1
+ // index.d.ts - FletBox Type Declarations
2
+ // Versión completa con todos los widgets, animaciones, servicios y utilidades
3
+
4
+ declare module 'flet-box' {
5
+ // =========================================================================
6
+ // Tipos base
7
+ // =========================================================================
8
+ type Widget = HTMLElement;
9
+ type Color = string;
10
+ type Size = number | string;
11
+ type Padding = number | string;
12
+ type Margin = number | string;
13
+
14
+ // =========================================================================
15
+ // Props comunes (heredadas by todos the widgets)
16
+ // =========================================================================
17
+ interface CommonProps {
18
+ width?: Size;
19
+ height?: Size;
20
+ size?: number;
21
+ padding?: Padding;
22
+ margin?: Margin;
23
+ bgColor?: Color;
24
+ color?: Color;
25
+ borderRadius?: number | string;
26
+ elevation?: number;
27
+ shadow?: string;
28
+ opacity?: number;
29
+ visible?: boolean;
30
+ disabled?: boolean;
31
+ onPress?: (widget: Widget) => void;
32
+ onClick?: (widget: Widget) => void;
33
+ id?: string;
34
+ className?: string;
35
+ ref?: (widget: Widget) => void;
36
+ disableTransform?: boolean;
37
+ }
38
+
39
+ // =========================================================================
40
+ // useState Hook (persistente with RamStore)
41
+ // =========================================================================
42
+ export function useState<T>(
43
+ key: string,
44
+ initialState: T | (() => T),
45
+ widget?: Widget,
46
+ propName?: string
47
+ ): [
48
+ T,
49
+ (value: T | ((prev: T) => T)) => void,
50
+ (callback: (newValue: T, oldValue: T) => void) => () => void
51
+ ];
52
+
53
+ export function useWatchState<T>(
54
+ key: string,
55
+ callback: (newValue: T, oldValue: T) => void
56
+ ): () => void;
57
+
58
+ // =========================================================================
59
+ // Frontend services
60
+ // =========================================================================
61
+ export function saveRam<T>(key: string, value: T): boolean;
62
+ export function getRam<T>(key: string): T | null;
63
+ export function getAllRam(): Record<string, any>;
64
+ export function getAllRamKeys(): string[];
65
+ export function hasRam(key: string): boolean;
66
+ export function updateRam<T>(key: string, value: T): boolean;
67
+ export function deleteRam(key: string): boolean;
68
+ export function clearAllRam(): boolean;
69
+ export function subscribeRam<T>(
70
+ callback: (key: string | null, newValue: T | null, oldValue: T | null) => void
71
+ ): () => void;
72
+ export function getRamItemCount(): number;
73
+ export function isRamAvailable(): boolean;
74
+
75
+ export function saveSession<T>(key: string, value: T): boolean;
76
+ export function getSession<T>(key: string): T | null;
77
+ export function getSessionSync<T>(key: string): T | null;
78
+ export function updateSession<T>(key: string, value: T): boolean;
79
+ export function deleteSession(key: string): boolean;
80
+ export function clearAllSession(): boolean;
81
+ export function hasSession(key: string): boolean;
82
+ export function getAllSessionKeys(): string[];
83
+ export function getAllSessionData(): Record<string, any>;
84
+ export function getSessionSize(): number;
85
+ export function deleteSessionByPrefix(prefix: string): number;
86
+ export function deleteSessionBySuffix(suffix: string): number;
87
+ export function getSessionItemCount(): number;
88
+ export function isSessionAvailable(): boolean;
89
+
90
+ export function saveData<T>(key: string, value: T): boolean;
91
+ export function getData<T>(key: string): T | null;
92
+ export function getDataSync<T>(key: string): T | null;
93
+ export function updateData<T>(key: string, value: T): boolean;
94
+ export function deleteData(key: string): boolean;
95
+ export function clearAllData(): boolean;
96
+ export function hasData(key: string): boolean;
97
+ export function getAllKeys(): string[];
98
+ export function getAllData(): Record<string, any>;
99
+ export function getStorageSize(): number;
100
+ export function deleteDataByPrefix(prefix: string): number;
101
+ export function deleteDataBySuffix(suffix: string): number;
102
+ export function getItemCount(): number;
103
+ export function isStorageAvailable(): boolean;
104
+
105
+ export interface HttpRequestOptions extends RequestInit {
106
+ body?: any;
107
+ headers?: Record<string, string>;
108
+ params?: Record<string, string | number | boolean | null | undefined>;
109
+ timeout?: number;
110
+ }
111
+
112
+ export function httpRequest<T = any>(
113
+ method: string,
114
+ url: string,
115
+ options?: HttpRequestOptions
116
+ ): Promise<T>;
117
+ export function httpGet<T = any>(url: string, options?: HttpRequestOptions): Promise<T>;
118
+ export function httpPost<T = any>(url: string, options?: HttpRequestOptions): Promise<T>;
119
+ export function httpPut<T = any>(url: string, options?: HttpRequestOptions): Promise<T>;
120
+ export function httpPatch<T = any>(url: string, options?: HttpRequestOptions): Promise<T>;
121
+ export function httpDelete<T = any>(url: string, options?: HttpRequestOptions): Promise<T>;
122
+
123
+ // =========================================================================
124
+ // Layouts
125
+ // =========================================================================
126
+ interface ContainerProps extends CommonProps {
127
+ direction?: 'row' | 'column';
128
+ gap?: number | string;
129
+ justifyContent?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly';
130
+ alignItems?: 'flex-start' | 'center' | 'flex-end' | 'stretch';
131
+ wrap?: boolean;
132
+ child?: Widget;
133
+ children?: Widget[];
134
+ expand?: boolean;
135
+ flex?: number;
136
+ minHeight?: Size;
137
+ maxHeight?: Size;
138
+ minWidth?: Size;
139
+ maxWidth?: Size;
140
+ overflow?: 'auto' | 'hidden' | 'visible' | 'scroll';
141
+ }
142
+ export function Container(props: ContainerProps): Widget;
143
+
144
+ interface RowProps extends CommonProps {
145
+ gap?: number | string;
146
+ justifyContent?: ContainerProps['justifyContent'];
147
+ alignItems?: ContainerProps['alignItems'];
148
+ wrap?: boolean;
149
+ children?: Widget[];
150
+ onPress?: (widget: Widget) => void;
151
+ }
152
+ export function Row(props: RowProps): Widget;
153
+
154
+ interface ColumnProps extends CommonProps {
155
+ gap?: number | string;
156
+ justifyContent?: ContainerProps['justifyContent'];
157
+ alignItems?: ContainerProps['alignItems'];
158
+ children?: Widget[];
159
+ onPress?: (widget: Widget) => void;
160
+ }
161
+ export function Column(props: ColumnProps): Widget;
162
+
163
+ interface StackProps extends CommonProps {
164
+ children?: Widget[];
165
+ position?: 'relative' | 'absolute';
166
+ alignment?: 'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
167
+ }
168
+ export function Stack(props: StackProps): Widget;
169
+
170
+ interface ListViewProps extends CommonProps {
171
+ data?: any[];
172
+ renderItem?: (item: any, index: number) => Widget;
173
+ height?: number | string;
174
+ width?: number | string;
175
+ itemSize?: number;
176
+ gap?: number;
177
+ wrapItems?: boolean;
178
+ crossAxisCount?: number;
179
+ onEndReached?: () => void;
180
+ onEndReachedThreshold?: number;
181
+ onRefresh?: (done: () => void) => void;
182
+ ListHeaderComponent?: (() => Widget) | Widget;
183
+ ListFooterComponent?: (() => Widget) | Widget;
184
+ ListEmptyComponent?: (() => Widget) | Widget;
185
+ showsScrollIndicator?: boolean;
186
+ bufferSize?: number;
187
+ expand?: boolean;
188
+ }
189
+ export function ListView(props: ListViewProps): Widget & {
190
+ data: any[];
191
+ refreshing: boolean;
192
+ updateData(newData: any[]): void;
193
+ scrollToIndex(index: number, animated?: boolean): void;
194
+ scrollToStart(animated?: boolean): void;
195
+ scrollToEnd(animated?: boolean): void;
196
+ };
197
+
198
+ interface GridViewProps extends Omit<ListViewProps, 'wrapItems' | 'crossAxisCount'> {
199
+ columns?: number;
200
+ spacing?: number;
201
+ itemHeight?: number;
202
+ }
203
+ export function GridView(props: GridViewProps): Widget;
204
+
205
+ // =========================================================================
206
+ // Widgets básicos
207
+ // =========================================================================
208
+ interface TextProps extends CommonProps {
209
+ text?: string;
210
+ value?: string;
211
+ children?: string;
212
+ size?: number;
213
+ color?: Color;
214
+ weight?: 'normal' | 'bold' | number;
215
+ align?: 'left' | 'center' | 'right' | 'justify';
216
+ italic?: boolean;
217
+ decoration?: 'underline' | 'line-through' | 'overline';
218
+ lineHeight?: number | string;
219
+ letterSpacing?: number | string;
220
+ type?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
221
+ styles?: Array<'bold' | 'italic' | 'underline' | 'strikethrough' | 'mark' | 'small' | 'code'>;
222
+ onPress?: (widget: Widget) => void;
223
+ }
224
+ export function Text(props: TextProps): Widget;
225
+
226
+ interface ButtonProps extends CommonProps {
227
+ text?: string;
228
+ onPress?: () => void;
229
+ variant?: 'filled' | 'outlined' | 'text';
230
+ bgColor?: Color;
231
+ gradient?: string;
232
+ color?: Color;
233
+ textColor?: Color;
234
+ size?: 'small' | 'medium' | 'large';
235
+ fullWidth?: boolean;
236
+ borderRadius?: number | string;
237
+ elevation?: number;
238
+ icon?: string;
239
+ iconLeft?: string;
240
+ iconRight?: string;
241
+ iconTop?: string;
242
+ iconBottom?: string;
243
+ iconPosition?: 'left' | 'right' | 'top' | 'bottom';
244
+ padding?: Padding;
245
+ margin?: Margin;
246
+ }
247
+ export function Button(props: ButtonProps): Widget;
248
+
249
+ interface IconProps extends CommonProps {
250
+ name: string;
251
+ size?: number;
252
+ color?: Color;
253
+ onPress?: (widget: Widget) => void;
254
+ }
255
+ export function Icon(props: IconProps): Widget;
256
+
257
+ interface ImageProps extends CommonProps {
258
+ src: string;
259
+ alt?: string;
260
+ width?: Size;
261
+ height?: Size;
262
+ fit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
263
+ circular?: boolean;
264
+ onLoad?: (widget: Widget) => void;
265
+ onError?: (widget: Widget) => void;
266
+ onPress?: (widget: Widget) => void;
267
+ }
268
+ export function Image(props: ImageProps): Widget;
269
+
270
+ interface AvatarProps extends CommonProps {
271
+ src?: string;
272
+ name?: string;
273
+ icon?: string;
274
+ size?: number;
275
+ bgColor?: Color;
276
+ textColor?: Color;
277
+ shape?: 'circle' | 'rounded' | 'square';
278
+ onPress?: (widget: Widget) => void;
279
+ }
280
+ export function Avatar(props: AvatarProps): Widget & {
281
+ updateContent(newProps: Partial<AvatarProps>): void;
282
+ };
283
+
284
+ interface CardProps extends CommonProps {
285
+ child?: Widget;
286
+ children?: Widget[];
287
+ elevation?: number;
288
+ padding?: Padding;
289
+ borderRadius?: number | string;
290
+ showBorder?: boolean;
291
+ borderWidth?: number;
292
+ borderStyle?: 'solid' | 'dashed' | 'dotted';
293
+ borderColor?: Color;
294
+ onPress?: (widget: Widget) => void;
295
+ }
296
+ export function Card(props: CardProps): Widget;
297
+
298
+ interface ListTileProps extends CommonProps {
299
+ leftItem?: Widget;
300
+ title?: string | Widget;
301
+ subtitle?: string | Widget;
302
+ description?: string | Widget;
303
+ rightItem?: Widget;
304
+ onPress?: (widget: Widget) => void;
305
+ selected?: boolean;
306
+ disabled?: boolean;
307
+ divider?: boolean;
308
+ paddingHorizontal?: number;
309
+ paddingVertical?: number;
310
+ bgColor?: Color;
311
+ selectedBgColor?: Color;
312
+ hoverColor?: Color;
313
+ elevation?: number;
314
+ borderRadius?: number;
315
+ }
316
+ export function ListTile(props: ListTileProps): Widget;
317
+
318
+ interface ProgressBarProps extends CommonProps {
319
+ value?: number;
320
+ max?: number;
321
+ height?: number;
322
+ width?: number | string;
323
+ color?: Color;
324
+ backgroundColor?: Color;
325
+ borderRadius?: number;
326
+ label?: string;
327
+ showValue?: boolean;
328
+ valuePosition?: 'left' | 'right' | 'top' | 'bottom';
329
+ indeterminate?: boolean;
330
+ striped?: boolean;
331
+ animatedStripes?: boolean;
332
+ }
333
+ export function ProgressBar(props: ProgressBarProps): Widget & {
334
+ value: number;
335
+ updateProgress(value: number): void;
336
+ getValue(): number;
337
+ setValue(value: number): void;
338
+ };
339
+
340
+ interface RatingProps extends CommonProps {
341
+ value?: number;
342
+ max?: number;
343
+ size?: number;
344
+ allowHalf?: boolean;
345
+ activeColor?: Color;
346
+ inactiveColor?: Color;
347
+ showValue?: boolean;
348
+ valueColor?: Color;
349
+ valueSize?: number;
350
+ readOnly?: boolean;
351
+ gap?: number;
352
+ iconActive?: string;
353
+ iconInactive?: string;
354
+ iconHalf?: string;
355
+ onChange?: (value: number) => void;
356
+ }
357
+ export function Rating(props: RatingProps): Widget & {
358
+ value: number;
359
+ setValue(value: number): void;
360
+ getValue(): number;
361
+ };
362
+
363
+ interface ChipProps extends CommonProps {
364
+ label: string;
365
+ icon?: string;
366
+ onPress?: () => void;
367
+ onDelete?: () => void;
368
+ variant?: 'filled' | 'outlined';
369
+ color?: Color;
370
+ textColor?: Color;
371
+ borderColor?: Color;
372
+ size?: 'small' | 'medium' | 'large';
373
+ borderRadius?: number | string;
374
+ elevation?: number;
375
+ gap?: number;
376
+ }
377
+ export function Chip(props: ChipProps): Widget;
378
+
379
+ interface AdSenseProps extends CommonProps {
380
+ client?: string;
381
+ slot?: string;
382
+ format?: string;
383
+ responsive?: boolean;
384
+ test?: boolean;
385
+ width?: Size;
386
+ height?: Size;
387
+ placeholder?: boolean;
388
+ label?: string;
389
+ bgColor?: Color;
390
+ color?: Color;
391
+ borderColor?: Color;
392
+ onLoad?: (widget: Widget) => void;
393
+ onError?: (error: Error, widget: Widget) => void;
394
+ children?: Widget[];
395
+ }
396
+ export function AdSense(props: AdSenseProps): Widget & {
397
+ refresh(): Widget;
398
+ load(): void;
399
+ getElement(): Widget;
400
+ };
401
+
402
+ interface AdMobProps extends CommonProps {
403
+ adId?: string;
404
+ isTesting?: boolean;
405
+ position?: 'top' | 'bottom';
406
+ size?: string;
407
+ margin?: number;
408
+ interstitialId?: string;
409
+ rewardedId?: string;
410
+ autoShow?: boolean;
411
+ /** Opt in to native ads. Requires a configured AdMob App ID (GADApplicationIdentifier in Info.plist / APPLICATION_ID in AndroidManifest.xml); until set, mounting is placeholder-only so a misconfigured app never crashes. */
412
+ autoInitialize?: boolean;
413
+ width?: Size;
414
+ height?: Size;
415
+ placeholder?: boolean;
416
+ label?: string;
417
+ bgColor?: Color;
418
+ color?: Color;
419
+ borderColor?: Color;
420
+ plugin?: object;
421
+ onLoaded?: (widget: Widget) => void;
422
+ onFailed?: (error: Error, widget: Widget) => void;
423
+ onDismissed?: () => void;
424
+ }
425
+ export function AdMob(props: AdMobProps): Widget & {
426
+ show(): Promise<unknown>;
427
+ hide(): Promise<unknown>;
428
+ showInterstitial(): Promise<unknown>;
429
+ showRewarded(): Promise<unknown>;
430
+ getPlugin(): object | null;
431
+ };
432
+
433
+ interface BadgeProps extends CommonProps {
434
+ value: string | number;
435
+ child: Widget;
436
+ bgColor?: Color;
437
+ color?: Color;
438
+ size?: number;
439
+ position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
440
+ offset?: number;
441
+ borderWidth?: number;
442
+ borderColor?: Color;
443
+ showZero?: boolean;
444
+ max?: number;
445
+ }
446
+ export function Badge(props: BadgeProps): Widget & {
447
+ updateValue(newValue: string | number): void;
448
+ };
449
+
450
+ interface SliderProps extends CommonProps {
451
+ value?: number;
452
+ min?: number;
453
+ max?: number;
454
+ step?: number;
455
+ disabled?: boolean;
456
+ width?: number | string;
457
+ height?: number;
458
+ thumbSize?: number;
459
+ color?: Color;
460
+ trackColor?: Color;
461
+ orientation?: 'horizontal' | 'vertical';
462
+ inverted?: boolean;
463
+ showValue?: boolean;
464
+ valuePrefix?: string;
465
+ valueSuffix?: string;
466
+ showMarks?: boolean;
467
+ marks?: Array<{ value: number; label?: string; color?: Color; size?: number }>;
468
+ striped?: boolean;
469
+ animatedStripes?: boolean;
470
+ stripeColor?: string;
471
+ glow?: boolean;
472
+ onChanged?: (value: number) => void;
473
+ onChangeEnd?: (value: number) => void;
474
+ }
475
+ export function Slider(props: SliderProps): Widget & {
476
+ value: number;
477
+ min: number;
478
+ max: number;
479
+ step: number;
480
+ setValue(value: number, triggerChange?: boolean, triggerEnd?: boolean): void;
481
+ getValue(): number;
482
+ update(props: Partial<SliderProps>): void;
483
+ };
484
+
485
+ interface AccordionProps extends CommonProps {
486
+ title: string | Widget;
487
+ children: Widget;
488
+ expanded?: boolean;
489
+ onToggle?: (expanded: boolean) => void;
490
+ variant?: 'contained' | 'outlined' | 'ghost';
491
+ borderRadius?: number;
492
+ bgColor?: Color;
493
+ expandedColor?: Color;
494
+ titleColor?: Color;
495
+ titleSize?: number;
496
+ titleWeight?: string;
497
+ titlePadding?: string;
498
+ contentPadding?: string;
499
+ iconCollapsed?: string;
500
+ iconExpanded?: string;
501
+ iconColor?: Color;
502
+ iconSize?: number;
503
+ divider?: boolean;
504
+ disabled?: boolean;
505
+ animate?: boolean;
506
+ animationDuration?: number;
507
+ elevation?: number;
508
+ }
509
+ export function Accordion(props: AccordionProps): Widget & {
510
+ expanded: boolean;
511
+ setExpanded(exp: boolean, triggerCallback?: boolean): void;
512
+ toggle(): void;
513
+ update(props: Partial<AccordionProps>): void;
514
+ };
515
+
516
+ interface DividerProps extends CommonProps {
517
+ color?: Color;
518
+ thickness?: number;
519
+ margin?: number | { top?: number; right?: number; bottom?: number; left?: number };
520
+ orientation?: 'horizontal' | 'vertical';
521
+ }
522
+ export function Divider(props: DividerProps): Widget;
523
+
524
+ // =========================================================================
525
+ // Formularios e interacción
526
+ // =========================================================================
527
+ interface InputProps extends CommonProps {
528
+ value?: string;
529
+ placeholder?: string;
530
+ type?: 'text' | 'email' | 'password' | 'number' | 'tel' | 'search' | 'url';
531
+ label?: string;
532
+ error?: boolean | string;
533
+ disabled?: boolean;
534
+ readonly?: boolean;
535
+ required?: boolean;
536
+ size?: 'small' | 'medium' | 'large';
537
+ variant?: 'outlined' | 'filled' | 'underlined';
538
+ fullWidth?: boolean;
539
+ borderRadius?: number;
540
+ validation?: 'none' | 'letters' | 'numbers' | 'email' | 'alphanumeric' | 'safe' | 'custom';
541
+ maxLength?: number;
542
+ iconLeft?: string;
543
+ iconRight?: string;
544
+ iconColor?: Color;
545
+ iconSize?: number;
546
+ onIconPress?: () => void;
547
+ clearable?: boolean;
548
+ passwordToggle?: boolean;
549
+ showValidationMessage?: boolean;
550
+ showValidationIcon?: boolean;
551
+ customPattern?: string;
552
+ onValidated?: (isValid: boolean, message: string) => void;
553
+ onChange?: (value: string, event?: Event) => void;
554
+ onInput?: (value: string, event?: Event) => void;
555
+ onFocus?: (event: Event) => void;
556
+ onBlur?: (event: Event) => void;
557
+ onEnter?: (value: string, event: Event) => void;
558
+ }
559
+ export function Input(props: InputProps): Widget & {
560
+ getValue(): string;
561
+ setValue(value: string): void;
562
+ isValid(): boolean;
563
+ validate(): { valid: boolean; message: string };
564
+ reset(): void;
565
+ focus(): void;
566
+ blur(): void;
567
+ };
568
+
569
+ interface RadioProps extends CommonProps {
570
+ selected?: boolean;
571
+ onSelect?: (selected: boolean) => void;
572
+ disabled?: boolean;
573
+ size?: number;
574
+ activeColor?: Color;
575
+ label?: string;
576
+ name?: string;
577
+ }
578
+ export function Radio(props: RadioProps): Widget & {
579
+ select(): void;
580
+ unselect(): void;
581
+ isSelected(): boolean;
582
+ };
583
+
584
+ interface SwitchProps extends CommonProps {
585
+ value?: boolean;
586
+ onToggle?: (value: boolean) => void;
587
+ disabled?: boolean;
588
+ size?: 'small' | 'medium' | 'large';
589
+ activeColor?: Color;
590
+ label?: string;
591
+ }
592
+ export function Switch(props: SwitchProps): Widget & {
593
+ updateValue(value: boolean): void;
594
+ getValue(): boolean;
595
+ };
596
+
597
+ interface CheckboxProps extends CommonProps {
598
+ checked?: boolean;
599
+ onCheck?: (checked: boolean) => void;
600
+ disabled?: boolean;
601
+ size?: number;
602
+ activeColor?: Color;
603
+ label?: string;
604
+ }
605
+ export function Checkbox(props: CheckboxProps): Widget & {
606
+ setChecked(checked: boolean, triggerCallback?: boolean): void;
607
+ getChecked(): boolean;
608
+ };
609
+
610
+ type DropdownOption = { label: string; value: any; icon?: string };
611
+ interface DropdownProps extends CommonProps {
612
+ options: (string | DropdownOption)[];
613
+ value?: any;
614
+ placeholder?: string;
615
+ disabled?: boolean;
616
+ label?: string;
617
+ error?: boolean;
618
+ variant?: 'outlined' | 'filled';
619
+ size?: 'small' | 'medium' | 'large';
620
+ borderRadius?: number;
621
+ color?: Color;
622
+ bgColor?: Color;
623
+ textColor?: Color;
624
+ optionHoverColor?: Color;
625
+ clearable?: boolean;
626
+ width?: number | string;
627
+ portal?: boolean;
628
+ onChange?: (value: any, label: string) => void;
629
+ }
630
+ export function Dropdown(props: DropdownProps): Widget & {
631
+ value: any;
632
+ options: DropdownOption[];
633
+ disabled: boolean;
634
+ error: boolean;
635
+ open(): void;
636
+ close(): void;
637
+ update(props: Partial<DropdownProps>): void;
638
+ };
639
+
640
+ // =========================================================================
641
+ // Alert dialogs and feedback
642
+ // =========================================================================
643
+ interface SnackBarOptions {
644
+ message: string;
645
+ action?: string;
646
+ onAction?: () => void;
647
+ duration?: number;
648
+ type?: 'normal' | 'success' | 'error' | 'warning' | 'info';
649
+ position?: 'bottom' | 'top';
650
+ backgroundColor?: string;
651
+ textColor?: string;
652
+ actionColor?: string;
653
+ dismissible?: boolean;
654
+ borderRadius?: number;
655
+ padding?: Padding;
656
+ margin?: number;
657
+ elevation?: number;
658
+ animationDuration?: number;
659
+ zIndex?: number;
660
+ onShow?: () => void;
661
+ onClose?: () => void;
662
+ }
663
+ export function SnackBar(options: SnackBarOptions): { close(): void; show(): void; getElement(): Widget };
664
+
665
+ interface ModalProps {
666
+ title?: string;
667
+ content?: Widget | string;
668
+ actions?: Widget[];
669
+ closeOnOverlayClick?: boolean;
670
+ closeOnEsc?: boolean;
671
+ width?: number | string;
672
+ minWidth?: number;
673
+ maxWidth?: number | string;
674
+ maxHeight?: number | string;
675
+ backgroundColor?: Color;
676
+ borderRadius?: number | string;
677
+ border?: string;
678
+ borderColor?: Color;
679
+ borderWidth?: number;
680
+ shadow?: string;
681
+ elevation?: number;
682
+ padding?: Padding;
683
+ contentBgColor?: Color;
684
+ contentElevation?: number;
685
+ headerBgColor?: Color;
686
+ headerTextColor?: Color;
687
+ headerBorder?: string | false;
688
+ headerPadding?: Padding;
689
+ headerElevation?: number;
690
+ footerBgColor?: Color;
691
+ footerBorder?: string | false;
692
+ footerPadding?: Padding;
693
+ footerElevation?: number;
694
+ overlayColor?: Color;
695
+ showCloseButton?: boolean;
696
+ zIndex?: number;
697
+ onOpen?: () => void;
698
+ onClose?: () => void;
699
+ }
700
+ export function Modal(props: ModalProps): {
701
+ open(): void;
702
+ close(): void;
703
+ toggle(): void;
704
+ destroy(): void;
705
+ isOpen: boolean;
706
+ updateContent(content: Widget | string): void;
707
+ updateTitle(title: string): void;
708
+ updatePadding(padding: Padding): void;
709
+ setLoading(loading: boolean, loadingText?: string): void;
710
+ };
711
+
712
+ interface BottomSheetProps {
713
+ content: Widget;
714
+ title?: string;
715
+ actions?: Widget[];
716
+ height?: number | string;
717
+ maxHeight?: number | string;
718
+ showDragHandle?: boolean;
719
+ closeOnOverlayClick?: boolean;
720
+ closeOnDragDown?: boolean;
721
+ showCloseButton?: boolean;
722
+ backgroundColor?: Color;
723
+ overlayColor?: Color;
724
+ dragHandleColor?: Color;
725
+ headerTextColor?: Color;
726
+ headerBorderColor?: Color;
727
+ actionBorderColor?: Color;
728
+ borderRadius?: number;
729
+ shadow?: string;
730
+ headerPadding?: Padding;
731
+ contentPadding?: Padding;
732
+ actionPadding?: Padding;
733
+ dragHandlePadding?: Padding;
734
+ dragHandleWidth?: number;
735
+ dragHandleHeight?: number;
736
+ animationDuration?: number;
737
+ zIndex?: number;
738
+ overlayZIndex?: number;
739
+ onOpen?: () => void;
740
+ onClose?: () => void;
741
+ }
742
+ export function BottomSheet(props: BottomSheetProps): {
743
+ open(): void;
744
+ close(): void;
745
+ toggle(): void;
746
+ destroy(): void;
747
+ };
748
+
749
+ interface AlertDialogProps {
750
+ title: string;
751
+ message: string;
752
+ confirmText?: string;
753
+ cancelText?: string;
754
+ onConfirm?: () => void;
755
+ onCancel?: () => void;
756
+ onClose?: () => void;
757
+ variant?: 'normal' | 'danger' | 'warning' | 'success';
758
+ showCancel?: boolean;
759
+ width?: number;
760
+ borderRadius?: number;
761
+ }
762
+ export function AlertDialog(props: AlertDialogProps): {
763
+ open(): void;
764
+ close(): void;
765
+ modal: ReturnType<typeof Modal>;
766
+ };
767
+
768
+ // =========================================================================
769
+ // Navegación
770
+ // =========================================================================
771
+ interface ScaffoldProps extends CommonProps {
772
+ appBar?: Widget | boolean;
773
+ body?: Widget | Record<string, any>;
774
+ bottomBar?: Widget | boolean;
775
+ fab?: Widget | boolean;
776
+ drawer?: Widget;
777
+ leftNavBar?: Widget;
778
+ leftNavBarWidth?: number;
779
+ rightNavBar?: Widget;
780
+ rightNavBarWidth?: number;
781
+ navSideBar?: Widget;
782
+ navSideBarWidth?: number;
783
+ navSideBarPosition?: 'left' | 'right';
784
+ routes?: Record<string, any>;
785
+ backgroundColor?: Color;
786
+ closeDrawerOnNavigate?: boolean;
787
+ }
788
+ export function Scaffold(props: ScaffoldProps): Widget & {
789
+ updateLeftNavBar(cfg: any): void;
790
+ updateRightNavBar(cfg: any): void;
791
+ setLeftNavBarWidth(width: number): void;
792
+ setRightNavBarWidth(width: number): void;
793
+ openDrawer?(): void;
794
+ closeDrawer?(): void;
795
+ };
796
+
797
+ interface AdaptiveScaffoldProps extends CommonProps {
798
+ appBar?: Widget;
799
+ body?: Widget | Record<string, any>;
800
+ bottomBar?: Widget;
801
+ fab?: Widget;
802
+ drawer?: Widget;
803
+ leftNavBar?: Widget | (() => Widget);
804
+ leftNavBarWidth?: number;
805
+ rightNavBar?: Widget | (() => Widget);
806
+ rightNavBarWidth?: number;
807
+ routes?: Record<string, any>;
808
+ backgroundColor?: Color;
809
+ forceMobile?: boolean;
810
+ forceDesktop?: boolean;
811
+ }
812
+ export function AdaptiveScaffold(props: AdaptiveScaffoldProps): Widget & {
813
+ updateLeftNavBar(cfg: any): void;
814
+ updateRightNavBar(cfg: any): void;
815
+ setLeftNavBarWidth(width: number): void;
816
+ setRightNavBarWidth(width: number): void;
817
+ openDrawer?(): void;
818
+ closeDrawer?(): void;
819
+ };
820
+
821
+ interface AppBarProps extends CommonProps {
822
+ title?: string | Widget;
823
+ leading?: Widget;
824
+ actions?: Widget[];
825
+ actionsGap?: number;
826
+ backgroundColor?: Color;
827
+ gradient?: string;
828
+ titleColor?: Color;
829
+ iconColor?: Color;
830
+ elevation?: number;
831
+ centerTitle?: boolean;
832
+ titleSize?: number;
833
+ titleWeight?: string;
834
+ showBackButton?: boolean;
835
+ backButtonRoute?: string;
836
+ onBackPress?: () => void;
837
+ sticky?: boolean;
838
+ hideOnScroll?: boolean;
839
+ scrollThreshold?: number;
840
+ margin?: Margin;
841
+ padding?: Padding;
842
+ borderRadius?: number;
843
+ shadow?: boolean;
844
+ }
845
+ export function AppBar(props: AppBarProps): Widget & {
846
+ setTitle(title: string): void;
847
+ setBackgroundColor(color: string): void;
848
+ show(): void;
849
+ hide(): void;
850
+ };
851
+
852
+ interface DrawerItemProps extends CommonProps {
853
+ icon?: string;
854
+ label: string;
855
+ route?: string;
856
+ onPress?: () => void;
857
+ onSelect?: () => void;
858
+ trailingIcon?: string;
859
+ hintColor?: Color;
860
+ selectedColor?: Color;
861
+ unselectedColor?: Color;
862
+ iconColor?: Color;
863
+ trailingIconColor?: Color;
864
+ closeOnPress?: boolean;
865
+ disableTransform?: boolean;
866
+ }
867
+ export function DrawerItem(props: DrawerItemProps): Widget;
868
+
869
+ interface DrawerInstance {
870
+ open(): void;
871
+ close(): void;
872
+ toggle(): void;
873
+ destroy(): void;
874
+ element: HTMLElement;
875
+ }
876
+ interface DrawerProps {
877
+ header?: Widget;
878
+ body?: Widget[];
879
+ footer?: Widget;
880
+ position?: 'left' | 'right';
881
+ width?: number;
882
+ onClose?: () => void;
883
+ onOpen?: () => void;
884
+ blur?: boolean;
885
+ blurIntensity?: number;
886
+ bgColor?: Color;
887
+ elevation?: number;
888
+ closeOnOverlayClick?: boolean;
889
+ closeOnEsc?: boolean;
890
+ borderRadius?: number;
891
+ margin?: number;
892
+ }
893
+ export function Drawer(props: DrawerProps): DrawerInstance;
894
+ export function openDrawer(): void;
895
+ export function closeDrawer(): void;
896
+ export function toggleDrawer(): void;
897
+ export function destroyDrawer(): void;
898
+
899
+ interface BottomNavigationProps extends CommonProps {
900
+ items: Array<{ icon: string; label?: string; route?: string; onPress?: () => void }>;
901
+ currentIndex?: number;
902
+ onTabChange?: (index: number) => void;
903
+ backgroundColor?: Color;
904
+ selectedColor?: Color;
905
+ unselectedColor?: Color;
906
+ showLabels?: boolean;
907
+ iconSize?: number;
908
+ height?: number;
909
+ margin?: Margin;
910
+ borderRadius?: number;
911
+ padding?: Padding;
912
+ shadow?: boolean;
913
+ elevation?: number;
914
+ useRouter?: boolean;
915
+ }
916
+ export function BottomNavigation(props: BottomNavigationProps): Widget & {
917
+ setActiveIndex(index: number): void;
918
+ getActiveIndex(): number;
919
+ getCurrentRoute(): string | null;
920
+ };
921
+
922
+ interface FloatingActionButtonProps extends CommonProps {
923
+ icon?: string | Widget;
924
+ label?: string;
925
+ onPress?: () => void;
926
+ backgroundColor?: Color;
927
+ foregroundColor?: Color;
928
+ elevation?: number;
929
+ mini?: boolean;
930
+ extended?: boolean;
931
+ disabled?: boolean;
932
+ margin?: number;
933
+ }
934
+ export function FloatingActionButton(props: FloatingActionButtonProps): Widget;
935
+
936
+ interface TabsProps extends CommonProps {
937
+ tabs: (string | { label: string; icon?: string; badge?: number | string })[];
938
+ children: Widget[];
939
+ activeIndex?: number;
940
+ onChange?: (index: number) => void;
941
+ variant?: 'underline' | 'filled' | 'slider' | 'pills';
942
+ size?: 'small' | 'medium' | 'large';
943
+ color?: Color;
944
+ textColor?: Color;
945
+ activeTextColor?: Color;
946
+ bgColor?: Color;
947
+ buttonColor?: Color;
948
+ fullWidth?: boolean;
949
+ showDivider?: boolean;
950
+ dividerColor?: Color;
951
+ showIcon?: boolean;
952
+ iconPosition?: 'left' | 'right' | 'top' | 'bottom';
953
+ iconSize?: number;
954
+ badges?: (number | string)[];
955
+ alignment?: 'left' | 'center' | 'right';
956
+ }
957
+ export function Tabs(props: TabsProps): Widget & {
958
+ activeIndex: number;
959
+ setActiveTab(index: number): void;
960
+ };
961
+
962
+ interface CollapsibleSideBarProps extends CommonProps {
963
+ children: Widget;
964
+ expanded?: boolean;
965
+ id?: string;
966
+ widthExpanded?: number;
967
+ widthCollapsed?: number;
968
+ iconSize?: number;
969
+ onToggle?: (expanded: boolean) => void;
970
+ bgColor?: Color;
971
+ borderRight?: string;
972
+ }
973
+ export function CollapsibleSideBar(props: CollapsibleSideBarProps): Widget & {
974
+ updateWidth(width: number): void;
975
+ };
976
+
977
+ // =========================================================================
978
+ // Router
979
+ // =========================================================================
980
+ export function initRouter(routes: Record<string, any>, initialPath?: string): void;
981
+ export function goTo(path: string, params?: Record<string, any>): void;
982
+ export function goBack(): void;
983
+ export function goForward(): void;
984
+ export function replace(path: string, params?: Record<string, any>): void;
985
+ export function getCurrentPath(): string;
986
+ export function getCurrentRoute(): any;
987
+ export function getCurrentRouteConfig(): { route: any; params: Record<string, any>; query: Record<string, any>; path: string };
988
+ export function getRoute(path: string): any;
989
+ export function isActive(path: string, exact?: boolean): boolean;
990
+ export function subscribe(callback: (route: any, params: any, query: any) => void): () => void;
991
+ export function useParams(): Record<string, any>;
992
+ export function useQueryParams(): Record<string, any>;
993
+ export function buildUrl(pattern: string, params?: Record<string, any>, query?: Record<string, any>): string;
994
+ export function clearRouter(): void;
995
+
996
+ // =========================================================================
997
+ // Animations
998
+ // =========================================================================
999
+ interface AnimationStep {
1000
+ effect: string;
1001
+ from: any;
1002
+ to: any;
1003
+ duration?: number;
1004
+ reverse?: boolean;
1005
+ loop?: boolean;
1006
+ delay?: string;
1007
+ }
1008
+ interface AnimatedBoxProps extends CommonProps {
1009
+ animations: AnimationStep[];
1010
+ child: Widget;
1011
+ timing?: string;
1012
+ delay?: string;
1013
+ fillMode?: string;
1014
+ top?: number | string;
1015
+ right?: number | string;
1016
+ bottom?: number | string;
1017
+ left?: number | string;
1018
+ }
1019
+ export function AnimatedBox(props: AnimatedBoxProps): Widget;
1020
+
1021
+ interface AnimatedTextProps extends CommonProps {
1022
+ child: Widget;
1023
+ animations: AnimationStep[];
1024
+ sameTime?: boolean;
1025
+ delayBetween?: number;
1026
+ orientation?: 'row' | 'column';
1027
+ }
1028
+ export function AnimatedText(props: AnimatedTextProps): Widget;
1029
+
1030
+ interface MatrixRainProps extends CommonProps {
1031
+ chars?: string;
1032
+ fontSize?: number;
1033
+ speed?: number;
1034
+ fadeAmount?: number;
1035
+ resetProbability?: number;
1036
+ useDynamicColor?: boolean;
1037
+ position?: 'fixed' | 'absolute';
1038
+ zIndex?: number;
1039
+ }
1040
+ export function MatrixRain(props?: MatrixRainProps): Widget;
1041
+
1042
+ interface ParallaxBoxProps extends CommonProps {
1043
+ child: Widget;
1044
+ type?: 'scroll' | 'mouse' | 'hover';
1045
+ speed?: number;
1046
+ direction?: 'vertical' | 'horizontal' | 'both';
1047
+ maxOffset?: number;
1048
+ reverse?: boolean;
1049
+ disabled?: boolean;
1050
+ onParallaxMove?: (offset: { x: number; y: number }) => void;
1051
+ duration?: number;
1052
+ easing?: string;
1053
+ }
1054
+ export function ParallaxBox(props: ParallaxBoxProps): Widget & {
1055
+ updateSpeed(speed: number): void;
1056
+ updateDirection(direction: string): void;
1057
+ setPosition(x: number, y: number, animate?: boolean): void;
1058
+ reset(animate?: boolean): void;
1059
+ };
1060
+
1061
+ export function animate(
1062
+ widget: Widget,
1063
+ property: string,
1064
+ from: any,
1065
+ to: any,
1066
+ duration?: number,
1067
+ easing?: string
1068
+ ): void;
1069
+ export function animateAsync(
1070
+ widget: Widget,
1071
+ property: string,
1072
+ from: any,
1073
+ to: any,
1074
+ duration?: number,
1075
+ easing?: string
1076
+ ): Promise<Widget>;
1077
+ export function fadeOut(widget: Widget, duration?: number): void;
1078
+ export function fadeIn(widget: Widget, duration?: number): void;
1079
+ export function pulse(widget: Widget, duration?: number): void;
1080
+ export function fadeOutAsync(widget: Widget, duration?: number): Promise<Widget>;
1081
+ export function fadeInAsync(widget: Widget, duration?: number): Promise<Widget>;
1082
+ export function pulseAsync(widget: Widget, duration?: number): Promise<Widget>;
1083
+
1084
+ // =========================================================================
1085
+ // Widgets adicionales (Data, Media, Utils)
1086
+ // =========================================================================
1087
+ interface DataTableColumn {
1088
+ key: string;
1089
+ label: string;
1090
+ align?: 'left' | 'center' | 'right';
1091
+ format?: (value: any, row: any) => string;
1092
+ }
1093
+ interface DataTableProps extends CommonProps {
1094
+ columns: (string | DataTableColumn)[];
1095
+ rows: Record<string, any>[];
1096
+ striped?: boolean;
1097
+ hoverable?: boolean;
1098
+ bordered?: boolean;
1099
+ onRowClick?: (row: any, index: number) => void;
1100
+ headerBgColor?: Color;
1101
+ headerTextColor?: Color;
1102
+ headerFontWeight?: string;
1103
+ headerFontSize?: number;
1104
+ rowBgColor?: Color;
1105
+ rowTextColor?: Color;
1106
+ rowFontSize?: number;
1107
+ stripedRowBgColor?: Color;
1108
+ hoverRowBgColor?: Color;
1109
+ borderColor?: Color;
1110
+ borderWidth?: number;
1111
+ cellPadding?: Padding;
1112
+ headerCellPadding?: Padding;
1113
+ }
1114
+ export function DataTable(props: DataTableProps): Widget & {
1115
+ updateData(rows: any[]): void;
1116
+ updateColumns(columns: DataTableColumn[]): void;
1117
+ };
1118
+
1119
+ interface ChartProps extends CommonProps {
1120
+ type?: 'bar' | 'line' | 'area' | 'candle';
1121
+ data: number[] | Array<{ open: number; high: number; low: number; close: number }>;
1122
+ labels?: string[];
1123
+ width?: number | string;
1124
+ height?: number;
1125
+ bgColor?: Color;
1126
+ padding?: number | { top: number; right: number; bottom: number; left: number };
1127
+ candleWidth?: number;
1128
+ candleSpacing?: number;
1129
+ barColor?: Color;
1130
+ lineColor?: Color;
1131
+ areaColor?: Color;
1132
+ smooth?: boolean;
1133
+ areaGradient?: boolean;
1134
+ areaGradientColors?: [string, string];
1135
+ candleUpColor?: Color;
1136
+ candleDownColor?: Color;
1137
+ axisColor?: Color;
1138
+ textColor?: Color;
1139
+ yAxisColor?: Color;
1140
+ showGrid?: boolean;
1141
+ showLabels?: boolean;
1142
+ showValues?: boolean;
1143
+ borderRadius?: number;
1144
+ }
1145
+ export function Chart(props: ChartProps): Widget & {
1146
+ updateData(newData: any[], newLabels?: string[]): void;
1147
+ redraw(): void;
1148
+ };
1149
+
1150
+ interface QRCodeProps extends CommonProps {
1151
+ value: string;
1152
+ size?: number;
1153
+ bgColor?: Color;
1154
+ fgColor?: Color;
1155
+ errorCorrection?: 'L' | 'M' | 'Q' | 'H';
1156
+ margin?: number;
1157
+ }
1158
+ export function QRCode(props: QRCodeProps): Widget & {
1159
+ updateValue(value: string): void;
1160
+ download(filename?: string): void;
1161
+ getDataURL(): string;
1162
+ getCanvas(): HTMLCanvasElement;
1163
+ getValue(): string;
1164
+ };
1165
+
1166
+ interface CodeViewerProps extends CommonProps {
1167
+ code: string;
1168
+ title?: string;
1169
+ maxHeight?: number;
1170
+ fontSize?: number;
1171
+ backgroundColor?: Color;
1172
+ padding?: Padding;
1173
+ borderRadius?: number;
1174
+ showHeader?: boolean;
1175
+ showLineNumbers?: boolean;
1176
+ startingLineNumber?: number;
1177
+ lineNumberWidth?: number;
1178
+ lineNumberColor?: Color;
1179
+ }
1180
+ export function CodeViewer(props: CodeViewerProps): Widget & {
1181
+ updateCode(code: string): void;
1182
+ updateTitle(title: string): void;
1183
+ scrollTo(x: number, y: number): void;
1184
+ scrollToStart(): void;
1185
+ scrollToEnd(): void;
1186
+ };
1187
+
1188
+ interface InspectorProps {
1189
+ widget: Widget;
1190
+ indent?: number;
1191
+ }
1192
+ export function Inspector(widget: Widget, indent?: number): string;
1193
+ export function printWidgetCode(widget: Widget): void;
1194
+ export function inspectWidget(widget: Widget): Widget;
1195
+
1196
+ interface DraggBoxProps extends CommonProps {
1197
+ child: Widget;
1198
+ data?: any;
1199
+ group?: string;
1200
+ disabled?: boolean;
1201
+ onDragStart?: (event: DragEvent, data: any) => void;
1202
+ onDragEnd?: (event: DragEvent, data: any) => void;
1203
+ dragImage?: HTMLElement;
1204
+ cloneOnDrag?: boolean;
1205
+ opacity?: number;
1206
+ dragOverlayColor?: Color;
1207
+ dragBorderColor?: Color;
1208
+ }
1209
+ export function DraggBox(props: DraggBoxProps): Widget;
1210
+
1211
+ interface DroppBoxProps extends CommonProps {
1212
+ child: Widget;
1213
+ onDrop?: (data: any, group: string, event: DragEvent) => void;
1214
+ onDragEnter?: (event: DragEvent) => void;
1215
+ onDragLeave?: (event: DragEvent) => void;
1216
+ onDragOver?: (event: DragEvent) => void;
1217
+ acceptGroups?: string[];
1218
+ disabled?: boolean;
1219
+ bgColor?: Color;
1220
+ borderRadius?: number;
1221
+ borderWidth?: number;
1222
+ borderStyle?: string;
1223
+ borderColor?: Color;
1224
+ shadow?: string;
1225
+ padding?: Padding;
1226
+ activeBgColor?: Color;
1227
+ activeBorderColor?: Color;
1228
+ activeBorderWidth?: number;
1229
+ activeBorderStyle?: string;
1230
+ activeShadow?: string;
1231
+ validBgColor?: Color;
1232
+ validBorderColor?: Color;
1233
+ invalidBgColor?: Color;
1234
+ invalidBorderColor?: Color;
1235
+ transitionDuration?: string;
1236
+ transitionTiming?: string;
1237
+ showFeedback?: boolean;
1238
+ }
1239
+ export function DroppBox(props: DroppBoxProps): Widget;
1240
+
1241
+ interface CarouselProps extends CommonProps {
1242
+ items: (Widget | string | { src: string; alt?: string })[];
1243
+ autoPlay?: boolean;
1244
+ interval?: number;
1245
+ showArrows?: boolean;
1246
+ showDots?: boolean;
1247
+ infinite?: boolean;
1248
+ height?: number | string;
1249
+ width?: number | string;
1250
+ borderRadius?: number;
1251
+ dotColor?: Color;
1252
+ dotActiveColor?: Color;
1253
+ dotSize?: number;
1254
+ dotActiveSize?: number;
1255
+ buttonBgColor?: Color;
1256
+ buttonIconColor?: Color;
1257
+ buttonSize?: number;
1258
+ buttonIconSize?: number;
1259
+ buttonTop?: number | string;
1260
+ onIndexChange?: (index: number) => void;
1261
+ }
1262
+ export function Carousel(props: CarouselProps): Widget & {
1263
+ next(): void;
1264
+ prev(): void;
1265
+ goTo(index: number): void;
1266
+ getCurrentIndex(): number;
1267
+ };
1268
+
1269
+ interface TooltipProps extends CommonProps {
1270
+ text: string;
1271
+ child: Widget;
1272
+ position?: 'top' | 'bottom' | 'left' | 'right';
1273
+ delay?: number;
1274
+ bgColor?: Color;
1275
+ textColor?: Color;
1276
+ fontSize?: number;
1277
+ padding?: Padding;
1278
+ borderRadius?: number;
1279
+ offset?: number;
1280
+ showArrow?: boolean;
1281
+ disabled?: boolean;
1282
+ maxWidth?: number;
1283
+ textAlign?: 'left' | 'center' | 'right';
1284
+ zIndex?: number;
1285
+ animationDuration?: number;
1286
+ arrowSize?: number;
1287
+ borderColor?: Color;
1288
+ borderWidth?: number;
1289
+ shadow?: string;
1290
+ }
1291
+ export function Tooltip(props: TooltipProps): Widget & {
1292
+ showTooltip(): void;
1293
+ hideTooltip(): void;
1294
+ updateContent(newText: string): void;
1295
+ updatePosition(): void;
1296
+ };
1297
+
1298
+ interface PaginationProps extends CommonProps {
1299
+ totalItems: number;
1300
+ pageSize?: number;
1301
+ currentPage?: number;
1302
+ onPageChange: (page: number) => void;
1303
+ showFirstLast?: boolean;
1304
+ showPrevNext?: boolean;
1305
+ maxButtons?: number;
1306
+ variant?: 'outlined' | 'filled' | 'text';
1307
+ color?: Color;
1308
+ size?: 'small' | 'medium' | 'large';
1309
+ disabled?: boolean;
1310
+ showTotal?: boolean;
1311
+ label?: string;
1312
+ }
1313
+ export function Pagination(props: PaginationProps): Widget;
1314
+
1315
+ interface TreeViewProps extends CommonProps {
1316
+ nodes: Array<{
1317
+ id: string;
1318
+ label: string;
1319
+ icon?: string;
1320
+ iconColor?: Color;
1321
+ children?: any[];
1322
+ badge?: string | number;
1323
+ }>;
1324
+ onSelect?: (node: any) => void;
1325
+ onToggle?: (nodeId: string, expanded: boolean) => void;
1326
+ expandedNodes?: string[];
1327
+ indent?: number;
1328
+ showIcons?: boolean;
1329
+ folderIcon?: string;
1330
+ folderOpenIcon?: string;
1331
+ fileIcon?: string;
1332
+ expandIcon?: string;
1333
+ collapseIcon?: string;
1334
+ defaultExpanded?: boolean;
1335
+ selectable?: boolean;
1336
+ selectedNodeId?: string | null;
1337
+ bgColor?: Color;
1338
+ hoverBgColor?: Color;
1339
+ selectedBgColor?: Color;
1340
+ textColor?: Color;
1341
+ selectedTextColor?: Color;
1342
+ iconColor?: Color;
1343
+ folderIconColor?: Color;
1344
+ borderColor?: Color;
1345
+ nodePadding?: Padding;
1346
+ nodeGap?: number;
1347
+ childrenGap?: number;
1348
+ borderRadius?: number;
1349
+ fontSize?: number;
1350
+ iconSize?: number;
1351
+ transitionDuration?: string;
1352
+ }
1353
+ export function TreeView(props: TreeViewProps): Widget & {
1354
+ updateNodes(nodes: any[], selectedId?: string | null): void;
1355
+ expandAll(): void;
1356
+ collapseAll(): void;
1357
+ expandTo(nodeId: string): void;
1358
+ collapseTo(nodeId: string): void;
1359
+ getExpanded(): string[];
1360
+ getSelected(): string | null;
1361
+ setSelected(nodeId: string): void;
1362
+ };
1363
+
1364
+ interface StepperProps extends CommonProps {
1365
+ steps: Array<{ label: string; content: Widget; icon?: string }>;
1366
+ activeStep?: number;
1367
+ onStepChange?: (index: number) => void;
1368
+ orientation?: 'horizontal' | 'vertical';
1369
+ variant?: 'circles' | 'numbers' | 'icons';
1370
+ showLabels?: boolean;
1371
+ showNavigation?: boolean;
1372
+ nextLabel?: string;
1373
+ backLabel?: string;
1374
+ finishLabel?: string;
1375
+ onFinish?: () => void;
1376
+ bgColor?: Color;
1377
+ borderRadius?: number;
1378
+ border?: string;
1379
+ borderColor?: Color;
1380
+ borderWidth?: number;
1381
+ shadow?: string;
1382
+ padding?: Padding;
1383
+ margin?: Margin;
1384
+ width?: number | string;
1385
+ }
1386
+ export function Stepper(props: StepperProps): Widget & {
1387
+ goTo(index: number): void;
1388
+ next(): void;
1389
+ back(): void;
1390
+ getActiveStep(): number;
1391
+ };
1392
+
1393
+ interface SkeletonProps extends CommonProps {
1394
+ variant?: 'text' | 'circular' | 'avatar' | 'image' | 'card' | 'listTile' | 'button';
1395
+ width?: number | string;
1396
+ height?: number | string;
1397
+ borderRadius?: number | string;
1398
+ animation?: 'pulse' | 'wave' | 'none';
1399
+ count?: number;
1400
+ gap?: number;
1401
+ bgColor?: Color;
1402
+ highlightColor?: Color;
1403
+ shimmerColor?: Color;
1404
+ pulseDuration?: string;
1405
+ waveDuration?: string;
1406
+ }
1407
+ export function Skeleton(props: SkeletonProps): Widget;
1408
+
1409
+ interface InstallButtonProps extends CommonProps {
1410
+ text?: string;
1411
+ variant?: 'filled' | 'outlined' | 'text';
1412
+ size?: 'small' | 'medium' | 'large';
1413
+ borderRadius?: number;
1414
+ padding?: Padding;
1415
+ bottom?: number;
1416
+ onInstalled?: () => void;
1417
+ onClick?: () => void;
1418
+ }
1419
+ export function InstallButton(props: InstallButtonProps): Widget;
1420
+
1421
+ interface VideoProps extends CommonProps {
1422
+ src: string;
1423
+ width?: number | string;
1424
+ height?: number | string;
1425
+ autoplay?: boolean;
1426
+ controls?: boolean;
1427
+ loop?: boolean;
1428
+ muted?: boolean;
1429
+ poster?: string;
1430
+ ref?: (video: HTMLVideoElement) => void;
1431
+ }
1432
+ export function Video(props: VideoProps): HTMLVideoElement & {
1433
+ playVideo(): void;
1434
+ pauseVideo(): void;
1435
+ stop(): void;
1436
+ restart(): void;
1437
+ volumeUp(step?: number): void;
1438
+ volumeDown(step?: number): void;
1439
+ muteVideo(): void;
1440
+ unmuteVideo(): void;
1441
+ };
1442
+
1443
+ interface AudioProps extends CommonProps {
1444
+ src: string;
1445
+ autoplay?: boolean;
1446
+ controls?: boolean;
1447
+ loop?: boolean;
1448
+ muted?: boolean;
1449
+ volume?: number;
1450
+ onPlay?: () => void;
1451
+ onPause?: () => void;
1452
+ onEnd?: () => void;
1453
+ onTimeUpdate?: (current: number, duration: number, percent: number) => void;
1454
+ onProgress?: (percent: number) => void;
1455
+ onLoad?: (duration: number) => void;
1456
+ ref?: (audio: HTMLAudioElement) => void;
1457
+ }
1458
+ export function Audio(props: AudioProps): HTMLAudioElement & {
1459
+ playAudio(): void;
1460
+ pauseAudio(): void;
1461
+ stop(): void;
1462
+ seekTo(seconds: number): void;
1463
+ seekToPercent(percent: number): void;
1464
+ getCurrentTime(): number;
1465
+ getDuration(): number;
1466
+ getProgressPercent(): number;
1467
+ volumeUp(step?: number): void;
1468
+ volumeDown(step?: number): void;
1469
+ muteAudio(): void;
1470
+ unmuteAudio(): void;
1471
+ isPlaying(): boolean;
1472
+ };
1473
+
1474
+ interface CircularBarProps extends CommonProps {
1475
+ value?: number;
1476
+ max?: number;
1477
+ size?: number;
1478
+ strokeWidth?: number;
1479
+ color?: Color;
1480
+ backgroundColor?: Color;
1481
+ showValue?: boolean;
1482
+ valueColor?: Color;
1483
+ valueSize?: number;
1484
+ label?: string;
1485
+ labelColor?: Color;
1486
+ labelSize?: number;
1487
+ lineCap?: 'butt' | 'round' | 'square';
1488
+ animate?: boolean;
1489
+ animationDuration?: number;
1490
+ onComplete?: () => void;
1491
+ ref?: (canvas: HTMLCanvasElement) => void;
1492
+ // Nuevas props
1493
+ valueFormat?: 'percent' | 'value' | 'custom';
1494
+ valueSuffix?: string;
1495
+ valuePrefix?: string;
1496
+ valueDecimals?: number;
1497
+ customValueFormatter?: (value: number, max: number) => string;
1498
+ gradient?: string | string[];
1499
+ gradientAngle?: number;
1500
+ shadowBlur?: number;
1501
+ shadowColor?: string;
1502
+ glow?: boolean;
1503
+ glowColor?: string;
1504
+ markers?: Array<{ value: number; color?: Color; size?: number; label?: string }>;
1505
+ innerStrokeWidth?: number;
1506
+ innerColor?: Color;
1507
+ onClick?: (data: { value: number; max: number; percent: number }) => void;
1508
+ onHover?: (hovering: boolean, data: { value: number; max: number }) => void;
1509
+ subtitle?: string;
1510
+ subtitleColor?: Color;
1511
+ subtitleSize?: number;
1512
+ tooltip?: string;
1513
+ }
1514
+ export function CircularBar(props: CircularBarProps): Widget & {
1515
+ updateValue(newValue: number, newMax?: number): void;
1516
+ };
1517
+
1518
+ interface CircularChartSlice {
1519
+ value: number;
1520
+ label?: string;
1521
+ color?: Color;
1522
+ }
1523
+
1524
+ interface CircularChartProps extends CommonProps {
1525
+ data?: CircularChartSlice[];
1526
+ size?: number;
1527
+ strokeWidth?: number;
1528
+ innerRadius?: number;
1529
+ rounded?: boolean;
1530
+ cornerRadius?: number;
1531
+ startAngle?: number;
1532
+ endAngle?: number;
1533
+ animate?: boolean;
1534
+ animationDuration?: number;
1535
+ onComplete?: () => void;
1536
+ centerContent?: string | Widget | null;
1537
+ showLabels?: boolean;
1538
+ labelSize?: number;
1539
+ labelColor?: Color;
1540
+ onClick?: (slice: CircularChartSlice, index: number) => void;
1541
+ onHover?: (slice: CircularChartSlice | null, index: number) => void;
1542
+ defaultColors?: Color[];
1543
+ ref?: (canvas: HTMLCanvasElement) => void;
1544
+ shadowBlur?: number;
1545
+ shadowColor?: string;
1546
+ glow?: boolean;
1547
+ glowColor?: string;
1548
+ semiCircle?: 'top' | 'bottom' | 'left' | 'right' | null;
1549
+ borderRadius?: number;
1550
+ borderColor?: Color;
1551
+ borderWidth?: number;
1552
+ sliceBorderWidth?: number;
1553
+ sliceBorderColor?: Color;
1554
+ }
1555
+ export function CircularChart(props: CircularChartProps): Widget & {
1556
+ updateData(data: CircularChartSlice[], animate?: boolean): void;
1557
+ redraw(): void;
1558
+ setCornerRadius(radius: number): void;
1559
+ };
1560
+
1561
+ interface MarkdownProps extends CommonProps {
1562
+ text?: string;
1563
+ source?: string;
1564
+ content?: string;
1565
+ children?: string;
1566
+ fontSize?: number;
1567
+ fontFamily?: string;
1568
+ lineHeight?: number;
1569
+ color?: Color;
1570
+ linkColor?: Color;
1571
+ linkHoverColor?: Color;
1572
+ linkUnderline?: boolean;
1573
+ codeBgColor?: Color;
1574
+ codeColor?: Color;
1575
+ codeFontSize?: number;
1576
+ codeFontFamily?: string;
1577
+ codeBorderRadius?: number;
1578
+ codePadding?: Padding;
1579
+ preBgColor?: Color;
1580
+ preBorderRadius?: number;
1581
+ prePadding?: Padding;
1582
+ preMargin?: Padding;
1583
+ blockquoteBorderColor?: Color;
1584
+ blockquoteBorderWidth?: number;
1585
+ blockquoteColor?: Color;
1586
+ blockquotePadding?: Padding;
1587
+ blockquoteMargin?: Padding;
1588
+ tableBorderColor?: Color;
1589
+ tableHeaderBgColor?: Color;
1590
+ tableCellPadding?: Padding;
1591
+ headingColor?: Color;
1592
+ headingMargin?: Padding;
1593
+ listMargin?: Padding;
1594
+ listPadding?: Padding;
1595
+ listItemMargin?: Padding;
1596
+ imageMaxWidth?: string;
1597
+ imageBorderRadius?: number;
1598
+ padding?: Padding;
1599
+ maxHeight?: number;
1600
+ overflow?: string;
1601
+ backgroundColor?: Color;
1602
+ borderRadius?: number;
1603
+ allowDangerousHtml?: boolean;
1604
+ }
1605
+ export function Markdown(props: MarkdownProps): Widget & {
1606
+ updateContent(newText: string): void;
1607
+ getContent(): string;
1608
+ getSource(): string;
1609
+ };
1610
+
1611
+ // =========================================================================
1612
+ // Core
1613
+ // =========================================================================
1614
+ export function runApp(App: () => Widget, rootId?: string, preventRefresh?: boolean, routes?: any): void;
1615
+ export function createApp(routes: any, options?: { rootId?: string; fallback?: Widget | (() => Widget) }): {
1616
+ start(): void;
1617
+ destroy(): void;
1618
+ };
1619
+ export function insertBy(widget: Widget, rootId?: string): Widget;
1620
+ export function prependBy(widget: Widget, rootId?: string): Widget;
1621
+ export function insertBefore(widget: Widget, targetId: string | HTMLElement): Widget;
1622
+ export function insertAfter(widget: Widget, targetId: string | HTMLElement): Widget;
1623
+ export function replaceBy(widget: Widget, targetId: string | HTMLElement): Widget;
1624
+ export function mountAll(widget: Widget, rootIds: string[]): Widget;
1625
+
1626
+ // =========================================================================
1627
+ // PWA & HMR
1628
+ // =========================================================================
1629
+ export function installPWA(): boolean;
1630
+ export function updatePWA(): boolean;
1631
+ export function removePWA(): void;
1632
+ export function isPWAInstalled(): boolean;
1633
+ export function initHMR(): void;
1634
+ export function getHMR(): WebSocket | null;
1635
+
1636
+ // =========================================================================
1637
+ // Utils (temas, dimensiones, aleatorios, etc.)
1638
+ // =========================================================================
1639
+ export const colors: Record<string, string>;
1640
+ export const palettes: Record<string, Record<string, string>>;
1641
+ export function setTheme(themeName: 'light' | 'dark'): Record<string, string>;
1642
+ export function getTheme(): string;
1643
+ export function toggleTheme(): string;
1644
+ export function getColor(colorName: string, opacity?: number): string;
1645
+ export function subscribeTheme(callback: (colors: Record<string, string>) => void): () => void;
1646
+ export function applySystemTheme(): string;
1647
+ export function watchSystemTheme(): () => void;
1648
+ export const ThemeProvider: (props: { children: Widget; theme?: 'light' | 'dark' }) => Widget;
1649
+ export function useTheme(): {
1650
+ colors: Record<string, string>;
1651
+ setTheme: typeof setTheme;
1652
+ getTheme: typeof getTheme;
1653
+ toggleTheme: typeof toggleTheme;
1654
+ getColor: typeof getColor;
1655
+ applySystemTheme: typeof applySystemTheme;
1656
+ };
1657
+
1658
+ export const clipboard: {
1659
+ copy(text: string): void;
1660
+ read(): Promise<string>;
1661
+ copyWithFeedback(text: string, element: HTMLElement): void;
1662
+ };
1663
+
1664
+ export const createList: {
1665
+ <T>(schema: Record<string, any>, count?: number): T[];
1666
+ fromData<T, R>(data: T[], mapper: Record<string, (item: T, index: number) => any>): R[];
1667
+ range(start: number, end: number, mapper?: (value: number, index: number) => any): any[];
1668
+ repeat<T>(value: T, count: number): T[];
1669
+ paginate<T>(list: T[], page?: number, pageSize?: number): {
1670
+ data: T[];
1671
+ page: number;
1672
+ pageSize: number;
1673
+ total: number;
1674
+ totalPages: number;
1675
+ hasNext: boolean;
1676
+ hasPrev: boolean;
1677
+ startIndex: number;
1678
+ endIndex: number;
1679
+ };
1680
+ search<T>(list: T[], query: string | ((item: T) => boolean), fields?: string[]): T[];
1681
+ sort<T>(list: T[], field: keyof T, order?: 'asc' | 'desc'): T[];
1682
+ groupBy<T>(list: T[], field: keyof T): Record<string, T[]>;
1683
+ };
1684
+
1685
+ export const mapList: {
1686
+ <T>(list: T[] | number | Record<string, any>, fn: (item: any, index: number | string, key?: string) => Widget): Widget[];
1687
+ };
1688
+ export const repeat: (count: number, widget: Widget | ((index: number) => Widget)) => Widget[];
1689
+ export const range: (start: number, end?: number, step?: number) => number[];
1690
+
1691
+ export function delay(ms: number): Promise<void>;
1692
+ export function withMinDelay<T>(promise: Promise<T>, minMs?: number): Promise<T>;
1693
+ export function retry<T>(fn: () => Promise<T>, retries?: number, delayMs?: number): Promise<T>;
1694
+ export function sleep(ms: number): Promise<void>;
1695
+ export function now(): number;
1696
+
1697
+ export const dimensions: {
1698
+ width: number;
1699
+ height: number;
1700
+ get(): { width: number; height: number };
1701
+ getWidth(): number;
1702
+ getHeight(): number;
1703
+ addListener(callback: (dim: { width: number; height: number }) => void): () => void;
1704
+ removeListener(callback: (dim: { width: number; height: number }) => void): void;
1705
+ };
1706
+ export const width: number;
1707
+ export const height: number;
1708
+
1709
+ export const device: {
1710
+ isMobile(): boolean;
1711
+ isTablet(): boolean;
1712
+ isDesktop(): boolean;
1713
+ orientation(): 'portrait' | 'landscape';
1714
+ isTouch(): boolean;
1715
+ hasGesture(): boolean;
1716
+ onOrientationChange(callback: (orientation: string) => void): void;
1717
+ onResize(callback: (size: { width: number; height: number; orientation: string }) => void): void;
1718
+ };
1719
+
1720
+ export const os: {
1721
+ name(): string;
1722
+ version(): string;
1723
+ isMobile(): boolean;
1724
+ isDesktop(): boolean;
1725
+ };
1726
+
1727
+ export const random: {
1728
+ number(min?: number, max?: number): number;
1729
+ string(length?: number): string;
1730
+ firstName(): string;
1731
+ lastName(): string;
1732
+ fullName(): string;
1733
+ email(name?: string): string;
1734
+ age(): number;
1735
+ boolean(): boolean;
1736
+ choice<T>(array: T[]): T;
1737
+ id(): string;
1738
+ hexColor(): string;
1739
+ rgbColor(): string;
1740
+ date(start?: Date | string, end?: Date | string): Date;
1741
+ dateString(start?: Date | string, end?: Date | string): string;
1742
+ time(): string;
1743
+ timeAmPm(): string;
1744
+ datetime(): string;
1745
+ timestamp(): number;
1746
+ dayOfWeek(): string;
1747
+ month(): string;
1748
+ };
1749
+
1750
+ export const TextInputValidator: {
1751
+ onlyLetters(value: string): string;
1752
+ onlyNumbers(value: string): string;
1753
+ isEmail(value: string): boolean;
1754
+ filterEmail(value: string): string;
1755
+ onlyAlphanumeric(value: string): string;
1756
+ filter(value: string, pattern: string): string;
1757
+ limitLength(value: string, maxLength: number): string;
1758
+ isOnlyLetters(value: string): boolean;
1759
+ isOnlyNumbers(value: string): boolean;
1760
+ sanitize(value: string): string;
1761
+ escapeHtml(value: string): string;
1762
+ safeText(value: string): string;
1763
+ isSafe(value: string): boolean;
1764
+ };
1765
+
1766
+ export function formatDate(date: Date | string | number, format?: string): string;
1767
+ export function relativeTime(date: Date | string | number): string;
1768
+ export function formatMediaTime(seconds: number): string;
1769
+ export function formatMediaTimeLong(seconds: number): string;
1770
+ export function getProgressPercent(current: number, total: number): number;
1771
+ export function percentToSeconds(percent: number, total: number): number;
1772
+ export function formatMediaProgress(current: number, total: number): string;
1773
+
1774
+ export function stopWebRefresh(): void;
1775
+
1776
+ export function addNavigation<T extends Widget>(widget: T): T & {
1777
+ parent: Widget | null;
1778
+ children: Widget[];
1779
+ firstChild: Widget | null;
1780
+ lastChild: Widget | null;
1781
+ siblings: Widget[];
1782
+ nextSibling: Widget | null;
1783
+ prevSibling: Widget | null;
1784
+ index: number;
1785
+ root: Widget;
1786
+ path: Array<{ name: string; id: string | null; index: number }>;
1787
+ depth: number;
1788
+ findById(id: string): Widget | null;
1789
+ findAll(widgetName: string): Widget[];
1790
+ tree: string;
1791
+ };
1792
+
1793
+ export function applyStripes(element: HTMLElement, options?: {
1794
+ color?: string;
1795
+ size?: number;
1796
+ angle?: number;
1797
+ animated?: boolean;
1798
+ duration?: string;
1799
+ }): void;
1800
+ export function removeStripes(element: HTMLElement): void;
1801
+ export function applyShimmer(element: HTMLElement, options?: {
1802
+ highlightColor?: string;
1803
+ baseColor?: string;
1804
+ duration?: string;
1805
+ }): void;
1806
+ export function applyGlow(element: HTMLElement, options?: {
1807
+ color?: string;
1808
+ intensity?: number;
1809
+ duration?: string;
1810
+ }): void;
1811
+ export function applyIndeterminate(element: HTMLElement, options?: {
1812
+ duration?: string;
1813
+ width?: string;
1814
+ }): void;
1815
+ export function applyPulse(element: HTMLElement, options?: {
1816
+ scale?: number;
1817
+ duration?: string;
1818
+ }): void;
1819
+ export function injectKeyframes(name: string, keyframes: string): void;
1820
+
1821
+ export function border(width?: number | string, style?: string, color?: string): string;
1822
+ export function margin(value: number | string | { all?: number; horizontal?: number; vertical?: number; top?: number; right?: number; bottom?: number; left?: number }): string;
1823
+ export function padding(value: number | string | { all?: number; horizontal?: number; vertical?: number; top?: number; right?: number; bottom?: number; left?: number }): string;
1824
+ export function gradient(type: 'linear' | 'circle' | 'conic', colors: string[], angle?: number): string;
1825
+ export function shadow(x: number, y: number, blur: number, spread: number, color: string): string;
1826
+ export const color: (value: string) => {
1827
+ hex(): string;
1828
+ rgb(): string;
1829
+ rgba(): string;
1830
+ lighten(percent: number): this;
1831
+ darken(percent: number): this;
1832
+ alpha(value: number): this;
1833
+ complement(): this;
1834
+ isDark(): boolean;
1835
+ isLight(): boolean;
1836
+ contrast(): string;
1837
+ };
1838
+ export function rgba(r: number, g: number, b: number, a?: number): string;
1839
+ export function stackPosition(widget: Widget, props: { top?: any; right?: any; bottom?: any; left?: any }): Widget;
1840
+ export function flex(grow: number | { grow?: number; shrink?: number; basis?: string }, shrink?: number, basis?: string): string;
1841
+ export function grid(options: { columns?: number | string; rows?: number | string; gap?: number | string | { row?: number; column?: number } }): string;
1842
+ export function transition(options: { property?: string; duration?: number; timing?: string; delay?: number } | Array<{ property?: string; duration?: number; timing?: string; delay?: number }>): string;
1843
+ export function transform(options: {
1844
+ translate?: [number, number];
1845
+ translateX?: number;
1846
+ translateY?: number;
1847
+ translateZ?: number;
1848
+ rotate?: number;
1849
+ rotateX?: number;
1850
+ rotateY?: number;
1851
+ rotateZ?: number;
1852
+ scale?: number;
1853
+ scaleX?: number;
1854
+ scaleY?: number;
1855
+ skew?: number;
1856
+ skewX?: number;
1857
+ skewY?: number;
1858
+ matrix?: number[];
1859
+ matrix3d?: number[];
1860
+ perspective?: number;
1861
+ }): string;
1862
+ export function filter(options: {
1863
+ blur?: number;
1864
+ brightness?: number;
1865
+ contrast?: number;
1866
+ dropShadow?: [number, number, number, string];
1867
+ grayscale?: number;
1868
+ hueRotate?: number;
1869
+ invert?: number;
1870
+ opacity?: number;
1871
+ saturate?: number;
1872
+ sepia?: number;
1873
+ backdrop?: any;
1874
+ }): string;
1875
+ export function animation(name: string | { name: string; duration?: number; timing?: string; delay?: number; iteration?: number | string; direction?: string; fillMode?: string }, duration?: number, timing?: string, iteration?: string): string;
1876
+
1877
+ export function dict(obj?: any): any;
1878
+ export function emptyDict(): any;
1879
+ export function fromJSON(jsonStr: string): any;
1880
+ export function fromEntries(entries: [string, any][]): any;
1881
+
1882
+ export function ref<T extends Widget = Widget>(): (widget: T) => T & { update(props: Partial<any>): void };
1883
+ export function uuid(): string;
1884
+ export function shortId(): string;
1885
+ export function numericId(length?: number): string;
1886
+ export function timestampId(): string;
1887
+
1888
+ export function memo<T extends (...args: any[]) => any>(fn: T): T & { cache?: Map<string, ReturnType<T>> };
1889
+ export function memoWithKey<T extends (...args: any[]) => any>(fn: T, keyFn: (...args: Parameters<T>) => string): T;
1890
+ export function clearMemo(memoizedFn: any): void;
1891
+
1892
+ export function setBaseFontSize(size: number): void;
1893
+ export function toREM(value: number | string): string | undefined;
1894
+ export function toPX(value: number | string): string | undefined;
1895
+ export function getBaseFontSize(): number;
1896
+
1897
+ export function capitalize(str: string): string;
1898
+ export function capitalizeWords(str: string): string;
1899
+ export function lowerCase(str: string): string;
1900
+ export function upperCase(str: string): string;
1901
+ export function reverseString(str: string): string;
1902
+ export function truncate(str: string, length?: number, suffix?: string): string;
1903
+
1904
+ export function shuffle<T>(arr: T[]): T[];
1905
+ export function reverse<T>(arr: T[]): T[];
1906
+ export function sort<T>(arr: T[], by?: string | ((a: T, b: T) => number), order?: 'asc' | 'desc'): T[];
1907
+ export function unique<T>(arr: T[], key?: string): T[];
1908
+ export function chunk<T>(arr: T[], size: number): T[][];
1909
+
1910
+ export function getWidgetProps(widget: Widget): Record<string, any>;
1911
+ export function getWidgetProp(widget: Widget, propName: string): any;
1912
+ export function stringifyWidgetProps(widget: Widget): string;
1913
+
1914
+ // =========================================================================
1915
+ // Markdown parser
1916
+ // =========================================================================
1917
+ export function parseMarkdown(text: string): string;
1918
+ export function parseInlineMarkdown(text: string): string;
1919
+ export function markdownToWidgets(text: string, options?: { codeMaxHeight?: number; codeFontSize?: number }): Widget[];
1920
+ export function parseMarkdownToWidgets(text: string, options?: { codeMaxHeight?: number; codeFontSize?: number }): Widget[];
1921
+ export function parseInlineToWidgets(text: string): Widget[];
1922
+ export function escapeHtml(text: string): string;
1923
+
1924
+ // =========================================================================
1925
+ // Syntax highlight
1926
+ // =========================================================================
1927
+ export const highlightColors: Record<string, string>;
1928
+ export function tokenize(code: string): Array<{ type: string; value: string }>;
1929
+ export function generateHighlightedHtml(code: string): string;
1930
+ }