nextjs-cms 0.5.9 → 0.5.11

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 (258) hide show
  1. package/dist/api/axios/axiosInstance.d.ts +1 -1
  2. package/dist/api/axios/axiosInstance.js +8 -8
  3. package/dist/api/index.d.ts +855 -855
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/index.js +12 -12
  6. package/dist/api/lib/serverActions.d.ts +239 -239
  7. package/dist/api/lib/serverActions.d.ts.map +1 -1
  8. package/dist/api/lib/serverActions.js +834 -834
  9. package/dist/api/root.d.ts +828 -828
  10. package/dist/api/root.js +30 -30
  11. package/dist/api/routers/accountSettings.d.ts +60 -60
  12. package/dist/api/routers/accountSettings.js +108 -108
  13. package/dist/api/routers/admins.d.ts +105 -105
  14. package/dist/api/routers/admins.js +219 -219
  15. package/dist/api/routers/auth.d.ts +47 -47
  16. package/dist/api/routers/auth.js +25 -25
  17. package/dist/api/routers/categorySection.d.ts +103 -103
  18. package/dist/api/routers/categorySection.js +38 -38
  19. package/dist/api/routers/cmsSettings.d.ts +48 -48
  20. package/dist/api/routers/cmsSettings.js +51 -51
  21. package/dist/api/routers/cpanel.d.ts +83 -83
  22. package/dist/api/routers/cpanel.js +216 -216
  23. package/dist/api/routers/files.d.ts +47 -47
  24. package/dist/api/routers/files.js +23 -23
  25. package/dist/api/routers/gallery.d.ts +35 -35
  26. package/dist/api/routers/gallery.js +62 -62
  27. package/dist/api/routers/googleAnalytics.d.ts +30 -30
  28. package/dist/api/routers/googleAnalytics.js +7 -7
  29. package/dist/api/routers/hasItemsSection.d.ts +139 -139
  30. package/dist/api/routers/hasItemsSection.js +34 -34
  31. package/dist/api/routers/navigation.d.ts +51 -51
  32. package/dist/api/routers/navigation.js +11 -11
  33. package/dist/api/routers/simpleSection.d.ts +57 -57
  34. package/dist/api/routers/simpleSection.js +12 -12
  35. package/dist/api/trpc.d.ts +106 -106
  36. package/dist/api/trpc.js +72 -72
  37. package/dist/auth/axios/axiosInstance.d.ts +1 -1
  38. package/dist/auth/axios/axiosInstance.js +8 -8
  39. package/dist/auth/csrf.d.ts +29 -29
  40. package/dist/auth/csrf.js +76 -76
  41. package/dist/auth/hooks/index.d.ts +3 -3
  42. package/dist/auth/hooks/index.d.ts.map +1 -1
  43. package/dist/auth/hooks/index.js +3 -3
  44. package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
  45. package/dist/auth/hooks/useAxiosPrivate.js +74 -74
  46. package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
  47. package/dist/auth/hooks/useRefreshToken.js +79 -79
  48. package/dist/auth/index.d.ts +22 -22
  49. package/dist/auth/index.js +44 -44
  50. package/dist/auth/jwt.d.ts +5 -5
  51. package/dist/auth/jwt.js +25 -25
  52. package/dist/auth/lib/actions.d.ts +32 -32
  53. package/dist/auth/lib/actions.d.ts.map +1 -1
  54. package/dist/auth/lib/actions.js +209 -209
  55. package/dist/auth/lib/client.d.ts +3 -3
  56. package/dist/auth/lib/client.js +46 -46
  57. package/dist/auth/lib/index.d.ts +2 -2
  58. package/dist/auth/lib/index.d.ts.map +1 -1
  59. package/dist/auth/lib/index.js +2 -2
  60. package/dist/auth/react.d.ts +105 -105
  61. package/dist/auth/react.d.ts.map +1 -1
  62. package/dist/auth/react.js +347 -347
  63. package/dist/auth/trpc.d.ts +5 -5
  64. package/dist/auth/trpc.d.ts.map +1 -1
  65. package/dist/auth/trpc.js +81 -81
  66. package/dist/core/config/config-loader.d.ts +91 -91
  67. package/dist/core/config/config-loader.js +230 -230
  68. package/dist/core/config/index.d.ts +2 -2
  69. package/dist/core/config/index.d.ts.map +1 -1
  70. package/dist/core/config/index.js +1 -1
  71. package/dist/core/config/loader.d.ts +1 -1
  72. package/dist/core/config/loader.js +42 -42
  73. package/dist/core/db/index.d.ts +1 -1
  74. package/dist/core/db/index.d.ts.map +1 -1
  75. package/dist/core/db/index.js +1 -1
  76. package/dist/core/db/table-checker/DbTable.d.ts +5 -5
  77. package/dist/core/db/table-checker/DbTable.js +5 -5
  78. package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
  79. package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
  80. package/dist/core/db/table-checker/MysqlTable.js +94 -94
  81. package/dist/core/db/table-checker/index.d.ts +1 -1
  82. package/dist/core/db/table-checker/index.d.ts.map +1 -1
  83. package/dist/core/db/table-checker/index.js +1 -1
  84. package/dist/core/factories/FieldFactory.d.ts +123 -123
  85. package/dist/core/factories/FieldFactory.d.ts.map +1 -1
  86. package/dist/core/factories/FieldFactory.js +411 -411
  87. package/dist/core/factories/SectionFactory.d.ts +109 -109
  88. package/dist/core/factories/SectionFactory.d.ts.map +1 -1
  89. package/dist/core/factories/SectionFactory.js +415 -415
  90. package/dist/core/factories/index.d.ts +2 -2
  91. package/dist/core/factories/index.d.ts.map +1 -1
  92. package/dist/core/factories/index.js +2 -2
  93. package/dist/core/fields/checkbox.d.ts +62 -62
  94. package/dist/core/fields/checkbox.d.ts.map +1 -1
  95. package/dist/core/fields/checkbox.js +62 -62
  96. package/dist/core/fields/color.d.ts +83 -83
  97. package/dist/core/fields/color.d.ts.map +1 -1
  98. package/dist/core/fields/color.js +91 -91
  99. package/dist/core/fields/date.d.ts +99 -99
  100. package/dist/core/fields/date.d.ts.map +1 -1
  101. package/dist/core/fields/date.js +108 -108
  102. package/dist/core/fields/document.d.ts +179 -179
  103. package/dist/core/fields/document.d.ts.map +1 -1
  104. package/dist/core/fields/document.js +277 -277
  105. package/dist/core/fields/field-group.d.ts +17 -17
  106. package/dist/core/fields/field-group.d.ts.map +1 -1
  107. package/dist/core/fields/field-group.js +6 -6
  108. package/dist/core/fields/field.d.ts +125 -125
  109. package/dist/core/fields/field.d.ts.map +1 -1
  110. package/dist/core/fields/field.js +148 -148
  111. package/dist/core/fields/fileField.d.ts +14 -14
  112. package/dist/core/fields/fileField.d.ts.map +1 -1
  113. package/dist/core/fields/fileField.js +5 -5
  114. package/dist/core/fields/index.d.ts +64 -64
  115. package/dist/core/fields/index.d.ts.map +1 -1
  116. package/dist/core/fields/index.js +18 -18
  117. package/dist/core/fields/map.d.ts +166 -166
  118. package/dist/core/fields/map.d.ts.map +1 -1
  119. package/dist/core/fields/map.js +152 -152
  120. package/dist/core/fields/number.d.ts +185 -185
  121. package/dist/core/fields/number.d.ts.map +1 -1
  122. package/dist/core/fields/number.js +241 -241
  123. package/dist/core/fields/password.d.ts +108 -108
  124. package/dist/core/fields/password.d.ts.map +1 -1
  125. package/dist/core/fields/password.js +133 -133
  126. package/dist/core/fields/photo.d.ts +288 -288
  127. package/dist/core/fields/photo.d.ts.map +1 -1
  128. package/dist/core/fields/photo.js +410 -410
  129. package/dist/core/fields/richText.d.ts +294 -294
  130. package/dist/core/fields/richText.d.ts.map +1 -1
  131. package/dist/core/fields/richText.js +338 -338
  132. package/dist/core/fields/select.d.ts +365 -365
  133. package/dist/core/fields/select.d.ts.map +1 -1
  134. package/dist/core/fields/select.js +499 -499
  135. package/dist/core/fields/selectMultiple.d.ts +235 -235
  136. package/dist/core/fields/selectMultiple.d.ts.map +1 -1
  137. package/dist/core/fields/selectMultiple.js +417 -417
  138. package/dist/core/fields/tags.d.ts +130 -130
  139. package/dist/core/fields/tags.d.ts.map +1 -1
  140. package/dist/core/fields/tags.js +105 -105
  141. package/dist/core/fields/text.d.ts +135 -135
  142. package/dist/core/fields/text.d.ts.map +1 -1
  143. package/dist/core/fields/text.js +157 -157
  144. package/dist/core/fields/textArea.d.ts +106 -106
  145. package/dist/core/fields/textArea.d.ts.map +1 -1
  146. package/dist/core/fields/textArea.js +126 -126
  147. package/dist/core/fields/video.d.ts +147 -147
  148. package/dist/core/fields/video.d.ts.map +1 -1
  149. package/dist/core/fields/video.js +248 -248
  150. package/dist/core/helpers/entity.d.ts +7 -7
  151. package/dist/core/helpers/entity.js +27 -27
  152. package/dist/core/helpers/index.d.ts +4 -4
  153. package/dist/core/helpers/index.d.ts.map +1 -1
  154. package/dist/core/helpers/index.js +3 -3
  155. package/dist/core/index.d.ts +7 -7
  156. package/dist/core/index.d.ts.map +1 -1
  157. package/dist/core/index.js +7 -7
  158. package/dist/core/sections/category.d.ts +282 -282
  159. package/dist/core/sections/category.d.ts.map +1 -1
  160. package/dist/core/sections/category.js +147 -147
  161. package/dist/core/sections/hasItems.d.ts +631 -631
  162. package/dist/core/sections/hasItems.d.ts.map +1 -1
  163. package/dist/core/sections/hasItems.js +144 -144
  164. package/dist/core/sections/index.d.ts +4 -4
  165. package/dist/core/sections/index.d.ts.map +1 -1
  166. package/dist/core/sections/index.js +4 -4
  167. package/dist/core/sections/section.d.ts +225 -225
  168. package/dist/core/sections/section.d.ts.map +1 -1
  169. package/dist/core/sections/section.js +341 -341
  170. package/dist/core/sections/simple.d.ts +98 -98
  171. package/dist/core/sections/simple.d.ts.map +1 -1
  172. package/dist/core/sections/simple.js +95 -95
  173. package/dist/core/security/dom.d.ts +10 -10
  174. package/dist/core/security/dom.js +92 -92
  175. package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
  176. package/dist/core/submit/ItemEditSubmit.js +186 -186
  177. package/dist/core/submit/NewItemSubmit.d.ts +13 -13
  178. package/dist/core/submit/NewItemSubmit.js +93 -93
  179. package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
  180. package/dist/core/submit/SimpleSectionSubmit.js +93 -93
  181. package/dist/core/submit/index.d.ts +4 -4
  182. package/dist/core/submit/index.js +4 -4
  183. package/dist/core/submit/submit.d.ts +115 -115
  184. package/dist/core/submit/submit.js +479 -479
  185. package/dist/core/types/index.d.ts +279 -279
  186. package/dist/core/types/index.d.ts.map +1 -1
  187. package/dist/core/types/index.js +1 -1
  188. package/dist/db/client.d.ts +8 -8
  189. package/dist/db/client.d.ts.map +1 -1
  190. package/dist/db/client.js +19 -19
  191. package/dist/db/config.d.ts +5 -5
  192. package/dist/db/config.js +22 -22
  193. package/dist/db/drizzle.config.d.ts +5 -5
  194. package/dist/db/drizzle.config.js +18 -18
  195. package/dist/db/index.d.ts +2 -2
  196. package/dist/db/index.js +3 -3
  197. package/dist/db/schema.d.ts +638 -638
  198. package/dist/db/schema.js +73 -73
  199. package/dist/index.d.ts +7 -7
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +7 -7
  202. package/dist/translations/index.d.ts +2 -2
  203. package/dist/translations/index.js +15 -15
  204. package/dist/utils/CpanelApi.d.ts +24 -24
  205. package/dist/utils/CpanelApi.js +64 -64
  206. package/dist/utils/constants.d.ts +13 -13
  207. package/dist/utils/constants.js +61 -61
  208. package/dist/utils/index.d.ts +4 -4
  209. package/dist/utils/index.d.ts.map +1 -1
  210. package/dist/utils/index.js +4 -4
  211. package/dist/utils/utils.d.ts +59 -59
  212. package/dist/utils/utils.js +132 -132
  213. package/dist/validators/checkbox.d.ts +3 -3
  214. package/dist/validators/checkbox.d.ts.map +1 -1
  215. package/dist/validators/checkbox.js +12 -12
  216. package/dist/validators/color.d.ts +3 -3
  217. package/dist/validators/color.d.ts.map +1 -1
  218. package/dist/validators/color.js +7 -7
  219. package/dist/validators/date.d.ts +3 -3
  220. package/dist/validators/date.d.ts.map +1 -1
  221. package/dist/validators/date.js +5 -5
  222. package/dist/validators/document.d.ts +3 -3
  223. package/dist/validators/document.d.ts.map +1 -1
  224. package/dist/validators/document.js +57 -57
  225. package/dist/validators/index.d.ts +14 -14
  226. package/dist/validators/index.d.ts.map +1 -1
  227. package/dist/validators/index.js +14 -14
  228. package/dist/validators/map.d.ts +3 -3
  229. package/dist/validators/map.d.ts.map +1 -1
  230. package/dist/validators/map.js +5 -5
  231. package/dist/validators/number.d.ts +3 -3
  232. package/dist/validators/number.d.ts.map +1 -1
  233. package/dist/validators/number.js +20 -20
  234. package/dist/validators/password.d.ts +3 -3
  235. package/dist/validators/password.d.ts.map +1 -1
  236. package/dist/validators/password.js +11 -11
  237. package/dist/validators/photo.d.ts +3 -3
  238. package/dist/validators/photo.d.ts.map +1 -1
  239. package/dist/validators/photo.js +100 -100
  240. package/dist/validators/richText.d.ts +3 -3
  241. package/dist/validators/richText.d.ts.map +1 -1
  242. package/dist/validators/richText.js +8 -8
  243. package/dist/validators/select-multiple.d.ts +9 -9
  244. package/dist/validators/select-multiple.d.ts.map +1 -1
  245. package/dist/validators/select-multiple.js +20 -20
  246. package/dist/validators/select.d.ts +3 -3
  247. package/dist/validators/select.d.ts.map +1 -1
  248. package/dist/validators/select.js +5 -5
  249. package/dist/validators/text.d.ts +3 -3
  250. package/dist/validators/text.d.ts.map +1 -1
  251. package/dist/validators/text.js +7 -7
  252. package/dist/validators/textarea.d.ts +3 -3
  253. package/dist/validators/textarea.d.ts.map +1 -1
  254. package/dist/validators/textarea.js +7 -7
  255. package/dist/validators/video.d.ts +3 -3
  256. package/dist/validators/video.d.ts.map +1 -1
  257. package/dist/validators/video.js +57 -57
  258. package/package.json +4 -5
@@ -1,60 +1,60 @@
1
- import type { ClassValue } from 'clsx';
2
- /**
3
- * Function to merge Tailwind CSS classes
4
- * @param inputs
5
- */
6
- export declare function cn(...inputs: ClassValue[]): string;
7
- /**
8
- * Function to sanitize folder names
9
- * @param string
10
- */
11
- export declare const sanitizeFolderOrFileName: (string: string) => string;
12
- /**
13
- * Function to sanitize file names
14
- * @param string
15
- */
16
- export declare const sanitizeFileName: (string: string) => string;
17
- /**
18
- * Function to format a number with commas
19
- * @param number
20
- */
21
- export declare const formatNumber: (number: number) => string;
22
- /**
23
- * Function to convert a base64 string to a Blob
24
- * @param base64
25
- * @param contentType
26
- * @param stripHeader
27
- */
28
- export declare function base64ToBlob({ base64, contentType, stripHeader, }: {
29
- base64: string;
30
- contentType: string;
31
- stripHeader?: boolean;
32
- }): Blob;
33
- /**
34
- * Function to display a date in a human-readable format from a string
35
- * @param string
36
- * @param lang
37
- * @param displayWeekday
38
- * @param separator
39
- */
40
- export declare const displayDateFromString: (string: string, lang: string, displayWeekday: boolean, separator: "/" | ",") => string;
41
- /**
42
- * Function to display a date in a human-readable format from a Date object
43
- * @param date
44
- * @param lang
45
- * @param displayWeekday
46
- * @param separator
47
- */
48
- export declare const displayDateFromDate: (date: Date, lang: string, displayWeekday: boolean, separator: "/" | ",") => string;
49
- /**
50
- * Function to capitalize the first letter of a string or all words
51
- * @param input
52
- * @param allWords
53
- */
54
- export declare function capitalizeWords(input: string, allWords?: boolean): string;
55
- /**
56
- * Function to display a file size in a human-readable format
57
- * @param sizeInBytes
58
- */
59
- export declare function humanReadableFileSize(sizeInBytes: number, decimals?: number): string;
1
+ import type { ClassValue } from 'clsx';
2
+ /**
3
+ * Function to merge Tailwind CSS classes
4
+ * @param inputs
5
+ */
6
+ export declare function cn(...inputs: ClassValue[]): string;
7
+ /**
8
+ * Function to sanitize folder names
9
+ * @param string
10
+ */
11
+ export declare const sanitizeFolderOrFileName: (string: string) => string;
12
+ /**
13
+ * Function to sanitize file names
14
+ * @param string
15
+ */
16
+ export declare const sanitizeFileName: (string: string) => string;
17
+ /**
18
+ * Function to format a number with commas
19
+ * @param number
20
+ */
21
+ export declare const formatNumber: (number: number) => string;
22
+ /**
23
+ * Function to convert a base64 string to a Blob
24
+ * @param base64
25
+ * @param contentType
26
+ * @param stripHeader
27
+ */
28
+ export declare function base64ToBlob({ base64, contentType, stripHeader, }: {
29
+ base64: string;
30
+ contentType: string;
31
+ stripHeader?: boolean;
32
+ }): Blob;
33
+ /**
34
+ * Function to display a date in a human-readable format from a string
35
+ * @param string
36
+ * @param lang
37
+ * @param displayWeekday
38
+ * @param separator
39
+ */
40
+ export declare const displayDateFromString: (string: string, lang: string, displayWeekday: boolean, separator: "/" | ",") => string;
41
+ /**
42
+ * Function to display a date in a human-readable format from a Date object
43
+ * @param date
44
+ * @param lang
45
+ * @param displayWeekday
46
+ * @param separator
47
+ */
48
+ export declare const displayDateFromDate: (date: Date, lang: string, displayWeekday: boolean, separator: "/" | ",") => string;
49
+ /**
50
+ * Function to capitalize the first letter of a string or all words
51
+ * @param input
52
+ * @param allWords
53
+ */
54
+ export declare function capitalizeWords(input: string, allWords?: boolean): string;
55
+ /**
56
+ * Function to display a file size in a human-readable format
57
+ * @param sizeInBytes
58
+ */
59
+ export declare function humanReadableFileSize(sizeInBytes: number, decimals?: number): string;
60
60
  //# sourceMappingURL=utils.d.ts.map
@@ -1,132 +1,132 @@
1
- import { arabicMonths, arabicWeekDays } from "./constants.js";
2
- import { clsx } from 'clsx';
3
- import { twMerge } from 'tailwind-merge';
4
- /**
5
- * Function to merge Tailwind CSS classes
6
- * @param inputs
7
- */
8
- export function cn(...inputs) {
9
- return twMerge(clsx(inputs));
10
- }
11
- /**
12
- * Function to sanitize folder names
13
- * @param string
14
- */
15
- export const sanitizeFolderOrFileName = (string) => {
16
- // Replace any character that is not a letter, number, hyphen, or underscore with an empty string
17
- return string.replace(/[^a-zA-Z0-9-_]/g, '');
18
- };
19
- /**
20
- * Function to sanitize file names
21
- * @param string
22
- */
23
- export const sanitizeFileName = (string) => {
24
- // Replace any character that is not a letter, number, hyphen, underscore or a dot with an empty string
25
- return string.replace(/[^a-zA-Z0-9-_.]/g, '');
26
- };
27
- /**
28
- * Function to format a number with commas
29
- * @param number
30
- */
31
- export const formatNumber = (number) => {
32
- return Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(number);
33
- };
34
- // Nice approach too!
35
- /*export const b64toBlob = (base64: string, contentType = 'application/octet-stream') =>
36
- fetch(`data:${contentType};base64,${base64}`).then((res) => res.blob())*/
37
- /**
38
- * Function to convert a base64 string to a Blob
39
- * @param base64
40
- * @param contentType
41
- * @param stripHeader
42
- */
43
- export function base64ToBlob({ base64, contentType, stripHeader, }) {
44
- if (stripHeader) {
45
- // remove data:image/*;base64 at the beginning of the string
46
- base64 = base64.split(',')[1] || base64;
47
- }
48
- try {
49
- const binaryString = atob(base64);
50
- const len = binaryString.length;
51
- const bytes = new Uint8Array(len);
52
- for (let i = 0; i < len; i++) {
53
- bytes[i] = binaryString.charCodeAt(i);
54
- }
55
- return new Blob([bytes], { type: contentType });
56
- }
57
- catch (e) {
58
- return new Blob();
59
- }
60
- }
61
- /**
62
- * Function to display a date in a human-readable format from a string
63
- * @param string
64
- * @param lang
65
- * @param displayWeekday
66
- * @param separator
67
- */
68
- export const displayDateFromString = (string, lang, displayWeekday, separator) => {
69
- const date = new Date(string);
70
- return displayDateFromDate(date, lang, displayWeekday, separator);
71
- };
72
- /**
73
- * Function to display a date in a human-readable format from a Date object
74
- * @param date
75
- * @param lang
76
- * @param displayWeekday
77
- * @param separator
78
- */
79
- export const displayDateFromDate = (date, lang, displayWeekday, separator) => {
80
- const month = date.toLocaleString('en-US', { month: 'short' });
81
- const weekDay = date.toLocaleString('en-US', { weekday: 'short' });
82
- const day = date.toLocaleString('en-US', { day: '2-digit' });
83
- const year = date.getFullYear();
84
- let result = '';
85
- if (separator === ',') {
86
- result = `${lang === 'ar' ? arabicMonths[month] : month} ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day}, ${year}`;
87
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
88
- }
89
- else if (separator === '/') {
90
- result = `${lang === 'ar' ? arabicMonths[month] : month} / ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day} / ${year}`;
91
- }
92
- return result;
93
- };
94
- /**
95
- * Function to capitalize the first letter of a string or all words
96
- * @param input
97
- * @param allWords
98
- */
99
- export function capitalizeWords(input, allWords = true) {
100
- if (allWords) {
101
- // Capitalize all words
102
- return input
103
- .split(' ')
104
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
105
- .join(' ');
106
- }
107
- else {
108
- // Capitalize only the first word
109
- return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();
110
- }
111
- }
112
- /**
113
- * Function to display a file size in a human-readable format
114
- * @param sizeInBytes
115
- */
116
- export function humanReadableFileSize(sizeInBytes, decimals = 2) {
117
- const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
118
- let index = 0;
119
- // Scale down the size until it's less than 1024
120
- while (sizeInBytes >= 1024 && index < units.length - 1) {
121
- sizeInBytes /= 1024;
122
- index++;
123
- }
124
- // Handle zero case
125
- if (sizeInBytes === 0) {
126
- return `0 ${units[index]}`;
127
- }
128
- // Round to specified decimal places and remove trailing zeros
129
- const formatted = sizeInBytes.toFixed(decimals);
130
- const withoutTrailingZeros = parseFloat(formatted).toString();
131
- return `${withoutTrailingZeros} ${units[index]}`;
132
- }
1
+ import { arabicMonths, arabicWeekDays } from './constants.js';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ /**
5
+ * Function to merge Tailwind CSS classes
6
+ * @param inputs
7
+ */
8
+ export function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ /**
12
+ * Function to sanitize folder names
13
+ * @param string
14
+ */
15
+ export const sanitizeFolderOrFileName = (string) => {
16
+ // Replace any character that is not a letter, number, hyphen, or underscore with an empty string
17
+ return string.replace(/[^a-zA-Z0-9-_]/g, '');
18
+ };
19
+ /**
20
+ * Function to sanitize file names
21
+ * @param string
22
+ */
23
+ export const sanitizeFileName = (string) => {
24
+ // Replace any character that is not a letter, number, hyphen, underscore or a dot with an empty string
25
+ return string.replace(/[^a-zA-Z0-9-_.]/g, '');
26
+ };
27
+ /**
28
+ * Function to format a number with commas
29
+ * @param number
30
+ */
31
+ export const formatNumber = (number) => {
32
+ return Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(number);
33
+ };
34
+ // Nice approach too!
35
+ /*export const b64toBlob = (base64: string, contentType = 'application/octet-stream') =>
36
+ fetch(`data:${contentType};base64,${base64}`).then((res) => res.blob())*/
37
+ /**
38
+ * Function to convert a base64 string to a Blob
39
+ * @param base64
40
+ * @param contentType
41
+ * @param stripHeader
42
+ */
43
+ export function base64ToBlob({ base64, contentType, stripHeader, }) {
44
+ if (stripHeader) {
45
+ // remove data:image/*;base64 at the beginning of the string
46
+ base64 = base64.split(',')[1] || base64;
47
+ }
48
+ try {
49
+ const binaryString = atob(base64);
50
+ const len = binaryString.length;
51
+ const bytes = new Uint8Array(len);
52
+ for (let i = 0; i < len; i++) {
53
+ bytes[i] = binaryString.charCodeAt(i);
54
+ }
55
+ return new Blob([bytes], { type: contentType });
56
+ }
57
+ catch (e) {
58
+ return new Blob();
59
+ }
60
+ }
61
+ /**
62
+ * Function to display a date in a human-readable format from a string
63
+ * @param string
64
+ * @param lang
65
+ * @param displayWeekday
66
+ * @param separator
67
+ */
68
+ export const displayDateFromString = (string, lang, displayWeekday, separator) => {
69
+ const date = new Date(string);
70
+ return displayDateFromDate(date, lang, displayWeekday, separator);
71
+ };
72
+ /**
73
+ * Function to display a date in a human-readable format from a Date object
74
+ * @param date
75
+ * @param lang
76
+ * @param displayWeekday
77
+ * @param separator
78
+ */
79
+ export const displayDateFromDate = (date, lang, displayWeekday, separator) => {
80
+ const month = date.toLocaleString('en-US', { month: 'short' });
81
+ const weekDay = date.toLocaleString('en-US', { weekday: 'short' });
82
+ const day = date.toLocaleString('en-US', { day: '2-digit' });
83
+ const year = date.getFullYear();
84
+ let result = '';
85
+ if (separator === ',') {
86
+ result = `${lang === 'ar' ? arabicMonths[month] : month} ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day}, ${year}`;
87
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
88
+ }
89
+ else if (separator === '/') {
90
+ result = `${lang === 'ar' ? arabicMonths[month] : month} / ${displayWeekday ? (lang === 'ar' ? arabicWeekDays[weekDay] : weekDay) : ''} ${day} / ${year}`;
91
+ }
92
+ return result;
93
+ };
94
+ /**
95
+ * Function to capitalize the first letter of a string or all words
96
+ * @param input
97
+ * @param allWords
98
+ */
99
+ export function capitalizeWords(input, allWords = true) {
100
+ if (allWords) {
101
+ // Capitalize all words
102
+ return input
103
+ .split(' ')
104
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
105
+ .join(' ');
106
+ }
107
+ else {
108
+ // Capitalize only the first word
109
+ return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();
110
+ }
111
+ }
112
+ /**
113
+ * Function to display a file size in a human-readable format
114
+ * @param sizeInBytes
115
+ */
116
+ export function humanReadableFileSize(sizeInBytes, decimals = 2) {
117
+ const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
118
+ let index = 0;
119
+ // Scale down the size until it's less than 1024
120
+ while (sizeInBytes >= 1024 && index < units.length - 1) {
121
+ sizeInBytes /= 1024;
122
+ index++;
123
+ }
124
+ // Handle zero case
125
+ if (sizeInBytes === 0) {
126
+ return `0 ${units[index]}`;
127
+ }
128
+ // Round to specified decimal places and remove trailing zeros
129
+ const formatted = sizeInBytes.toFixed(decimals);
130
+ const withoutTrailingZeros = parseFloat(formatted).toString();
131
+ return `${withoutTrailingZeros} ${units[index]}`;
132
+ }
@@ -1,4 +1,4 @@
1
- import * as z from 'zod';
2
- import type { CheckboxFieldClientConfig } from "../core/fields.js";
3
- export declare const checkboxFieldSchema: (field: CheckboxFieldClientConfig) => z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodBoolean>>;
1
+ import * as z from 'zod';
2
+ import type { CheckboxFieldClientConfig } from '../core/fields/index.js';
3
+ export declare const checkboxFieldSchema: (field: CheckboxFieldClientConfig) => z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodBoolean>>;
4
4
  //# sourceMappingURL=checkbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/validators/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,oFASnE,CAAA"}
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/validators/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAExE,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,oFASnE,CAAA"}
@@ -1,12 +1,12 @@
1
- import * as z from 'zod';
2
- export const checkboxFieldSchema = (field) => {
3
- // Normalize typical form values
4
- const normalized = z.preprocess((v) => {
5
- if (v === 'on')
6
- return true; // HTML checked checkbox
7
- if (v === '' || v === null)
8
- return undefined; // treat as missing
9
- return v;
10
- }, z.boolean().optional());
11
- return field.required ? normalized.refine((v) => v === true, { message: 'Checkbox is required' }) : normalized; // allows undefined (unchecked) or a boolean if sent explicitly
12
- };
1
+ import * as z from 'zod';
2
+ export const checkboxFieldSchema = (field) => {
3
+ // Normalize typical form values
4
+ const normalized = z.preprocess((v) => {
5
+ if (v === 'on')
6
+ return true; // HTML checked checkbox
7
+ if (v === '' || v === null)
8
+ return undefined; // treat as missing
9
+ return v;
10
+ }, z.boolean().optional());
11
+ return field.required ? normalized.refine((v) => v === true, { message: 'Checkbox is required' }) : normalized; // allows undefined (unchecked) or a boolean if sent explicitly
12
+ };
@@ -1,4 +1,4 @@
1
- import * as z from 'zod';
2
- import type { ColorFieldClientConfig } from "../core/fields.js";
3
- export declare const colorFieldSchema: (field: ColorFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
1
+ import * as z from 'zod';
2
+ import type { ColorFieldClientConfig } from '../core/fields/index.js';
3
+ export declare const colorFieldSchema: (field: ColorFieldClientConfig) => z.ZodString | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
4
4
  //# sourceMappingURL=color.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/validators/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE5D,eAAO,MAAM,gBAAgB,GAAI,OAAO,sBAAsB,sFAM7D,CAAA"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/validators/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAErE,eAAO,MAAM,gBAAgB,GAAI,OAAO,sBAAsB,sFAM7D,CAAA"}
@@ -1,7 +1,7 @@
1
- import * as z from 'zod';
2
- export const colorFieldSchema = (field) => {
3
- const base = z.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, {
4
- message: 'Invalid color format, must be in hex format (#xxxxxx or #xxx)',
5
- });
6
- return field.required ? base : z.union([z.literal(''), base]).optional();
7
- };
1
+ import * as z from 'zod';
2
+ export const colorFieldSchema = (field) => {
3
+ const base = z.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, {
4
+ message: 'Invalid color format, must be in hex format (#xxxxxx or #xxx)',
5
+ });
6
+ return field.required ? base : z.union([z.literal(''), base]).optional();
7
+ };
@@ -1,4 +1,4 @@
1
- import * as z from 'zod';
2
- import type { DateFieldClientConfig } from "../core/fields.js";
3
- export declare const dateFieldSchema: (field: DateFieldClientConfig) => z.ZodDate | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodDate]>>;
1
+ import * as z from 'zod';
2
+ import type { DateFieldClientConfig } from '../core/fields/index.js';
3
+ export declare const dateFieldSchema: (field: DateFieldClientConfig) => z.ZodDate | z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodDate]>>;
4
4
  //# sourceMappingURL=date.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,eAAO,MAAM,eAAe,GAAI,OAAO,qBAAqB,kFAI3D,CAAA"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/validators/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,eAAO,MAAM,eAAe,GAAI,OAAO,qBAAqB,kFAI3D,CAAA"}
@@ -1,5 +1,5 @@
1
- import * as z from 'zod';
2
- export const dateFieldSchema = (field) => {
3
- const base = z.date();
4
- return field.required ? base : z.union([z.literal(''), base]).optional();
5
- };
1
+ import * as z from 'zod';
2
+ export const dateFieldSchema = (field) => {
3
+ const base = z.date();
4
+ return field.required ? base : z.union([z.literal(''), base]).optional();
5
+ };
@@ -1,4 +1,4 @@
1
- import * as z from 'zod';
2
- import type { DocumentFieldClientConfig } from "../core/fields.js";
3
- export declare const documentFieldSchema: (field: DocumentFieldClientConfig) => z.ZodCustom<File, File> | z.ZodOptional<z.ZodUnion<readonly [z.ZodNull, z.ZodUndefined, z.ZodCustom<File, File>]>>;
1
+ import * as z from 'zod';
2
+ import type { DocumentFieldClientConfig } from '../core/fields/index.js';
3
+ export declare const documentFieldSchema: (field: DocumentFieldClientConfig) => z.ZodCustom<File, File> | z.ZodOptional<z.ZodUnion<readonly [z.ZodNull, z.ZodUndefined, z.ZodCustom<File, File>]>>;
4
4
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/validators/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,uHA4DnE,CAAA"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/validators/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAExE,eAAO,MAAM,mBAAmB,GAAI,OAAO,yBAAyB,uHA4DnE,CAAA"}
@@ -1,57 +1,57 @@
1
- import * as z from 'zod';
2
- export const documentFieldSchema = (field) => {
3
- /**
4
- * Construct a custom schema for the photo field
5
- */
6
- const base = z.instanceof(File).superRefine(async (file, ctx) => {
7
- if (!file) {
8
- // If empty but the field is required, add an issue
9
- if (field.required) {
10
- ctx.addIssue({
11
- code: z.ZodIssueCode.custom,
12
- message: 'No file selected',
13
- });
14
- }
15
- return; // If it's not required, do nothing (no issue).
16
- }
17
- /**
18
- * File extension
19
- */
20
- if (!field.extensions.includes(file.name.split('.').pop())) {
21
- ctx.addIssue({
22
- code: z.ZodIssueCode.custom,
23
- message: `Invalid file extension. Supported extensions are: ${field.extensions.join(', ')}`,
24
- });
25
- }
26
- /**
27
- * File size
28
- * SECURITY: We read the actual blob size instead of relying on file.size
29
- * property, which can be overridden using Object.defineProperty()
30
- */
31
- const actualSize = await file.arrayBuffer().then((buf) => buf.byteLength);
32
- const maxSizeBytes = field.maxFileSize.size * (field.maxFileSize.unit === 'kb' ? 1024 : 1024 * 1024);
33
- if (actualSize > maxSizeBytes) {
34
- ctx.addIssue({
35
- code: 'too_big',
36
- maximum: maxSizeBytes,
37
- origin: 'number',
38
- inclusive: true,
39
- type: 'number',
40
- message: `File size should not exceed the maximum allowed size of ${field.maxFileSize.size} ${field.maxFileSize.unit}`,
41
- });
42
- }
43
- /**
44
- * Mime types
45
- */
46
- if (!field.mimeType.includes(file.type)) {
47
- ctx.addIssue({
48
- code: 'custom',
49
- message: `Invalid file type. Supported types are: ${field.mimeType.join(', ')}`,
50
- });
51
- }
52
- });
53
- /**
54
- * If not required, allow `undefined` (meaning "no file was provided at all").
55
- */
56
- return field.required ? base : z.union([z.null(), z.undefined(), base]).optional();
57
- };
1
+ import * as z from 'zod';
2
+ export const documentFieldSchema = (field) => {
3
+ /**
4
+ * Construct a custom schema for the photo field
5
+ */
6
+ const base = z.instanceof(File).superRefine(async (file, ctx) => {
7
+ if (!file) {
8
+ // If empty but the field is required, add an issue
9
+ if (field.required) {
10
+ ctx.addIssue({
11
+ code: z.ZodIssueCode.custom,
12
+ message: 'No file selected',
13
+ });
14
+ }
15
+ return; // If it's not required, do nothing (no issue).
16
+ }
17
+ /**
18
+ * File extension
19
+ */
20
+ if (!field.extensions.includes(file.name.split('.').pop())) {
21
+ ctx.addIssue({
22
+ code: z.ZodIssueCode.custom,
23
+ message: `Invalid file extension. Supported extensions are: ${field.extensions.join(', ')}`,
24
+ });
25
+ }
26
+ /**
27
+ * File size
28
+ * SECURITY: We read the actual blob size instead of relying on file.size
29
+ * property, which can be overridden using Object.defineProperty()
30
+ */
31
+ const actualSize = await file.arrayBuffer().then((buf) => buf.byteLength);
32
+ const maxSizeBytes = field.maxFileSize.size * (field.maxFileSize.unit === 'kb' ? 1024 : 1024 * 1024);
33
+ if (actualSize > maxSizeBytes) {
34
+ ctx.addIssue({
35
+ code: 'too_big',
36
+ maximum: maxSizeBytes,
37
+ origin: 'number',
38
+ inclusive: true,
39
+ type: 'number',
40
+ message: `File size should not exceed the maximum allowed size of ${field.maxFileSize.size} ${field.maxFileSize.unit}`,
41
+ });
42
+ }
43
+ /**
44
+ * Mime types
45
+ */
46
+ if (!field.mimeType.includes(file.type)) {
47
+ ctx.addIssue({
48
+ code: 'custom',
49
+ message: `Invalid file type. Supported types are: ${field.mimeType.join(', ')}`,
50
+ });
51
+ }
52
+ });
53
+ /**
54
+ * If not required, allow `undefined` (meaning "no file was provided at all").
55
+ */
56
+ return field.required ? base : z.union([z.null(), z.undefined(), base]).optional();
57
+ };
@@ -1,15 +1,15 @@
1
- export * from "./checkbox.js";
2
- export * from "./color.js";
3
- export * from "./date.js";
4
- export * from "./document.js";
5
- export * from "./map.js";
6
- export * from "./number.js";
7
- export * from "./password.js";
8
- export * from "./photo.js";
9
- export * from "./richText.js";
10
- export * from "./select.js";
11
- export * from "./select-multiple.js";
12
- export * from "./text.js";
13
- export * from "./textarea.js";
14
- export * from "./video.js";
1
+ export * from './checkbox.js';
2
+ export * from './color.js';
3
+ export * from './date.js';
4
+ export * from './document.js';
5
+ export * from './map.js';
6
+ export * from './number.js';
7
+ export * from './password.js';
8
+ export * from './photo.js';
9
+ export * from './richText.js';
10
+ export * from './select.js';
11
+ export * from './select-multiple.js';
12
+ export * from './text.js';
13
+ export * from './textarea.js';
14
+ export * from './video.js';
15
15
  //# sourceMappingURL=index.d.ts.map