@itiseeron/component-lib 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,744 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ declare function HelloWorld(): JSX.Element;
5
+
6
+ type ThinButtonProps = {
7
+ testID?: string;
8
+ key?: any;
9
+ text?: String;
10
+ children?: React.ReactNode;
11
+ onclick?: () => any;
12
+ containerStyle?: React.CSSProperties;
13
+ buttonStyle?: React.CSSProperties;
14
+ buttonTextStyle?: React.CSSProperties;
15
+ };
16
+ /**
17
+ * ------------------------------------------------------------
18
+ * Thin Button
19
+ * ------------------------------------------------------------
20
+ * A component that renders a clickable space
21
+ * with a border and text. This element is intended to be clicked
22
+ * to invoke a specific function. onClick, onPressIn, and onPressOut
23
+ * should have some callback that can communicate with the parent the
24
+ * next steps to take.
25
+ *
26
+ * @param {ThinButtonProps} props
27
+ */
28
+ declare function ThinButton({ testID, text, containerStyle, buttonStyle, buttonTextStyle, onclick, children }: ThinButtonProps): JSX.Element;
29
+ declare namespace ThinButton {
30
+ var propTypes: {
31
+ testID: PropTypes.Requireable<string>;
32
+ key: PropTypes.Requireable<any>;
33
+ text: PropTypes.Requireable<string>;
34
+ children: PropTypes.Requireable<object>;
35
+ onclick: PropTypes.Requireable<(...args: any[]) => any>;
36
+ containerStyle: PropTypes.Requireable<object>;
37
+ buttonStyle: PropTypes.Requireable<object>;
38
+ buttonTextStyle: PropTypes.Requireable<object>;
39
+ };
40
+ }
41
+
42
+ type CardProps = {
43
+ key?: any;
44
+ children?: React.ReactNode | React.FunctionComponent;
45
+ containerStyle?: React.CSSProperties;
46
+ wrapperStyle?: React.CSSProperties;
47
+ titleText?: String;
48
+ titleStyle?: React.CSSProperties;
49
+ subtitleText?: String;
50
+ subtitleStyle?: React.CSSProperties;
51
+ titleContainerStyle?: React.CSSProperties;
52
+ closeButtonContainerStyle?: React.CSSProperties;
53
+ closeButtonStyle?: React.CSSProperties;
54
+ showCloseButton?: Boolean;
55
+ onClickCloseButton?: (arg0?: any) => any;
56
+ };
57
+ /**
58
+ * ------------------------------------------------------------
59
+ * Card
60
+ * ------------------------------------------------------------
61
+ * Renders a space that appears to be a 'card' hovering over the
62
+ * parent. It has the capability of rendering a title, subtiltle, titledivider,
63
+ * as well as take in children components in typical React and React-Native
64
+ * fashion.
65
+ *
66
+ * @param {CardProps} props
67
+ * */
68
+ declare function Card({ containerStyle, wrapperStyle, titleText, titleStyle, subtitleText, subtitleStyle, titleContainerStyle, closeButtonStyle, showCloseButton, onClickCloseButton: closeButtonPressedCallBack, children }: CardProps): JSX.Element;
69
+ declare namespace Card {
70
+ var propTypes: {
71
+ key: PropTypes.Requireable<string>;
72
+ children: PropTypes.Requireable<any>;
73
+ containerStyle: PropTypes.Requireable<object>;
74
+ wrapperStyle: PropTypes.Requireable<object>;
75
+ title: PropTypes.Requireable<string>;
76
+ titleStyle: PropTypes.Requireable<object>;
77
+ subtitle: PropTypes.Requireable<string>;
78
+ subtitleStyle: PropTypes.Requireable<string>;
79
+ titleContainerStyle: PropTypes.Requireable<object>;
80
+ closeButtonStyle: PropTypes.Requireable<object>;
81
+ closeButtonContainerStyle: PropTypes.Requireable<object>;
82
+ showCloseButton: PropTypes.Requireable<object>;
83
+ closeButtonPressedCallBack: PropTypes.Requireable<(...args: any[]) => any>;
84
+ };
85
+ }
86
+
87
+ type InputFormProps = {
88
+ key?: any;
89
+ name?: string;
90
+ ref?: any;
91
+ testID?: string;
92
+ onInput?: (value: string) => any;
93
+ defaultValue?: string;
94
+ secureTextEntry?: boolean;
95
+ formTitleStyle?: React.CSSProperties;
96
+ containerStyle?: React.CSSProperties;
97
+ inputStyle?: React.CSSProperties;
98
+ errorStyle?: React.CSSProperties;
99
+ placeholder?: string;
100
+ value?: string;
101
+ errorMessage?: string;
102
+ numberOfLines?: number;
103
+ multiline?: boolean;
104
+ trim?: boolean;
105
+ maxLength?: number;
106
+ };
107
+ /**
108
+ * ------------------------------------------------------------
109
+ * Input Form
110
+ * ------------------------------------------------------------
111
+ * Renders an area where the user is able to input keyboard data.
112
+ * It inherits most of its functionality from the TextInput state but
113
+ * allows for a stylized version of it. It also is capable of rendering
114
+ * a title for the field for UI clarity through the name property.
115
+ *
116
+ * Uncontrolled by default (seeded from `defaultValue`, tracked
117
+ * internally). Pass `value` + `onInput` together to control it from
118
+ * a parent instead, the same duality NavigationBar uses for
119
+ * selection. `errorMessage` is shown under the field whenever it's
120
+ * set; there is no separate visibility flag to manage.
121
+ *
122
+ * @param {InputFormProps} props
123
+ * */
124
+ declare function InputForm({ testID, name, onInput, defaultValue, secureTextEntry, formTitleStyle, containerStyle, inputStyle, errorStyle, placeholder, value: controlledValue, errorMessage, numberOfLines, multiline, trim, maxLength }: InputFormProps): JSX.Element;
125
+ declare namespace InputForm {
126
+ var propTypes: {
127
+ key: PropTypes.Requireable<any>;
128
+ name: PropTypes.Requireable<string>;
129
+ testID: PropTypes.Requireable<string>;
130
+ onInput: PropTypes.Requireable<(...args: any[]) => any>;
131
+ defaultValue: PropTypes.Requireable<string>;
132
+ secureTextEntry: PropTypes.Requireable<boolean>;
133
+ formTitleStyle: PropTypes.Requireable<object>;
134
+ containerStyle: PropTypes.Requireable<object>;
135
+ inputStyle: PropTypes.Requireable<object>;
136
+ errorStyle: PropTypes.Requireable<object>;
137
+ placeholder: PropTypes.Requireable<string>;
138
+ value: PropTypes.Requireable<string>;
139
+ errorMessage: PropTypes.Requireable<string>;
140
+ numberOfLines: PropTypes.Requireable<number>;
141
+ multiline: PropTypes.Requireable<boolean>;
142
+ trim: PropTypes.Requireable<boolean>;
143
+ maxLength: PropTypes.Requireable<number>;
144
+ };
145
+ }
146
+
147
+ type NavigationBarViewProps = {
148
+ testID?: string;
149
+ items: NavItem[];
150
+ selectedKey?: string;
151
+ onItemSelect: (item: NavItem) => any;
152
+ containerStyle?: React.CSSProperties;
153
+ itemStyle?: React.CSSProperties;
154
+ activeItemStyle?: React.CSSProperties;
155
+ itemTextStyle?: React.CSSProperties;
156
+ activeItemTextStyle?: React.CSSProperties;
157
+ };
158
+ /**
159
+ * ------------------------------------------------------------
160
+ * Navigation Bar View
161
+ * ------------------------------------------------------------
162
+ * Pure presentation for a NavigationBar: renders `items` and calls
163
+ * `onItemSelect` when one is clicked. It holds no selection state
164
+ * and no knowledge of which clicks are valid (disabled/duplicate
165
+ * checks live in NavigationBar) — this component only decides how
166
+ * the bar looks. Swap it out for a fully custom look by passing a
167
+ * different `render` function to NavigationBar.
168
+ *
169
+ * @param {NavigationBarViewProps} props
170
+ * */
171
+ declare function NavigationBarView({ testID, items, selectedKey, onItemSelect, containerStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: NavigationBarViewProps): JSX.Element;
172
+ declare namespace NavigationBarView {
173
+ var propTypes: {
174
+ testID: PropTypes.Requireable<string>;
175
+ items: PropTypes.Validator<PropTypes.InferProps<{
176
+ key: PropTypes.Validator<string>;
177
+ label: PropTypes.Validator<string>;
178
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
179
+ disabled: PropTypes.Requireable<boolean>;
180
+ }>[]>;
181
+ selectedKey: PropTypes.Requireable<string>;
182
+ onItemSelect: PropTypes.Validator<(...args: any[]) => any>;
183
+ containerStyle: PropTypes.Requireable<object>;
184
+ itemStyle: PropTypes.Requireable<object>;
185
+ activeItemStyle: PropTypes.Requireable<object>;
186
+ itemTextStyle: PropTypes.Requireable<object>;
187
+ activeItemTextStyle: PropTypes.Requireable<object>;
188
+ };
189
+ }
190
+
191
+ type NavItem = {
192
+ key: string;
193
+ label: string;
194
+ icon?: React.ReactNode;
195
+ disabled?: boolean;
196
+ };
197
+ type NavigationBarProps = {
198
+ key?: any;
199
+ testID?: string;
200
+ items: NavItem[];
201
+ defaultSelectedKey?: string;
202
+ selectedKey?: string;
203
+ onSelect?: (key: string, item: NavItem) => any;
204
+ render?: (viewProps: NavigationBarViewProps) => React.ReactElement;
205
+ containerStyle?: React.CSSProperties;
206
+ itemStyle?: React.CSSProperties;
207
+ activeItemStyle?: React.CSSProperties;
208
+ itemTextStyle?: React.CSSProperties;
209
+ activeItemTextStyle?: React.CSSProperties;
210
+ };
211
+ /**
212
+ * ------------------------------------------------------------
213
+ * Navigation Bar
214
+ * ------------------------------------------------------------
215
+ * Owns navigation *behavior* only: which item is selected, and the
216
+ * rules for changing that (a disabled item can't be selected, an
217
+ * already-selected item is a no-op). It has no opinion on markup or
218
+ * styling — that's delegated to `render`, which defaults to
219
+ * NavigationBarView. `render` is only ever handed the *result* of a
220
+ * selection decision (the current `selectedKey` and an `onItemSelect`
221
+ * callback bound to this component's own guarded `selectItem`), never
222
+ * a way to make that decision itself — so no presentation, default or
223
+ * custom, can bypass or replace how selection works.
224
+ *
225
+ * Uncontrolled by default (selection state lives here, seeded from
226
+ * `defaultSelectedKey` or the first item). Pass `selectedKey` +
227
+ * `onSelect` to control it from a parent instead.
228
+ *
229
+ * @param {NavigationBarProps} props
230
+ * */
231
+ declare function NavigationBar({ testID, items, defaultSelectedKey, selectedKey: controlledSelectedKey, onSelect: onSelectCallback, render, containerStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: NavigationBarProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
232
+ declare namespace NavigationBar {
233
+ var propTypes: {
234
+ key: PropTypes.Requireable<any>;
235
+ testID: PropTypes.Requireable<string>;
236
+ items: PropTypes.Validator<PropTypes.InferProps<{
237
+ key: PropTypes.Validator<string>;
238
+ label: PropTypes.Validator<string>;
239
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
240
+ disabled: PropTypes.Requireable<boolean>;
241
+ }>[]>;
242
+ defaultSelectedKey: PropTypes.Requireable<string>;
243
+ selectedKey: PropTypes.Requireable<string>;
244
+ onSelect: PropTypes.Requireable<(...args: any[]) => any>;
245
+ render: PropTypes.Requireable<(...args: any[]) => any>;
246
+ containerStyle: PropTypes.Requireable<object>;
247
+ itemStyle: PropTypes.Requireable<object>;
248
+ activeItemStyle: PropTypes.Requireable<object>;
249
+ itemTextStyle: PropTypes.Requireable<object>;
250
+ activeItemTextStyle: PropTypes.Requireable<object>;
251
+ };
252
+ }
253
+
254
+ type HamburgerMenuProps = {
255
+ key?: any;
256
+ testID?: string;
257
+ items: NavItem[];
258
+ defaultSelectedKey?: string;
259
+ selectedKey?: string;
260
+ onSelect?: (key: string, item: NavItem) => any;
261
+ icon?: React.ReactNode;
262
+ containerStyle?: React.CSSProperties;
263
+ buttonStyle?: React.CSSProperties;
264
+ iconStyle?: React.CSSProperties;
265
+ panelStyle?: React.CSSProperties;
266
+ itemStyle?: React.CSSProperties;
267
+ activeItemStyle?: React.CSSProperties;
268
+ itemTextStyle?: React.CSSProperties;
269
+ activeItemTextStyle?: React.CSSProperties;
270
+ };
271
+ /**
272
+ * ------------------------------------------------------------
273
+ * Hamburger Menu
274
+ * ------------------------------------------------------------
275
+ * A NavigationBar whose items live behind a toggle button instead of
276
+ * being shown inline. Selection behavior is NavigationBar's, reused
277
+ * as-is rather than reimplemented: one item is always selected
278
+ * (defaulting to the first), and a disabled or already-active item
279
+ * is a no-op. The only thing this component adds is presentation —
280
+ * the toggle button and side panel, rendered by HamburgerMenuView —
281
+ * so a HamburgerMenu and a NavigationBar built from the same `items`
282
+ * can never disagree about what "selected" means.
283
+ *
284
+ * `icon` overrides the default "☰" toggle glyph with any node; when
285
+ * left unset, `iconStyle` still styles the default glyph. All other
286
+ * `*Style` props are mutable the same way as Card's: each has a
287
+ * sensible default, override just the ones you need.
288
+ *
289
+ * @param {HamburgerMenuProps} props
290
+ * */
291
+ declare function HamburgerMenu({ testID, items, defaultSelectedKey, selectedKey, onSelect, icon, containerStyle, buttonStyle, iconStyle, panelStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: HamburgerMenuProps): JSX.Element;
292
+ declare namespace HamburgerMenu {
293
+ var propTypes: {
294
+ key: PropTypes.Requireable<any>;
295
+ testID: PropTypes.Requireable<string>;
296
+ items: PropTypes.Validator<PropTypes.InferProps<{
297
+ key: PropTypes.Validator<string>;
298
+ label: PropTypes.Validator<string>;
299
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
300
+ disabled: PropTypes.Requireable<boolean>;
301
+ }>[]>;
302
+ defaultSelectedKey: PropTypes.Requireable<string>;
303
+ selectedKey: PropTypes.Requireable<string>;
304
+ onSelect: PropTypes.Requireable<(...args: any[]) => any>;
305
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
306
+ containerStyle: PropTypes.Requireable<object>;
307
+ buttonStyle: PropTypes.Requireable<object>;
308
+ iconStyle: PropTypes.Requireable<object>;
309
+ panelStyle: PropTypes.Requireable<object>;
310
+ itemStyle: PropTypes.Requireable<object>;
311
+ activeItemStyle: PropTypes.Requireable<object>;
312
+ itemTextStyle: PropTypes.Requireable<object>;
313
+ activeItemTextStyle: PropTypes.Requireable<object>;
314
+ };
315
+ }
316
+
317
+ type HamburgerMenuViewProps = {
318
+ testID?: string;
319
+ items: NavItem[];
320
+ selectedKey?: string;
321
+ onItemSelect: (item: NavItem) => any;
322
+ icon?: React.ReactNode;
323
+ containerStyle?: React.CSSProperties;
324
+ buttonStyle?: React.CSSProperties;
325
+ iconStyle?: React.CSSProperties;
326
+ panelStyle?: React.CSSProperties;
327
+ itemStyle?: React.CSSProperties;
328
+ activeItemStyle?: React.CSSProperties;
329
+ itemTextStyle?: React.CSSProperties;
330
+ activeItemTextStyle?: React.CSSProperties;
331
+ };
332
+ /**
333
+ * ------------------------------------------------------------
334
+ * Hamburger Menu View
335
+ * ------------------------------------------------------------
336
+ * Pure presentation for a HamburgerMenu: a toggle button that shows
337
+ * or hides a side panel of items. Reuses NavigationBarView to render
338
+ * the panel's items, so opening the panel is the only new behavior
339
+ * introduced here (`isOpen` is local display state, not selection
340
+ * state) — clicking an item still goes through the same guarded
341
+ * `onItemSelect` handed down from NavigationBar, this view just also
342
+ * closes the panel afterward.
343
+ *
344
+ * @param {HamburgerMenuViewProps} props
345
+ * */
346
+ declare function HamburgerMenuView({ testID, items, selectedKey, onItemSelect, icon, containerStyle, buttonStyle, iconStyle, panelStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: HamburgerMenuViewProps): JSX.Element;
347
+ declare namespace HamburgerMenuView {
348
+ var propTypes: {
349
+ testID: PropTypes.Requireable<string>;
350
+ items: PropTypes.Validator<PropTypes.InferProps<{
351
+ key: PropTypes.Validator<string>;
352
+ label: PropTypes.Validator<string>;
353
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
354
+ disabled: PropTypes.Requireable<boolean>;
355
+ }>[]>;
356
+ selectedKey: PropTypes.Requireable<string>;
357
+ onItemSelect: PropTypes.Validator<(...args: any[]) => any>;
358
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
359
+ containerStyle: PropTypes.Requireable<object>;
360
+ buttonStyle: PropTypes.Requireable<object>;
361
+ iconStyle: PropTypes.Requireable<object>;
362
+ panelStyle: PropTypes.Requireable<object>;
363
+ itemStyle: PropTypes.Requireable<object>;
364
+ activeItemStyle: PropTypes.Requireable<object>;
365
+ itemTextStyle: PropTypes.Requireable<object>;
366
+ activeItemTextStyle: PropTypes.Requireable<object>;
367
+ };
368
+ }
369
+
370
+ type RadioOption = NavItem;
371
+ type RadioButtonGroupProps = {
372
+ key?: any;
373
+ testID?: string;
374
+ items: RadioOption[];
375
+ defaultSelectedKey?: string;
376
+ selectedKey?: string;
377
+ onSelect?: (key: string, item: RadioOption) => any;
378
+ title?: string;
379
+ titleContainerStyle?: React.CSSProperties;
380
+ titleStyle?: React.CSSProperties;
381
+ containerStyle?: React.CSSProperties;
382
+ itemStyle?: React.CSSProperties;
383
+ activeItemStyle?: React.CSSProperties;
384
+ itemTextStyle?: React.CSSProperties;
385
+ activeItemTextStyle?: React.CSSProperties;
386
+ };
387
+ /**
388
+ * ------------------------------------------------------------
389
+ * Radio Button Group
390
+ * ------------------------------------------------------------
391
+ * A NavigationBar whose items render as a segmented radio control
392
+ * instead of a nav strip. Selection behavior is NavigationBar's,
393
+ * reused as-is: exactly one option is always selected (defaulting to
394
+ * the first), and a disabled or already-active option is a no-op.
395
+ * This component only supplies presentation — RadioButtonGroupView —
396
+ * so it can never disagree with a NavigationBar built from the same
397
+ * `items` about what "selected" means.
398
+ *
399
+ * Default styling mirrors homepairsUI's AccountTypeRadioButton
400
+ * (accent `#00ADE9` fill, `#1177B0` border when selected, muted
401
+ * `rgba(55,66,69,.5)` otherwise), generalized from its fixed
402
+ * two-option layout to any number of items. Every `*Style` prop is
403
+ * mutable the same way as Card's: each has that default, override
404
+ * just the ones you need.
405
+ *
406
+ * @param {RadioButtonGroupProps} props
407
+ * */
408
+ declare function RadioButtonGroup({ testID, items, defaultSelectedKey, selectedKey, onSelect, title, titleContainerStyle, titleStyle, containerStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: RadioButtonGroupProps): JSX.Element;
409
+ declare namespace RadioButtonGroup {
410
+ var propTypes: {
411
+ key: PropTypes.Requireable<any>;
412
+ testID: PropTypes.Requireable<string>;
413
+ items: PropTypes.Validator<PropTypes.InferProps<{
414
+ key: PropTypes.Validator<string>;
415
+ label: PropTypes.Validator<string>;
416
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
417
+ disabled: PropTypes.Requireable<boolean>;
418
+ }>[]>;
419
+ defaultSelectedKey: PropTypes.Requireable<string>;
420
+ selectedKey: PropTypes.Requireable<string>;
421
+ onSelect: PropTypes.Requireable<(...args: any[]) => any>;
422
+ title: PropTypes.Requireable<string>;
423
+ titleContainerStyle: PropTypes.Requireable<object>;
424
+ titleStyle: PropTypes.Requireable<object>;
425
+ containerStyle: PropTypes.Requireable<object>;
426
+ itemStyle: PropTypes.Requireable<object>;
427
+ activeItemStyle: PropTypes.Requireable<object>;
428
+ itemTextStyle: PropTypes.Requireable<object>;
429
+ activeItemTextStyle: PropTypes.Requireable<object>;
430
+ };
431
+ }
432
+
433
+ type RadioButtonGroupViewProps = {
434
+ testID?: string;
435
+ items: NavItem[];
436
+ selectedKey?: string;
437
+ onItemSelect: (item: NavItem) => any;
438
+ title?: string;
439
+ titleContainerStyle?: React.CSSProperties;
440
+ titleStyle?: React.CSSProperties;
441
+ containerStyle?: React.CSSProperties;
442
+ itemStyle?: React.CSSProperties;
443
+ activeItemStyle?: React.CSSProperties;
444
+ itemTextStyle?: React.CSSProperties;
445
+ activeItemTextStyle?: React.CSSProperties;
446
+ };
447
+ /**
448
+ * ------------------------------------------------------------
449
+ * Radio Button Group View
450
+ * ------------------------------------------------------------
451
+ * Pure presentation for a RadioButtonGroup: a row of segments,
452
+ * rounded like a segmented control at the two outer edges, filled
453
+ * with the accent color when selected. Defaults (colors, radius,
454
+ * height, padding, font) mirror homepairsUI's AccountTypeRadioButton,
455
+ * generalized from its fixed two-option layout to any number of
456
+ * `items`. Holds no selection state itself — clicking a segment just
457
+ * calls `onItemSelect`, the same guarded callback NavigationBar hands
458
+ * to any of its views.
459
+ *
460
+ * @param {RadioButtonGroupViewProps} props
461
+ * */
462
+ declare function RadioButtonGroupView({ testID, items, selectedKey, onItemSelect, title, titleContainerStyle, titleStyle, containerStyle, itemStyle, activeItemStyle, itemTextStyle, activeItemTextStyle }: RadioButtonGroupViewProps): JSX.Element;
463
+ declare namespace RadioButtonGroupView {
464
+ var propTypes: {
465
+ testID: PropTypes.Requireable<string>;
466
+ items: PropTypes.Validator<PropTypes.InferProps<{
467
+ key: PropTypes.Validator<string>;
468
+ label: PropTypes.Validator<string>;
469
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
470
+ disabled: PropTypes.Requireable<boolean>;
471
+ }>[]>;
472
+ selectedKey: PropTypes.Requireable<string>;
473
+ onItemSelect: PropTypes.Validator<(...args: any[]) => any>;
474
+ title: PropTypes.Requireable<string>;
475
+ titleContainerStyle: PropTypes.Requireable<object>;
476
+ titleStyle: PropTypes.Requireable<object>;
477
+ containerStyle: PropTypes.Requireable<object>;
478
+ itemStyle: PropTypes.Requireable<object>;
479
+ activeItemStyle: PropTypes.Requireable<object>;
480
+ itemTextStyle: PropTypes.Requireable<object>;
481
+ activeItemTextStyle: PropTypes.Requireable<object>;
482
+ };
483
+ }
484
+
485
+ type LoadingProps = {
486
+ key?: any;
487
+ testID?: string;
488
+ children?: React.ReactNode;
489
+ containerStyle?: React.CSSProperties;
490
+ wrapperStyle?: React.CSSProperties;
491
+ spinnerStyle?: React.CSSProperties;
492
+ };
493
+ /**
494
+ * ------------------------------------------------------------
495
+ * Loading
496
+ * ------------------------------------------------------------
497
+ * A card that should be shown while assets, requests, or async work
498
+ * are in flight. Mirrors homepairsUI's LoadingModal: built on this
499
+ * library's own Card, sized to a small centered panel with a
500
+ * spinner, and able to take children for a status message under it.
501
+ *
502
+ * @param {LoadingProps} props
503
+ * */
504
+ declare function Loading({ testID, children, containerStyle, wrapperStyle, spinnerStyle }: LoadingProps): JSX.Element;
505
+ declare namespace Loading {
506
+ var propTypes: {
507
+ key: PropTypes.Requireable<any>;
508
+ testID: PropTypes.Requireable<string>;
509
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
510
+ containerStyle: PropTypes.Requireable<object>;
511
+ wrapperStyle: PropTypes.Requireable<object>;
512
+ spinnerStyle: PropTypes.Requireable<object>;
513
+ };
514
+ }
515
+
516
+ type ThumbnailItem = NavItem;
517
+ type ScrollMenuProps = {
518
+ key?: any;
519
+ testID?: string;
520
+ items: ThumbnailItem[];
521
+ defaultSelectedKey?: string;
522
+ selectedKey?: string;
523
+ onSelect?: (key: string, item: ThumbnailItem) => any;
524
+ containerStyle?: React.CSSProperties;
525
+ tileStyle?: React.CSSProperties;
526
+ activeTileStyle?: React.CSSProperties;
527
+ tileTextStyle?: React.CSSProperties;
528
+ };
529
+ /**
530
+ * ------------------------------------------------------------
531
+ * Scroll Menu
532
+ * ------------------------------------------------------------
533
+ * A NavigationBar whose items render as a horizontally scrollable
534
+ * strip of thumbnail tiles instead of a nav strip — think
535
+ * homepairsUI's PreferredProviderFlatList, generalized to any set of
536
+ * `items`. Selection behavior is NavigationBar's, reused as-is:
537
+ * exactly one tile is always selected (defaulting to the first), and
538
+ * a disabled or already-active tile is a no-op. This component only
539
+ * supplies presentation — ScrollMenuView — so it can never disagree
540
+ * with a NavigationBar built from the same `items` about what
541
+ * "selected" means.
542
+ *
543
+ * Every `*Style` prop is mutable the same way as Card's: each has a
544
+ * default drawn from homepairsUI's ImageTile/PreferredProviderFlatList
545
+ * styling, override just the ones you need.
546
+ *
547
+ * @param {ScrollMenuProps} props
548
+ * */
549
+ declare function ScrollMenu({ testID, items, defaultSelectedKey, selectedKey, onSelect, containerStyle, tileStyle, activeTileStyle, tileTextStyle }: ScrollMenuProps): JSX.Element;
550
+ declare namespace ScrollMenu {
551
+ var propTypes: {
552
+ key: PropTypes.Requireable<any>;
553
+ testID: PropTypes.Requireable<string>;
554
+ items: PropTypes.Validator<PropTypes.InferProps<{
555
+ key: PropTypes.Validator<string>;
556
+ label: PropTypes.Validator<string>;
557
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
558
+ disabled: PropTypes.Requireable<boolean>;
559
+ }>[]>;
560
+ defaultSelectedKey: PropTypes.Requireable<string>;
561
+ selectedKey: PropTypes.Requireable<string>;
562
+ onSelect: PropTypes.Requireable<(...args: any[]) => any>;
563
+ containerStyle: PropTypes.Requireable<object>;
564
+ tileStyle: PropTypes.Requireable<object>;
565
+ activeTileStyle: PropTypes.Requireable<object>;
566
+ tileTextStyle: PropTypes.Requireable<object>;
567
+ };
568
+ }
569
+
570
+ type ScrollMenuViewProps = {
571
+ testID?: string;
572
+ items: NavItem[];
573
+ selectedKey?: string;
574
+ onItemSelect: (item: NavItem) => any;
575
+ containerStyle?: React.CSSProperties;
576
+ tileStyle?: React.CSSProperties;
577
+ activeTileStyle?: React.CSSProperties;
578
+ tileTextStyle?: React.CSSProperties;
579
+ };
580
+ /**
581
+ * ------------------------------------------------------------
582
+ * Scroll Menu View
583
+ * ------------------------------------------------------------
584
+ * Pure presentation for a ScrollMenu: a horizontally scrollable row
585
+ * of thumbnail tiles, sized and colored like homepairsUI's ImageTile
586
+ * (70x70, 7.5 radius, light border, dark strip background). Give an
587
+ * item a thumbnail via its `icon`, e.g.
588
+ * `icon: <img src={...} style={{width: '100%', height: '100%', objectFit: 'cover'}} />`;
589
+ * an item without an `icon` falls back to its `label` as centered
590
+ * text, mirroring the ImageTile/TextTile fallback in the original.
591
+ * Holds no selection state — clicking a tile just calls
592
+ * `onItemSelect`, the same guarded callback NavigationBar hands to
593
+ * any of its views.
594
+ *
595
+ * @param {ScrollMenuViewProps} props
596
+ * */
597
+ declare function ScrollMenuView({ testID, items, selectedKey, onItemSelect, containerStyle, tileStyle, activeTileStyle, tileTextStyle }: ScrollMenuViewProps): JSX.Element;
598
+ declare namespace ScrollMenuView {
599
+ var propTypes: {
600
+ testID: PropTypes.Requireable<string>;
601
+ items: PropTypes.Validator<PropTypes.InferProps<{
602
+ key: PropTypes.Validator<string>;
603
+ label: PropTypes.Validator<string>;
604
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
605
+ disabled: PropTypes.Requireable<boolean>;
606
+ }>[]>;
607
+ selectedKey: PropTypes.Requireable<string>;
608
+ onItemSelect: PropTypes.Validator<(...args: any[]) => any>;
609
+ containerStyle: PropTypes.Requireable<object>;
610
+ tileStyle: PropTypes.Requireable<object>;
611
+ activeTileStyle: PropTypes.Requireable<object>;
612
+ tileTextStyle: PropTypes.Requireable<object>;
613
+ };
614
+ }
615
+
616
+ type ImageTileProps = {
617
+ key?: any;
618
+ testID?: string;
619
+ image: string;
620
+ enlarge?: boolean;
621
+ containerStyle?: React.CSSProperties;
622
+ imageStyle?: React.CSSProperties;
623
+ };
624
+ type TextTileProps = {
625
+ key?: any;
626
+ testID?: string;
627
+ text: string;
628
+ fontSize?: number;
629
+ containerStyle?: React.CSSProperties;
630
+ textStyle?: React.CSSProperties;
631
+ };
632
+ /**
633
+ * ------------------------------------------------------------
634
+ * Image Tile
635
+ * ------------------------------------------------------------
636
+ * A small unit that holds an image and is formatted in the shape of
637
+ * a rounded tile, matching homepairsUI's ImageTile (70x70, or 100x100
638
+ * with `enlarge`, 7.5 radius, light border). Often seen holding a
639
+ * service provider's logo, e.g. as an item's thumbnail in ScrollMenu.
640
+ *
641
+ * @param {ImageTileProps} props
642
+ * */
643
+ declare function ImageTile({ testID, image, enlarge, containerStyle, imageStyle }: ImageTileProps): JSX.Element;
644
+ declare namespace ImageTile {
645
+ var propTypes: {
646
+ key: PropTypes.Requireable<any>;
647
+ testID: PropTypes.Requireable<string>;
648
+ image: PropTypes.Validator<string>;
649
+ enlarge: PropTypes.Requireable<boolean>;
650
+ containerStyle: PropTypes.Requireable<object>;
651
+ imageStyle: PropTypes.Requireable<object>;
652
+ };
653
+ }
654
+ /**
655
+ * ------------------------------------------------------------
656
+ * Text Tile
657
+ * ------------------------------------------------------------
658
+ * A small unit that holds a string and is formatted in the shape of
659
+ * a rounded tile, matching homepairsUI's TextTile. Used as a fallback
660
+ * where an ImageTile would go but there's no image available (e.g.
661
+ * the hamburger menu, or an add-provider tile).
662
+ *
663
+ * @param {TextTileProps} props
664
+ * */
665
+ declare function TextTile({ testID, text, fontSize, containerStyle, textStyle }: TextTileProps): JSX.Element;
666
+ declare namespace TextTile {
667
+ var propTypes: {
668
+ key: PropTypes.Requireable<any>;
669
+ testID: PropTypes.Requireable<string>;
670
+ text: PropTypes.Validator<string>;
671
+ fontSize: PropTypes.Requireable<number>;
672
+ containerStyle: PropTypes.Requireable<object>;
673
+ textStyle: PropTypes.Requireable<object>;
674
+ };
675
+ }
676
+
677
+ type CustomMatcher = (query: string, text: string) => number | null;
678
+ type MatchStrategy = 'substring' | 'prefix' | 'tokenized' | 'fuzzy' | 'regex' | CustomMatcher;
679
+
680
+ type SearchBarProps<T = any> = Omit<InputFormProps, 'onInput' | 'value' | 'defaultValue'> & {
681
+ objects?: T[];
682
+ keys?: string[];
683
+ onResults?: (filtered: T[]) => any;
684
+ defaultValue?: string;
685
+ matchStrategy?: MatchStrategy;
686
+ caseSensitive?: boolean;
687
+ ignoreAccents?: boolean;
688
+ rank?: boolean;
689
+ debounceMs?: number;
690
+ };
691
+ /**
692
+ * ------------------------------------------------------------
693
+ * Search Bar
694
+ * ------------------------------------------------------------
695
+ * Wraps InputForm as-is (no styling of its own, same as homepairsUI's
696
+ * SearchForm) and adds filtering: on every keystroke, `objects` is
697
+ * filtered and the result is handed to `onResults`. With no `keys`,
698
+ * matching recurses through each object's own nested values; with
699
+ * `keys`, only those top-level fields are checked.
700
+ *
701
+ * `matchStrategy` picks the algorithm (default `'fuzzy'`, a
702
+ * subsequence match that tolerates typos and scores tighter matches
703
+ * higher — the same spirit as fzf/VS Code's go-to-file):
704
+ * - `'fuzzy'` query characters found in order, not necessarily together
705
+ * - `'substring'` plain includes() — exact and cheap
706
+ * - `'prefix'` matches the start of the text or of any word in it
707
+ * - `'tokenized'` every word in the query must appear somewhere (any order)
708
+ * - `'regex'` query is compiled as a RegExp; invalid patterns just match nothing
709
+ *
710
+ * `matchStrategy` also accepts a custom `(query, text) => score | null`
711
+ * function in place of one of those names — return `null` to exclude an
712
+ * item, or a number (higher = better) to include it; it receives the same
713
+ * case/accent-normalized query and searchable text the built-ins do.
714
+ *
715
+ * `caseSensitive` (default false) and `ignoreAccents` (default false,
716
+ * e.g. so "cafe" matches "café") normalize before matching. `rank`
717
+ * (default true) sorts survivors by match score — only meaningful for
718
+ * `'fuzzy'`, a no-op for the others since they all score 0.
719
+ * `debounceMs` (default 0) delays re-filtering after the last
720
+ * keystroke without delaying what's shown in the field itself.
721
+ *
722
+ * Filtering also re-runs (with the current search text, undebounced)
723
+ * whenever `objects` itself changes — e.g. after a fetch replaces the
724
+ * list — but not on mount, so the parent's own initial list stands
725
+ * until the user actually searches.
726
+ *
727
+ * @param {SearchBarProps} props
728
+ * */
729
+ declare function SearchBar<T = any>({ objects, keys, onResults, defaultValue, matchStrategy, caseSensitive, ignoreAccents, rank, debounceMs, ...inputFormProps }: SearchBarProps<T>): JSX.Element;
730
+ declare namespace SearchBar {
731
+ var propTypes: {
732
+ objects: PropTypes.Requireable<any[]>;
733
+ keys: PropTypes.Requireable<string[]>;
734
+ onResults: PropTypes.Requireable<(...args: any[]) => any>;
735
+ defaultValue: PropTypes.Requireable<string>;
736
+ matchStrategy: PropTypes.Requireable<NonNullable<string | ((...args: any[]) => any)>>;
737
+ caseSensitive: PropTypes.Requireable<boolean>;
738
+ ignoreAccents: PropTypes.Requireable<boolean>;
739
+ rank: PropTypes.Requireable<boolean>;
740
+ debounceMs: PropTypes.Requireable<number>;
741
+ };
742
+ }
743
+
744
+ export { Card, type CardProps, type CustomMatcher, HamburgerMenu, type HamburgerMenuProps, HamburgerMenuView, type HamburgerMenuViewProps, HelloWorld, ImageTile, type ImageTileProps, InputForm, type InputFormProps, Loading, type LoadingProps, type MatchStrategy, type NavItem, NavigationBar, type NavigationBarProps, NavigationBarView, type NavigationBarViewProps, RadioButtonGroup, type RadioButtonGroupProps, RadioButtonGroupView, type RadioButtonGroupViewProps, type RadioOption, ScrollMenu, type ScrollMenuProps, ScrollMenuView, type ScrollMenuViewProps, SearchBar, type SearchBarProps, TextTile, type TextTileProps, ThinButton, type ThinButtonProps, type ThumbnailItem };