@bricks-toolkit/toolkit 0.1.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.
Files changed (188) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +214 -0
  3. package/dist/components/Accordion/Accordion.d.ts +5 -0
  4. package/dist/components/Accordion/Accordion.types.d.ts +32 -0
  5. package/dist/components/Accordion/index.d.ts +2 -0
  6. package/dist/components/Avatar/Avatar.d.ts +2 -0
  7. package/dist/components/Avatar/Avatar.stories.d.ts +11 -0
  8. package/dist/components/Avatar/Avatar.test.d.ts +1 -0
  9. package/dist/components/Avatar/Avatar.types.d.ts +24 -0
  10. package/dist/components/Avatar/index.d.ts +2 -0
  11. package/dist/components/Badge/Badge.d.ts +11 -0
  12. package/dist/components/Badge/Badge.stories.d.ts +21 -0
  13. package/dist/components/Badge/Badge.test.d.ts +1 -0
  14. package/dist/components/Badge/Badge.types.d.ts +43 -0
  15. package/dist/components/Badge/index.d.ts +2 -0
  16. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +2 -0
  17. package/dist/components/Breadcrumbs/Breadcrumbs.stories.d.ts +13 -0
  18. package/dist/components/Breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  19. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +27 -0
  20. package/dist/components/Breadcrumbs/index.d.ts +2 -0
  21. package/dist/components/Button/Button.d.ts +2 -0
  22. package/dist/components/Button/Button.stories.d.ts +20 -0
  23. package/dist/components/Button/Button.test.d.ts +1 -0
  24. package/dist/components/Button/Button.types.d.ts +24 -0
  25. package/dist/components/Button/index.d.ts +2 -0
  26. package/dist/components/Card/Card.d.ts +25 -0
  27. package/dist/components/Card/Card.stories.d.ts +8 -0
  28. package/dist/components/Card/Card.test.d.ts +1 -0
  29. package/dist/components/Card/Card.types.d.ts +14 -0
  30. package/dist/components/Card/index.d.ts +2 -0
  31. package/dist/components/Checkbox/Checkbox.d.ts +2 -0
  32. package/dist/components/Checkbox/Checkbox.stories.d.ts +16 -0
  33. package/dist/components/Checkbox/Checkbox.test.d.ts +1 -0
  34. package/dist/components/Checkbox/Checkbox.types.d.ts +31 -0
  35. package/dist/components/Checkbox/index.d.ts +2 -0
  36. package/dist/components/ComboBox/ComboBox.d.ts +2 -0
  37. package/dist/components/ComboBox/ComboBox.stories.d.ts +12 -0
  38. package/dist/components/ComboBox/ComboBox.test.d.ts +1 -0
  39. package/dist/components/ComboBox/ComboBox.types.d.ts +57 -0
  40. package/dist/components/ComboBox/index.d.ts +2 -0
  41. package/dist/components/DatePicker/DatePicker.d.ts +2 -0
  42. package/dist/components/DatePicker/DatePicker.stories.d.ts +25 -0
  43. package/dist/components/DatePicker/DatePicker.test.d.ts +1 -0
  44. package/dist/components/DatePicker/DatePicker.types.d.ts +27 -0
  45. package/dist/components/DatePicker/index.d.ts +2 -0
  46. package/dist/components/Dialog/Dialog.d.ts +6 -0
  47. package/dist/components/Dialog/Dialog.stories.d.ts +9 -0
  48. package/dist/components/Dialog/Dialog.test.d.ts +1 -0
  49. package/dist/components/Dialog/Dialog.types.d.ts +52 -0
  50. package/dist/components/Dialog/index.d.ts +2 -0
  51. package/dist/components/DropdownMenu/DropdownMenu.d.ts +7 -0
  52. package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts +9 -0
  53. package/dist/components/DropdownMenu/DropdownMenu.test.d.ts +1 -0
  54. package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +24 -0
  55. package/dist/components/DropdownMenu/index.d.ts +2 -0
  56. package/dist/components/Email/Email.d.ts +2 -0
  57. package/dist/components/Email/Email.stories.d.ts +11 -0
  58. package/dist/components/Email/Email.test.d.ts +1 -0
  59. package/dist/components/Email/Email.types.d.ts +33 -0
  60. package/dist/components/Email/index.d.ts +2 -0
  61. package/dist/components/FileUpload/FileUpload.d.ts +2 -0
  62. package/dist/components/FileUpload/FileUpload.stories.d.ts +10 -0
  63. package/dist/components/FileUpload/FileUpload.test.d.ts +1 -0
  64. package/dist/components/FileUpload/FileUpload.types.d.ts +22 -0
  65. package/dist/components/FileUpload/index.d.ts +2 -0
  66. package/dist/components/Header/Header.d.ts +7 -0
  67. package/dist/components/Header/Header.stories.d.ts +8 -0
  68. package/dist/components/Header/Header.test.d.ts +1 -0
  69. package/dist/components/Header/Header.types.d.ts +19 -0
  70. package/dist/components/Header/index.d.ts +2 -0
  71. package/dist/components/IconButton/IconButton.d.ts +2 -0
  72. package/dist/components/IconButton/IconButton.stories.d.ts +17 -0
  73. package/dist/components/IconButton/IconButton.types.d.ts +10 -0
  74. package/dist/components/IconButton/index.d.ts +2 -0
  75. package/dist/components/Image/Image.d.ts +6 -0
  76. package/dist/components/Image/Image.stories.d.ts +13 -0
  77. package/dist/components/Image/Image.test.d.ts +1 -0
  78. package/dist/components/Image/Image.types.d.ts +40 -0
  79. package/dist/components/Image/index.d.ts +2 -0
  80. package/dist/components/Link/Link.d.ts +2 -0
  81. package/dist/components/Link/Link.stories.d.ts +15 -0
  82. package/dist/components/Link/Link.test.d.ts +1 -0
  83. package/dist/components/Link/Link.types.d.ts +20 -0
  84. package/dist/components/Link/index.d.ts +2 -0
  85. package/dist/components/Loader/Loader.d.ts +2 -0
  86. package/dist/components/Loader/Loader.stories.d.ts +12 -0
  87. package/dist/components/Loader/Loader.test.d.ts +1 -0
  88. package/dist/components/Loader/Loader.types.d.ts +17 -0
  89. package/dist/components/Loader/index.d.ts +2 -0
  90. package/dist/components/Modal/Modal.d.ts +14 -0
  91. package/dist/components/Modal/Modal.stories.d.ts +14 -0
  92. package/dist/components/Modal/Modal.test.d.ts +1 -0
  93. package/dist/components/Modal/Modal.types.d.ts +100 -0
  94. package/dist/components/Modal/index.d.ts +2 -0
  95. package/dist/components/MultiSelect/MultiSelect.d.ts +2 -0
  96. package/dist/components/MultiSelect/MultiSelect.stories.d.ts +15 -0
  97. package/dist/components/MultiSelect/MultiSelect.test.d.ts +1 -0
  98. package/dist/components/MultiSelect/MultiSelect.types.d.ts +55 -0
  99. package/dist/components/MultiSelect/index.d.ts +2 -0
  100. package/dist/components/OtpInput/OtpInput.d.ts +2 -0
  101. package/dist/components/OtpInput/OtpInput.stories.d.ts +10 -0
  102. package/dist/components/OtpInput/OtpInput.test.d.ts +1 -0
  103. package/dist/components/OtpInput/OtpInput.types.d.ts +53 -0
  104. package/dist/components/OtpInput/index.d.ts +2 -0
  105. package/dist/components/PasswordInput/PasswordInput.d.ts +2 -0
  106. package/dist/components/PasswordInput/PasswordInput.stories.d.ts +23 -0
  107. package/dist/components/PasswordInput/PasswordInput.test.d.ts +1 -0
  108. package/dist/components/PasswordInput/PasswordInput.types.d.ts +27 -0
  109. package/dist/components/PasswordInput/index.d.ts +2 -0
  110. package/dist/components/Phone/Phone.d.ts +2 -0
  111. package/dist/components/Phone/Phone.stories.d.ts +11 -0
  112. package/dist/components/Phone/Phone.test.d.ts +1 -0
  113. package/dist/components/Phone/Phone.types.d.ts +36 -0
  114. package/dist/components/Phone/countries.d.ts +8 -0
  115. package/dist/components/Phone/index.d.ts +2 -0
  116. package/dist/components/RadioButton/RadioButton.d.ts +2 -0
  117. package/dist/components/RadioButton/RadioButton.stories.d.ts +21 -0
  118. package/dist/components/RadioButton/RadioButton.test.d.ts +1 -0
  119. package/dist/components/RadioButton/RadioButton.types.d.ts +51 -0
  120. package/dist/components/RadioButton/index.d.ts +2 -0
  121. package/dist/components/SearchInput/SearchInput.d.ts +6 -0
  122. package/dist/components/SearchInput/SearchInput.stories.d.ts +8 -0
  123. package/dist/components/SearchInput/SearchInput.test.d.ts +1 -0
  124. package/dist/components/SearchInput/SearchInput.types.d.ts +12 -0
  125. package/dist/components/SearchInput/index.d.ts +2 -0
  126. package/dist/components/Select/Select.d.ts +2 -0
  127. package/dist/components/Select/Select.stories.d.ts +12 -0
  128. package/dist/components/Select/Select.test.d.ts +1 -0
  129. package/dist/components/Select/Select.types.d.ts +31 -0
  130. package/dist/components/Select/index.d.ts +2 -0
  131. package/dist/components/Sidebar/Sidebar.d.ts +7 -0
  132. package/dist/components/Sidebar/Sidebar.stories.d.ts +10 -0
  133. package/dist/components/Sidebar/Sidebar.test.d.ts +1 -0
  134. package/dist/components/Sidebar/Sidebar.types.d.ts +87 -0
  135. package/dist/components/Sidebar/index.d.ts +2 -0
  136. package/dist/components/Skeleton/Skeleton.d.ts +26 -0
  137. package/dist/components/Skeleton/Skeleton.stories.d.ts +13 -0
  138. package/dist/components/Skeleton/Skeleton.types.d.ts +47 -0
  139. package/dist/components/Skeleton/index.d.ts +2 -0
  140. package/dist/components/Stepper/Stepper.d.ts +2 -0
  141. package/dist/components/Stepper/Stepper.stories.d.ts +23 -0
  142. package/dist/components/Stepper/Stepper.test.d.ts +1 -0
  143. package/dist/components/Stepper/Stepper.types.d.ts +47 -0
  144. package/dist/components/Stepper/index.d.ts +2 -0
  145. package/dist/components/Table/Pagination.d.ts +3 -0
  146. package/dist/components/Table/Table.d.ts +3 -0
  147. package/dist/components/Table/Table.stories.d.ts +13 -0
  148. package/dist/components/Table/Table.test.d.ts +1 -0
  149. package/dist/components/Table/Table.types.d.ts +85 -0
  150. package/dist/components/Table/index.d.ts +3 -0
  151. package/dist/components/Tabs/Tabs.d.ts +2 -0
  152. package/dist/components/Tabs/Tabs.stories.d.ts +17 -0
  153. package/dist/components/Tabs/Tabs.test.d.ts +1 -0
  154. package/dist/components/Tabs/Tabs.types.d.ts +21 -0
  155. package/dist/components/Tabs/index.d.ts +2 -0
  156. package/dist/components/TextInput/TextInput.d.ts +2 -0
  157. package/dist/components/TextInput/TextInput.stories.d.ts +25 -0
  158. package/dist/components/TextInput/TextInput.test.d.ts +1 -0
  159. package/dist/components/TextInput/TextInput.types.d.ts +29 -0
  160. package/dist/components/TextInput/index.d.ts +2 -0
  161. package/dist/components/ThemeProvider/ThemeProvider.d.ts +8 -0
  162. package/dist/components/ThemeProvider/ThemeProvider.stories.d.ts +16 -0
  163. package/dist/components/ThemeProvider/ThemeProvider.test.d.ts +1 -0
  164. package/dist/components/ThemeProvider/ThemeProvider.types.d.ts +112 -0
  165. package/dist/components/ThemeProvider/index.d.ts +2 -0
  166. package/dist/components/TimePicker/TimePicker.d.ts +2 -0
  167. package/dist/components/TimePicker/TimePicker.stories.d.ts +23 -0
  168. package/dist/components/TimePicker/TimePicker.test.d.ts +1 -0
  169. package/dist/components/TimePicker/TimePicker.types.d.ts +27 -0
  170. package/dist/components/TimePicker/index.d.ts +2 -0
  171. package/dist/components/Toaster/Toaster.d.ts +2 -0
  172. package/dist/components/Toaster/Toaster.stories.d.ts +13 -0
  173. package/dist/components/Toaster/Toaster.test.d.ts +1 -0
  174. package/dist/components/Toaster/Toaster.types.d.ts +23 -0
  175. package/dist/components/Toaster/index.d.ts +2 -0
  176. package/dist/components/Toggle/Toggle.d.ts +2 -0
  177. package/dist/components/Toggle/Toggle.stories.d.ts +11 -0
  178. package/dist/components/Toggle/Toggle.types.d.ts +10 -0
  179. package/dist/components/Toggle/index.d.ts +2 -0
  180. package/dist/components/Tooltip/Tooltip.d.ts +2 -0
  181. package/dist/components/Tooltip/Tooltip.stories.d.ts +13 -0
  182. package/dist/components/Tooltip/Tooltip.test.d.ts +1 -0
  183. package/dist/components/Tooltip/Tooltip.types.d.ts +33 -0
  184. package/dist/components/Tooltip/index.d.ts +2 -0
  185. package/dist/index.d.ts +75 -0
  186. package/dist/utils/cn.d.ts +2 -0
  187. package/dist/utils/index.d.ts +1 -0
  188. package/package.json +481 -0
@@ -0,0 +1,2 @@
1
+ export * from './Loader';
2
+ export * from './Loader.types';
@@ -0,0 +1,14 @@
1
+ import type { ModalProps, ModalHeaderProps, ModalBodyProps, ModalFooterProps, ModalCloseButtonProps } from './Modal.types';
2
+ interface ModalComponent {
3
+ (props: ModalProps): React.ReactPortal | null;
4
+ Header: typeof ModalHeader;
5
+ Body: typeof ModalBody;
6
+ Footer: typeof ModalFooter;
7
+ CloseButton: typeof ModalCloseButton;
8
+ }
9
+ export declare const Modal: ModalComponent;
10
+ export declare function ModalHeader({ children, className, icon, description, }: ModalHeaderProps): React.JSX.Element;
11
+ export declare function ModalBody({ children, className, noPadding, }: ModalBodyProps): React.JSX.Element;
12
+ export declare function ModalFooter({ children, className, align, }: ModalFooterProps): React.JSX.Element;
13
+ export declare function ModalCloseButton({ onClick, className }: ModalCloseButtonProps): React.JSX.Element;
14
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Modal } from './Modal';
3
+ declare const meta: Meta<typeof Modal>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const ConfirmDelete: Story;
8
+ export declare const GlassVariant: Story;
9
+ export declare const BottomSheet: Story;
10
+ export declare const LeftSideSheet: Story;
11
+ export declare const RightSideSheet: Story;
12
+ export declare const Sizes: Story;
13
+ export declare const FullScreen: Story;
14
+ export declare const FullBleedContent: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,100 @@
1
+ import { type ReactNode } from 'react';
2
+ export type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | 'full';
3
+ /**
4
+ * Visual style variant of the modal
5
+ * - `default`: Standard surface background with border
6
+ * - `glass`: Glassmorphism effect with blur and translucency
7
+ * - `flat`: No border, flat surface
8
+ */
9
+ export type ModalVariant = 'default' | 'glass' | 'flat';
10
+ /**
11
+ * Position/entry direction of the modal
12
+ * - `top`: Modal appears near the top
13
+ * - `center`: Modal is vertically centered (default dialog)
14
+ * - `bottom`: Slides up from the bottom (bottom sheet)
15
+ * - `left`: Slides in from the left (left drawer)
16
+ * - `right`: Slides in from the right (right drawer)
17
+ */
18
+ export type ModalPosition = 'top' | 'center' | 'bottom' | 'left' | 'right';
19
+ export interface ModalProps {
20
+ /** Controls whether the modal is visible */
21
+ isOpen: boolean;
22
+ /** Called when the modal should close */
23
+ onClose: () => void;
24
+ /** Content rendered inside the modal */
25
+ children?: ReactNode;
26
+ /**
27
+ * Size of the modal
28
+ * @default 'md'
29
+ */
30
+ size?: ModalSize;
31
+ /**
32
+ * Visual variant of the modal
33
+ * @default 'default'
34
+ */
35
+ variant?: ModalVariant;
36
+ /**
37
+ * Vertical position of modal on screen
38
+ * @default 'center'
39
+ */
40
+ position?: ModalPosition;
41
+ /**
42
+ * Close modal when clicking the overlay
43
+ * @default true
44
+ */
45
+ closeOnOverlayClick?: boolean;
46
+ /**
47
+ * Close modal when pressing the Escape key
48
+ * @default true
49
+ */
50
+ closeOnEsc?: boolean;
51
+ /**
52
+ * Trap focus inside the modal for accessibility
53
+ * @default true
54
+ */
55
+ trapFocus?: boolean;
56
+ /**
57
+ * Lock body scroll when modal is open
58
+ * @default true
59
+ */
60
+ lockScroll?: boolean;
61
+ /** Extra class(es) applied to the modal content panel */
62
+ contentClassName?: string;
63
+ /** Extra class(es) applied to the backdrop overlay */
64
+ overlayClassName?: string;
65
+ /**
66
+ * Show the dark backdrop overlay
67
+ * @default true
68
+ */
69
+ showBackdrop?: boolean;
70
+ /** aria-label for the dialog (use when no visible title exists) */
71
+ ariaLabel?: string;
72
+ /** ID of the element that labels the dialog */
73
+ ariaLabelledby?: string;
74
+ /** ID of the element that describes the dialog */
75
+ ariaDescribedby?: string;
76
+ }
77
+ export interface ModalHeaderProps {
78
+ children: ReactNode;
79
+ className?: string;
80
+ /** Optional decorative icon rendered before the title */
81
+ icon?: ReactNode;
82
+ /** Optional description shown below the title */
83
+ description?: string;
84
+ }
85
+ export interface ModalBodyProps {
86
+ children: ReactNode;
87
+ className?: string;
88
+ /** Remove default padding (useful for full-bleed content) */
89
+ noPadding?: boolean;
90
+ }
91
+ export interface ModalFooterProps {
92
+ children: ReactNode;
93
+ className?: string;
94
+ /** Left-align the footer actions instead of right-aligning */
95
+ align?: 'left' | 'center' | 'right';
96
+ }
97
+ export interface ModalCloseButtonProps {
98
+ onClick?: () => void;
99
+ className?: string;
100
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Modal';
2
+ export * from './Modal.types';
@@ -0,0 +1,2 @@
1
+ import type { MultiSelectProps } from './MultiSelect.types';
2
+ export declare const MultiSelect: React.ForwardRefExoticComponent<MultiSelectProps & React.RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,15 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { MultiSelect } from './MultiSelect';
3
+ declare const meta: Meta<typeof MultiSelect>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ /** The default custom multi-select dropdown. */
7
+ export declare const Default: Story;
8
+ /** Pass `defaultValue` to prepopulate settings seamlessly. */
9
+ export declare const PreSelected: Story;
10
+ /** Ensure forms outline errors and states correctly across selections. */
11
+ export declare const ValidationStates: Story;
12
+ /** Adjusting visual layouts for integration context (flushed, filled, default). */
13
+ export declare const Variants: Story;
14
+ /** Loading and disabled triggers. */
15
+ export declare const LoadingAndDisabled: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ export type MultiSelectVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
2
+ export type MultiSelectSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export type MultiSelectState = 'default' | 'error' | 'success' | 'warning';
4
+ export interface MultiSelectOption {
5
+ label: string;
6
+ value: string;
7
+ }
8
+ export interface MultiSelectProps {
9
+ /** Array of available options */
10
+ options: MultiSelectOption[];
11
+ /** Array of currently selected values */
12
+ value?: string[];
13
+ /** Array of initially selected values (for uncontrolled usage) */
14
+ defaultValue?: string[];
15
+ /** Callback fired when selection changes */
16
+ onChange?: (values: string[]) => void;
17
+ /** Placeholder text when nothing is selected */
18
+ placeholder?: string;
19
+ /** Text label rendered above the input */
20
+ label?: string;
21
+ /** Adds a required asterisk */
22
+ required?: boolean;
23
+ /** Helper text rendered below the input */
24
+ helperText?: string;
25
+ /** Error message rendered below the input when state is 'error' */
26
+ errorMessage?: string;
27
+ /** Success message rendered below the input when state is 'success' */
28
+ successMessage?: string;
29
+ /** Warning message rendered below the input when state is 'warning' */
30
+ warningMessage?: string;
31
+ /** Visual variant of the input trigger */
32
+ variant?: MultiSelectVariant;
33
+ /** Overall size scale of the component */
34
+ size?: MultiSelectSize;
35
+ /** Validation state affecting border colors */
36
+ state?: MultiSelectState;
37
+ /** Whether the component should take full width of its container */
38
+ fullWidth?: boolean;
39
+ /** Disables interactions */
40
+ disabled?: boolean;
41
+ /** Shows a loading state (e.g., fetching options) */
42
+ isLoading?: boolean;
43
+ /** Custom ID for the component elements */
44
+ id?: string;
45
+ /** Appended to the outermost wrapper */
46
+ wrapperClassName?: string;
47
+ /** Appended to the trigger button */
48
+ triggerClassName?: string;
49
+ /** Appended to the dropdown menu container */
50
+ dropdownClassName?: string;
51
+ /** Appended to the label element */
52
+ labelClassName?: string;
53
+ /** Appended to the helper text element */
54
+ helperClassName?: string;
55
+ }
@@ -0,0 +1,2 @@
1
+ export { MultiSelect } from './MultiSelect';
2
+ export type { MultiSelectProps, MultiSelectVariant, MultiSelectSize, MultiSelectState, } from './MultiSelect.types';
@@ -0,0 +1,2 @@
1
+ import type { OtpInputProps } from './OtpInput.types';
2
+ export declare const OtpInput: React.ForwardRefExoticComponent<OtpInputProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { OtpInput } from './OtpInput';
3
+ declare const meta: Meta<typeof OtpInput>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof OtpInput>;
6
+ export declare const Basic: Story;
7
+ export declare const SixDigitLayout: Story;
8
+ export declare const ErrorState: Story;
9
+ export declare const MaskedInput: Story;
10
+ export declare const AlphanumericAllowed: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ export type OtpVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
2
+ export type OtpSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export type OtpState = 'default' | 'error' | 'success' | 'warning';
4
+ export interface OtpInputProps {
5
+ /** The total number of input boxes (defaults to 4 or 6 depending on your preference, normally 4 or 6. We default to 4). */
6
+ length?: number;
7
+ /** The current value of the OTP input. */
8
+ value?: string;
9
+ /** Fired when the value changes. */
10
+ onChange?: (value: string) => void;
11
+ /** Fired when all the input boxes are filled. */
12
+ onComplete?: (value: string) => void;
13
+ /** Optional label text shown above the inputs. */
14
+ label?: string;
15
+ /** Whether the field is explicitly required. */
16
+ required?: boolean;
17
+ /** Helper text displayed below the inputs. */
18
+ helperText?: string;
19
+ /** Error message displayed when state is 'error'. */
20
+ errorMessage?: string;
21
+ /** Success message displayed when state is 'success'. */
22
+ successMessage?: string;
23
+ /** Warning message displayed when state is 'warning'. */
24
+ warningMessage?: string;
25
+ /** The visual style variant of the input boxes. */
26
+ variant?: OtpVariant;
27
+ /** The size of each input box. */
28
+ size?: OtpSize;
29
+ /** The interaction state of the component. */
30
+ state?: OtpState;
31
+ /** Custom classname applied to the root wrapper. */
32
+ className?: string;
33
+ /** Alias for className to match other components. */
34
+ wrapperClassName?: string;
35
+ /** Custom classname applied to the inputs wrapper flex container. */
36
+ inputGroupClassName?: string;
37
+ /** Custom classname applied to each individual input box. */
38
+ inputClassName?: string;
39
+ /** Custom classname applied to the label. */
40
+ labelClassName?: string;
41
+ /** Custom classname applied to the helper/state messages. */
42
+ helperClassName?: string;
43
+ /** Explicit accessibility ID. Generated automatically if omitted. */
44
+ id?: string;
45
+ /** Whether the component is completely disabled. */
46
+ disabled?: boolean;
47
+ /** Whether to show a loading state indicator. */
48
+ isLoading?: boolean;
49
+ /** Only mask inputs with generic dots like a password if truthy. */
50
+ mask?: boolean;
51
+ /** Allow alphanumeric? Defaults to numeric-only if false or omitted. */
52
+ alphanumeric?: boolean;
53
+ }
@@ -0,0 +1,2 @@
1
+ export * from './OtpInput';
2
+ export type * from './OtpInput.types';
@@ -0,0 +1,2 @@
1
+ import type { PasswordInputProps } from './PasswordInput.types';
2
+ export declare const PasswordInput: React.ForwardRefExoticComponent<PasswordInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,23 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { PasswordInput } from './PasswordInput';
3
+ declare const meta: Meta<typeof PasswordInput>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ /** The default input with a label, placeholder, and helper text. */
7
+ export declare const Default: Story;
8
+ /** All five size variants stacked vertically. */
9
+ export declare const Sizes: Story;
10
+ /** All four visual variants. */
11
+ export declare const Variants: Story;
12
+ /** All four validation states. */
13
+ export declare const ValidationStates: Story;
14
+ /** Inline left elements (SVG icons). Right icon is replaced by the toggle by default unless showPasswordToggle is false. */
15
+ export declare const WithIcons: Story;
16
+ /** You can disable the password visibility toggle if you do not want the feature. */
17
+ export declare const WithoutToggle: Story;
18
+ /** Required fields show a red asterisk beside the label. */
19
+ export declare const Required: Story;
20
+ /** Disabled input — read-only and non-interactive. */
21
+ export declare const Disabled: Story;
22
+ /** Override styles via `inputClassName` and `wrapperClassName`. */
23
+ export declare const CustomClassName: Story;
@@ -0,0 +1,27 @@
1
+ import type { InputHTMLAttributes, ReactNode } from 'react';
2
+ export type PasswordInputVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
3
+ export type PasswordInputSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type PasswordInputState = 'default' | 'error' | 'success' | 'warning';
5
+ export interface PasswordInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'type'> {
6
+ label?: string;
7
+ required?: boolean;
8
+ helperText?: string;
9
+ errorMessage?: string;
10
+ successMessage?: string;
11
+ warningMessage?: string;
12
+ variant?: PasswordInputVariant;
13
+ size?: PasswordInputSize;
14
+ state?: PasswordInputState;
15
+ fullWidth?: boolean;
16
+ leftElement?: ReactNode;
17
+ rightElement?: ReactNode;
18
+ prefix?: ReactNode;
19
+ suffix?: ReactNode;
20
+ wrapperClassName?: string;
21
+ inputGroupClassName?: string;
22
+ inputClassName?: string;
23
+ labelClassName?: string;
24
+ helperClassName?: string;
25
+ isLoading?: boolean;
26
+ showPasswordToggle?: boolean;
27
+ }
@@ -0,0 +1,2 @@
1
+ export * from './PasswordInput';
2
+ export * from './PasswordInput.types';
@@ -0,0 +1,2 @@
1
+ import type { PhoneProps } from './Phone.types';
2
+ export declare const Phone: React.ForwardRefExoticComponent<PhoneProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,11 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Phone } from './Phone';
3
+ declare const meta: Meta<typeof Phone>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Phone>;
6
+ export declare const Basic: Story;
7
+ export declare const WithIcon: Story;
8
+ export declare const WithPrefixAddon: Story;
9
+ export declare const ErrorState: Story;
10
+ export declare const FilledVariant: Story;
11
+ export declare const SuccessStateWithClear: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { InputHTMLAttributes, ReactNode } from 'react';
2
+ export type PhoneVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
3
+ export type PhoneSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type PhoneState = 'default' | 'error' | 'success' | 'warning';
5
+ export interface PhoneValue {
6
+ countryCode: string;
7
+ phoneNumber: string;
8
+ }
9
+ export interface PhoneProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'type' | 'value' | 'defaultValue' | 'onChange'> {
10
+ value?: PhoneValue;
11
+ defaultValue?: PhoneValue;
12
+ onChange?: (value: PhoneValue) => void;
13
+ showFlag?: boolean;
14
+ defaultCountryCode?: string;
15
+ label?: string;
16
+ required?: boolean;
17
+ helperText?: string;
18
+ errorMessage?: string;
19
+ successMessage?: string;
20
+ warningMessage?: string;
21
+ variant?: PhoneVariant;
22
+ size?: PhoneSize;
23
+ state?: PhoneState;
24
+ fullWidth?: boolean;
25
+ leftElement?: ReactNode;
26
+ rightElement?: ReactNode;
27
+ prefix?: ReactNode;
28
+ suffix?: ReactNode;
29
+ wrapperClassName?: string;
30
+ inputGroupClassName?: string;
31
+ inputClassName?: string;
32
+ labelClassName?: string;
33
+ helperClassName?: string;
34
+ clearable?: boolean;
35
+ isLoading?: boolean;
36
+ }
@@ -0,0 +1,8 @@
1
+ export interface Country {
2
+ name: string;
3
+ id: string;
4
+ dialCode: string;
5
+ maxLength: number;
6
+ flag: string;
7
+ }
8
+ export declare const COUNTRIES: Country[];
@@ -0,0 +1,2 @@
1
+ export * from './Phone';
2
+ export type * from './Phone.types';
@@ -0,0 +1,2 @@
1
+ import type { RadioButtonProps } from './RadioButton.types';
2
+ export declare const RadioButton: React.ForwardRefExoticComponent<RadioButtonProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,21 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { RadioButton } from './RadioButton';
3
+ declare const meta: Meta<typeof RadioButton>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ /** The default radio button with a label and helper text. */
7
+ export declare const Default: Story;
8
+ /** All three size variants shown side-by-side. */
9
+ export declare const Sizes: Story;
10
+ /** All four validation states. */
11
+ export declare const ValidationStates: Story;
12
+ /** A group of radio buttons sharing the same `name`. */
13
+ export declare const RadioGroup: Story;
14
+ /** Required fields show a red asterisk beside the label. */
15
+ export declare const Required: Story;
16
+ /** Disabled input — read-only and non-interactive. */
17
+ export declare const Disabled: Story;
18
+ /** Override styles via `className` and `wrapperClassName`. */
19
+ export declare const CustomClassName: Story;
20
+ /** Input without a label — uses `aria-label` on the `<input>` instead. */
21
+ export declare const NoLabel: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import type { InputHTMLAttributes, ReactNode } from 'react';
2
+ export type RadioButtonSize = 'sm' | 'md' | 'lg';
3
+ export type RadioButtonState = 'default' | 'error' | 'success' | 'warning';
4
+ export interface RadioButtonProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
5
+ /**
6
+ * Optional label displayed next to the radio button.
7
+ */
8
+ label?: ReactNode;
9
+ /**
10
+ * Helper text displayed below the radio button.
11
+ */
12
+ helperText?: string;
13
+ /**
14
+ * Error message displayed when state is 'error'.
15
+ */
16
+ errorMessage?: string;
17
+ /**
18
+ * Success message displayed when state is 'success'.
19
+ */
20
+ successMessage?: string;
21
+ /**
22
+ * Warning message displayed when state is 'warning'.
23
+ */
24
+ warningMessage?: string;
25
+ /**
26
+ * The size of the radio button and label.
27
+ * @default 'md'
28
+ */
29
+ size?: RadioButtonSize;
30
+ /**
31
+ * The validation state of the radio button.
32
+ * @default 'default'
33
+ */
34
+ state?: RadioButtonState;
35
+ /**
36
+ * Additional class applied to the outer wrapper element.
37
+ */
38
+ wrapperClassName?: string;
39
+ /**
40
+ * Additional class applied to the input element itself.
41
+ */
42
+ inputClassName?: string;
43
+ /**
44
+ * Additional class applied to the label text element.
45
+ */
46
+ labelClassName?: string;
47
+ /**
48
+ * Additional class applied to the helper/state message element.
49
+ */
50
+ helperClassName?: string;
51
+ }
@@ -0,0 +1,2 @@
1
+ export { RadioButton } from './RadioButton';
2
+ export type { RadioButtonProps, RadioButtonSize, RadioButtonState } from './RadioButton.types';
@@ -0,0 +1,6 @@
1
+ import type { SearchInputProps } from './SearchInput.types';
2
+ /**
3
+ * SearchInput component - A debounced input field for search functionality.
4
+ * Built on top of TextInput, it includes a search icon by default and handles debouncing.
5
+ */
6
+ export declare const SearchInput: React.ForwardRefExoticComponent<SearchInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,8 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { SearchInput } from './SearchInput';
3
+ declare const meta: Meta<typeof SearchInput>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Controlled: Story;
8
+ export declare const CustomIcon: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { TextInputProps } from '../TextInput/TextInput.types';
2
+ export interface SearchInputProps extends TextInputProps {
3
+ /**
4
+ * The delay in milliseconds before the onDebouncedChange callback is called.
5
+ * @default 300
6
+ */
7
+ debounce?: number;
8
+ /**
9
+ * Callback function called after the debounce delay with the current input value.
10
+ */
11
+ onDebouncedChange?: (value: string) => void;
12
+ }
@@ -0,0 +1,2 @@
1
+ export * from './SearchInput';
2
+ export * from './SearchInput.types';
@@ -0,0 +1,2 @@
1
+ import type { SelectProps } from './Select.types';
2
+ export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
@@ -0,0 +1,12 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Select } from './Select';
3
+ declare const meta: Meta<typeof Select>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const Variants: Story;
9
+ export declare const ValidationStates: Story;
10
+ export declare const Required: Story;
11
+ export declare const Disabled: Story;
12
+ export declare const WithChildren: Story;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { SelectHTMLAttributes, ReactNode } from 'react';
2
+ export type SelectVariant = 'default' | 'filled' | 'flushed' | 'unstyled';
3
+ export type SelectSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ export type SelectState = 'default' | 'error' | 'success' | 'warning';
5
+ export interface SelectOption {
6
+ label: string;
7
+ value: string | number;
8
+ disabled?: boolean;
9
+ }
10
+ export interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {
11
+ label?: string;
12
+ required?: boolean;
13
+ helperText?: string;
14
+ errorMessage?: string;
15
+ successMessage?: string;
16
+ warningMessage?: string;
17
+ variant?: SelectVariant;
18
+ size?: SelectSize;
19
+ state?: SelectState;
20
+ fullWidth?: boolean;
21
+ leftElement?: ReactNode;
22
+ rightElement?: ReactNode;
23
+ wrapperClassName?: string;
24
+ inputGroupClassName?: string;
25
+ inputClassName?: string;
26
+ labelClassName?: string;
27
+ helperClassName?: string;
28
+ isLoading?: boolean;
29
+ options?: SelectOption[];
30
+ placeholder?: string;
31
+ }
@@ -0,0 +1,2 @@
1
+ export { Select } from './Select';
2
+ export type { SelectProps, SelectOption, SelectVariant, SelectSize, SelectState, } from './Select.types';
@@ -0,0 +1,7 @@
1
+ import type { SidebarProps } from './Sidebar.types';
2
+ interface SidebarComponent {
3
+ (props: SidebarProps): React.JSX.Element;
4
+ displayName?: string;
5
+ }
6
+ export declare const Sidebar: SidebarComponent;
7
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Sidebar } from './Sidebar';
3
+ declare const meta: Meta<typeof Sidebar>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Sidebar>;
6
+ export declare const Default: Story;
7
+ export declare const FullyCustomizable: Story;
8
+ export declare const RightPositioned: Story;
9
+ export declare const CustomItemRendering: Story;
10
+ export declare const NestedItems: Story;
@@ -0,0 +1 @@
1
+ export {};