warqadui 0.0.5 → 0.0.6

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 (179) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/apps/dev-app/.env +1 -0
  3. package/apps/dev-app/errors.log +0 -0
  4. package/apps/dev-app/index.html +12 -0
  5. package/apps/dev-app/node_modules/.vite/deps/@tanstack_react-table.js +3254 -0
  6. package/apps/dev-app/node_modules/.vite/deps/@tanstack_react-table.js.map +7 -0
  7. package/apps/dev-app/node_modules/.vite/deps/_metadata.json +178 -0
  8. package/apps/dev-app/node_modules/.vite/deps/antd.js +108982 -0
  9. package/apps/dev-app/node_modules/.vite/deps/antd.js.map +7 -0
  10. package/apps/dev-app/node_modules/.vite/deps/axios.js +2751 -0
  11. package/apps/dev-app/node_modules/.vite/deps/axios.js.map +7 -0
  12. package/apps/dev-app/node_modules/.vite/deps/chunk-5OG7DCD7.js +41 -0
  13. package/apps/dev-app/node_modules/.vite/deps/chunk-5OG7DCD7.js.map +7 -0
  14. package/apps/dev-app/node_modules/.vite/deps/chunk-7YRZYZRE.js +7807 -0
  15. package/apps/dev-app/node_modules/.vite/deps/chunk-7YRZYZRE.js.map +7 -0
  16. package/apps/dev-app/node_modules/.vite/deps/chunk-DC5AMYBS.js +39 -0
  17. package/apps/dev-app/node_modules/.vite/deps/chunk-DC5AMYBS.js.map +7 -0
  18. package/apps/dev-app/node_modules/.vite/deps/chunk-DKXRQMOD.js +135 -0
  19. package/apps/dev-app/node_modules/.vite/deps/chunk-DKXRQMOD.js.map +7 -0
  20. package/apps/dev-app/node_modules/.vite/deps/chunk-EL47BWQR.js +37 -0
  21. package/apps/dev-app/node_modules/.vite/deps/chunk-EL47BWQR.js.map +7 -0
  22. package/apps/dev-app/node_modules/.vite/deps/chunk-HHL3MHGV.js +288 -0
  23. package/apps/dev-app/node_modules/.vite/deps/chunk-HHL3MHGV.js.map +7 -0
  24. package/apps/dev-app/node_modules/.vite/deps/chunk-IGGUWUPT.js +60 -0
  25. package/apps/dev-app/node_modules/.vite/deps/chunk-IGGUWUPT.js.map +7 -0
  26. package/apps/dev-app/node_modules/.vite/deps/chunk-IGXZPJXT.js +928 -0
  27. package/apps/dev-app/node_modules/.vite/deps/chunk-IGXZPJXT.js.map +7 -0
  28. package/apps/dev-app/node_modules/.vite/deps/chunk-L2GCM37S.js +21628 -0
  29. package/apps/dev-app/node_modules/.vite/deps/chunk-L2GCM37S.js.map +7 -0
  30. package/apps/dev-app/node_modules/.vite/deps/chunk-LDRT62EN.js +14806 -0
  31. package/apps/dev-app/node_modules/.vite/deps/chunk-LDRT62EN.js.map +7 -0
  32. package/apps/dev-app/node_modules/.vite/deps/chunk-M7DZDBHW.js +14 -0
  33. package/apps/dev-app/node_modules/.vite/deps/chunk-M7DZDBHW.js.map +7 -0
  34. package/apps/dev-app/node_modules/.vite/deps/chunk-S54SBVCU.js +1906 -0
  35. package/apps/dev-app/node_modules/.vite/deps/chunk-S54SBVCU.js.map +7 -0
  36. package/apps/dev-app/node_modules/.vite/deps/chunk-WFNHCR67.js +21 -0
  37. package/apps/dev-app/node_modules/.vite/deps/chunk-WFNHCR67.js.map +7 -0
  38. package/apps/dev-app/node_modules/.vite/deps/clsx.js +10 -0
  39. package/apps/dev-app/node_modules/.vite/deps/clsx.js.map +7 -0
  40. package/apps/dev-app/node_modules/.vite/deps/dayjs.js +6 -0
  41. package/apps/dev-app/node_modules/.vite/deps/dayjs.js.map +7 -0
  42. package/apps/dev-app/node_modules/.vite/deps/dayjs_plugin_customParseFormat.js +6 -0
  43. package/apps/dev-app/node_modules/.vite/deps/dayjs_plugin_customParseFormat.js.map +7 -0
  44. package/apps/dev-app/node_modules/.vite/deps/framer-motion.js +12388 -0
  45. package/apps/dev-app/node_modules/.vite/deps/framer-motion.js.map +7 -0
  46. package/apps/dev-app/node_modules/.vite/deps/html2canvas-pro.js +9713 -0
  47. package/apps/dev-app/node_modules/.vite/deps/html2canvas-pro.js.map +7 -0
  48. package/apps/dev-app/node_modules/.vite/deps/html2canvas.esm-VL7GM4AH.js +8 -0
  49. package/apps/dev-app/node_modules/.vite/deps/html2canvas.esm-VL7GM4AH.js.map +7 -0
  50. package/apps/dev-app/node_modules/.vite/deps/index.es-3WTXOFZ2.js +10392 -0
  51. package/apps/dev-app/node_modules/.vite/deps/index.es-3WTXOFZ2.js.map +7 -0
  52. package/apps/dev-app/node_modules/.vite/deps/jspdf.js +41 -0
  53. package/apps/dev-app/node_modules/.vite/deps/jspdf.js.map +7 -0
  54. package/apps/dev-app/node_modules/.vite/deps/lucide-react.js +31586 -0
  55. package/apps/dev-app/node_modules/.vite/deps/lucide-react.js.map +7 -0
  56. package/apps/dev-app/node_modules/.vite/deps/package.json +3 -0
  57. package/apps/dev-app/node_modules/.vite/deps/purify.es-JNLDEIMX.js +1029 -0
  58. package/apps/dev-app/node_modules/.vite/deps/purify.es-JNLDEIMX.js.map +7 -0
  59. package/apps/dev-app/node_modules/.vite/deps/react-dom.js +7 -0
  60. package/apps/dev-app/node_modules/.vite/deps/react-dom.js.map +7 -0
  61. package/apps/dev-app/node_modules/.vite/deps/react-dom_client.js +8 -0
  62. package/apps/dev-app/node_modules/.vite/deps/react-dom_client.js.map +7 -0
  63. package/apps/dev-app/node_modules/.vite/deps/react-hook-form.js +2233 -0
  64. package/apps/dev-app/node_modules/.vite/deps/react-hook-form.js.map +7 -0
  65. package/apps/dev-app/node_modules/.vite/deps/react-phone-number-input.js +9307 -0
  66. package/apps/dev-app/node_modules/.vite/deps/react-phone-number-input.js.map +7 -0
  67. package/apps/dev-app/node_modules/.vite/deps/react-router-dom.js +14234 -0
  68. package/apps/dev-app/node_modules/.vite/deps/react-router-dom.js.map +7 -0
  69. package/apps/dev-app/node_modules/.vite/deps/react-to-pdf.js +268 -0
  70. package/apps/dev-app/node_modules/.vite/deps/react-to-pdf.js.map +7 -0
  71. package/apps/dev-app/node_modules/.vite/deps/react.js +6 -0
  72. package/apps/dev-app/node_modules/.vite/deps/react.js.map +7 -0
  73. package/apps/dev-app/node_modules/.vite/deps/react_jsx-dev-runtime.js +913 -0
  74. package/apps/dev-app/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +7 -0
  75. package/apps/dev-app/node_modules/.vite/deps/react_jsx-runtime.js +7 -0
  76. package/apps/dev-app/node_modules/.vite/deps/react_jsx-runtime.js.map +7 -0
  77. package/apps/dev-app/node_modules/.vite/deps/tailwind-merge.js +2534 -0
  78. package/apps/dev-app/node_modules/.vite/deps/tailwind-merge.js.map +7 -0
  79. package/apps/dev-app/node_modules/tailwindcss/LICENSE +21 -0
  80. package/apps/dev-app/node_modules/tailwindcss/README.md +36 -0
  81. package/apps/dev-app/node_modules/tailwindcss/dist/chunk-L5IEUH3R.mjs +38 -0
  82. package/apps/dev-app/node_modules/tailwindcss/dist/chunk-UWKE2Z6N.mjs +1 -0
  83. package/apps/dev-app/node_modules/tailwindcss/dist/chunk-X4GG3EDV.mjs +1 -0
  84. package/apps/dev-app/node_modules/tailwindcss/dist/colors-C__qRT83.d.ts +347 -0
  85. package/apps/dev-app/node_modules/tailwindcss/dist/colors.d.mts +347 -0
  86. package/apps/dev-app/node_modules/tailwindcss/dist/colors.d.ts +5 -0
  87. package/apps/dev-app/node_modules/tailwindcss/dist/colors.js +1 -0
  88. package/apps/dev-app/node_modules/tailwindcss/dist/colors.mjs +1 -0
  89. package/apps/dev-app/node_modules/tailwindcss/dist/default-theme.d.mts +1199 -0
  90. package/apps/dev-app/node_modules/tailwindcss/dist/default-theme.d.ts +1199 -0
  91. package/apps/dev-app/node_modules/tailwindcss/dist/default-theme.js +1 -0
  92. package/apps/dev-app/node_modules/tailwindcss/dist/default-theme.mjs +1 -0
  93. package/apps/dev-app/node_modules/tailwindcss/dist/flatten-color-palette.d.mts +6 -0
  94. package/apps/dev-app/node_modules/tailwindcss/dist/flatten-color-palette.d.ts +6 -0
  95. package/apps/dev-app/node_modules/tailwindcss/dist/flatten-color-palette.js +3 -0
  96. package/apps/dev-app/node_modules/tailwindcss/dist/flatten-color-palette.mjs +1 -0
  97. package/apps/dev-app/node_modules/tailwindcss/dist/lib.d.mts +378 -0
  98. package/apps/dev-app/node_modules/tailwindcss/dist/lib.d.ts +3 -0
  99. package/apps/dev-app/node_modules/tailwindcss/dist/lib.js +38 -0
  100. package/apps/dev-app/node_modules/tailwindcss/dist/lib.mjs +1 -0
  101. package/apps/dev-app/node_modules/tailwindcss/dist/plugin.d.mts +11 -0
  102. package/apps/dev-app/node_modules/tailwindcss/dist/plugin.d.ts +134 -0
  103. package/apps/dev-app/node_modules/tailwindcss/dist/plugin.js +1 -0
  104. package/apps/dev-app/node_modules/tailwindcss/dist/plugin.mjs +1 -0
  105. package/apps/dev-app/node_modules/tailwindcss/dist/resolve-config-B4yBzhca.d.ts +29 -0
  106. package/apps/dev-app/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts +190 -0
  107. package/apps/dev-app/node_modules/tailwindcss/dist/types-CJYAW1ql.d.mts +128 -0
  108. package/apps/dev-app/node_modules/tailwindcss/index.css +944 -0
  109. package/apps/dev-app/node_modules/tailwindcss/package.json +89 -0
  110. package/apps/dev-app/node_modules/tailwindcss/preflight.css +393 -0
  111. package/apps/dev-app/node_modules/tailwindcss/theme.css +510 -0
  112. package/apps/dev-app/node_modules/tailwindcss/utilities.css +1 -0
  113. package/apps/dev-app/package.json +35 -0
  114. package/apps/dev-app/src/App.tsx +74 -0
  115. package/apps/dev-app/src/index.css +18 -0
  116. package/apps/dev-app/src/main.tsx +18 -0
  117. package/apps/dev-app/src/pages/Buttons.tsx +122 -0
  118. package/apps/dev-app/src/pages/DataTable.tsx +208 -0
  119. package/apps/dev-app/src/pages/Fields.tsx +342 -0
  120. package/apps/dev-app/src/pages/Modals.tsx +151 -0
  121. package/apps/dev-app/src/pages/Spins.tsx +161 -0
  122. package/apps/dev-app/ts_errors.txt +0 -0
  123. package/apps/dev-app/tsconfig.json +25 -0
  124. package/apps/dev-app/tsconfig.node.json +10 -0
  125. package/apps/dev-app/vite.config.ts +11 -0
  126. package/package.json +10 -49
  127. package/packages/ui/dist/index.d.mts +356 -0
  128. package/packages/ui/dist/index.d.ts +356 -0
  129. package/packages/ui/dist/index.js +2296 -0
  130. package/packages/ui/dist/index.mjs +2249 -0
  131. package/packages/ui/dist/styles.js +26 -0
  132. package/packages/ui/dist/styles.mjs +24 -0
  133. package/packages/ui/log.txt +0 -0
  134. package/packages/ui/package.json +68 -0
  135. package/packages/ui/postcss.config.js +6 -0
  136. package/packages/ui/src/components/Button.tsx +85 -0
  137. package/packages/ui/src/components/Card.tsx +97 -0
  138. package/packages/ui/src/components/CodeBlock.tsx +53 -0
  139. package/packages/ui/src/components/DashboardLayout.tsx +442 -0
  140. package/packages/ui/src/components/Fields/Input.tsx +191 -0
  141. package/packages/ui/src/components/Fields/PhoneInput.tsx +134 -0
  142. package/packages/ui/src/components/Fields/date.tsx +165 -0
  143. package/packages/ui/src/components/Fields/index.tsx +17 -0
  144. package/packages/ui/src/components/Fields/searchApi.tsx +479 -0
  145. package/packages/ui/src/components/Fields/select.tsx +131 -0
  146. package/packages/ui/src/components/Fields/textArea.tsx +121 -0
  147. package/packages/ui/src/components/LoadingBox.tsx +11 -0
  148. package/packages/ui/src/components/PageHeader.tsx +34 -0
  149. package/packages/ui/src/components/ThemeToggle.tsx +35 -0
  150. package/packages/ui/src/components/modal/Modal.tsx +81 -0
  151. package/packages/ui/src/components/spins/ClassicSpin.tsx +18 -0
  152. package/packages/ui/src/components/spins/LoadingSpin.tsx +45 -0
  153. package/packages/ui/src/components/spins/OverlaySpin.tsx +10 -0
  154. package/packages/ui/src/components/spins/index.tsx +13 -0
  155. package/packages/ui/src/components/tables/DataTable.tsx +261 -0
  156. package/packages/ui/src/components/tables/index.ts +1 -0
  157. package/packages/ui/src/hooks/Fetches/useApis.tsx +197 -0
  158. package/packages/ui/src/hooks/ThemeContext.tsx +56 -0
  159. package/packages/ui/src/hooks/useModal.tsx +38 -0
  160. package/packages/ui/src/hooks/useTheme.ts +34 -0
  161. package/packages/ui/src/index.ts +24 -0
  162. package/packages/ui/src/providers/WarqadProvider.tsx +69 -0
  163. package/packages/ui/src/styles.css +26 -0
  164. package/packages/ui/src/utils/cn.ts +6 -0
  165. package/packages/ui/src/utils/pdf.ts +171 -0
  166. package/packages/ui/tailwind.config.js +13 -0
  167. package/packages/ui/tsconfig.json +17 -0
  168. package/packages/ui/warqad-ui-0.0.1.tgz +0 -0
  169. package/packages/ui/warqadui-0.0.3.tgz +0 -0
  170. package/warqad-ui-0.0.1.tgz +0 -0
  171. package/dist/index.d.mts +0 -35
  172. package/dist/index.d.ts +0 -35
  173. package/dist/index.js +0 -470
  174. package/dist/index.mjs +0 -440
  175. package/dist/styles.js +0 -26
  176. package/dist/styles.mjs +0 -24
  177. /package/{dist → packages/ui/dist}/index.css +0 -0
  178. /package/{dist → packages/ui/dist}/styles.d.mts +0 -0
  179. /package/{dist → packages/ui/dist}/styles.d.ts +0 -0
@@ -0,0 +1,134 @@
1
+ import { forwardRef, useState } from "react";
2
+ import PhoneInputOriginal, {
3
+ isValidPhoneNumber,
4
+ } from "react-phone-number-input";
5
+ import "react-phone-number-input/style.css";
6
+ import { Controller } from "react-hook-form";
7
+ import { useWarqadConfig } from "../../providers/WarqadProvider";
8
+
9
+ export interface PhoneInputProps extends Omit<
10
+ React.InputHTMLAttributes<HTMLInputElement>,
11
+ "onChange"
12
+ > {
13
+ label: string;
14
+ icon?: React.ReactNode;
15
+ error?: string;
16
+ containerClassName?: string;
17
+ name?: any;
18
+ form?: any;
19
+ onChange?: (value: string) => void;
20
+ value?: string;
21
+ }
22
+
23
+ export const PhoneInput = forwardRef<any, PhoneInputProps>(
24
+ (
25
+ {
26
+ label,
27
+ icon,
28
+ error,
29
+ containerClassName = "",
30
+ name,
31
+ form,
32
+ onChange,
33
+ value,
34
+ className = "",
35
+ ...props
36
+ },
37
+ ref,
38
+ ) => {
39
+ const [isFocused, setIsFocused] = useState(false);
40
+ const { theme } = useWarqadConfig();
41
+ const primaryColor = theme?.primaryColor;
42
+
43
+ // Error logic extraction
44
+ let message = error;
45
+ if (form && name) {
46
+ const {
47
+ formState: { errors },
48
+ } = form;
49
+ // Handle nested errors like 'user.phone'
50
+ const nameParts = name.split(".");
51
+ let currentError = errors;
52
+ for (const part of nameParts) {
53
+ currentError = currentError?.[part];
54
+ }
55
+ message = currentError?.message || message;
56
+ }
57
+
58
+ const renderInput = (
59
+ onChangeHandler: (value: string) => void,
60
+ currentValue: string,
61
+ ) => (
62
+ <div className={`space-y-2 group ${containerClassName}`}>
63
+ <label
64
+ className={`block text-xs font-medium transition-colors duration-200`}
65
+ style={{
66
+ color: isFocused || currentValue ? primaryColor : undefined,
67
+ }}
68
+ >
69
+ {label}
70
+ {props.required && <span className="text-red-500 ml-1">*</span>}
71
+ </label>
72
+ <div className="relative">
73
+ {icon && (
74
+ <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none z-10">
75
+ <div
76
+ className={`transition-colors duration-200`}
77
+ style={{ color: isFocused ? primaryColor : "#9ca3af" }}
78
+ >
79
+ {icon}
80
+ </div>
81
+ </div>
82
+ )}
83
+ <PhoneInputOriginal
84
+ ref={ref}
85
+ defaultCountry="KE"
86
+ international
87
+ withCountryCallingCode
88
+ value={currentValue}
89
+ onChange={(val: any) => onChangeHandler(val as string)}
90
+ onFocus={() => setIsFocused(true)}
91
+ onBlur={() => setIsFocused(false)}
92
+ className={`block w-full rounded-lg border-gray-200 dark:border-zinc-800 bg-gray-50 dark:bg-zinc-900/50 text-gray-900 dark:text-white placeholder-gray-400 focus-within:bg-white dark:focus-within:bg-zinc-900 outline-none transition-all duration-200 border [&_.PhoneInputInput]:bg-transparent [&_.PhoneInputInput]:outline-none [&_.PhoneInputInput]:text-sm [&_.PhoneInputCountry]:mr-2 ${
93
+ icon ? "pl-10" : "pl-3"
94
+ } pr-3 h-8 py-0 ${className}`}
95
+ style={{
96
+ borderColor: isFocused ? primaryColor : undefined,
97
+ boxShadow: isFocused
98
+ ? `${primaryColor}33 0px 0px 0px 2px`
99
+ : undefined,
100
+ }}
101
+ {...props}
102
+ />
103
+ </div>
104
+ {message && (
105
+ <p className="text-sm text-red-600 dark:text-red-400">{message}</p>
106
+ )}
107
+ </div>
108
+ );
109
+
110
+ // If using React Hook Form
111
+ if (form && name) {
112
+ return (
113
+ <Controller
114
+ name={name}
115
+ control={form.control}
116
+ rules={{
117
+ validate: (value) =>
118
+ value && isValidPhoneNumber(value)
119
+ ? true
120
+ : "Invalid phone number",
121
+ }}
122
+ render={({ field: { onChange, value } }) =>
123
+ renderInput(onChange, value)
124
+ }
125
+ />
126
+ );
127
+ }
128
+
129
+ // Standalone usage
130
+ return renderInput(onChange || ((() => {}) as any), value || "");
131
+ },
132
+ );
133
+
134
+ PhoneInput.displayName = "PhoneInput";
@@ -0,0 +1,165 @@
1
+ import { forwardRef, useState } from "react";
2
+ import { DatePicker } from "antd";
3
+ import {
4
+ Controller,
5
+ type FieldValues,
6
+ type Path,
7
+ type UseFormReturn,
8
+ } from "react-hook-form";
9
+ import dayjs from "dayjs";
10
+ import customParseFormat from "dayjs/plugin/customParseFormat";
11
+ import { Calendar } from "lucide-react";
12
+ import { useWarqadConfig } from "../../providers/WarqadProvider";
13
+
14
+ dayjs.extend(customParseFormat);
15
+
16
+ export interface DateInputProps<T extends FieldValues> {
17
+ label: string;
18
+ error?: string;
19
+ containerClassName?: string;
20
+ name?: Path<T>;
21
+ form?: UseFormReturn<T>;
22
+ value?: string;
23
+ onChange?: (value: string) => void;
24
+ onBlur?: () => void;
25
+ className?: string;
26
+ [key: string]: any;
27
+ }
28
+
29
+ export const DateInput = forwardRef(
30
+ (
31
+ {
32
+ label,
33
+ error,
34
+ containerClassName = "",
35
+ name,
36
+ form,
37
+ className = "",
38
+ value,
39
+ onBlur = () => {},
40
+ onChange = () => {},
41
+ ...props
42
+ }: any,
43
+ ref: any,
44
+ ) => {
45
+ const { theme } = useWarqadConfig();
46
+ const primaryColor = theme?.primaryColor;
47
+ const [isFocused, setIsFocused] = useState(false);
48
+
49
+ let message = error;
50
+
51
+ if (form && name) {
52
+ const {
53
+ formState: { errors },
54
+ } = form;
55
+
56
+ const errorObj = name
57
+ .split(".")
58
+ .reduce((acc: any, current: string) => acc?.[current], errors);
59
+
60
+ message = (errorObj as any)?.message;
61
+ }
62
+
63
+ const inputStyles = `w-full px-3 py-0 rounded-lg! border! shadow-none transition-all! duration-200! outline-none!
64
+ bg-gray-50! dark:bg-zinc-900!
65
+ text-gray-900! dark:text-zinc-100!
66
+ hover:bg-gray-50! dark:hover:bg-zinc-900!
67
+ ${
68
+ message
69
+ ? "border-red-500 hover:border-red-500 [&.ant-picker-focused]:border-red-500 [&.ant-picker-focused]:ring-red-500/20"
70
+ : "border-gray-200 dark:border-zinc-700 hover:border-gray-200 dark:hover:border-zinc-700 [&.ant-picker-focused]:ring-2"
71
+ }
72
+ [&.ant-picker-focused]:bg-white dark:[&.ant-picker-focused]:bg-zinc-900
73
+ ${className}`;
74
+
75
+ const renderDatePicker = (
76
+ val: any,
77
+ changeHandler: (v: any) => void,
78
+ blurHandler: () => void,
79
+ refProps: any,
80
+ ) => {
81
+ const dateValue =
82
+ val && typeof val === "string"
83
+ ? dayjs(val, "DD/MM/YYYY", true)
84
+ : dayjs.isDayjs(val)
85
+ ? val
86
+ : null;
87
+
88
+ return (
89
+ <DatePicker
90
+ ref={refProps}
91
+ format="DD/MM/YYYY"
92
+ value={dateValue && dateValue.isValid() ? dateValue : null}
93
+ onChange={(date) => {
94
+ if (date && dayjs.isDayjs(date)) {
95
+ changeHandler?.(date.format("DD/MM/YYYY"));
96
+ } else {
97
+ changeHandler?.("");
98
+ }
99
+ }}
100
+ onFocus={() => setIsFocused(true)}
101
+ onBlur={() => {
102
+ setIsFocused(false);
103
+ blurHandler?.();
104
+ }}
105
+ className={`${inputStyles} [&>input]:text-gray-900! [&>input]:dark:text-zinc-100! [&>input]:text-base rounded-md`}
106
+ placeholder="DD/MM/YYYY"
107
+ needConfirm={false}
108
+ style={{
109
+ height: "32px",
110
+ borderColor: isFocused && !message ? primaryColor : undefined,
111
+ boxShadow:
112
+ isFocused && !message
113
+ ? `${primaryColor}33 0px 0px 0px 2px`
114
+ : undefined,
115
+ }}
116
+ popupClassName="z-50"
117
+ suffixIcon={
118
+ <Calendar
119
+ className="h-5 w-5 text-gray-400"
120
+ style={{ color: isFocused ? primaryColor : undefined }}
121
+ />
122
+ }
123
+ allowClear
124
+ {...props}
125
+ />
126
+ );
127
+ };
128
+
129
+ return (
130
+ <div className={`space-y-2 group ${containerClassName}`}>
131
+ <label
132
+ className="block text-xs font-medium transition-colors duration-200"
133
+ style={{
134
+ color: message ? "#ef4444" : isFocused ? primaryColor : undefined,
135
+ }}
136
+ >
137
+ {label}
138
+ </label>
139
+
140
+ {form && name ? (
141
+ <Controller
142
+ control={form.control}
143
+ name={name}
144
+ render={({ field }) =>
145
+ renderDatePicker(
146
+ field.value,
147
+ field.onChange,
148
+ field.onBlur,
149
+ field.ref,
150
+ )
151
+ }
152
+ />
153
+ ) : (
154
+ renderDatePicker(value, onChange, onBlur, ref)
155
+ )}
156
+
157
+ {message && (
158
+ <p className="text-sm text-red-600 dark:text-red-400">{message}</p>
159
+ )}
160
+ </div>
161
+ );
162
+ },
163
+ ) as <T extends FieldValues>(
164
+ props: DateInputProps<T> & { ref?: React.ForwardedRef<HTMLInputElement> },
165
+ ) => React.ReactElement;
@@ -0,0 +1,17 @@
1
+ import { Input } from "./Input";
2
+ import { PhoneInput } from "./PhoneInput";
3
+ import { Select } from "./select";
4
+ import { Textarea } from "./textArea";
5
+ import { SearchApi } from "./searchApi";
6
+ import { DateInput } from "./date";
7
+
8
+ const Fields = {
9
+ Input,
10
+ PhoneInput,
11
+ Select,
12
+ Textarea,
13
+ SearchApi,
14
+ DateInput,
15
+ };
16
+
17
+ export default Fields;