@js-empire/emperor-ui 1.3.5 → 1.3.7

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 (318) hide show
  1. package/dist/emperor-ui.js +60624 -157
  2. package/dist/emperor-ui.umd.cjs +17 -17
  3. package/dist/index.d.ts +3 -0
  4. package/package.json +7 -3
  5. package/.cursor/rules/code-conventions.mdc +0 -50
  6. package/.husky/pre-commit +0 -4
  7. package/.prettierrc +0 -10
  8. package/.storybook/main.ts +0 -24
  9. package/.storybook/preview.ts +0 -19
  10. package/.storybook/vitest.setup.ts +0 -7
  11. package/.vscode/extensions.json +0 -1
  12. package/dist/index-31cOfB5-.js +0 -290
  13. package/dist/index-BwRbIPvN.js +0 -60566
  14. package/dist/index-DOyt37_Z.js +0 -5
  15. package/dist/src-UW24ZMRV-DMRqgyf4.js +0 -5
  16. package/eslint.config.js +0 -34
  17. package/index.html +0 -13
  18. package/public/icons/emperor-ui-logo.ico +0 -0
  19. package/public/images/avatar-female.jpg +0 -0
  20. package/public/images/avatar-male.jpg +0 -0
  21. package/public/images/emperor-ui-logo.png +0 -0
  22. package/src/animations/blink.ts +0 -26
  23. package/src/animations/floating.ts +0 -12
  24. package/src/animations/index.ts +0 -2
  25. package/src/components/atoms/brand/brand.stories.tsx +0 -27
  26. package/src/components/atoms/brand/brand.tsx +0 -56
  27. package/src/components/atoms/brand/index.ts +0 -1
  28. package/src/components/atoms/brand/styles/classes.ts +0 -9
  29. package/src/components/atoms/brand/styles/index.ts +0 -2
  30. package/src/components/atoms/brand/styles/styles.ts +0 -0
  31. package/src/components/atoms/color-picker/color-picker.tsx +0 -12
  32. package/src/components/atoms/color-picker/free-color-picker.tsx +0 -58
  33. package/src/components/atoms/color-picker/index.ts +0 -3
  34. package/src/components/atoms/color-picker/preset-color-picker.tsx +0 -66
  35. package/src/components/atoms/color-picker/stories/color-picker.stories.tsx +0 -63
  36. package/src/components/atoms/column/column.stories.tsx +0 -37
  37. package/src/components/atoms/column/column.tsx +0 -21
  38. package/src/components/atoms/column/index.ts +0 -1
  39. package/src/components/atoms/container/column.stories.tsx +0 -37
  40. package/src/components/atoms/container/container.tsx +0 -28
  41. package/src/components/atoms/container/index.ts +0 -1
  42. package/src/components/atoms/copy-button/copy-button.tsx +0 -73
  43. package/src/components/atoms/copy-button/index.ts +0 -1
  44. package/src/components/atoms/copy-button/stories/copy-button.stories.tsx +0 -21
  45. package/src/components/atoms/field/field.tsx +0 -81
  46. package/src/components/atoms/field/index.ts +0 -3
  47. package/src/components/atoms/field/styles/classes.ts +0 -9
  48. package/src/components/atoms/field/styles/index.ts +0 -1
  49. package/src/components/atoms/field/units/autocomplete-field.tsx +0 -49
  50. package/src/components/atoms/field/units/checkbox-field.tsx +0 -35
  51. package/src/components/atoms/field/units/index.ts +0 -7
  52. package/src/components/atoms/field/units/input-field.tsx +0 -35
  53. package/src/components/atoms/field/units/radio-field.tsx +0 -43
  54. package/src/components/atoms/field/units/select-field.tsx +0 -50
  55. package/src/components/atoms/field/units/switch-field.tsx +0 -35
  56. package/src/components/atoms/field/units/textarea-field.tsx +0 -37
  57. package/src/components/atoms/filter/filter.tsx +0 -93
  58. package/src/components/atoms/filter/index.ts +0 -3
  59. package/src/components/atoms/filter/stories/filter.stories.tsx +0 -238
  60. package/src/components/atoms/filter/styles/classes.ts +0 -20
  61. package/src/components/atoms/filter/styles/index.ts +0 -1
  62. package/src/components/atoms/filter/units/autocomplete-filter.tsx +0 -66
  63. package/src/components/atoms/filter/units/checkbox-filter.tsx +0 -42
  64. package/src/components/atoms/filter/units/checkbox-group-filter.tsx +0 -68
  65. package/src/components/atoms/filter/units/date-filter.tsx +0 -46
  66. package/src/components/atoms/filter/units/index.ts +0 -9
  67. package/src/components/atoms/filter/units/numeric-filter.tsx +0 -41
  68. package/src/components/atoms/filter/units/range-filter.tsx +0 -65
  69. package/src/components/atoms/filter/units/search-filter.tsx +0 -53
  70. package/src/components/atoms/filter/units/select-filter.tsx +0 -57
  71. package/src/components/atoms/filter/units/switch-filter.tsx +0 -35
  72. package/src/components/atoms/index.ts +0 -11
  73. package/src/components/atoms/portal/index.ts +0 -1
  74. package/src/components/atoms/portal/portal.stories.tsx +0 -43
  75. package/src/components/atoms/portal/portal.tsx +0 -25
  76. package/src/components/atoms/row/index.ts +0 -1
  77. package/src/components/atoms/row/row.stories.tsx +0 -37
  78. package/src/components/atoms/row/row.tsx +0 -26
  79. package/src/components/atoms/theme-switch/index.ts +0 -1
  80. package/src/components/atoms/theme-switch/styles/classes.ts +0 -16
  81. package/src/components/atoms/theme-switch/styles/index.ts +0 -1
  82. package/src/components/atoms/theme-switch/theme-switch.stories.tsx +0 -26
  83. package/src/components/atoms/theme-switch/theme-switch.tsx +0 -54
  84. package/src/components/atoms/uploader/components/avatar-label.tsx +0 -102
  85. package/src/components/atoms/uploader/components/index.ts +0 -8
  86. package/src/components/atoms/uploader/components/upload-file-error-box.tsx +0 -40
  87. package/src/components/atoms/uploader/components/upload-file-input.tsx +0 -36
  88. package/src/components/atoms/uploader/components/upload-file-label.tsx +0 -92
  89. package/src/components/atoms/uploader/components/upload-file-listing.tsx +0 -64
  90. package/src/components/atoms/uploader/components/uploader-title.tsx +0 -21
  91. package/src/components/atoms/uploader/components/uploader.tsx +0 -58
  92. package/src/components/atoms/uploader/components/view-image-modal.tsx +0 -41
  93. package/src/components/atoms/uploader/index.ts +0 -1
  94. package/src/components/atoms/uploader/stories/uploader.stories.tsx +0 -201
  95. package/src/components/index.ts +0 -4
  96. package/src/components/molecules/index.ts +0 -4
  97. package/src/components/molecules/item-card/components/actions/index.ts +0 -3
  98. package/src/components/molecules/item-card/components/actions/item-actions-buttons.tsx +0 -43
  99. package/src/components/molecules/item-card/components/actions/item-actions-dropdown.tsx +0 -57
  100. package/src/components/molecules/item-card/components/actions/item-actions-overlay.tsx +0 -50
  101. package/src/components/molecules/item-card/components/additions/index.ts +0 -2
  102. package/src/components/molecules/item-card/components/additions/item-banner.tsx +0 -22
  103. package/src/components/molecules/item-card/components/additions/loading-item.tsx +0 -88
  104. package/src/components/molecules/item-card/components/card/index.ts +0 -4
  105. package/src/components/molecules/item-card/components/card/item-card-body.tsx +0 -74
  106. package/src/components/molecules/item-card/components/card/item-card-footer.tsx +0 -79
  107. package/src/components/molecules/item-card/components/card/item-card-header.tsx +0 -69
  108. package/src/components/molecules/item-card/components/card/item-card.tsx +0 -123
  109. package/src/components/molecules/item-card/components/index.ts +0 -3
  110. package/src/components/molecules/item-card/index.ts +0 -2
  111. package/src/components/molecules/item-card/stories/item-card.stories.tsx +0 -218
  112. package/src/components/molecules/item-card/styles/classes.ts +0 -141
  113. package/src/components/molecules/item-card/styles/index.ts +0 -1
  114. package/src/components/molecules/nav-bar/index.ts +0 -3
  115. package/src/components/molecules/nav-bar/nav-bar-item.tsx +0 -64
  116. package/src/components/molecules/nav-bar/nav-bar.tsx +0 -57
  117. package/src/components/molecules/nav-bar/stories/hover-effect/nav-bar-hover-effect.stories.tsx +0 -52
  118. package/src/components/molecules/nav-bar/stories/nav-bar.stories.tsx +0 -50
  119. package/src/components/molecules/nav-bar/styles/classes.ts +0 -68
  120. package/src/components/molecules/nav-bar/styles/index.ts +0 -2
  121. package/src/components/molecules/nav-bar/styles/styles.ts +0 -85
  122. package/src/components/molecules/nav-bar/sub-items-box.tsx +0 -58
  123. package/src/components/molecules/scaffold/index.ts +0 -2
  124. package/src/components/molecules/scaffold/scaffold.stories.tsx +0 -21
  125. package/src/components/molecules/scaffold/scaffold.tsx +0 -23
  126. package/src/components/molecules/scaffold/styles/index.ts +0 -1
  127. package/src/components/molecules/scaffold/styles/scaffold-classes.ts +0 -10
  128. package/src/components/molecules/side-bar/compact-side-bar.tsx +0 -77
  129. package/src/components/molecules/side-bar/index.ts +0 -1
  130. package/src/components/molecules/side-bar/side-bar-drawer.tsx +0 -113
  131. package/src/components/molecules/side-bar/side-bar.stories.tsx +0 -111
  132. package/src/components/molecules/side-bar/side-bar.tsx +0 -31
  133. package/src/components/molecules/side-bar/styles/classes.ts +0 -28
  134. package/src/components/molecules/side-bar/styles/index.ts +0 -2
  135. package/src/components/molecules/side-bar/styles/styles.ts +0 -13
  136. package/src/components/organisms/deletion-confirmor/deletion-confirmor.tsx +0 -110
  137. package/src/components/organisms/deletion-confirmor/index.ts +0 -3
  138. package/src/components/organisms/deletion-confirmor/stories/components.tsx +0 -25
  139. package/src/components/organisms/deletion-confirmor/stories/deletion-confirmor.stories.tsx +0 -78
  140. package/src/components/organisms/deletion-confirmor/styles/classes.ts +0 -28
  141. package/src/components/organisms/deletion-confirmor/styles/index.ts +0 -2
  142. package/src/components/organisms/deletion-confirmor/styles/styles.ts +0 -4
  143. package/src/components/organisms/footer/copy-rights-box.tsx +0 -27
  144. package/src/components/organisms/footer/footer.tsx +0 -75
  145. package/src/components/organisms/footer/index.ts +0 -5
  146. package/src/components/organisms/footer/policies-box.tsx +0 -27
  147. package/src/components/organisms/footer/quick-links-box.tsx +0 -46
  148. package/src/components/organisms/footer/social-links-box.tsx +0 -33
  149. package/src/components/organisms/footer/stories/footer.stories.tsx +0 -61
  150. package/src/components/organisms/footer/styles/classes.ts +0 -71
  151. package/src/components/organisms/footer/styles/index.ts +0 -2
  152. package/src/components/organisms/footer/styles/styles.ts +0 -6
  153. package/src/components/organisms/form-builder/form-builder.stories.tsx +0 -144
  154. package/src/components/organisms/form-builder/form-builder.tsx +0 -75
  155. package/src/components/organisms/form-builder/index.ts +0 -1
  156. package/src/components/organisms/header/header.tsx +0 -87
  157. package/src/components/organisms/header/index.ts +0 -1
  158. package/src/components/organisms/header/segmented-header-content.tsx +0 -29
  159. package/src/components/organisms/header/stories/header.stories.tsx +0 -144
  160. package/src/components/organisms/header/styles/classes.ts +0 -22
  161. package/src/components/organisms/header/styles/index.ts +0 -2
  162. package/src/components/organisms/header/styles/styles.ts +0 -39
  163. package/src/components/organisms/index.ts +0 -6
  164. package/src/components/organisms/item-details/index.ts +0 -1
  165. package/src/components/organisms/item-details/item-details.tsx +0 -6
  166. package/src/components/organisms/listings/empty-listings.tsx +0 -80
  167. package/src/components/organisms/listings/index.ts +0 -3
  168. package/src/components/organisms/listings/listings.tsx +0 -96
  169. package/src/components/organisms/listings/stories/grid-listings.stories.tsx +0 -153
  170. package/src/components/organisms/listings/stories/list-listings.stories.tsx +0 -171
  171. package/src/components/organisms/listings/styles/classes.ts +0 -49
  172. package/src/components/organisms/listings/styles/index.ts +0 -2
  173. package/src/components/organisms/listings/styles/styles.ts +0 -6
  174. package/src/components/templates/index.ts +0 -1
  175. package/src/components/templates/landing-page/index.ts +0 -1
  176. package/src/components/templates/landing-page/landing-page.stories.tsx +0 -21
  177. package/src/components/templates/landing-page/landing-page.tsx +0 -57
  178. package/src/components/templates/landing-page/styles/classes.ts +0 -11
  179. package/src/components/templates/landing-page/styles/index.ts +0 -1
  180. package/src/constants/animations.ts +0 -14
  181. package/src/constants/card.tsx +0 -42
  182. package/src/constants/defaults.ts +0 -59
  183. package/src/constants/fake.ts +0 -5
  184. package/src/constants/footer.tsx +0 -157
  185. package/src/constants/index.ts +0 -6
  186. package/src/constants/uploader.ts +0 -27
  187. package/src/context/emperor-ui-context.ts +0 -6
  188. package/src/context/form-builder-context.tsx +0 -8
  189. package/src/context/index.ts +0 -4
  190. package/src/context/navigation-context.ts +0 -6
  191. package/src/context/uploader-context.ts +0 -6
  192. package/src/enums/index.ts +0 -2
  193. package/src/enums/placeholders.ts +0 -4
  194. package/src/enums/preserved-keys.ts +0 -3
  195. package/src/examples/index.ts +0 -1
  196. package/src/hooks/index.ts +0 -8
  197. package/src/hooks/use-emperor-ui.ts +0 -12
  198. package/src/hooks/use-filters.ts +0 -20
  199. package/src/hooks/use-form-builder-context.ts +0 -16
  200. package/src/hooks/use-navigation.ts +0 -12
  201. package/src/hooks/use-search-params-handler.tsx +0 -186
  202. package/src/hooks/use-uploader-context.ts +0 -14
  203. package/src/hooks/use-uploader.tsx +0 -164
  204. package/src/hooks/use-window-size.tsx +0 -53
  205. package/src/i18n/configs/i18n.ts +0 -7
  206. package/src/i18n/configs/index.ts +0 -1
  207. package/src/i18n/constants/index.ts +0 -1
  208. package/src/i18n/constants/locales.ts +0 -4
  209. package/src/i18n/index.ts +0 -5
  210. package/src/i18n/locales/ar.ts +0 -15
  211. package/src/i18n/locales/atoms/ar.ts +0 -18
  212. package/src/i18n/locales/atoms/en.ts +0 -18
  213. package/src/i18n/locales/atoms/index.ts +0 -2
  214. package/src/i18n/locales/common/ar.ts +0 -1
  215. package/src/i18n/locales/common/en.ts +0 -1
  216. package/src/i18n/locales/common/index.ts +0 -2
  217. package/src/i18n/locales/en.ts +0 -15
  218. package/src/i18n/locales/index.ts +0 -4
  219. package/src/i18n/locales/molecules/ar.ts +0 -1
  220. package/src/i18n/locales/molecules/en.ts +0 -1
  221. package/src/i18n/locales/molecules/index.ts +0 -2
  222. package/src/i18n/locales/organisms/ar.ts +0 -11
  223. package/src/i18n/locales/organisms/en.ts +0 -11
  224. package/src/i18n/locales/organisms/index.ts +0 -2
  225. package/src/i18n/locales/templates/ar.ts +0 -1
  226. package/src/i18n/locales/templates/en.ts +0 -1
  227. package/src/i18n/locales/templates/index.ts +0 -2
  228. package/src/i18n/locales/toasts/ar.ts +0 -1
  229. package/src/i18n/locales/toasts/en.ts +0 -1
  230. package/src/i18n/locales/toasts/index.ts +0 -2
  231. package/src/i18n/types/index.ts +0 -2
  232. package/src/i18n/types/locale.ts +0 -5
  233. package/src/i18n/types/toasts.ts +0 -3
  234. package/src/i18n/utils/get-locales.ts +0 -4
  235. package/src/i18n/utils/index.ts +0 -2
  236. package/src/i18n/utils/localize.ts +0 -15
  237. package/src/index.ts +0 -12
  238. package/src/mocks/constants.ts +0 -103
  239. package/src/mocks/deletion-confirmor.ts +0 -16
  240. package/src/mocks/header.tsx +0 -118
  241. package/src/mocks/index.ts +0 -6
  242. package/src/mocks/listings.tsx +0 -154
  243. package/src/mocks/locales/index.ts +0 -1
  244. package/src/mocks/locales/uploader.ts +0 -33
  245. package/src/mocks/types.ts +0 -64
  246. package/src/providers/config-provider.tsx +0 -72
  247. package/src/providers/emperor-ui-provider.tsx +0 -35
  248. package/src/providers/form-builder-provider-context.tsx +0 -18
  249. package/src/providers/index.ts +0 -6
  250. package/src/providers/navigation-provider.tsx +0 -42
  251. package/src/providers/theme-provider.tsx +0 -16
  252. package/src/providers/uploader-provider.tsx +0 -53
  253. package/src/styles/globals.css +0 -38
  254. package/src/styles/hero.ts +0 -3
  255. package/src/styles/index.css +0 -18
  256. package/src/types/components/atoms/brand.ts +0 -13
  257. package/src/types/components/atoms/color-picker/color-picker.ts +0 -21
  258. package/src/types/components/atoms/color-picker/index.ts +0 -1
  259. package/src/types/components/atoms/column.ts +0 -3
  260. package/src/types/components/atoms/container.ts +0 -3
  261. package/src/types/components/atoms/field/field.ts +0 -61
  262. package/src/types/components/atoms/field/index.ts +0 -1
  263. package/src/types/components/atoms/filter/filter.ts +0 -52
  264. package/src/types/components/atoms/filter/index.ts +0 -2
  265. package/src/types/components/atoms/filter/select-filter.ts +0 -8
  266. package/src/types/components/atoms/index.ts +0 -9
  267. package/src/types/components/atoms/portal.ts +0 -6
  268. package/src/types/components/atoms/row.ts +0 -3
  269. package/src/types/components/atoms/uploader.ts +0 -102
  270. package/src/types/components/index.ts +0 -4
  271. package/src/types/components/molecules/footer/footer.ts +0 -68
  272. package/src/types/components/molecules/footer/index.ts +0 -1
  273. package/src/types/components/molecules/header/header.ts +0 -51
  274. package/src/types/components/molecules/header/index.ts +0 -1
  275. package/src/types/components/molecules/index.ts +0 -9
  276. package/src/types/components/molecules/item-card/index.ts +0 -1
  277. package/src/types/components/molecules/item-card/item-card.ts +0 -69
  278. package/src/types/components/molecules/item-details/index.ts +0 -1
  279. package/src/types/components/molecules/item-details/item-details.ts +0 -9
  280. package/src/types/components/molecules/listings/index.ts +0 -1
  281. package/src/types/components/molecules/listings/listings.ts +0 -29
  282. package/src/types/components/molecules/nav-bar/index.ts +0 -1
  283. package/src/types/components/molecules/nav-bar/nav-bar.ts +0 -66
  284. package/src/types/components/molecules/scaffold/index.ts +0 -1
  285. package/src/types/components/molecules/scaffold/scaffold.ts +0 -9
  286. package/src/types/components/molecules/side-bar/index.ts +0 -1
  287. package/src/types/components/molecules/side-bar/side-bar.ts +0 -40
  288. package/src/types/components/molecules/theme-switch/index.ts +0 -1
  289. package/src/types/components/molecules/theme-switch/theme-switch.ts +0 -9
  290. package/src/types/components/organisms/deletion-confirmor/deletion-confirmor.ts +0 -22
  291. package/src/types/components/organisms/deletion-confirmor/index.ts +0 -1
  292. package/src/types/components/organisms/filters/filters.ts +0 -11
  293. package/src/types/components/organisms/filters/index.ts +0 -1
  294. package/src/types/components/organisms/form-builder/context.ts +0 -6
  295. package/src/types/components/organisms/form-builder/form-builder.ts +0 -39
  296. package/src/types/components/organisms/form-builder/index.ts +0 -2
  297. package/src/types/components/organisms/index.ts +0 -3
  298. package/src/types/components/templates/index.ts +0 -1
  299. package/src/types/components/templates/landing-page.ts +0 -10
  300. package/src/types/context/config.ts +0 -24
  301. package/src/types/context/index.ts +0 -4
  302. package/src/types/context/localization.ts +0 -24
  303. package/src/types/context/navigation.ts +0 -17
  304. package/src/types/context/theme.ts +0 -33
  305. package/src/types/index.ts +0 -3
  306. package/src/types/shared/components.ts +0 -13
  307. package/src/types/shared/index.ts +0 -1
  308. package/src/utils/cn.ts +0 -6
  309. package/src/utils/compress-images.ts +0 -36
  310. package/src/utils/index.ts +0 -5
  311. package/src/utils/locales.ts +0 -54
  312. package/src/utils/storybook.tsx +0 -15
  313. package/src/utils/uploader.ts +0 -167
  314. package/tsconfig.app.json +0 -37
  315. package/tsconfig.json +0 -7
  316. package/tsconfig.node.json +0 -25
  317. package/vite.config.ts +0 -44
  318. package/vitest.shims.d.ts +0 -1
@@ -1,2 +0,0 @@
1
- export * from "./preserved-keys";
2
- export * from "./placeholders";
@@ -1,4 +0,0 @@
1
- export enum Placeholders {
2
- PLACEHOLDER_MALE_AVATAR = "/images/placeholder-male-avatar.png",
3
- PLACEHOLDER_FEMALE_AVATAR = "/images/placeholder-female-avatar.png",
4
- }
@@ -1,3 +0,0 @@
1
- export enum PreservedKeys {
2
- COMPACT_SIDEBAR_ID = "emperor-compact-sidebar",
3
- }
@@ -1 +0,0 @@
1
- export * from "./";
@@ -1,8 +0,0 @@
1
- export * from "./use-emperor-ui";
2
- export * from "./use-navigation";
3
- export * from "./use-search-params-handler";
4
- export * from "./use-uploader-context";
5
- export * from "./use-uploader";
6
- export * from "./use-window-size";
7
- export * from "./use-filters";
8
- export * from "./use-form-builder-context";
@@ -1,12 +0,0 @@
1
- import { EmperorUIContext } from "@/context";
2
- import { useContext } from "react";
3
-
4
- export function useEmperorUI() {
5
- const context = useContext(EmperorUIContext);
6
-
7
- if (!context) {
8
- throw new Error("useEmperorUI must be used within a EmperorUIProvider");
9
- }
10
-
11
- return context;
12
- }
@@ -1,20 +0,0 @@
1
- "use client";
2
-
3
- import { useMemo } from "react";
4
- import { useSearchParamsHandler } from "@/hooks";
5
-
6
- export function useFilters<
7
- FiltersType extends Record<string, string | number | boolean>,
8
- >() {
9
- const { allParams, clearParams } = useSearchParamsHandler();
10
-
11
- const filters = useMemo(() => {
12
- if (!Object.keys(allParams).length) {
13
- return null;
14
- }
15
-
16
- return allParams as unknown as FiltersType;
17
- }, [allParams]);
18
-
19
- return { filters, clearFilters: clearParams };
20
- }
@@ -1,16 +0,0 @@
1
- import { FormBuilderContext } from "@/context";
2
- import { FormBuilderValue } from "@/types";
3
- import { useContext } from "react";
4
- import { FieldValues } from "react-hook-form";
5
-
6
- export function useFormBuilder<TSchema extends FieldValues>() {
7
- const context = useContext(FormBuilderContext) as FormBuilderValue<TSchema>;
8
-
9
- if (!context) {
10
- throw new Error(
11
- "'useFormBuilder' must be used within a 'FormBuilderProvider', make sure to wrap 'Field' components with 'FormBuilder' as well.",
12
- );
13
- }
14
-
15
- return context;
16
- }
@@ -1,12 +0,0 @@
1
- import { NavigationContext } from "@/context";
2
- import { useContext } from "react";
3
-
4
- export function useNavigation() {
5
- const context = useContext(NavigationContext);
6
-
7
- if (!context) {
8
- throw new Error("useNavigation must be used within a NavigationProvider");
9
- }
10
-
11
- return context;
12
- }
@@ -1,186 +0,0 @@
1
- "use client";
2
-
3
- import { useCallback, useEffect, useState } from "react";
4
-
5
- const URL_SEARCH_PARAMS_CHANGE_EVENT = "URLSearchParamsChange";
6
-
7
- export function useSearchParamsHandler() {
8
- const getAllParams = useCallback((): Record<string, string> => {
9
- if (typeof window === "undefined") {
10
- return {};
11
- }
12
-
13
- const currentSearchParams = new URLSearchParams(window.location.search);
14
-
15
- return Array.from(currentSearchParams.entries()).reduce<
16
- Record<string, string>
17
- >((paramsRecord, [key, value]) => {
18
- paramsRecord[key] = value;
19
- return paramsRecord;
20
- }, {});
21
- }, []);
22
-
23
- const [allParams, setAllParams] = useState<Record<string, string>>(() =>
24
- getAllParams(),
25
- );
26
-
27
- const updateUrlSearchParams = useCallback(
28
- ({ searchParams }: { searchParams: URLSearchParams }) => {
29
- if (typeof window === "undefined") return;
30
-
31
- const searchParamsString = searchParams.toString();
32
- const searchPath = searchParamsString ? `?${searchParamsString}` : "";
33
- const newPath = `${window.location.pathname}${searchPath}${window.location.hash}`;
34
- const currentPath = `${window.location.pathname}${window.location.search}${window.location.hash}`;
35
-
36
- if (newPath === currentPath) return;
37
-
38
- window.history.replaceState(window.history.state, "", newPath);
39
- window.dispatchEvent(new Event(URL_SEARCH_PARAMS_CHANGE_EVENT));
40
- },
41
- [],
42
- );
43
-
44
- const setParams = useCallback(
45
- ({
46
- params,
47
- options = { replace: true },
48
- }: {
49
- params: Record<string, string | number | boolean | undefined | null>;
50
- options?: { replace?: boolean };
51
- }) => {
52
- if (typeof window === "undefined") return;
53
-
54
- const nextSearchParams = new URLSearchParams(window.location.search);
55
- let hasChanges = false;
56
-
57
- Object.entries(params).forEach(([key, value]) => {
58
- if (value === undefined || value === null || value === "") {
59
- const hasKey = nextSearchParams.has(key);
60
- nextSearchParams.delete(key);
61
- if (hasKey) {
62
- hasChanges = true;
63
- }
64
- return;
65
- }
66
-
67
- const serializedValue = String(value);
68
-
69
- if (options.replace) {
70
- const existingValues = nextSearchParams.getAll(key);
71
- const isAlreadyReplaced =
72
- existingValues.length === 1 &&
73
- existingValues[0] === serializedValue;
74
-
75
- if (isAlreadyReplaced) {
76
- return;
77
- }
78
-
79
- nextSearchParams.delete(key);
80
- nextSearchParams.append(key, serializedValue);
81
- hasChanges = true;
82
- return;
83
- }
84
-
85
- const existingValues = nextSearchParams.getAll(key);
86
- const hasMatchingValue = existingValues.some(
87
- (existingValue) => existingValue === serializedValue,
88
- );
89
-
90
- if (!hasMatchingValue) {
91
- nextSearchParams.append(key, serializedValue);
92
- hasChanges = true;
93
- }
94
- });
95
-
96
- if (!hasChanges) return;
97
-
98
- updateUrlSearchParams({ searchParams: nextSearchParams });
99
- },
100
- // eslint-disable-next-line react-hooks/exhaustive-deps
101
- [],
102
- );
103
-
104
- const deleteParam = useCallback(
105
- ({ key }: { key: string }) => {
106
- if (typeof window === "undefined") {
107
- return;
108
- }
109
-
110
- const nextSearchParams = new URLSearchParams(window.location.search);
111
- nextSearchParams.delete(key);
112
- updateUrlSearchParams({ searchParams: nextSearchParams });
113
- },
114
- // eslint-disable-next-line react-hooks/exhaustive-deps
115
- [],
116
- );
117
-
118
- const deleteParams = useCallback(
119
- ({ keys }: { keys: string[] }) => {
120
- if (typeof window === "undefined") return;
121
-
122
- const nextSearchParams = new URLSearchParams(window.location.search);
123
- let hasChanges = false;
124
- keys.forEach((key) => {
125
- const hasKey = nextSearchParams.has(key);
126
- nextSearchParams.delete(key);
127
- if (hasKey) {
128
- hasChanges = true;
129
- }
130
- });
131
-
132
- if (!hasChanges) {
133
- return;
134
- }
135
-
136
- updateUrlSearchParams({ searchParams: nextSearchParams });
137
- },
138
- // eslint-disable-next-line react-hooks/exhaustive-deps
139
- [],
140
- );
141
-
142
- const clearParams = useCallback(() => {
143
- if (typeof window === "undefined") return;
144
-
145
- if (!window.location.search) {
146
- return;
147
- }
148
-
149
- updateUrlSearchParams({ searchParams: new URLSearchParams() });
150
- }, [updateUrlSearchParams]);
151
-
152
- const getParam = useCallback((name: string) => {
153
- if (typeof window === "undefined") return null;
154
-
155
- const currentSearchParams = new URLSearchParams(window.location.search);
156
- return currentSearchParams.get(name);
157
- }, []);
158
-
159
- useEffect(() => {
160
- if (typeof window === "undefined") {
161
- return;
162
- }
163
-
164
- const syncAllParams = () => {
165
- setAllParams(getAllParams());
166
- };
167
-
168
- syncAllParams();
169
- window.addEventListener("popstate", syncAllParams);
170
- window.addEventListener(URL_SEARCH_PARAMS_CHANGE_EVENT, syncAllParams);
171
-
172
- return () => {
173
- window.removeEventListener("popstate", syncAllParams);
174
- window.removeEventListener(URL_SEARCH_PARAMS_CHANGE_EVENT, syncAllParams);
175
- };
176
- }, [getAllParams]);
177
-
178
- return {
179
- getParam,
180
- allParams,
181
- setParams,
182
- deleteParam,
183
- deleteParams,
184
- clearParams,
185
- };
186
- }
@@ -1,14 +0,0 @@
1
- import { UploaderContext } from "@/context";
2
- import { useContext } from "react";
3
-
4
- export function useUploaderContext() {
5
- const context = useContext(UploaderContext);
6
-
7
- if (!context) {
8
- throw new Error(
9
- "useUploaderContext must be used within a UploaderProvider",
10
- );
11
- }
12
-
13
- return context;
14
- }
@@ -1,164 +0,0 @@
1
- "use client";
2
-
3
- import { addToast } from "@heroui/toast";
4
- import { FileObject, UseUploadFileProps, UseUploadFileReturn } from "@/types";
5
- import { useState } from "react";
6
- import { useEmperorUI } from "@/hooks";
7
- import {
8
- validateUploadedFiles,
9
- getAllowedTypes,
10
- refineUploadedFiles,
11
- mergeUploaderLocale,
12
- } from "@/utils";
13
- import { ONE_MEGABYTE } from "@/constants";
14
- import { Locale, getLocales } from "@/i18n";
15
-
16
- export const useUploader = ({
17
- labelContent,
18
- labelId,
19
- fileTypes,
20
- isRequired = false,
21
- isDraggable = true,
22
- isMulti = false,
23
- preventDuplicates = true,
24
- maxCount = 10,
25
- maxFileSize = ONE_MEGABYTE * 10,
26
- compressFiles = false,
27
- onChange = () => {},
28
- locales,
29
- }: UseUploadFileProps): UseUploadFileReturn => {
30
- const { config } = useEmperorUI();
31
- const [files, setFiles] = useState<FileObject[]>([]);
32
- const [isLoading, setIsLoading] = useState(false);
33
-
34
- const configLocales = config?.interLocalization?.locales;
35
- const lang =
36
- config?.interLocalization?.lang ||
37
- config?.interLocalization?.defaultLanguage ||
38
- "en";
39
-
40
- const defaultLocale = getLocales(lang);
41
- const uploaderLocale = mergeUploaderLocale({
42
- defaultUploaderLocale: defaultLocale.atoms.uploader,
43
- configUploaderLocale: (configLocales?.[lang] as Locale | undefined)?.atoms
44
- ?.uploader,
45
- contextUploaderLocale: locales,
46
- });
47
-
48
- // remove a specific uploaded file
49
- const handleClearFile = (fileName?: string) => {
50
- setFiles((prev) => prev?.filter((file) => file?.file?.name !== fileName));
51
-
52
- // Reset the input value to allow re-uploading the same file
53
- if (labelId) {
54
- const input = document.getElementById(labelId) as HTMLInputElement;
55
- if (input) {
56
- input.value = "";
57
- }
58
- }
59
- };
60
-
61
- // handle the uploading process including the window upload and the drag-and-drop upload
62
- const onInputChange = async (
63
- event: React.ChangeEvent<HTMLInputElement> &
64
- React.DragEvent<HTMLLabelElement>,
65
- ): Promise<void | string | null> => {
66
- console.log("files: ", event.target.files);
67
-
68
- if (
69
- (!event.target.files || !event.target.files?.[0]) &&
70
- (!event?.dataTransfer?.files || !event?.dataTransfer?.files[0])
71
- ) {
72
- return addToast({
73
- title: uploaderLocale.errorUploadingFile,
74
- });
75
- }
76
-
77
- // validate the file type according to the given allowed types
78
- const allowedTypes = getAllowedTypes(fileTypes);
79
-
80
- // verify if the files exist
81
- if (!event.target.files && !event.dataTransfer.files) return;
82
-
83
- // get the uploaded files
84
- const uploadedFiles = Array.from(
85
- event.target.files || event.dataTransfer.files,
86
- );
87
-
88
- // validate the files' length and prevent exceeded files only in the multiple-mode
89
- if (
90
- isMulti &&
91
- (uploadedFiles?.length > maxCount ||
92
- files?.length + uploadedFiles?.length > maxCount)
93
- ) {
94
- addToast({
95
- title: `${uploaderLocale.maxNumImages} ${maxCount}`,
96
- });
97
- return;
98
- }
99
-
100
- // validate the files' types according to the given allowed types
101
- if (
102
- !uploadedFiles
103
- ?.map((file) => file?.type)
104
- ?.every((type) => allowedTypes.includes(type))
105
- ) {
106
- addToast({
107
- title: uploaderLocale.errorUploadedTypes,
108
- });
109
- return;
110
- }
111
-
112
- // validate the files' sizes if none of them exceeds the maximum allowed size
113
- // validate files' names to ensure there are no duplicates if specified
114
- const { compressedFiles, isInValid } = await validateUploadedFiles({
115
- uploadedFiles,
116
- maxFileSize,
117
- compressFiles,
118
- preventDuplicates,
119
- files,
120
- uploaderLocale,
121
- });
122
-
123
- if (isInValid) return;
124
-
125
- setIsLoading(true);
126
-
127
- await Promise.all(
128
- await refineUploadedFiles({
129
- uploadedFiles: compressedFiles,
130
- uploaderLocale,
131
- allowedTypes,
132
- isMulti,
133
- setFiles,
134
- }),
135
- ).finally(() => {
136
- setIsLoading(false);
137
- });
138
-
139
- setTimeout(() => {
140
- onChange();
141
- }, 200);
142
-
143
- // Reset the input value to allow re-uploading the same file
144
- // Only reset for input change events, not drag events
145
- if (event.target && "value" in event.target && event.target.files) {
146
- (event.target as HTMLInputElement).value = "";
147
- }
148
- };
149
-
150
- return {
151
- files,
152
- fileTypes,
153
- labelId,
154
- isRequired,
155
- labelContent,
156
- isDraggable,
157
- isMulti,
158
- handleClearFile,
159
- onInputChange,
160
- setFiles,
161
- isLoading,
162
- locales,
163
- };
164
- };
@@ -1,53 +0,0 @@
1
- "use client";
2
-
3
- import { useEffect, useMemo, useState } from "react";
4
-
5
- const SCREENS = {
6
- sm: 640,
7
- md: 768,
8
- lg: 1024,
9
- xl: 1280,
10
- "2xl": 1536,
11
- };
12
-
13
- export const useWindowSize = () => {
14
- const [size, setSize] = useState({ width: 0, height: 0 });
15
-
16
- useEffect(() => {
17
- function updateSize() {
18
- setSize({ width: window.innerWidth, height: window.innerHeight });
19
- }
20
- window.addEventListener("resize", updateSize);
21
- updateSize();
22
-
23
- return () => window.removeEventListener("resize", updateSize);
24
- }, []);
25
-
26
- const currentScreen: "base" | "sm" | "md" | "lg" | "xl" | "2xl" =
27
- useMemo(() => {
28
- if (size?.width > SCREENS?.["2xl"]) return "2xl";
29
- else if (size?.width > SCREENS?.xl) return "xl";
30
- else if (size?.width > SCREENS?.lg) return "lg";
31
- else if (size?.width > SCREENS?.md) return "md";
32
- else if (size?.width > SCREENS?.sm) return "sm";
33
- else return "base";
34
- }, [size]);
35
-
36
- const isSmallDevice = useMemo(
37
- () => ["base", "sm", "md"].includes(currentScreen),
38
- [currentScreen],
39
- );
40
-
41
- const isExtraSmallDevice = useMemo(
42
- () => ["base"].includes(currentScreen),
43
- [currentScreen],
44
- );
45
-
46
- return {
47
- viewportWidth: size.width,
48
- viewportHeight: size.height,
49
- currentScreen,
50
- isSmallDevice,
51
- isExtraSmallDevice,
52
- };
53
- };
@@ -1,7 +0,0 @@
1
- import { LangKey } from "@/i18n/constants/locales"; //! never change this until you solve the circular dependency issue
2
-
3
- export const i18n = {
4
- defaultLocale: "en",
5
- locales: [LangKey.ARABIC, LangKey.ENGLISH],
6
- localDetection: true,
7
- };
@@ -1 +0,0 @@
1
- export * from "./i18n";
@@ -1 +0,0 @@
1
- export * from "./locales";
@@ -1,4 +0,0 @@
1
- export enum LangKey {
2
- ARABIC = "ar",
3
- ENGLISH = "en",
4
- }
package/src/i18n/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from "./configs";
2
- export * from "./types";
3
- export * from "./utils";
4
- export * from "./constants";
5
- export * from "./locales";
@@ -1,15 +0,0 @@
1
- import { commonAr } from "./common";
2
- import { toastsAr } from "./toasts";
3
- import { atomsAr } from "./atoms";
4
- import { moleculesAr } from "./molecules";
5
- import { organismsAr } from "./organisms";
6
- import { templatesAr } from "./templates";
7
-
8
- export const ar = {
9
- common: commonAr,
10
- toasts: toastsAr,
11
- atoms: atomsAr,
12
- molecules: moleculesAr,
13
- organisms: organismsAr,
14
- templates: templatesAr,
15
- };
@@ -1,18 +0,0 @@
1
- export const atomsAr = {
2
- colorPicker: {
3
- invalidColorFormat: "يرجى إدخال لون صالح (مثال: #000000 أو #fff)",
4
- },
5
- uploader: {
6
- dropHere: "أسقط الملف هنا",
7
- selectFile: "حدد ملفًا أو اسحبه وأفلته هنا",
8
- selectionTypes: "JPG, PNG أو PDF، حجم الملف لا يزيد عن 10MB",
9
- selectBtn: "حدد ملف",
10
- errorUploadingFile: "لم يتم تحميل أي ملف",
11
- maxNumImages: "تم تجاوز الحد الأقصى للصور المرفوعة: ",
12
- errorUploadedTypes: "نوع الملف المرفوع غير مسموح به",
13
- maxSizeExceededError:
14
- "يمكنك فقط رفع ملفات/صور بحجم أقل من MAX_FILE_SIZE ميغابايت، بينما حجم الملف الذي رفعته هو UPLOADED_FILE_SIZE ميغابايت",
15
- duplicatesDenied:
16
- "لا يمكنك رفع صور تحمل نفس الاسم، يمكنك إعادة تسميتها قبل عملية الرفع",
17
- },
18
- };
@@ -1,18 +0,0 @@
1
- export const atomsEn = {
2
- colorPicker: {
3
- invalidColorFormat: "Please enter a valid color (e.g., #000000 or #fff)",
4
- },
5
- uploader: {
6
- dropHere: "Drop file here",
7
- selectFile: "Select a file or drag and drop here",
8
- selectionTypes: "JPG, PNG or PDF, file size no more than 10MB",
9
- selectBtn: "Select file",
10
- errorUploadingFile: "No file was uploaded",
11
- maxNumImages: "Maximum number of uploaded images exceeded: ",
12
- errorUploadedTypes: "The uploaded file type is not allowed.",
13
- maxSizeExceededError:
14
- "You can only upload files/images with less than MAX_FILE_SIZE Mega Bytes, you're file's size is UPLOADED_FILE_SIZE Mega Bytes",
15
- duplicatesDenied:
16
- "You can't upload images with duplicate names, you may rename them before the upload process",
17
- },
18
- };
@@ -1,2 +0,0 @@
1
- export * from "./ar";
2
- export * from "./en";
@@ -1 +0,0 @@
1
- export const commonAr = {};
@@ -1 +0,0 @@
1
- export const commonEn = {};
@@ -1,2 +0,0 @@
1
- export * from "./ar";
2
- export * from "./en";
@@ -1,15 +0,0 @@
1
- import { commonEn } from "./common";
2
- import { toastsEn } from "./toasts";
3
- import { atomsEn } from "./atoms";
4
- import { moleculesEn } from "./molecules";
5
- import { organismsEn } from "./organisms";
6
- import { templatesEn } from "./templates";
7
-
8
- export const en = {
9
- common: commonEn,
10
- toasts: toastsEn,
11
- atoms: atomsEn,
12
- molecules: moleculesEn,
13
- organisms: organismsEn,
14
- templates: templatesEn,
15
- };
@@ -1,4 +0,0 @@
1
- export * from "./ar";
2
- export * from "./en";
3
- export * from "./common";
4
- export * from "./toasts";
@@ -1 +0,0 @@
1
- export const moleculesAr = {};
@@ -1 +0,0 @@
1
- export const moleculesEn = {};
@@ -1,2 +0,0 @@
1
- export * from "./ar";
2
- export * from "./en";
@@ -1,11 +0,0 @@
1
- export const organismsAr = {
2
- deletionConfirmor: {
3
- confirm: "تأكيد",
4
- decline: "إلغاء",
5
- },
6
- listings: {
7
- emptyTitle: "لا توجد عناصر",
8
- emptyDescription:
9
- "لم نجد أي عناصر تطابق بحثك. جرّب تعديل الفلاتر أو البحث لاحقاً.",
10
- },
11
- };
@@ -1,11 +0,0 @@
1
- export const organismsEn = {
2
- deletionConfirmor: {
3
- confirm: "Confirm",
4
- decline: "Decline",
5
- },
6
- listings: {
7
- emptyTitle: "No listings found",
8
- emptyDescription:
9
- "We couldn't find any listings matching your search. Try adjusting your filters or check back later.",
10
- },
11
- };
@@ -1,2 +0,0 @@
1
- export * from "./ar";
2
- export * from "./en";
@@ -1 +0,0 @@
1
- export const templatesAr = {};