bmdl-sdk 1.5.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/.prettierrc +37 -0
  2. package/bin/dev.js +5 -4
  3. package/bin/init.js +2 -1
  4. package/bmdl-sdk-2.0.0.tgz +0 -0
  5. package/global.d.ts +9 -0
  6. package/next.config.ts +27 -0
  7. package/package.json +35 -8
  8. package/postcss.config.mjs +5 -0
  9. package/public/favicon.ico +0 -0
  10. package/public/images/bg/404.bg.dark.png +0 -0
  11. package/public/images/bg/404.bg.png +0 -0
  12. package/public/images/bg/maintenance.bg.dark.png +0 -0
  13. package/public/images/bg/maintenance.bg.png +0 -0
  14. package/public/images/bg/not-authorized.bg.dark.png +0 -0
  15. package/public/images/bg/not-authorized.bg.png +0 -0
  16. package/public/images/bg/redirect.bg.dark.png +0 -0
  17. package/public/images/bg/redirect.bg.png +0 -0
  18. package/public/images/cover/email-verify.cover.dark.png +0 -0
  19. package/public/images/cover/email-verify.cover.png +0 -0
  20. package/public/images/cover/login.cover.dark.png +0 -0
  21. package/public/images/cover/login.cover.png +0 -0
  22. package/public/images/cover/password-forgot.cover.dark.png +0 -0
  23. package/public/images/cover/password-forgot.cover.png +0 -0
  24. package/public/images/cover/password-reset.cover.dark.png +0 -0
  25. package/public/images/cover/password-reset.cover.png +0 -0
  26. package/public/images/cover/register.cover.dark.png +0 -0
  27. package/public/images/cover/register.cover.png +0 -0
  28. package/public/images/cover/two-factor-verify.cover.dark.png +0 -0
  29. package/public/images/cover/two-factor-verify.cover.png +0 -0
  30. package/public/images/lang/en.png +0 -0
  31. package/public/images/lang/ru.png +0 -0
  32. package/public/locales/en/datasets.json +92 -0
  33. package/public/locales/en/errors.json +402 -0
  34. package/public/locales/en/general.json +139 -0
  35. package/public/locales/ru/datasets.json +92 -0
  36. package/public/locales/ru/errors.json +406 -0
  37. package/public/locales/ru/general.json +139 -0
  38. package/src/app/datasets/page.tsx +25 -0
  39. package/src/app/layout.tsx +45 -0
  40. package/src/app/not-found.tsx +34 -0
  41. package/src/app/page.tsx +24 -0
  42. package/src/components/atoms/Actions/Actions.styles.ts +31 -0
  43. package/src/components/atoms/Actions/Actions.tsx +45 -0
  44. package/src/components/atoms/Actions/index.ts +1 -0
  45. package/src/components/atoms/Avatar/Avatar.styles.ts +95 -0
  46. package/src/components/atoms/Avatar/Avatar.tsx +46 -0
  47. package/src/components/atoms/Avatar/index.ts +1 -0
  48. package/src/components/atoms/Badge/Badge.styles.ts +93 -0
  49. package/src/components/atoms/Badge/Badge.tsx +31 -0
  50. package/src/components/atoms/Badge/index.ts +1 -0
  51. package/src/components/atoms/Button/Button.styles.ts +189 -0
  52. package/src/components/atoms/Button/Button.tsx +29 -0
  53. package/src/components/atoms/Button/index.ts +1 -0
  54. package/src/components/atoms/Calendar/Calendar.styles.ts +227 -0
  55. package/src/components/atoms/Calendar/Calendar.tsx +96 -0
  56. package/src/components/atoms/Calendar/index.ts +1 -0
  57. package/src/components/atoms/Checkbox/Checkbox.styles.ts +37 -0
  58. package/src/components/atoms/Checkbox/Checkbox.tsx +26 -0
  59. package/src/components/atoms/Checkbox/index.ts +1 -0
  60. package/src/components/atoms/Date/Date.styles.ts +6 -0
  61. package/src/components/atoms/Date/Date.tsx +27 -0
  62. package/src/components/atoms/Date/index.ts +1 -0
  63. package/src/components/atoms/DatePicker/DatePicker.styles.ts +53 -0
  64. package/src/components/atoms/DatePicker/DatePicker.tsx +114 -0
  65. package/src/components/atoms/DatePicker/DatePicker.utils.tsx +49 -0
  66. package/src/components/atoms/DatePicker/index.ts +1 -0
  67. package/src/components/atoms/Dialog/Dialog.styles.ts +71 -0
  68. package/src/components/atoms/Dialog/Dialog.tsx +55 -0
  69. package/src/components/atoms/Dialog/index.ts +1 -0
  70. package/src/components/atoms/Dropdown/Divider/Divider.styles.ts +8 -0
  71. package/src/components/atoms/Dropdown/Divider/Divider.tsx +14 -0
  72. package/src/components/atoms/Dropdown/Divider/index.ts +1 -0
  73. package/src/components/atoms/Dropdown/Dropdown.styles.ts +31 -0
  74. package/src/components/atoms/Dropdown/Dropdown.tsx +48 -0
  75. package/src/components/atoms/Dropdown/Item/Item.styles.ts +12 -0
  76. package/src/components/atoms/Dropdown/Item/Item.tsx +18 -0
  77. package/src/components/atoms/Dropdown/Item/index.ts +1 -0
  78. package/src/components/atoms/Dropdown/index.ts +1 -0
  79. package/src/components/atoms/Form/Form.styles.ts +23 -0
  80. package/src/components/atoms/Form/Form.tsx +21 -0
  81. package/src/components/atoms/Form/Item/Item.styles.ts +23 -0
  82. package/src/components/atoms/Form/Item/Item.tsx +11 -0
  83. package/src/components/atoms/Form/Item/index.ts +1 -0
  84. package/src/components/atoms/Form/Label/Label.tsx +11 -0
  85. package/src/components/atoms/Form/Label/index.ts +1 -0
  86. package/src/components/atoms/Form/Message/Message.tsx +29 -0
  87. package/src/components/atoms/Form/Message/index.ts +1 -0
  88. package/src/components/atoms/Form/index.ts +1 -0
  89. package/src/components/atoms/Input/Email/Email.tsx +11 -0
  90. package/src/components/atoms/Input/Email/index.ts +1 -0
  91. package/src/components/atoms/Input/Input.styles.ts +77 -0
  92. package/src/components/atoms/Input/Input.tsx +29 -0
  93. package/src/components/atoms/Input/Number/Number.tsx +12 -0
  94. package/src/components/atoms/Input/Number/index.ts +1 -0
  95. package/src/components/atoms/Input/OTP/OTP.styles.ts +30 -0
  96. package/src/components/atoms/Input/OTP/OTP.tsx +23 -0
  97. package/src/components/atoms/Input/OTP/index.ts +1 -0
  98. package/src/components/atoms/Input/Password/Password.tsx +11 -0
  99. package/src/components/atoms/Input/Password/index.ts +1 -0
  100. package/src/components/atoms/Input/Search/Search.tsx +12 -0
  101. package/src/components/atoms/Input/Search/index.ts +1 -0
  102. package/src/components/atoms/Input/index.ts +1 -0
  103. package/src/components/atoms/Label/Label.styles.ts +29 -0
  104. package/src/components/atoms/Label/Label.tsx +18 -0
  105. package/src/components/atoms/Label/index.ts +1 -0
  106. package/src/components/atoms/Logo/Logo.styles.ts +16 -0
  107. package/src/components/atoms/Logo/Logo.tsx +20 -0
  108. package/src/components/atoms/Logo/index.ts +1 -0
  109. package/src/components/atoms/Pagination/Pagination.styles.ts +77 -0
  110. package/src/components/atoms/Pagination/Pagination.tsx +131 -0
  111. package/src/components/atoms/Pagination/index.ts +1 -0
  112. package/src/components/atoms/Popover/Popover.styles.ts +28 -0
  113. package/src/components/atoms/Popover/Popover.tsx +46 -0
  114. package/src/components/atoms/Popover/index.ts +1 -0
  115. package/src/components/atoms/Radio/Item/Item.styles.ts +35 -0
  116. package/src/components/atoms/Radio/Item/Item.tsx +18 -0
  117. package/src/components/atoms/Radio/Item/index.ts +1 -0
  118. package/src/components/atoms/Radio/Radio.styles.ts +25 -0
  119. package/src/components/atoms/Radio/Radio.tsx +21 -0
  120. package/src/components/atoms/Radio/index.ts +1 -0
  121. package/src/components/atoms/RangeNumber/RangeNumber.tsx +33 -0
  122. package/src/components/atoms/RangeNumber/index.ts +1 -0
  123. package/src/components/atoms/Select/Item/Item.styles.ts +22 -0
  124. package/src/components/atoms/Select/Item/Item.tsx +17 -0
  125. package/src/components/atoms/Select/Item/index.ts +1 -0
  126. package/src/components/atoms/Select/Select.styles.ts +149 -0
  127. package/src/components/atoms/Select/Select.tsx +68 -0
  128. package/src/components/atoms/Select/index.ts +1 -0
  129. package/src/components/atoms/Separator/Separator.styles.ts +13 -0
  130. package/src/components/atoms/Separator/Separator.tsx +20 -0
  131. package/src/components/atoms/Separator/index.ts +1 -0
  132. package/src/components/atoms/Sheet/Sheet.styles.ts +100 -0
  133. package/src/components/atoms/Sheet/Sheet.tsx +53 -0
  134. package/src/components/atoms/Sheet/index.ts +1 -0
  135. package/src/components/atoms/Skeleton/Skeleton.styles.ts +30 -0
  136. package/src/components/atoms/Skeleton/Skeleton.tsx +11 -0
  137. package/src/components/atoms/Skeleton/index.ts +1 -0
  138. package/src/components/atoms/Spin/Spin.styles.ts +17 -0
  139. package/src/components/atoms/Spin/Spin.tsx +19 -0
  140. package/src/components/atoms/Spin/index.ts +1 -0
  141. package/src/components/atoms/Switch/Switch.styles.ts +34 -0
  142. package/src/components/atoms/Switch/Switch.tsx +20 -0
  143. package/src/components/atoms/Switch/index.ts +1 -0
  144. package/src/components/atoms/Table/FilterContent/FilterContent.styles.ts +33 -0
  145. package/src/components/atoms/Table/FilterContent/FilterContent.tsx +300 -0
  146. package/src/components/atoms/Table/FilterContent/index.ts +1 -0
  147. package/src/components/atoms/Table/FilterIcon/FilterIcon.tsx +16 -0
  148. package/src/components/atoms/Table/FilterIcon/index.ts +1 -0
  149. package/src/components/atoms/Table/SortIcon/SortIcon.tsx +32 -0
  150. package/src/components/atoms/Table/SortIcon/index.ts +1 -0
  151. package/src/components/atoms/Table/Table.styles.ts +178 -0
  152. package/src/components/atoms/Table/Table.tsx +484 -0
  153. package/src/components/atoms/Table/Table.utils.tsx +19 -0
  154. package/src/components/atoms/Table/index.ts +1 -0
  155. package/src/components/atoms/Tabs/Tabs.tsx +15 -0
  156. package/src/components/atoms/Tabs/index.ts +1 -0
  157. package/src/components/atoms/Textarea/Textarea.styles.ts +64 -0
  158. package/src/components/atoms/Textarea/Textarea.tsx +15 -0
  159. package/src/components/atoms/Textarea/index.ts +1 -0
  160. package/src/components/atoms/Toast/Toast.styles.ts +35 -0
  161. package/src/components/atoms/Toast/Toast.tsx +85 -0
  162. package/src/components/atoms/Toast/Toast.utils.tsx +43 -0
  163. package/src/components/atoms/Toast/index.ts +1 -0
  164. package/src/components/atoms/Tooltip/Tooltip.styles.ts +33 -0
  165. package/src/components/atoms/Tooltip/Tooltip.tsx +32 -0
  166. package/src/components/atoms/Tooltip/index.ts +1 -0
  167. package/src/components/atoms/Typography/Display/Display.styles.ts +26 -0
  168. package/src/components/atoms/Typography/Display/Display.tsx +11 -0
  169. package/src/components/atoms/Typography/Display/index.ts +1 -0
  170. package/src/components/atoms/Typography/Link/Link.styles.ts +32 -0
  171. package/src/components/atoms/Typography/Link/Link.tsx +25 -0
  172. package/src/components/atoms/Typography/Link/index.ts +1 -0
  173. package/src/components/atoms/Typography/Paragraph/Paragraph.styles.ts +32 -0
  174. package/src/components/atoms/Typography/Paragraph/Paragraph.tsx +11 -0
  175. package/src/components/atoms/Typography/Paragraph/index.ts +1 -0
  176. package/src/components/atoms/Typography/Text/Text.styles.ts +39 -0
  177. package/src/components/atoms/Typography/Text/Text.tsx +25 -0
  178. package/src/components/atoms/Typography/Text/index.ts +1 -0
  179. package/src/components/atoms/Typography/Title/Title.styles.ts +28 -0
  180. package/src/components/atoms/Typography/Title/Title.tsx +15 -0
  181. package/src/components/atoms/Typography/Title/index.ts +1 -0
  182. package/src/components/atoms/Typography/Typography.tsx +21 -0
  183. package/src/components/atoms/Typography/index.ts +1 -0
  184. package/src/components/atoms/icons/AvanpostIcon.tsx +31 -0
  185. package/src/components/atoms/icons/CheckIcon.tsx +22 -0
  186. package/src/components/atoms/icons/EmptyIcon.tsx +56 -0
  187. package/src/components/atoms/icons/LogoIcon.tsx +141 -0
  188. package/src/components/atoms/icons/NumberTypeIcon.tsx +25 -0
  189. package/src/components/atoms/icons/SidebarCloseIcon.tsx +75 -0
  190. package/src/components/atoms/icons/index.ts +6 -0
  191. package/src/components/atoms/index.ts +31 -0
  192. package/src/components/molecules/DataTable/CreationModal/CreationModal.tsx +31 -0
  193. package/src/components/molecules/DataTable/CreationModal/index.ts +1 -0
  194. package/src/components/molecules/DataTable/DataTable.styles.ts +23 -0
  195. package/src/components/molecules/DataTable/DataTable.tsx +167 -0
  196. package/src/components/molecules/DataTable/Name/Name.tsx +20 -0
  197. package/src/components/molecules/DataTable/Name/index.ts +1 -0
  198. package/src/components/molecules/DataTable/Skeleton/Skeleton.tsx +27 -0
  199. package/src/components/molecules/DataTable/Skeleton/index.ts +6 -0
  200. package/src/components/molecules/DataTable/index.ts +8 -0
  201. package/src/components/molecules/Header/Button/Button.styles.ts +24 -0
  202. package/src/components/molecules/Header/Button/Button.tsx +20 -0
  203. package/src/components/molecules/Header/Button/index.ts +1 -0
  204. package/src/components/molecules/Header/Header.styles.ts +16 -0
  205. package/src/components/molecules/Header/Header.tsx +20 -0
  206. package/src/components/molecules/Header/Navigate/Navigate.tsx +40 -0
  207. package/src/components/molecules/Header/Navigate/index.ts +1 -0
  208. package/src/components/molecules/Header/SelectLang/SelectLang.tsx +47 -0
  209. package/src/components/molecules/Header/SelectLang/index.ts +2 -0
  210. package/src/components/molecules/Header/SelectTheme/SelectTheme.tsx +43 -0
  211. package/src/components/molecules/Header/SelectTheme/index.ts +1 -0
  212. package/src/components/molecules/Header/index.ts +2 -0
  213. package/src/components/molecules/ProjectIcon/ProjectIcon.styles.ts +23 -0
  214. package/src/components/molecules/ProjectIcon/ProjectIcon.tsx +37 -0
  215. package/src/components/molecules/ProjectIcon/index.ts +1 -0
  216. package/src/components/molecules/Sidebar/Item/Item.styles.ts +52 -0
  217. package/src/components/molecules/Sidebar/Item/Item.tsx +30 -0
  218. package/src/components/molecules/Sidebar/Item/index.ts +1 -0
  219. package/src/components/molecules/Sidebar/Sidebar.styles.ts +97 -0
  220. package/src/components/molecules/Sidebar/Sidebar.tsx +122 -0
  221. package/src/components/molecules/Sidebar/Sidebar.utils.tsx +36 -0
  222. package/src/components/molecules/Sidebar/Trigger/Trigger.tsx +23 -0
  223. package/src/components/molecules/Sidebar/Trigger/index.ts +1 -0
  224. package/src/components/molecules/Sidebar/index.ts +1 -0
  225. package/src/components/molecules/Widget/Content/Content.tsx +80 -0
  226. package/src/components/molecules/Widget/Content/index.ts +1 -0
  227. package/src/components/molecules/Widget/Toolbox/Toolbox.tsx +0 -0
  228. package/src/components/molecules/Widget/Toolbox/index.ts +0 -0
  229. package/src/components/molecules/Widget/Widget.tsx +26 -0
  230. package/src/components/molecules/Widget/Widget.utils.tsx +31 -0
  231. package/src/components/molecules/Widget/index.ts +2 -0
  232. package/src/components/molecules/index.ts +6 -0
  233. package/src/components/organisms/ComponentWidget/ComponentWidget.tsx +107 -0
  234. package/src/components/organisms/ComponentWidget/index.ts +2 -0
  235. package/src/components/organisms/DatasetsTable/Creation/Creation.tsx +105 -0
  236. package/src/components/organisms/DatasetsTable/Creation/Navigate/Navigate.tsx +59 -0
  237. package/src/components/organisms/DatasetsTable/Creation/Navigate/index.ts +1 -0
  238. package/src/components/organisms/DatasetsTable/Creation/Step/Step.styles.ts +12 -0
  239. package/src/components/organisms/DatasetsTable/Creation/Step/Step.tsx +43 -0
  240. package/src/components/organisms/DatasetsTable/Creation/Step/index.ts +1 -0
  241. package/src/components/organisms/DatasetsTable/Creation/Steps/Step1/Step1.styles.ts +41 -0
  242. package/src/components/organisms/DatasetsTable/Creation/Steps/Step1/Step1.tsx +67 -0
  243. package/src/components/organisms/DatasetsTable/Creation/Steps/Step1/index.ts +1 -0
  244. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/SelectSource/SelectSource.tsx +252 -0
  245. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/SelectSource/index.ts +1 -0
  246. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/Step2.tsx +11 -0
  247. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/UploadFile/UploadFile.tsx +112 -0
  248. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/UploadFile/index.ts +1 -0
  249. package/src/components/organisms/DatasetsTable/Creation/Steps/Step2/index.ts +1 -0
  250. package/src/components/organisms/DatasetsTable/Creation/Steps/Step3/Step3.tsx +145 -0
  251. package/src/components/organisms/DatasetsTable/Creation/Steps/Step3/index.ts +1 -0
  252. package/src/components/organisms/DatasetsTable/Creation/Steps/Step4/Step4.tsx +120 -0
  253. package/src/components/organisms/DatasetsTable/Creation/Steps/Step4/index.ts +1 -0
  254. package/src/components/organisms/DatasetsTable/Creation/Steps/index.ts +4 -0
  255. package/src/components/organisms/DatasetsTable/Creation/index.ts +1 -0
  256. package/src/components/organisms/DatasetsTable/DatasetsTable.tsx +81 -0
  257. package/src/components/organisms/DatasetsTable/DatasetsTable.utils.tsx +125 -0
  258. package/src/components/organisms/DatasetsTable/Source/Source.styles.ts +7 -0
  259. package/src/components/organisms/DatasetsTable/Source/Source.tsx +39 -0
  260. package/src/components/organisms/DatasetsTable/Source/Source.utils.tsx +45 -0
  261. package/src/components/organisms/DatasetsTable/Source/index.ts +1 -0
  262. package/src/components/organisms/DatasetsTable/Status/Status.styles.ts +25 -0
  263. package/src/components/organisms/DatasetsTable/Status/Status.tsx +29 -0
  264. package/src/components/organisms/DatasetsTable/Status/Status.utils.tsx +29 -0
  265. package/src/components/organisms/DatasetsTable/Status/index.ts +1 -0
  266. package/src/components/organisms/DatasetsTable/Type/Type.styles.ts +7 -0
  267. package/src/components/organisms/DatasetsTable/Type/Type.tsx +32 -0
  268. package/src/components/organisms/DatasetsTable/Type/Type.utils.tsx +14 -0
  269. package/src/components/organisms/DatasetsTable/Type/index.ts +1 -0
  270. package/src/components/organisms/DatasetsTable/index.ts +1 -0
  271. package/src/components/organisms/index.ts +3 -0
  272. package/src/components/templates/DefaultLayout/DefaultLayout.styles.ts +26 -0
  273. package/src/components/templates/DefaultLayout/DefaultLayout.tsx +41 -0
  274. package/src/components/templates/DefaultLayout/index.ts +1 -0
  275. package/src/components/templates/PageLayout/PageLayout.styles.ts +25 -0
  276. package/src/components/templates/PageLayout/PageLayout.tsx +28 -0
  277. package/src/components/templates/PageLayout/index.ts +1 -0
  278. package/src/components/templates/index.ts +3 -0
  279. package/src/config/i18n.config.ts +46 -0
  280. package/src/constants/index.ts +10 -0
  281. package/src/contexts/CreateComponentContext/CreateComponentContext.tsx +17 -0
  282. package/src/contexts/CreateComponentContext/index.ts +4 -0
  283. package/src/contexts/CreateDatasetContext/CreateDatasetContext.tsx +25 -0
  284. package/src/contexts/CreateDatasetContext/index.ts +4 -0
  285. package/src/contexts/ProjectContext/ProjectContext.tsx +32 -0
  286. package/src/contexts/ProjectContext/index.ts +1 -0
  287. package/src/contexts/SidebarContext/SidebarContext.tsx +10 -0
  288. package/src/contexts/SidebarContext/index.ts +1 -0
  289. package/src/contexts/index.ts +10 -0
  290. package/src/hooks/index.ts +9 -0
  291. package/src/hooks/useCreateComponent.ts +15 -0
  292. package/src/hooks/useCreateDataset.ts +15 -0
  293. package/src/hooks/useDebounce.ts +17 -0
  294. package/src/hooks/useDebounced.ts +31 -0
  295. package/src/hooks/useIsMobile.ts +27 -0
  296. package/src/hooks/useSidebar.ts +15 -0
  297. package/src/hooks/useStickyHeader.ts +35 -0
  298. package/src/hooks/useWindowSize.ts +27 -0
  299. package/src/providers/CreateComponentProvider/CreateComponentProvider.tsx +53 -0
  300. package/src/providers/CreateComponentProvider/index.ts +1 -0
  301. package/src/providers/CreateDatasetProvider/CreateDatasetProvider.tsx +73 -0
  302. package/src/providers/CreateDatasetProvider/index.ts +1 -0
  303. package/src/providers/LangProvider/LangProvider.tsx +15 -0
  304. package/src/providers/LangProvider/index.ts +1 -0
  305. package/src/providers/ProjectProvider/ProjectProvider.tsx +110 -0
  306. package/src/providers/ProjectProvider/index.ts +1 -0
  307. package/src/providers/SidebarProvider/SidebarProvider.tsx +51 -0
  308. package/src/providers/SidebarProvider/index.ts +1 -0
  309. package/src/providers/ThemeProvider/ThemeProvider.tsx +20 -0
  310. package/src/providers/ThemeProvider/index.ts +1 -0
  311. package/src/providers/index.ts +6 -0
  312. package/src/store/index.ts +2 -0
  313. package/src/store/sidebar/sidebar.store.ts +17 -0
  314. package/src/store/sidebar/sidebar.type.ts +4 -0
  315. package/src/styles/globals.css +202 -0
  316. package/src/types/component.type.ts +13 -0
  317. package/src/types/dataset.type.ts +25 -0
  318. package/src/types/file.type.ts +13 -0
  319. package/src/types/general.type.ts +86 -0
  320. package/src/types/index.ts +9 -0
  321. package/src/types/layer.type.ts +7 -0
  322. package/src/types/project.type.ts +15 -0
  323. package/src/types/user.type.ts +6 -0
  324. package/src/types/widget.type.ts +12 -0
  325. package/src/utils/bm.util.ts +150 -0
  326. package/src/utils/bytes.util.ts +110 -0
  327. package/src/utils/date.util.ts +49 -0
  328. package/src/utils/dynamicMessage.util.ts +9 -0
  329. package/src/utils/getInitials.util.ts +10 -0
  330. package/src/utils/hideEmail.util.ts +14 -0
  331. package/src/utils/index.ts +12 -0
  332. package/src/utils/pagination.util.ts +144 -0
  333. package/src/utils/twJoin.util.ts +49 -0
  334. package/src/utils/twMerge.util.ts +6 -0
  335. package/src/utils/upload.util.ts +26 -0
  336. package/src/utils/url.util.ts +29 -0
  337. package/templates/App.tsx +1 -1
  338. package/templates/config.ts +1 -1
  339. package/templates/dataOptions.ts +1 -1
  340. package/templates/viewOptions.ts +1 -1
  341. package/tsconfig.json +40 -6
  342. package/bmdl-sdk-1.5.9.tgz +0 -0
  343. package/index.html +0 -12
  344. package/src/App.tsx +0 -187
  345. package/src/main.tsx +0 -15
@@ -0,0 +1,406 @@
1
+ {
2
+ "code": {
3
+ "client": {
4
+ "length": "Требуется 6 символов"
5
+ },
6
+ "invalid": "Неверный код двухфакторной аутентификации",
7
+ "is_expired": "Срок действия кода двухфакторной аутентификации истёк",
8
+ "is_not_empty": "Код обязателен для заполнения",
9
+ "length": "Код должен содержать 6 символов"
10
+ },
11
+ "column": {
12
+ "from_file": {
13
+ "encoding": {
14
+ "is_enum": "Неверное значение кадировки"
15
+ },
16
+ "separator": {
17
+ "is_string": "Разделитель должен быть строкой",
18
+ "max_length": "Разделитель должен содержать 1 символ"
19
+ }
20
+ },
21
+ "id": {
22
+ "is_int": "ID колонки должен быть числом",
23
+ "is_not_empty": "ID колонки обязателен для заполнения",
24
+ "max": "ID колонки не может быть больше 999999",
25
+ "min": "ID колонки не может быть меньше 1"
26
+ },
27
+ "is_not_empty": "Название колонки обязательно для заполнения",
28
+ "is_string": "Название колонки должно быть строкой",
29
+ "many": {
30
+ "not_found": "Колонки с id: {missingIds} не найдены"
31
+ },
32
+ "name": {
33
+ "already_exists": "Колонка с таким именем уже существует"
34
+ },
35
+ "not_found": "Колонкa не найдена",
36
+ "path": {
37
+ "is_not_empty": "Ярлык обязателен для заполнения",
38
+ "is_string": "Ярлык должtен быть строкой"
39
+ },
40
+ "type": {
41
+ "is_enum": "Неверное значение типа",
42
+ "is_not_empty": "Тип обязателен для заполнения",
43
+ "is_string": "Тип должен быть строкой"
44
+ }
45
+ },
46
+ "component": {
47
+ "is_system_component": {
48
+ "is_boolean": "Признак системного компонента должен быть булевым значением"
49
+ },
50
+ "many": {
51
+ "not_found": "Компоненты с id: {missingIds} не найдены"
52
+ },
53
+ "name": {
54
+ "already_exists": "Компонент с таким именем уже существует"
55
+ },
56
+ "not_found": "Компонент не найден"
57
+ },
58
+ "cooldown": {
59
+ "not_expired": "Пожалуйста, подождите {difference} сек. перед повторной отправкой"
60
+ },
61
+ "dataset": {
62
+ "id": {
63
+ "is_int": "ID датасета должен быть числом",
64
+ "is_not_empty": "ID датасета обязателен для заполнения",
65
+ "max": "ID датасета не может быть больше 9999",
66
+ "min": "ID датасета не может быть меньше 1"
67
+ },
68
+ "many": {
69
+ "not_found": "Датасеты с id: {missingIds} не найдены"
70
+ },
71
+ "name": {
72
+ "already_exists": "Датасет с таким именем уже существует"
73
+ }
74
+ },
75
+ "description": {
76
+ "client": {
77
+ "max_length": "Максимум 350 символов",
78
+ "min_length": "Минимум 2 символов"
79
+ },
80
+ "is_string": "Описание должно быть строкой",
81
+ "length": "Описание должно содержать от 2 до 350 символов"
82
+ },
83
+ "email": {
84
+ "already_exists": "Пользователь с таким email уже существует",
85
+ "client": {
86
+ "is_email": "Введите корректный email"
87
+ },
88
+ "is_email": "Неверный формат email",
89
+ "is_not_empty": "Email обязателен для заполнения",
90
+ "is_string": "Email должен быть строкой"
91
+ },
92
+ "email_or_username": {
93
+ "is_not_empty": "Email или логин обязателен для заполнения",
94
+ "is_string": "Email или логин должен быть строкой"
95
+ },
96
+ "file": {
97
+ "category": {
98
+ "is_enum": "Неверное значение категории"
99
+ },
100
+ "id": {
101
+ "is_not_empty": "ID файла обязателен для заполнения",
102
+ "is_uuid_v4": "ID файла должен быть в формате UUID 4 версии"
103
+ },
104
+ "many": {
105
+ "not_found": "Файлы с id: {missingIds} не найдены"
106
+ },
107
+ "name": {
108
+ "already_exists": "Файл с таким именем уже существует"
109
+ },
110
+ "not_found": "Файл не найден",
111
+ "path": {
112
+ "is_not_empty": "Путь до файла обязателен для заполнения",
113
+ "is_string": "Путь до файла должен быть строкой",
114
+ "length": "Путь до файла должен содержать от 5 до 150 символов"
115
+ },
116
+ "size": {
117
+ "is_int": "Размер файла должен быть числом",
118
+ "is_not_empty": "Размер файла обязателен для заполнения",
119
+ "max": "Размер файла не может быть больше {maxSize}",
120
+ "min": "Размер файла не может быть меньше 1"
121
+ },
122
+ "upload": {
123
+ "id": {
124
+ "is_not_empty": "ID загрузки обязателен для заполнения",
125
+ "is_uuid_v4": "ID загрузки должен быть в формате UUID 4 версии"
126
+ }
127
+ }
128
+ },
129
+ "first_name": {
130
+ "client": {
131
+ "max_length": "Максимум 15 символов",
132
+ "min_length": "Минимум 2 символа"
133
+ },
134
+ "is_string": "Имя должно быть строкой",
135
+ "length": "Имя должно содержать от 2 до 15 символов"
136
+ },
137
+ "group": {
138
+ "many": {
139
+ "not_found": "Группы с id: {missingIds} не найдены"
140
+ },
141
+ "name": {
142
+ "already_exists": "Группа с таким именем уже существует"
143
+ },
144
+ "not_found": "Группа не найдена"
145
+ },
146
+ "guard": {
147
+ "groups": {
148
+ "is_array": "Список групп должен быть передан в виде массива",
149
+ "max_size": "Максимум 10 групп"
150
+ },
151
+ "id": {
152
+ "is_int": "ID должен быть числом",
153
+ "max": "ID не может быть больше 9 999",
154
+ "min": "ID не может быть меньше 1"
155
+ },
156
+ "type": {
157
+ "is_enum": "Неверное значение типа доступа"
158
+ },
159
+ "users": {
160
+ "is_array": "Список пользователей должен быть передан в виде массива",
161
+ "max_size": "Максимум 100 пользователей"
162
+ }
163
+ },
164
+ "icon": {
165
+ "is_string": "Иконка должна быть строкой",
166
+ "length": "Иконка должна содержать от 2 до 35 символов"
167
+ },
168
+ "isUpdateEnabled": {
169
+ "is_boolean": "Признак активности обновления должен быть булевым значением"
170
+ },
171
+ "last_name": {
172
+ "client": {
173
+ "max_length": "Максимум 45 символов"
174
+ },
175
+ "is_string": "Фамилия должна быть строкой",
176
+ "length": "Фамилия должна содержать от 2 до 45 символов"
177
+ },
178
+ "letters_only": "Поле должно содержать только буквы",
179
+ "limit": {
180
+ "is_int": "Кол-во записей должно быть числом",
181
+ "max": "Кол-во записей не может быть больше 1 000",
182
+ "min": "Кол-во записей не может быть меньше 1"
183
+ },
184
+ "login": {
185
+ "invalid": "Неверные данные для входа"
186
+ },
187
+ "middle_name": {
188
+ "client": {
189
+ "max_length": "Максимум 45 символов",
190
+ "min_length": "Минимум 6 символов"
191
+ },
192
+ "is_string": "Отчество должно быть строкой",
193
+ "length": "Отчество должно содержать от 6 до 45 символов"
194
+ },
195
+ "name": {
196
+ "client": {
197
+ "invalid": "Неверный формат имени",
198
+ "max_length": "Максимум 60 символов",
199
+ "min_length": "Минимум 2 символов"
200
+ },
201
+ "is_not_empty": "Имя обязательно для заполнения",
202
+ "is_string": "Имя должно быть строкой",
203
+ "is_uuid_v4": "Имя должно быть в формате UUID 4 версии",
204
+ "length": "Имя должно содержать от 2 до 60 символов",
205
+ "matches": {
206
+ "after_dot": "После точки должно быть не менее 4 символов, первый из которых - буква",
207
+ "phone": "Имя не должно быть похоже на номер телефона",
208
+ "start_with_number": "Имя не должно начинаться с трёх и более цифр",
209
+ "symbols": "Имя может содержать только буквы, цифры, точку и подчёркивание",
210
+ "trim_underscore": "Имя не должно начинаться или заканчиваться подчёркиванием"
211
+ },
212
+ "max_length": "Имя должно содержать максимум 60 символов"
213
+ },
214
+ "order": {
215
+ "is_not_empty": "Направление сортировки обязательно для заполнения",
216
+ "is_string": "Направление сортировки должно быть строкой"
217
+ },
218
+ "page": {
219
+ "is_int": "Номер страницы должен быть числом",
220
+ "max": "Номер страницы не может быть больше 99 999",
221
+ "min": "Номер страницы не может быть меньше 1"
222
+ },
223
+ "password": {
224
+ "client": {
225
+ "is_field_matching": "Пароли должны совпадать",
226
+ "matches": "Пароль должен содержать заглавные и прописные латинские буквы, цифры и спецсимволы",
227
+ "min_length": "Минимум 6 символов"
228
+ },
229
+ "is_field_matching": "Пароли не совпадают",
230
+ "is_not_empty": "Пароль обязателен для заполнения",
231
+ "is_string": "Пароль должен быть строкой",
232
+ "matches": {
233
+ "contain_digit": "Пароль должен содержать хотя бы 1 цифру",
234
+ "contain_lowercase_letter": "Пароль должен содержать хотя бы 1 строчную букву",
235
+ "contain_special_character": "Пароль должен содержать хотя бы 1 спецсимвол",
236
+ "contain_uppercase_letter": "Пароль должен содержать хотя бы 1 заглавную букву"
237
+ },
238
+ "min_length": "Пароль должен содержать от 6 символов"
239
+ },
240
+ "preview_path": {
241
+ "is_string": "Путь до превью должен быть строкой",
242
+ "length": "Путь до превью должен содержать от 5 до 150 символов"
243
+ },
244
+ "privacy_policy_terms": {
245
+ "client": {
246
+ "is_true": "Вы должны согласиться с условиями, чтобы продолжить"
247
+ },
248
+ "is_boolean": "Согласие с условиями должно быть булевым значением",
249
+ "is_true": "Вы должны согласиться с условиями {privacy-policy-terms}, чтобы продолжить"
250
+ },
251
+ "project": {
252
+ "many": {
253
+ "not_found": "Проекты с id: {missingIds} не найдены"
254
+ },
255
+ "name": {
256
+ "already_exists": "Проект с таким именем уже существует"
257
+ },
258
+ "not_found": "Проект не найден"
259
+ },
260
+ "q": {
261
+ "is_string": "Поисковой запрос должен быть строкой"
262
+ },
263
+ "required": "Поле обязательное для заполнения",
264
+ "session": {
265
+ "failed_to_complete": "Не удалось завершить сессию",
266
+ "failed_to_save": "Не удалось сохранить сессию",
267
+ "is_boolean": "Сохранение сессии должно быть булевым значением",
268
+ "is_current": "Текущую сессию удалить нельзя",
269
+ "not_found": "Сессия не найдена",
270
+ "user_not_found": "Пользователь не обнаружен в сессии"
271
+ },
272
+ "shortcut": {
273
+ "id": {
274
+ "is_uuid_v4": "ID должен быть в формате UUID 4 версии"
275
+ },
276
+ "limit": "Достигнуто максимальное количество ярлыков",
277
+ "link": {
278
+ "already_exists": "Ярлык с такой ссылкой уже существует",
279
+ "ivalid": "Неверный формат для ссылки ярлыка"
280
+ },
281
+ "name": {
282
+ "already_exists": "Ярлык с таким именем уже существует",
283
+ "is_not_empty": "Название обязателено для заполнения",
284
+ "is_string": "Название должно быть строкой",
285
+ "min_length": "Название должно содержать от 2 символов"
286
+ },
287
+ "order": {
288
+ "is_int": "Порядоковый номер должен быть числом",
289
+ "max": "Порядоковый номер не может быть больше 15",
290
+ "min": "Порядоковый номер не может быть меньше 0"
291
+ }
292
+ },
293
+ "sort": {
294
+ "is_array": "Список сортировок должен быть передан в виде массива",
295
+ "max_size": "Максимум 10 сортировок"
296
+ },
297
+ "theme": {
298
+ "id": {
299
+ "is_int": "ID темы должен быть числом",
300
+ "is_not_empty": "ID темы обязателен для заполнения",
301
+ "max": "ID темы не может быть больше 999",
302
+ "min": "ID темы не может быть меньше 1"
303
+ },
304
+ "many": {
305
+ "not_found": "Темы с id: {missingIds} не найдены"
306
+ }
307
+ },
308
+ "token": {
309
+ "is_expired": "Срок действия токена истёк",
310
+ "is_not_empty": "Токен обязателен для заполнения",
311
+ "is_uuid_v4": "Токен должен быть в формате UUID 4 версии",
312
+ "not_found": "Токен не найден"
313
+ },
314
+ "updateInterval": {
315
+ "is_int": "Интервал должен быть числом",
316
+ "max": "Интервал не может быть больше 99 999",
317
+ "min": "Интервал не может быть меньше 1"
318
+ },
319
+ "user": {
320
+ "many": {
321
+ "not_found": "Пользователи с id: {missingIds} не найдены"
322
+ },
323
+ "no_permissions": "Недостаточно прав",
324
+ "not_authorized": "Пользователь не авторизован",
325
+ "not_found": "Пользователь не найден",
326
+ "photo_path": {
327
+ "is_string": "Путь до аватара должен быть строкой",
328
+ "length": "Путь до аватара должен содержать от 5 до 150 символов"
329
+ }
330
+ },
331
+ "username": {
332
+ "already_exists": "Пользователь с таким логином уже существует",
333
+ "client": {
334
+ "invalid": "Неверный формат логина",
335
+ "max_length": "Максимум 32 символа",
336
+ "min_length": "Минимум 5 символов"
337
+ },
338
+ "is_string": "Логин должен быть строкой",
339
+ "length": "Логин должен содержать от 5 до 32 символов",
340
+ "matches": {
341
+ "after_dot": "После точки должно быть не менее 4 символов, первый из которых - буква",
342
+ "phone": "Логин не должен быть похож на номер телефона",
343
+ "start_with_number": "Логин не должен начинаться с трёх и более цифр",
344
+ "symbols": "Логин может содержать только латинские буквы, цифры, точку и подчёркивание",
345
+ "trim_underscore": "Логин не должен начинаться или заканчиваться подчёркиванием"
346
+ }
347
+ },
348
+ "widget": {
349
+ "column": {
350
+ "aggregate": {
351
+ "is_enum": "Неверное значение агрегации"
352
+ },
353
+ "direction": {
354
+ "is_enum": "Неверное значение направления сортировки"
355
+ },
356
+ "type": {
357
+ "is_enum": "Неверное значение типа"
358
+ }
359
+ },
360
+ "filter": {
361
+ "operator": {
362
+ "is_enum": "Неверное значение оператора"
363
+ }
364
+ },
365
+ "id": {
366
+ "is_not_empty": "ID виджета обязателен для заполнения",
367
+ "is_uuid_v4": "ID виджета должен быть в формате UUID 4 версии"
368
+ },
369
+ "many": {
370
+ "not_found": "Виджеты с id: {missingIds} не найдены"
371
+ },
372
+ "name": {
373
+ "already_exists": "Виджет с таким именем уже существует"
374
+ },
375
+ "not_found": "Виджет не найден"
376
+ },
377
+ "layer": {
378
+ "id": {
379
+ "is_int": "ID слоя должен быть числом",
380
+ "is_not_empty": "ID слоя обязателен для заполнения",
381
+ "max": "ID слоя не может быть больше 9999",
382
+ "min": "ID слоя не может быть меньше 1"
383
+ },
384
+ "name": {
385
+ "already_exists": "Слой с таким именем уже существует"
386
+ },
387
+ "not_found": "Слой не найден"
388
+ },
389
+ "layout": {
390
+ "coords": {
391
+ "is_int": "Координата должна быть числом",
392
+ "is_not_empty": "Координата обязателена для заполнения"
393
+ },
394
+ "sizes": {
395
+ "is_int": "Размер должен быть числом",
396
+ "is_not_empty": "Размер обязателен для заполнения"
397
+ },
398
+ "static": {
399
+ "is_boolean": "Признак статичности должен быть булевым значением"
400
+ },
401
+ "items": {
402
+ "is_array": "Список виджетов должен быть передан в виде массива",
403
+ "max_size": "Максимум 25 виджетов"
404
+ }
405
+ }
406
+ }
@@ -0,0 +1,139 @@
1
+ {
2
+ "seo": {
3
+ "title": "Панель управления",
4
+ "description": "BiModal сочетает мощь BI-системы с простотой настройки модальных виджетов. Загрузите данные — и через несколько кликов получите готовый дашборд с различными диаграммами, настроенными под ваши бизнес-задачи."
5
+ },
6
+ "send-mail": {
7
+ "success": "Письмо успешно отправлено!",
8
+ "error": "Ошибка при отправке!"
9
+ },
10
+ "home": "Компонент",
11
+ "search": "Поиск",
12
+ "no-data": "Данные не найдены",
13
+ "close": "Закрыть",
14
+ "light": "Светлая",
15
+ "dark": "Темная",
16
+ "system": "Системная",
17
+ "settings": "Настройки",
18
+ "сonfigure": "Настроить",
19
+ "help": "Помощь",
20
+ "faq": "FAQ",
21
+ "my-profile": "Мой профиль",
22
+ "logout": "Выйти",
23
+ "version": "Версия",
24
+ "username": "Логин",
25
+ "email": "Email",
26
+ "back": "Назад",
27
+ "create": "Создать",
28
+ "go-back": "Вернуться назад",
29
+ "go-auth": "На страницу авторизации",
30
+ "back-to-home": "Вернуться на главную",
31
+ "continue": "Продолжить",
32
+ "further": "Далее",
33
+ "all": "Все",
34
+ "only-mine": "Только мои",
35
+ "besides-mine": "Кроме моих",
36
+ "add": "Добавить",
37
+ "edit": "Редактировать",
38
+ "update": "Обновить",
39
+ "delete": "Удалить",
40
+ "reset": "Сбросить",
41
+ "select-all": "Выбрать все",
42
+ "not-found": {
43
+ "seo": {
44
+ "title": "Страница не найдена",
45
+ "description": "Запрошенный URL не найден."
46
+ },
47
+ "title": "Страница не найдена :(",
48
+ "description": "Упс! 😖 Запрошенный URL не найден."
49
+ },
50
+ "redirect": {
51
+ "title": "Страница редиректа",
52
+ "description": "Секунду... 🚀 Мы уже перенаправляем вас куда нужно."
53
+ },
54
+ "not-authorized": {
55
+ "title": "Недостаточно прав!",
56
+ "description": "У вас нет разрешения на просмотр этой страницы."
57
+ },
58
+ "shortcuts": {
59
+ "title": "Быстрые ссылки",
60
+ "not-found": "Список ярлыков пуст"
61
+ },
62
+ "notifications": {
63
+ "title": "Уведомления",
64
+ "read": "Прочитать все",
65
+ "view": "Посмотреть все уведомления",
66
+ "not-found": "Список уведомлений пуст"
67
+ },
68
+ "categories": {
69
+ "datasets": "Датасеты",
70
+ "filters": "Фильтры",
71
+ "sources": "Источники",
72
+ "projects": "Проекты",
73
+ "widgets": "Виджеты",
74
+ "components": "Компоненты",
75
+ "files": "Медиа",
76
+ "designs": "Оформление",
77
+ "themes": "Темы",
78
+ "users": "Пользователи",
79
+ "groups": "Группы",
80
+ "roles": "Роли",
81
+ "faq": "FAQ",
82
+ "wiki": "Вики",
83
+ "logs": "Логи"
84
+ },
85
+ "status": {
86
+ "pending": "Загрузка",
87
+ "success": "Успешно",
88
+ "error": "Ошибка"
89
+ },
90
+ "calendar": {
91
+ "placeholder": {
92
+ "single": "Выберите дату",
93
+ "multiple": "Выберите даты",
94
+ "range": "Выберите период"
95
+ }
96
+ },
97
+ "pagination": {
98
+ "prev": "Предыдущая",
99
+ "next": "Следующая",
100
+ "items": "Показано с {from} по {to} из {total, plural, =1 {# записи} other {# записей}}"
101
+ },
102
+ "sort": {
103
+ "string": {
104
+ "asc": "Нажмите для сортировки в алфавитном порядке",
105
+ "desc": "Нажмите для сортировки в обратном алфавитном порядке"
106
+ },
107
+ "number": {
108
+ "asc": "Нажмите для сортировки по возрастанию",
109
+ "desc": "Нажмите для сортировки по убыванию"
110
+ },
111
+ "date": {
112
+ "asc": "Нажмите, чтобы показать сначала старые",
113
+ "desc": "Нажмите, чтобы показать сначала новые"
114
+ },
115
+ "cancel": "Нажмите для отмены сортировки"
116
+ },
117
+ "upload": {
118
+ "files": "Файлы",
119
+ "bytes": "Байт",
120
+ "label": {
121
+ "one": "Перетащите файл сюда или нажмите для выбора",
122
+ "many": "Перетащите файлы сюда или нажмите для выбора"
123
+ },
124
+ "format": "Формат",
125
+ "max-size": "Макс. размер",
126
+ "types": {
127
+ "all": "Все типы файлов"
128
+ },
129
+ "errors": {
130
+ "more-than-one-file": "Можно выбрать только один файл"
131
+ }
132
+ },
133
+ "typeof": {
134
+ "number": "Число",
135
+ "string": "Строка",
136
+ "date": "Дата",
137
+ "boolean": "Булево"
138
+ }
139
+ }
@@ -0,0 +1,25 @@
1
+ import { type Metadata } from 'next'
2
+ import { useTranslations } from 'next-intl'
3
+ import { getTranslations } from 'next-intl/server'
4
+
5
+ import { DatasetsTable } from '@/components/organisms'
6
+
7
+ import { DefaultLayout } from '@/components/templates'
8
+
9
+ export async function generateMetadata(): Promise<Metadata> {
10
+ const t = await getTranslations('datasets')
11
+
12
+ return {
13
+ title: t('seo.title')
14
+ }
15
+ }
16
+
17
+ export default function DatasetsPage() {
18
+ const t = useTranslations()
19
+ //
20
+ return (
21
+ <DefaultLayout title={t('categories.datasets')}>
22
+ <DatasetsTable />
23
+ </DefaultLayout>
24
+ )
25
+ }
@@ -0,0 +1,45 @@
1
+ import type { Metadata } from 'next'
2
+ import { getLocale, getTranslations } from 'next-intl/server'
3
+ import { Inter } from 'next/font/google'
4
+ import { Toaster } from 'sonner'
5
+
6
+ import { LangProvider, ThemeProvider } from '@/providers'
7
+
8
+ import '@/styles/globals.css'
9
+
10
+ const inter = Inter({
11
+ subsets: ['latin', 'cyrillic'],
12
+ weight: ['400', '500', '600', '700'],
13
+ display: 'swap',
14
+ variable: '--font-inter-sans'
15
+ })
16
+
17
+ export async function generateMetadata(): Promise<Metadata> {
18
+ const t = await getTranslations('')
19
+
20
+ return {
21
+ title: 'BiModal',
22
+ description: t('seo.description')
23
+ }
24
+ }
25
+
26
+ export default async function RootLayout({
27
+ children
28
+ }: Readonly<{
29
+ children: React.ReactNode
30
+ }>) {
31
+ const locale = await getLocale()
32
+
33
+ return (
34
+ <html lang={locale} suppressHydrationWarning>
35
+ <body
36
+ className={`${inter.className} dark:bg-dark-gray-900 bg-white antialiased`}
37
+ >
38
+ <Toaster />
39
+ <LangProvider>
40
+ <ThemeProvider>{children}</ThemeProvider>
41
+ </LangProvider>
42
+ </body>
43
+ </html>
44
+ )
45
+ }
@@ -0,0 +1,34 @@
1
+ import type { Metadata } from 'next'
2
+ import { useTranslations } from 'next-intl'
3
+ import { getTranslations } from 'next-intl/server'
4
+
5
+ import { Button, Typography } from '@/components/atoms'
6
+
7
+ import { PageLayout } from '@/components/templates'
8
+
9
+ const { Title, Paragraph, Link } = Typography
10
+
11
+ export async function generateMetadata(): Promise<Metadata> {
12
+ const t = await getTranslations('not-found')
13
+
14
+ return {
15
+ title: t('seo.title'),
16
+ description: t('seo.description')
17
+ }
18
+ }
19
+
20
+ export default function NotFound() {
21
+ const t = useTranslations()
22
+
23
+ return (
24
+ <PageLayout className='bg-[url(/images/bg/404.bg.png)] dark:bg-[url(/images/bg/404.bg.dark.png)]'>
25
+ <Title level={2} className='mb-1.5'>
26
+ {t('not-found.title')}
27
+ </Title>
28
+ <Paragraph className='mb-6'>{t('not-found.description')}</Paragraph>
29
+ <Button asChild>
30
+ <Link href='/'>{t('back-to-home')}</Link>
31
+ </Button>
32
+ </PageLayout>
33
+ )
34
+ }
@@ -0,0 +1,24 @@
1
+ import { Metadata } from 'next'
2
+ import { useTranslations } from 'next-intl'
3
+ import { getTranslations } from 'next-intl/server'
4
+
5
+ import { ComponentWidget } from '@/components/organisms'
6
+ import { DefaultLayout } from '@/components/templates'
7
+
8
+ export async function generateMetadata(): Promise<Metadata> {
9
+ const t = await getTranslations('')
10
+
11
+ return {
12
+ title: t('seo.title')
13
+ }
14
+ }
15
+
16
+ export default function HomePage() {
17
+ const t = useTranslations()
18
+ //
19
+ return (
20
+ <DefaultLayout title={t('home')}>
21
+ <ComponentWidget />
22
+ </DefaultLayout>
23
+ )
24
+ }