spotlibs-components 0.1.16 → 0.1.18

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.
package/dist/index.d.mts CHANGED
@@ -1,10 +1,10 @@
1
1
  export { A as AnalisisRisikoKreditNasabahIcon, a as AppendixIcon, B as BgBuilding, b as BgPerson, C as ChecklistDokumenPaketKreditIcon, c as CreditRiskRatingIcon, D as DefaultAvatarIcon, d as DefaultImageIcon, e as DokumenPenjagaanIcon, F as FilePdfIcon, I as InformasiKursIcon, f as InformasiNasabahIcon, M as MatriksRiskDanMitigationIcon, N as NotulenRapatPraKomiteIcon, O as OfferingLetterIcon, P as PengajuanDanFasilitasKreditIcon, g as ProfitabilitasDanHubunganNasabahIcon, R as RekeningEscrowIcon, h as RekeningOprasionalIcon, i as RekeningTujuanIcon, j as RekomendasiPutusanIcon, k as RingkasanEksekutifIcon } from './rekening-tujuan-icon-BfSXbixN.mjs';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- export { B as BaseAlert, a as BaseButton, b as BaseCard, c as BaseCheckbox, d as BaseDatatable, e as BaseDatePicker, f as BaseDropdown, g as BaseDropzone, h as BaseModalAlert, i as BaseModalAlertDialog, j as BaseModalAlertProvider, k as BaseModalLoading, l as BaseModalLoadingDialog, m as BaseModalLoadingProvider, n as BaseModalOTP, o as BaseModalPopup, p as BaseModalStepper, q as BaseRadioButton, r as BaseSkeleton, s as BaseSnackbar, t as BaseStepper, u as BaseSwitch, v as BaseTextArea, w as BaseTextField, x as BaseTypography, C as CONTENT_SPACING_TOKENS, y as ContentSpacing, D as DerivedColor, F as FORM_TYPE, z as FormBuilder, P as PrimitiveColor, R as Radius, A as RadiusToken, S as Shadow, E as ShadowToken, G as Spacing, H as SpacingToken, I as SubFormBuilder, T as TextFieldUpload, V as VariantStyles } from './types-D0cyG_RH.mjs';
3
+ import * as React from 'react';
4
+ import { ReactNode } from 'react';
5
+ import { SxProps } from '@mui/material/styles';
6
+ import { Control, RegisterOptions, UseFormReturn } from 'react-hook-form';
4
7
  export { AppHeader, AppSidebar, Backdrop, LayoutShell, SidebarProvider, parseAccessMenu, useSidebar } from './layout/index.mjs';
5
- import 'react';
6
- import '@mui/material/styles';
7
- import 'react-hook-form';
8
8
 
9
9
  declare function IconBiometricScan({ color }: {
10
10
  color: any;
@@ -93,6 +93,1397 @@ declare function IconVerification({ color }: {
93
93
  color: any;
94
94
  }): react_jsx_runtime.JSX.Element;
95
95
 
96
+ interface BaseAlertProps {
97
+ /** Alert color variant */
98
+ variant?: "default" | "error" | "info" | "success" | "warning";
99
+ /** MUI Alert variant type */
100
+ type?: "standard" | "filled" | "outlined";
101
+ /** Alert title */
102
+ title?: string;
103
+ /** Alert content */
104
+ children?: React.ReactNode;
105
+ /** Icon element or component. If not provided, no icon is shown. */
106
+ icon?: React.ReactNode | React.ComponentType<any>;
107
+ /** Custom background color override */
108
+ color?: string;
109
+ /** MUI sx overrides */
110
+ sx?: SxProps;
111
+ /** Close handler. If provided, close button is shown. */
112
+ onClose?: () => void;
113
+ /** sx overrides for children wrapper */
114
+ childrenSx?: SxProps;
115
+ [key: string]: any;
116
+ }
117
+
118
+ declare function BaseAlert(props: BaseAlertProps): React.ReactElement;
119
+
120
+ interface PrimitiveColorType {
121
+ color_overlay: string;
122
+
123
+ color_neutral_900: string;
124
+ color_neutral_700: string;
125
+ color_neutral_600: string;
126
+ color_neutral_500: string;
127
+ color_neutral_400: string;
128
+ color_neutral_300: string;
129
+ color_neutral_200: string;
130
+ color_neutral_100: string;
131
+ color_neutral_50: string;
132
+
133
+ color_blue_cakrawala_900: string;
134
+ color_blue_cakrawala_800: string;
135
+ color_blue_cakrawala_700: string;
136
+ color_blue_cakrawala_600: string;
137
+ color_blue_cakrawala_500: string;
138
+ color_blue_cakrawala_400: string;
139
+ color_blue_cakrawala_300: string;
140
+ color_blue_cakrawala_200: string;
141
+ color_blue_cakrawala_100: string;
142
+
143
+ color_blue_mentari_900: string;
144
+ color_blue_mentari_700: string;
145
+ color_blue_mentari_600: string;
146
+ color_blue_mentari_500: string;
147
+ color_blue_mentari_400: string;
148
+ color_blue_mentari_300: string;
149
+ color_blue_mentari_100: string;
150
+
151
+ color_blue_neon_900: string;
152
+ color_blue_neon_700: string;
153
+ color_blue_neon_600: string;
154
+ color_blue_neon_500: string;
155
+ color_blue_neon_400: string;
156
+ color_blue_neon_300: string;
157
+ color_blue_neon_100: string;
158
+
159
+ color_blue_sky_900: string;
160
+ color_blue_sky_700: string;
161
+ color_blue_sky_600: string;
162
+ color_blue_sky_500: string;
163
+ color_blue_sky_400: string;
164
+ color_blue_sky_300: string;
165
+ color_blue_sky_100: string;
166
+
167
+ color_green_900: string;
168
+ color_green_700: string;
169
+ color_green_600: string;
170
+ color_green_500: string;
171
+ color_green_400: string;
172
+ color_green_300: string;
173
+ color_green_100: string;
174
+
175
+ color_red_900: string;
176
+ color_red_700: string;
177
+ color_red_600: string;
178
+ color_red_500: string;
179
+ color_red_400: string;
180
+ color_red_300: string;
181
+ color_red_100: string;
182
+
183
+ color_yellow_900: string;
184
+ color_yellow_700: string;
185
+ color_yellow_600: string;
186
+ color_yellow_500: string;
187
+ color_yellow_400: string;
188
+ color_yellow_300: string;
189
+ color_yellow_100: string;
190
+
191
+ color_briva_900: string;
192
+ color_briva_700: string;
193
+ color_briva_600: string;
194
+ color_briva_500: string;
195
+ color_briva_400: string;
196
+ color_briva_300: string;
197
+ color_briva_100: string;
198
+
199
+ color_brizzi_900: string;
200
+ color_brizzi_700: string;
201
+ color_brizzi_600: string;
202
+ color_brizzi_500: string;
203
+ color_brizzi_400: string;
204
+ color_brizzi_300: string;
205
+ color_brizzi_100: string;
206
+
207
+ [key: string]: string;
208
+ }
209
+
210
+ declare const PrimitiveColor: PrimitiveColorType;
211
+
212
+ interface DerivedColorType {
213
+ /* Background */
214
+ color_bg_page: string;
215
+ color_bg_surface: string;
216
+ color_bg_inverse: string;
217
+ color_bg_disabled: string;
218
+
219
+ color_bg_brand_primary_strong: string;
220
+ color_bg_brand_primary: string;
221
+ color_bg_brand_primary_subtle: string;
222
+ color_bg_brand_secondary_strong: string;
223
+ color_bg_brand_secondary: string;
224
+ color_bg_brand_secondary_subtle: string;
225
+
226
+ color_bg_success_strong: string;
227
+ color_bg_success: string;
228
+ color_bg_success_subtle: string;
229
+
230
+ color_bg_danger_strong: string;
231
+ color_bg_danger: string;
232
+ color_bg_danger_subtle: string;
233
+
234
+ color_bg_warning_strong: string;
235
+ color_bg_warning: string;
236
+ color_bg_warning_subtle: string;
237
+
238
+ /* Border */
239
+ color_border_default: string;
240
+ color_border_strong: string;
241
+ color_border_inverse: string;
242
+ color_border_brand_primary: string;
243
+ color_border_brand_secondary: string;
244
+ color_border_success: string;
245
+ color_border_danger: string;
246
+ color_border_warning: string;
247
+
248
+ /* Text */
249
+ color_text_default: string;
250
+ color_text_subtle: string;
251
+ color_text_disabled: string;
252
+ color_text_placeholder: string;
253
+ color_text_inverse: string;
254
+ color_text_brand_primary: string;
255
+ color_text_brand_secondary: string;
256
+ color_text_success: string;
257
+ color_text_danger: string;
258
+ color_text_warning: string;
259
+
260
+ /* Icon */
261
+ color_icon_subtle: string;
262
+ color_icon_strong: string;
263
+ color_icon_disabled: string;
264
+ color_icon_inverse: string;
265
+ color_icon_brand_primary: string;
266
+ color_icon_brand_secondary: string;
267
+ color_icon_success: string;
268
+ color_icon_danger: string;
269
+ color_icon_warning: string;
270
+ }
271
+
272
+ declare const DerivedColor: DerivedColorType;
273
+
274
+ type TypographyVariant =
275
+ | "h1"
276
+ | "h2"
277
+ | "h3"
278
+ | "h4"
279
+ | "h5"
280
+ | "h6"
281
+ | "header1_regular"
282
+ | "header1_semibold"
283
+ | "header1_bold"
284
+ | "header2_regular"
285
+ | "header2_semibold"
286
+ | "header2_bold"
287
+ | "body1_regular"
288
+ | "body1_semibold"
289
+ | "body2_regular"
290
+ | "body2_semibold"
291
+ | "caption_regular";
292
+
293
+ type TypographyColor =
294
+ | "default"
295
+ | "subtle"
296
+ | "disabled"
297
+ | "placeholder"
298
+ | "inverse"
299
+ | "primary"
300
+ | "secondary"
301
+ | "success"
302
+ | "danger"
303
+ | "warning";
304
+
305
+ interface VariantStyleEntry {
306
+ fontSize: string;
307
+ fontWeight: number;
308
+ }
309
+
310
+ declare const VariantStyles: Record<TypographyVariant, VariantStyleEntry>;
311
+
312
+ interface TypographyProps {
313
+ /** Format: "variant.color" e.g. "body1_regular.default" */
314
+ variant?: `${TypographyVariant}.${TypographyColor}` | TypographyVariant;
315
+ /** Content */
316
+ children?: React.ReactNode;
317
+ /** MUI sx overrides */
318
+ sx?: SxProps;
319
+ [key: string]: any;
320
+ }
321
+
322
+ declare function BaseTypography(props: TypographyProps): React.ReactElement | null;
323
+
324
+ declare const SpacingToken: {
325
+ spacing0: string;
326
+ spacing1: string;
327
+ spacing2: string;
328
+ spacing3: string;
329
+ spacing4: string;
330
+ spacing5: string;
331
+ spacing6: string;
332
+ spacing7: string;
333
+ spacing8: string;
334
+ spacing9: string;
335
+ spacing10: string;
336
+ };
337
+
338
+ declare const CONTENT_SPACING_TOKENS: {
339
+ spacing_1: {
340
+ mobile: string;
341
+ tablet: string;
342
+ web: string;
343
+ };
344
+ spacing_2: {
345
+ mobile: string;
346
+ tablet: string;
347
+ web: string;
348
+ };
349
+ spacing_3: {
350
+ mobile: string;
351
+ tablet: string;
352
+ web: string;
353
+ };
354
+ };
355
+
356
+ interface ResponsiveSpacingValue {
357
+ mobile?: string;
358
+ tablet?: string;
359
+ web?: string;
360
+ [key: string]: string | undefined;
361
+ }
362
+
363
+ type SpacingSizeValue = keyof typeof SpacingToken | string | number;
364
+
365
+ type ContentSpacingSizeValue =
366
+ | keyof typeof CONTENT_SPACING_TOKENS
367
+ | ResponsiveSpacingValue;
368
+
369
+ interface SpacingProps {
370
+ size?: SpacingSizeValue;
371
+ axis?: "vertical" | "horizontal";
372
+ as?: React.ElementType;
373
+ className?: string;
374
+ style?: React.CSSProperties;
375
+ children?: React.ReactNode;
376
+ [key: string]: unknown;
377
+ }
378
+
379
+ interface ContentSpacingProps {
380
+ size?: ContentSpacingSizeValue;
381
+ breakpoint?: "mobile" | "tablet" | "web";
382
+ as?: React.ElementType;
383
+ className?: string;
384
+ style?: React.CSSProperties;
385
+ children?: React.ReactNode;
386
+ [key: string]: unknown;
387
+ }
388
+
389
+ declare const Spacing: React.FC<SpacingProps>;
390
+
391
+ declare const ContentSpacing: React.FC<ContentSpacingProps>;
392
+
393
+ interface ShadowElevation {
394
+ shadow: string;
395
+ surface: string;
396
+ }
397
+
398
+ interface ShadowMap {
399
+ elevation_0: ShadowElevation;
400
+ elevation_1: ShadowElevation;
401
+ elevation_2: ShadowElevation;
402
+ elevation_3: ShadowElevation;
403
+ elevation_4: ShadowElevation;
404
+ }
405
+
406
+ declare const Shadow: ShadowMap;
407
+
408
+ type ShadowLevel = keyof ShadowMap;
409
+
410
+ interface ShadowTokenProps {
411
+ /** Elevation level */
412
+ level?: ShadowLevel;
413
+ /** Content */
414
+ children?: React.ReactNode;
415
+ /** MUI sx overrides */
416
+ sx?: SxProps;
417
+ [key: string]: any;
418
+ }
419
+
420
+ declare function ShadowToken(props: ShadowTokenProps): React.ReactElement;
421
+
422
+ interface RadiusMap {
423
+ radius_0: string;
424
+ radius_1: string;
425
+ radius_2: string;
426
+ radius_3: string;
427
+ radius_4: string;
428
+ radius_x: string;
429
+ }
430
+
431
+ declare const Radius: RadiusMap;
432
+
433
+ type RadiusLevel = keyof RadiusMap;
434
+
435
+ interface RadiusTokenProps {
436
+ /** Radius level */
437
+ radius?: RadiusLevel;
438
+ /** Content */
439
+ children?: React.ReactNode;
440
+ /** MUI sx overrides */
441
+ sx?: SxProps;
442
+ [key: string]: any;
443
+ }
444
+
445
+ declare function RadiusToken(props: RadiusTokenProps): React.ReactElement;
446
+
447
+ interface BaseButtonProps {
448
+ /** Click handler */
449
+ onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
450
+ /** Button content */
451
+ children?: React.ReactNode;
452
+ /** Visual style variant */
453
+ variant?: "fill" | "outline" | "text" | "fab" | "ellipse-fill" | "ellipse-outline";
454
+ /** Semantic color preset */
455
+ color?: "primary" | "secondary" | "success" | "warning" | "danger";
456
+ /** Custom color key from PrimitiveColor. Overrides `color` prop when set. */
457
+ customColor?: keyof typeof PrimitiveColor | null;
458
+ /** Button size */
459
+ size?: "large" | "small";
460
+ /** Disabled state */
461
+ disabled?: boolean;
462
+ /** Icon element rendered before children */
463
+ startIcon?: React.ReactNode;
464
+ /** Icon element rendered after children */
465
+ endIcon?: React.ReactNode;
466
+ /** Button width */
467
+ width?: string;
468
+ /** MUI sx overrides */
469
+ sx?: SxProps;
470
+ [key: string]: any;
471
+ }
472
+
473
+ declare function BaseButton(props: BaseButtonProps): React.ReactElement;
474
+
475
+ interface BaseSkeletonProps {
476
+ /**
477
+ * Skeleton shape variant.
478
+ * - `text` — single line of text placeholder
479
+ * - `rectangular` — rectangle block placeholder
480
+ * - `rounded` — rectangle with border-radius
481
+ * - `circular` — circle placeholder (avatar, icon)
482
+ */
483
+ variant?: "text" | "rectangular" | "rounded" | "circular";
484
+ /**
485
+ * Animation type.
486
+ * - `pulse` — fading animation (default)
487
+ * - `wave` — wave sweep animation
488
+ * - `none` — no animation (static)
489
+ */
490
+ animation?: "pulse" | "wave" | "none";
491
+ /** Width of the skeleton. Accepts number (px) or string (e.g. "100%", "200px") */
492
+ width?: number | string;
493
+ /** Height of the skeleton. Accepts number (px) or string (e.g. "40px", "1.2em") */
494
+ height?: number | string;
495
+ /** Number of skeleton lines to render. If > 1, renders stacked skeletons. */
496
+ count?: number;
497
+ /** Gap between stacked skeletons when count > 1. Default is SpacingToken.spacing2 */
498
+ gap?: string | number;
499
+ /** MUI sx overrides */
500
+ sx?: SxProps;
501
+ [key: string]: any;
502
+ }
503
+
504
+ declare function BaseSkeleton(props: BaseSkeletonProps): React.ReactElement;
505
+
506
+ interface BaseSwitchProps {
507
+ /** Current switch state */
508
+ status?: boolean;
509
+ /** Label text or element */
510
+ label?: React.ReactNode;
511
+ /** Label position relative to the switch */
512
+ labelPlacement?: "start" | "end" | "top" | "bottom";
513
+ /** Disabled state */
514
+ isDisabled?: boolean;
515
+ /** Change handler */
516
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
517
+ }
518
+
519
+ declare function BaseSwitch(props: BaseSwitchProps): React.ReactElement;
520
+
521
+ interface BaseChipProps {
522
+ /** Chip label text */
523
+ label?: string;
524
+ /** Semantic type for preset colors */
525
+ type?: "default" | "success" | "danger" | "warning" | "info";
526
+ /** Chip visual variant */
527
+ variant?: "filled" | "outlined";
528
+ /** Icon before label */
529
+ startIcon?: React.ReactNode;
530
+ /** Delete handler — shows delete icon when provided */
531
+ onDelete?: () => void;
532
+ /** Click handler */
533
+ onClick?: () => void;
534
+ /** Disabled state */
535
+ disabled?: boolean;
536
+ /** Full width mode — chip takes 100% width of parent */
537
+ fullWidth?: boolean;
538
+ /** Show/hide the type icon (default: true). When false, no icon is displayed unless startIcon is used */
539
+ showIcon?: boolean;
540
+ /** MUI sx overrides */
541
+ sx?: SxProps;
542
+ [key: string]: any;
543
+ }
544
+
545
+ declare function BaseChip(props: BaseChipProps): React.ReactElement;
546
+
547
+ interface BaseCardProps {
548
+ /**
549
+ * Card variant type. Supports typography suffix: "with-header.header1_bold"
550
+ * Default typography: header1_semibold
551
+ * Examples: "default", "with-header", "with-header.header1_bold", "with-header-footer.body1_regular"
552
+ */
553
+ variant?: "default" | "with-header" | "with-header-footer" | (string & {});
554
+ /** Card body content */
555
+ children?: React.ReactNode;
556
+ /** Header background color preset */
557
+ color?: "primary" | "secondary" | "success" | "warning" | "danger" | "clean";
558
+ /** Header title text */
559
+ title?: string;
560
+ /** Header subtitle text */
561
+ subtitle?: string;
562
+ /** Typography variant for subtitle (e.g. "body2_regular.subtle"). Overrides boldSubtitle/fontSize when set. */
563
+ subtitleVariant?: string;
564
+ /** Bold the title */
565
+ boldTitle?: boolean;
566
+ /** Bold the subtitle */
567
+ boldSubtitle?: boolean;
568
+ /** Show/hide subtitle */
569
+ showSubtitle?: boolean;
570
+ /** Enable collapse/expand on header click */
571
+ isCollapsible?: boolean;
572
+ /** Icon element before title in header */
573
+ startIcon?: React.ReactNode;
574
+ /** Icon element after title in header */
575
+ endIcon?: React.ReactNode;
576
+ /** Show/hide startIcon */
577
+ showStartIcon?: boolean;
578
+ /** Show/hide endIcon */
579
+ showEndIcon?: boolean;
580
+ /** Footer content (only for with-header-footer variant) */
581
+ footer?: React.ReactNode;
582
+ /** Enable watermark overlay on content area */
583
+ isWatermark?: boolean;
584
+ /** Watermark text (e.g. "12345678 / Brispot Web") */
585
+ watermarkText?: string;
586
+ /** MUI sx overrides */
587
+ sx?: SxProps;
588
+ [key: string]: any;
589
+ }
590
+
591
+ declare function BaseCard(props: BaseCardProps): React.ReactElement;
592
+
593
+ interface BaseSnackbarPosition {
594
+ vertical: "top" | "bottom";
595
+ horizontal: "left" | "center" | "right";
596
+ }
597
+
598
+ interface BaseSnackbarProps {
599
+ /** Whether the snackbar is open */
600
+ open?: boolean;
601
+ /** Close handler */
602
+ onClose?: (event?: React.SyntheticEvent | Event, reason?: string) => void;
603
+ /** Snackbar message content */
604
+ message?: string;
605
+ /** Color variant */
606
+ variant?: "success" | "error" | "info" | "warning" | "default";
607
+ /** Auto hide duration in milliseconds */
608
+ duration?: number;
609
+ /** Anchor origin position */
610
+ position?: BaseSnackbarPosition;
611
+ /** Icon element or component. If not provided, no icon is shown. */
612
+ icon?: React.ReactNode | React.ComponentType<any>;
613
+ /** MUI sx overrides */
614
+ sx?: SxProps;
615
+ [key: string]: any;
616
+ }
617
+
618
+ declare function BaseSnackbar(props: BaseSnackbarProps): React.ReactElement;
619
+
620
+ interface BaseCheckboxOption {
621
+ /** Label yang ditampilkan */
622
+ label: React.ReactNode;
623
+ /** Nilai opsi */
624
+ value: string;
625
+ /** Nonaktifkan opsi ini */
626
+ disabled?: boolean;
627
+ [key: string]: any;
628
+ }
629
+
630
+ interface BaseCheckboxSharedProps {
631
+ /** Daftar opsi checkbox (untuk mode group) */
632
+ options: BaseCheckboxOption[];
633
+ /** Label untuk mode single checkbox */
634
+ label?: React.ReactNode;
635
+ /** Nonaktifkan semua checkbox */
636
+ disabled?: boolean;
637
+ /** Posisi label relatif terhadap checkbox */
638
+ labelPlacement?: "top" | "bottom" | "start" | "end";
639
+ /** Tampilkan checkbox secara horizontal */
640
+ isHorizontal?: boolean;
641
+ /** Custom styles via MUI sx prop */
642
+ sx?: SxProps;
643
+ [key: string]: any;
644
+ }
645
+
646
+ interface BaseCheckboxSingleProps extends Omit<BaseCheckboxSharedProps, "options"> {
647
+ options?: undefined;
648
+ /** Nilai checked untuk single checkbox */
649
+ checked?: boolean;
650
+ /** Callback ketika nilai berubah (single mode) */
651
+ onChange?: (checked: boolean, event?: React.ChangeEvent<HTMLInputElement>) => void;
652
+ }
653
+
654
+ interface BaseCheckboxGroupProps extends BaseCheckboxSharedProps {
655
+ options: BaseCheckboxOption[];
656
+ /** Array nilai yang dipilih (group mode) */
657
+ checked?: string[];
658
+ /** Callback ketika nilai berubah (group mode) */
659
+ onChange?: (newValue: string[]) => void;
660
+ }
661
+
662
+ type BaseCheckboxProps =
663
+ | BaseCheckboxSingleProps
664
+ | BaseCheckboxGroupProps;
665
+
666
+ declare function BaseCheckbox(
667
+ props: BaseCheckboxProps,
668
+ ): React.ReactElement | null;
669
+
670
+ type BaseDatatableAlign =
671
+ | "left"
672
+ | "center"
673
+ | "right"
674
+ | "justify"
675
+ | "inherit"
676
+ | (string & {});
677
+
678
+ interface BaseDatatableColumn<T = Record<string, any>> {
679
+ id?: string;
680
+ key?: string;
681
+ field?: string;
682
+ sortField?: string;
683
+ label?: ReactNode;
684
+ header?: ReactNode;
685
+ accessorKey?: string;
686
+ accessorFn?: (row: T) => any;
687
+ align?: BaseDatatableAlign;
688
+ headerAlign?: BaseDatatableAlign;
689
+ width?: number;
690
+ minWidth?: number;
691
+ sticky?: "left" | "right";
692
+ sortable?: boolean;
693
+ noWrap?: boolean;
694
+ cellBg?: string;
695
+ cellText?: string;
696
+ cellSx?: SxProps;
697
+ renderCell?: (context: {
698
+ value: any;
699
+ row: T;
700
+ rowIndex: number;
701
+ column: BaseDatatableColumn<T>;
702
+ columnIndex: number;
703
+ checked?: boolean;
704
+ }) => ReactNode;
705
+ }
706
+
707
+ interface BaseDatatableHeaderCell {
708
+ id?: string;
709
+ key?: string;
710
+ label: ReactNode;
711
+ align?: BaseDatatableAlign;
712
+ colSpan?: number;
713
+ rowSpan?: number;
714
+ colspan?: number;
715
+ rowspan?: number;
716
+ sortKey?: string;
717
+ width?: number;
718
+ minWidth?: number;
719
+ sticky?: "left" | "right";
720
+ sx?: SxProps;
721
+ }
722
+
723
+ interface BaseDatatableFeatures {
724
+ sorting?: boolean;
725
+ sortingMode?: "client" | "server";
726
+ defaultSort?: BaseDatatableSortState | null;
727
+ sortState?: BaseDatatableSortState | null;
728
+ resetPageOnSort?: boolean;
729
+ onSortChange?: (
730
+ payload: BaseDatatableSortPayload,
731
+ column: BaseDatatableColumn,
732
+ cell: BaseDatatableHeaderCell,
733
+ ) => void;
734
+ headerInteractive?: boolean;
735
+ }
736
+
737
+ interface BaseDatatableSortState {
738
+ key: string;
739
+ direction: "asc" | "desc";
740
+ }
741
+
742
+ interface BaseDatatableSortPayload {
743
+ orderBy: string;
744
+ order: "asc" | "desc";
745
+ page: number;
746
+ rowsPerPage: number;
747
+ }
748
+
749
+ interface BaseDatatableLayout {
750
+ stickyHeader?: boolean;
751
+ stickyOffset?: number;
752
+ freezeLeft?: number;
753
+ freezeRight?: number;
754
+ maxHeight?: number;
755
+ }
756
+
757
+ interface BaseDatatableSelection<T = Record<string, any>> {
758
+ enabled?: boolean;
759
+ position?: "left" | "right";
760
+ selectRowOnClick?: boolean;
761
+ selectedRowIds?: Array<string | number>;
762
+ defaultSelectedRowIds?: Array<string | number>;
763
+ onChange?: (selectedRowIds: Array<string | number>) => void;
764
+ isRowSelectable?: (row: T, rowIndex: number) => boolean;
765
+ }
766
+
767
+ interface BaseDatatablePagination {
768
+ enabled?: boolean;
769
+ serverSide?: boolean;
770
+ /** Pagination variant. "default" uses MUI TablePagination (serverside arrows), "numbered" uses custom page buttons from Figma. Default: "default" */
771
+ variant?: "default" | "numbered";
772
+ /** (numbered only) Show total count "dari 100 data" after the range. Default: false. "Menampilkan 1-10" always shows. */
773
+ showTotalCount?: boolean;
774
+ count?: number;
775
+ page?: number;
776
+ rowsPerPage?: number;
777
+ rowsPerPageOptions?: number[];
778
+ labelRowsPerPage?: ReactNode;
779
+ onPageChange?: (event: unknown, nextPage: number) => void;
780
+ onRowsPerPageChange?: (event: unknown, nextRowsPerPage: number) => void;
781
+ }
782
+
783
+ interface BaseDatatableCellOverrides {
784
+ rowSpan?: number;
785
+ colSpan?: number;
786
+ content?: ReactNode;
787
+ sx?: SxProps;
788
+ }
789
+
790
+ interface BaseDatatableRenderRowContext<T = Record<string, any>> {
791
+ row: T;
792
+ rowIndex: number;
793
+ rowId: string | number;
794
+ rowActive: boolean;
795
+ columns: BaseDatatableColumn<T>[];
796
+ dataColumns: BaseDatatableColumn<T>[];
797
+ selectedRowIds: Array<string | number>;
798
+ renderCell: (
799
+ column: BaseDatatableColumn<T>,
800
+ row: T,
801
+ rowIndex: number,
802
+ columnIndex: number,
803
+ rowId: string | number,
804
+ rowActive: boolean,
805
+ cellOverrides?: BaseDatatableCellOverrides,
806
+ ) => ReactNode;
807
+ }
808
+
809
+ interface BaseDatatableProps<T = Record<string, any>> {
810
+ columns?: Array<BaseDatatableColumn<T> | string>;
811
+ data?: T[];
812
+ header?: BaseDatatableHeaderCell[][];
813
+ features?: BaseDatatableFeatures;
814
+ layout?: BaseDatatableLayout;
815
+ selection?: BaseDatatableSelection<T>;
816
+ pagination?: BaseDatatablePagination;
817
+ renderRow?: (context: BaseDatatableRenderRowContext<T>) => ReactNode;
818
+ onRowClick?: (row: T, rowIndex: number) => void;
819
+ getRowId?: (row: T, rowIndex: number) => string | number;
820
+ emptyState?: ReactNode;
821
+ loading?: boolean;
822
+ loadingText?: ReactNode;
823
+ rowHover?: boolean;
824
+ activeRowId?: string | number | null;
825
+ containerSx?: SxProps;
826
+ tableSx?: SxProps;
827
+ }
828
+
829
+ declare function BaseDatatable<T = Record<string, any>>(
830
+ props: BaseDatatableProps<T>,
831
+ ): ReactNode;
832
+
96
833
  declare function ServerSidePaginationActions(props: any): react_jsx_runtime.JSX.Element;
97
834
 
98
- export { CapsLockOn, DownloadIconLarge, IconBiometricScan, IconDocumentAdd, IconEdit, IconFile, IconGradingRounded, IconListDocument, IconMoney, IconProgress, IconReset, IconSave, IconSaveOutlined, IconSendWhite, IconSendWhiteFull, IconUpload, IconUserScan, IconVerification, MoneyIcon, ServerSidePaginationActions, UsersIcon };
835
+ declare function DatatablePagination({ variant, showTotalCount, page, rowsPerPage, count, onPageChange, onRowsPerPageChange, rowsPerPageOptions, labelRowsPerPage, serverSide, currentPageDataLength, }: {
836
+ variant?: string;
837
+ showTotalCount?: boolean;
838
+ page?: number;
839
+ rowsPerPage?: number;
840
+ count?: number;
841
+ onPageChange: any;
842
+ onRowsPerPageChange: any;
843
+ rowsPerPageOptions?: number[];
844
+ labelRowsPerPage: any;
845
+ serverSide?: boolean;
846
+ currentPageDataLength?: number;
847
+ }): react_jsx_runtime.JSX.Element;
848
+
849
+ interface BaseDatePickerProps {
850
+ /** Picker mode */
851
+ type?: "single" | "day" | "datetime" | "range" | "month" | "year" | "time";
852
+ /** Field name for React Hook Form */
853
+ name: string;
854
+ /** Control object from react-hook-form */
855
+ control: any;
856
+ /** Default selected value */
857
+ defaultValue?: any;
858
+ /** Label title above input */
859
+ title?: string;
860
+ /** Optional subtitle */
861
+ subtitle?: string;
862
+ /** Input placeholder text */
863
+ placeholder?: string;
864
+ /** Minimum selectable date */
865
+ minDate?: Date | string;
866
+ /** Maximum selectable date */
867
+ maxDate?: Date | string;
868
+ /** Disable picker interaction */
869
+ isDisabled?: boolean;
870
+ /** Allow user to clear selected value */
871
+ clearable?: boolean;
872
+ /** Allow manual input editing (range only) */
873
+ editableDateInputs?: boolean;
874
+ /** Display format for value */
875
+ format?: string;
876
+ /** How the calendar popup is triggered */
877
+ openBy?: "field" | "icon" | "both";
878
+ /** MUI sx overrides for the wrapper */
879
+ sx?: SxProps;
880
+ /** Custom onChange handler */
881
+ onChange?: (value: any) => void;
882
+ [key: string]: any;
883
+ }
884
+
885
+ declare function BaseDatePicker(
886
+ props: BaseDatePickerProps,
887
+ ): React.ReactElement | null;
888
+
889
+ interface DropdownOption {
890
+ label: string;
891
+ value: string;
892
+ disabled?: boolean;
893
+ [key: string]: any;
894
+ }
895
+
896
+ interface BaseDropdownProps {
897
+ /** Field name for react-hook-form */
898
+ name: string;
899
+ /** Control object from react-hook-form */
900
+ control: any;
901
+ /** Static options list */
902
+ options?: DropdownOption[];
903
+ /** Async options loader function */
904
+ loadOptions?: (inputValue: string) => Promise<DropdownOption[]>;
905
+ /** Enable multi select mode */
906
+ isMulti?: boolean;
907
+ /** Enable search input */
908
+ isSearchable?: boolean;
909
+ /** Show selected values as chips (multi only) */
910
+ showChip?: boolean;
911
+ /** Show Select All checkbox (multi only) */
912
+ showSelectAll?: boolean;
913
+ /** Label title */
914
+ title?: string;
915
+ /** Subtitle text */
916
+ subtitle?: string;
917
+ /** Default selected value */
918
+ defaultValue?: any;
919
+ /** Disable dropdown */
920
+ isDisabled?: boolean;
921
+ /** Allow clearing value */
922
+ isClearable?: boolean;
923
+ /** Limit max height with scroll */
924
+ preventOverflow?: boolean;
925
+ /** Colors for multi-value tags */
926
+ optionColors?: string[];
927
+ /** Dropdown variant */
928
+ variant?: "select" | "checkbox";
929
+ /** MUI sx overrides for wrapper */
930
+ sx?: SxProps;
931
+ /** Custom onChange handler */
932
+ onChange?: (value: any) => void;
933
+ [key: string]: any;
934
+ }
935
+
936
+ declare function BaseDropdown(
937
+ props: BaseDropdownProps,
938
+ ): React.ReactElement;
939
+
940
+ interface BaseDropzoneSettings {
941
+ /** Ekstensi file yang diizinkan (format react-dropzone accept) */
942
+ allowedExtensions?: Record<string, string[]>;
943
+ /** Ukuran maksimal file dalam MB */
944
+ maxSize?: number;
945
+ /** Jumlah maksimal file yang dapat diupload */
946
+ maxFiles?: number;
947
+ /** Tampilkan preview gambar */
948
+ isImagePreview?: boolean;
949
+ /** Tipe tampilan preview */
950
+ previewType?: "grid" | "list";
951
+ }
952
+
953
+ interface BaseDropzoneLabels {
954
+ /** Label judul di atas dropzone */
955
+ title?: React.ReactNode;
956
+ /** Teks utama di dalam area dropzone */
957
+ dropzoneTitle?: string;
958
+ /** Label pada tombol pilih file */
959
+ titleButton?: string;
960
+ /** Teks keterangan format file yang diizinkan */
961
+ allowedFileLabel?: string;
962
+ }
963
+
964
+ interface BaseDropzoneCallbacks {
965
+ /** Callback ketika file berhasil diupload */
966
+ uploadFile?: (files: Array<{ source: string; originName: string; type: string; size: number }>) => void;
967
+ /** Callback ketika file dihapus */
968
+ removeFile?: (fileName: string) => void;
969
+ /** Pesan error kustom dari luar komponen */
970
+ customError?: string | null;
971
+ }
972
+
973
+ interface BaseDropzoneProps {
974
+ /** Upload otomatis setelah file dipilih */
975
+ autoUpload?: boolean;
976
+ /** Pengaturan dropzone */
977
+ settings?: BaseDropzoneSettings;
978
+ /** Label-label yang ditampilkan */
979
+ labels?: BaseDropzoneLabels;
980
+ /** Callback functions */
981
+ callbacks?: BaseDropzoneCallbacks;
982
+ }
983
+
984
+ declare function BaseDropzone(
985
+ props: BaseDropzoneProps,
986
+ ): React.ReactElement;
987
+
988
+ interface BaseRadioOption {
989
+ label: React.ReactNode;
990
+ value: any;
991
+ isDisabled?: boolean;
992
+ [key: string]: any;
993
+ }
994
+
995
+ interface BaseRadioButtonProps {
996
+ /** Nama field untuk react-hook-form */
997
+ name?: string;
998
+ /** Control dari useForm() */
999
+ control?: any;
1000
+ /** Nilai awal yang dipilih */
1001
+ defaultValue?: any;
1002
+ /** Label di atas radio group */
1003
+ label?: React.ReactNode;
1004
+ /** Daftar opsi radio */
1005
+ options?: BaseRadioOption[];
1006
+ /** Variant typography untuk label */
1007
+ labelVariant?: string;
1008
+ /** Variant typography untuk pesan error */
1009
+ errorVariant?: string;
1010
+ /** Orientasi layout radio group */
1011
+ orientation?: "vertical" | "horizontal";
1012
+ /** Token warna untuk radio yang dipilih */
1013
+ radioColorToken?: string;
1014
+ /** Nonaktifkan semua opsi */
1015
+ isDisabled?: boolean;
1016
+ /** Gunakan error state helper untuk nested field names */
1017
+ useErrorStateHelper?: boolean;
1018
+ /** Custom styles via MUI sx prop */
1019
+ sx?: SxProps;
1020
+
1021
+ [key: string]: any;
1022
+ }
1023
+
1024
+ declare function BaseRadioButton(
1025
+ props: BaseRadioButtonProps,
1026
+ ): React.ReactElement | null;
1027
+
1028
+ interface BaseStepperSimpleStep {
1029
+ /** Step status text (e.g. "Completed", "In Progress") */
1030
+ status?: string;
1031
+ /** Step label/description */
1032
+ label?: string;
1033
+ }
1034
+
1035
+ interface BaseStepperDashboardSublist {
1036
+ sublist_title?: string;
1037
+ is_done?: 0 | 1;
1038
+ }
1039
+
1040
+ interface BaseStepperDashboardStep {
1041
+ title?: string;
1042
+ sublist?: BaseStepperDashboardSublist[];
1043
+ is_done?: 0 | 1;
1044
+ }
1045
+
1046
+ interface BaseStepperProps {
1047
+ /** Array of step objects */
1048
+ steps?: BaseStepperSimpleStep[] | BaseStepperDashboardStep[];
1049
+ /** Currently active step index (for simple variant) */
1050
+ activeStep?: number;
1051
+ /** Layout orientation */
1052
+ orientation?: "horizontal" | "vertical";
1053
+ /** Stepper visual variant */
1054
+ variant?: "simple" | "dashboard";
1055
+ /** MUI sx overrides for wrapper */
1056
+ sx?: SxProps;
1057
+ }
1058
+
1059
+ declare function BaseStepper(props: BaseStepperProps): React.ReactElement;
1060
+
1061
+ interface BaseTextFieldProps {
1062
+ /** Field name for react-hook-form binding */
1063
+ name: string;
1064
+ /** Control object from react-hook-form */
1065
+ control: any;
1066
+ /** Default value for the field */
1067
+ defaultValue?: any;
1068
+ /** Label title displayed above the input */
1069
+ title?: string;
1070
+ /** Maximum character length */
1071
+ maxLength?: number;
1072
+ /** Show "Maksimal X Karakter" helper text */
1073
+ showLength?: boolean;
1074
+ /** Show character counter (e.g. 5/20) */
1075
+ showCountHelper?: boolean;
1076
+ /** Only allow numeric input (0-9) */
1077
+ isNumericOnly?: boolean;
1078
+ /** Only allow alphanumeric input (a-z, A-Z, 0-9) */
1079
+ isAlphaNumericOnly?: boolean;
1080
+ /** Only allow alphabetic input (a-z, A-Z) */
1081
+ isAlphaOnly?: boolean;
1082
+ /** Additional special characters to allow */
1083
+ allowedSpecialCharacters?: string;
1084
+ /** Special characters to disallow */
1085
+ dontAllowedSpecialCharacters?: string;
1086
+ /** Disable the input */
1087
+ isDisabled?: boolean;
1088
+ /** Prevent paste action */
1089
+ isCantPaste?: boolean;
1090
+ /** Result text shown below the input */
1091
+ result?: React.ReactNode;
1092
+ /** Color for the result text */
1093
+ resultColor?: string;
1094
+ /** Disallow spaces */
1095
+ noSpaceAllowed?: boolean;
1096
+ /** Input mask pattern (use 'x' for editable slots, e.g. "0xxx-xxxx-xxxx") */
1097
+ textMask?: string;
1098
+ /** MUI InputProps (startAdornment, endAdornment, sx, etc.) */
1099
+ InputProps?: Record<string, any>;
1100
+ /** Native input props (min, max, step, etc.) */
1101
+ inputProps?: Record<string, any>;
1102
+ /** MUI sx overrides for the wrapper Box */
1103
+ sx?: SxProps;
1104
+ /** Input placeholder text */
1105
+ placeholder?: string;
1106
+ /** Input type (text, password, email, etc.) */
1107
+ type?: string;
1108
+ [key: string]: any;
1109
+ }
1110
+
1111
+ declare function BaseTextField(
1112
+ props: BaseTextFieldProps,
1113
+ ): React.ReactElement | null;
1114
+
1115
+ interface TextFieldUploadProps {
1116
+ /** Nama field untuk react-hook-form */
1117
+ name?: string;
1118
+ /** Control dari useForm() */
1119
+ control?: any;
1120
+ /** Nilai awal field */
1121
+ defaultValue?: string;
1122
+ /** Label di atas field */
1123
+ title?: React.ReactNode;
1124
+ /** Ekstensi file yang diterima (contoh: ".pdf,.jpg") */
1125
+ accept?: string;
1126
+ /** Ukuran maksimal file dalam MB */
1127
+ maxSize?: number;
1128
+ /** Nonaktifkan field */
1129
+ isDisabled?: boolean;
1130
+ /** Label pada tombol upload */
1131
+ buttonLabel?: string;
1132
+ /** Posisi tombol upload relatif terhadap input */
1133
+ buttonPosition?: "start" | "end";
1134
+ /** Callback ketika file dipilih */
1135
+ uploadFile?: (fileName: string, file: File | null) => void;
1136
+ /** Posisi ikon pada tombol upload */
1137
+ iconPosition?: "start" | "end";
1138
+ }
1139
+
1140
+ declare function TextFieldUpload(
1141
+ props: TextFieldUploadProps,
1142
+ ): React.ReactElement | null;
1143
+
1144
+ interface TinyMCEInitConfig {
1145
+ /** Placeholder text di area editor */
1146
+ placeholder?: string;
1147
+ /** Prefix URL untuk image upload */
1148
+ prefixUrl?: string;
1149
+ [key: string]: any;
1150
+ }
1151
+
1152
+ interface BaseTextAreaProps {
1153
+ /** Nama field untuk react-hook-form */
1154
+ name?: string;
1155
+ /** Control dari useForm() */
1156
+ control?: Control<any>;
1157
+ /** Nilai awal (bisa HTML string jika useRichText aktif) */
1158
+ defaultValue?: string;
1159
+ /** Teks bantuan di bawah field (tampil jika tidak ada error) */
1160
+ helperText?: React.ReactNode;
1161
+ /** Validasi rules react-hook-form */
1162
+ rules?: RegisterOptions;
1163
+ /** Harus tepat N karakter (override min/maxLength) */
1164
+ exactLength?: number;
1165
+ /** Batas maksimal karakter */
1166
+ maxLength?: number;
1167
+ /** Label di atas field */
1168
+ title?: string;
1169
+ /** Nonaktifkan field */
1170
+ isDisabled?: boolean;
1171
+ /** Aktifkan TinyMCE rich-text editor (default: plain MUI textarea) */
1172
+ useRichText?: boolean;
1173
+ /** Override konfigurasi TinyMCE (placeholder, prefixUrl, dll) */
1174
+ init?: TinyMCEInitConfig;
1175
+ /** Callback file_picker_callback untuk upload gambar di rich text mode */
1176
+ handleImageUpload?: (
1177
+ callback: (url: string, meta?: Record<string, string>) => void,
1178
+ value: string,
1179
+ meta: Record<string, string>,
1180
+ ) => void;
1181
+ /** Custom styles via MUI sx prop */
1182
+ sx?: SxProps;
1183
+
1184
+ [key: string]: any;
1185
+ }
1186
+
1187
+ declare function BaseTextArea(
1188
+ props: BaseTextAreaProps,
1189
+ ): React.ReactElement | null;
1190
+
1191
+ interface BaseModalAlertShowOptions {
1192
+ /** Icon type preset or custom image path */
1193
+ icon?: "success" | "error" | "info" | "warning" | "confirm" | string;
1194
+ /** Modal title text */
1195
+ title?: string;
1196
+ /** Modal description text */
1197
+ description?: string;
1198
+ /** Cancel button text. Default: "Batal" */
1199
+ cancelBtnText?: string;
1200
+ /** Confirm button text. Default: "Ya" */
1201
+ confirmBtnText?: string;
1202
+ /** Cancel button action. Default: closes modal. Can be custom function. */
1203
+ cancelBtnProps?: () => void;
1204
+ /** Confirm button action. Called on confirm click. */
1205
+ confirmBtnProps?: () => void;
1206
+ /** Show cancel button. Default: true */
1207
+ showCancelBtn?: boolean;
1208
+ /** Show confirm button. Default: true */
1209
+ showConfirmBtn?: boolean;
1210
+ }
1211
+
1212
+ interface BaseModalAlertDialogProps extends BaseModalAlertShowOptions {
1213
+ /** Whether the modal is open */
1214
+ open?: boolean;
1215
+ /** Close handler */
1216
+ onClose?: () => void;
1217
+ }
1218
+
1219
+ /**
1220
+ * Imperative BaseModalAlert API.
1221
+ *
1222
+ * Usage:
1223
+ * ```jsx
1224
+ * import { BaseModalAlert } from 'spotlibs-components';
1225
+ *
1226
+ * BaseModalAlert.show({
1227
+ * icon: 'success',
1228
+ * title: 'Berhasil!',
1229
+ * description: 'Data berhasil disimpan.',
1230
+ * confirmBtnText: 'OK',
1231
+ * showCancelBtn: false,
1232
+ * confirmBtnProps: () => console.log('confirmed'),
1233
+ * });
1234
+ *
1235
+ * BaseModalAlert.hide();
1236
+ * ```
1237
+ */
1238
+ declare const BaseModalAlert: {
1239
+ /** Show the modal alert with given options */
1240
+ show: (options: BaseModalAlertShowOptions) => void;
1241
+ /** Hide the modal alert */
1242
+ hide: () => void;
1243
+ /** Internal: set modal ref (used by BaseModalAlertProvider) */
1244
+ setModalRef: (ref: React.RefObject<any>) => void;
1245
+ };
1246
+
1247
+ /**
1248
+ * Provider component. Mount once at app root to enable BaseModalAlert.show()/hide().
1249
+ *
1250
+ * ```jsx
1251
+ * import { BaseModalAlertProvider } from 'spotlibs-components';
1252
+ *
1253
+ * function App() {
1254
+ * return (
1255
+ * <>
1256
+ * <BaseModalAlertProvider />
1257
+ * <YourApp />
1258
+ * </>
1259
+ * );
1260
+ * }
1261
+ * ```
1262
+ */
1263
+ declare function BaseModalAlertProvider(): React.ReactElement;
1264
+
1265
+ /**
1266
+ * Controlled dialog component for direct usage without imperative API.
1267
+ */
1268
+ declare function BaseModalAlertDialog(props: BaseModalAlertDialogProps): React.ReactElement;
1269
+
1270
+ interface BaseModalLoadingDialogProps {
1271
+ /** Whether the loading modal is open */
1272
+ open?: boolean;
1273
+ /** Loading message text. Default: "Mohon tunggu..." */
1274
+ message?: string;
1275
+ }
1276
+
1277
+ /**
1278
+ * Imperative BaseModalLoading API.
1279
+ *
1280
+ * Usage:
1281
+ * ```jsx
1282
+ * import { BaseModalLoading } from 'spotlibs-components';
1283
+ *
1284
+ * BaseModalLoading.show(); // default message
1285
+ * BaseModalLoading.show("Sedang memproses data...");
1286
+ * BaseModalLoading.hide();
1287
+ * ```
1288
+ */
1289
+ declare const BaseModalLoading: {
1290
+ /** Show the loading modal. Optionally pass a custom message. */
1291
+ show: (message?: string) => void;
1292
+ /** Hide the loading modal */
1293
+ hide: () => void;
1294
+ /** Internal: set modal ref (used by BaseModalLoadingProvider) */
1295
+ setModalRef: (ref: React.RefObject<any>) => void;
1296
+ };
1297
+
1298
+ /**
1299
+ * Provider component. Mount once at app root to enable BaseModalLoading.show()/hide().
1300
+ *
1301
+ * ```jsx
1302
+ * import { BaseModalLoadingProvider } from 'spotlibs-components';
1303
+ *
1304
+ * function App() {
1305
+ * return (
1306
+ * <>
1307
+ * <BaseModalLoadingProvider />
1308
+ * <YourApp />
1309
+ * </>
1310
+ * );
1311
+ * }
1312
+ * ```
1313
+ */
1314
+ declare function BaseModalLoadingProvider(): React.ReactElement;
1315
+
1316
+ /**
1317
+ * Controlled loading dialog component for direct usage without imperative API.
1318
+ */
1319
+ declare function BaseModalLoadingDialog(props: BaseModalLoadingDialogProps): React.ReactElement;
1320
+
1321
+ interface BaseModalPopupProps {
1322
+ /** Whether the modal is open */
1323
+ open?: boolean;
1324
+ /** Close handler */
1325
+ onClose?: () => void;
1326
+ /** Modal variant type */
1327
+ variant?: "default" | "with-header" | "with-header-footer";
1328
+ /** Header background color preset */
1329
+ color?: "primary" | "secondary" | "success" | "warning" | "danger";
1330
+ /** Header title text */
1331
+ title?: string;
1332
+ /** Header subtitle text */
1333
+ subtitle?: string;
1334
+ /** Icon element before title in header */
1335
+ startIcon?: React.ReactNode;
1336
+ /** Modal body content */
1337
+ children?: React.ReactNode;
1338
+ /** Footer content (only for with-header-footer variant) */
1339
+ footer?: React.ReactNode;
1340
+ /** MUI Dialog maxWidth. Default: "sm" */
1341
+ maxWidth?: "xs" | "sm" | "md" | "lg" | "xl" | false;
1342
+ /** Whether dialog takes full width of maxWidth. Default: true */
1343
+ fullWidth?: boolean;
1344
+ /** Enable watermark overlay on content area */
1345
+ isWatermark?: boolean;
1346
+ /** Watermark text (e.g. "12345678 / Brispot Web") */
1347
+ watermarkText?: string;
1348
+ /** MUI sx overrides for Dialog */
1349
+ sx?: SxProps;
1350
+ [key: string]: any;
1351
+ }
1352
+
1353
+ declare function BaseModalPopup(props: BaseModalPopupProps): React.ReactElement;
1354
+
1355
+ interface BaseModalStepperStep {
1356
+ label?: string;
1357
+ description?: string;
1358
+ responseCode?: string;
1359
+ responseDesc?: string;
1360
+ responseTime?: number;
1361
+ }
1362
+
1363
+ interface BaseModalStepperProps {
1364
+ open: boolean;
1365
+
1366
+ onClose: (event?: any, reason?: any) => void;
1367
+
1368
+ title?: string;
1369
+
1370
+ stepper?: BaseModalStepperStep[];
1371
+
1372
+ navState?: string | number | null;
1373
+
1374
+ lengthUpload?: number;
1375
+
1376
+ id_pengajuan?: number | null;
1377
+
1378
+ showFooter?: boolean;
1379
+
1380
+ children?: React.ReactNode;
1381
+
1382
+ modalWidth?: string;
1383
+
1384
+ [key: string]: any;
1385
+ }
1386
+
1387
+ declare function BaseModalStepper(
1388
+ props: BaseModalStepperProps,
1389
+ ): React.ReactElement | null;
1390
+
1391
+ interface BaseModalOTPProps {
1392
+ isOpen?: boolean;
1393
+
1394
+ phone?: string;
1395
+
1396
+ setIsOpen?: (open: boolean) => void;
1397
+
1398
+ otpLength?: number;
1399
+
1400
+ onValidateOtp?: (otp: string) => void;
1401
+
1402
+ onRequestOtp?: () => void;
1403
+
1404
+ [key: string]: any;
1405
+ }
1406
+
1407
+ declare function BaseModalOTP(
1408
+ props: BaseModalOTPProps,
1409
+ ): React.ReactElement | null;
1410
+
1411
+ declare const FORM_TYPE: {
1412
+ TEXT_FIELD: "text-field";
1413
+ TEXT_AREA: "text-area";
1414
+ TEXT_FIELD_UPLOAD: "text-field-upload";
1415
+ DATE_PICKER: "date-picker";
1416
+ DATETIME_PICKER: "datetime-picker";
1417
+ TIME_PICKER: "time-picker";
1418
+ YEAR_PICKER: "year-picker";
1419
+ MONTH_PICKER: "month-picker";
1420
+ DAY_PICKER: "day-picker";
1421
+ DATE_RANGE: "date-range";
1422
+ DROPDOWN: "dropdown";
1423
+ DROPDOWN_ASYNC: "dropdown-async";
1424
+ CHECKBOX: "checkbox";
1425
+ RADIO: "radio";
1426
+ CUSTOM: "custom";
1427
+ };
1428
+
1429
+ interface FormBuilderFieldConfig {
1430
+ type: string;
1431
+ name?: string;
1432
+ title?: string;
1433
+ /** Per-field layout override */
1434
+ layout?: "vertical" | "horizontal";
1435
+ /** Per-field label width override */
1436
+ labelWidth?: string;
1437
+ /** Per-field divider override */
1438
+ divider?: boolean;
1439
+ [key: string]: any;
1440
+ }
1441
+
1442
+ interface FormBuilderProps<T = any> {
1443
+ /** MUI sx overrides for form element */
1444
+ sx?: SxProps;
1445
+ /** Array of field configurations */
1446
+ fields?: FormBuilderFieldConfig[];
1447
+ /** react-hook-form methods */
1448
+ methods?: UseFormReturn<T>;
1449
+ /** Form submit handler */
1450
+ onSubmit?: (data: T) => void;
1451
+ /** Gap between fields in px. Default: 16 */
1452
+ gap?: number;
1453
+ /** Number of grid columns. Default: 1 */
1454
+ columns?: number;
1455
+ /** Field layout direction. Default: "vertical" */
1456
+ layout?: "vertical" | "horizontal";
1457
+ /** Label width for horizontal layout. Default: "30%" */
1458
+ labelWidth?: string;
1459
+ /** Show border-bottom between fields. Default: false */
1460
+ divider?: boolean;
1461
+ /** CSS class for form element */
1462
+ className?: string;
1463
+ [key: string]: any;
1464
+ }
1465
+
1466
+ interface SubFormBuilderProps<T = any> {
1467
+ /** MUI sx overrides */
1468
+ sx?: SxProps;
1469
+ /** Array of field configurations */
1470
+ fields?: FormBuilderFieldConfig[];
1471
+ /** react-hook-form methods */
1472
+ methods?: UseFormReturn<T>;
1473
+ /** Gap between fields in px. Default: 16 */
1474
+ gap?: number;
1475
+ /** Number of grid columns. Default: 1 */
1476
+ columns?: number;
1477
+ /** Field layout direction. Default: "vertical" */
1478
+ layout?: "vertical" | "horizontal";
1479
+ /** Label width for horizontal layout. Default: "30%" */
1480
+ labelWidth?: string;
1481
+ /** Show border-bottom between fields. Default: false */
1482
+ divider?: boolean;
1483
+ [key: string]: any;
1484
+ }
1485
+
1486
+ declare function FormBuilder<T = any>(props: FormBuilderProps<T>): React.ReactElement;
1487
+ declare function SubFormBuilder<T = any>(props: SubFormBuilderProps<T>): React.ReactElement;
1488
+
1489
+ export { BaseAlert, BaseButton, BaseCard, BaseCheckbox, BaseChip, BaseDatatable, BaseDatePicker, BaseDropdown, BaseDropzone, BaseModalAlert, BaseModalAlertDialog, BaseModalAlertProvider, BaseModalLoading, BaseModalLoadingDialog, BaseModalLoadingProvider, BaseModalOTP, BaseModalPopup, BaseModalStepper, BaseRadioButton, BaseSkeleton, BaseSnackbar, BaseStepper, BaseSwitch, BaseTextArea, BaseTextField, BaseTypography, CONTENT_SPACING_TOKENS, CapsLockOn, ContentSpacing, DatatablePagination, DerivedColor, DownloadIconLarge, FORM_TYPE, FormBuilder, IconBiometricScan, IconDocumentAdd, IconEdit, IconFile, IconGradingRounded, IconListDocument, IconMoney, IconProgress, IconReset, IconSave, IconSaveOutlined, IconSendWhite, IconSendWhiteFull, IconUpload, IconUserScan, IconVerification, MoneyIcon, PrimitiveColor, Radius, RadiusToken, ServerSidePaginationActions, Shadow, ShadowToken, Spacing, SpacingToken, SubFormBuilder, TextFieldUpload, UsersIcon, VariantStyles };