@idds/react 1.1.86

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 (134) hide show
  1. package/README.md +429 -0
  2. package/dist/index.cjs.js +20 -0
  3. package/dist/index.css +1 -0
  4. package/dist/index.es.js +9682 -0
  5. package/dist/index.umd.js +20 -0
  6. package/dist/types/App.d.ts +3 -0
  7. package/dist/types/App.d.ts.map +1 -0
  8. package/dist/types/components/Accordion.d.ts +48 -0
  9. package/dist/types/components/Accordion.d.ts.map +1 -0
  10. package/dist/types/components/AccordionCard.d.ts +22 -0
  11. package/dist/types/components/AccordionCard.d.ts.map +1 -0
  12. package/dist/types/components/AccordionGroup.d.ts +45 -0
  13. package/dist/types/components/AccordionGroup.d.ts.map +1 -0
  14. package/dist/types/components/ActionDropdown.d.ts +21 -0
  15. package/dist/types/components/ActionDropdown.d.ts.map +1 -0
  16. package/dist/types/components/Alert.d.ts +55 -0
  17. package/dist/types/components/Alert.d.ts.map +1 -0
  18. package/dist/types/components/Avatar.d.ts +33 -0
  19. package/dist/types/components/Avatar.d.ts.map +1 -0
  20. package/dist/types/components/Badge.d.ts +61 -0
  21. package/dist/types/components/Badge.d.ts.map +1 -0
  22. package/dist/types/components/BottomSheet.d.ts +9 -0
  23. package/dist/types/components/BottomSheet.d.ts.map +1 -0
  24. package/dist/types/components/Breadcrumb.d.ts +25 -0
  25. package/dist/types/components/Breadcrumb.d.ts.map +1 -0
  26. package/dist/types/components/Button.d.ts +68 -0
  27. package/dist/types/components/Button.d.ts.map +1 -0
  28. package/dist/types/components/ButtonGroup.d.ts +27 -0
  29. package/dist/types/components/ButtonGroup.d.ts.map +1 -0
  30. package/dist/types/components/Card.d.ts +94 -0
  31. package/dist/types/components/Card.d.ts.map +1 -0
  32. package/dist/types/components/Checkbox.d.ts +33 -0
  33. package/dist/types/components/Checkbox.d.ts.map +1 -0
  34. package/dist/types/components/Chip.d.ts +36 -0
  35. package/dist/types/components/Chip.d.ts.map +1 -0
  36. package/dist/types/components/Collapse.d.ts +16 -0
  37. package/dist/types/components/Collapse.d.ts.map +1 -0
  38. package/dist/types/components/DatePicker.d.ts +39 -0
  39. package/dist/types/components/DatePicker.d.ts.map +1 -0
  40. package/dist/types/components/Divider.d.ts +42 -0
  41. package/dist/types/components/Divider.d.ts.map +1 -0
  42. package/dist/types/components/Drawer.d.ts +35 -0
  43. package/dist/types/components/Drawer.d.ts.map +1 -0
  44. package/dist/types/components/Dropdown.d.ts +24 -0
  45. package/dist/types/components/Dropdown.d.ts.map +1 -0
  46. package/dist/types/components/FieldInputTable.d.ts +33 -0
  47. package/dist/types/components/FieldInputTable.d.ts.map +1 -0
  48. package/dist/types/components/FileUpload.d.ts +86 -0
  49. package/dist/types/components/FileUpload.d.ts.map +1 -0
  50. package/dist/types/components/InputSearch.d.ts +14 -0
  51. package/dist/types/components/InputSearch.d.ts.map +1 -0
  52. package/dist/types/components/LinearProgressIndicator.d.ts +16 -0
  53. package/dist/types/components/LinearProgressIndicator.d.ts.map +1 -0
  54. package/dist/types/components/List/List.d.ts +17 -0
  55. package/dist/types/components/List/List.d.ts.map +1 -0
  56. package/dist/types/components/List/ListItem.d.ts +19 -0
  57. package/dist/types/components/List/ListItem.d.ts.map +1 -0
  58. package/dist/types/components/List/ListItemAvatar.d.ts +15 -0
  59. package/dist/types/components/List/ListItemAvatar.d.ts.map +1 -0
  60. package/dist/types/components/List/ListItemButton.d.ts +12 -0
  61. package/dist/types/components/List/ListItemButton.d.ts.map +1 -0
  62. package/dist/types/components/List/ListItemIcon.d.ts +12 -0
  63. package/dist/types/components/List/ListItemIcon.d.ts.map +1 -0
  64. package/dist/types/components/List/ListItemText.d.ts +14 -0
  65. package/dist/types/components/List/ListItemText.d.ts.map +1 -0
  66. package/dist/types/components/List/ListSubheader.d.ts +16 -0
  67. package/dist/types/components/List/ListSubheader.d.ts.map +1 -0
  68. package/dist/types/components/Modal.d.ts +13 -0
  69. package/dist/types/components/Modal.d.ts.map +1 -0
  70. package/dist/types/components/MonthPicker.d.ts +39 -0
  71. package/dist/types/components/MonthPicker.d.ts.map +1 -0
  72. package/dist/types/components/MultipleChoiceGrid.d.ts +32 -0
  73. package/dist/types/components/MultipleChoiceGrid.d.ts.map +1 -0
  74. package/dist/types/components/Pagination.d.ts +58 -0
  75. package/dist/types/components/Pagination.d.ts.map +1 -0
  76. package/dist/types/components/PasswordInput.d.ts +75 -0
  77. package/dist/types/components/PasswordInput.d.ts.map +1 -0
  78. package/dist/types/components/PhoneInput.d.ts +19 -0
  79. package/dist/types/components/PhoneInput.d.ts.map +1 -0
  80. package/dist/types/components/ProgressBar.d.ts +32 -0
  81. package/dist/types/components/ProgressBar.d.ts.map +1 -0
  82. package/dist/types/components/RadioInput.d.ts +27 -0
  83. package/dist/types/components/RadioInput.d.ts.map +1 -0
  84. package/dist/types/components/SelectDropdown.d.ts +81 -0
  85. package/dist/types/components/SelectDropdown.d.ts.map +1 -0
  86. package/dist/types/components/Skeleton.d.ts +20 -0
  87. package/dist/types/components/Skeleton.d.ts.map +1 -0
  88. package/dist/types/components/Spinner.d.ts +22 -0
  89. package/dist/types/components/Spinner.d.ts.map +1 -0
  90. package/dist/types/components/Stepper.d.ts +25 -0
  91. package/dist/types/components/Stepper.d.ts.map +1 -0
  92. package/dist/types/components/TabHorizontal.d.ts +34 -0
  93. package/dist/types/components/TabHorizontal.d.ts.map +1 -0
  94. package/dist/types/components/TabVertical.d.ts +34 -0
  95. package/dist/types/components/TabVertical.d.ts.map +1 -0
  96. package/dist/types/components/Table.d.ts +69 -0
  97. package/dist/types/components/Table.d.ts.map +1 -0
  98. package/dist/types/components/TableProgressBar.d.ts +20 -0
  99. package/dist/types/components/TableProgressBar.d.ts.map +1 -0
  100. package/dist/types/components/TextArea.d.ts +57 -0
  101. package/dist/types/components/TextArea.d.ts.map +1 -0
  102. package/dist/types/components/TextField.d.ts +61 -0
  103. package/dist/types/components/TextField.d.ts.map +1 -0
  104. package/dist/types/components/ThemeToggle.d.ts +7 -0
  105. package/dist/types/components/ThemeToggle.d.ts.map +1 -0
  106. package/dist/types/components/TimePicker.d.ts +56 -0
  107. package/dist/types/components/TimePicker.d.ts.map +1 -0
  108. package/dist/types/components/Toast.d.ts +15 -0
  109. package/dist/types/components/Toast.d.ts.map +1 -0
  110. package/dist/types/components/Toggle.d.ts +26 -0
  111. package/dist/types/components/Toggle.d.ts.map +1 -0
  112. package/dist/types/components/Tooltip.d.ts +85 -0
  113. package/dist/types/components/Tooltip.d.ts.map +1 -0
  114. package/dist/types/components/YearPicker.d.ts +43 -0
  115. package/dist/types/components/YearPicker.d.ts.map +1 -0
  116. package/dist/types/index.d.ts +70 -0
  117. package/dist/types/index.d.ts.map +1 -0
  118. package/dist/types/main.d.ts +1 -0
  119. package/dist/types/main.d.ts.map +1 -0
  120. package/dist/types/themes/index.d.ts +41 -0
  121. package/dist/types/themes/index.d.ts.map +1 -0
  122. package/dist/types/utils/ConfirmationProvider.d.ts +16 -0
  123. package/dist/types/utils/ConfirmationProvider.d.ts.map +1 -0
  124. package/dist/types/utils/ToastProvider.d.ts +12 -0
  125. package/dist/types/utils/ToastProvider.d.ts.map +1 -0
  126. package/dist/types/utils/fileValidation.d.ts +57 -0
  127. package/dist/types/utils/fileValidation.d.ts.map +1 -0
  128. package/dist/types/utils/form.d.ts +21 -0
  129. package/dist/types/utils/form.d.ts.map +1 -0
  130. package/dist/types/utils/index.d.ts +11 -0
  131. package/dist/types/utils/index.d.ts.map +1 -0
  132. package/dist/types/utils/security.d.ts +61 -0
  133. package/dist/types/utils/security.d.ts.map +1 -0
  134. package/package.json +55 -0
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * PhoneInput component props.
4
+ *
5
+ * @param {(string | React.ReactNode)} [label] - The label displayed above the phone input field.
6
+ * @param {(string | number)} value - The current phone number value.
7
+ * @param {(val: string | number) => void} onChange - Callback fired when the phone number changes. Receives the new value.
8
+ * @param {string} placeholder - Placeholder text shown when the input is empty.
9
+ * @param {boolean} [required] - Whether the phone input is required.
10
+ */
11
+ export interface PhoneInputProps {
12
+ label?: string | React.ReactNode;
13
+ value: string | number;
14
+ onChange: (val: string | number) => void;
15
+ placeholder: string;
16
+ required?: boolean;
17
+ }
18
+ export default function PhoneInput({ label, value, onChange, placeholder, required, }: PhoneInputProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=PhoneInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhoneInput.d.ts","sourceRoot":"","sources":["../../../src/components/PhoneInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,yCAAyC,CAAC;AAEjD;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,KAAU,EACV,KAAK,EACL,QAAQ,EACR,WAAW,EACX,QAAgB,GACjB,EAAE,eAAe,2CA6CjB"}
@@ -0,0 +1,32 @@
1
+ export interface ProgressBarProps {
2
+ /**
3
+ * Whether the progress bar is visible
4
+ */
5
+ visible?: boolean;
6
+ /**
7
+ * Progress percentage (0-100)
8
+ */
9
+ progress?: number;
10
+ /**
11
+ * Animation duration in milliseconds
12
+ */
13
+ duration?: number;
14
+ /**
15
+ * Color variant
16
+ */
17
+ variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';
18
+ /**
19
+ * Height of the progress bar
20
+ */
21
+ height?: 'sm' | 'md' | 'lg';
22
+ /**
23
+ * Whether to show animated shimmer effect
24
+ */
25
+ shimmer?: boolean;
26
+ /**
27
+ * Custom className
28
+ */
29
+ className?: string;
30
+ }
31
+ export default function ProgressBar({ visible, progress, duration, variant, height, shimmer, className, }: ProgressBarProps): import("react/jsx-runtime").JSX.Element | null;
32
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/ProgressBar.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpE;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,OAAO,0CAA0C,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,OAAc,EACd,QAAY,EACZ,QAAe,EACf,OAAmB,EACnB,MAAa,EACb,OAAc,EACd,SAAc,GACf,EAAE,gBAAgB,kDA6ClB"}
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ export interface OptionItem {
3
+ value: string | number;
4
+ label: string;
5
+ }
6
+ /**
7
+ * RadioInput component props.
8
+ *
9
+ * @param {string} label - The label text displayed above the radio group.
10
+ * @param {(string | number | boolean)} value - The currently selected radio value.
11
+ * @param {OptionItem[]} options - An array of options to render, each with { value: string | number; label: string; }.
12
+ * @param {(val: string | number) => void} onChange - Callback fired when selection changes. Receives the newly selected value.
13
+ */
14
+ export interface RadioInputProps extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, 'onChange'> {
15
+ label: string;
16
+ value: string | number | boolean;
17
+ options: OptionItem[];
18
+ onChange: (val: string | number) => void;
19
+ disabled?: boolean;
20
+ size?: 'sm' | 'md' | 'lg';
21
+ orientation?: 'vertical' | 'horizontal';
22
+ required?: boolean;
23
+ error?: boolean;
24
+ helperText?: string;
25
+ }
26
+ export default function RadioInput({ label, value, options, onChange, disabled, size, orientation, required, error, helperText, className, ...rest }: RadioInputProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=RadioInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioInput.d.ts","sourceRoot":"","sources":["../../../src/components/RadioInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,yCAAyC,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AAEH,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,KAAK,EACL,KAAK,EACL,OAAY,EACZ,QAAQ,EACR,QAAgB,EAChB,IAAW,EACX,WAAwB,EACxB,QAAgB,EAChB,KAAa,EACb,UAAU,EACV,SAAc,EACd,GAAG,IAAI,EACR,EAAE,eAAe,2CAwDjB"}
@@ -0,0 +1,81 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * SelectDropdown: komponen dropdown yang menampilkan daftar opsi dengan kemampuan search, infinite scroll, dan preview selected value.
4
+ *
5
+ * Fitur utama:
6
+ * - Search dengan debounce untuk performa optimal
7
+ * - Load More button untuk pagination data besar
8
+ * - Preview selected value di dalam panel
9
+ * - Support single dan multiple selection
10
+ * - Customizable rendering
11
+ *
12
+ * Props penting:
13
+ * - width: lebar komponen (trigger + default popup). ex: 320 | '24rem' | '100%'
14
+ * - panelWidth: lebar khusus popup; fallback ke width jika kosong
15
+ * - panelHeight: tinggi maksimum popup (scroll otomatis). default: 600 (px)
16
+ * - hasMore: apakah masih ada data yang bisa di-load (load more button)
17
+ * - loading: apakah sedang loading data
18
+ * - currentPage: halaman saat ini
19
+ * - onLoadMore: callback untuk load data halaman berikutnya (triggered by button)
20
+ * - onSearch: callback untuk search dengan debounce
21
+ * - searchDebounceMs: delay untuk debounce search (ms). default: 300
22
+ * - renderSelectedPreview: custom render untuk preview selected value
23
+ * - onRemoveSelected: callback untuk remove/deselect item dari preview
24
+ * - searchValue: controlled search value (optional)
25
+ * - onSearchChange: callback untuk perubahan search value (controlled mode)
26
+ * - disabled: apakah komponen dalam mode readonly/disabled
27
+ */
28
+ export interface SelectOption {
29
+ label: string;
30
+ value: any;
31
+ }
32
+ export type SelectDropdownSize = 'sm' | 'md' | 'lg';
33
+ export interface SelectDropdownProps {
34
+ options: SelectOption[];
35
+ selected: any | any[];
36
+ onSelect: (selectedValue: any | any[], rawValue?: any) => void;
37
+ placeholder?: string;
38
+ size?: SelectDropdownSize;
39
+ triggerClassName?: string;
40
+ panelClassName?: string;
41
+ renderOptionLabel?: (option: SelectOption) => ReactNode | undefined;
42
+ indicator?: 'check' | 'radio';
43
+ multiple?: boolean;
44
+ className?: string;
45
+ onClose?: () => void;
46
+ prefixNode?: ReactNode;
47
+ /** Lebar komponen (container + default popup). Contoh: 320, '24rem', '100%' */
48
+ width?: number | string;
49
+ /** (Opsional) Lebar khusus popup; jika tak diisi, ikut `width`. */
50
+ panelWidth?: number | string;
51
+ /** 🆕 Tinggi maksimum popup; overflow akan scroll. Default: 600px */
52
+ panelHeight?: number | string;
53
+ /** 🆕 Infinite Scroll Props */
54
+ /** Apakah masih ada data yang bisa di-load (untuk infinite scroll) */
55
+ hasMore?: boolean;
56
+ /** Apakah sedang loading data (untuk infinite scroll) */
57
+ loading?: boolean;
58
+ /** Halaman saat ini (untuk infinite scroll) */
59
+ currentPage?: number;
60
+ /** Callback untuk load data halaman berikutnya */
61
+ onLoadMore?: (page: number) => void;
62
+ /** Callback untuk search dengan debounce */
63
+ onSearch?: (searchTerm: string) => void;
64
+ /** Delay untuk debounce search (ms). Default: 300 */
65
+ searchDebounceMs?: number;
66
+ /** Custom render untuk preview selected value */
67
+ renderSelectedPreview?: (selected: any | any[]) => ReactNode;
68
+ /** Callback untuk remove/deselect item dari preview */
69
+ onRemoveSelected?: (value: any) => void;
70
+ /** Controlled search value (optional) - jika tidak disediakan, akan menggunakan internal state */
71
+ searchValue?: string;
72
+ /** Callback untuk perubahan search value (optional) - untuk controlled mode */
73
+ onSearchChange?: (searchTerm: string) => void;
74
+ /** Apakah komponen dalam mode readonly/disabled */
75
+ disabled?: boolean;
76
+ /** Tampilkan preview selected value. Default: true */
77
+ showPreviewValue?: boolean;
78
+ }
79
+ export default function SelectDropdown({ options, selected, onSelect, placeholder, size, triggerClassName, panelClassName, renderOptionLabel, indicator, multiple, className, onClose, prefixNode, width, panelWidth, panelHeight, // default 600px
80
+ hasMore, loading, currentPage, onLoadMore, onSearch, searchDebounceMs, renderSelectedPreview, onRemoveSelected, searchValue, onSearchChange, disabled, showPreviewValue, }: SelectDropdownProps): import("react/jsx-runtime").JSX.Element;
81
+ //# sourceMappingURL=SelectDropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDropdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Skeleton component: placeholder loading indicator with left-to-right shimmer.
3
+ *
4
+ * @param {string} [className] - Tambahan CSS classes untuk override.
5
+ * @param {'gray'|'blue'|'green'|'red'|'yellow'} [color] - Base background color (default: 'gray').
6
+ * @param {string} [width] - CSS width value (optional).
7
+ * @param {string} [height] - CSS height value (default: '32px').
8
+ * @param {'none'|'xs'|'sm'|'md'|'lg'|'full'} [rounded]
9
+ * - Border radius size (default: 'md').
10
+ */
11
+ export interface SkeletonProps {
12
+ className?: string;
13
+ color?: 'gray' | 'blue' | 'green' | 'red' | 'yellow';
14
+ width?: string;
15
+ height?: string;
16
+ rounded?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'full';
17
+ }
18
+ export default function Skeleton({ className, color, width, // now optional
19
+ height, rounded, }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=Skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAIA,OAAO,sCAAsC,CAAC;AAmB9C;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;CACvD;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,SAAc,EACd,KAAc,EACd,KAAK,EAAE,eAAe;AACtB,MAAe,EACf,OAAc,GACf,EAAE,aAAa,2CAuBf"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Spinner component for search input with debounce.
3
+ *
4
+ * @param {number} [size] - The diameter of the spinner.
5
+ * @param {'thin'|'medium'|'thick'|'heavy'} [borderWidth] - The width of the spinner border.
6
+ * @param {'gray'|'light'|'dark'} [trackColor] - The track color of the spinner.
7
+ * @param {'primary'|'secondary'|'success'|'error'|'warning'|'info'|'inherit'} [color] - The color of the spinner.
8
+ * @param {string} [title] - The title below spinner.
9
+ * @param {string} [subtitle] - The subtitle below the title.
10
+ * @param {boolean} [spinnerOnly] - Set this prop true if you want to show spinner only.
11
+ */
12
+ export interface SpinnerProps {
13
+ size?: number;
14
+ borderWidth?: 'thin' | 'medium' | 'thick' | 'heavy';
15
+ trackColor?: 'gray' | 'light' | 'dark';
16
+ color?: 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'inherit';
17
+ title?: string;
18
+ subtitle?: string;
19
+ spinnerOnly?: boolean;
20
+ }
21
+ export default function Spinner({ size, borderWidth, trackColor, color, title, subtitle, spinnerOnly, }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/components/Spinner.tsx"],"names":[],"mappings":"AAEA,OAAO,qCAAqC,CAAC;AAC7C;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,KAAK,CAAC,EACF,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAS,EACT,WAAsB,EACtB,UAAmB,EACnB,KAAiB,EACjB,KAA2B,EAC3B,QAAiD,EACjD,WAAmB,GACpB,EAAE,YAAY,2CAqCd"}
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ export interface StepperItem {
3
+ /** Label text untuk step */
4
+ label: string;
5
+ /** Icon component untuk step (opsional, jika tidak ada akan menampilkan nomor step) */
6
+ icon?: ReactNode;
7
+ /** Content tambahan untuk step (digunakan pada vertical stepper) */
8
+ content?: ReactNode;
9
+ /** Apakah step disabled */
10
+ disabled?: boolean;
11
+ }
12
+ export interface StepperProps {
13
+ /** Array of step items */
14
+ steps: StepperItem[];
15
+ /** Index step yang sedang aktif (0-indexed) */
16
+ currentStep: number;
17
+ /** Orientasi stepper: horizontal atau vertical */
18
+ orientation?: 'horizontal' | 'vertical';
19
+ /** ClassName tambahan untuk container */
20
+ className?: string;
21
+ /** Callback saat step diklik */
22
+ onStepClick?: (stepIndex: number) => void;
23
+ }
24
+ export default function Stepper({ steps, currentStep, orientation, className, onStepClick, }: StepperProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=Stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.ts","sourceRoot":"","sources":["../../../src/components/Stepper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAE5C,OAAO,qCAAqC,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,WAA0B,EAC1B,SAAS,EACT,WAAW,GACZ,EAAE,YAAY,2CAsEd"}
@@ -0,0 +1,34 @@
1
+ import { default as React } from 'react';
2
+ export interface TabHorizontalItem {
3
+ value: string;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface TabHorizontalProps {
8
+ /** Array of tab items */
9
+ items: TabHorizontalItem[];
10
+ /** Currently selected tab value */
11
+ value?: string;
12
+ /** Default selected tab value */
13
+ defaultValue?: string;
14
+ /** Callback when tab changes */
15
+ onChange?: (value: string) => void;
16
+ /** Size variant */
17
+ size?: 'sm' | 'md';
18
+ /** Visual variant of the tabs */
19
+ variant?: 'button-brand' | 'outline' | 'button-white';
20
+ /** Whether tabs should fill full width */
21
+ fullWidth?: boolean;
22
+ /** Whether to use brand primary color for outline and button-white variants */
23
+ useBrandColor?: boolean;
24
+ /** Whether tabs are disabled */
25
+ disabled?: boolean;
26
+ /** Custom class name */
27
+ className?: string;
28
+ /** Custom class name for tab container */
29
+ containerClassName?: string;
30
+ /** Custom class name for individual tabs */
31
+ tabClassName?: string;
32
+ }
33
+ export default function TabHorizontal({ items, value, defaultValue, onChange, size, variant, fullWidth, useBrandColor, disabled, className, containerClassName, tabClassName, }: TabHorizontalProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=TabHorizontal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabHorizontal.d.ts","sourceRoot":"","sources":["../../../src/components/TabHorizontal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,4CAA4C,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,mBAAmB;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;IACtD,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,IAAW,EACX,OAAmB,EACnB,SAAiB,EACjB,aAAqB,EACrB,QAAgB,EAChB,SAAc,EACd,kBAAuB,EACvB,YAAiB,GAClB,EAAE,kBAAkB,2CA2EpB"}
@@ -0,0 +1,34 @@
1
+ import { default as React } from 'react';
2
+ export interface TabVerticalItem {
3
+ value: string;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface TabVerticalProps {
8
+ /** Array of tab items */
9
+ items: TabVerticalItem[];
10
+ /** Currently selected tab value */
11
+ value?: string;
12
+ /** Default selected tab value */
13
+ defaultValue?: string;
14
+ /** Callback when tab changes */
15
+ onChange?: (value: string) => void;
16
+ /** Size variant */
17
+ size?: 'sm' | 'md';
18
+ /** Visual variant of the tabs */
19
+ variant?: 'button-brand' | 'outline' | 'button-white';
20
+ /** Whether to use brand primary color for outline and button-white variants */
21
+ useBrandColor?: boolean;
22
+ /** Whether tabs are disabled */
23
+ disabled?: boolean;
24
+ /** Custom class name */
25
+ className?: string;
26
+ /** Custom class name for tab container */
27
+ containerClassName?: string;
28
+ /** Custom class name for individual tabs */
29
+ tabClassName?: string;
30
+ /** Width of the vertical tab container */
31
+ width?: string | number;
32
+ }
33
+ export default function TabVertical({ items, value, defaultValue, onChange, size, variant, useBrandColor, disabled, className, containerClassName, tabClassName, width, }: TabVerticalProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=TabVertical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabVertical.d.ts","sourceRoot":"","sources":["../../../src/components/TabVertical.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,0CAA0C,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,mBAAmB;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;IACtD,+EAA+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,IAAW,EACX,OAAmB,EACnB,aAAqB,EACrB,QAAgB,EAChB,SAAc,EACd,kBAAuB,EACvB,YAAiB,EACjB,KAAe,GAChB,EAAE,gBAAgB,2CA4ElB"}
@@ -0,0 +1,69 @@
1
+ import { ReactNode } from 'react';
2
+ export interface Column {
3
+ header: string;
4
+ accessor: string;
5
+ sortable?: boolean;
6
+ render?: (row: any) => ReactNode;
7
+ }
8
+ export interface FetchParams {
9
+ page: number;
10
+ pageSize: number;
11
+ sortField: string | null;
12
+ sortOrder: 'asc' | 'desc' | null;
13
+ searchTerm: string;
14
+ }
15
+ export interface FetchResult {
16
+ data: any[];
17
+ total: number;
18
+ }
19
+ export interface EditorProps {
20
+ row: any;
21
+ value: any;
22
+ onChange: (val: any) => void;
23
+ onCommit: () => void;
24
+ onCancel: () => void;
25
+ }
26
+ export interface EditableColumn {
27
+ accessor: string;
28
+ editor: (props: EditorProps) => ReactNode;
29
+ }
30
+ export interface TableProps {
31
+ columns: Column[];
32
+ fetchData: (params: FetchParams) => Promise<FetchResult>;
33
+ initialPageSize?: number;
34
+ pageSizeOptions?: number[];
35
+ initialSortField?: string | null;
36
+ initialSortOrder?: 'asc' | 'desc' | null;
37
+ placeholderSearch?: string;
38
+ searchPlaceholder?: string;
39
+ buttonSearchLabel?: string;
40
+ className?: string;
41
+ /** jika true, tambahkan kolom checkbox di paling kiri */
42
+ selectable?: boolean;
43
+ /** callback dipanggil saat user pilih beberapa row */
44
+ onSelectionChange?: (selectedRows: any[]) => void;
45
+ /** konfigurasi kolom yang bisa diedit */
46
+ editableColumns?: EditableColumn[];
47
+ /** callback dipanggil saat user commit perubahan 1 row */
48
+ onRowUpdate?: (updatedRow: any) => void;
49
+ /** nama properti unik sebagai key row (default: "id") */
50
+ rowKey?: string;
51
+ showSearch?: boolean;
52
+ /** apakah row bisa diklik */
53
+ rowClickable?: boolean;
54
+ /** callback dipanggil saat user klik row (tidak dipanggil jika ada button action di cell) */
55
+ onRowClick?: (row: any) => void;
56
+ /** apakah kolom terakhir (biasanya Actions) sticky saat scroll horizontal */
57
+ lastColumnSticky?: boolean;
58
+ /** Custom render function untuk sort indicator wrapper */
59
+ renderSortIndicator?: (params: {
60
+ column: Column;
61
+ index: number;
62
+ isSorted: boolean;
63
+ sortOrder: 'asc' | 'desc' | null;
64
+ handleSort: (order: 'asc' | 'desc') => void;
65
+ }) => ReactNode;
66
+ }
67
+ export default function Table({ columns, fetchData, initialPageSize, pageSizeOptions, initialSortField, initialSortOrder, placeholderSearch, // Deprecated: use searchPlaceholder instead
68
+ searchPlaceholder, buttonSearchLabel, className, selectable, onSelectionChange, editableColumns, onRowUpdate, rowKey, showSearch, rowClickable, onRowClick, lastColumnSticky, renderSortIndicator, }: TableProps): import("react/jsx-runtime").JSX.Element;
69
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../src/components/Table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface TableProgressBarProps {
2
+ /**
3
+ * Whether the progress bar is visible
4
+ */
5
+ visible?: boolean;
6
+ /**
7
+ * Whether to show loading state
8
+ */
9
+ loading?: boolean;
10
+ /**
11
+ * Color variant
12
+ */
13
+ variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';
14
+ /**
15
+ * Custom className
16
+ */
17
+ className?: string;
18
+ }
19
+ export default function TableProgressBar({ visible, loading, variant, className, }: TableProgressBarProps): import("react/jsx-runtime").JSX.Element | null;
20
+ //# sourceMappingURL=TableProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/TableProgressBar.tsx"],"names":[],"mappings":"AAGA,OAAO,gDAAgD,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACpE;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,OAAc,EACd,OAAe,EACf,OAAmB,EACnB,SAAc,GACf,EAAE,qBAAqB,kDAmDvB"}
@@ -0,0 +1,57 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ import { SecurityConfig } from '../utils/security';
3
+ export type TextAreaStatus = 'neutral' | 'error' | 'warning' | 'success';
4
+ /**
5
+ * TextArea — textarea autosize serupa TextField, dengan:
6
+ * - controlled value + optional debounce
7
+ * - prefix/suffix icons
8
+ * - status indicator (error/warning/success)
9
+ * - helper text / status message
10
+ * - character count
11
+ * - clear button
12
+ * - autosize antara `minRows` hingga `maxRows`
13
+ *
14
+ * @param {string} value Controlled value.
15
+ * @param {(val: string) => void} onChange Callback on change.
16
+ * @param {number} [debounce=0] Debounce ms untuk onChangeDebounced.
17
+ * @param {(val: string) => void} [onChangeDebounced]
18
+ * Callback setelah debounce.
19
+ * @param {ReactNode} [prefixIcon] Icon sebelum textarea.
20
+ * @param {ReactNode} [suffixIcon] Icon setelah tombol clear.
21
+ * @param {ReactNode} [label] Label di atas textarea.
22
+ * @param {ReactNode} [helperText] Teks bantuan di bawah.
23
+ * @param {'neutral'|'error'|'warning'|'success'} [status='neutral']
24
+ * Status visual.
25
+ * @param {ReactNode} [statusMessage] Pesan sesuai status.
26
+ * @param {number} [maxLength] Maks karakter.
27
+ * @param {boolean} [showCharCount=false] Tampilkan counter.
28
+ * @param {boolean} [showClearButton=true] Tampilkan tombol clear.
29
+ * @param {number} [minRows=3] Baris minimal.
30
+ * @param {number} [maxRows] Baris maksimal untuk autosize.
31
+ * @param {string} [placeholder] Placeholder.
32
+ * @param {boolean} [disabled=false] Disabled state.
33
+ * @param {string} [className] Class tambahan wrapper.
34
+ */
35
+ export interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'> {
36
+ value: string;
37
+ onChange: (val: string) => void;
38
+ debounce?: number;
39
+ onChangeDebounced?: (val: string) => void;
40
+ prefixIcon?: ReactNode;
41
+ suffixIcon?: ReactNode;
42
+ label?: ReactNode;
43
+ helperText?: ReactNode;
44
+ status?: TextAreaStatus;
45
+ statusMessage?: ReactNode;
46
+ maxLength?: number;
47
+ showCharCount?: boolean;
48
+ showClearButton?: boolean;
49
+ minRows?: number;
50
+ maxRows?: number;
51
+ placeholder?: string;
52
+ disabled?: boolean;
53
+ className?: string;
54
+ securityConfig?: SecurityConfig;
55
+ }
56
+ export default function TextArea({ value, onChange, debounce, onChangeDebounced, prefixIcon, suffixIcon, label, helperText, status, statusMessage, maxLength, showCharCount, showClearButton, minRows, maxRows, placeholder, disabled, className, securityConfig, onBlur, ...rest }: TextAreaProps): import("react/jsx-runtime").JSX.Element;
57
+ //# sourceMappingURL=TextArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../src/components/TextArea.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAIZ,SAAS,EAGV,MAAM,OAAO,CAAC;AAIf,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,uCAAuC,CAAC;AAE/C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,QAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,KAAK,EACL,UAAU,EACV,MAAkB,EAClB,aAAa,EACb,SAAS,EACT,aAAqB,EACrB,eAAsB,EACtB,OAAW,EACX,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,SAAc,EACd,cAAwC,EACxC,MAAM,EACN,GAAG,IAAI,EACR,EAAE,aAAa,2CAoKf"}
@@ -0,0 +1,61 @@
1
+ import { default as React, ReactNode, ChangeEvent } from 'react';
2
+ import { SecurityConfig } from '../utils/security';
3
+ export type TextFieldStatus = 'neutral' | 'error' | 'warning' | 'success';
4
+ export type TextFieldSize = 'sm' | 'md' | 'lg';
5
+ /**
6
+ * TextField — input standar dengan:
7
+ * - Controlled value + optional debounce
8
+ * - Prefix & suffix icons
9
+ * - Status indicator (error/warning/success)
10
+ * - Helper text / status message
11
+ * - Character count
12
+ * - Clear button (IconX) dengan custom callback
13
+ *
14
+ * @param {string} value Nilai controlled input.
15
+ * @param {(val: string) => void} onChange Callback saat input berubah.
16
+ * @param {number} [debounce=0] Debounce ms untuk onChangeDebounced.
17
+ * @param {(val: string) => void} [onChangeDebounced]
18
+ * Callback setelah debounce ms.
19
+ * @param {ReactNode} [prefixIcon] Icon prefix sebelum input.
20
+ * @param {ReactNode} [suffixIcon] Icon suffix setelah clear button.
21
+ * @param {ReactNode} [label] Label di atas input.
22
+ * @param {ReactNode} [helperText] Teks bantuan di bawah input.
23
+ * @param {'neutral'|'error'|'warning'|'success'} [status='neutral']
24
+ * Status visual input.
25
+ * @param {ReactNode} [statusMessage] Pesan sesuai status (override helperText).
26
+ * @param {number} [maxLength] Maks karakter.
27
+ * @param {boolean} [showCharCount=false] Tampilkan penghitung karakter.
28
+ * @param {boolean} [showClearButton=true] Tampilkan tombol clear (IconX) jika ada teks.
29
+ * @param {() => void} [onClear] Callback saat tombol clear diklik.
30
+ * Berguna untuk reset API data, stop loading,
31
+ * analytics tracking, dll.
32
+ * @param {string} [placeholder] Placeholder input.
33
+ * @param {boolean} [disabled=false] Disable state.
34
+ * @param {string} [className] Class tambahan pada wrapper.
35
+ */
36
+ export interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'size'> {
37
+ value: string;
38
+ onChange: (val: string) => void;
39
+ /** Callback yang memberikan akses ke event object lengkap, sama seperti emit('input', event) di Vue */
40
+ onInput?: (event: ChangeEvent<HTMLInputElement>) => void;
41
+ debounce?: number;
42
+ onChangeDebounced?: (val: string) => void;
43
+ prefixIcon?: ReactNode;
44
+ suffixIcon?: ReactNode;
45
+ label?: ReactNode;
46
+ helperText?: ReactNode;
47
+ status?: TextFieldStatus;
48
+ statusMessage?: ReactNode;
49
+ size?: TextFieldSize;
50
+ maxLength?: number;
51
+ showCharCount?: boolean;
52
+ showClearButton?: boolean;
53
+ onClear?: () => void;
54
+ placeholder?: string;
55
+ disabled?: boolean;
56
+ className?: string;
57
+ securityConfig?: SecurityConfig;
58
+ }
59
+ declare function TextField({ value, onChange, onInput, debounce, onChangeDebounced, prefixIcon, suffixIcon, label, helperText, status, statusMessage, size, maxLength, showCharCount, showClearButton, onClear, placeholder, disabled, className, securityConfig, onBlur, ...rest }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
60
+ export default TextField;
61
+ //# sourceMappingURL=TextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/components/TextField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAIZ,SAAS,EAET,WAAW,EACZ,MAAM,OAAO,CAAC;AAIf,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,wCAAwC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,cACf,SAAQ,IAAI,CACV,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAC3C,UAAU,GAAG,MAAM,CACpB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,uGAAuG;IACvG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAEzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE1C,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,iBAAS,SAAS,CAAC,EACjB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,KAAK,EACL,UAAU,EACV,MAAkB,EAClB,aAAa,EACb,IAAW,EACX,SAAS,EACT,aAAqB,EACrB,eAAsB,EACtB,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,SAAc,EACd,cAAwC,EACxC,MAAM,EACN,GAAG,IAAI,EACR,EAAE,cAAc,2CAiKhB;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ThemeToggleProps {
2
+ className?: string;
3
+ size?: 'sm' | 'md' | 'lg';
4
+ showLabel?: boolean;
5
+ }
6
+ export default function ThemeToggle({ className, size, showLabel, }: ThemeToggleProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ThemeToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../../src/components/ThemeToggle.tsx"],"names":[],"mappings":"AAGA,OAAO,0CAA0C,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,SAAc,EACd,IAAW,EACX,SAAiB,GAClB,EAAE,gBAAgB,2CAmElB"}