@instincthub/react-ui 0.1.2 → 0.1.4

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 (524) hide show
  1. package/README.md +28 -3
  2. package/dist/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  4. package/dist/_virtual/index.js +1 -1
  5. package/dist/_virtual/index2.js +1 -1
  6. package/dist/_virtual/lodash.js +1 -1
  7. package/dist/_virtual/react-is.development.js +1 -1
  8. package/dist/_virtual/react-is.production.min.js +1 -1
  9. package/dist/node_modules/@tiptap/core/dist/index.js +1 -1
  10. package/dist/node_modules/@tiptap/core/dist/index.js.map +1 -1
  11. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js +1 -1
  12. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +1 -1
  13. package/dist/node_modules/@tiptap/extension-bold/dist/index.js +1 -1
  14. package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +1 -1
  15. package/dist/node_modules/@tiptap/extension-bullet-list/dist/index.js +1 -1
  16. package/dist/node_modules/@tiptap/extension-bullet-list/dist/index.js.map +1 -1
  17. package/dist/node_modules/@tiptap/extension-character-count/dist/index.js +1 -1
  18. package/dist/node_modules/@tiptap/extension-character-count/dist/index.js.map +1 -1
  19. package/dist/node_modules/@tiptap/extension-code/dist/index.js +1 -1
  20. package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +1 -1
  21. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js +1 -1
  22. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +1 -1
  23. package/dist/node_modules/@tiptap/extension-document/dist/index.js +1 -1
  24. package/dist/node_modules/@tiptap/extension-document/dist/index.js.map +1 -1
  25. package/dist/node_modules/@tiptap/extension-dropcursor/dist/index.js +1 -1
  26. package/dist/node_modules/@tiptap/extension-dropcursor/dist/index.js.map +1 -1
  27. package/dist/node_modules/@tiptap/extension-gapcursor/dist/index.js +1 -1
  28. package/dist/node_modules/@tiptap/extension-gapcursor/dist/index.js.map +1 -1
  29. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js +1 -1
  30. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +1 -1
  31. package/dist/node_modules/@tiptap/extension-heading/dist/index.js +1 -1
  32. package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +1 -1
  33. package/dist/node_modules/@tiptap/extension-highlight/dist/index.js +1 -1
  34. package/dist/node_modules/@tiptap/extension-highlight/dist/index.js.map +1 -1
  35. package/dist/node_modules/@tiptap/extension-history/dist/index.js +1 -1
  36. package/dist/node_modules/@tiptap/extension-history/dist/index.js.map +1 -1
  37. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js +1 -1
  38. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +1 -1
  39. package/dist/node_modules/@tiptap/extension-image/dist/index.js +1 -1
  40. package/dist/node_modules/@tiptap/extension-image/dist/index.js.map +1 -1
  41. package/dist/node_modules/@tiptap/extension-italic/dist/index.js +1 -1
  42. package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +1 -1
  43. package/dist/node_modules/@tiptap/extension-link/dist/index.js +1 -1
  44. package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +1 -1
  45. package/dist/node_modules/@tiptap/extension-list-item/dist/index.js +1 -1
  46. package/dist/node_modules/@tiptap/extension-list-item/dist/index.js.map +1 -1
  47. package/dist/node_modules/@tiptap/extension-ordered-list/dist/index.js +1 -1
  48. package/dist/node_modules/@tiptap/extension-ordered-list/dist/index.js.map +1 -1
  49. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js +1 -1
  50. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +1 -1
  51. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js +1 -1
  52. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js.map +1 -1
  53. package/dist/node_modules/@tiptap/extension-strike/dist/index.js +1 -1
  54. package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +1 -1
  55. package/dist/node_modules/@tiptap/extension-table/dist/index.js +1 -1
  56. package/dist/node_modules/@tiptap/extension-table/dist/index.js.map +1 -1
  57. package/dist/node_modules/@tiptap/extension-table-cell/dist/index.js +1 -1
  58. package/dist/node_modules/@tiptap/extension-table-cell/dist/index.js.map +1 -1
  59. package/dist/node_modules/@tiptap/extension-table-header/dist/index.js +1 -1
  60. package/dist/node_modules/@tiptap/extension-table-header/dist/index.js.map +1 -1
  61. package/dist/node_modules/@tiptap/extension-table-row/dist/index.js +1 -1
  62. package/dist/node_modules/@tiptap/extension-table-row/dist/index.js.map +1 -1
  63. package/dist/node_modules/@tiptap/extension-task-item/dist/index.js +1 -1
  64. package/dist/node_modules/@tiptap/extension-task-item/dist/index.js.map +1 -1
  65. package/dist/node_modules/@tiptap/extension-task-list/dist/index.js +1 -1
  66. package/dist/node_modules/@tiptap/extension-task-list/dist/index.js.map +1 -1
  67. package/dist/node_modules/@tiptap/extension-text/dist/index.js +1 -1
  68. package/dist/node_modules/@tiptap/extension-text/dist/index.js.map +1 -1
  69. package/dist/node_modules/@tiptap/react/dist/index.js +3 -3
  70. package/dist/node_modules/@tiptap/react/dist/index.js.map +1 -1
  71. package/dist/node_modules/@tiptap/starter-kit/dist/index.js +1 -1
  72. package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +1 -1
  73. package/dist/node_modules/attr-accept/dist/es/index.js +1 -1
  74. package/dist/node_modules/attr-accept/dist/es/index.js.map +1 -1
  75. package/dist/node_modules/date-fns/_lib/addLeadingZeros.js +1 -1
  76. package/dist/node_modules/date-fns/_lib/addLeadingZeros.js.map +1 -1
  77. package/dist/node_modules/date-fns/_lib/defaultOptions.js +1 -1
  78. package/dist/node_modules/date-fns/_lib/defaultOptions.js.map +1 -1
  79. package/dist/node_modules/date-fns/_lib/format/formatters.js +1 -1
  80. package/dist/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
  81. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js +1 -1
  82. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
  83. package/dist/node_modules/date-fns/_lib/format/longFormatters.js +1 -1
  84. package/dist/node_modules/date-fns/_lib/format/longFormatters.js.map +1 -1
  85. package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +1 -1
  86. package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js.map +1 -1
  87. package/dist/node_modules/date-fns/_lib/normalizeDates.js +1 -1
  88. package/dist/node_modules/date-fns/_lib/normalizeDates.js.map +1 -1
  89. package/dist/node_modules/date-fns/_lib/protectedTokens.js +1 -1
  90. package/dist/node_modules/date-fns/_lib/protectedTokens.js.map +1 -1
  91. package/dist/node_modules/date-fns/constants.js +1 -1
  92. package/dist/node_modules/date-fns/constants.js.map +1 -1
  93. package/dist/node_modules/date-fns/constructFrom.js +1 -1
  94. package/dist/node_modules/date-fns/constructFrom.js.map +1 -1
  95. package/dist/node_modules/date-fns/differenceInCalendarDays.js +1 -1
  96. package/dist/node_modules/date-fns/differenceInCalendarDays.js.map +1 -1
  97. package/dist/node_modules/date-fns/format.js +1 -1
  98. package/dist/node_modules/date-fns/format.js.map +1 -1
  99. package/dist/node_modules/date-fns/getDayOfYear.js +1 -1
  100. package/dist/node_modules/date-fns/getDayOfYear.js.map +1 -1
  101. package/dist/node_modules/date-fns/getISOWeek.js +1 -1
  102. package/dist/node_modules/date-fns/getISOWeek.js.map +1 -1
  103. package/dist/node_modules/date-fns/getISOWeekYear.js +1 -1
  104. package/dist/node_modules/date-fns/getISOWeekYear.js.map +1 -1
  105. package/dist/node_modules/date-fns/getWeek.js +1 -1
  106. package/dist/node_modules/date-fns/getWeek.js.map +1 -1
  107. package/dist/node_modules/date-fns/getWeekYear.js +1 -1
  108. package/dist/node_modules/date-fns/getWeekYear.js.map +1 -1
  109. package/dist/node_modules/date-fns/isDate.js +1 -1
  110. package/dist/node_modules/date-fns/isDate.js.map +1 -1
  111. package/dist/node_modules/date-fns/isValid.js +1 -1
  112. package/dist/node_modules/date-fns/isValid.js.map +1 -1
  113. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +1 -1
  114. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
  115. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +1 -1
  116. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
  117. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js +1 -1
  118. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
  119. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +1 -1
  120. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
  121. package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +1 -1
  122. package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -1
  123. package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js +1 -1
  124. package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -1
  125. package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +1 -1
  126. package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -1
  127. package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js +1 -1
  128. package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -1
  129. package/dist/node_modules/date-fns/locale/en-US/_lib/match.js +1 -1
  130. package/dist/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -1
  131. package/dist/node_modules/date-fns/locale/en-US.js +1 -1
  132. package/dist/node_modules/date-fns/locale/en-US.js.map +1 -1
  133. package/dist/node_modules/date-fns/startOfDay.js +1 -1
  134. package/dist/node_modules/date-fns/startOfDay.js.map +1 -1
  135. package/dist/node_modules/date-fns/startOfISOWeek.js +1 -1
  136. package/dist/node_modules/date-fns/startOfISOWeek.js.map +1 -1
  137. package/dist/node_modules/date-fns/startOfISOWeekYear.js +1 -1
  138. package/dist/node_modules/date-fns/startOfISOWeekYear.js.map +1 -1
  139. package/dist/node_modules/date-fns/startOfWeek.js +1 -1
  140. package/dist/node_modules/date-fns/startOfWeek.js.map +1 -1
  141. package/dist/node_modules/date-fns/startOfWeekYear.js +1 -1
  142. package/dist/node_modules/date-fns/startOfWeekYear.js.map +1 -1
  143. package/dist/node_modules/date-fns/startOfYear.js +1 -1
  144. package/dist/node_modules/date-fns/startOfYear.js.map +1 -1
  145. package/dist/node_modules/date-fns/toDate.js +1 -1
  146. package/dist/node_modules/date-fns/toDate.js.map +1 -1
  147. package/dist/node_modules/dompurify/dist/purify.es.mjs.js +2 -1
  148. package/dist/node_modules/dompurify/dist/purify.es.mjs.js.map +1 -1
  149. package/dist/node_modules/file-selector/dist/es2015/file-selector.js +1 -1
  150. package/dist/node_modules/file-selector/dist/es2015/file-selector.js.map +1 -1
  151. package/dist/node_modules/file-selector/dist/es2015/file.js +1 -1
  152. package/dist/node_modules/file-selector/dist/es2015/file.js.map +1 -1
  153. package/dist/node_modules/html2canvas/dist/html2canvas.esm.js +2 -1
  154. package/dist/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -1
  155. package/dist/node_modules/linkifyjs/dist/linkify.es.js +1 -1
  156. package/dist/node_modules/linkifyjs/dist/linkify.es.js.map +1 -1
  157. package/dist/node_modules/lodash/lodash.js +3 -2
  158. package/dist/node_modules/lodash/lodash.js.map +1 -1
  159. package/dist/node_modules/marked/lib/marked.esm.js +1 -1
  160. package/dist/node_modules/marked/lib/marked.esm.js.map +1 -1
  161. package/dist/node_modules/object-assign/index.js +2 -1
  162. package/dist/node_modules/object-assign/index.js.map +1 -1
  163. package/dist/node_modules/orderedmap/dist/index.js +1 -1
  164. package/dist/node_modules/orderedmap/dist/index.js.map +1 -1
  165. package/dist/node_modules/prop-types/checkPropTypes.js +1 -1
  166. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
  167. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +1 -1
  168. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -1
  169. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +1 -1
  170. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
  171. package/dist/node_modules/prop-types/index.js +1 -1
  172. package/dist/node_modules/prop-types/index.js.map +1 -1
  173. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +1 -1
  174. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -1
  175. package/dist/node_modules/prop-types/lib/has.js +1 -1
  176. package/dist/node_modules/prop-types/lib/has.js.map +1 -1
  177. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +2 -2
  178. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  179. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +2 -2
  180. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  181. package/dist/node_modules/prop-types/node_modules/react-is/index.js +1 -1
  182. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -1
  183. package/dist/node_modules/prosemirror-commands/dist/index.js +1 -1
  184. package/dist/node_modules/prosemirror-commands/dist/index.js.map +1 -1
  185. package/dist/node_modules/prosemirror-dropcursor/dist/index.js +1 -1
  186. package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +1 -1
  187. package/dist/node_modules/prosemirror-gapcursor/dist/index.js +1 -1
  188. package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +1 -1
  189. package/dist/node_modules/prosemirror-history/dist/index.js +1 -1
  190. package/dist/node_modules/prosemirror-history/dist/index.js.map +1 -1
  191. package/dist/node_modules/prosemirror-keymap/dist/index.js +1 -1
  192. package/dist/node_modules/prosemirror-keymap/dist/index.js.map +1 -1
  193. package/dist/node_modules/prosemirror-model/dist/index.js +1 -1
  194. package/dist/node_modules/prosemirror-model/dist/index.js.map +1 -1
  195. package/dist/node_modules/prosemirror-schema-list/dist/index.js +1 -1
  196. package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +1 -1
  197. package/dist/node_modules/prosemirror-state/dist/index.js +1 -1
  198. package/dist/node_modules/prosemirror-state/dist/index.js.map +1 -1
  199. package/dist/node_modules/prosemirror-tables/dist/index.js +1 -1
  200. package/dist/node_modules/prosemirror-tables/dist/index.js.map +1 -1
  201. package/dist/node_modules/prosemirror-transform/dist/index.js +1 -1
  202. package/dist/node_modules/prosemirror-transform/dist/index.js.map +1 -1
  203. package/dist/node_modules/prosemirror-view/dist/index.js +1 -1
  204. package/dist/node_modules/prosemirror-view/dist/index.js.map +1 -1
  205. package/dist/node_modules/react-dropzone/dist/es/index.js +1 -1
  206. package/dist/node_modules/react-dropzone/dist/es/index.js.map +1 -1
  207. package/dist/node_modules/react-dropzone/dist/es/utils/index.js +1 -1
  208. package/dist/node_modules/react-dropzone/dist/es/utils/index.js.map +1 -1
  209. package/dist/node_modules/rope-sequence/dist/index.js +1 -1
  210. package/dist/node_modules/rope-sequence/dist/index.js.map +1 -1
  211. package/dist/node_modules/tslib/tslib.es6.js +1 -1
  212. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  213. package/dist/node_modules/w3c-keyname/index.js +1 -1
  214. package/dist/node_modules/w3c-keyname/index.js.map +1 -1
  215. package/dist/node_modules/xlsx/xlsx.mjs.js +2 -1
  216. package/dist/node_modules/xlsx/xlsx.mjs.js.map +1 -1
  217. package/dist/src/components/auth/ClientDetector.js +1 -1
  218. package/dist/src/components/auth/ClientOnly.js +1 -1
  219. package/dist/src/components/auth/FromInstinctHub.js +1 -1
  220. package/dist/src/components/auth/FromInstinctHub.js.map +1 -1
  221. package/dist/src/components/auth/IsUsernameEmailTaken.js +1 -1
  222. package/dist/src/components/auth/LoginForm.js +1 -1
  223. package/dist/src/components/auth/PasswordsMatch.js +1 -1
  224. package/dist/src/components/auth/ReactClientProviders.js +1 -1
  225. package/dist/src/components/cursors/Cursor.js +1 -1
  226. package/dist/src/components/cursors/CursorContext.js +1 -1
  227. package/dist/src/components/cursors/CursorControlDemo.js +1 -1
  228. package/dist/src/components/cursors/MagneticButton.js +1 -1
  229. package/dist/src/components/cursors/index.js +1 -1
  230. package/dist/src/components/cursors/index.js.map +1 -1
  231. package/dist/src/components/cursors/useCursorInteraction.js +1 -1
  232. package/dist/src/components/forms/ActionCallbackDropdown.js +1 -1
  233. package/dist/src/components/forms/ActionDropdown.js +1 -1
  234. package/dist/src/components/forms/AnimatedBox.js +1 -1
  235. package/dist/src/components/forms/CheckBoxes.js +1 -1
  236. package/dist/src/components/forms/CheckboxesField.js +1 -1
  237. package/dist/src/components/forms/ChipsInput.js +1 -1
  238. package/dist/src/components/forms/DateInput.js +1 -1
  239. package/dist/src/components/forms/DateInputPicker.js +1 -1
  240. package/dist/src/components/forms/DateTimeInput.js +1 -1
  241. package/dist/src/components/forms/DownloadAsExcel.js +1 -1
  242. package/dist/src/components/forms/DropFile.js +1 -1
  243. package/dist/src/components/forms/EmailList.js +1 -1
  244. package/dist/src/components/forms/FileField.js +1 -1
  245. package/dist/src/components/forms/FilterArray.js +1 -1
  246. package/dist/src/components/forms/FilterBy.js +1 -1
  247. package/dist/src/components/forms/FilterObjects.js +1 -1
  248. package/dist/src/components/forms/FormError.js +1 -1
  249. package/dist/src/components/forms/FormError.js.map +1 -1
  250. package/dist/src/components/forms/HandleError.js +1 -1
  251. package/dist/src/components/forms/InputAmount.js +1 -1
  252. package/dist/src/components/forms/InputNumber.js +1 -1
  253. package/dist/src/components/forms/InputText.js +1 -1
  254. package/dist/src/components/forms/InputTextarea.js +1 -1
  255. package/dist/src/components/forms/Logout.js +1 -1
  256. package/dist/src/components/forms/MessageDisplay.js +1 -1
  257. package/dist/src/components/forms/MessageDisplay.js.map +1 -1
  258. package/dist/src/components/forms/MultipleEmail.js +1 -1
  259. package/dist/src/components/forms/PageLoading.js +1 -1
  260. package/dist/src/components/forms/PageLoading.js.map +1 -1
  261. package/dist/src/components/forms/PasswordField.js +1 -1
  262. package/dist/src/components/forms/PhoneNumberInput.js +1 -1
  263. package/dist/src/components/forms/RadioField.js +1 -1
  264. package/dist/src/components/forms/RadioField.js.map +1 -1
  265. package/dist/src/components/forms/RadioSimple.js +1 -1
  266. package/dist/src/components/forms/RadioSimple.js.map +1 -1
  267. package/dist/src/components/forms/ReactTimeAgo.js +1 -1
  268. package/dist/src/components/forms/ReadTermsAndCondition.js +1 -1
  269. package/dist/src/components/forms/SearchField.js +1 -1
  270. package/dist/src/components/forms/SearchFieldDB.js +1 -1
  271. package/dist/src/components/forms/SearchObjectsFromDB.js +1 -1
  272. package/dist/src/components/forms/StepProgressBar.js +1 -1
  273. package/dist/src/components/forms/StepProgressBar.js.map +1 -1
  274. package/dist/src/components/forms/SubmitButton.js +1 -1
  275. package/dist/src/components/forms/TBodyNoData.js +1 -1
  276. package/dist/src/components/forms/TBodyNoData.js.map +1 -1
  277. package/dist/src/components/forms/THeadSortBtn.js +1 -1
  278. package/dist/src/components/forms/THeadSortBtn.js.map +1 -1
  279. package/dist/src/components/forms/THeadSortList.js +1 -1
  280. package/dist/src/components/forms/Tables.js +1 -1
  281. package/dist/src/components/forms/TextArea.js +1 -1
  282. package/dist/src/components/forms/TextArea.js.map +1 -1
  283. package/dist/src/components/forms/TextField.js +1 -1
  284. package/dist/src/components/forms/ToggleButton.js +1 -1
  285. package/dist/src/components/forms/Tooltip.js +1 -1
  286. package/dist/src/components/forms/UnsplashRandomImage.js +1 -1
  287. package/dist/src/components/forms/radio-btn/RadioButton.js +1 -1
  288. package/dist/src/components/forms/radio-btn/RadioButton.js.map +1 -1
  289. package/dist/src/components/forms/radio-btn/RadioGroup.js +1 -1
  290. package/dist/src/components/forms/radio-btn/RadioGroup.js.map +1 -1
  291. package/dist/src/components/forms/uploads/FileUploader.js +1 -1
  292. package/dist/src/components/forms/uploads/IhubFileUploader.js +1 -1
  293. package/dist/src/components/lib/auth/actions.js +1 -1
  294. package/dist/src/components/lib/auth/dbRequestst.js +1 -1
  295. package/dist/src/components/lib/auth/dbRequestst.js.map +1 -1
  296. package/dist/src/components/lib/charts.js +1 -1
  297. package/dist/src/components/lib/charts.js.map +1 -1
  298. package/dist/src/components/lib/convertArrayToObject.js +1 -1
  299. package/dist/src/components/lib/convertArrayToObject.js.map +1 -1
  300. package/dist/src/components/lib/createSubscription.js +1 -1
  301. package/dist/src/components/lib/createSubscription.js.map +1 -1
  302. package/dist/src/components/lib/elementIsVisibleInViewport.js +1 -1
  303. package/dist/src/components/lib/elementIsVisibleInViewport.js.map +1 -1
  304. package/dist/src/components/lib/fileToBase64.js +1 -1
  305. package/dist/src/components/lib/fileToBase64.js.map +1 -1
  306. package/dist/src/components/lib/formError.js +1 -1
  307. package/dist/src/components/lib/formError.js.map +1 -1
  308. package/dist/src/components/lib/format.js +1 -1
  309. package/dist/src/components/lib/format.js.map +1 -1
  310. package/dist/src/components/lib/getPriceObjects.js +1 -1
  311. package/dist/src/components/lib/getPriceObjects.js.map +1 -1
  312. package/dist/src/components/lib/helpFunction.js +1 -1
  313. package/dist/src/components/lib/helpFunction.js.map +1 -1
  314. package/dist/src/components/lib/index.js +1 -1
  315. package/dist/src/components/lib/index.js.map +1 -1
  316. package/dist/src/components/lib/json/accounts.js +1 -1
  317. package/dist/src/components/lib/json/accounts.js.map +1 -1
  318. package/dist/src/components/lib/json/countryObjects.js +1 -1
  319. package/dist/src/components/lib/json/countryObjects.js.map +1 -1
  320. package/dist/src/components/lib/json/unsplashDefaultObject.js +1 -1
  321. package/dist/src/components/lib/json/unsplashDefaultObject.js.map +1 -1
  322. package/dist/src/components/lib/loadScript.js +2 -0
  323. package/dist/src/components/lib/loadScript.js.map +1 -0
  324. package/dist/src/components/lib/modals/modals.js +1 -1
  325. package/dist/src/components/lib/modals/modals.js.map +1 -1
  326. package/dist/src/components/lib/modals/openConfirmDelete.js +1 -1
  327. package/dist/src/components/lib/modals/openConfirmDelete.js.map +1 -1
  328. package/dist/src/components/lib/oauth_json.js +1 -1
  329. package/dist/src/components/lib/oauth_json.js.map +1 -1
  330. package/dist/src/components/lib/paystack.js +1 -1
  331. package/dist/src/components/lib/paystack.js.map +1 -1
  332. package/dist/src/components/lib/permissions.js +1 -1
  333. package/dist/src/components/lib/permissions.js.map +1 -1
  334. package/dist/src/components/lib/queryParameters/index.js +1 -1
  335. package/dist/src/components/lib/queryParameters/index.js.map +1 -1
  336. package/dist/src/components/lib/redux/index.js +1 -1
  337. package/dist/src/components/lib/redux/middleware.js +1 -1
  338. package/dist/src/components/lib/redux/middleware.js.map +1 -1
  339. package/dist/src/components/lib/redux/rootReducer.js +1 -1
  340. package/dist/src/components/lib/redux/rootReducer.js.map +1 -1
  341. package/dist/src/components/lib/redux/slices/authSlice/channelCallbackUrl.js +1 -1
  342. package/dist/src/components/lib/redux/slices/authSlice/channelCallbackUrl.js.map +1 -1
  343. package/dist/src/components/lib/redux/slices/authSlice/selectors.js +1 -1
  344. package/dist/src/components/lib/redux/slices/authSlice/selectors.js.map +1 -1
  345. package/dist/src/components/lib/redux/slices/channelSlice/activeChannel.js +1 -1
  346. package/dist/src/components/lib/redux/slices/channelSlice/activeChannel.js.map +1 -1
  347. package/dist/src/components/lib/redux/slices/channelSlice/channelDetails.js +1 -1
  348. package/dist/src/components/lib/redux/slices/channelSlice/channelDetails.js.map +1 -1
  349. package/dist/src/components/lib/redux/slices/channelSlice/channelHandle.js +1 -1
  350. package/dist/src/components/lib/redux/slices/channelSlice/channelHandle.js.map +1 -1
  351. package/dist/src/components/lib/redux/slices/channelSlice/instructorChannelList.js +1 -1
  352. package/dist/src/components/lib/redux/slices/channelSlice/instructorChannelList.js.map +1 -1
  353. package/dist/src/components/lib/redux/slices/channelSlice/selectors.js +1 -1
  354. package/dist/src/components/lib/redux/slices/channelSlice/selectors.js.map +1 -1
  355. package/dist/src/components/lib/redux/slices/courseSlice/courseDetails.js +1 -1
  356. package/dist/src/components/lib/redux/slices/courseSlice/courseDetails.js.map +1 -1
  357. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterDuration.js +1 -1
  358. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterDuration.js.map +1 -1
  359. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterLevel.js +1 -1
  360. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterLevel.js.map +1 -1
  361. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterSubject.js +1 -1
  362. package/dist/src/components/lib/redux/slices/courseSlice/courseFilterSubject.js.map +1 -1
  363. package/dist/src/components/lib/redux/slices/courseSlice/courseModules.js +1 -1
  364. package/dist/src/components/lib/redux/slices/courseSlice/courseModules.js.map +1 -1
  365. package/dist/src/components/lib/redux/slices/courseSlice/courseOverview.js +1 -1
  366. package/dist/src/components/lib/redux/slices/courseSlice/courseOverview.js.map +1 -1
  367. package/dist/src/components/lib/redux/slices/courseSlice/courseSearch.js +1 -1
  368. package/dist/src/components/lib/redux/slices/courseSlice/courseSearch.js.map +1 -1
  369. package/dist/src/components/lib/redux/slices/courseSlice/selectedCourses.js +1 -1
  370. package/dist/src/components/lib/redux/slices/courseSlice/selectedCourses.js.map +1 -1
  371. package/dist/src/components/lib/redux/slices/courseSlice/selectors.js +1 -1
  372. package/dist/src/components/lib/redux/slices/courseSlice/selectors.js.map +1 -1
  373. package/dist/src/components/lib/redux/slices/courseSlice/stepContent.js +1 -1
  374. package/dist/src/components/lib/redux/slices/courseSlice/stepContent.js.map +1 -1
  375. package/dist/src/components/lib/redux/slices/courseSlice/stepQuestions.js +1 -1
  376. package/dist/src/components/lib/redux/slices/courseSlice/stepQuestions.js.map +1 -1
  377. package/dist/src/components/lib/redux/slices/courseSlice/videoTimestamp.js +1 -1
  378. package/dist/src/components/lib/redux/slices/courseSlice/videoTimestamp.js.map +1 -1
  379. package/dist/src/components/lib/redux/slices/courseSlice/videoTimestampObject.js +1 -1
  380. package/dist/src/components/lib/redux/slices/courseSlice/videoTimestampObject.js.map +1 -1
  381. package/dist/src/components/lib/redux/slices/generics/arraySlice.js +1 -1
  382. package/dist/src/components/lib/redux/slices/generics/arraySlice.js.map +1 -1
  383. package/dist/src/components/lib/redux/slices/generics/objectSlice.js +1 -1
  384. package/dist/src/components/lib/redux/slices/generics/objectSlice.js.map +1 -1
  385. package/dist/src/components/lib/redux/slices/generics/selectors.js +1 -1
  386. package/dist/src/components/lib/redux/slices/generics/selectors.js.map +1 -1
  387. package/dist/src/components/lib/redux/slices/messageSlice/feedbackToggle.js +1 -1
  388. package/dist/src/components/lib/redux/slices/messageSlice/feedbackToggle.js.map +1 -1
  389. package/dist/src/components/lib/redux/slices/messageSlice/selectors.js +1 -1
  390. package/dist/src/components/lib/redux/slices/messageSlice/selectors.js.map +1 -1
  391. package/dist/src/components/lib/redux/slices/messageSlice/statusMessageState.js +1 -1
  392. package/dist/src/components/lib/redux/slices/messageSlice/statusMessageState.js.map +1 -1
  393. package/dist/src/components/lib/redux/slices/navigationSlice/IPAdress.js +1 -1
  394. package/dist/src/components/lib/redux/slices/navigationSlice/IPAdress.js.map +1 -1
  395. package/dist/src/components/lib/redux/slices/navigationSlice/appToggle.js +1 -1
  396. package/dist/src/components/lib/redux/slices/navigationSlice/appToggle.js.map +1 -1
  397. package/dist/src/components/lib/redux/slices/navigationSlice/confirmDelete.js +1 -1
  398. package/dist/src/components/lib/redux/slices/navigationSlice/confirmDelete.js.map +1 -1
  399. package/dist/src/components/lib/redux/slices/navigationSlice/courseNextStep.js +1 -1
  400. package/dist/src/components/lib/redux/slices/navigationSlice/courseNextStep.js.map +1 -1
  401. package/dist/src/components/lib/redux/slices/navigationSlice/currentPromo.js +1 -1
  402. package/dist/src/components/lib/redux/slices/navigationSlice/currentPromo.js.map +1 -1
  403. package/dist/src/components/lib/redux/slices/navigationSlice/searchValue.js +1 -1
  404. package/dist/src/components/lib/redux/slices/navigationSlice/searchValue.js.map +1 -1
  405. package/dist/src/components/lib/redux/slices/navigationSlice/selectors.js +1 -1
  406. package/dist/src/components/lib/redux/slices/navigationSlice/selectors.js.map +1 -1
  407. package/dist/src/components/lib/redux/slices/navigationSlice/settingsToggle.js +1 -1
  408. package/dist/src/components/lib/redux/slices/navigationSlice/settingsToggle.js.map +1 -1
  409. package/dist/src/components/lib/redux/slices/navigationSlice/toggleCreateCohort.js +1 -1
  410. package/dist/src/components/lib/redux/slices/navigationSlice/toggleCreateCohort.js.map +1 -1
  411. package/dist/src/components/lib/redux/slices/navigationSlice/toggleCreateCourse.js +1 -1
  412. package/dist/src/components/lib/redux/slices/navigationSlice/toggleCreateCourse.js.map +1 -1
  413. package/dist/src/components/lib/redux/slices/navigationSlice/userLocation.js +1 -1
  414. package/dist/src/components/lib/redux/slices/navigationSlice/userLocation.js.map +1 -1
  415. package/dist/src/components/lib/redux/slices/utilsSlice/screenSize.js +1 -1
  416. package/dist/src/components/lib/redux/slices/utilsSlice/screenSize.js.map +1 -1
  417. package/dist/src/components/lib/redux/slices/utilsSlice/selectors.js +1 -1
  418. package/dist/src/components/lib/redux/slices/utilsSlice/selectors.js.map +1 -1
  419. package/dist/src/components/lib/redux/store.js +1 -1
  420. package/dist/src/components/lib/redux/store.js.map +1 -1
  421. package/dist/src/components/lib/roles.js +1 -1
  422. package/dist/src/components/lib/roles.js.map +1 -1
  423. package/dist/src/components/lib/utils.js +1 -1
  424. package/dist/src/components/lib/utils.js.map +1 -1
  425. package/dist/src/components/navbar/Breadcrumb.js +1 -1
  426. package/dist/src/components/navbar/ChannelListAvatar.js +1 -1
  427. package/dist/src/components/navbar/MenuDropdown.js +1 -1
  428. package/dist/src/components/navbar/ResponsiveNavbar.js +1 -1
  429. package/dist/src/components/navbar/SideNavbar.js +1 -1
  430. package/dist/src/components/status/CopyToClipBoard.js +1 -1
  431. package/dist/src/components/status/DeleteConfirmationModal.js +1 -1
  432. package/dist/src/components/status/Error500.js +1 -1
  433. package/dist/src/components/status/Error500.js.map +1 -1
  434. package/dist/src/components/status/ErrorState.js +1 -1
  435. package/dist/src/components/status/ErrorState.js.map +1 -1
  436. package/dist/src/components/status/ModalExamples.js +1 -1
  437. package/dist/src/components/status/MultiPurposeModal.js +1 -1
  438. package/dist/src/components/status/NotFound.js +1 -1
  439. package/dist/src/components/status/ReactTimeTracker.js +1 -1
  440. package/dist/src/components/status/SessionHandleProvider.js +1 -1
  441. package/dist/src/components/status/Unauthorized.js +1 -1
  442. package/dist/src/components/status/Unauthorized.js.map +1 -1
  443. package/dist/src/components/tabs/TabContent.js +1 -1
  444. package/dist/src/components/tabs/TabContent.js.map +1 -1
  445. package/dist/src/components/tabs/Tabs.js +1 -1
  446. package/dist/src/components/tabs/VerticalTabs.js +1 -1
  447. package/dist/src/components/theme/ChangeStyleVariable.js +1 -1
  448. package/dist/src/components/theme/DarkModeProvider.js +1 -1
  449. package/dist/src/components/theme/LoadingAnimate.js +1 -1
  450. package/dist/src/components/theme/LoadingAnimate.js.map +1 -1
  451. package/dist/src/components/theme/SessionProviders.js +1 -1
  452. package/dist/src/components/theme/signout/SessionExpiresLogout.js +1 -1
  453. package/dist/src/components/theme/signout/SignOutSession.js +1 -1
  454. package/dist/src/components/ui/Action.js +1 -1
  455. package/dist/src/components/ui/Action.js.map +1 -1
  456. package/dist/src/components/ui/Badge.js +1 -1
  457. package/dist/src/components/ui/Badge.js.map +1 -1
  458. package/dist/src/components/ui/ColorPicker.js +1 -1
  459. package/dist/src/components/ui/ComponentLists.js +1 -1
  460. package/dist/src/components/ui/ComponentLists.js.map +1 -1
  461. package/dist/src/components/ui/Dropdown.js +1 -1
  462. package/dist/src/components/ui/OrDivider.js +1 -1
  463. package/dist/src/components/ui/cards/Card.js +1 -1
  464. package/dist/src/components/ui/cards/CardGrid.js +1 -1
  465. package/dist/src/components/ui/cards/CardGrid.js.map +1 -1
  466. package/dist/src/components/ui/cards/CardList.js +1 -1
  467. package/dist/src/components/ui/cards/CardList.js.map +1 -1
  468. package/dist/src/components/ui/cards/FeatureCard.js +1 -1
  469. package/dist/src/components/ui/cards/FeatureCard.js.map +1 -1
  470. package/dist/src/components/ui/cards/HorizontalCard.js +1 -1
  471. package/dist/src/components/ui/cards/HorizontalCard.js.map +1 -1
  472. package/dist/src/components/ui/cards/MediaCard.js +1 -1
  473. package/dist/src/components/ui/cards/MediaCard.js.map +1 -1
  474. package/dist/src/components/ui/cards/PricingCard.js +1 -1
  475. package/dist/src/components/ui/cards/PricingCard.js.map +1 -1
  476. package/dist/src/components/ui/cards/ProfileCard.js +1 -1
  477. package/dist/src/components/ui/cards/ProfileCard.js.map +1 -1
  478. package/dist/src/components/ui/charts/ChartConfigurator.js +1 -1
  479. package/dist/src/components/ui/charts/InstinctHubChart.js +1 -1
  480. package/dist/src/components/ui/charts/InstinctHubChartDashboard.js +1 -1
  481. package/dist/src/components/ui/create-button/CreateButton.js +1 -1
  482. package/dist/src/components/ui/create-button/CreateButtonExample.js +1 -1
  483. package/dist/src/components/ui/create-button/CreateButtonExample.js.map +1 -1
  484. package/dist/src/components/ui/dialogs/Dialog.js +1 -1
  485. package/dist/src/components/ui/editor/CustomTextEditor.js +1 -1
  486. package/dist/src/components/ui/editor/MenuBar.js +1 -1
  487. package/dist/src/components/ui/images/RandomGradientImage.js +1 -1
  488. package/dist/src/components/ui/images/RandomGradientImage.js.map +1 -1
  489. package/dist/src/components/ui/pagination/Pagination.js +1 -1
  490. package/dist/src/components/ui/pagination/PaginationDemo.js +1 -1
  491. package/dist/src/components/ui/tables/IHubTable.js +1 -1
  492. package/dist/src/components/ui/tables/IHubTableServer.js +1 -1
  493. package/dist/src/components/ui/viewer/CodeDisplay.js +1 -1
  494. package/dist/src/components/ui/viewer/ContentViewOrEdit.js +1 -1
  495. package/dist/src/components/ui/viewer/ContentViewer.js +1 -1
  496. package/dist/src/index.js +1 -1
  497. package/dist/src/ssr.js +1 -1
  498. package/dist/src/types/components/auth/IsUsernameEmailTaken.d.ts +13 -0
  499. package/dist/src/types/components/forms/DateInput.d.ts +3 -4
  500. package/dist/src/types/components/forms/FilterObjects.d.ts +1 -1
  501. package/dist/src/types/components/forms/uploads/IhubFileUploader.d.ts +1 -1
  502. package/dist/src/types/components/lib/index.d.ts +1 -1
  503. package/dist/src/types/components/lib/redux/slices/channelSlice/channelDetails.d.ts +1 -1
  504. package/dist/src/types/components/lib/redux/slices/channelSlice/instructorChannelList.d.ts +3 -2
  505. package/dist/src/types/components/lib/redux/slices/courseSlice/courseDetails.d.ts +1 -1
  506. package/dist/src/types/components/lib/redux/slices/courseSlice/courseFilterDuration.d.ts +1 -1
  507. package/dist/src/types/components/lib/redux/slices/courseSlice/courseFilterLevel.d.ts +1 -1
  508. package/dist/src/types/components/lib/redux/slices/courseSlice/courseFilterSubject.d.ts +1 -1
  509. package/dist/src/types/components/lib/redux/slices/courseSlice/courseModules.d.ts +1 -1
  510. package/dist/src/types/components/lib/redux/slices/courseSlice/courseOverview.d.ts +1 -1
  511. package/dist/src/types/components/lib/redux/slices/courseSlice/courseSearch.d.ts +1 -1
  512. package/dist/src/types/components/lib/redux/slices/courseSlice/stepContent.d.ts +1 -1
  513. package/dist/src/types/components/lib/redux/slices/courseSlice/stepQuestions.d.ts +1 -1
  514. package/dist/src/types/components/lib/redux/slices/courseSlice/videoTimestamp.d.ts +1 -1
  515. package/dist/src/types/components/lib/redux/slices/courseSlice/videoTimestampObject.d.ts +1 -1
  516. package/dist/src/types/components/lib/redux/slices/navigationSlice/IPAdress.d.ts +1 -1
  517. package/dist/src/types/components/status/ReactTimeTracker.d.ts +1 -1
  518. package/dist/src/types/components/tabs/Tabs.d.ts +1 -1
  519. package/dist/src/types/components/tabs/VerticalTabs.d.ts +1 -1
  520. package/dist/src/types/components/theme/signout/SessionExpiresLogout.d.ts +1 -1
  521. package/dist/src/types/components/ui/Action.d.ts +1 -1
  522. package/dist/src/types/types/index.d.ts +4 -0
  523. package/dist/tsconfig.tsbuildinfo +1 -1
  524. package/package.json +48 -20
@@ -1 +1 @@
1
- {"version":3,"file":"helpFunction.js","sources":["../../../../src/components/lib/helpFunction.ts"],"sourcesContent":["// TypeScript version of the original JavaScript document\r\nimport { format } from \"date-fns\";\r\nimport { forbidden, notFound } from \"next/navigation\";\r\nimport { openToast } from \"./modals/modals\";\r\nimport React from \"react\";\r\n\r\n// Constants with Type Safety\r\nexport const IN_DEV_MODE: boolean = process.env.NODE_ENV === \"development\";\r\nexport const API_HOST_URL: string = process.env.NEXT_PUBLIC_API_HOST ?? \"\";\r\nexport const FILE_URL: string = process.env.NEXT_PUBLIC_FILE_URL ?? \"\";\r\nexport const VIDEO_URL: string = process.env.NEXT_PUBLIC_VIDEO_URL ?? \"\";\r\nexport const CODECS_URL_M3U8: string =\r\n process.env.NEXT_PUBLIC_VIDEO_URL_CODECS_M3U8 ?? \"\";\r\n\r\nexport const romansFigure: string[] = [\r\n \"I\",\r\n \"II\",\r\n \"III\",\r\n \"IV\",\r\n \"V\",\r\n \"VI\",\r\n \"VII\",\r\n \"VIII\",\r\n \"IX\",\r\n \"X\",\r\n];\r\n\r\n// Interfaces for Type Safety\r\ninterface VercelDomainRequest {\r\n name: string;\r\n}\r\n\r\ninterface VercelFetchOptions extends RequestInit {\r\n headers: {\r\n Authorization: string;\r\n [key: string]: string;\r\n };\r\n}\r\n\r\ninterface Course {\r\n credits: string | number;\r\n}\r\n\r\ninterface CourseObj {\r\n course: Course;\r\n}\r\n\r\ninterface SubDomainResult {\r\n value: string;\r\n field: \"username\" | \"domain\";\r\n}\r\n\r\ninterface FormItem {\r\n [key: string]: string | number | object | Blob | null | undefined | any[];\r\n}\r\n\r\ninterface RequestOptions extends RequestInit {\r\n headers: Record<string, string>;\r\n body?: BodyInit | FormData | null;\r\n}\r\n\r\n// Functions\r\n\r\n/**\r\n * Adds a subdomain to Vercel project.\r\n * @param domain The domain to add as a subdomain\r\n * @returns Promise resolving to the fetch Response\r\n */\r\nexport const addUserDomain = async (domain: string): Promise<Response> => {\r\n const payload: VercelDomainRequest = { name: `${domain}.instincthub.com` };\r\n const vercelOptions: VercelFetchOptions = {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${\r\n process.env.NEXT_PUBLIC_VERCEL_AUTH_BEARER_TOKEN ?? \"\"\r\n }`,\r\n },\r\n body: JSON.stringify(payload),\r\n };\r\n\r\n return fetch(\r\n `https://api.vercel.com/v10/projects/${process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID}/domains?teamId=${process.env.NEXT_PUBLIC_VERCEL_TEAM_ID}`,\r\n vercelOptions\r\n );\r\n};\r\n\r\n/**\r\n * Strips HTML tags from a string.\r\n * @param str Input string with potential HTML tags\r\n * @returns Cleaned string without HTML tags\r\n */\r\nexport const stripHtmlTags = (str: string): string => {\r\n return str.replace(/<[^>]*>/g, \"\");\r\n};\r\n\r\n/**\r\n * Removes commas from a number string and converts to number.\r\n * @param str Input string or number\r\n * @returns Parsed number or 0 if invalid\r\n */\r\nexport const stripCommaFromNumber = (str: string | number): number => {\r\n try {\r\n if (typeof str === \"number\") return str;\r\n const val = str.replace(/,/g, \"\");\r\n return Number(val) || 0;\r\n } catch {\r\n return 0;\r\n }\r\n};\r\n\r\n/**\r\n * Calculates total credits from an array of course objects.\r\n * @param courses Array of course objects\r\n * @returns Total credits as a number\r\n */\r\nexport const calculateTotalCredits = (courses: CourseObj[]): number => {\r\n return courses.reduce((total, { course }) => {\r\n const credits = Number.parseInt(course.credits.toString(), 10) || 0;\r\n return total + credits;\r\n }, 0);\r\n};\r\n\r\n/**\r\n * Calculates amount after percentage deduction.\r\n * @param amount Base amount\r\n * @param percentage Percentage to deduct (0-100)\r\n * @returns Object with final amount or error details\r\n */\r\nexport const calculateAmountAfterDeduction = (\r\n amount: number,\r\n percentage: number\r\n): { amount: number; detail?: string } => {\r\n if (amount < 0 || percentage < 0 || percentage > 100) {\r\n return {\r\n amount: 0,\r\n detail:\r\n \"Amount and percentage should be positive, and percentage should be between 0 and 100.\",\r\n };\r\n }\r\n const deduction = (amount * percentage) / 100;\r\n return { amount: amount - deduction };\r\n};\r\n\r\n/**\r\n * Finds keys in an object that are null, undefined, or empty string.\r\n * @param namesArray Array of keys to check\r\n * @param obj Object to inspect\r\n * @returns Array of keys with null/empty values\r\n */\r\nexport const findNullOrEmptyKeys = <T extends Record<string, any>>(\r\n namesArray: string[],\r\n obj: T\r\n): string[] => {\r\n return namesArray.filter((key) => obj[key] == null || obj[key] === \"\");\r\n};\r\n\r\n/**\r\n * Extracts subdomain or domain from hostname.\r\n * @param hostname Hostname string\r\n * @returns Subdomain result or null\r\n */\r\nexport const extractSubDomain = (hostname: string): SubDomainResult | null => {\r\n if (IN_DEV_MODE) return { value: \"eportal.hust.edu.ng\", field: \"username\" };\r\n if (!hostname.includes(\"instincthub.com\") && !IN_DEV_MODE) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n\r\n const parts = hostname.split(\".\");\r\n if (parts.length > 1) {\r\n if (parts[1] === \"ngrok-free\")\r\n return { value: \"skills\", field: \"username\" };\r\n if (\r\n parts[parts.length - 2] !== \"instincthub\" &&\r\n !hostname.includes(\"localhost\")\r\n ) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n return { value: parts[0], field: \"username\" };\r\n }\r\n\r\n if (parts.length === 1 || parts.length === 2) {\r\n if (\r\n parts[0].includes(\"localhost:3000\") ||\r\n parts[0] === \"instincthub\" ||\r\n parts[1] === \"ngrok-free\"\r\n ) {\r\n return { value: \"eportal.hust.edu.ng\", field: \"username\" };\r\n }\r\n if (\r\n !parts[parts.length - 2]?.includes(\"instincthub\") &&\r\n !hostname.includes(\"localhost\")\r\n ) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n return { value: parts[0], field: \"domain\" };\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Converts an array of objects to FormData.\r\n * @param array Array of items to convert\r\n * @returns FormData object\r\n */\r\nexport const convertArrayToFormData = (array: FormItem[]): FormData => {\r\n const formData = new FormData();\r\n array.forEach((item, index) => {\r\n Object.entries(item).forEach(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n formData.append(`item[${index}].${key}`, JSON.stringify(value));\r\n } else if (typeof value === \"object\" && value !== null) {\r\n if (key === \"upload_result\" && \"objectURL\" in value) {\r\n fetch((value as { objectURL: string }).objectURL)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n formData.append(\r\n `item[${index}].${key}`,\r\n blob,\r\n \"upload_result_file\"\r\n );\r\n })\r\n .catch((error) =>\r\n console.error(\"Error converting blob URL:\", error)\r\n );\r\n } else {\r\n formData.append(`item[${index}].${key}`, JSON.stringify(value));\r\n }\r\n } else {\r\n formData.append(`item[${index}].${key}`, String(value ?? \"\"));\r\n }\r\n });\r\n });\r\n return formData;\r\n};\r\n\r\n/**\r\n * Checks if an object is empty\r\n * @param obj Object to check\r\n * @returns True if empty, false otherwise\r\n */\r\nexport const objectIsEmpty = (obj: any): boolean => {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) return false;\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Handles form validation errors.\r\n * @param e Event object from form input\r\n * @param formError Current error list\r\n * @param setFormError Function to update error list\r\n * @returns Error message with status code\r\n */\r\nexport const handleInvalid = (\r\n e: React.FormEvent<HTMLInputElement>,\r\n formError: string[],\r\n setFormError: (errors: string[]) => void\r\n): [string, number] => {\r\n const target = e.target as HTMLInputElement;\r\n if (!formError.includes(target.name)) {\r\n setFormError([...formError, target.dataset.name || target.name]);\r\n }\r\n\r\n const errTag = document.getElementById(`id_${target.name}`);\r\n if (errTag) errTag.scrollIntoView();\r\n\r\n return [`Error: ${formError.join(\", \")} field(s) cannot be left blank.`, 400];\r\n};\r\n\r\n/**\r\n * Calculates average rating from an array of numbers.\r\n * @param ratings Array of ratings\r\n * @returns Average rating as a string with 1 decimal place\r\n */\r\nexport const calculateAverageRating = (ratings: number[]): string => {\r\n if (!ratings.length) return \"0.0\";\r\n const sum = ratings.reduce((acc, rating) => acc + rating, 0);\r\n return (sum / ratings.length).toFixed(1);\r\n};\r\n\r\n/**\r\n * Converts a string to a float, removing commas.\r\n * @param value Input string\r\n * @returns Parsed float\r\n */\r\nexport const convertToFloat = (value: string): number => {\r\n return parseFloat(value.replace(/,/g, \"\")) || 0;\r\n};\r\n\r\n/**\r\n * Formats a number with commas.\r\n * @param number Input number\r\n * @returns Formatted string or error message\r\n */\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n if (isNaN(number)) return \"Invalid number\";\r\n const [integer, decimal] = number.toString().split(\".\");\r\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n return decimal ? `${formattedInteger}.${decimal}` : formattedInteger;\r\n};\r\n\r\nexport const slugifyFileName = (fileName: string): string => {\r\n // Split the fileName by dot to separate the name and extension\r\n const parts: string[] = fileName.split(\".\");\r\n\r\n // Extract the extension\r\n const extension: string = parts.pop() || \"\";\r\n\r\n // Join the remaining parts with hyphen and replace special characters and brackets with hyphens\r\n const slugifiedName: string = parts\r\n .join(\"-\")\r\n .replace(/[^\\w\\s()-]/g, \"\")\r\n .replace(/[\\s_]+/g, \"-\")\r\n .toLowerCase();\r\n\r\n // Remove parentheses from the slugified name\r\n const nameWithoutParentheses: string = slugifiedName.replace(\r\n /\\(([^)]+)\\)/g,\r\n \"\"\r\n );\r\n\r\n // Only take first 50 characters\r\n const reduced_txt: string = nameWithoutParentheses.slice(0, 50);\r\n\r\n // Append the extension\r\n return reduced_txt + \".\" + extension.toLowerCase();\r\n};\r\n\r\n/**\r\n * Converts a string to a URL-friendly slug format.\r\n * @param value The string to convert to a slug\r\n * @example\r\n * ```ts\r\n * const slug = convertToSlug(\"Hello World\");\r\n * console.log(slug); // \"hello-world\"\r\n * ```\r\n * @returns A lowercase string with spaces and special characters replaced by hyphens\r\n * @throws Error if the resulting slug contains invalid characters\r\n */\r\nexport const convertToSlug = (value: string): string => {\r\n // Normalize the string to remove accents and other diacritics\r\n value = value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n\r\n // Convert to lowercase\r\n value = value.toLowerCase();\r\n\r\n // Replace any non-alphanumeric characters with a hyphen\r\n value = value.replace(/[^a-z0-9]+/g, \"-\");\r\n\r\n // Remove leading or trailing hyphens\r\n value = value.replace(/^-+|-+$/g, \"\");\r\n\r\n // Ensure the slug only contains valid characters\r\n if (!/^[a-z0-9_-]+$/.test(value)) {\r\n throw new Error(\r\n 'Enter a valid \"slug\" consisting of letters, numbers, underscores, or hyphens.'\r\n );\r\n }\r\n\r\n return value;\r\n};\r\n\r\n/**\r\n * Checks if an element is in the viewport.\r\n * @param element DOM element\r\n * @returns Boolean indicating visibility\r\n */\r\nexport const TrackViewPort = (element: HTMLElement | null): boolean => {\r\n if (!element) return false;\r\n const rect = element.getBoundingClientRect();\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <=\r\n (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n};\r\n\r\n/**\r\n * Formats duration in minutes to a readable string.\r\n * @param durationInMinutes Duration in minutes\r\n * @returns Formatted duration string\r\n */\r\nexport const formatDuration = (durationInMinutes: number): string => {\r\n if (durationInMinutes === 0) return \"...\";\r\n if (durationInMinutes < 60) {\r\n return Math.floor(durationInMinutes)\r\n ? `${Math.floor(durationInMinutes)} Minutes`\r\n : `${durationInMinutes.toFixed(1)} Seconds`;\r\n }\r\n const hours = Math.floor(durationInMinutes / 60);\r\n const minutes = Math.floor(durationInMinutes % 60);\r\n return minutes === 0\r\n ? `${hours} Hours`\r\n : `${hours} Hours, ${minutes} Minutes`;\r\n};\r\n\r\n/**\r\n * Truncates HTML content to a specified length.\r\n * @param markdownText HTML string\r\n * @param maxLength Maximum length\r\n * @returns Truncated string\r\n */\r\nexport const truncateHtml = (\r\n markdownText: string,\r\n maxLength: number\r\n): string => {\r\n return markdownText.length > maxLength\r\n ? `${markdownText.substring(0, maxLength)}...`\r\n : markdownText;\r\n};\r\n\r\n/**\r\n * Formats a date to a readable string.\r\n * @param date Date object or string\r\n * @param type Format type (default: \"iiii do MMMM yyyy\")\r\n * @returns Formatted date string\r\n */\r\nexport const formatDateToWord = (\r\n date: Date | string,\r\n type: string = \"iiii do MMMM yyyy\"\r\n): string => {\r\n if (!date) return \"\";\r\n return format(new Date(date), type);\r\n};\r\n\r\n/**\r\n * Encodes the current URL.\r\n * @returns Encoded URL string or undefined if not in browser\r\n */\r\nexport const hostUrlEncode = (): string | undefined => {\r\n if (typeof document !== \"undefined\") {\r\n return encodeURIComponent(window.location.href);\r\n }\r\n};\r\n\r\n/**\r\n * Validates if input is alphanumeric and at least 3 characters.\r\n * @param input Input string\r\n * @returns Boolean indicating validity\r\n */\r\nexport const isValidAlphanumeric = (input: string): boolean => {\r\n return input?.length >= 3 && /^[a-zA-Z0-9]+$/.test(input);\r\n};\r\n\r\n/**\r\n * Validates if input is a valid email.\r\n * @param input Input string\r\n * @returns Boolean indicating validity\r\n */\r\nexport const isValidEmail = (input: string): boolean => {\r\n return input?.length >= 3 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input);\r\n};\r\n\r\n/**\r\n * Converts a string to title case.\r\n * @param str Input string\r\n * @returns Title case string or original value if not a string\r\n */\r\nexport const toTitleCase = (str: any): any => {\r\n if (typeof str !== \"string\") return str;\r\n return str.replace(\r\n /\\w\\S*/g,\r\n (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase()\r\n );\r\n};\r\n\r\n/**\r\n * Gets a cookie value by name.\r\n * @param cname Cookie name\r\n * @returns Cookie value or null\r\n */\r\nexport const getCookie = (cname: string): string | null => {\r\n if (typeof document === \"undefined\") return null;\r\n const name = `${cname}=`;\r\n const ca = document.cookie.split(\";\");\r\n for (const c of ca) {\r\n const trimmed = c.trim();\r\n if (trimmed.startsWith(name)) return trimmed.substring(name.length);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Removes a cookie by name.\r\n * @param cname Cookie name\r\n */\r\nexport const removeCookie = (cname: string): void => {\r\n if (typeof document !== \"undefined\") {\r\n document.cookie = `${cname}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\r\n }\r\n};\r\n\r\n/**\r\n * Sets a cookie with name, value, and expiration days.\r\n * @param cname Cookie name\r\n * @param cvalue Cookie value\r\n * @param exdays Expiration days\r\n */\r\nexport const setCookie = (\r\n cname: string,\r\n cvalue: string,\r\n exdays: number\r\n): void => {\r\n if (typeof document !== \"undefined\") {\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n document.cookie = `${cname}=${cvalue};expires=${d.toUTCString()};path=/`;\r\n }\r\n};\r\n\r\n/**\r\n * Prints an error message for a form field.\r\n * @param key Field name\r\n * @param value Error message\r\n * @param index Index for focusing first error\r\n */\r\nexport const printErr = (key: string, value: string, index: number): void => {\r\n const form = document.querySelector(\"#regForm\");\r\n if (!form) return;\r\n\r\n const inputField = form.querySelector<HTMLInputElement>(`[name=\"${key}\"]`);\r\n if (!inputField) return;\r\n\r\n inputField.style.borderColor = \"var(--TurkishRose)\";\r\n let errorTag: HTMLElement | null = null;\r\n\r\n if (inputField.type === \"radio\") {\r\n errorTag =\r\n inputField.parentElement?.parentElement?.parentElement?.querySelector(\r\n \".error\"\r\n ) || null;\r\n } else if (inputField.type === \"file\") {\r\n errorTag =\r\n inputField.parentElement?.parentElement?.querySelector(\".error\") || null;\r\n } else {\r\n errorTag = inputField.parentElement?.querySelector(\".error\") || null;\r\n }\r\n\r\n if (errorTag) {\r\n errorTag.textContent = value;\r\n } else {\r\n const span = document.createElement(\"span\");\r\n span.classList.add(\"error\");\r\n span.textContent = value;\r\n span.style.color = \"var(--TurkishRose)\";\r\n span.style.display = \"inline-block\";\r\n\r\n const parent =\r\n inputField.type === \"radio\"\r\n ? inputField.parentElement?.parentElement?.parentElement\r\n : inputField.type === \"file\" || inputField.nodeName === \"SELECT\"\r\n ? inputField.parentElement\r\n : inputField.parentElement?.parentElement;\r\n parent?.appendChild(span);\r\n }\r\n\r\n if (index === 0) inputField.focus();\r\n};\r\n\r\n/**\r\n * Handles server response errors for forms.\r\n * @param status HTTP status code\r\n * @param items Error or success data\r\n * @param registerForm Form element\r\n * @param r_path Redirect path\r\n */\r\nexport const handleError = (\r\n status: number,\r\n items: Record<string, string[]>,\r\n registerForm: HTMLFormElement | null,\r\n r_path: string | null\r\n): void => {\r\n const serverTag = document.querySelector(\".server_err\") as HTMLElement | null;\r\n if (!serverTag) return;\r\n\r\n if (status === 400) {\r\n if (items.user?.[0] === \"This field must be unique.\" || items.username) {\r\n serverTag.style.display = \"block\";\r\n serverTag.style.backgroundColor = \"var(--DarkCyan)\";\r\n serverTag.querySelector(\"h3\")!.textContent =\r\n \"We already have your details!\";\r\n if (\r\n [\"/register/details\", \"/register/details/\"].includes(\r\n document.location.pathname\r\n )\r\n ) {\r\n const button = serverTag.querySelector(\"a button span\");\r\n if (button) button.innerHTML = \"Take Assessment\";\r\n const link = serverTag.querySelector(\"a\");\r\n if (link) link.href = \"/quiz/\";\r\n }\r\n spinBtn(registerForm, \"none\", false);\r\n window.location.href = \"#Socials\";\r\n } else {\r\n spinBtn(registerForm, \"none\", false);\r\n Object.entries(items).forEach(([key, value], index) =>\r\n printErr(key, value[0], index)\r\n );\r\n serverTag.style.display = \"none\";\r\n }\r\n } else if ([200, 201, 202].includes(status) && r_path) {\r\n window.location.href = r_path;\r\n } else if (status === 401) {\r\n serverTag.style.display = \"block\";\r\n serverTag.querySelector(\"a\")!.innerHTML = \"\";\r\n serverTag.querySelector(\"h3\")!.textContent =\r\n typeof items.detail === \"string\" ? items.detail : \"Unauthorized\";\r\n spinBtn(registerForm, \"none\", false);\r\n window.location.href = \"#Socials\";\r\n }\r\n};\r\n\r\n/**\r\n * Gets a value from an object using a path string (e.g., \"course.title\" or \"course.lecturer.full_name\")\r\n * @param row The data object to extract value from\r\n * @param accessor The path to the value (e.g., \"course.title\")\r\n * @returns The value at the specified path or empty string if not found\r\n */\r\nexport function getNestedValue(row: any, accessor: string): any {\r\n try {\r\n return accessor\r\n .split(\".\")\r\n .reduce(\r\n (obj, key) => (obj && obj[key] !== undefined ? obj[key] : \"\"),\r\n row\r\n );\r\n } catch (error) {\r\n console.warn(`Error accessing ${accessor}:`, error);\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Creates request options for fetch API.\r\n * @param method HTTP method (GET, POST, PUT, DELETE)\r\n * @param data Request body (BodyInit | FormData | null)\r\n * @param token Auth token string or null\r\n * @param content_type Content type (json, form-data, null, false)\r\n * @param channel Channel ID string or null\r\n * @param auth_sk Use auth secret boolean (true, false)\r\n * @returns Request options object\r\n *\r\n * Set environment\r\n * NEXT_PUBLIC_INSTINCTHUB_SK_KEY=\"Your secret key name\"\r\n * NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET=\"Your seceret key\"\r\n */\r\nexport const reqOptions = (\r\n method: string,\r\n data: BodyInit | FormData | null = null,\r\n token: string | null = null,\r\n content_type: \"json\" | \"form-data\" | null | false = false,\r\n channel: string | null = null,\r\n auth_sk: boolean = false\r\n): RequestOptions => {\r\n const sk_header = process.env.NEXT_PUBLIC_INSTINCTHUB_SKH_KEY || \"\";\r\n const headers: Record<string, string> = {\r\n [sk_header]: process.env.NEXT_PUBLIC_INSTINCTHUB_SK_HEADER ?? \"\",\r\n };\r\n\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n if (channel) headers[\"channel-id\"] = channel;\r\n if (content_type === \"json\") headers[\"Content-Type\"] = \"application/json\";\r\n if (content_type === \"form-data\")\r\n headers[\"Content-Type\"] = \"multipart/form-data\";\r\n if (auth_sk) {\r\n const sk_key = process.env.NEXT_PUBLIC_INSTINCTHUB_SK_KEY || \"\";\r\n headers[sk_key] = process.env.NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET ?? \"\";\r\n }\r\n\r\n const request: RequestOptions = { method, headers, redirect: \"follow\" };\r\n if (data) request[\"body\"] = data;\r\n else request[\"body\"] = null;\r\n\r\n if (IN_DEV_MODE) console.log(request);\r\n return request;\r\n};\r\n\r\n/**\r\n * Fetches paginated data from an API.\r\n * @function\r\n * @example\r\n * ```ts\r\n * fetchData(page, token, options, data, setData, setCount, setNext, setPrevious, setIsLoading, reset);\r\n * ```\r\n * @param page API endpoint\r\n * @param token Auth token\r\n * @param options Request options\r\n * @param data Existing data\r\n * @param setData Data setter\r\n * @param setCount Count setter\r\n * @param setNext Next page setter\r\n * @param setPrevious Previous page setter\r\n * @param setIsLoading Loading state setter\r\n * @param reset Reset state\r\n * @returns\r\n * @see {@link FetchDataType}\r\n */\r\n\r\nexport const fetchData = async (\r\n page: string,\r\n token: string | null,\r\n options: object,\r\n data: any[],\r\n setData: React.Dispatch<React.SetStateAction<any>>,\r\n setCount: React.Dispatch<React.SetStateAction<number>>,\r\n setNext: React.Dispatch<React.SetStateAction<string | null>>,\r\n setPrevious: React.Dispatch<React.SetStateAction<string | null>>,\r\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\r\n reset = false\r\n) => {\r\n // Fetch paginated data when user scrolls\r\n if (!token) return;\r\n\r\n try {\r\n // Fetch data from the server with pagination\r\n const response = await fetch(page, options);\r\n const newData: any = await response.json();\r\n if (response.status === 401) {\r\n openToast(\"Unauthorized fetchData\", 401);\r\n return;\r\n }\r\n\r\n // Append the new data to the existing data\r\n if (reset) {\r\n setData(newData.results);\r\n setCount(newData.count);\r\n } else {\r\n setData([...data, ...newData.results]);\r\n }\r\n setNext(newData.next);\r\n setPrevious(newData.previous);\r\n } catch (error) {\r\n openToast(\"Error fetching data\", 500);\r\n console.error(\"Error fetching data:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n};\r\n\r\n/**\r\n * Fetches data from an API with error handling.\r\n * @param session Callback or state setter\r\n * @param api API endpoint\r\n * @param reqOptions Request options\r\n * @param isFunctionComponent Is functional component\r\n * @param setIsLoading (optional) IsLoading state setter (boolean)\r\n * @param setStatus (optional) Status setter (number | null)\r\n * @param setError (optional) Error setter (any)\r\n * @param flag (optional) Handle status errors (boolean)\r\n * @returns Promise with result or error\r\n */\r\n\r\nexport const fetchAPI = async <T>(\r\n session:\r\n | ((data: T) => void)\r\n | { setState: (state: { data?: T; status?: number; error?: any }) => void },\r\n api: string,\r\n reqOptions: RequestOptions,\r\n isFunctionComponent: boolean = false,\r\n setIsLoading?: (((loading: boolean) => void) | null) | null,\r\n setStatus?: ((status: number | null) => void) | null,\r\n setError?: ((error: any) => void) | null,\r\n flag: boolean = false\r\n): Promise<T | Error> => {\r\n try {\r\n const response = await fetch(api, reqOptions);\r\n const status = response.status;\r\n const result = (await response.json()) as T;\r\n\r\n if (isFunctionComponent) {\r\n if ([400, 401, 404, 500].includes(status)) {\r\n setError?.(result);\r\n } else if ([200, 201].includes(status)) {\r\n (session as (data: T) => void)(result);\r\n setError?.(null);\r\n }\r\n setStatus?.(status);\r\n } else {\r\n (session as { setState: any }).setState({ data: result, status });\r\n }\r\n\r\n if (IN_DEV_MODE) {\r\n console.log(\r\n \"Request Options:\",\r\n reqOptions,\r\n \"Response Data:\",\r\n result,\r\n \"Status Code:\",\r\n status\r\n );\r\n }\r\n if (flag) handleStatusError(status);\r\n\r\n return result;\r\n } catch (error) {\r\n if (isFunctionComponent) {\r\n (session as (error: any) => void)(error);\r\n setError?.(error);\r\n setStatus?.(null);\r\n } else {\r\n (session as { setState: any }).setState({ error });\r\n }\r\n if (IN_DEV_MODE)\r\n console.log(\"Request Options:\", reqOptions, \"Error:\", error);\r\n return error as Error;\r\n } finally {\r\n if (setIsLoading) setIsLoading(false);\r\n }\r\n};\r\n\r\n/**\r\n * Handles HTTP status errors with navigation.\r\n * @param status HTTP status code\r\n */\r\nexport const handleStatusError = (status: number): void => {\r\n if (status === 401) forbidden();\r\n else if (status === 404) notFound();\r\n};\r\n\r\n/**\r\n * Toggles form button spinner and disabled state.\r\n * @param form Form element\r\n * @param display Spinner display style\r\n * @param status Disabled status\r\n */\r\nexport const spinBtn = (\r\n form: HTMLFormElement | null,\r\n display: \"none\" | \"inline-block\",\r\n status: boolean\r\n): void => {\r\n if (!form) return;\r\n const button = form.querySelector<HTMLButtonElement>(\"button.submit_bt\");\r\n if (button) {\r\n button.disabled = status;\r\n const spinner = button.querySelector(\".bt-spinner\") as HTMLElement | null;\r\n if (spinner) spinner.style.display = display;\r\n }\r\n form.disabled = status;\r\n};\r\n\r\n/**\r\n * Resends OTP to an email.\r\n * @param email User email\r\n * @returns Promise with response data\r\n */\r\nexport const handleResendOTP = async (email: string): Promise<any> => {\r\n const formData = new FormData();\r\n formData.append(\"email\", email);\r\n const requestOptions = reqOptions(\"POST\", formData);\r\n const response = await fetch(\r\n `${API_HOST_URL}auth/skills/request_new_otp/`,\r\n requestOptions\r\n );\r\n return response.json();\r\n};\r\n"],"names":["IN_DEV_MODE","process","env","NODE_ENV","API_HOST_URL","_process$env$NEXT_PUB","NEXT_PUBLIC_API_HOST","FILE_URL","_process$env$NEXT_PUB2","NEXT_PUBLIC_FILE_URL","VIDEO_URL","_process$env$NEXT_PUB3","NEXT_PUBLIC_VIDEO_URL","CODECS_URL_M3U8","_process$env$NEXT_PUB4","NEXT_PUBLIC_VIDEO_URL_CODECS_M3U8","romansFigure","addUserDomain","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","domain","_process$env$NEXT_PUB5","payload","vercelOptions","wrap","_context","prev","next","name","concat","method","headers","Authorization","NEXT_PUBLIC_VERCEL_AUTH_BEARER_TOKEN","body","JSON","stringify","abrupt","fetch","NEXT_PUBLIC_VERCEL_PROJECT_ID","NEXT_PUBLIC_VERCEL_TEAM_ID","stop","_x","apply","this","arguments","stripHtmlTags","str","replace","stripCommaFromNumber","val","Number","_unused","calculateTotalCredits","courses","reduce","total","_ref2","course","parseInt","credits","toString","calculateAmountAfterDeduction","amount","percentage","detail","findNullOrEmptyKeys","namesArray","obj","filter","key","extractSubDomain","hostname","value","field","includes","_parts","parts","split","length","convertArrayToFormData","array","formData","FormData","forEach","item","index","Object","entries","_ref3","_ref4","_slicedToArray","Array","isArray","append","_typeof","objectURL","then","res","blob","error","console","String","objectIsEmpty","prop","hasOwnProperty","handleInvalid","e","formError","setFormError","target","_toConsumableArray","dataset","errTag","document","getElementById","scrollIntoView","join","calculateAverageRating","ratings","acc","rating","toFixed","convertToFloat","parseFloat","formatNumberWithCommas","number","isNaN","_number$toString$spli","_number$toString$spli2","integer","decimal","formattedInteger","slugifyFileName","fileName","extension","pop","toLowerCase","slice","convertToSlug","normalize","test","Error","TrackViewPort","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","formatDuration","durationInMinutes","Math","floor","hours","minutes","truncateHtml","markdownText","maxLength","substring","formatDateToWord","date","type","undefined","format","Date","hostUrlEncode","encodeURIComponent","location","href","isValidAlphanumeric","input","isValidEmail","toTitleCase","txt","charAt","toUpperCase","getCookie","cname","_step","ca","cookie","_iterator","_createForOfIteratorHelper","s","n","done","trimmed","trim","startsWith","err","f","removeCookie","setCookie","cvalue","exdays","d","setTime","getTime","toUTCString","printErr","form","querySelector","inputField","style","borderColor","_inputField$parentEle","errorTag","parentElement","_inputField$parentEle2","_inputField$parentEle3","textContent","_inputField$parentEle4","_inputField$parentEle5","span","createElement","classList","add","color","display","parent","nodeName","appendChild","focus","handleError","status","items","registerForm","r_path","_items$user","serverTag","user","username","backgroundColor","pathname","button","innerHTML","link","spinBtn","_ref5","_ref6","getNestedValue","row","accessor","warn","reqOptions","_process$env$NEXT_PUB6","_process$env$NEXT_PUB7","data","token","content_type","channel","auth_sk","sk_header","NEXT_PUBLIC_INSTINCTHUB_SKH_KEY","_defineProperty","NEXT_PUBLIC_INSTINCTHUB_SK_HEADER","NEXT_PUBLIC_INSTINCTHUB_SK_KEY","NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET","request","redirect","log","fetchData","_ref7","_callee2","page","options","setData","setCount","setNext","setPrevious","setIsLoading","reset","response","newData","_args2","_context2","sent","json","openToast","results","count","previous","t0","finish","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_x10","fetchAPI","_ref8","_callee3","session","api","isFunctionComponent","setStatus","setError","flag","result","_args3","_context3","setState","handleStatusError","_x11","_x12","_x13","forbidden","notFound","disabled","spinner","handleResendOTP","_ref9","_callee4","email","requestOptions","_context4","_x14"],"mappings":"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"}
1
+ {"version":3,"file":"helpFunction.js","sources":["../../../../src/components/lib/helpFunction.ts"],"sourcesContent":["// TypeScript version of the original JavaScript document\r\nimport { format } from \"date-fns\";\r\nimport { forbidden, notFound } from \"next/navigation\";\r\nimport { openToast } from \"./modals/modals\";\r\nimport React from \"react\";\r\n\r\n// Constants with Type Safety\r\nexport const IN_DEV_MODE: boolean = process.env.NODE_ENV === \"development\";\r\nexport const API_HOST_URL: string = process.env.NEXT_PUBLIC_API_HOST ?? \"\";\r\nexport const FILE_URL: string = process.env.NEXT_PUBLIC_FILE_URL ?? \"\";\r\nexport const VIDEO_URL: string = process.env.NEXT_PUBLIC_VIDEO_URL ?? \"\";\r\nexport const CODECS_URL_M3U8: string =\r\n process.env.NEXT_PUBLIC_VIDEO_URL_CODECS_M3U8 ?? \"\";\r\n\r\nexport const romansFigure: string[] = [\r\n \"I\",\r\n \"II\",\r\n \"III\",\r\n \"IV\",\r\n \"V\",\r\n \"VI\",\r\n \"VII\",\r\n \"VIII\",\r\n \"IX\",\r\n \"X\",\r\n];\r\n\r\n// Interfaces for Type Safety\r\ninterface VercelDomainRequest {\r\n name: string;\r\n}\r\n\r\ninterface VercelFetchOptions extends RequestInit {\r\n headers: {\r\n Authorization: string;\r\n [key: string]: string;\r\n };\r\n}\r\n\r\ninterface Course {\r\n credits: string | number;\r\n}\r\n\r\ninterface CourseObj {\r\n course: Course;\r\n}\r\n\r\ninterface SubDomainResult {\r\n value: string;\r\n field: \"username\" | \"domain\";\r\n}\r\n\r\ninterface FormItem {\r\n [key: string]: string | number | object | Blob | null | undefined | any[];\r\n}\r\n\r\ninterface RequestOptions extends RequestInit {\r\n headers: Record<string, string>;\r\n body?: BodyInit | FormData | null;\r\n}\r\n\r\n// Functions\r\n\r\n/**\r\n * Adds a subdomain to Vercel project.\r\n * @param domain The domain to add as a subdomain\r\n * @returns Promise resolving to the fetch Response\r\n */\r\nexport const addUserDomain = async (domain: string): Promise<Response> => {\r\n const payload: VercelDomainRequest = { name: `${domain}.instincthub.com` };\r\n const vercelOptions: VercelFetchOptions = {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${\r\n process.env.NEXT_PUBLIC_VERCEL_AUTH_BEARER_TOKEN ?? \"\"\r\n }`,\r\n },\r\n body: JSON.stringify(payload),\r\n };\r\n\r\n return fetch(\r\n `https://api.vercel.com/v10/projects/${process.env.NEXT_PUBLIC_VERCEL_PROJECT_ID}/domains?teamId=${process.env.NEXT_PUBLIC_VERCEL_TEAM_ID}`,\r\n vercelOptions\r\n );\r\n};\r\n\r\n/**\r\n * Strips HTML tags from a string.\r\n * @param str Input string with potential HTML tags\r\n * @returns Cleaned string without HTML tags\r\n */\r\nexport const stripHtmlTags = (str: string): string => {\r\n return str.replace(/<[^>]*>/g, \"\");\r\n};\r\n\r\n/**\r\n * Removes commas from a number string and converts to number.\r\n * @param str Input string or number\r\n * @returns Parsed number or 0 if invalid\r\n */\r\nexport const stripCommaFromNumber = (str: string | number): number => {\r\n try {\r\n if (typeof str === \"number\") return str;\r\n const val = str.replace(/,/g, \"\");\r\n return Number(val) || 0;\r\n } catch {\r\n return 0;\r\n }\r\n};\r\n\r\n/**\r\n * Calculates total credits from an array of course objects.\r\n * @param courses Array of course objects\r\n * @returns Total credits as a number\r\n */\r\nexport const calculateTotalCredits = (courses: CourseObj[]): number => {\r\n return courses.reduce((total, { course }) => {\r\n const credits = Number.parseInt(course.credits.toString(), 10) || 0;\r\n return total + credits;\r\n }, 0);\r\n};\r\n\r\n/**\r\n * Calculates amount after percentage deduction.\r\n * @param amount Base amount\r\n * @param percentage Percentage to deduct (0-100)\r\n * @returns Object with final amount or error details\r\n */\r\nexport const calculateAmountAfterDeduction = (\r\n amount: number,\r\n percentage: number\r\n): { amount: number; detail?: string } => {\r\n if (amount < 0 || percentage < 0 || percentage > 100) {\r\n return {\r\n amount: 0,\r\n detail:\r\n \"Amount and percentage should be positive, and percentage should be between 0 and 100.\",\r\n };\r\n }\r\n const deduction = (amount * percentage) / 100;\r\n return { amount: amount - deduction };\r\n};\r\n\r\n/**\r\n * Finds keys in an object that are null, undefined, or empty string.\r\n * @param namesArray Array of keys to check\r\n * @param obj Object to inspect\r\n * @returns Array of keys with null/empty values\r\n */\r\nexport const findNullOrEmptyKeys = <T extends Record<string, any>>(\r\n namesArray: string[],\r\n obj: T\r\n): string[] => {\r\n return namesArray.filter((key) => obj[key] == null || obj[key] === \"\");\r\n};\r\n\r\n/**\r\n * Extracts subdomain or domain from hostname.\r\n * @param hostname Hostname string\r\n * @returns Subdomain result or null\r\n */\r\nexport const extractSubDomain = (hostname: string): SubDomainResult | null => {\r\n if (IN_DEV_MODE) return { value: \"eportal.hust.edu.ng\", field: \"username\" };\r\n if (!hostname.includes(\"instincthub.com\") && !IN_DEV_MODE) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n\r\n const parts = hostname.split(\".\");\r\n if (parts.length > 1) {\r\n if (parts[1] === \"ngrok-free\")\r\n return { value: \"skills\", field: \"username\" };\r\n if (\r\n parts[parts.length - 2] !== \"instincthub\" &&\r\n !hostname.includes(\"localhost\")\r\n ) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n return { value: parts[0], field: \"username\" };\r\n }\r\n\r\n if (parts.length === 1 || parts.length === 2) {\r\n if (\r\n parts[0].includes(\"localhost:3000\") ||\r\n parts[0] === \"instincthub\" ||\r\n parts[1] === \"ngrok-free\"\r\n ) {\r\n return { value: \"eportal.hust.edu.ng\", field: \"username\" };\r\n }\r\n if (\r\n !parts[parts.length - 2]?.includes(\"instincthub\") &&\r\n !hostname.includes(\"localhost\")\r\n ) {\r\n return { value: hostname, field: \"domain\" };\r\n }\r\n return { value: parts[0], field: \"domain\" };\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Converts an array of objects to FormData.\r\n * @param array Array of items to convert\r\n * @returns FormData object\r\n */\r\nexport const convertArrayToFormData = (array: FormItem[]): FormData => {\r\n const formData = new FormData();\r\n array.forEach((item, index) => {\r\n Object.entries(item).forEach(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n formData.append(`item[${index}].${key}`, JSON.stringify(value));\r\n } else if (typeof value === \"object\" && value !== null) {\r\n if (key === \"upload_result\" && \"objectURL\" in value) {\r\n fetch((value as { objectURL: string }).objectURL)\r\n .then((res) => res.blob())\r\n .then((blob) => {\r\n formData.append(\r\n `item[${index}].${key}`,\r\n blob,\r\n \"upload_result_file\"\r\n );\r\n })\r\n .catch((error) =>\r\n console.error(\"Error converting blob URL:\", error)\r\n );\r\n } else {\r\n formData.append(`item[${index}].${key}`, JSON.stringify(value));\r\n }\r\n } else {\r\n formData.append(`item[${index}].${key}`, String(value ?? \"\"));\r\n }\r\n });\r\n });\r\n return formData;\r\n};\r\n\r\n/**\r\n * Checks if an object is empty\r\n * @param obj Object to check\r\n * @returns True if empty, false otherwise\r\n */\r\nexport const objectIsEmpty = (obj: any): boolean => {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) return false;\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Handles form validation errors.\r\n * @param e Event object from form input\r\n * @param formError Current error list\r\n * @param setFormError Function to update error list\r\n * @returns Error message with status code\r\n */\r\nexport const handleInvalid = (\r\n e: React.FormEvent<HTMLInputElement>,\r\n formError: string[],\r\n setFormError: (errors: string[]) => void\r\n): [string, number] => {\r\n const target = e.target as HTMLInputElement;\r\n if (!formError.includes(target.name)) {\r\n setFormError([...formError, target.dataset.name || target.name]);\r\n }\r\n\r\n const errTag = document.getElementById(`id_${target.name}`);\r\n if (errTag) errTag.scrollIntoView();\r\n\r\n return [`Error: ${formError.join(\", \")} field(s) cannot be left blank.`, 400];\r\n};\r\n\r\n/**\r\n * Calculates average rating from an array of numbers.\r\n * @param ratings Array of ratings\r\n * @returns Average rating as a string with 1 decimal place\r\n */\r\nexport const calculateAverageRating = (ratings: number[]): string => {\r\n if (!ratings.length) return \"0.0\";\r\n const sum = ratings.reduce((acc, rating) => acc + rating, 0);\r\n return (sum / ratings.length).toFixed(1);\r\n};\r\n\r\n/**\r\n * Converts a string to a float, removing commas.\r\n * @param value Input string\r\n * @returns Parsed float\r\n */\r\nexport const convertToFloat = (value: string): number => {\r\n return parseFloat(value.replace(/,/g, \"\")) || 0;\r\n};\r\n\r\n/**\r\n * Formats a number with commas.\r\n * @param number Input number\r\n * @returns Formatted string or error message\r\n */\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n if (isNaN(number)) return \"Invalid number\";\r\n const [integer, decimal] = number.toString().split(\".\");\r\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n return decimal ? `${formattedInteger}.${decimal}` : formattedInteger;\r\n};\r\n\r\nexport const slugifyFileName = (fileName: string): string => {\r\n // Split the fileName by dot to separate the name and extension\r\n const parts: string[] = fileName.split(\".\");\r\n\r\n // Extract the extension\r\n const extension: string = parts.pop() || \"\";\r\n\r\n // Join the remaining parts with hyphen and replace special characters and brackets with hyphens\r\n const slugifiedName: string = parts\r\n .join(\"-\")\r\n .replace(/[^\\w\\s()-]/g, \"\")\r\n .replace(/[\\s_]+/g, \"-\")\r\n .toLowerCase();\r\n\r\n // Remove parentheses from the slugified name\r\n const nameWithoutParentheses: string = slugifiedName.replace(\r\n /\\(([^)]+)\\)/g,\r\n \"\"\r\n );\r\n\r\n // Only take first 50 characters\r\n const reduced_txt: string = nameWithoutParentheses.slice(0, 50);\r\n\r\n // Append the extension\r\n return reduced_txt + \".\" + extension.toLowerCase();\r\n};\r\n\r\n/**\r\n * Converts a string to a URL-friendly slug format.\r\n * @param value The string to convert to a slug\r\n * @example\r\n * ```ts\r\n * const slug = convertToSlug(\"Hello World\");\r\n * console.log(slug); // \"hello-world\"\r\n * ```\r\n * @returns A lowercase string with spaces and special characters replaced by hyphens\r\n * @throws Error if the resulting slug contains invalid characters\r\n */\r\nexport const convertToSlug = (value: string): string => {\r\n // Normalize the string to remove accents and other diacritics\r\n value = value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n\r\n // Convert to lowercase\r\n value = value.toLowerCase();\r\n\r\n // Replace any non-alphanumeric characters with a hyphen\r\n value = value.replace(/[^a-z0-9]+/g, \"-\");\r\n\r\n // Remove leading or trailing hyphens\r\n value = value.replace(/^-+|-+$/g, \"\");\r\n\r\n // Ensure the slug only contains valid characters\r\n if (!/^[a-z0-9_-]+$/.test(value)) {\r\n throw new Error(\r\n 'Enter a valid \"slug\" consisting of letters, numbers, underscores, or hyphens.'\r\n );\r\n }\r\n\r\n return value;\r\n};\r\n\r\n/**\r\n * Checks if an element is in the viewport.\r\n * @param element DOM element\r\n * @returns Boolean indicating visibility\r\n */\r\nexport const TrackViewPort = (element: HTMLElement | null): boolean => {\r\n if (!element) return false;\r\n const rect = element.getBoundingClientRect();\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <=\r\n (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n};\r\n\r\n/**\r\n * Formats duration in minutes to a readable string.\r\n * @param durationInMinutes Duration in minutes\r\n * @returns Formatted duration string\r\n */\r\nexport const formatDuration = (durationInMinutes: number): string => {\r\n if (durationInMinutes === 0) return \"...\";\r\n if (durationInMinutes < 60) {\r\n return Math.floor(durationInMinutes)\r\n ? `${Math.floor(durationInMinutes)} Minutes`\r\n : `${durationInMinutes.toFixed(1)} Seconds`;\r\n }\r\n const hours = Math.floor(durationInMinutes / 60);\r\n const minutes = Math.floor(durationInMinutes % 60);\r\n return minutes === 0\r\n ? `${hours} Hours`\r\n : `${hours} Hours, ${minutes} Minutes`;\r\n};\r\n\r\n/**\r\n * Truncates HTML content to a specified length.\r\n * @param markdownText HTML string\r\n * @param maxLength Maximum length\r\n * @returns Truncated string\r\n */\r\nexport const truncateHtml = (\r\n markdownText: string,\r\n maxLength: number\r\n): string => {\r\n return markdownText.length > maxLength\r\n ? `${markdownText.substring(0, maxLength)}...`\r\n : markdownText;\r\n};\r\n\r\n/**\r\n * Formats a date to a readable string.\r\n * @param date Date object or string\r\n * @param type Format type (default: \"iiii do MMMM yyyy\")\r\n * @returns Formatted date string\r\n */\r\nexport const formatDateToWord = (\r\n date: Date | string,\r\n type: string = \"iiii do MMMM yyyy\"\r\n): string => {\r\n if (!date) return \"\";\r\n return format(new Date(date), type);\r\n};\r\n\r\n/**\r\n * Encodes the current URL.\r\n * @returns Encoded URL string or undefined if not in browser\r\n */\r\nexport const hostUrlEncode = (): string | undefined => {\r\n if (typeof document !== \"undefined\") {\r\n return encodeURIComponent(window.location.href);\r\n }\r\n};\r\n\r\n/**\r\n * Validates if input is alphanumeric and at least 3 characters.\r\n * @param input Input string\r\n * @returns Boolean indicating validity\r\n */\r\nexport const isValidAlphanumeric = (input: string): boolean => {\r\n return input?.length >= 3 && /^[a-zA-Z0-9]+$/.test(input);\r\n};\r\n\r\n/**\r\n * Validates if input is a valid email.\r\n * @param input Input string\r\n * @returns Boolean indicating validity\r\n */\r\nexport const isValidEmail = (input: string): boolean => {\r\n return input?.length >= 3 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(input);\r\n};\r\n\r\n/**\r\n * Converts a string to title case.\r\n * @param str Input string\r\n * @returns Title case string or original value if not a string\r\n */\r\nexport const toTitleCase = (str: any): any => {\r\n if (typeof str !== \"string\") return str;\r\n return str.replace(\r\n /\\w\\S*/g,\r\n (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase()\r\n );\r\n};\r\n\r\n/**\r\n * Gets a cookie value by name.\r\n * @param cname Cookie name\r\n * @returns Cookie value or null\r\n */\r\nexport const getCookie = (cname: string): string | null => {\r\n if (typeof document === \"undefined\") return null;\r\n const name = `${cname}=`;\r\n const ca = document.cookie.split(\";\");\r\n for (const c of ca) {\r\n const trimmed = c.trim();\r\n if (trimmed.startsWith(name)) return trimmed.substring(name.length);\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Removes a cookie by name.\r\n * @param cname Cookie name\r\n */\r\nexport const removeCookie = (cname: string): void => {\r\n if (typeof document !== \"undefined\") {\r\n document.cookie = `${cname}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\r\n }\r\n};\r\n\r\n/**\r\n * Sets a cookie with name, value, and expiration days.\r\n * @param cname Cookie name\r\n * @param cvalue Cookie value\r\n * @param exdays Expiration days\r\n */\r\nexport const setCookie = (\r\n cname: string,\r\n cvalue: string,\r\n exdays: number\r\n): void => {\r\n if (typeof document !== \"undefined\") {\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n document.cookie = `${cname}=${cvalue};expires=${d.toUTCString()};path=/`;\r\n }\r\n};\r\n\r\n/**\r\n * Prints an error message for a form field.\r\n * @param key Field name\r\n * @param value Error message\r\n * @param index Index for focusing first error\r\n */\r\nexport const printErr = (key: string, value: string, index: number): void => {\r\n const form = document.querySelector(\"#regForm\");\r\n if (!form) return;\r\n\r\n const inputField = form.querySelector<HTMLInputElement>(`[name=\"${key}\"]`);\r\n if (!inputField) return;\r\n\r\n inputField.style.borderColor = \"var(--TurkishRose)\";\r\n let errorTag: HTMLElement | null = null;\r\n\r\n if (inputField.type === \"radio\") {\r\n errorTag =\r\n inputField.parentElement?.parentElement?.parentElement?.querySelector(\r\n \".error\"\r\n ) || null;\r\n } else if (inputField.type === \"file\") {\r\n errorTag =\r\n inputField.parentElement?.parentElement?.querySelector(\".error\") || null;\r\n } else {\r\n errorTag = inputField.parentElement?.querySelector(\".error\") || null;\r\n }\r\n\r\n if (errorTag) {\r\n errorTag.textContent = value;\r\n } else {\r\n const span = document.createElement(\"span\");\r\n span.classList.add(\"error\");\r\n span.textContent = value;\r\n span.style.color = \"var(--TurkishRose)\";\r\n span.style.display = \"inline-block\";\r\n\r\n const parent =\r\n inputField.type === \"radio\"\r\n ? inputField.parentElement?.parentElement?.parentElement\r\n : inputField.type === \"file\" || inputField.nodeName === \"SELECT\"\r\n ? inputField.parentElement\r\n : inputField.parentElement?.parentElement;\r\n parent?.appendChild(span);\r\n }\r\n\r\n if (index === 0) inputField.focus();\r\n};\r\n\r\n/**\r\n * Handles server response errors for forms.\r\n * @param status HTTP status code\r\n * @param items Error or success data\r\n * @param registerForm Form element\r\n * @param r_path Redirect path\r\n */\r\nexport const handleError = (\r\n status: number,\r\n items: Record<string, string[]>,\r\n registerForm: HTMLFormElement | null,\r\n r_path: string | null\r\n): void => {\r\n const serverTag = document.querySelector(\".server_err\") as HTMLElement | null;\r\n if (!serverTag) return;\r\n\r\n if (status === 400) {\r\n if (items.user?.[0] === \"This field must be unique.\" || items.username) {\r\n serverTag.style.display = \"block\";\r\n serverTag.style.backgroundColor = \"var(--DarkCyan)\";\r\n serverTag.querySelector(\"h3\")!.textContent =\r\n \"We already have your details!\";\r\n if (\r\n [\"/register/details\", \"/register/details/\"].includes(\r\n document.location.pathname\r\n )\r\n ) {\r\n const button = serverTag.querySelector(\"a button span\");\r\n if (button) button.innerHTML = \"Take Assessment\";\r\n const link = serverTag.querySelector(\"a\");\r\n if (link) link.href = \"/quiz/\";\r\n }\r\n spinBtn(registerForm, \"none\", false);\r\n window.location.href = \"#Socials\";\r\n } else {\r\n spinBtn(registerForm, \"none\", false);\r\n Object.entries(items).forEach(([key, value], index) =>\r\n printErr(key, value[0], index)\r\n );\r\n serverTag.style.display = \"none\";\r\n }\r\n } else if ([200, 201, 202].includes(status) && r_path) {\r\n window.location.href = r_path;\r\n } else if (status === 401) {\r\n serverTag.style.display = \"block\";\r\n serverTag.querySelector(\"a\")!.innerHTML = \"\";\r\n serverTag.querySelector(\"h3\")!.textContent =\r\n typeof items.detail === \"string\" ? items.detail : \"Unauthorized\";\r\n spinBtn(registerForm, \"none\", false);\r\n window.location.href = \"#Socials\";\r\n }\r\n};\r\n\r\n/**\r\n * Gets a value from an object using a path string (e.g., \"course.title\" or \"course.lecturer.full_name\")\r\n * @param row The data object to extract value from\r\n * @param accessor The path to the value (e.g., \"course.title\")\r\n * @returns The value at the specified path or empty string if not found\r\n */\r\nexport function getNestedValue(row: any, accessor: string): any {\r\n try {\r\n return accessor\r\n .split(\".\")\r\n .reduce(\r\n (obj, key) => (obj && obj[key] !== undefined ? obj[key] : \"\"),\r\n row\r\n );\r\n } catch (error) {\r\n console.warn(`Error accessing ${accessor}:`, error);\r\n return \"\";\r\n }\r\n}\r\n\r\n/**\r\n * Creates request options for fetch API.\r\n * @param method HTTP method (GET, POST, PUT, DELETE)\r\n * @param data Request body (BodyInit | FormData | null)\r\n * @param token Auth token string or null\r\n * @param content_type Content type (json, form-data, null, false)\r\n * @param channel Channel ID string or null\r\n * @param auth_sk Use auth secret boolean (true, false)\r\n * @returns Request options object\r\n *\r\n * Set environment\r\n * NEXT_PUBLIC_INSTINCTHUB_SK_KEY=\"Your secret key name\"\r\n * NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET=\"Your seceret key\"\r\n */\r\nexport const reqOptions = (\r\n method: string,\r\n data: BodyInit | FormData | null = null,\r\n token: string | null = null,\r\n content_type: \"json\" | \"form-data\" | null | false = false,\r\n channel: string | null = null,\r\n auth_sk: boolean = false\r\n): RequestOptions => {\r\n // InstinctHub SK (for authentication)\r\n const ihub_skn = process.env.NEXT_PUBLIC_INSTINCTHUB_SKH_KEY || \"\";\r\n const ihub_skv = process.env.NEXT_PUBLIC_INSTINCTHUB_SK_HEADER || \"\";\r\n const ihubKey =\r\n ihub_skn && ihub_skv\r\n ? {\r\n [ihub_skn]: ihub_skv,\r\n }\r\n : {};\r\n\r\n // Leadboard SK (for tracking)\r\n const lead_skn = process.env.NEXT_PUBLIC_LEADBOARD_SK_NAME || \"\";\r\n const lead_skv = process.env.NEXT_PUBLIC_LEADBOARD_SK_VALUE || \"\";\r\n const leadKey =\r\n lead_skn && lead_skv\r\n ? {\r\n [lead_skn]: lead_skv,\r\n }\r\n : {};\r\n\r\n // InstinctHub SK (for authentication)\r\n const sk_key = process.env.NEXT_PUBLIC_INSTINCTHUB_SK_KEY || \"\";\r\n const sk_value = process.env.NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET ?? \"\";\r\n const authKey =\r\n sk_key && sk_value && auth_sk\r\n ? {\r\n [sk_key]: sk_value,\r\n }\r\n : {};\r\n\r\n // Combine all SKs\r\n const headers: Record<string, string> = {\r\n ...leadKey,\r\n ...ihubKey,\r\n ...authKey,\r\n };\r\n\r\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\r\n if (channel) headers[\"channel-id\"] = channel;\r\n if (content_type === \"json\") headers[\"Content-Type\"] = \"application/json\";\r\n if (content_type === \"form-data\")\r\n headers[\"Content-Type\"] = \"multipart/form-data\";\r\n\r\n const request: RequestOptions = { method, headers, redirect: \"follow\" };\r\n if (data) request[\"body\"] = data;\r\n else request[\"body\"] = null;\r\n\r\n if (IN_DEV_MODE) console.log(request);\r\n return request;\r\n};\r\n\r\n/**\r\n * Fetches paginated data from an API.\r\n * @function\r\n * @example\r\n * ```ts\r\n * fetchData(page, token, options, data, setData, setCount, setNext, setPrevious, setIsLoading, reset);\r\n * ```\r\n * @param page API endpoint\r\n * @param token Auth token\r\n * @param options Request options\r\n * @param data Existing data\r\n * @param setData Data setter\r\n * @param setCount Count setter\r\n * @param setNext Next page setter\r\n * @param setPrevious Previous page setter\r\n * @param setIsLoading Loading state setter\r\n * @param reset Reset state\r\n * @returns\r\n * @see {@link FetchDataType}\r\n */\r\n\r\nexport const fetchData = async (\r\n page: string,\r\n token: string | null,\r\n options: object,\r\n data: any[],\r\n setData: React.Dispatch<React.SetStateAction<any>>,\r\n setCount: React.Dispatch<React.SetStateAction<number>>,\r\n setNext: React.Dispatch<React.SetStateAction<string | null>>,\r\n setPrevious: React.Dispatch<React.SetStateAction<string | null>>,\r\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\r\n reset = false\r\n) => {\r\n // Fetch paginated data when user scrolls\r\n if (!token) return;\r\n\r\n try {\r\n // Fetch data from the server with pagination\r\n const response = await fetch(page, options);\r\n const newData: any = await response.json();\r\n if (response.status === 401) {\r\n openToast(\"Unauthorized fetchData\", 401);\r\n return;\r\n }\r\n\r\n // Append the new data to the existing data\r\n if (reset) {\r\n setData(newData.results);\r\n setCount(newData.count);\r\n } else {\r\n setData([...data, ...newData.results]);\r\n }\r\n setNext(newData.next);\r\n setPrevious(newData.previous);\r\n } catch (error) {\r\n openToast(\"Error fetching data\", 500);\r\n console.error(\"Error fetching data:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n};\r\n\r\n/**\r\n * Fetches data from an API with error handling.\r\n * @param session Callback or state setter\r\n * @param api API endpoint\r\n * @param reqOptions Request options\r\n * @param isFunctionComponent Is functional component\r\n * @param setIsLoading (optional) IsLoading state setter (boolean)\r\n * @param setStatus (optional) Status setter (number | null)\r\n * @param setError (optional) Error setter (any)\r\n * @param flag (optional) Handle status errors (boolean)\r\n * @returns Promise with result or error\r\n */\r\n\r\nexport const fetchAPI = async <T>(\r\n session:\r\n | ((data: T) => void)\r\n | { setState: (state: { data?: T; status?: number; error?: any }) => void },\r\n api: string,\r\n reqOptions: RequestOptions,\r\n isFunctionComponent: boolean = false,\r\n setIsLoading?: (((loading: boolean) => void) | null) | null,\r\n setStatus?: ((status: number | null) => void) | null,\r\n setError?: ((error: any) => void) | null,\r\n flag: boolean = false\r\n): Promise<T | Error> => {\r\n try {\r\n const response = await fetch(api, reqOptions);\r\n const status = response.status;\r\n const result = (await response.json()) as T;\r\n\r\n if (isFunctionComponent) {\r\n if ([400, 401, 404, 500].includes(status)) {\r\n setError?.(result);\r\n } else if ([200, 201].includes(status)) {\r\n (session as (data: T) => void)(result);\r\n setError?.(null);\r\n }\r\n setStatus?.(status);\r\n } else {\r\n (session as { setState: any }).setState({ data: result, status });\r\n }\r\n\r\n if (IN_DEV_MODE) {\r\n console.log(\r\n \"Request Options:\",\r\n reqOptions,\r\n \"Response Data:\",\r\n result,\r\n \"Status Code:\",\r\n status\r\n );\r\n }\r\n if (flag) handleStatusError(status);\r\n\r\n return result;\r\n } catch (error) {\r\n if (isFunctionComponent) {\r\n (session as (error: any) => void)(error);\r\n setError?.(error);\r\n setStatus?.(null);\r\n } else {\r\n (session as { setState: any }).setState({ error });\r\n }\r\n if (IN_DEV_MODE)\r\n console.log(\"Request Options:\", reqOptions, \"Error:\", error);\r\n return error as Error;\r\n } finally {\r\n if (setIsLoading) setIsLoading(false);\r\n }\r\n};\r\n\r\n/**\r\n * Handles HTTP status errors with navigation.\r\n * @param status HTTP status code\r\n */\r\nexport const handleStatusError = (status: number): void => {\r\n if (status === 401) forbidden();\r\n else if (status === 404) notFound();\r\n};\r\n\r\n/**\r\n * Toggles form button spinner and disabled state.\r\n * @param form Form element\r\n * @param display Spinner display style\r\n * @param status Disabled status\r\n */\r\nexport const spinBtn = (\r\n form: HTMLFormElement | null,\r\n display: \"none\" | \"inline-block\",\r\n status: boolean\r\n): void => {\r\n if (!form) return;\r\n const button = form.querySelector<HTMLButtonElement>(\"button.submit_bt\");\r\n if (button) {\r\n button.disabled = status;\r\n const spinner = button.querySelector(\".bt-spinner\") as HTMLElement | null;\r\n if (spinner) spinner.style.display = display;\r\n }\r\n form.disabled = status;\r\n};\r\n\r\n/**\r\n * Resends OTP to an email.\r\n * @param email User email\r\n * @returns Promise with response data\r\n */\r\nexport const handleResendOTP = async (email: string): Promise<any> => {\r\n const formData = new FormData();\r\n formData.append(\"email\", email);\r\n const requestOptions = reqOptions(\"POST\", formData);\r\n const response = await fetch(\r\n `${API_HOST_URL}auth/skills/request_new_otp/`,\r\n requestOptions\r\n );\r\n return response.json();\r\n};\r\n"],"names":["IN_DEV_MODE","process","env","NODE_ENV","API_HOST_URL","_process$env$NEXT_PUB","NEXT_PUBLIC_API_HOST","FILE_URL","_process$env$NEXT_PUB2","NEXT_PUBLIC_FILE_URL","VIDEO_URL","_process$env$NEXT_PUB3","NEXT_PUBLIC_VIDEO_URL","CODECS_URL_M3U8","_process$env$NEXT_PUB4","NEXT_PUBLIC_VIDEO_URL_CODECS_M3U8","addUserDomain","_ref","_asyncToGenerator","_regeneratorRuntime","regeneratorRuntime","mark","_callee","domain","_process$env$NEXT_PUB5","payload","vercelOptions","wrap","_context","prev","next","name","concat","method","headers","Authorization","NEXT_PUBLIC_VERCEL_AUTH_BEARER_TOKEN","body","JSON","stringify","abrupt","fetch","NEXT_PUBLIC_VERCEL_PROJECT_ID","NEXT_PUBLIC_VERCEL_TEAM_ID","stop","_x","apply","this","arguments","printErr","key","value","index","form","document","querySelector","inputField","style","borderColor","_inputField$parentEle","errorTag","type","parentElement","_inputField$parentEle2","_inputField$parentEle3","textContent","_inputField$parentEle4","_inputField$parentEle5","span","createElement","classList","add","color","display","parent","nodeName","appendChild","focus","reqOptions","_process$env$NEXT_PUB6","data","length","undefined","token","content_type","channel","auth_sk","ihub_skn","NEXT_PUBLIC_INSTINCTHUB_SKH_KEY","ihub_skv","NEXT_PUBLIC_INSTINCTHUB_SK_HEADER","ihubKey","_defineProperty","lead_skn","NEXT_PUBLIC_LEADBOARD_SK_NAME","lead_skv","NEXT_PUBLIC_LEADBOARD_SK_VALUE","leadKey","sk_key","NEXT_PUBLIC_INSTINCTHUB_SK_KEY","sk_value","NEXT_PUBLIC_INSTINCTHUB_AUTH_SECRET","authKey","_objectSpread","objectSpread2","request","redirect","console","log","fetchData","_ref10","_callee2","page","options","setData","setCount","setNext","setPrevious","setIsLoading","reset","response","newData","_args2","_context2","sent","json","status","openToast","results","count","_toConsumableArray","previous","t0","error","finish","_x2","_x3","_x4","_x5","_x6","_x7","_x8","_x9","_x10","fetchAPI","_ref11","_callee3","session","api","isFunctionComponent","setStatus","setError","flag","result","_args3","_context3","includes","setState","handleStatusError","_x11","_x12","_x13","forbidden","notFound","spinBtn","button","disabled","spinner","handleResendOTP","_ref12","_callee4","email","formData","requestOptions","_context4","FormData","append","_x14","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","amount","percentage","detail","ratings","reduce","acc","rating","toFixed","courses","total","_ref2","course","Number","parseInt","credits","toString","array","forEach","item","Object","entries","_ref3","_ref4","_slicedToArray","Array","isArray","_typeof","objectURL","then","res","blob","String","parseFloat","replace","normalize","toLowerCase","test","Error","hostname","field","_parts","parts","split","namesArray","obj","filter","date","format","formatDate","Date","durationInMinutes","Math","floor","hours","minutes","number","isNaN","_number$toString$spli","_number$toString$spli2","integer","decimal","formattedInteger","cname","_step","ca","cookie","_iterator","_createForOfIteratorHelper","createForOfIteratorHelper","s","n","done","trimmed","trim","startsWith","substring","err","e","f","row","accessor","warn","items","registerForm","r_path","_items$user","serverTag","user","username","backgroundColor","location","pathname","innerHTML","link","href","_ref5","_ref6","formError","setFormError","target","toConsumableArray","dataset","errTag","getElementById","scrollIntoView","join","encodeURIComponent","input","prop","hasOwnProperty","cvalue","exdays","d","setTime","getTime","toUTCString","fileName","extension","pop","slice","str","val","_unused","txt","charAt","toUpperCase","markdownText","maxLength"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export{getChannel,getData}from"./auth/dbRequestst.js";export{INSTRUCTOR_TYPE,ROLE_GROUPING,adminAccessValidation}from"./roles.js";export{AllCoursesdataList,COMMENTS_BY,DataList,accounts,dataList,pending,projectStartHistory,statesNigeria}from"./json/accounts.js";export{unsplashDefaultObject}from"./json/unsplashDefaultObject.js";export{default as createSubscription}from"./createSubscription.js";export{default as elementIsVisibleInViewport}from"./elementIsVisibleInViewport.js";export{default as handleFormErrors}from"./formError.js";export{default as fileToBase64}from"./fileToBase64.js";export{default as getPriceObjects}from"./getPriceObjects.js";export{default as convertArrayToObject}from"./convertArrayToObject.js";export{formatTime}from"./format.js";export{API_HOST_URL,CODECS_URL_M3U8,FILE_URL,IN_DEV_MODE,TrackViewPort,VIDEO_URL,addUserDomain,calculateAmountAfterDeduction,calculateAverageRating,calculateTotalCredits,convertArrayToFormData,convertToFloat,convertToSlug,extractSubDomain,fetchAPI,fetchData,findNullOrEmptyKeys,formatDateToWord,formatDuration,formatNumberWithCommas,getCookie,getNestedValue,handleError,handleInvalid,handleResendOTP,handleStatusError,hostUrlEncode,isValidAlphanumeric,isValidEmail,objectIsEmpty,printErr,removeCookie,reqOptions,romansFigure,setCookie,slugifyFileName,spinBtn,stripCommaFromNumber,stripHtmlTags,toTitleCase,truncateHtml}from"./helpFunction.js";export{paystackHook,profile_goggle_provider}from"./oauth_json.js";export{chargeAuthorization,handlePaymentSubmit,payWithPaystack,paystackDataConfig}from"./paystack.js";export{findPermissions,headerKeyPermission,headerUsernamePermission}from"./permissions.js";export{ADMIN_PERMISSION,APPLICATION_FEE_TYPE_OPTIONS,CODE_LANGUAGES,COMPANY_SIZES_CHOICES,CONTENT_TYPE_OPTIONS,COURSE_REWARD_OPTIONS,CREDENTIALS,CURRENCY_SYMBOL,DURATION_FILTERS,INDUSTRIES,KEYWORD_DESCRIPTION,NEXT_AUTH_SESSION_DATA_DUMMY,NIGERIA_BANKS,PAYMENT_PROCESSING_OPTIONS,PRIVACY,PROGRAM_LEVELS,REGISTRAR_PERMISSION,SCOREBOARD_DURATION,SKILLS_LEVELS,STUDENT_STATUS,SUBSCRIPTION_OPTION,SUPER_PERMISSION,TRUE_FALSE,VIDEO_PLAYER_OPTIONS,YES_NO,gaugeData}from"./utils.js";export{buildDataFilterUrl,buildPaginationUrl,buildUrl,cleanUrl,getQueryParam,getQueryParams,hasQueryParam,navigateWithQuery,urlQueryHelper}from"./queryParameters/index.js";export{calculatePercentageChange,createTimeSeriesTemplate,formatChartValue,formatDateForChart,generateChartColors,groupAndAggregateData,transformChartData}from"./charts.js";export{getUserEmailInputModal,openConfirmModal,openToast}from"./modals/modals.js";export{openConfirmDelete}from"./modals/openConfirmDelete.js";var e="/assets/logo/instincthub-logo-color.png",t="/assets/logo/instincthub-logo-white.png",r="/assets/logo/instincthub-logo-black.png",a="/assets/logo/instincthub-logo-thumbnail.png";export{e as instinctHubLogoUrl,r as instinctHubLogoUrlBlack,t as instinctHubLogoUrlWhite,a as instinctHubThumbnailLogo};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./auth/dbRequestst.js"),t=require("./roles.js"),r=require("./json/accounts.js"),o=require("./json/unsplashDefaultObject.js"),s=require("./createSubscription.js"),a=require("./elementIsVisibleInViewport.js"),i=require("./formError.js"),p=require("./fileToBase64.js"),l=require("./getPriceObjects.js"),n=require("./convertArrayToObject.js"),u=require("./loadScript.js"),x=require("./format.js"),E=require("./helpFunction.js"),S=require("./oauth_json.js"),c=require("./paystack.js"),m=require("./permissions.js"),O=require("./utils.js"),T=require("./queryParameters/index.js"),I=require("./charts.js"),_=require("./modals/modals.js"),d=require("./modals/openConfirmDelete.js");exports.getChannel=e.getChannel,exports.getData=e.getData,exports.INSTRUCTOR_TYPE=t.INSTRUCTOR_TYPE,exports.ROLE_GROUPING=t.ROLE_GROUPING,exports.adminAccessValidation=t.adminAccessValidation,exports.AllCoursesdataList=r.AllCoursesdataList,exports.COMMENTS_BY=r.COMMENTS_BY,exports.DataList=r.DataList,exports.accounts=r.accounts,exports.dataList=r.dataList,exports.pending=r.pending,exports.projectStartHistory=r.projectStartHistory,exports.statesNigeria=r.statesNigeria,exports.unsplashDefaultObject=o.unsplashDefaultObject,exports.createSubscription=s.default,exports.elementIsVisibleInViewport=a.default,exports.handleFormErrors=i.default,exports.fileToBase64=p.default,exports.getPriceObjects=l.default,exports.convertArrayToObject=n.default,exports.loadScript=u.default,exports.formatTime=x.formatTime,exports.API_HOST_URL=E.API_HOST_URL,exports.CODECS_URL_M3U8=E.CODECS_URL_M3U8,exports.FILE_URL=E.FILE_URL,exports.IN_DEV_MODE=E.IN_DEV_MODE,exports.TrackViewPort=E.TrackViewPort,exports.VIDEO_URL=E.VIDEO_URL,exports.addUserDomain=E.addUserDomain,exports.calculateAmountAfterDeduction=E.calculateAmountAfterDeduction,exports.calculateAverageRating=E.calculateAverageRating,exports.calculateTotalCredits=E.calculateTotalCredits,exports.convertArrayToFormData=E.convertArrayToFormData,exports.convertToFloat=E.convertToFloat,exports.convertToSlug=E.convertToSlug,exports.extractSubDomain=E.extractSubDomain,exports.fetchAPI=E.fetchAPI,exports.fetchData=E.fetchData,exports.findNullOrEmptyKeys=E.findNullOrEmptyKeys,exports.formatDateToWord=E.formatDateToWord,exports.formatDuration=E.formatDuration,exports.formatNumberWithCommas=E.formatNumberWithCommas,exports.getCookie=E.getCookie,exports.getNestedValue=E.getNestedValue,exports.handleError=E.handleError,exports.handleInvalid=E.handleInvalid,exports.handleResendOTP=E.handleResendOTP,exports.handleStatusError=E.handleStatusError,exports.hostUrlEncode=E.hostUrlEncode,exports.isValidAlphanumeric=E.isValidAlphanumeric,exports.isValidEmail=E.isValidEmail,exports.objectIsEmpty=E.objectIsEmpty,exports.printErr=E.printErr,exports.removeCookie=E.removeCookie,exports.reqOptions=E.reqOptions,exports.romansFigure=E.romansFigure,exports.setCookie=E.setCookie,exports.slugifyFileName=E.slugifyFileName,exports.spinBtn=E.spinBtn,exports.stripCommaFromNumber=E.stripCommaFromNumber,exports.stripHtmlTags=E.stripHtmlTags,exports.toTitleCase=E.toTitleCase,exports.truncateHtml=E.truncateHtml,exports.paystackHook=S.paystackHook,exports.profile_goggle_provider=S.profile_goggle_provider,exports.chargeAuthorization=c.chargeAuthorization,exports.handlePaymentSubmit=c.handlePaymentSubmit,exports.payWithPaystack=c.payWithPaystack,exports.paystackDataConfig=c.paystackDataConfig,exports.findPermissions=m.findPermissions,exports.headerKeyPermission=m.headerKeyPermission,exports.headerUsernamePermission=m.headerUsernamePermission,exports.ADMIN_PERMISSION=O.ADMIN_PERMISSION,exports.APPLICATION_FEE_TYPE_OPTIONS=O.APPLICATION_FEE_TYPE_OPTIONS,exports.CODE_LANGUAGES=O.CODE_LANGUAGES,exports.COMPANY_SIZES_CHOICES=O.COMPANY_SIZES_CHOICES,exports.CONTENT_TYPE_OPTIONS=O.CONTENT_TYPE_OPTIONS,exports.COURSE_REWARD_OPTIONS=O.COURSE_REWARD_OPTIONS,exports.CREDENTIALS=O.CREDENTIALS,exports.CURRENCY_SYMBOL=O.CURRENCY_SYMBOL,exports.DURATION_FILTERS=O.DURATION_FILTERS,exports.INDUSTRIES=O.INDUSTRIES,exports.KEYWORD_DESCRIPTION=O.KEYWORD_DESCRIPTION,exports.NEXT_AUTH_SESSION_DATA_DUMMY=O.NEXT_AUTH_SESSION_DATA_DUMMY,exports.NIGERIA_BANKS=O.NIGERIA_BANKS,exports.PAYMENT_PROCESSING_OPTIONS=O.PAYMENT_PROCESSING_OPTIONS,exports.PRIVACY=O.PRIVACY,exports.PROGRAM_LEVELS=O.PROGRAM_LEVELS,exports.REGISTRAR_PERMISSION=O.REGISTRAR_PERMISSION,exports.SCOREBOARD_DURATION=O.SCOREBOARD_DURATION,exports.SKILLS_LEVELS=O.SKILLS_LEVELS,exports.STUDENT_STATUS=O.STUDENT_STATUS,exports.SUBSCRIPTION_OPTION=O.SUBSCRIPTION_OPTION,exports.SUPER_PERMISSION=O.SUPER_PERMISSION,exports.TRUE_FALSE=O.TRUE_FALSE,exports.VIDEO_PLAYER_OPTIONS=O.VIDEO_PLAYER_OPTIONS,exports.YES_NO=O.YES_NO,exports.gaugeData=O.gaugeData,exports.buildDataFilterUrl=T.buildDataFilterUrl,exports.buildPaginationUrl=T.buildPaginationUrl,exports.buildUrl=T.buildUrl,exports.cleanUrl=T.cleanUrl,exports.getQueryParam=T.getQueryParam,exports.getQueryParams=T.getQueryParams,exports.hasQueryParam=T.hasQueryParam,exports.navigateWithQuery=T.navigateWithQuery,exports.urlQueryHelper=T.urlQueryHelper,exports.calculatePercentageChange=I.calculatePercentageChange,exports.createTimeSeriesTemplate=I.createTimeSeriesTemplate,exports.formatChartValue=I.formatChartValue,exports.formatDateForChart=I.formatDateForChart,exports.generateChartColors=I.generateChartColors,exports.groupAndAggregateData=I.groupAndAggregateData,exports.transformChartData=I.transformChartData,exports.getUserEmailInputModal=_.getUserEmailInputModal,exports.openConfirmModal=_.openConfirmModal,exports.openToast=_.openToast,exports.openConfirmDelete=d.openConfirmDelete,exports.instinctHubLogoUrl="/assets/logo/instincthub-logo-color.png",exports.instinctHubLogoUrlBlack="/assets/logo/instincthub-logo-black.png",exports.instinctHubLogoUrlWhite="/assets/logo/instincthub-logo-white.png",exports.instinctHubThumbnailLogo="/assets/logo/instincthub-logo-thumbnail.png";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/lib/index.ts"],"sourcesContent":["// src/components/lib/index.ts\r\n\r\nexport * from \"./auth/dbRequestst\";\r\nexport * from \"./roles\";\r\n\r\n// JSON exports\r\nexport * from \"./json/accounts\";\r\nexport * from \"./json/countryNigeria\";\r\nexport * from \"./json/countryObjects\";\r\nexport * from \"./json/educationLevels\";\r\nexport * from \"./json/unsplashDefaultObject\";\r\n\r\n// Utility functions\r\nexport { default as createSubscription } from \"./createSubscription\";\r\nexport { default as elementIsVisibleInViewport } from \"./elementIsVisibleInViewport\";\r\nexport { default as handleFormErrors } from \"./formError\";\r\nexport { default as fileToBase64 } from \"./fileToBase64\";\r\nexport { default as getPriceObjects } from \"./getPriceObjects\";\r\nexport {default as convertArrayToObject} from \"./convertArrayToObject\";\r\nexport * from \"./format\";\r\nexport * from \"./helpFunction\";\r\nexport * from \"./loadScript\";\r\nexport * from \"./oauth_json\";\r\nexport * from \"./paystack\";\r\nexport * from \"./permissions\";\r\nexport * from \"./utils\";\r\nexport * from \"./queryParameters\";\r\n\r\n// Charts\r\nexport * from \"./charts\";\r\n\r\n// Modals\r\nexport * from \"./modals/modals\";\r\nexport * from \"./modals/openConfirmDelete\";\r\n\r\n// Logo\r\nexport const instinctHubLogoUrl = \"/assets/logo/instincthub-logo-color.png\";\r\nexport const instinctHubLogoUrlWhite =\r\n \"/assets/logo/instincthub-logo-white.png\";\r\nexport const instinctHubLogoUrlBlack =\r\n \"/assets/logo/instincthub-logo-black.png\";\r\nexport const instinctHubThumbnailLogo =\r\n \"/assets/logo/instincthub-logo-thumbnail.png\";\r\n"],"names":["instinctHubLogoUrl","instinctHubLogoUrlWhite","instinctHubLogoUrlBlack","instinctHubThumbnailLogo"],"mappings":"+jFAoCO,IAAMA,EAAqB,0CACrBC,EACX,0CACWC,EACX,0CACWC,EACX"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/lib/index.ts"],"sourcesContent":["// src/components/lib/index.ts\r\n\r\nexport * from \"./auth/dbRequestst\";\r\nexport * from \"./roles\";\r\n\r\n// JSON exports\r\nexport * from \"./json/accounts\";\r\nexport * from \"./json/countryNigeria\";\r\nexport * from \"./json/countryObjects\";\r\nexport * from \"./json/educationLevels\";\r\nexport * from \"./json/unsplashDefaultObject\";\r\n\r\n// Utility functions\r\nexport { default as createSubscription } from \"./createSubscription\";\r\nexport { default as elementIsVisibleInViewport } from \"./elementIsVisibleInViewport\";\r\nexport { default as handleFormErrors } from \"./formError\";\r\nexport { default as fileToBase64 } from \"./fileToBase64\";\r\nexport { default as getPriceObjects } from \"./getPriceObjects\";\r\nexport {default as convertArrayToObject} from \"./convertArrayToObject\";\r\nexport {default as loadScript} from \"./loadScript\";\r\nexport * from \"./format\";\r\nexport * from \"./helpFunction\";\r\nexport * from \"./oauth_json\";\r\nexport * from \"./paystack\";\r\nexport * from \"./permissions\";\r\nexport * from \"./utils\";\r\nexport * from \"./queryParameters\";\r\n\r\n// Charts\r\nexport * from \"./charts\";\r\n\r\n// Modals\r\nexport * from \"./modals/modals\";\r\nexport * from \"./modals/openConfirmDelete\";\r\n\r\n// Logo\r\nexport const instinctHubLogoUrl = \"/assets/logo/instincthub-logo-color.png\";\r\nexport const instinctHubLogoUrlWhite =\r\n \"/assets/logo/instincthub-logo-white.png\";\r\nexport const instinctHubLogoUrlBlack =\r\n \"/assets/logo/instincthub-logo-black.png\";\r\nexport const instinctHubThumbnailLogo =\r\n \"/assets/logo/instincthub-logo-thumbnail.png\";\r\n"],"names":[],"mappings":"wlLAoCkC,0EAIhC,0EAFA,2EAIA"}
@@ -1,2 +1,2 @@
1
- var e=[{id:1,name:"Makinde Sodiq",type:"Learner"},{id:2,name:"Adisa Toheeb",type:"Staff"}],t=[{icon:"done",title:"Everything in course plan"},{icon:"done",title:"Curated curriculum and projects"},{icon:"done",title:"Project and peer reviews"},{icon:"done",title:"Live Support"},{icon:"close",title:"Personalised path"},{icon:"close",title:"course assignment"},{icon:"close",title:"Exclusive Slack community"}],a=[{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"close",title:"100+ high quality video courses"},{icon:"close",title:"Interactive learning tools"},{icon:"close",title:"Chat support"},{icon:"close",title:"Interactive quizzes and code challenges"}],i=[{title:"Introduction to Web Development",archiveDate:"September 9, 2022"},{title:"JavaScript Fundamentals",archiveDate:"September 10, 2022"},{title:"React Masterclass",archiveDate:"September 10, 2022"},{title:"Advanced CSS Techniques",archiveDate:"September 10, 2022"},{title:"Python for Data Science",archiveDate:"September 11, 2022"},{title:"Machine Learning Basics",archiveDate:"September 11, 2022"}],o=[{title:"Project Started",date:"August 8th, 2019",time:"1:06am (WAT)"},{title:"Project Started",date:"October 15th, 2020",time:"10:45am (WAT)"},{title:"Project Submitted",date:"September 12th, 2021",time:"9:30pm (WAT)"},{title:"Project Submitted",date:"March 1st, 2022",time:"3:15pm (WAT)"}],n=[{title:"Create a dashboard using Chartjs",stack:"JavaScript",date:"April 10, 2023"},{title:"Build a responsive navigation menu using CSS grid",stack:"CSS",date:"April 15, 2023"},{title:"Implement user authentication with Firebase",stack:"Firebase",date:"April 20, 2023"},{title:"Build a RESTful API using Node.js and Express",stack:"Node.js, Express",date:"April 25, 2023"},{title:"Create a mobile app with React Native",stack:"React Native",date:"April 30, 2023"},{title:"Create a Python script for data analysis",stack:"Python",date:"May 5, 2023"},{title:"Build a real-time chat application with Socket.io",stack:"Node.js, Socket.io",date:"May 10, 2023"},{title:"Design and implement a database schema for an e-commerce site",stack:"SQL",date:"May 15, 2023"},{title:"Create a responsive landing page using Bootstrap",stack:"Bootstrap",date:"May 20, 2023"},{title:"Deploy a web application to AWS using Elastic Beanstalk",stack:"AWS",date:"May 25, 2023"}],s=["Abia","Adamawa","Akwa Ibom","Anambra","Bauchi","Bayelsa","Benue","Borno","Cross River","Delta","Ebonyi","Edo","Ekiti","Enugu","FCT","Gombe","Imo","Jigawa","Kaduna","Kano","Katsina","Kebbi","Kogi","Kwara","Lagos","Nasarawa","Niger","Ogun","Ondo","Osun","Oyo","Plateau","Rivers","Sokoto","Taraba","Yobe","Zamfara"],c=[{id:1,content:"First comment",timestamp:new Date,user:{first_name:"John",last_name:"Doe",email:"johndoe@example.com",username:"johndoe",verified:!0,is_staff:!1},replies:[]}];export{t as AllCoursesdataList,c as COMMENTS_BY,a as DataList,e as accounts,i as dataList,n as pending,o as projectStartHistory,s as statesNigeria};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=[{id:1,content:"First comment",timestamp:new Date,user:{first_name:"John",last_name:"Doe",email:"johndoe@example.com",username:"johndoe",verified:!0,is_staff:!1},replies:[]}];exports.AllCoursesdataList=[{icon:"done",title:"Everything in course plan"},{icon:"done",title:"Curated curriculum and projects"},{icon:"done",title:"Project and peer reviews"},{icon:"done",title:"Live Support"},{icon:"close",title:"Personalised path"},{icon:"close",title:"course assignment"},{icon:"close",title:"Exclusive Slack community"}],exports.COMMENTS_BY=e,exports.DataList=[{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"done",title:"Access to InstinctHub course library"},{icon:"close",title:"100+ high quality video courses"},{icon:"close",title:"Interactive learning tools"},{icon:"close",title:"Chat support"},{icon:"close",title:"Interactive quizzes and code challenges"}],exports.accounts=[{id:1,name:"Makinde Sodiq",type:"Learner"},{id:2,name:"Adisa Toheeb",type:"Staff"}],exports.dataList=[{title:"Introduction to Web Development",archiveDate:"September 9, 2022"},{title:"JavaScript Fundamentals",archiveDate:"September 10, 2022"},{title:"React Masterclass",archiveDate:"September 10, 2022"},{title:"Advanced CSS Techniques",archiveDate:"September 10, 2022"},{title:"Python for Data Science",archiveDate:"September 11, 2022"},{title:"Machine Learning Basics",archiveDate:"September 11, 2022"}],exports.pending=[{title:"Create a dashboard using Chartjs",stack:"JavaScript",date:"April 10, 2023"},{title:"Build a responsive navigation menu using CSS grid",stack:"CSS",date:"April 15, 2023"},{title:"Implement user authentication with Firebase",stack:"Firebase",date:"April 20, 2023"},{title:"Build a RESTful API using Node.js and Express",stack:"Node.js, Express",date:"April 25, 2023"},{title:"Create a mobile app with React Native",stack:"React Native",date:"April 30, 2023"},{title:"Create a Python script for data analysis",stack:"Python",date:"May 5, 2023"},{title:"Build a real-time chat application with Socket.io",stack:"Node.js, Socket.io",date:"May 10, 2023"},{title:"Design and implement a database schema for an e-commerce site",stack:"SQL",date:"May 15, 2023"},{title:"Create a responsive landing page using Bootstrap",stack:"Bootstrap",date:"May 20, 2023"},{title:"Deploy a web application to AWS using Elastic Beanstalk",stack:"AWS",date:"May 25, 2023"}],exports.projectStartHistory=[{title:"Project Started",date:"August 8th, 2019",time:"1:06am (WAT)"},{title:"Project Started",date:"October 15th, 2020",time:"10:45am (WAT)"},{title:"Project Submitted",date:"September 12th, 2021",time:"9:30pm (WAT)"},{title:"Project Submitted",date:"March 1st, 2022",time:"3:15pm (WAT)"}],exports.statesNigeria=["Abia","Adamawa","Akwa Ibom","Anambra","Bauchi","Bayelsa","Benue","Borno","Cross River","Delta","Ebonyi","Edo","Ekiti","Enugu","FCT","Gombe","Imo","Jigawa","Kaduna","Kano","Katsina","Kebbi","Kogi","Kwara","Lagos","Nasarawa","Niger","Ogun","Ondo","Osun","Oyo","Plateau","Rivers","Sokoto","Taraba","Yobe","Zamfara"];
2
2
  //# sourceMappingURL=accounts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sources":["../../../../../src/components/lib/json/accounts.ts"],"sourcesContent":["export const accounts = [\r\n\t{ id: 1, name: \"Makinde Sodiq\", type: \"Learner\" },\r\n\t{ id: 2, name: \"Adisa Toheeb\", type: \"Staff\" },\r\n\t// { id: 3, name: 'Divine Aselemi' ,type: \"Staff\"},\r\n];\r\nexport const AllCoursesdataList = [\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Everything in course plan\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Curated curriculum and projects\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Project and peer reviews\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Live Support\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Personalised path\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"course assignment\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Exclusive Slack community\",\r\n\t},\r\n];\r\nexport const DataList = [\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"100+ high quality video courses\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Interactive learning tools\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Chat support\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Interactive quizzes and code challenges\",\r\n\t},\r\n];\r\n\r\nexport const dataList = [\r\n\t{\r\n\t\ttitle: \"Introduction to Web Development\",\r\n\t\tarchiveDate: \"September 9, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"JavaScript Fundamentals\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"React Masterclass\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Advanced CSS Techniques\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Python for Data Science\",\r\n\t\tarchiveDate: \"September 11, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Machine Learning Basics\",\r\n\t\tarchiveDate: \"September 11, 2022\",\r\n\t},\r\n];\r\n\r\nexport const projectStartHistory = [\r\n\t{\r\n\t\ttitle: \"Project Started\",\r\n\t\tdate: \"August 8th, 2019\",\r\n\t\ttime: \"1:06am (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Started\",\r\n\t\tdate: \"October 15th, 2020\",\r\n\t\ttime: \"10:45am (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Submitted\",\r\n\t\tdate: \"September 12th, 2021\",\r\n\t\ttime: \"9:30pm (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Submitted\",\r\n\t\tdate: \"March 1st, 2022\",\r\n\t\ttime: \"3:15pm (WAT)\",\r\n\t},\r\n];\r\n\r\nexport const pending = [\r\n\t{\r\n\t\ttitle: \"Create a dashboard using Chartjs\",\r\n\t\tstack: \"JavaScript\",\r\n\t\tdate: \"April 10, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a responsive navigation menu using CSS grid\",\r\n\t\tstack: \"CSS\",\r\n\t\tdate: \"April 15, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Implement user authentication with Firebase\",\r\n\t\tstack: \"Firebase\",\r\n\t\tdate: \"April 20, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a RESTful API using Node.js and Express\",\r\n\t\tstack: \"Node.js, Express\",\r\n\t\tdate: \"April 25, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a mobile app with React Native\",\r\n\t\tstack: \"React Native\",\r\n\t\tdate: \"April 30, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a Python script for data analysis\",\r\n\t\tstack: \"Python\",\r\n\t\tdate: \"May 5, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a real-time chat application with Socket.io\",\r\n\t\tstack: \"Node.js, Socket.io\",\r\n\t\tdate: \"May 10, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Design and implement a database schema for an e-commerce site\",\r\n\t\tstack: \"SQL\",\r\n\t\tdate: \"May 15, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a responsive landing page using Bootstrap\",\r\n\t\tstack: \"Bootstrap\",\r\n\t\tdate: \"May 20, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Deploy a web application to AWS using Elastic Beanstalk\",\r\n\t\tstack: \"AWS\",\r\n\t\tdate: \"May 25, 2023\",\r\n\t},\r\n];\r\n\r\nexport const statesNigeria = [\r\n\t\"Abia\",\r\n\t\"Adamawa\",\r\n\t\"Akwa Ibom\",\r\n\t\"Anambra\",\r\n\t\"Bauchi\",\r\n\t\"Bayelsa\",\r\n\t\"Benue\",\r\n\t\"Borno\",\r\n\t\"Cross River\",\r\n\t\"Delta\",\r\n\t\"Ebonyi\",\r\n\t\"Edo\",\r\n\t\"Ekiti\",\r\n\t\"Enugu\",\r\n\t\"FCT\",\r\n\t\"Gombe\",\r\n\t\"Imo\",\r\n\t\"Jigawa\",\r\n\t\"Kaduna\",\r\n\t\"Kano\",\r\n\t\"Katsina\",\r\n\t\"Kebbi\",\r\n\t\"Kogi\",\r\n\t\"Kwara\",\r\n\t\"Lagos\",\r\n\t\"Nasarawa\",\r\n\t\"Niger\",\r\n\t\"Ogun\",\r\n\t\"Ondo\",\r\n\t\"Osun\",\r\n\t\"Oyo\",\r\n\t\"Plateau\",\r\n\t\"Rivers\",\r\n\t\"Sokoto\",\r\n\t\"Taraba\",\r\n\t\"Yobe\",\r\n\t\"Zamfara\",\r\n];\r\n\r\nexport const COMMENTS_BY = [\r\n\t{\r\n\t\tid: 1,\r\n\t\tcontent: \"First comment\",\r\n\t\ttimestamp: new Date(),\r\n\t\tuser: {\r\n\t\t\tfirst_name: \"John\",\r\n\t\t\tlast_name: \"Doe\",\r\n\t\t\temail: \"johndoe@example.com\",\r\n\t\t\tusername: \"johndoe\",\r\n\t\t\tverified: true,\r\n\t\t\tis_staff: false,\r\n\t\t},\r\n\t\treplies: [],\r\n\t},\r\n\t// Add more comments here...\r\n];\r\n"],"names":["accounts","id","name","type","AllCoursesdataList","icon","title","DataList","dataList","archiveDate","projectStartHistory","date","time","pending","stack","statesNigeria","COMMENTS_BY","content","timestamp","Date","user","first_name","last_name","email","username","verified","is_staff","replies"],"mappings":"AAAO,IAAMA,EAAW,CACvB,CAAEC,GAAI,EAAGC,KAAM,gBAAiBC,KAAM,WACtC,CAAEF,GAAI,EAAGC,KAAM,eAAgBC,KAAM,UAGzBC,EAAqB,CACjC,CACCC,KAAM,OACNC,MAAO,6BAER,CACCD,KAAM,OACNC,MAAO,mCAER,CACCD,KAAM,OACNC,MAAO,4BAER,CACCD,KAAM,OACNC,MAAO,gBAER,CACCD,KAAM,QACNC,MAAO,qBAER,CACCD,KAAM,QACNC,MAAO,qBAER,CACCD,KAAM,QACNC,MAAO,8BAGIC,EAAW,CACvB,CACCF,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,QACNC,MAAO,mCAER,CACCD,KAAM,QACNC,MAAO,8BAER,CACCD,KAAM,QACNC,MAAO,gBAER,CACCD,KAAM,QACNC,MAAO,4CAIIE,EAAW,CACvB,CACCF,MAAO,kCACPG,YAAa,qBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,oBACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,uBAIFC,EAAsB,CAClC,CACCJ,MAAO,kBACPK,KAAM,mBACNC,KAAM,gBAEP,CACCN,MAAO,kBACPK,KAAM,qBACNC,KAAM,iBAEP,CACCN,MAAO,oBACPK,KAAM,uBACNC,KAAM,gBAEP,CACCN,MAAO,oBACPK,KAAM,kBACNC,KAAM,iBAIKC,EAAU,CACtB,CACCP,MAAO,mCACPQ,MAAO,aACPH,KAAM,kBAEP,CACCL,MAAO,oDACPQ,MAAO,MACPH,KAAM,kBAEP,CACCL,MAAO,8CACPQ,MAAO,WACPH,KAAM,kBAEP,CACCL,MAAO,gDACPQ,MAAO,mBACPH,KAAM,kBAEP,CACCL,MAAO,wCACPQ,MAAO,eACPH,KAAM,kBAEP,CACCL,MAAO,2CACPQ,MAAO,SACPH,KAAM,eAEP,CACCL,MAAO,oDACPQ,MAAO,qBACPH,KAAM,gBAEP,CACCL,MAAO,gEACPQ,MAAO,MACPH,KAAM,gBAEP,CACCL,MAAO,mDACPQ,MAAO,YACPH,KAAM,gBAEP,CACCL,MAAO,0DACPQ,MAAO,MACPH,KAAM,iBAIKI,EAAgB,CAC5B,OACA,UACA,YACA,UACA,SACA,UACA,QACA,QACA,cACA,QACA,SACA,MACA,QACA,QACA,MACA,QACA,MACA,SACA,SACA,OACA,UACA,QACA,OACA,QACA,QACA,WACA,QACA,OACA,OACA,OACA,MACA,UACA,SACA,SACA,SACA,OACA,WAGYC,EAAc,CAC1B,CACCf,GAAI,EACJgB,QAAS,gBACTC,UAAW,IAAIC,KACfC,KAAM,CACLC,WAAY,OACZC,UAAW,MACXC,MAAO,sBACPC,SAAU,UACVC,UAAU,EACVC,UAAU,GAEXC,QAAS"}
1
+ {"version":3,"file":"accounts.js","sources":["../../../../../src/components/lib/json/accounts.ts"],"sourcesContent":["export const accounts = [\r\n\t{ id: 1, name: \"Makinde Sodiq\", type: \"Learner\" },\r\n\t{ id: 2, name: \"Adisa Toheeb\", type: \"Staff\" },\r\n\t// { id: 3, name: 'Divine Aselemi' ,type: \"Staff\"},\r\n];\r\nexport const AllCoursesdataList = [\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Everything in course plan\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Curated curriculum and projects\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Project and peer reviews\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Live Support\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Personalised path\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"course assignment\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Exclusive Slack community\",\r\n\t},\r\n];\r\nexport const DataList = [\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"done\",\r\n\t\ttitle: \"Access to InstinctHub course library\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"100+ high quality video courses\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Interactive learning tools\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Chat support\",\r\n\t},\r\n\t{\r\n\t\ticon: \"close\",\r\n\t\ttitle: \"Interactive quizzes and code challenges\",\r\n\t},\r\n];\r\n\r\nexport const dataList = [\r\n\t{\r\n\t\ttitle: \"Introduction to Web Development\",\r\n\t\tarchiveDate: \"September 9, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"JavaScript Fundamentals\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"React Masterclass\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Advanced CSS Techniques\",\r\n\t\tarchiveDate: \"September 10, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Python for Data Science\",\r\n\t\tarchiveDate: \"September 11, 2022\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Machine Learning Basics\",\r\n\t\tarchiveDate: \"September 11, 2022\",\r\n\t},\r\n];\r\n\r\nexport const projectStartHistory = [\r\n\t{\r\n\t\ttitle: \"Project Started\",\r\n\t\tdate: \"August 8th, 2019\",\r\n\t\ttime: \"1:06am (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Started\",\r\n\t\tdate: \"October 15th, 2020\",\r\n\t\ttime: \"10:45am (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Submitted\",\r\n\t\tdate: \"September 12th, 2021\",\r\n\t\ttime: \"9:30pm (WAT)\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Project Submitted\",\r\n\t\tdate: \"March 1st, 2022\",\r\n\t\ttime: \"3:15pm (WAT)\",\r\n\t},\r\n];\r\n\r\nexport const pending = [\r\n\t{\r\n\t\ttitle: \"Create a dashboard using Chartjs\",\r\n\t\tstack: \"JavaScript\",\r\n\t\tdate: \"April 10, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a responsive navigation menu using CSS grid\",\r\n\t\tstack: \"CSS\",\r\n\t\tdate: \"April 15, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Implement user authentication with Firebase\",\r\n\t\tstack: \"Firebase\",\r\n\t\tdate: \"April 20, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a RESTful API using Node.js and Express\",\r\n\t\tstack: \"Node.js, Express\",\r\n\t\tdate: \"April 25, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a mobile app with React Native\",\r\n\t\tstack: \"React Native\",\r\n\t\tdate: \"April 30, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a Python script for data analysis\",\r\n\t\tstack: \"Python\",\r\n\t\tdate: \"May 5, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Build a real-time chat application with Socket.io\",\r\n\t\tstack: \"Node.js, Socket.io\",\r\n\t\tdate: \"May 10, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Design and implement a database schema for an e-commerce site\",\r\n\t\tstack: \"SQL\",\r\n\t\tdate: \"May 15, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Create a responsive landing page using Bootstrap\",\r\n\t\tstack: \"Bootstrap\",\r\n\t\tdate: \"May 20, 2023\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Deploy a web application to AWS using Elastic Beanstalk\",\r\n\t\tstack: \"AWS\",\r\n\t\tdate: \"May 25, 2023\",\r\n\t},\r\n];\r\n\r\nexport const statesNigeria = [\r\n\t\"Abia\",\r\n\t\"Adamawa\",\r\n\t\"Akwa Ibom\",\r\n\t\"Anambra\",\r\n\t\"Bauchi\",\r\n\t\"Bayelsa\",\r\n\t\"Benue\",\r\n\t\"Borno\",\r\n\t\"Cross River\",\r\n\t\"Delta\",\r\n\t\"Ebonyi\",\r\n\t\"Edo\",\r\n\t\"Ekiti\",\r\n\t\"Enugu\",\r\n\t\"FCT\",\r\n\t\"Gombe\",\r\n\t\"Imo\",\r\n\t\"Jigawa\",\r\n\t\"Kaduna\",\r\n\t\"Kano\",\r\n\t\"Katsina\",\r\n\t\"Kebbi\",\r\n\t\"Kogi\",\r\n\t\"Kwara\",\r\n\t\"Lagos\",\r\n\t\"Nasarawa\",\r\n\t\"Niger\",\r\n\t\"Ogun\",\r\n\t\"Ondo\",\r\n\t\"Osun\",\r\n\t\"Oyo\",\r\n\t\"Plateau\",\r\n\t\"Rivers\",\r\n\t\"Sokoto\",\r\n\t\"Taraba\",\r\n\t\"Yobe\",\r\n\t\"Zamfara\",\r\n];\r\n\r\nexport const COMMENTS_BY = [\r\n\t{\r\n\t\tid: 1,\r\n\t\tcontent: \"First comment\",\r\n\t\ttimestamp: new Date(),\r\n\t\tuser: {\r\n\t\t\tfirst_name: \"John\",\r\n\t\t\tlast_name: \"Doe\",\r\n\t\t\temail: \"johndoe@example.com\",\r\n\t\t\tusername: \"johndoe\",\r\n\t\t\tverified: true,\r\n\t\t\tis_staff: false,\r\n\t\t},\r\n\t\treplies: [],\r\n\t},\r\n\t// Add more comments here...\r\n];\r\n"],"names":["COMMENTS_BY","id","content","timestamp","Date","user","first_name","last_name","email","username","verified","is_staff","replies","icon","title","name","type","archiveDate","stack","date","time"],"mappings":"oEAAO,IAqNMA,EAAc,CAC1B,CACCC,GAAI,EACJC,QAAS,gBACTC,UAAW,IAAIC,KACfC,KAAM,CACLC,WAAY,OACZC,UAAW,MACXC,MAAO,sBACPC,SAAU,UACVC,UAAU,EACVC,UAAU,GAEXC,QAAS,gCA7NuB,CACjC,CACCC,KAAM,OACNC,MAAO,6BAER,CACCD,KAAM,OACNC,MAAO,mCAER,CACCD,KAAM,OACNC,MAAO,4BAER,CACCD,KAAM,OACNC,MAAO,gBAER,CACCD,KAAM,QACNC,MAAO,qBAER,CACCD,KAAM,QACNC,MAAO,qBAER,CACCD,KAAM,QACNC,MAAO,qEAGe,CACvB,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,OACNC,MAAO,wCAER,CACCD,KAAM,QACNC,MAAO,mCAER,CACCD,KAAM,QACNC,MAAO,8BAER,CACCD,KAAM,QACNC,MAAO,gBAER,CACCD,KAAM,QACNC,MAAO,6DAlEe,CACvB,CAAEb,GAAI,EAAGc,KAAM,gBAAiBC,KAAM,WACtC,CAAEf,GAAI,EAAGc,KAAM,eAAgBC,KAAM,2BAoEd,CACvB,CACCF,MAAO,kCACPG,YAAa,qBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,oBACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,sBAEd,CACCH,MAAO,0BACPG,YAAa,uCA2BQ,CACtB,CACCH,MAAO,mCACPI,MAAO,aACPC,KAAM,kBAEP,CACCL,MAAO,oDACPI,MAAO,MACPC,KAAM,kBAEP,CACCL,MAAO,8CACPI,MAAO,WACPC,KAAM,kBAEP,CACCL,MAAO,gDACPI,MAAO,mBACPC,KAAM,kBAEP,CACCL,MAAO,wCACPI,MAAO,eACPC,KAAM,kBAEP,CACCL,MAAO,2CACPI,MAAO,SACPC,KAAM,eAEP,CACCL,MAAO,oDACPI,MAAO,qBACPC,KAAM,gBAEP,CACCL,MAAO,gEACPI,MAAO,MACPC,KAAM,gBAEP,CACCL,MAAO,mDACPI,MAAO,YACPC,KAAM,gBAEP,CACCL,MAAO,0DACPI,MAAO,MACPC,KAAM,6CAxE2B,CAClC,CACCL,MAAO,kBACPK,KAAM,mBACNC,KAAM,gBAEP,CACCN,MAAO,kBACPK,KAAM,qBACNC,KAAM,iBAEP,CACCN,MAAO,oBACPK,KAAM,uBACNC,KAAM,gBAEP,CACCN,MAAO,oBACPK,KAAM,kBACNC,KAAM,uCAyDqB,CAC5B,OACA,UACA,YACA,UACA,SACA,UACA,QACA,QACA,cACA,QACA,SACA,MACA,QACA,QACA,MACA,QACA,MACA,SACA,SACA,OACA,UACA,QACA,OACA,QACA,QACA,WACA,QACA,OACA,OACA,OACA,MACA,UACA,SACA,SACA,SACA,OACA"}