@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,2 +1,2 @@
1
- var e={id:"MnHQMzC6n-o",urls:{regular:"https://images.unsplash.com/photo-1478432780021-b8d273730d8c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NjE2NTZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2ODc0NTc5MTB8&ixlib=rb-4.0.3&q=80&w=1080"},user:{id:"CqWsnLyLYjk",updated_at:"2023-05-29T23:54:07Z",username:"paulfrenzel",name:"Paul Frenzel"}};export{e as unsplashDefaultObject};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.unsplashDefaultObject={id:"MnHQMzC6n-o",urls:{regular:"https://images.unsplash.com/photo-1478432780021-b8d273730d8c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NjE2NTZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2ODc0NTc5MTB8&ixlib=rb-4.0.3&q=80&w=1080"},user:{id:"CqWsnLyLYjk",updated_at:"2023-05-29T23:54:07Z",username:"paulfrenzel",name:"Paul Frenzel"}};
2
2
  //# sourceMappingURL=unsplashDefaultObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsplashDefaultObject.js","sources":["../../../../../src/components/lib/json/unsplashDefaultObject.ts"],"sourcesContent":["export const unsplashDefaultObject = {\r\n\tid: \"MnHQMzC6n-o\",\r\n\turls: {\r\n\t\tregular:\r\n\t\t\t\"https://images.unsplash.com/photo-1478432780021-b8d273730d8c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NjE2NTZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2ODc0NTc5MTB8&ixlib=rb-4.0.3&q=80&w=1080\",\r\n\t},\r\n\tuser: {\r\n\t\tid: \"CqWsnLyLYjk\",\r\n\t\tupdated_at: \"2023-05-29T23:54:07Z\",\r\n\t\tusername: \"paulfrenzel\",\r\n\t\tname: \"Paul Frenzel\",\r\n\t},\r\n};\r\n"],"names":["unsplashDefaultObject","id","urls","regular","user","updated_at","username","name"],"mappings":"AAAO,IAAMA,EAAwB,CACpCC,GAAI,cACJC,KAAM,CACLC,QACC,6LAEFC,KAAM,CACLH,GAAI,cACJI,WAAY,uBACZC,SAAU,cACVC,KAAM"}
1
+ {"version":3,"file":"unsplashDefaultObject.js","sources":["../../../../../src/components/lib/json/unsplashDefaultObject.ts"],"sourcesContent":["export const unsplashDefaultObject = {\r\n\tid: \"MnHQMzC6n-o\",\r\n\turls: {\r\n\t\tregular:\r\n\t\t\t\"https://images.unsplash.com/photo-1478432780021-b8d273730d8c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NjE2NTZ8MHwxfHJhbmRvbXx8fHx8fHx8fDE2ODc0NTc5MTB8&ixlib=rb-4.0.3&q=80&w=1080\",\r\n\t},\r\n\tuser: {\r\n\t\tid: \"CqWsnLyLYjk\",\r\n\t\tupdated_at: \"2023-05-29T23:54:07Z\",\r\n\t\tusername: \"paulfrenzel\",\r\n\t\tname: \"Paul Frenzel\",\r\n\t},\r\n};\r\n"],"names":["id","urls","regular","user","updated_at","username","name"],"mappings":"kGAAqC,CACpCA,GAAI,cACJC,KAAM,CACLC,QACC,6LAEFC,KAAM,CACLH,GAAI,cACJI,WAAY,uBACZC,SAAU,cACVC,KAAM"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.default=function(e){if(!e)return!1;var r=document.querySelector('script[src="'.concat(e,'"]'));return r||((r=document.createElement("script")).src=e,r.async=!0,r.onerror=function(){return console.error("Failed to load the script: ",e),!1},document.body.appendChild(r),r)};
2
+ //# sourceMappingURL=loadScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadScript.js","sources":["../../../../src/components/lib/loadScript.ts"],"sourcesContent":["/**\r\n * Dynamically loads an external JavaScript file\r\n * @param scriptSrc - URL of the script to load\r\n * @returns The script element or false if no source provided\r\n */\r\nconst loadScript = (scriptSrc: string): HTMLScriptElement | false => {\r\n // If no src return false\r\n if (!scriptSrc) return false;\r\n\r\n // Check if the script already exists in the DOM\r\n let script = document.querySelector(`script[src=\"${scriptSrc}\"]`) as HTMLScriptElement | null;\r\n if (script) {\r\n return script;\r\n }\r\n\r\n // If the script does not exist, create and load it\r\n script = document.createElement(\"script\");\r\n script.src = scriptSrc;\r\n script.async = true;\r\n\r\n script.onerror = () => {\r\n console.error(\"Failed to load the script: \", scriptSrc);\r\n return false;\r\n };\r\n\r\n document.body.appendChild(script);\r\n\r\n return script;\r\n};\r\n\r\nexport default loadScript;"],"names":["scriptSrc","script","document","querySelector","concat","createElement","src","async","onerror","console","error","body","appendChild"],"mappings":"oFAKmB,SAACA,GAElB,IAAKA,EAAW,OAAO,EAGvB,IAAIC,EAASC,SAASC,6BAAaC,OAAgBJ,EAAS,OAC5D,OAAIC,KAKJA,EAASC,SAASG,cAAc,WACzBC,IAAMN,EACbC,EAAOM,OAAQ,EAEfN,EAAOO,QAAU,WAEf,OADAC,QAAQC,MAAM,8BAA+BV,IACtC,GAGTE,SAASS,KAAKC,YAAYX,GAEnBA,EACT"}
@@ -1,2 +1,2 @@
1
- var n=function(n){if(!n||n.length<3)return!1;return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)},e=function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(t){var o=document.getElementById("confirmModal");o||((o=document.createElement("div")).id="confirmModal");var i='\n <section id="myModal" class="modal">\n <div class="modal-content">\n <span class="close" onclick="window.handleCancel()">×</span>\n <p class="'.concat(e?"something_bad_flagged":"something_bad",'">\n ').concat(e?"Unexpected things will happen if you don’t read this!":"You are about to submit!","\n </p>\n <p>").concat(n||"Carefully read the instructions before making a decision. Ready? Hit the continue button!",'</p>\n <div class="mt-4">\n <button type="button" class="danger-btn d-inline-block" onclick="window.handleCancel()">Cancel</button>\n <button type="button" class="important-btn confirm-btn ihub-bg-dark-cyan" onclick="window.handleConfirm()">Ok</button>\n </div>\n </div>\n </section>\n ');o.innerHTML=i,document.body.appendChild(o);var a=function(){var n;null===(n=o)||void 0===n||n.remove()};window.handleCancel=function(){a(),t(!1),console.log("")},window.handleConfirm=function(){a(),t(!0)},o.addEventListener("click",(function(n){var e=n.target;"myModal"!==e.id&&"confirmModal"!==e.id||a()}))}))},t=function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,t=200===e||201===e?"Awesome! The update was made.":500===e?"Sorry, the server can't process your request":"Hmmm..., Something went wrong. Try again",o=200===e||201===e?'<svg viewBox="0 0 24 24" style="color: var(--ViridianGreen); width:24px; height:24px;"><path fill="currentColor" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>':'<svg viewBox="0 0 24 24" style="color: var(--Danger); width:24px; height:24px;"><path fill="currentColor" d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"/></svg>',i=document.getElementById("openToast");i||((i=document.createElement("div")).id="openToast");var a='\n <div class="toast-wrapper">\n <div class="slide-in-top">\n <div class="align-text">\n <div class="valid_btn">\n '.concat(o,'\n <p class="').concat(200===e||201===e?"isDone":"isError",'">\n ').concat(n||t,'\n </p>\n </div>\n </div>\n <svg width="800px" height="800px" viewBox="-0.5 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg" \n class="close-btn" onclick="window.cleanupToast()">\n <path d="M3 21.32L21 3.32001" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M3 3.32001L21 21.32" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n </div>\n </div>\n ');i.innerHTML=a,document.body.appendChild(i),window.cleanupToast=function(){var n;null===(n=i)||void 0===n||n.remove()},setTimeout((function(){window.cleanupToast()}),1e4)},o=function(e){return new Promise((function(o){var i,a=document.getElementById("confirmModal");a||((a=document.createElement("div")).id="confirmModal");var d='\n <section id="myModal" class="modal">\n <div class="modal-content">\n <svg width="800px" height="800px" viewBox="-0.5 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg" \n class="ih_get_user_email_modal_close_btn" onclick="window.handleCleanUpInput()">\n <path d="M3 21.32L21 3.32001" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M3 3.32001L21 21.32" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n <h4>Enrol for '.concat(e,'</h4>\n <p>Enter a valid Email Address</p>\n <input type="email" name="email" id="userInput" oninput="window.handleInput(this)" />\n <div class="action_btn">\n <button type="button" disabled id="proceedBtn" class="delete_btn important-btn" onclick="window.handleConfirm()">Proceed</button>\n </div>\n </div>\n </section>\n ');a.innerHTML=d,document.body.appendChild(a);var l=document.getElementById("proceedBtn");window.handleInput=function(e){n(e.value)?(l&&(l.disabled=!1),i=e.value):(l&&(l.disabled=!0),i=void 0)};var r=function(){var n;null===(n=a)||void 0===n||n.remove()};window.handleConfirm=function(){n(i)?(r(),o(i)):t("You need to enter a valid email!",400)},window.handleCleanUpInput=function(){r(),o(void 0)}}))};export{o as getUserEmailInputModal,e as openConfirmModal,t as openToast};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(n){if(!n||n.length<3)return!1;return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)},e=function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,t=200===e||201===e?"Awesome! The update was made.":500===e?"Sorry, the server can't process your request":"Hmmm..., Something went wrong. Try again",o=200===e||201===e?'<svg viewBox="0 0 24 24" style="color: var(--ViridianGreen); width:24px; height:24px;"><path fill="currentColor" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>':'<svg viewBox="0 0 24 24" style="color: var(--Danger); width:24px; height:24px;"><path fill="currentColor" d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"/></svg>',i=document.getElementById("openToast");i||((i=document.createElement("div")).id="openToast");var a='\n <div class="toast-wrapper">\n <div class="slide-in-top">\n <div class="align-text">\n <div class="valid_btn">\n '.concat(o,'\n <p class="').concat(200===e||201===e?"isDone":"isError",'">\n ').concat(n||t,'\n </p>\n </div>\n </div>\n <svg width="800px" height="800px" viewBox="-0.5 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg" \n class="close-btn" onclick="window.cleanupToast()">\n <path d="M3 21.32L21 3.32001" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M3 3.32001L21 21.32" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n </div>\n </div>\n ');i.innerHTML=a,document.body.appendChild(i),window.cleanupToast=function(){var n;null===(n=i)||void 0===n||n.remove()},setTimeout((function(){window.cleanupToast()}),1e4)};exports.getUserEmailInputModal=function(t){return new Promise((function(o){var i,a=document.getElementById("confirmModal");a||((a=document.createElement("div")).id="confirmModal");var d='\n <section id="myModal" class="modal">\n <div class="modal-content">\n <svg width="800px" height="800px" viewBox="-0.5 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg" \n class="ih_get_user_email_modal_close_btn" onclick="window.handleCleanUpInput()">\n <path d="M3 21.32L21 3.32001" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n <path d="M3 3.32001L21 21.32" stroke="var(--Gunmetal)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>\n <h4>Enrol for '.concat(t,'</h4>\n <p>Enter a valid Email Address</p>\n <input type="email" name="email" id="userInput" oninput="window.handleInput(this)" />\n <div class="action_btn">\n <button type="button" disabled id="proceedBtn" class="delete_btn important-btn" onclick="window.handleConfirm()">Proceed</button>\n </div>\n </div>\n </section>\n ');a.innerHTML=d,document.body.appendChild(a);var l=document.getElementById("proceedBtn");window.handleInput=function(e){n(e.value)?(l&&(l.disabled=!1),i=e.value):(l&&(l.disabled=!0),i=void 0)};var r=function(){var n;null===(n=a)||void 0===n||n.remove()};window.handleConfirm=function(){n(i)?(r(),o(i)):e("You need to enter a valid email!",400)},window.handleCleanUpInput=function(){r(),o(void 0)}}))},exports.openConfirmModal=function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(t){var o=document.getElementById("confirmModal");o||((o=document.createElement("div")).id="confirmModal");var i='\n <section id="myModal" class="modal">\n <div class="modal-content">\n <span class="close" onclick="window.handleCancel()">×</span>\n <p class="'.concat(e?"something_bad_flagged":"something_bad",'">\n ').concat(e?"Unexpected things will happen if you don’t read this!":"You are about to submit!","\n </p>\n <p>").concat(n||"Carefully read the instructions before making a decision. Ready? Hit the continue button!",'</p>\n <div class="mt-4">\n <button type="button" class="danger-btn d-inline-block" onclick="window.handleCancel()">Cancel</button>\n <button type="button" class="important-btn confirm-btn ihub-bg-dark-cyan" onclick="window.handleConfirm()">Ok</button>\n </div>\n </div>\n </section>\n ');o.innerHTML=i,document.body.appendChild(o);var a=function(){var n;null===(n=o)||void 0===n||n.remove()};window.handleCancel=function(){a(),t(!1),console.log("")},window.handleConfirm=function(){a(),t(!0)},o.addEventListener("click",(function(n){var e=n.target;"myModal"!==e.id&&"confirmModal"!==e.id||a()}))}))},exports.openToast=e;
2
2
  //# sourceMappingURL=modals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modals.js","sources":["../../../../../src/components/lib/modals/modals.ts"],"sourcesContent":["import React from \"react\";\r\n\r\n// Type for status codes\r\ntype StatusCode = 200 | 201 | 400 | 500 | number;\r\n\r\n// Utility function to validate email\r\nconst isValidEmail = (input: string | undefined): boolean => {\r\n if (!input || input.length < 3) {\r\n return false;\r\n }\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(input);\r\n};\r\n\r\n// Declare global window interface extensions for event handlers\r\ndeclare global {\r\n interface Window {\r\n handleCancel: () => void;\r\n handleConfirm: () => void;\r\n cleanupToast: () => void;\r\n handleInput: (e: HTMLInputElement) => void;\r\n handleCleanUpInput: () => void;\r\n }\r\n}\r\n\r\n// Open a confirmation modal\r\nexport const openConfirmModal = (\r\n message: string,\r\n flag: boolean = false\r\n): Promise<boolean> => {\r\n return new Promise((resolve) => {\r\n let modalContainer = document.getElementById(\r\n \"confirmModal\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"confirmModal\";\r\n }\r\n\r\n const modalContent = `\r\n <section id=\"myModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <span class=\"close\" onclick=\"window.handleCancel()\">×</span>\r\n <p class=\"${flag ? \"something_bad_flagged\" : \"something_bad\"}\">\r\n ${\r\n flag\r\n ? \"Unexpected things will happen if you don’t read this!\"\r\n : \"You are about to submit!\"\r\n }\r\n </p>\r\n <p>${\r\n message ||\r\n \"Carefully read the instructions before making a decision. Ready? Hit the continue button!\"\r\n }</p>\r\n <div class=\"mt-4\">\r\n <button type=\"button\" class=\"danger-btn d-inline-block\" onclick=\"window.handleCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"important-btn confirm-btn ihub-bg-dark-cyan\" onclick=\"window.handleConfirm()\">Ok</button>\r\n </div>\r\n </div>\r\n </section>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n const cleanup = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n window.handleCancel = () => {\r\n cleanup();\r\n resolve(false);\r\n console.log(\"\");\r\n };\r\n\r\n window.handleConfirm = () => {\r\n cleanup();\r\n resolve(true);\r\n };\r\n\r\n modalContainer.addEventListener(\"click\", (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n if (target.id === \"myModal\" || target.id === \"confirmModal\") {\r\n cleanup();\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Open a toast notification\r\nexport const openToast = (\r\n message?: React.ReactDOM | string,\r\n status: StatusCode = 200\r\n): void => {\r\n const msg =\r\n status === 200 || status === 201\r\n ? \"Awesome! The update was made.\"\r\n : status === 500\r\n ? \"Sorry, the server can't process your request\"\r\n : \"Hmmm..., Something went wrong. Try again\";\r\n\r\n const iconSvg =\r\n status === 200 || status === 201\r\n ? '<svg viewBox=\"0 0 24 24\" style=\"color: var(--ViridianGreen); width:24px; height:24px;\"><path fill=\"currentColor\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>'\r\n : '<svg viewBox=\"0 0 24 24\" style=\"color: var(--Danger); width:24px; height:24px;\"><path fill=\"currentColor\" d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>';\r\n\r\n let modalContainer = document.getElementById(\r\n \"openToast\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"openToast\";\r\n }\r\n\r\n const modalContent = `\r\n <div class=\"toast-wrapper\">\r\n <div class=\"slide-in-top\">\r\n <div class=\"align-text\">\r\n <div class=\"valid_btn\">\r\n ${iconSvg}\r\n <p class=\"${\r\n status === 200 || status === 201 ? \"isDone\" : \"isError\"\r\n }\">\r\n ${message || msg}\r\n </p>\r\n </div>\r\n </div>\r\n <svg width=\"800px\" height=\"800px\" viewBox=\"-0.5 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" \r\n class=\"close-btn\" onclick=\"window.cleanupToast()\">\r\n <path d=\"M3 21.32L21 3.32001\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M3 3.32001L21 21.32\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n window.cleanupToast = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n setTimeout(() => {\r\n window.cleanupToast();\r\n }, 10000);\r\n};\r\n\r\n// Open a modal to get user email input\r\nexport const getUserEmailInputModal = (\r\n title: string\r\n): Promise<string | undefined> => {\r\n return new Promise((resolve) => {\r\n let modalContainer = document.getElementById(\r\n \"confirmModal\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"confirmModal\";\r\n }\r\n let emailValue: string | undefined;\r\n\r\n const modalContent = `\r\n <section id=\"myModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <svg width=\"800px\" height=\"800px\" viewBox=\"-0.5 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" \r\n class=\"ih_get_user_email_modal_close_btn\" onclick=\"window.handleCleanUpInput()\">\r\n <path d=\"M3 21.32L21 3.32001\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M3 3.32001L21 21.32\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <h4>Enrol for ${title}</h4>\r\n <p>Enter a valid Email Address</p>\r\n <input type=\"email\" name=\"email\" id=\"userInput\" oninput=\"window.handleInput(this)\" />\r\n <div class=\"action_btn\">\r\n <button type=\"button\" disabled id=\"proceedBtn\" class=\"delete_btn important-btn\" onclick=\"window.handleConfirm()\">Proceed</button>\r\n </div>\r\n </div>\r\n </section>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n const proceedBtn = document.getElementById(\r\n \"proceedBtn\"\r\n ) as HTMLButtonElement | null;\r\n\r\n window.handleInput = (e: HTMLInputElement) => {\r\n if (isValidEmail(e.value)) {\r\n if (proceedBtn) proceedBtn.disabled = false;\r\n emailValue = e.value;\r\n } else {\r\n if (proceedBtn) proceedBtn.disabled = true;\r\n emailValue = undefined;\r\n }\r\n };\r\n\r\n const cleanup = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n window.handleConfirm = () => {\r\n if (isValidEmail(emailValue)) {\r\n cleanup();\r\n resolve(emailValue);\r\n } else {\r\n openToast(\"You need to enter a valid email!\", 400);\r\n }\r\n };\r\n\r\n window.handleCleanUpInput = () => {\r\n cleanup();\r\n resolve(undefined);\r\n };\r\n });\r\n};\r\n"],"names":["isValidEmail","input","length","test","openConfirmModal","message","flag","arguments","undefined","Promise","resolve","modalContainer","document","getElementById","createElement","id","modalContent","concat","innerHTML","body","appendChild","cleanup","_modalContainer","remove","window","handleCancel","console","log","handleConfirm","addEventListener","e","target","openToast","status","msg","iconSvg","cleanupToast","_modalContainer2","setTimeout","getUserEmailInputModal","title","emailValue","proceedBtn","handleInput","value","disabled","_modalContainer3","handleCleanUpInput"],"mappings":"AAMA,IAAMA,EAAe,SAACC,GACpB,IAAKA,GAASA,EAAMC,OAAS,EAC3B,OAAO,EAGT,MADmB,6BACDC,KAAKF,EACzB,EAcaG,EAAmB,SAC9BC,GAEoB,IADpBC,EAAAC,UAAAL,OAAA,QAAAM,IAAAD,UAAA,IAAAA,UAAA,GAEA,OAAO,IAAIE,SAAQ,SAACC,GAClB,IAAIC,EAAiBC,SAASC,eAC5B,gBAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,gBAGtB,IAAMC,oLAAYC,OAIAX,EAAO,wBAA0B,gBAAeW,oBAAAA,OAExDX,EACI,wDACA,2BACN,mCAAAW,OAGAZ,GACA,4FAQP,yVAEDM,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1B,IAAMU,EAAU,WAAK,IAAAC,EACLA,QAAdA,EAAAX,aAAcW,GAAdA,EAAgBC,UAGlBC,OAAOC,aAAe,WACpBJ,IACAX,GAAQ,GACRgB,QAAQC,IAAI,KAGdH,OAAOI,cAAgB,WACrBP,IACAX,GAAQ,IAGVC,EAAekB,iBAAiB,SAAS,SAACC,GACxC,IAAMC,EAASD,EAAEC,OACC,YAAdA,EAAOhB,IAAkC,iBAAdgB,EAAOhB,IACpCM,GAEJ,GACF,GACF,EAGaW,EAAY,SACvB3B,GAEQ,IADR4B,EAAA1B,UAAAL,OAAA,QAAAM,IAAAD,UAAA,GAAAA,UAAA,GAAqB,IAEf2B,EACO,MAAXD,GAA6B,MAAXA,EACd,gCACW,MAAXA,EACA,+CACA,2CAEAE,EACO,MAAXF,GAA6B,MAAXA,EACd,qPACA,wSAEFtB,EAAiBC,SAASC,eAC5B,aAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,aAGtB,IAAMC,EAAYC,yJAAAA,OAKNkB,8BAAOlB,OAEI,MAAXgB,GAA6B,MAAXA,EAAiB,SAAW,UAChDhB,sBAAAA,OACIZ,GAAW6B,EAWxB,kiBAEDvB,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1Ba,OAAOY,aAAe,WAAK,IAAAC,EACXA,QAAdA,EAAA1B,aAAc0B,GAAdA,EAAgBd,UAGlBe,YAAW,WACTd,OAAOY,cACR,GAAE,IACL,EAGaG,EAAyB,SACpCC,GAEA,OAAO,IAAI/B,SAAQ,SAACC,GAClB,IAOI+B,EAPA9B,EAAiBC,SAASC,eAC5B,gBAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,gBAItB,IAAMC,EAAY,kmBAAAC,OAQIuB,EAQrB,qYAED7B,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1B,IAAM+B,EAAa9B,SAASC,eAC1B,cAGFW,OAAOmB,YAAc,SAACb,GAChB9B,EAAa8B,EAAEc,QACbF,IAAYA,EAAWG,UAAW,GACtCJ,EAAaX,EAAEc,QAEXF,IAAYA,EAAWG,UAAW,GACtCJ,OAAajC,IAIjB,IAAMa,EAAU,WAAK,IAAAyB,EACLA,QAAdA,EAAAnC,aAAcmC,GAAdA,EAAgBvB,UAGlBC,OAAOI,cAAgB,WACjB5B,EAAayC,IACfpB,IACAX,EAAQ+B,IAERT,EAAU,mCAAoC,MAIlDR,OAAOuB,mBAAqB,WAC1B1B,IACAX,OAAQF,GAEZ,GACF"}
1
+ {"version":3,"file":"modals.js","sources":["../../../../../src/components/lib/modals/modals.ts"],"sourcesContent":["import React from \"react\";\r\n\r\n// Type for status codes\r\ntype StatusCode = 200 | 201 | 400 | 500 | number;\r\n\r\n// Utility function to validate email\r\nconst isValidEmail = (input: string | undefined): boolean => {\r\n if (!input || input.length < 3) {\r\n return false;\r\n }\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(input);\r\n};\r\n\r\n// Declare global window interface extensions for event handlers\r\ndeclare global {\r\n interface Window {\r\n handleCancel: () => void;\r\n handleConfirm: () => void;\r\n cleanupToast: () => void;\r\n handleInput: (e: HTMLInputElement) => void;\r\n handleCleanUpInput: () => void;\r\n }\r\n}\r\n\r\n// Open a confirmation modal\r\nexport const openConfirmModal = (\r\n message: string,\r\n flag: boolean = false\r\n): Promise<boolean> => {\r\n return new Promise((resolve) => {\r\n let modalContainer = document.getElementById(\r\n \"confirmModal\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"confirmModal\";\r\n }\r\n\r\n const modalContent = `\r\n <section id=\"myModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <span class=\"close\" onclick=\"window.handleCancel()\">×</span>\r\n <p class=\"${flag ? \"something_bad_flagged\" : \"something_bad\"}\">\r\n ${\r\n flag\r\n ? \"Unexpected things will happen if you don’t read this!\"\r\n : \"You are about to submit!\"\r\n }\r\n </p>\r\n <p>${\r\n message ||\r\n \"Carefully read the instructions before making a decision. Ready? Hit the continue button!\"\r\n }</p>\r\n <div class=\"mt-4\">\r\n <button type=\"button\" class=\"danger-btn d-inline-block\" onclick=\"window.handleCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"important-btn confirm-btn ihub-bg-dark-cyan\" onclick=\"window.handleConfirm()\">Ok</button>\r\n </div>\r\n </div>\r\n </section>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n const cleanup = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n window.handleCancel = () => {\r\n cleanup();\r\n resolve(false);\r\n console.log(\"\");\r\n };\r\n\r\n window.handleConfirm = () => {\r\n cleanup();\r\n resolve(true);\r\n };\r\n\r\n modalContainer.addEventListener(\"click\", (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n if (target.id === \"myModal\" || target.id === \"confirmModal\") {\r\n cleanup();\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Open a toast notification\r\nexport const openToast = (\r\n message?: React.ReactDOM | string,\r\n status: StatusCode = 200\r\n): void => {\r\n const msg =\r\n status === 200 || status === 201\r\n ? \"Awesome! The update was made.\"\r\n : status === 500\r\n ? \"Sorry, the server can't process your request\"\r\n : \"Hmmm..., Something went wrong. Try again\";\r\n\r\n const iconSvg =\r\n status === 200 || status === 201\r\n ? '<svg viewBox=\"0 0 24 24\" style=\"color: var(--ViridianGreen); width:24px; height:24px;\"><path fill=\"currentColor\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>'\r\n : '<svg viewBox=\"0 0 24 24\" style=\"color: var(--Danger); width:24px; height:24px;\"><path fill=\"currentColor\" d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>';\r\n\r\n let modalContainer = document.getElementById(\r\n \"openToast\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"openToast\";\r\n }\r\n\r\n const modalContent = `\r\n <div class=\"toast-wrapper\">\r\n <div class=\"slide-in-top\">\r\n <div class=\"align-text\">\r\n <div class=\"valid_btn\">\r\n ${iconSvg}\r\n <p class=\"${\r\n status === 200 || status === 201 ? \"isDone\" : \"isError\"\r\n }\">\r\n ${message || msg}\r\n </p>\r\n </div>\r\n </div>\r\n <svg width=\"800px\" height=\"800px\" viewBox=\"-0.5 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" \r\n class=\"close-btn\" onclick=\"window.cleanupToast()\">\r\n <path d=\"M3 21.32L21 3.32001\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M3 3.32001L21 21.32\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n window.cleanupToast = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n setTimeout(() => {\r\n window.cleanupToast();\r\n }, 10000);\r\n};\r\n\r\n// Open a modal to get user email input\r\nexport const getUserEmailInputModal = (\r\n title: string\r\n): Promise<string | undefined> => {\r\n return new Promise((resolve) => {\r\n let modalContainer = document.getElementById(\r\n \"confirmModal\"\r\n ) as HTMLDivElement | null;\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = \"confirmModal\";\r\n }\r\n let emailValue: string | undefined;\r\n\r\n const modalContent = `\r\n <section id=\"myModal\" class=\"modal\">\r\n <div class=\"modal-content\">\r\n <svg width=\"800px\" height=\"800px\" viewBox=\"-0.5 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" \r\n class=\"ih_get_user_email_modal_close_btn\" onclick=\"window.handleCleanUpInput()\">\r\n <path d=\"M3 21.32L21 3.32001\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M3 3.32001L21 21.32\" stroke=\"var(--Gunmetal)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <h4>Enrol for ${title}</h4>\r\n <p>Enter a valid Email Address</p>\r\n <input type=\"email\" name=\"email\" id=\"userInput\" oninput=\"window.handleInput(this)\" />\r\n <div class=\"action_btn\">\r\n <button type=\"button\" disabled id=\"proceedBtn\" class=\"delete_btn important-btn\" onclick=\"window.handleConfirm()\">Proceed</button>\r\n </div>\r\n </div>\r\n </section>\r\n `;\r\n\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n const proceedBtn = document.getElementById(\r\n \"proceedBtn\"\r\n ) as HTMLButtonElement | null;\r\n\r\n window.handleInput = (e: HTMLInputElement) => {\r\n if (isValidEmail(e.value)) {\r\n if (proceedBtn) proceedBtn.disabled = false;\r\n emailValue = e.value;\r\n } else {\r\n if (proceedBtn) proceedBtn.disabled = true;\r\n emailValue = undefined;\r\n }\r\n };\r\n\r\n const cleanup = () => {\r\n modalContainer?.remove();\r\n };\r\n\r\n window.handleConfirm = () => {\r\n if (isValidEmail(emailValue)) {\r\n cleanup();\r\n resolve(emailValue);\r\n } else {\r\n openToast(\"You need to enter a valid email!\", 400);\r\n }\r\n };\r\n\r\n window.handleCleanUpInput = () => {\r\n cleanup();\r\n resolve(undefined);\r\n };\r\n });\r\n};\r\n"],"names":["isValidEmail","input","length","test","openToast","message","status","arguments","undefined","msg","iconSvg","modalContainer","document","getElementById","createElement","id","modalContent","concat","innerHTML","body","appendChild","window","cleanupToast","_modalContainer2","remove","setTimeout","title","Promise","resolve","emailValue","proceedBtn","handleInput","e","value","disabled","cleanup","_modalContainer3","handleConfirm","handleCleanUpInput","flag","_modalContainer","handleCancel","console","log","addEventListener","target"],"mappings":"oEAMA,IAAMA,EAAe,SAACC,GACpB,IAAKA,GAASA,EAAMC,OAAS,EAC3B,OAAO,EAGT,MADmB,6BACDC,KAAKF,EACzB,EA8EaG,EAAY,SACvBC,GAEQ,IADRC,EAAAC,UAAAL,OAAA,QAAAM,IAAAD,UAAA,GAAAA,UAAA,GAAqB,IAEfE,EACO,MAAXH,GAA6B,MAAXA,EACd,gCACW,MAAXA,EACA,+CACA,2CAEAI,EACO,MAAXJ,GAA6B,MAAXA,EACd,qPACA,wSAEFK,EAAiBC,SAASC,eAC5B,aAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,aAGtB,IAAMC,EAAYC,yJAAAA,OAKNP,8BAAOO,OAEI,MAAXX,GAA6B,MAAXA,EAAiB,SAAW,UAChDW,sBAAAA,OACIZ,GAAWI,EAWxB,kiBAEDE,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1BU,OAAOC,aAAe,WAAK,IAAAC,EACXA,QAAdA,EAAAZ,aAAcY,GAAdA,EAAgBC,UAGlBC,YAAW,WACTJ,OAAOC,cACR,GAAE,IACL,iCAGsC,SACpCI,GAEA,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAOIC,EAPAlB,EAAiBC,SAASC,eAC5B,gBAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,gBAItB,IAAMC,EAAY,kmBAAAC,OAQIS,EAQrB,qYAEDf,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1B,IAAMmB,EAAalB,SAASC,eAC1B,cAGFQ,OAAOU,YAAc,SAACC,GAChBhC,EAAagC,EAAEC,QACbH,IAAYA,EAAWI,UAAW,GACtCL,EAAaG,EAAEC,QAEXH,IAAYA,EAAWI,UAAW,GACtCL,OAAarB,IAIjB,IAAM2B,EAAU,WAAK,IAAAC,EACLA,QAAdA,EAAAzB,aAAcyB,GAAdA,EAAgBZ,UAGlBH,OAAOgB,cAAgB,WACjBrC,EAAa6B,IACfM,IACAP,EAAQC,IAERzB,EAAU,mCAAoC,MAIlDiB,OAAOiB,mBAAqB,WAC1BH,IACAP,OAAQpB,GAEZ,GACF,2BA7LgC,SAC9BH,GAEoB,IADpBkC,EAAAhC,UAAAL,OAAA,QAAAM,IAAAD,UAAA,IAAAA,UAAA,GAEA,OAAO,IAAIoB,SAAQ,SAACC,GAClB,IAAIjB,EAAiBC,SAASC,eAC5B,gBAEGF,KACHA,EAAiBC,SAASE,cAAc,QACzBC,GAAK,gBAGtB,IAAMC,oLAAYC,OAIAsB,EAAO,wBAA0B,gBAAetB,oBAAAA,OAExDsB,EACI,wDACA,2BACN,mCAAAtB,OAGAZ,GACA,4FAQP,yVAEDM,EAAeO,UAAYF,EAC3BJ,SAASO,KAAKC,YAAYT,GAE1B,IAAMwB,EAAU,WAAK,IAAAK,EACLA,QAAdA,EAAA7B,aAAc6B,GAAdA,EAAgBhB,UAGlBH,OAAOoB,aAAe,WACpBN,IACAP,GAAQ,GACRc,QAAQC,IAAI,KAGdtB,OAAOgB,cAAgB,WACrBF,IACAP,GAAQ,IAGVjB,EAAeiC,iBAAiB,SAAS,SAACZ,GACxC,IAAMa,EAASb,EAAEa,OACC,YAAdA,EAAO9B,IAAkC,iBAAd8B,EAAO9B,IACpCoB,GAEJ,GACF,GACF"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as n,regeneratorRuntime as e}from"../../../../_virtual/_rollupPluginBabelHelpers.js";import{reqOptions as t}from"../helpFunction.js";import{openToast as i}from"./modals.js";var a=function(a,o,c){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return new Promise((function(l){var s="ihub-confirm-modal",u=[],d=function(n,e,t){var i=function(n){return t(n)};n.addEventListener(e,i),u.push({element:n,type:e,handler:i})},h=function(){u.forEach((function(n){var e=n.element,t=n.type,i=n.handler;e.removeEventListener(t,i)}));var n=document.getElementById(s);if(n){for(var e=0,t=["handleInput","handleCancel","handleConfirm"];e<t.length;e++){var i=t[e];window[i]&&delete window[i]}n.remove()}},b=function(){var r=n(e().mark((function n(){var r,s,u;return e().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,r=t("DELETE",null,o),n.next=4,fetch(c,r);case 4:if(204!==(s=n.sent).status){n.next=12;break}return i("".concat(a," was successfully deleted.")),h(),l(!0),n.abrupt("return");case 12:if(401!==s.status){n.next=16;break}i("You don't have permission to delete this item.",401),n.next=20;break;case 16:return n.next=18,s.json();case 18:u=n.sent,i(u.detail||"Couldn't delete the item. You can report the issue with the feedback button.",s.status);case 20:n.next=25;break;case 22:n.prev=22,n.t0=n.catch(0),i("Error deleting item: ".concat(n.t0 instanceof Error?n.t0.message:"Unknown error"),500);case 25:l(!1);case 26:case"end":return n.stop()}}),n,null,[[0,22]])})));return function(){return r.apply(this,arguments)}}();if(r){var p='\n <div class="ihub-copy-status ihub-copy-success">\n <svg class="ihub-icon" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="CheckIcon">\n <path d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path>\n </svg>\n <span>Copied!</span>\n </div>\n '.trim(),m='\n <div class="ihub-copy-status">\n <svg class="ihub-icon" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="ContentCopyIcon">\n <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"></path>\n </svg>\n <span class="ihub-fs-sm">Copy Text</span>\n </div>\n '.trim(),f=document.getElementById(s);f||((f=document.createElement("div")).id=s);var v='\n <section class="ihub-modal ihub-modal-open" aria-labelledby="delete-modal-title" role="dialog" aria-modal="true">\n <div class="ihub-modal-content">\n <h4 id="delete-modal-title" class="ihub-modal-title">Delete confirmation</h4>\n <p class="ihub-warning-text">\n Unexpected bad things will happen if you don\'t read this!\n </p>\n <p class="ihub-modal-description">\n This action cannot be undone. This will permanently delete the\n <strong>'.concat(a,'</strong> repository, feedbacks, schedules, and remove all team\n associations.\n </p>\n \n <div class="ihub-confirm-row">\n <p class="ihub-confirm-instruction">Please type <strong class="ihub-confirm-value">').concat(a,'</strong> to confirm.</p>\n <button type="button" id="ihub-copy-btn" class="ihub-copy-btn" aria-label="Copy confirmation text">\n ').concat(m,'\n </button>\n </div>\n \n <div class="ihub-input-wrapper">\n <input \n type="text" \n id="ihub-delete-input" \n class="ihub-delete-input" \n aria-label="Confirmation text"\n placeholder="Type the text to confirm deletion"\n />\n </div>\n \n <div class="ihub-modal-actions">\n <button \n type="button" \n id="ihub-cancel-btn" \n class="ihub-cancel-btn"\n aria-label="Cancel deletion"\n >\n Cancel\n </button>\n <button \n type="button" \n disabled \n id="ihub-delete-btn" \n class="ihub-delete-btn"\n aria-label="Confirm deletion"\n >\n Delete\n </button>\n </div>\n </div>\n </section>\n ').trim();f.innerHTML=v,document.body.appendChild(f);var y=document.getElementById("ihub-copy-btn"),g=document.getElementById("ihub-delete-btn"),w=document.getElementById("ihub-cancel-btn"),x=document.getElementById("ihub-delete-input"),E=document.querySelector(".ihub-modal");if(y){d(y,"click",(function(){navigator.clipboard.writeText(a).then((function(){y&&(y.innerHTML=p,setTimeout((function(){y&&(y.innerHTML=m)}),2e3))})).catch((function(n){return console.error("Unable to copy to clipboard",n)}))}))}if(x){d(x,"input",(function(n){var e=n.target;g&&(g.disabled=e.value!==a)}))}if(w){d(w,"click",(function(){h(),l(!1)}))}if(g){d(g,"click",(function(){b()}))}if(E){d(E,"click",(function(n){n.target===E&&(h(),l(!1))}))}d(document,"keydown",(function(n){"Escape"===n.key&&(h(),l(!1))}))}else b()}))};export{a as openConfirmDelete};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../_virtual/_rollupPluginBabelHelpers.js"),n=require("../helpFunction.js"),t=require("./modals.js");exports.openConfirmDelete=function(i,a,o){var c=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return new Promise((function(r){var s="ihub-confirm-modal",l=[],u=function(e,n,t){var i=function(e){return t(e)};e.addEventListener(n,i),l.push({element:e,type:n,handler:i})},d=function(){l.forEach((function(e){var n=e.element,t=e.type,i=e.handler;n.removeEventListener(t,i)}));var e=document.getElementById(s);if(e){for(var n=0,t=["handleInput","handleCancel","handleConfirm"];n<t.length;n++){var i=t[n];window[i]&&delete window[i]}e.remove()}},p=function(){var c=e.asyncToGenerator(e.regeneratorRuntime().mark((function c(){var s,l,u;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,s=n.reqOptions("DELETE",null,a),e.next=4,fetch(o,s);case 4:if(204!==(l=e.sent).status){e.next=12;break}return t.openToast("".concat(i," was successfully deleted.")),d(),r(!0),e.abrupt("return");case 12:if(401!==l.status){e.next=16;break}t.openToast("You don't have permission to delete this item.",401),e.next=20;break;case 16:return e.next=18,l.json();case 18:u=e.sent,t.openToast(u.detail||"Couldn't delete the item. You can report the issue with the feedback button.",l.status);case 20:e.next=25;break;case 22:e.prev=22,e.t0=e.catch(0),t.openToast("Error deleting item: ".concat(e.t0 instanceof Error?e.t0.message:"Unknown error"),500);case 25:r(!1);case 26:case"end":return e.stop()}}),c,null,[[0,22]])})));return function(){return c.apply(this,arguments)}}();if(c){var h='\n <div class="ihub-copy-status ihub-copy-success">\n <svg class="ihub-icon" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="CheckIcon">\n <path d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path>\n </svg>\n <span>Copied!</span>\n </div>\n '.trim(),b='\n <div class="ihub-copy-status">\n <svg class="ihub-icon" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="ContentCopyIcon">\n <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"></path>\n </svg>\n <span class="ihub-fs-sm">Copy Text</span>\n </div>\n '.trim(),m=document.getElementById(s);m||((m=document.createElement("div")).id=s);var f='\n <section class="ihub-modal ihub-modal-open" aria-labelledby="delete-modal-title" role="dialog" aria-modal="true">\n <div class="ihub-modal-content">\n <h4 id="delete-modal-title" class="ihub-modal-title">Delete confirmation</h4>\n <p class="ihub-warning-text">\n Unexpected bad things will happen if you don\'t read this!\n </p>\n <p class="ihub-modal-description">\n This action cannot be undone. This will permanently delete the\n <strong>'.concat(i,'</strong> repository, feedbacks, schedules, and remove all team\n associations.\n </p>\n \n <div class="ihub-confirm-row">\n <p class="ihub-confirm-instruction">Please type <strong class="ihub-confirm-value">').concat(i,'</strong> to confirm.</p>\n <button type="button" id="ihub-copy-btn" class="ihub-copy-btn" aria-label="Copy confirmation text">\n ').concat(b,'\n </button>\n </div>\n \n <div class="ihub-input-wrapper">\n <input \n type="text" \n id="ihub-delete-input" \n class="ihub-delete-input" \n aria-label="Confirmation text"\n placeholder="Type the text to confirm deletion"\n />\n </div>\n \n <div class="ihub-modal-actions">\n <button \n type="button" \n id="ihub-cancel-btn" \n class="ihub-cancel-btn"\n aria-label="Cancel deletion"\n >\n Cancel\n </button>\n <button \n type="button" \n disabled \n id="ihub-delete-btn" \n class="ihub-delete-btn"\n aria-label="Confirm deletion"\n >\n Delete\n </button>\n </div>\n </div>\n </section>\n ').trim();m.innerHTML=f,document.body.appendChild(m);var v=document.getElementById("ihub-copy-btn"),y=document.getElementById("ihub-delete-btn"),g=document.getElementById("ihub-cancel-btn"),w=document.getElementById("ihub-delete-input"),x=document.querySelector(".ihub-modal");if(v){u(v,"click",(function(){navigator.clipboard.writeText(i).then((function(){v&&(v.innerHTML=h,setTimeout((function(){v&&(v.innerHTML=b)}),2e3))})).catch((function(e){return console.error("Unable to copy to clipboard",e)}))}))}if(w){u(w,"input",(function(e){var n=e.target;y&&(y.disabled=n.value!==i)}))}if(g){u(g,"click",(function(){d(),r(!1)}))}if(y){u(y,"click",(function(){p()}))}if(x){u(x,"click",(function(e){e.target===x&&(d(),r(!1))}))}u(document,"keydown",(function(e){"Escape"===e.key&&(d(),r(!1))}))}else p()}))};
2
2
  //# sourceMappingURL=openConfirmDelete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openConfirmDelete.js","sources":["../../../../../src/components/lib/modals/openConfirmDelete.ts"],"sourcesContent":["import { reqOptions } from \"../helpFunction\";\r\nimport { openToast } from \"./modals\";\r\n\r\n/**\r\n * API response interface for error handling\r\n */\r\ninterface ApiErrorResponse {\r\n detail?: string;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Opens a confirmation modal for deleting an item\r\n * @example\r\n *\r\n * const handleDelete = async (option) => {\r\n * const endpoint = `${API_HOST_URL}assessments/${handle}/assessment-link-tree-destroy/${option.id}/`;\r\n * const confirm = await openConfirmDelete(\r\n * option.title,\r\n * token,\r\n * endpoint,\r\n * true,\r\n * reqOptions,\r\n * );\r\n *\r\n * if (confirm) {\r\n * // Update objects\r\n * const newObjects = data.filter((i) => i.id !== option.id);\r\n * setData(newObjects);\r\n * }\r\n * };\r\n *\r\n * @property {string} message The name of the item to be deleted\r\n * @property {string} token Authentication token for the API request\r\n * @property {string} url API endpoint for deletion\r\n * @property {boolean} pop Whether to show a popup confirmation (default: true)\r\n * @returns Promise that resolves to boolean indicating success or failure\r\n */\r\nexport const openConfirmDelete = (\r\n message: string,\r\n token: string,\r\n url: string,\r\n pop: boolean = true\r\n): Promise<boolean> => {\r\n return new Promise<boolean>((resolve) => {\r\n // Create modal element reference ID for cleanup\r\n const modalId = \"ihub-confirm-modal\";\r\n\r\n // Track event listeners for cleanup\r\n const listeners: Array<{\r\n element: HTMLElement | Document;\r\n type: string;\r\n handler: EventListenerOrEventListenerObject;\r\n }> = [];\r\n\r\n /**\r\n * Helper function to add event listeners that will be tracked for cleanup\r\n */\r\n const addTrackedListener = <T extends Event>(\r\n element: HTMLElement | Document,\r\n type: string,\r\n handler: (event: T) => void\r\n ): void => {\r\n const wrappedHandler = (event: Event) => handler(event as T);\r\n element.addEventListener(type, wrappedHandler);\r\n listeners.push({ element, type, handler: wrappedHandler });\r\n };\r\n\r\n /**\r\n * Removes the modal from the DOM and cleans up event listeners\r\n */\r\n const cleanup = (): void => {\r\n // Clean up all tracked event listeners\r\n listeners.forEach(({ element, type, handler }) => {\r\n element.removeEventListener(type, handler);\r\n });\r\n\r\n // Remove the modal element\r\n const modalElement = document.getElementById(modalId);\r\n if (modalElement) {\r\n // Remove global event handlers before removing the element\r\n for (const handlerName of [\r\n \"handleInput\",\r\n \"handleCancel\",\r\n \"handleConfirm\",\r\n ]) {\r\n if ((window as any)[handlerName]) {\r\n delete (window as any)[handlerName];\r\n }\r\n }\r\n modalElement.remove();\r\n }\r\n };\r\n\r\n /**\r\n * Handles the deletion API request\r\n */\r\n const handleSubmit = async (): Promise<void> => {\r\n try {\r\n // Delete the object from the DB if user confirms\r\n const requestOptions = reqOptions(\"DELETE\", null, token);\r\n const request = await fetch(url, requestOptions);\r\n\r\n if (request.status === 204) {\r\n openToast(`${message} was successfully deleted.`);\r\n cleanup();\r\n resolve(true);\r\n return;\r\n } else if (request.status === 401) {\r\n openToast(\"You don't have permission to delete this item.\", 401);\r\n } else {\r\n const res = (await request.json()) as ApiErrorResponse;\r\n openToast(\r\n res.detail ||\r\n \"Couldn't delete the item. You can report the issue with the feedback button.\",\r\n request.status\r\n );\r\n }\r\n } catch (error) {\r\n openToast(\r\n `Error deleting item: ${\r\n error instanceof Error ? error.message : \"Unknown error\"\r\n }`,\r\n 500\r\n );\r\n }\r\n\r\n resolve(false);\r\n };\r\n\r\n // If no popup needed, just submit and return\r\n if (!pop) {\r\n handleSubmit();\r\n return;\r\n }\r\n\r\n // Templates for the copy button states\r\n const copiedState = `\r\n <div class=\"ihub-copy-status ihub-copy-success\">\r\n <svg class=\"ihub-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"CheckIcon\">\r\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"></path>\r\n </svg>\r\n <span>Copied!</span>\r\n </div>\r\n `.trim();\r\n\r\n const unCopiedState = `\r\n <div class=\"ihub-copy-status\">\r\n <svg class=\"ihub-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"ContentCopyIcon\">\r\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"></path>\r\n </svg>\r\n <span class=\"ihub-fs-sm\">Copy Text</span>\r\n </div>\r\n `.trim();\r\n\r\n // Create or get the modal container\r\n let modalContainer = document.getElementById(modalId);\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = modalId;\r\n }\r\n\r\n // Create modal content with proper ihub- prefixed classes\r\n const modalContent = `\r\n <section class=\"ihub-modal ihub-modal-open\" aria-labelledby=\"delete-modal-title\" role=\"dialog\" aria-modal=\"true\">\r\n <div class=\"ihub-modal-content\">\r\n <h4 id=\"delete-modal-title\" class=\"ihub-modal-title\">Delete confirmation</h4>\r\n <p class=\"ihub-warning-text\">\r\n Unexpected bad things will happen if you don't read this!\r\n </p>\r\n <p class=\"ihub-modal-description\">\r\n This action cannot be undone. This will permanently delete the\r\n <strong>${message}</strong> repository, feedbacks, schedules, and remove all team\r\n associations.\r\n </p>\r\n \r\n <div class=\"ihub-confirm-row\">\r\n <p class=\"ihub-confirm-instruction\">Please type <strong class=\"ihub-confirm-value\">${message}</strong> to confirm.</p>\r\n <button type=\"button\" id=\"ihub-copy-btn\" class=\"ihub-copy-btn\" aria-label=\"Copy confirmation text\">\r\n ${unCopiedState}\r\n </button>\r\n </div>\r\n \r\n <div class=\"ihub-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n id=\"ihub-delete-input\" \r\n class=\"ihub-delete-input\" \r\n aria-label=\"Confirmation text\"\r\n placeholder=\"Type the text to confirm deletion\"\r\n />\r\n </div>\r\n \r\n <div class=\"ihub-modal-actions\">\r\n <button \r\n type=\"button\" \r\n id=\"ihub-cancel-btn\" \r\n class=\"ihub-cancel-btn\"\r\n aria-label=\"Cancel deletion\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"button\" \r\n disabled \r\n id=\"ihub-delete-btn\" \r\n class=\"ihub-delete-btn\"\r\n aria-label=\"Confirm deletion\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n `.trim();\r\n\r\n // Set modal content and add to document\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n // Get DOM elements\r\n const copyBtn = document.getElementById(\"ihub-copy-btn\");\r\n const deleteBtn = document.getElementById(\r\n \"ihub-delete-btn\"\r\n ) as HTMLButtonElement | null;\r\n const cancelBtn = document.getElementById(\"ihub-cancel-btn\");\r\n const deleteInput = document.getElementById(\r\n \"ihub-delete-input\"\r\n ) as HTMLInputElement | null;\r\n const modalElement = document.querySelector(\".ihub-modal\");\r\n\r\n // Set up copy button functionality\r\n if (copyBtn) {\r\n const copyClickHandler = () => {\r\n navigator.clipboard\r\n .writeText(message)\r\n .then(() => {\r\n if (copyBtn) {\r\n copyBtn.innerHTML = copiedState;\r\n setTimeout(() => {\r\n if (copyBtn) {\r\n copyBtn.innerHTML = unCopiedState;\r\n }\r\n }, 2000);\r\n }\r\n })\r\n .catch((err) => console.error(\"Unable to copy to clipboard\", err));\r\n };\r\n\r\n addTrackedListener(copyBtn, \"click\", copyClickHandler);\r\n }\r\n\r\n // Set up input validation\r\n if (deleteInput) {\r\n const inputHandler = (e: Event) => {\r\n const input = e.target as HTMLInputElement;\r\n if (deleteBtn) {\r\n deleteBtn.disabled = input.value !== message;\r\n }\r\n };\r\n\r\n addTrackedListener(deleteInput, \"input\", inputHandler);\r\n }\r\n\r\n // Set up cancel button\r\n if (cancelBtn) {\r\n const cancelHandler = () => {\r\n cleanup();\r\n resolve(false);\r\n };\r\n\r\n addTrackedListener(cancelBtn, \"click\", cancelHandler);\r\n }\r\n\r\n // Set up delete button\r\n if (deleteBtn) {\r\n const deleteHandler = () => {\r\n handleSubmit();\r\n };\r\n\r\n addTrackedListener(deleteBtn, \"click\", deleteHandler);\r\n }\r\n\r\n // Close modal when clicking outside (only if clicking directly on the modal background)\r\n if (modalElement) {\r\n const modalClickHandler = (e: MouseEvent) => {\r\n if (e.target === modalElement) {\r\n cleanup();\r\n resolve(false);\r\n }\r\n };\r\n\r\n addTrackedListener<MouseEvent>(\r\n modalElement as HTMLElement,\r\n \"click\",\r\n modalClickHandler\r\n );\r\n }\r\n\r\n // Handle escape key to cancel\r\n const handleEscapeKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n cleanup();\r\n resolve(false);\r\n }\r\n };\r\n\r\n // Add escape key listener to our tracked listeners\r\n addTrackedListener<KeyboardEvent>(document, \"keydown\", handleEscapeKey);\r\n });\r\n};\r\n"],"names":["openConfirmDelete","message","token","url","pop","arguments","length","undefined","Promise","resolve","modalId","listeners","addTrackedListener","element","type","handler","wrappedHandler","event","addEventListener","push","cleanup","forEach","_ref","removeEventListener","modalElement","document","getElementById","_i","_arr","handlerName","window","remove","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestOptions","request","res","wrap","_context","prev","next","reqOptions","fetch","sent","status","openToast","concat","abrupt","json","detail","t0","Error","stop","apply","this","copiedState","trim","unCopiedState","modalContainer","createElement","id","modalContent","innerHTML","body","appendChild","copyBtn","deleteBtn","cancelBtn","deleteInput","querySelector","navigator","clipboard","writeText","then","setTimeout","err","console","error","e","input","target","disabled","value","key"],"mappings":"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"}
1
+ {"version":3,"file":"openConfirmDelete.js","sources":["../../../../../src/components/lib/modals/openConfirmDelete.ts"],"sourcesContent":["import { reqOptions } from \"../helpFunction\";\r\nimport { openToast } from \"./modals\";\r\n\r\n/**\r\n * API response interface for error handling\r\n */\r\ninterface ApiErrorResponse {\r\n detail?: string;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Opens a confirmation modal for deleting an item\r\n * @example\r\n *\r\n * const handleDelete = async (option) => {\r\n * const endpoint = `${API_HOST_URL}assessments/${handle}/assessment-link-tree-destroy/${option.id}/`;\r\n * const confirm = await openConfirmDelete(\r\n * option.title,\r\n * token,\r\n * endpoint,\r\n * true,\r\n * reqOptions,\r\n * );\r\n *\r\n * if (confirm) {\r\n * // Update objects\r\n * const newObjects = data.filter((i) => i.id !== option.id);\r\n * setData(newObjects);\r\n * }\r\n * };\r\n *\r\n * @property {string} message The name of the item to be deleted\r\n * @property {string} token Authentication token for the API request\r\n * @property {string} url API endpoint for deletion\r\n * @property {boolean} pop Whether to show a popup confirmation (default: true)\r\n * @returns Promise that resolves to boolean indicating success or failure\r\n */\r\nexport const openConfirmDelete = (\r\n message: string,\r\n token: string,\r\n url: string,\r\n pop: boolean = true\r\n): Promise<boolean> => {\r\n return new Promise<boolean>((resolve) => {\r\n // Create modal element reference ID for cleanup\r\n const modalId = \"ihub-confirm-modal\";\r\n\r\n // Track event listeners for cleanup\r\n const listeners: Array<{\r\n element: HTMLElement | Document;\r\n type: string;\r\n handler: EventListenerOrEventListenerObject;\r\n }> = [];\r\n\r\n /**\r\n * Helper function to add event listeners that will be tracked for cleanup\r\n */\r\n const addTrackedListener = <T extends Event>(\r\n element: HTMLElement | Document,\r\n type: string,\r\n handler: (event: T) => void\r\n ): void => {\r\n const wrappedHandler = (event: Event) => handler(event as T);\r\n element.addEventListener(type, wrappedHandler);\r\n listeners.push({ element, type, handler: wrappedHandler });\r\n };\r\n\r\n /**\r\n * Removes the modal from the DOM and cleans up event listeners\r\n */\r\n const cleanup = (): void => {\r\n // Clean up all tracked event listeners\r\n listeners.forEach(({ element, type, handler }) => {\r\n element.removeEventListener(type, handler);\r\n });\r\n\r\n // Remove the modal element\r\n const modalElement = document.getElementById(modalId);\r\n if (modalElement) {\r\n // Remove global event handlers before removing the element\r\n for (const handlerName of [\r\n \"handleInput\",\r\n \"handleCancel\",\r\n \"handleConfirm\",\r\n ]) {\r\n if ((window as any)[handlerName]) {\r\n delete (window as any)[handlerName];\r\n }\r\n }\r\n modalElement.remove();\r\n }\r\n };\r\n\r\n /**\r\n * Handles the deletion API request\r\n */\r\n const handleSubmit = async (): Promise<void> => {\r\n try {\r\n // Delete the object from the DB if user confirms\r\n const requestOptions = reqOptions(\"DELETE\", null, token);\r\n const request = await fetch(url, requestOptions);\r\n\r\n if (request.status === 204) {\r\n openToast(`${message} was successfully deleted.`);\r\n cleanup();\r\n resolve(true);\r\n return;\r\n } else if (request.status === 401) {\r\n openToast(\"You don't have permission to delete this item.\", 401);\r\n } else {\r\n const res = (await request.json()) as ApiErrorResponse;\r\n openToast(\r\n res.detail ||\r\n \"Couldn't delete the item. You can report the issue with the feedback button.\",\r\n request.status\r\n );\r\n }\r\n } catch (error) {\r\n openToast(\r\n `Error deleting item: ${\r\n error instanceof Error ? error.message : \"Unknown error\"\r\n }`,\r\n 500\r\n );\r\n }\r\n\r\n resolve(false);\r\n };\r\n\r\n // If no popup needed, just submit and return\r\n if (!pop) {\r\n handleSubmit();\r\n return;\r\n }\r\n\r\n // Templates for the copy button states\r\n const copiedState = `\r\n <div class=\"ihub-copy-status ihub-copy-success\">\r\n <svg class=\"ihub-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"CheckIcon\">\r\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"></path>\r\n </svg>\r\n <span>Copied!</span>\r\n </div>\r\n `.trim();\r\n\r\n const unCopiedState = `\r\n <div class=\"ihub-copy-status\">\r\n <svg class=\"ihub-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"ContentCopyIcon\">\r\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"></path>\r\n </svg>\r\n <span class=\"ihub-fs-sm\">Copy Text</span>\r\n </div>\r\n `.trim();\r\n\r\n // Create or get the modal container\r\n let modalContainer = document.getElementById(modalId);\r\n if (!modalContainer) {\r\n modalContainer = document.createElement(\"div\");\r\n modalContainer.id = modalId;\r\n }\r\n\r\n // Create modal content with proper ihub- prefixed classes\r\n const modalContent = `\r\n <section class=\"ihub-modal ihub-modal-open\" aria-labelledby=\"delete-modal-title\" role=\"dialog\" aria-modal=\"true\">\r\n <div class=\"ihub-modal-content\">\r\n <h4 id=\"delete-modal-title\" class=\"ihub-modal-title\">Delete confirmation</h4>\r\n <p class=\"ihub-warning-text\">\r\n Unexpected bad things will happen if you don't read this!\r\n </p>\r\n <p class=\"ihub-modal-description\">\r\n This action cannot be undone. This will permanently delete the\r\n <strong>${message}</strong> repository, feedbacks, schedules, and remove all team\r\n associations.\r\n </p>\r\n \r\n <div class=\"ihub-confirm-row\">\r\n <p class=\"ihub-confirm-instruction\">Please type <strong class=\"ihub-confirm-value\">${message}</strong> to confirm.</p>\r\n <button type=\"button\" id=\"ihub-copy-btn\" class=\"ihub-copy-btn\" aria-label=\"Copy confirmation text\">\r\n ${unCopiedState}\r\n </button>\r\n </div>\r\n \r\n <div class=\"ihub-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n id=\"ihub-delete-input\" \r\n class=\"ihub-delete-input\" \r\n aria-label=\"Confirmation text\"\r\n placeholder=\"Type the text to confirm deletion\"\r\n />\r\n </div>\r\n \r\n <div class=\"ihub-modal-actions\">\r\n <button \r\n type=\"button\" \r\n id=\"ihub-cancel-btn\" \r\n class=\"ihub-cancel-btn\"\r\n aria-label=\"Cancel deletion\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"button\" \r\n disabled \r\n id=\"ihub-delete-btn\" \r\n class=\"ihub-delete-btn\"\r\n aria-label=\"Confirm deletion\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n `.trim();\r\n\r\n // Set modal content and add to document\r\n modalContainer.innerHTML = modalContent;\r\n document.body.appendChild(modalContainer);\r\n\r\n // Get DOM elements\r\n const copyBtn = document.getElementById(\"ihub-copy-btn\");\r\n const deleteBtn = document.getElementById(\r\n \"ihub-delete-btn\"\r\n ) as HTMLButtonElement | null;\r\n const cancelBtn = document.getElementById(\"ihub-cancel-btn\");\r\n const deleteInput = document.getElementById(\r\n \"ihub-delete-input\"\r\n ) as HTMLInputElement | null;\r\n const modalElement = document.querySelector(\".ihub-modal\");\r\n\r\n // Set up copy button functionality\r\n if (copyBtn) {\r\n const copyClickHandler = () => {\r\n navigator.clipboard\r\n .writeText(message)\r\n .then(() => {\r\n if (copyBtn) {\r\n copyBtn.innerHTML = copiedState;\r\n setTimeout(() => {\r\n if (copyBtn) {\r\n copyBtn.innerHTML = unCopiedState;\r\n }\r\n }, 2000);\r\n }\r\n })\r\n .catch((err) => console.error(\"Unable to copy to clipboard\", err));\r\n };\r\n\r\n addTrackedListener(copyBtn, \"click\", copyClickHandler);\r\n }\r\n\r\n // Set up input validation\r\n if (deleteInput) {\r\n const inputHandler = (e: Event) => {\r\n const input = e.target as HTMLInputElement;\r\n if (deleteBtn) {\r\n deleteBtn.disabled = input.value !== message;\r\n }\r\n };\r\n\r\n addTrackedListener(deleteInput, \"input\", inputHandler);\r\n }\r\n\r\n // Set up cancel button\r\n if (cancelBtn) {\r\n const cancelHandler = () => {\r\n cleanup();\r\n resolve(false);\r\n };\r\n\r\n addTrackedListener(cancelBtn, \"click\", cancelHandler);\r\n }\r\n\r\n // Set up delete button\r\n if (deleteBtn) {\r\n const deleteHandler = () => {\r\n handleSubmit();\r\n };\r\n\r\n addTrackedListener(deleteBtn, \"click\", deleteHandler);\r\n }\r\n\r\n // Close modal when clicking outside (only if clicking directly on the modal background)\r\n if (modalElement) {\r\n const modalClickHandler = (e: MouseEvent) => {\r\n if (e.target === modalElement) {\r\n cleanup();\r\n resolve(false);\r\n }\r\n };\r\n\r\n addTrackedListener<MouseEvent>(\r\n modalElement as HTMLElement,\r\n \"click\",\r\n modalClickHandler\r\n );\r\n }\r\n\r\n // Handle escape key to cancel\r\n const handleEscapeKey = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n cleanup();\r\n resolve(false);\r\n }\r\n };\r\n\r\n // Add escape key listener to our tracked listeners\r\n addTrackedListener<KeyboardEvent>(document, \"keydown\", handleEscapeKey);\r\n });\r\n};\r\n"],"names":["message","token","url","pop","arguments","length","undefined","Promise","resolve","modalId","listeners","addTrackedListener","element","type","handler","wrappedHandler","event","addEventListener","push","cleanup","forEach","_ref","removeEventListener","modalElement","document","getElementById","_i","_arr","handlerName","window","remove","handleSubmit","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestOptions","request","res","regeneratorRuntime","wrap","_context","prev","next","reqOptions","fetch","sent","status","openToast","concat","abrupt","json","detail","t0","Error","stop","apply","this","copiedState","trim","unCopiedState","modalContainer","createElement","id","modalContent","innerHTML","body","appendChild","copyBtn","deleteBtn","cancelBtn","deleteInput","querySelector","navigator","clipboard","writeText","then","setTimeout","err","console","error","e","input","target","disabled","value","key"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e={iss:"https://accounts.google.com",azp:"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com",aud:"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com",sub:"116653249749017901927",email:"example@gmail.com",email_verified:!0,at_hash:"yPbY_RWFwVagiOLCH166PQ",name:"Noah Olatoye",picture:"https://lh3.googleusercontent.com/a/AAcHTte5gQWmNyaWOUXxP483u9es2HTREi0XCqaaBBpinA=s96-c",given_name:"Noah",family_name:"Olatoye",locale:"en",iat:1686208695,exp:1686212295},a={data:{id:3144535842,log:null,fees:300,plan:{},split:{},amount:2e4,domain:"test",paidAt:"2023-09-27T07:43:53.000Z",source:{type:"web",source:"checkout",identifier:null,entry_point:"request_inline"},status:"success",channel:"card",message:null,paid_at:"2023-09-27T07:43:53.000Z",currency:"NGN",customer:{id:142045862,email:"biodun.shittu@email.org",phone:"",metadata:null,last_name:"",first_name:"",risk_action:"default",customer_code:"CUS_vns6rjzfc1llauo",international_format_phone:null},metadata:{user:174,amount:200,channel:"07da13e6-fb5e-496c-9a50-56f85b6f3891",payload:{payment_date:"2023-09-14T12:00:00Z",transaction_id:"transaction_id_here",additional_info:"Additional payment details here"},success:!0,currency:"NGN",duration:30,referrer:"https://skills.sandbox.instincthub.com/tracks/enroll/frontend-fech-diversity-beginner",reminder:0,object_id:"3810262f-5d1b-43be-9cac-64ab915e3a27",reference:"transaction_reference_here",content_type:112,payment_channel:"Paystack"},order_id:null,reference:"1695800624264",created_at:"2023-09-27T07:43:47.000Z",fees_split:null,ip_address:"41.184.48.186",subaccount:{},authorization:{bin:"408408",bank:"TEST BANK",brand:"visa",last4:"4081",channel:"card",exp_year:"2030",reusable:!0,card_type:"visa ",exp_month:"12",signature:"SIG_ZMq8hCbFvj2qiMLwTnNB",account_name:null,country_code:"NG",receiver_bank:null,authorization_code:"AUTH_a72c0wy3fk",receiver_bank_account_number:null},fees_breakdown:null,gateway_response:"Successful",requested_amount:2e4,pos_transaction_data:null},event:"charge.success"};export{a as paystackHook,e as profile_goggle_provider};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.paystackHook={data:{id:3144535842,log:null,fees:300,plan:{},split:{},amount:2e4,domain:"test",paidAt:"2023-09-27T07:43:53.000Z",source:{type:"web",source:"checkout",identifier:null,entry_point:"request_inline"},status:"success",channel:"card",message:null,paid_at:"2023-09-27T07:43:53.000Z",currency:"NGN",customer:{id:142045862,email:"biodun.shittu@email.org",phone:"",metadata:null,last_name:"",first_name:"",risk_action:"default",customer_code:"CUS_vns6rjzfc1llauo",international_format_phone:null},metadata:{user:174,amount:200,channel:"07da13e6-fb5e-496c-9a50-56f85b6f3891",payload:{payment_date:"2023-09-14T12:00:00Z",transaction_id:"transaction_id_here",additional_info:"Additional payment details here"},success:!0,currency:"NGN",duration:30,referrer:"https://skills.sandbox.instincthub.com/tracks/enroll/frontend-fech-diversity-beginner",reminder:0,object_id:"3810262f-5d1b-43be-9cac-64ab915e3a27",reference:"transaction_reference_here",content_type:112,payment_channel:"Paystack"},order_id:null,reference:"1695800624264",created_at:"2023-09-27T07:43:47.000Z",fees_split:null,ip_address:"41.184.48.186",subaccount:{},authorization:{bin:"408408",bank:"TEST BANK",brand:"visa",last4:"4081",channel:"card",exp_year:"2030",reusable:!0,card_type:"visa ",exp_month:"12",signature:"SIG_ZMq8hCbFvj2qiMLwTnNB",account_name:null,country_code:"NG",receiver_bank:null,authorization_code:"AUTH_a72c0wy3fk",receiver_bank_account_number:null},fees_breakdown:null,gateway_response:"Successful",requested_amount:2e4,pos_transaction_data:null},event:"charge.success"},exports.profile_goggle_provider={iss:"https://accounts.google.com",azp:"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com",aud:"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com",sub:"116653249749017901927",email:"example@gmail.com",email_verified:!0,at_hash:"yPbY_RWFwVagiOLCH166PQ",name:"Noah Olatoye",picture:"https://lh3.googleusercontent.com/a/AAcHTte5gQWmNyaWOUXxP483u9es2HTREi0XCqaaBBpinA=s96-c",given_name:"Noah",family_name:"Olatoye",locale:"en",iat:1686208695,exp:1686212295};
2
2
  //# sourceMappingURL=oauth_json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth_json.js","sources":["../../../../src/components/lib/oauth_json.ts"],"sourcesContent":["// Checking the data samples returned from auth\r\nexport const profile_goggle_provider = {\r\n\tiss: \"https://accounts.google.com\",\r\n\tazp: \"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com\",\r\n\taud: \"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com\",\r\n\tsub: \"116653249749017901927\",\r\n\temail: \"example@gmail.com\",\r\n\temail_verified: true,\r\n\tat_hash: \"yPbY_RWFwVagiOLCH166PQ\",\r\n\tname: \"Noah Olatoye\",\r\n\tpicture:\r\n\t\t\"https://lh3.googleusercontent.com/a/AAcHTte5gQWmNyaWOUXxP483u9es2HTREi0XCqaaBBpinA=s96-c\",\r\n\tgiven_name: \"Noah\",\r\n\tfamily_name: \"Olatoye\",\r\n\tlocale: \"en\",\r\n\tiat: 1686208695,\r\n\texp: 1686212295,\r\n};\r\n\r\nexport const paystackHook = {\r\n\tdata: {\r\n\t\tid: 3144535842,\r\n\t\tlog: null,\r\n\t\tfees: 300,\r\n\t\tplan: {},\r\n\t\tsplit: {},\r\n\t\tamount: 20000,\r\n\t\tdomain: \"test\",\r\n\t\tpaidAt: \"2023-09-27T07:43:53.000Z\",\r\n\t\tsource: {\r\n\t\t\ttype: \"web\",\r\n\t\t\tsource: \"checkout\",\r\n\t\t\tidentifier: null,\r\n\t\t\tentry_point: \"request_inline\",\r\n\t\t},\r\n\t\tstatus: \"success\",\r\n\t\tchannel: \"card\",\r\n\t\tmessage: null,\r\n\t\tpaid_at: \"2023-09-27T07:43:53.000Z\",\r\n\t\tcurrency: \"NGN\",\r\n\t\tcustomer: {\r\n\t\t\tid: 142045862,\r\n\t\t\temail: \"biodun.shittu@email.org\",\r\n\t\t\tphone: \"\",\r\n\t\t\tmetadata: null,\r\n\t\t\tlast_name: \"\",\r\n\t\t\tfirst_name: \"\",\r\n\t\t\trisk_action: \"default\",\r\n\t\t\tcustomer_code: \"CUS_vns6rjzfc1llauo\",\r\n\t\t\tinternational_format_phone: null,\r\n\t\t},\r\n\t\tmetadata: {\r\n\t\t\tuser: 174,\r\n\t\t\tamount: 200,\r\n\t\t\tchannel: \"07da13e6-fb5e-496c-9a50-56f85b6f3891\",\r\n\t\t\tpayload: {\r\n\t\t\t\tpayment_date: \"2023-09-14T12:00:00Z\",\r\n\t\t\t\ttransaction_id: \"transaction_id_here\",\r\n\t\t\t\tadditional_info: \"Additional payment details here\",\r\n\t\t\t},\r\n\t\t\tsuccess: true,\r\n\t\t\tcurrency: \"NGN\",\r\n\t\t\tduration: 30,\r\n\t\t\treferrer:\r\n\t\t\t\t\"https://skills.sandbox.instincthub.com/tracks/enroll/frontend-fech-diversity-beginner\",\r\n\t\t\treminder: 0,\r\n\t\t\tobject_id: \"3810262f-5d1b-43be-9cac-64ab915e3a27\",\r\n\t\t\treference: \"transaction_reference_here\",\r\n\t\t\tcontent_type: 112,\r\n\t\t\tpayment_channel: \"Paystack\",\r\n\t\t},\r\n\t\torder_id: null,\r\n\t\treference: \"1695800624264\",\r\n\t\tcreated_at: \"2023-09-27T07:43:47.000Z\",\r\n\t\tfees_split: null,\r\n\t\tip_address: \"41.184.48.186\",\r\n\t\tsubaccount: {},\r\n\t\tauthorization: {\r\n\t\t\tbin: \"408408\",\r\n\t\t\tbank: \"TEST BANK\",\r\n\t\t\tbrand: \"visa\",\r\n\t\t\tlast4: \"4081\",\r\n\t\t\tchannel: \"card\",\r\n\t\t\texp_year: \"2030\",\r\n\t\t\treusable: true,\r\n\t\t\tcard_type: \"visa \",\r\n\t\t\texp_month: \"12\",\r\n\t\t\tsignature: \"SIG_ZMq8hCbFvj2qiMLwTnNB\",\r\n\t\t\taccount_name: null,\r\n\t\t\tcountry_code: \"NG\",\r\n\t\t\treceiver_bank: null,\r\n\t\t\tauthorization_code: \"AUTH_a72c0wy3fk\",\r\n\t\t\treceiver_bank_account_number: null,\r\n\t\t},\r\n\t\tfees_breakdown: null,\r\n\t\tgateway_response: \"Successful\",\r\n\t\trequested_amount: 20000,\r\n\t\tpos_transaction_data: null,\r\n\t},\r\n\tevent: \"charge.success\",\r\n};\r\n"],"names":["profile_goggle_provider","iss","azp","aud","sub","email","email_verified","at_hash","name","picture","given_name","family_name","locale","iat","exp","paystackHook","data","id","log","fees","plan","split","amount","domain","paidAt","source","type","identifier","entry_point","status","channel","message","paid_at","currency","customer","phone","metadata","last_name","first_name","risk_action","customer_code","international_format_phone","user","payload","payment_date","transaction_id","additional_info","success","duration","referrer","reminder","object_id","reference","content_type","payment_channel","order_id","created_at","fees_split","ip_address","subaccount","authorization","bin","bank","brand","last4","exp_year","reusable","card_type","exp_month","signature","account_name","country_code","receiver_bank","authorization_code","receiver_bank_account_number","fees_breakdown","gateway_response","requested_amount","pos_transaction_data","event"],"mappings":"AACO,IAAMA,EAA0B,CACtCC,IAAK,8BACLC,IAAK,2EACLC,IAAK,2EACLC,IAAK,wBACLC,MAAO,oBACPC,gBAAgB,EAChBC,QAAS,yBACTC,KAAM,eACNC,QACC,2FACDC,WAAY,OACZC,YAAa,UACbC,OAAQ,KACRC,IAAK,WACLC,IAAK,YAGOC,EAAe,CAC3BC,KAAM,CACLC,GAAI,WACJC,IAAK,KACLC,KAAM,IACNC,KAAM,CAAE,EACRC,MAAO,CAAE,EACTC,OAAQ,IACRC,OAAQ,OACRC,OAAQ,2BACRC,OAAQ,CACPC,KAAM,MACND,OAAQ,WACRE,WAAY,KACZC,YAAa,kBAEdC,OAAQ,UACRC,QAAS,OACTC,QAAS,KACTC,QAAS,2BACTC,SAAU,MACVC,SAAU,CACTjB,GAAI,UACJZ,MAAO,0BACP8B,MAAO,GACPC,SAAU,KACVC,UAAW,GACXC,WAAY,GACZC,YAAa,UACbC,cAAe,sBACfC,2BAA4B,MAE7BL,SAAU,CACTM,KAAM,IACNpB,OAAQ,IACRQ,QAAS,uCACTa,QAAS,CACRC,aAAc,uBACdC,eAAgB,sBAChBC,gBAAiB,mCAElBC,SAAS,EACTd,SAAU,MACVe,SAAU,GACVC,SACC,wFACDC,SAAU,EACVC,UAAW,uCACXC,UAAW,6BACXC,aAAc,IACdC,gBAAiB,YAElBC,SAAU,KACVH,UAAW,gBACXI,WAAY,2BACZC,WAAY,KACZC,WAAY,gBACZC,WAAY,CAAE,EACdC,cAAe,CACdC,IAAK,SACLC,KAAM,YACNC,MAAO,OACPC,MAAO,OACPlC,QAAS,OACTmC,SAAU,OACVC,UAAU,EACVC,UAAW,QACXC,UAAW,KACXC,UAAW,2BACXC,aAAc,KACdC,aAAc,KACdC,cAAe,KACfC,mBAAoB,kBACpBC,6BAA8B,MAE/BC,eAAgB,KAChBC,iBAAkB,aAClBC,iBAAkB,IAClBC,qBAAsB,MAEvBC,MAAO"}
1
+ {"version":3,"file":"oauth_json.js","sources":["../../../../src/components/lib/oauth_json.ts"],"sourcesContent":["// Checking the data samples returned from auth\r\nexport const profile_goggle_provider = {\r\n\tiss: \"https://accounts.google.com\",\r\n\tazp: \"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com\",\r\n\taud: \"574381222933-fsh7rfl1ldb0p96kqjdis391ec2nkps2.apps.googleusercontent.com\",\r\n\tsub: \"116653249749017901927\",\r\n\temail: \"example@gmail.com\",\r\n\temail_verified: true,\r\n\tat_hash: \"yPbY_RWFwVagiOLCH166PQ\",\r\n\tname: \"Noah Olatoye\",\r\n\tpicture:\r\n\t\t\"https://lh3.googleusercontent.com/a/AAcHTte5gQWmNyaWOUXxP483u9es2HTREi0XCqaaBBpinA=s96-c\",\r\n\tgiven_name: \"Noah\",\r\n\tfamily_name: \"Olatoye\",\r\n\tlocale: \"en\",\r\n\tiat: 1686208695,\r\n\texp: 1686212295,\r\n};\r\n\r\nexport const paystackHook = {\r\n\tdata: {\r\n\t\tid: 3144535842,\r\n\t\tlog: null,\r\n\t\tfees: 300,\r\n\t\tplan: {},\r\n\t\tsplit: {},\r\n\t\tamount: 20000,\r\n\t\tdomain: \"test\",\r\n\t\tpaidAt: \"2023-09-27T07:43:53.000Z\",\r\n\t\tsource: {\r\n\t\t\ttype: \"web\",\r\n\t\t\tsource: \"checkout\",\r\n\t\t\tidentifier: null,\r\n\t\t\tentry_point: \"request_inline\",\r\n\t\t},\r\n\t\tstatus: \"success\",\r\n\t\tchannel: \"card\",\r\n\t\tmessage: null,\r\n\t\tpaid_at: \"2023-09-27T07:43:53.000Z\",\r\n\t\tcurrency: \"NGN\",\r\n\t\tcustomer: {\r\n\t\t\tid: 142045862,\r\n\t\t\temail: \"biodun.shittu@email.org\",\r\n\t\t\tphone: \"\",\r\n\t\t\tmetadata: null,\r\n\t\t\tlast_name: \"\",\r\n\t\t\tfirst_name: \"\",\r\n\t\t\trisk_action: \"default\",\r\n\t\t\tcustomer_code: \"CUS_vns6rjzfc1llauo\",\r\n\t\t\tinternational_format_phone: null,\r\n\t\t},\r\n\t\tmetadata: {\r\n\t\t\tuser: 174,\r\n\t\t\tamount: 200,\r\n\t\t\tchannel: \"07da13e6-fb5e-496c-9a50-56f85b6f3891\",\r\n\t\t\tpayload: {\r\n\t\t\t\tpayment_date: \"2023-09-14T12:00:00Z\",\r\n\t\t\t\ttransaction_id: \"transaction_id_here\",\r\n\t\t\t\tadditional_info: \"Additional payment details here\",\r\n\t\t\t},\r\n\t\t\tsuccess: true,\r\n\t\t\tcurrency: \"NGN\",\r\n\t\t\tduration: 30,\r\n\t\t\treferrer:\r\n\t\t\t\t\"https://skills.sandbox.instincthub.com/tracks/enroll/frontend-fech-diversity-beginner\",\r\n\t\t\treminder: 0,\r\n\t\t\tobject_id: \"3810262f-5d1b-43be-9cac-64ab915e3a27\",\r\n\t\t\treference: \"transaction_reference_here\",\r\n\t\t\tcontent_type: 112,\r\n\t\t\tpayment_channel: \"Paystack\",\r\n\t\t},\r\n\t\torder_id: null,\r\n\t\treference: \"1695800624264\",\r\n\t\tcreated_at: \"2023-09-27T07:43:47.000Z\",\r\n\t\tfees_split: null,\r\n\t\tip_address: \"41.184.48.186\",\r\n\t\tsubaccount: {},\r\n\t\tauthorization: {\r\n\t\t\tbin: \"408408\",\r\n\t\t\tbank: \"TEST BANK\",\r\n\t\t\tbrand: \"visa\",\r\n\t\t\tlast4: \"4081\",\r\n\t\t\tchannel: \"card\",\r\n\t\t\texp_year: \"2030\",\r\n\t\t\treusable: true,\r\n\t\t\tcard_type: \"visa \",\r\n\t\t\texp_month: \"12\",\r\n\t\t\tsignature: \"SIG_ZMq8hCbFvj2qiMLwTnNB\",\r\n\t\t\taccount_name: null,\r\n\t\t\tcountry_code: \"NG\",\r\n\t\t\treceiver_bank: null,\r\n\t\t\tauthorization_code: \"AUTH_a72c0wy3fk\",\r\n\t\t\treceiver_bank_account_number: null,\r\n\t\t},\r\n\t\tfees_breakdown: null,\r\n\t\tgateway_response: \"Successful\",\r\n\t\trequested_amount: 20000,\r\n\t\tpos_transaction_data: null,\r\n\t},\r\n\tevent: \"charge.success\",\r\n};\r\n"],"names":["data","id","log","fees","plan","split","amount","domain","paidAt","source","type","identifier","entry_point","status","channel","message","paid_at","currency","customer","email","phone","metadata","last_name","first_name","risk_action","customer_code","international_format_phone","user","payload","payment_date","transaction_id","additional_info","success","duration","referrer","reminder","object_id","reference","content_type","payment_channel","order_id","created_at","fees_split","ip_address","subaccount","authorization","bin","bank","brand","last4","exp_year","reusable","card_type","exp_month","signature","account_name","country_code","receiver_bank","authorization_code","receiver_bank_account_number","fees_breakdown","gateway_response","requested_amount","pos_transaction_data","event","iss","azp","aud","sub","email_verified","at_hash","name","picture","given_name","family_name","locale","iat","exp"],"mappings":"yFAmB4B,CAC3BA,KAAM,CACLC,GAAI,WACJC,IAAK,KACLC,KAAM,IACNC,KAAM,CAAE,EACRC,MAAO,CAAE,EACTC,OAAQ,IACRC,OAAQ,OACRC,OAAQ,2BACRC,OAAQ,CACPC,KAAM,MACND,OAAQ,WACRE,WAAY,KACZC,YAAa,kBAEdC,OAAQ,UACRC,QAAS,OACTC,QAAS,KACTC,QAAS,2BACTC,SAAU,MACVC,SAAU,CACTjB,GAAI,UACJkB,MAAO,0BACPC,MAAO,GACPC,SAAU,KACVC,UAAW,GACXC,WAAY,GACZC,YAAa,UACbC,cAAe,sBACfC,2BAA4B,MAE7BL,SAAU,CACTM,KAAM,IACNrB,OAAQ,IACRQ,QAAS,uCACTc,QAAS,CACRC,aAAc,uBACdC,eAAgB,sBAChBC,gBAAiB,mCAElBC,SAAS,EACTf,SAAU,MACVgB,SAAU,GACVC,SACC,wFACDC,SAAU,EACVC,UAAW,uCACXC,UAAW,6BACXC,aAAc,IACdC,gBAAiB,YAElBC,SAAU,KACVH,UAAW,gBACXI,WAAY,2BACZC,WAAY,KACZC,WAAY,gBACZC,WAAY,CAAE,EACdC,cAAe,CACdC,IAAK,SACLC,KAAM,YACNC,MAAO,OACPC,MAAO,OACPnC,QAAS,OACToC,SAAU,OACVC,UAAU,EACVC,UAAW,QACXC,UAAW,KACXC,UAAW,2BACXC,aAAc,KACdC,aAAc,KACdC,cAAe,KACfC,mBAAoB,kBACpBC,6BAA8B,MAE/BC,eAAgB,KAChBC,iBAAkB,aAClBC,iBAAkB,IAClBC,qBAAsB,MAEvBC,MAAO,kDAlG+B,CACtCC,IAAK,8BACLC,IAAK,2EACLC,IAAK,2EACLC,IAAK,wBACLjD,MAAO,oBACPkD,gBAAgB,EAChBC,QAAS,yBACTC,KAAM,eACNC,QACC,2FACDC,WAAY,OACZC,YAAa,UACbC,OAAQ,KACRC,IAAK,WACLC,IAAK"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as e,regeneratorRuntime as t,objectSpread2 as n}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{setCookie as a,calculateAmountAfterDeduction as r,reqOptions as o,API_HOST_URL as c}from"./helpFunction.js";import{openConfirmModal as i,openToast as s,getUserEmailInputModal as u}from"./modals/modals.js";var l=function(e){return{authorization_code:e.authorization_code,reference:(new Date).getTime().toString(),email:e.email,first_name:e.first_name,last_name:e.last_name,amount:100*e.amount,currency:e.currency||"NGN",publicKey:process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY,key:process.env.NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY,callback_url:window.location.href,metadata:e.metadata}},f=function(){var n=e(t().mark((function e(n){var a,r,o,c;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a={method:"POST",body:JSON.stringify(n),headers:{Authorization:"Bearer ".concat(process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY),"Content-Type":"application/json"}},e.prev=2,e.next=5,fetch("https://api.paystack.co/transaction/charge_authorization",a);case 5:return o=e.sent,e.next=8,o.json();case 8:return c=e.sent,"success"===(null===(r=c.data)||void 0===r?void 0:r.status)?s("Payment was successful with reference: ".concat(c.data.reference)):s("Payment failed with reference: ".concat(c.data.reference),400),e.abrupt("return",c.data);case 13:return e.prev=13,e.t0=e.catch(2),s("Payment processing error occurred",400),console.error("Payment authorization error:",e.t0),e.abrupt("return",{status:"failed",error:e.t0});case 18:case"end":return e.stop()}}),e,null,[[2,13]])})));return function(e){return n.apply(this,arguments)}}(),p=function(a){return new Promise(function(){var r=e(t().mark((function e(r){return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,window.PaystackPop){e.next=3;break}throw new Error("Paystack script not loaded");case 3:return e.next=5,window.PaystackPop.setup(n(n({},a),{},{callback:function(e){s("Payment complete! Reference: "+e.reference),r(e)},onClose:function(){s("Transaction was not completed, window closed.",400),r({status:"cancelled",cancelled:!0,reference:a.reference})}}));case 5:e.sent.openIframe(),e.next=14;break;case 9:e.prev=9,e.t0=e.catch(0),console.error("Paystack initialization error:",e.t0),s("Payment could not be initiated",400),r({status:"failed",cancelled:!0,reference:a.reference,error:e.t0});case 14:case"end":return e.stop()}}),e,null,[[0,9]])})));return function(e){return r.apply(this,arguments)}}())};function d(e){return m.apply(this,arguments)}function m(){return m=e(t().mark((function d(m){var h,b,y;return t().wrap((function(d){for(;;)switch(d.prev=d.next){case 0:if(m.e&&m.e.preventDefault(),!m.openConfirm||!m.defaultConfirm){d.next=8;break}return h="By clicking okay, you are enrolling for ".concat(m.label," with id ").concat(m.objects.object_id,"."),d.next=5,i(m.defaultMsg||h);case 5:if(d.sent){d.next=8;break}return d.abrupt("return");case 8:b=function(){var a=e(t().mark((function e(){var a,u,d,h,b,y,x,k,v,w,_,g,P,j,C,O,S,T,A,B;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(m.setStatus(0),!m.coupon){e.next=21;break}return h=null===(d=m.configObj.metadata)||void 0===d?void 0:d.channel_username,b=JSON.stringify({code:m.coupon,email:m.configObj.email,content_type:m.configObj.content_type,object_id:m.configObj.object_id}),y=o("POST",b,null,"json"),x="".concat(c,"coupons/").concat(h,"/validate-coupon/"),e.prev=6,e.next=9,fetch(x,y);case 9:return k=e.sent,e.next=12,k.json();case 12:v=e.sent,a=v.discount||0,v.detail?s(v.detail,400):v.id&&s("".concat(a,"% token was applied.")),e.next=21;break;case 17:e.prev=17,e.t0=e.catch(6),console.error("Coupon validation error:",e.t0),s("Could not validate coupon",400);case 21:if(!a){e.next=31;break}if(100!==a){e.next=26;break}return m.handleDBAction({reference:"COUPON__".concat(m.coupon)}),m.setStatus(1),e.abrupt("return");case 26:w=r(m.configObj.amount,a),s(w.detail,400),u=n(n({},m.configObj),w),e.next=32;break;case 31:u=m.configObj;case 32:if(m.gatwayCharges&&(_=m.gatwayCharges/100,g=u.amount/(1-_),P=parseFloat(g.toFixed(2)),j=P-u.amount,C=j>2e3?u.amount+2e3:P,u.amount=C),O=l(u),!u.amount){e.next=60;break}if(!u.authorization_code||!m.paymentMethod){e.next=53;break}return S="Would you prefer we charge your existing ".concat(m.paymentMethod.authorization.card_type," card that ends with ").concat(m.paymentMethod.last4,"?"),e.next=39,i(S,!0);case 39:if(!e.sent){e.next=47;break}return e.next=43,f(O);case 43:T=e.sent,m.handleDBAction(T),e.next=51;break;case 47:return e.next=49,p(O);case 49:A=e.sent,m.handleDBAction(A);case 51:e.next=58;break;case 53:return console.log("Pay with paystack: "),e.next=56,p(O);case 56:B=e.sent,m.handleDBAction(B);case 58:e.next=61;break;case 60:m.handleDBAction();case 61:m.setStatus(1);case 62:case"end":return e.stop()}}),e,null,[[6,17]])})));return function(){return a.apply(this,arguments)}}(),y=function(){var n=e(t().mark((function e(){var n;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(m.configObj.email){e.next=15;break}return e.next=3,u(m.label);case 3:if(!(n=e.sent)){e.next=10;break}m.configObj.email=n,a("email",n,2),b(),e.next=13;break;case 10:return s("You need to enter a valid email!",400),e.next=13,y();case 13:e.next=17;break;case 15:a("email",m.configObj.email,2),b();case 17:case"end":return e.stop()}}),e)})));return function(){return n.apply(this,arguments)}}(),y();case 11:case"end":return d.stop()}}),d)}))),m.apply(this,arguments)}export{f as chargeAuthorization,d as handlePaymentSubmit,p as payWithPaystack,l as paystackDataConfig};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_rollupPluginBabelHelpers.js"),t=require("./helpFunction.js"),n=require("./modals/modals.js"),a=function(e){return{authorization_code:e.authorization_code,reference:(new Date).getTime().toString(),email:e.email,first_name:e.first_name,last_name:e.last_name,amount:100*e.amount,currency:e.currency||"NGN",publicKey:process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY,key:process.env.NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY,callback_url:window.location.href,metadata:e.metadata}},r=function(){var t=e.asyncToGenerator(e.regeneratorRuntime().mark((function t(a){var r,o,c,i;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r={method:"POST",body:JSON.stringify(a),headers:{Authorization:"Bearer ".concat(process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY),"Content-Type":"application/json"}},e.prev=2,e.next=5,fetch("https://api.paystack.co/transaction/charge_authorization",r);case 5:return c=e.sent,e.next=8,c.json();case 8:return i=e.sent,"success"===(null===(o=i.data)||void 0===o?void 0:o.status)?n.openToast("Payment was successful with reference: ".concat(i.data.reference)):n.openToast("Payment failed with reference: ".concat(i.data.reference),400),e.abrupt("return",i.data);case 13:return e.prev=13,e.t0=e.catch(2),n.openToast("Payment processing error occurred",400),console.error("Payment authorization error:",e.t0),e.abrupt("return",{status:"failed",error:e.t0});case 18:case"end":return e.stop()}}),t,null,[[2,13]])})));return function(e){return t.apply(this,arguments)}}(),o=function(t){return new Promise(function(){var a=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(r){return e.regeneratorRuntime().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(a.prev=0,window.PaystackPop){a.next=3;break}throw new Error("Paystack script not loaded");case 3:return a.next=5,window.PaystackPop.setup(e.objectSpread2(e.objectSpread2({},t),{},{callback:function(e){n.openToast("Payment complete! Reference: "+e.reference),r(e)},onClose:function(){n.openToast("Transaction was not completed, window closed.",400),r({status:"canceled",cancelled:!0,reference:t.reference})}}));case 5:a.sent.openIframe(),a.next=14;break;case 9:a.prev=9,a.t0=a.catch(0),console.error("Paystack initialization error:",a.t0),n.openToast("Payment could not be initiated",400),r({status:"failed",cancelled:!0,reference:t.reference,error:a.t0});case 14:case"end":return a.stop()}}),a,null,[[0,9]])})));return function(e){return a.apply(this,arguments)}}())};function c(){return c=e.asyncToGenerator(e.regeneratorRuntime().mark((function c(i){var s,u,l;return e.regeneratorRuntime().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(i.e&&i.e.preventDefault(),!i.openConfirm||!i.defaultConfirm){c.next=8;break}return s="By clicking okay, you are enrolling for ".concat(i.label," with id ").concat(i.objects.object_id,"."),c.next=5,n.openConfirmModal(i.defaultMsg||s);case 5:if(c.sent){c.next=8;break}return c.abrupt("return");case 8:u=function(){var c=e.asyncToGenerator(e.regeneratorRuntime().mark((function c(){var s,u,l,p,f,d,m,h,b,y,x,g,k,_,v,w,T,P,j,C;return e.regeneratorRuntime().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(i.setStatus(0),!i.coupon){c.next=21;break}return p=null===(l=i.configObj.metadata)||void 0===l?void 0:l.channel_username,f=JSON.stringify({code:i.coupon,email:i.configObj.email,content_type:i.configObj.content_type,object_id:i.configObj.object_id}),d=t.reqOptions("POST",f,null,"json"),m="".concat(t.API_HOST_URL,"coupons/").concat(p,"/validate-coupon/"),c.prev=6,c.next=9,fetch(m,d);case 9:return h=c.sent,c.next=12,h.json();case 12:b=c.sent,s=b.discount||0,b.detail?n.openToast(b.detail,400):b.id&&n.openToast("".concat(s,"% token was applied.")),c.next=21;break;case 17:c.prev=17,c.t0=c.catch(6),console.error("Coupon validation error:",c.t0),n.openToast("Could not validate coupon",400);case 21:if(!s){c.next=31;break}if(100!==s){c.next=26;break}return i.handleDBAction({reference:"COUPON__".concat(i.coupon)}),i.setStatus(1),c.abrupt("return");case 26:y=t.calculateAmountAfterDeduction(i.configObj.amount,s),n.openToast(y.detail,400),u=e.objectSpread2(e.objectSpread2({},i.configObj),y),c.next=32;break;case 31:u=i.configObj;case 32:if(i.gatwayCharges&&(x=i.gatwayCharges/100,g=u.amount/(1-x),k=parseFloat(g.toFixed(2)),_=k-u.amount,v=_>2e3?u.amount+2e3:k,u.amount=v),w=a(u),!u.amount){c.next=60;break}if(!u.authorization_code||!i.paymentMethod){c.next=53;break}return T="Would you prefer we charge your existing ".concat(i.paymentMethod.authorization.card_type," card that ends with ").concat(i.paymentMethod.last4,"?"),c.next=39,n.openConfirmModal(T,!0);case 39:if(!c.sent){c.next=47;break}return c.next=43,r(w);case 43:P=c.sent,i.handleDBAction(P),c.next=51;break;case 47:return c.next=49,o(w);case 49:j=c.sent,i.handleDBAction(j);case 51:c.next=58;break;case 53:return console.log("Pay with paystack: "),c.next=56,o(w);case 56:C=c.sent,i.handleDBAction(C);case 58:c.next=61;break;case 60:i.handleDBAction();case 61:i.setStatus(1);case 62:case"end":return c.stop()}}),c,null,[[6,17]])})));return function(){return c.apply(this,arguments)}}(),l=function(){var a=e.asyncToGenerator(e.regeneratorRuntime().mark((function a(){var r;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i.configObj.email){e.next=15;break}return e.next=3,n.getUserEmailInputModal(i.label);case 3:if(!(r=e.sent)){e.next=10;break}i.configObj.email=r,t.setCookie("email",r,2),u(),e.next=13;break;case 10:return n.openToast("You need to enter a valid email!",400),e.next=13,l();case 13:e.next=17;break;case 15:t.setCookie("email",i.configObj.email,2),u();case 17:case"end":return e.stop()}}),a)})));return function(){return a.apply(this,arguments)}}(),l();case 11:case"end":return c.stop()}}),c)}))),c.apply(this,arguments)}exports.chargeAuthorization=r,exports.handlePaymentSubmit=function(e){return c.apply(this,arguments)},exports.payWithPaystack=o,exports.paystackDataConfig=a;
2
2
  //# sourceMappingURL=paystack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paystack.js","sources":["../../../../src/components/lib/paystack.ts"],"sourcesContent":["import {\r\n API_HOST_URL,\r\n calculateAmountAfterDeduction,\r\n reqOptions,\r\n setCookie,\r\n} from \"./helpFunction\";\r\nimport {\r\n getUserEmailInputModal,\r\n openConfirmModal,\r\n openToast,\r\n} from \"./modals/modals\";\r\nimport {\r\n PaystackConfigObjectType,\r\n PaystackConfigType,\r\n PaystackResponseType,\r\n PaymentContextType,\r\n} from \"@/types\";\r\n\r\n/**\r\n * Context for processing payments\r\n * @property {Event | null} [e] - The event object that triggered the payment\r\n * @property {Object} objects - Details about the item being purchased\r\n * @property {string} objects.title - Title of the item\r\n * @property {string | number | null} [objects.object_type] - Model ID of the object being purchased\r\n * @property {string | number | null} [objects.object_id] - Object ID of the object being purchased\r\n * @property {PaystackConfigObjectType} configObj - Configuration for PayStack\r\n * @property {PaymentMethodType} [paymentMethod] - Saved payment method if available\r\n * @property {Function} setStatus - Function to update UI status during payment process\r\n * @property {Function} handleDBAction - Callback for processing successful payments\r\n * @property {boolean} [defaultConfirm] - Whether to show a confirmation dialog\r\n * @property {string} label - Label for the payment (usually item title)\r\n * @property {string} [coupon] - Coupon code if applicable\r\n * @property {string} [defaultMsg] - Custom confirmation message\r\n * @property {number} [gatwayCharges] - Payment gateway charges percentage\r\n */\r\n\r\n/**\r\n * Configures the Paystack payment data for processing\r\n * @param obj - Object containing payment details\r\n * @returns PaystackConfig - Configured payment data\r\n */\r\nexport const paystackDataConfig = (\r\n obj: PaystackConfigObjectType\r\n): PaystackConfigType => ({\r\n authorization_code: obj.authorization_code,\r\n reference: new Date().getTime().toString(),\r\n email: obj.email,\r\n first_name: obj.first_name,\r\n last_name: obj.last_name,\r\n amount: obj.amount * 100, // Amount is in the country's lowest currency. E.g Kobo, so 20000 kobo = N200\r\n currency: obj.currency || \"NGN\",\r\n publicKey: process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY,\r\n key: process.env.NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY,\r\n callback_url: window.location.href,\r\n metadata: obj.metadata,\r\n});\r\n\r\n/**\r\n * Charges a customer using an existing authorization\r\n * @param data - Payment configuration data\r\n * @returns Promise with transaction data\r\n */\r\nexport const chargeAuthorization = async (\r\n data: PaystackConfigType\r\n): Promise<any> => {\r\n // This function tries to charge user with existing card\r\n const url = \"https://api.paystack.co/transaction/charge_authorization\";\r\n const options = {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: {\r\n Authorization: `Bearer ${process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n };\r\n\r\n try {\r\n const req = await fetch(url, options);\r\n const res = await req.json();\r\n\r\n if (res.data?.status === \"success\") {\r\n openToast(`Payment was successful with reference: ${res.data.reference}`);\r\n } else {\r\n openToast(`Payment failed with reference: ${res.data.reference}`, 400);\r\n }\r\n\r\n return res.data;\r\n } catch (error) {\r\n openToast(\"Payment processing error occurred\", 400);\r\n console.error(\"Payment authorization error:\", error);\r\n return { status: \"failed\", error };\r\n }\r\n};\r\n\r\n/**\r\n * Initiates payment with Paystack popup\r\n * @param config - Payment configuration\r\n * @returns Promise with payment response\r\n */\r\nexport const payWithPaystack = (\r\n config: PaystackConfigType\r\n): Promise<PaystackResponseType> => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n // Ensure PaystackPop is available\r\n if (!window.PaystackPop) {\r\n throw new Error(\"Paystack script not loaded\");\r\n }\r\n\r\n let handler = await window.PaystackPop.setup({\r\n ...config,\r\n callback: (response: PaystackResponseType) => {\r\n // This happens after the payment is completed successfully\r\n openToast(\"Payment complete! Reference: \" + response.reference);\r\n resolve(response);\r\n },\r\n onClose: () => {\r\n openToast(\"Transaction was not completed, window closed.\", 400);\r\n resolve({\r\n status: \"cancelled\",\r\n cancelled: true,\r\n reference: config.reference,\r\n } as PaystackResponseType);\r\n },\r\n });\r\n handler.openIframe();\r\n } catch (error) {\r\n console.error(\"Paystack initialization error:\", error);\r\n openToast(\"Payment could not be initiated\", 400);\r\n resolve({\r\n status: \"failed\",\r\n cancelled: true,\r\n reference: config.reference,\r\n error,\r\n } as PaystackResponseType);\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Handles the complete payment submission process\r\n * @example\r\n * ```ts\r\n * handlePaymentSubmit({\r\n * openConfirm: true,\r\n * defaultConfirm: true,\r\n * defaultMsg: \"Are you sure you want to enroll for this course?\",\r\n * label: \"Course Name\",\r\n * objects: {\r\n * object_id: \"123\",\r\n * object_type: \"course\",\r\n * },\r\n * configObj: {\r\n * email: \"user@example.com\",\r\n * amount: 1000,\r\n * currency: \"NGN\",\r\n * authorization_code: \"1234567890\",\r\n * first_name: \"John\",\r\n * last_name: \"Doe\",\r\n * email: \"user@example.com\",\r\n * },\r\n * coupon: \"1234567890\",\r\n * gatwayCharges: 10,\r\n * paymentMethod: {\r\n * authorization: {\r\n * card_type: \"MasterCard\",\r\n * last4: \"1234\",\r\n * },\r\n * },\r\n * handleDBAction: (data: any) => {\r\n * console.log(data);\r\n * },\r\n * setStatus: (status: number) => {\r\n * console.log(status);\r\n * },\r\n * e: Event,\r\n * });\r\n * ```\r\n * @param contexts - Payment context information\r\n * @context This function orchestrates the entire payment flow from confirmation to processing\r\n */\r\nexport async function handlePaymentSubmit(\r\n contexts: PaymentContextType\r\n): Promise<void> {\r\n if (contexts.e) contexts.e.preventDefault();\r\n\r\n if (contexts.openConfirm && contexts.defaultConfirm) {\r\n let msg = `By clicking okay, you are enrolling for ${contexts.label} with id ${contexts.objects.object_id}.`;\r\n const confirm = await openConfirmModal(contexts.defaultMsg || msg);\r\n if (!confirm) return;\r\n }\r\n\r\n const makePayment = async (): Promise<void> => {\r\n contexts.setStatus(0);\r\n\r\n // Check if contexts.coupon is valid\r\n let discount: number | undefined;\r\n let mewConfigObj: PaystackConfigObjectType;\r\n\r\n if (contexts.coupon) {\r\n const handle = contexts.configObj.metadata?.channel_username;\r\n const couponObj = JSON.stringify({\r\n code: contexts.coupon,\r\n email: contexts.configObj.email,\r\n content_type: contexts.configObj.content_type,\r\n object_id: contexts.configObj.object_id,\r\n });\r\n\r\n const requestOptions = reqOptions(\"POST\", couponObj, null, \"json\");\r\n const url = `${API_HOST_URL}coupons/${handle}/validate-coupon/`;\r\n\r\n try {\r\n const dataset = await fetch(url, requestOptions);\r\n const res = await dataset.json();\r\n\r\n discount = res.discount || 0;\r\n if (res.detail) {\r\n openToast(res.detail, 400);\r\n } else if (res.id) {\r\n openToast(`${discount}% token was applied.`);\r\n }\r\n } catch (error) {\r\n console.error(\"Coupon validation error:\", error);\r\n openToast(\"Could not validate coupon\", 400);\r\n }\r\n }\r\n\r\n // Remove the discount from actual amount\r\n if (discount) {\r\n if (discount === 100) {\r\n contexts.handleDBAction({ reference: `COUPON__${contexts.coupon}` });\r\n contexts.setStatus(1);\r\n return;\r\n }\r\n\r\n const amount = calculateAmountAfterDeduction(\r\n contexts.configObj.amount,\r\n discount\r\n );\r\n\r\n openToast(amount.detail, 400);\r\n mewConfigObj = {\r\n ...contexts.configObj,\r\n ...amount,\r\n };\r\n } else {\r\n mewConfigObj = contexts.configObj;\r\n }\r\n\r\n // Add paystack charges\r\n if (contexts.gatwayCharges) {\r\n const fee = contexts.gatwayCharges / 100;\r\n // Calculate the amount to charge so that after the fee deduction, it matches the intended amount\r\n const totalAmount = mewConfigObj.amount / (1 - fee);\r\n // Returns the amount rounded to 2 decimal places\r\n const decimalAmount = parseFloat(totalAmount.toFixed(2));\r\n\r\n // Local transactions fees are capped at ₦2000, meaning that's the absolute maximum you'll ever pay in fees per transaction\r\n const localCharges = decimalAmount - mewConfigObj.amount;\r\n\r\n // Only charge 2k if charges exceed threshold\r\n const noMoreThan2k =\r\n localCharges > 2000 ? mewConfigObj.amount + 2000 : decimalAmount;\r\n\r\n mewConfigObj.amount = noMoreThan2k;\r\n }\r\n\r\n const dataset = paystackDataConfig(mewConfigObj);\r\n\r\n if (mewConfigObj.amount) {\r\n if (mewConfigObj.authorization_code && contexts.paymentMethod) {\r\n // Ask if user wants to use existing payment method\r\n const msg = `Would you prefer we charge your existing ${contexts.paymentMethod.authorization.card_type} card that ends with ${contexts.paymentMethod.last4}?`;\r\n const confirm = await openConfirmModal(msg, true);\r\n\r\n if (confirm) {\r\n // Charge user with existing card\r\n const res = await chargeAuthorization(dataset);\r\n contexts.handleDBAction(res);\r\n } else {\r\n // Request for user card details\r\n const payActivate = await payWithPaystack(dataset);\r\n\r\n contexts.handleDBAction(payActivate);\r\n }\r\n } else {\r\n // Request for user card details if payment method doesn't exist\r\n console.log(\"Pay with paystack: \");\r\n const payActivate = await payWithPaystack(dataset);\r\n contexts.handleDBAction(payActivate);\r\n }\r\n } else {\r\n // If cohort is free, don't request for payment\r\n contexts.handleDBAction();\r\n }\r\n\r\n contexts.setStatus(1);\r\n };\r\n\r\n // Get user email input if doesn't exist\r\n const checkEmailInConfig = async (): Promise<void> => {\r\n if (!contexts.configObj.email) {\r\n const emailValue = await getUserEmailInputModal(contexts.label);\r\n if (emailValue) {\r\n contexts.configObj.email = emailValue;\r\n setCookie(\"email\", emailValue, 2); // store for signup use\r\n makePayment();\r\n } else {\r\n openToast(\"You need to enter a valid email!\", 400);\r\n await checkEmailInConfig();\r\n }\r\n } else {\r\n setCookie(\"email\", contexts.configObj.email, 2); // store for signup use\r\n makePayment();\r\n }\r\n };\r\n\r\n checkEmailInConfig();\r\n}\r\n\r\n// Add PaystackPop to Window interface\r\ndeclare global {\r\n interface Window {\r\n PaystackPop: {\r\n setup: (config: any) => { openIframe: () => void };\r\n };\r\n }\r\n}\r\n"],"names":["paystackDataConfig","obj","authorization_code","reference","Date","getTime","toString","email","first_name","last_name","amount","currency","publicKey","process","env","NEXT_PUBLIC_PAYSTACK_SECRET_KEY","key","NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY","callback_url","window","location","href","metadata","chargeAuthorization","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","data","options","_res$data","req","res","wrap","_context","prev","next","method","body","JSON","stringify","headers","Authorization","concat","fetch","sent","json","status","openToast","abrupt","t0","console","error","stop","_x","apply","this","arguments","payWithPaystack","config","Promise","_ref2","_callee2","resolve","_context2","PaystackPop","Error","setup","_objectSpread","callback","response","onClose","cancelled","openIframe","_x2","handlePaymentSubmit","_x3","_handlePaymentSubmit","_callee5","contexts","msg","makePayment","_checkEmailInConfig","_context5","e","preventDefault","openConfirm","defaultConfirm","label","objects","object_id","openConfirmModal","defaultMsg","_ref3","_callee3","discount","mewConfigObj","_contexts$configObj$m","handle","couponObj","requestOptions","url","_dataset","fee","totalAmount","decimalAmount","localCharges","noMoreThan2k","dataset","_msg","_res","payActivate","_payActivate","_context3","setStatus","coupon","configObj","channel_username","code","content_type","reqOptions","API_HOST_URL","detail","id","handleDBAction","calculateAmountAfterDeduction","gatwayCharges","parseFloat","toFixed","paymentMethod","authorization","card_type","last4","log","checkEmailInConfig","_ref4","_callee4","emailValue","_context4","getUserEmailInputModal","setCookie"],"mappings":"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"}
1
+ {"version":3,"file":"paystack.js","sources":["../../../../src/components/lib/paystack.ts"],"sourcesContent":["import {\r\n API_HOST_URL,\r\n calculateAmountAfterDeduction,\r\n reqOptions,\r\n setCookie,\r\n} from \"./helpFunction\";\r\nimport {\r\n getUserEmailInputModal,\r\n openConfirmModal,\r\n openToast,\r\n} from \"./modals/modals\";\r\nimport {\r\n PaystackConfigObjectType,\r\n PaystackConfigType,\r\n PaystackResponseType,\r\n PaymentContextType,\r\n} from \"@/types\";\r\n\r\n/**\r\n * Context for processing payments\r\n * @property {Event | null} [e] - The event object that triggered the payment\r\n * @property {Object} objects - Details about the item being purchased\r\n * @property {string} objects.title - Title of the item\r\n * @property {string | number | null} [objects.object_type] - Model ID of the object being purchased\r\n * @property {string | number | null} [objects.object_id] - Object ID of the object being purchased\r\n * @property {PaystackConfigObjectType} configObj - Configuration for PayStack\r\n * @property {PaymentMethodType} [paymentMethod] - Saved payment method if available\r\n * @property {Function} setStatus - Function to update UI status during payment process\r\n * @property {Function} handleDBAction - Callback for processing successful payments\r\n * @property {boolean} [defaultConfirm] - Whether to show a confirmation dialog\r\n * @property {string} label - Label for the payment (usually item title)\r\n * @property {string} [coupon] - Coupon code if applicable\r\n * @property {string} [defaultMsg] - Custom confirmation message\r\n * @property {number} [gatwayCharges] - Payment gateway charges percentage\r\n */\r\n\r\n/**\r\n * Configures the Paystack payment data for processing\r\n * @param obj - Object containing payment details\r\n * @returns PaystackConfig - Configured payment data\r\n */\r\nexport const paystackDataConfig = (\r\n obj: PaystackConfigObjectType\r\n): PaystackConfigType => ({\r\n authorization_code: obj.authorization_code,\r\n reference: new Date().getTime().toString(),\r\n email: obj.email,\r\n first_name: obj.first_name,\r\n last_name: obj.last_name,\r\n amount: obj.amount * 100, // Amount is in the country's lowest currency. E.g Kobo, so 20000 kobo = N200\r\n currency: obj.currency || \"NGN\",\r\n publicKey: process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY,\r\n key: process.env.NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY,\r\n callback_url: window.location.href,\r\n metadata: obj.metadata,\r\n});\r\n\r\n/**\r\n * Charges a customer using an existing authorization\r\n * @param data - Payment configuration data\r\n * @returns Promise with transaction data\r\n */\r\nexport const chargeAuthorization = async (\r\n data: PaystackConfigType\r\n): Promise<any> => {\r\n // This function tries to charge user with existing card\r\n const url = \"https://api.paystack.co/transaction/charge_authorization\";\r\n const options = {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: {\r\n Authorization: `Bearer ${process.env.NEXT_PUBLIC_PAYSTACK_SECRET_KEY}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n };\r\n\r\n try {\r\n const req = await fetch(url, options);\r\n const res = await req.json();\r\n\r\n if (res.data?.status === \"success\") {\r\n openToast(`Payment was successful with reference: ${res.data.reference}`);\r\n } else {\r\n openToast(`Payment failed with reference: ${res.data.reference}`, 400);\r\n }\r\n\r\n return res.data;\r\n } catch (error) {\r\n openToast(\"Payment processing error occurred\", 400);\r\n console.error(\"Payment authorization error:\", error);\r\n return { status: \"failed\", error };\r\n }\r\n};\r\n\r\n/**\r\n * Initiates payment with Paystack popup\r\n * @param config - Payment configuration\r\n * @returns Promise with payment response\r\n */\r\nexport const payWithPaystack = (\r\n config: PaystackConfigType\r\n): Promise<PaystackResponseType> => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n // Ensure PaystackPop is available\r\n if (!window.PaystackPop) {\r\n throw new Error(\"Paystack script not loaded\");\r\n }\r\n\r\n let handler = await window.PaystackPop.setup({\r\n ...config,\r\n callback: (response: PaystackResponseType) => {\r\n // This happens after the payment is completed successfully\r\n openToast(\"Payment complete! Reference: \" + response.reference);\r\n resolve(response);\r\n },\r\n onClose: () => {\r\n openToast(\"Transaction was not completed, window closed.\", 400);\r\n resolve({\r\n status: \"canceled\",\r\n cancelled: true,\r\n reference: config.reference,\r\n } as PaystackResponseType);\r\n },\r\n });\r\n handler.openIframe();\r\n } catch (error) {\r\n console.error(\"Paystack initialization error:\", error);\r\n openToast(\"Payment could not be initiated\", 400);\r\n resolve({\r\n status: \"failed\",\r\n cancelled: true,\r\n reference: config.reference,\r\n error,\r\n } as PaystackResponseType);\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Handles the complete payment submission process\r\n * @example\r\n * ```ts\r\n * handlePaymentSubmit({\r\n * openConfirm: true,\r\n * defaultConfirm: true,\r\n * defaultMsg: \"Are you sure you want to enroll for this course?\",\r\n * label: \"Course Name\",\r\n * objects: {\r\n * object_id: \"123\",\r\n * object_type: \"course\",\r\n * },\r\n * configObj: {\r\n * email: \"user@example.com\",\r\n * amount: 1000,\r\n * currency: \"NGN\",\r\n * authorization_code: \"1234567890\",\r\n * first_name: \"John\",\r\n * last_name: \"Doe\",\r\n * email: \"user@example.com\",\r\n * },\r\n * coupon: \"1234567890\",\r\n * gatwayCharges: 10,\r\n * paymentMethod: {\r\n * authorization: {\r\n * card_type: \"MasterCard\",\r\n * last4: \"1234\",\r\n * },\r\n * },\r\n * handleDBAction: (data: any) => {\r\n * console.log(data);\r\n * },\r\n * setStatus: (status: number) => {\r\n * console.log(status);\r\n * },\r\n * e: Event,\r\n * });\r\n * ```\r\n * @param contexts - Payment context information\r\n * @context This function orchestrates the entire payment flow from confirmation to processing\r\n */\r\nexport async function handlePaymentSubmit(\r\n contexts: PaymentContextType\r\n): Promise<void> {\r\n if (contexts.e) contexts.e.preventDefault();\r\n\r\n if (contexts.openConfirm && contexts.defaultConfirm) {\r\n let msg = `By clicking okay, you are enrolling for ${contexts.label} with id ${contexts.objects.object_id}.`;\r\n const confirm = await openConfirmModal(contexts.defaultMsg || msg);\r\n if (!confirm) return;\r\n }\r\n\r\n const makePayment = async (): Promise<void> => {\r\n contexts.setStatus(0);\r\n\r\n // Check if contexts.coupon is valid\r\n let discount: number | undefined;\r\n let mewConfigObj: PaystackConfigObjectType;\r\n\r\n if (contexts.coupon) {\r\n const handle = contexts.configObj.metadata?.channel_username;\r\n const couponObj = JSON.stringify({\r\n code: contexts.coupon,\r\n email: contexts.configObj.email,\r\n content_type: contexts.configObj.content_type,\r\n object_id: contexts.configObj.object_id,\r\n });\r\n\r\n const requestOptions = reqOptions(\"POST\", couponObj, null, \"json\");\r\n const url = `${API_HOST_URL}coupons/${handle}/validate-coupon/`;\r\n\r\n try {\r\n const dataset = await fetch(url, requestOptions);\r\n const res = await dataset.json();\r\n\r\n discount = res.discount || 0;\r\n if (res.detail) {\r\n openToast(res.detail, 400);\r\n } else if (res.id) {\r\n openToast(`${discount}% token was applied.`);\r\n }\r\n } catch (error) {\r\n console.error(\"Coupon validation error:\", error);\r\n openToast(\"Could not validate coupon\", 400);\r\n }\r\n }\r\n\r\n // Remove the discount from actual amount\r\n if (discount) {\r\n if (discount === 100) {\r\n contexts.handleDBAction({ reference: `COUPON__${contexts.coupon}` });\r\n contexts.setStatus(1);\r\n return;\r\n }\r\n\r\n const amount = calculateAmountAfterDeduction(\r\n contexts.configObj.amount,\r\n discount\r\n );\r\n\r\n openToast(amount.detail, 400);\r\n mewConfigObj = {\r\n ...contexts.configObj,\r\n ...amount,\r\n };\r\n } else {\r\n mewConfigObj = contexts.configObj;\r\n }\r\n\r\n // Add paystack charges\r\n if (contexts.gatwayCharges) {\r\n const fee = contexts.gatwayCharges / 100;\r\n // Calculate the amount to charge so that after the fee deduction, it matches the intended amount\r\n const totalAmount = mewConfigObj.amount / (1 - fee);\r\n // Returns the amount rounded to 2 decimal places\r\n const decimalAmount = parseFloat(totalAmount.toFixed(2));\r\n\r\n // Local transactions fees are capped at ₦2000, meaning that's the absolute maximum you'll ever pay in fees per transaction\r\n const localCharges = decimalAmount - mewConfigObj.amount;\r\n\r\n // Only charge 2k if charges exceed threshold\r\n const noMoreThan2k =\r\n localCharges > 2000 ? mewConfigObj.amount + 2000 : decimalAmount;\r\n\r\n mewConfigObj.amount = noMoreThan2k;\r\n }\r\n\r\n const dataset = paystackDataConfig(mewConfigObj);\r\n\r\n if (mewConfigObj.amount) {\r\n if (mewConfigObj.authorization_code && contexts.paymentMethod) {\r\n // Ask if user wants to use existing payment method\r\n const msg = `Would you prefer we charge your existing ${contexts.paymentMethod.authorization.card_type} card that ends with ${contexts.paymentMethod.last4}?`;\r\n const confirm = await openConfirmModal(msg, true);\r\n\r\n if (confirm) {\r\n // Charge user with existing card\r\n const res = await chargeAuthorization(dataset);\r\n contexts.handleDBAction(res);\r\n } else {\r\n // Request for user card details\r\n const payActivate = await payWithPaystack(dataset);\r\n\r\n contexts.handleDBAction(payActivate);\r\n }\r\n } else {\r\n // Request for user card details if payment method doesn't exist\r\n console.log(\"Pay with paystack: \");\r\n const payActivate = await payWithPaystack(dataset);\r\n contexts.handleDBAction(payActivate);\r\n }\r\n } else {\r\n // If cohort is free, don't request for payment\r\n contexts.handleDBAction();\r\n }\r\n\r\n contexts.setStatus(1);\r\n };\r\n\r\n // Get user email input if doesn't exist\r\n const checkEmailInConfig = async (): Promise<void> => {\r\n if (!contexts.configObj.email) {\r\n const emailValue = await getUserEmailInputModal(contexts.label);\r\n if (emailValue) {\r\n contexts.configObj.email = emailValue;\r\n setCookie(\"email\", emailValue, 2); // store for signup use\r\n makePayment();\r\n } else {\r\n openToast(\"You need to enter a valid email!\", 400);\r\n await checkEmailInConfig();\r\n }\r\n } else {\r\n setCookie(\"email\", contexts.configObj.email, 2); // store for signup use\r\n makePayment();\r\n }\r\n };\r\n\r\n checkEmailInConfig();\r\n}\r\n\r\n// Add PaystackPop to Window interface\r\ndeclare global {\r\n interface Window {\r\n PaystackPop: {\r\n setup: (config: any) => { openIframe: () => void };\r\n };\r\n }\r\n}\r\n"],"names":["paystackDataConfig","obj","authorization_code","reference","Date","getTime","toString","email","first_name","last_name","amount","currency","publicKey","process","env","NEXT_PUBLIC_PAYSTACK_SECRET_KEY","key","NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY","callback_url","window","location","href","metadata","chargeAuthorization","_ref","_asyncToGenerator","_regeneratorRuntime","regeneratorRuntime","mark","_callee","data","options","_res$data","req","res","wrap","_context","prev","next","method","body","JSON","stringify","headers","Authorization","concat","fetch","sent","json","status","openToast","abrupt","t0","console","error","stop","_x","apply","this","arguments","payWithPaystack","config","Promise","_ref2","_callee2","resolve","_context2","PaystackPop","Error","setup","_objectSpread","callback","response","onClose","cancelled","openIframe","_x2","_handlePaymentSubmit","asyncToGenerator","_callee5","contexts","msg","makePayment","_checkEmailInConfig","_context5","e","preventDefault","openConfirm","defaultConfirm","label","objects","object_id","openConfirmModal","defaultMsg","_ref3","_callee3","discount","mewConfigObj","_contexts$configObj$m","handle","couponObj","requestOptions","url","_dataset","fee","totalAmount","decimalAmount","localCharges","noMoreThan2k","dataset","_msg","_res","payActivate","_payActivate","_context3","setStatus","coupon","configObj","channel_username","code","content_type","reqOptions","API_HOST_URL","detail","id","handleDBAction","calculateAmountAfterDeduction","objectSpread2","gatwayCharges","parseFloat","toFixed","paymentMethod","authorization","card_type","last4","log","checkEmailInConfig","_ref4","_callee4","emailValue","_context4","getUserEmailInputModal","setCookie","handlePaymentSubmit","_x3"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{asyncToGenerator as r,regeneratorRuntime as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";var n=function(){var n=r(e().mark((function r(n,t){var u,a,s;return e().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(a=t.headers["x-instincthub-next-header"],s=t.headers.username,(null==n||null===(u=n.user)||void 0===u||null===(u=u.name)||void 0===u?void 0:u.username)===s&&a===process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER){r.next=4;break}return r.abrupt("return",!1);case 4:return r.abrupt("return",!0);case 5:case"end":return r.stop()}}),r)})));return function(r,e){return n.apply(this,arguments)}}(),t=function(){var n=r(e().mark((function r(n){return e().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(n.headers["x-instincthub-next-header"]===process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER){r.next=3;break}return r.abrupt("return",!1);case 3:return r.abrupt("return",!0);case 4:case"end":return r.stop()}}),r)})));return function(r){return n.apply(this,arguments)}}(),u=function(r,e){return r.find((function(r){return e}))};export{u as findPermissions,t as headerKeyPermission,n as headerUsernamePermission};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_rollupPluginBabelHelpers.js"),r=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(n,t){var u,a,s;return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=t.headers["x-instincthub-next-header"],s=t.headers.username,(null==n||null===(u=n.user)||void 0===u||null===(u=u.name)||void 0===u?void 0:u.username)===s&&a===process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER){e.next=4;break}return e.abrupt("return",!1);case 4:return e.abrupt("return",!0);case 5:case"end":return e.stop()}}),r)})));return function(e,n){return r.apply(this,arguments)}}(),n=function(){var r=e.asyncToGenerator(e.regeneratorRuntime().mark((function r(n){return e.regeneratorRuntime().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n.headers["x-instincthub-next-header"]===process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER){e.next=3;break}return e.abrupt("return",!1);case 3:return e.abrupt("return",!0);case 4:case"end":return e.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}();exports.findPermissions=function(e,r){return e.find((function(e){return r}))},exports.headerKeyPermission=n,exports.headerUsernamePermission=r;
2
2
  //# sourceMappingURL=permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sources":["../../../../src/components/lib/permissions.ts"],"sourcesContent":["import { NextApiRequest } from \"next\";\r\n\r\ninterface Session {\r\n user: {\r\n name: {\r\n username: string;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Validates if the request has valid username and custom header\r\n * @param session - User session from NextAuth\r\n * @param req - Next.js API request object\r\n * @returns Promise<boolean> - True if the request has valid permissions\r\n */\r\nexport const headerUsernamePermission = async (\r\n session: Session | null,\r\n req: NextApiRequest\r\n): Promise<boolean> => {\r\n const customHeader = req.headers[\"x-instincthub-next-header\"] as string;\r\n const headerUsername = req.headers[\"username\"] as string;\r\n\r\n // Fixed logic error in the original code (negation was incorrectly applied)\r\n if (\r\n session?.user?.name?.username !== headerUsername ||\r\n customHeader !== process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Validates if the request has a valid custom header\r\n * @param req - Next.js API request object\r\n * @returns Promise<boolean> - True if the request has a valid header\r\n */\r\nexport const headerKeyPermission = async (\r\n req: NextApiRequest\r\n): Promise<boolean> => {\r\n const customHeader = req.headers[\"x-instincthub-next-header\"] as string;\r\n\r\n if (customHeader !== process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Finds a permission in an array of permissions\r\n * @example\r\n * ```ts\r\n * findPermissions(REGISTRAR_PERMISSION, instructorType)\r\n * ```\r\n * @param permission - Array of permissions\r\n * @param option - Permission to find\r\n * @returns string | undefined - Permission if found, undefined if not found\r\n */\r\nexport const findPermissions = (\r\n permission: string[],\r\n option: string\r\n): string | undefined => {\r\n // Get array of permissions and user option and check if exist.\r\n return permission.find((i) => (i = option));\r\n};\r\n"],"names":["headerUsernamePermission","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","session","req","_session$user","customHeader","headerUsername","wrap","_context","prev","next","headers","user","name","username","process","env","NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER","abrupt","stop","_x","_x2","apply","this","arguments","headerKeyPermission","_ref2","_callee2","_context2","_x3","findPermissions","permission","option","find","i"],"mappings":"8GAgBaA,EAAwB,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,MAAG,SAAAC,EACtCC,EACAC,GAAmB,IAAAC,EAAAC,EAAAC,EAAA,OAAAP,IAAAQ,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAKnB,GAHML,EAAeF,EAAIQ,QAAQ,6BAC3BL,EAAiBH,EAAIQ,QAAkB,UAI3CT,SAAa,QAANE,EAAPF,EAASU,YAAI,IAAAR,GAAMA,QAANA,EAAbA,EAAeS,YAAfT,IAAmBA,OAAnBA,EAAAA,EAAqBU,YAAaR,GAClCD,IAAiBU,QAAQC,IAAIC,sCAAqC,CAAAT,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAU,OAAA,UAE3D,GAAK,KAAA,EAAA,OAAAV,EAAAU,OAAA,UAGP,GAAI,KAAA,EAAA,IAAA,MAAA,OAAAV,EAAAW,OAAA,GAAAlB,EACZ,KAAA,OAAA,SAhBoCmB,EAAAC,GAAA,OAAAxB,EAAAyB,MAAAC,KAAAC,UAAA,CAAA,CAAA,GAuBxBC,EAAmB,WAAA,IAAAC,EAAA5B,EAAAC,IAAAC,MAAG,SAAA2B,EACjCxB,GAAmB,OAAAJ,IAAAQ,MAAA,SAAAqB,GAAA,cAAAA,EAAAnB,KAAAmB,EAAAlB,MAAA,KAAA,EAEoD,GAAlDP,EAAIQ,QAAQ,+BAEZI,QAAQC,IAAIC,sCAAqC,CAAAW,EAAAlB,KAAA,EAAA,KAAA,CAAA,OAAAkB,EAAAV,OAAA,UAC7D,GAAK,KAAA,EAAA,OAAAU,EAAAV,OAAA,UAGP,GAAI,KAAA,EAAA,IAAA,MAAA,OAAAU,EAAAT,OAAA,GAAAQ,EACZ,KAAA,OAVYF,SAAmBI,GAAA,OAAAH,EAAAJ,MAAAC,KAAAC,UAAA,CAAA,CAAA,GAsBnBM,EAAkB,SAC7BC,EACAC,GAGA,OAAOD,EAAWE,MAAK,SAACC,GAAC,OAAUF,CAAM,GAC3C"}
1
+ {"version":3,"file":"permissions.js","sources":["../../../../src/components/lib/permissions.ts"],"sourcesContent":["import { NextApiRequest } from \"next\";\r\n\r\ninterface Session {\r\n user: {\r\n name: {\r\n username: string;\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Validates if the request has valid username and custom header\r\n * @param session - User session from NextAuth\r\n * @param req - Next.js API request object\r\n * @returns Promise<boolean> - True if the request has valid permissions\r\n */\r\nexport const headerUsernamePermission = async (\r\n session: Session | null,\r\n req: NextApiRequest\r\n): Promise<boolean> => {\r\n const customHeader = req.headers[\"x-instincthub-next-header\"] as string;\r\n const headerUsername = req.headers[\"username\"] as string;\r\n\r\n // Fixed logic error in the original code (negation was incorrectly applied)\r\n if (\r\n session?.user?.name?.username !== headerUsername ||\r\n customHeader !== process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Validates if the request has a valid custom header\r\n * @param req - Next.js API request object\r\n * @returns Promise<boolean> - True if the request has a valid header\r\n */\r\nexport const headerKeyPermission = async (\r\n req: NextApiRequest\r\n): Promise<boolean> => {\r\n const customHeader = req.headers[\"x-instincthub-next-header\"] as string;\r\n\r\n if (customHeader !== process.env.NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Finds a permission in an array of permissions\r\n * @example\r\n * ```ts\r\n * findPermissions(REGISTRAR_PERMISSION, instructorType)\r\n * ```\r\n * @param permission - Array of permissions\r\n * @param option - Permission to find\r\n * @returns string | undefined - Permission if found, undefined if not found\r\n */\r\nexport const findPermissions = (\r\n permission: string[],\r\n option: string\r\n): string | undefined => {\r\n // Get array of permissions and user option and check if exist.\r\n return permission.find((i) => (i = option));\r\n};\r\n"],"names":["headerUsernamePermission","_ref","_asyncToGenerator","asyncToGenerator","_regeneratorRuntime","mark","_callee","session","req","_session$user","customHeader","headerUsername","regeneratorRuntime","wrap","_context","prev","next","headers","user","name","username","process","env","NEXT_PUBLIC_X_INSTINCTHUB_NEXT_HEADER","abrupt","stop","_x","_x2","apply","this","arguments","headerKeyPermission","_ref2","_callee2","_context2","_x3","permission","option","find","i"],"mappings":"oIAgBaA,EAAwB,WAAA,IAAAC,EAAAC,EAAAC,iBAAAC,uBAAAC,MAAG,SAAAC,EACtCC,EACAC,GAAmB,IAAAC,EAAAC,EAAAC,EAAA,OAAAP,EAAAQ,qBAAAC,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAKnB,GAHMN,EAAeF,EAAIS,QAAQ,6BAC3BN,EAAiBH,EAAIS,QAAkB,UAI3CV,SAAa,QAANE,EAAPF,EAASW,YAAI,IAAAT,GAAMA,QAANA,EAAbA,EAAeU,YAAfV,IAAmBA,OAAnBA,EAAAA,EAAqBW,YAAaT,GAClCD,IAAiBW,QAAQC,IAAIC,sCAAqC,CAAAT,EAAAE,KAAA,EAAA,KAAA,CAAA,OAAAF,EAAAU,OAAA,UAE3D,GAAK,KAAA,EAAA,OAAAV,EAAAU,OAAA,UAGP,GAAI,KAAA,EAAA,IAAA,MAAA,OAAAV,EAAAW,OAAA,GAAAnB,EACZ,KAAA,OAAA,SAhBoCoB,EAAAC,GAAA,OAAA1B,EAAA2B,MAAAC,KAAAC,UAAA,CAAA,CAAA,GAuBxBC,EAAmB,WAAA,IAAAC,EAAA9B,EAAAA,iBAAAE,EAAAQ,qBAAAP,MAAG,SAAA4B,EACjCzB,GAAmB,OAAAJ,EAAAQ,qBAAAC,MAAA,SAAAqB,GAAA,cAAAA,EAAAnB,KAAAmB,EAAAlB,MAAA,KAAA,EAEoD,GAAlDR,EAAIS,QAAQ,+BAEZI,QAAQC,IAAIC,sCAAqC,CAAAW,EAAAlB,KAAA,EAAA,KAAA,CAAA,OAAAkB,EAAAV,OAAA,UAC7D,GAAK,KAAA,EAAA,OAAAU,EAAAV,OAAA,UAGP,GAAI,KAAA,EAAA,IAAA,MAAA,OAAAU,EAAAT,OAAA,GAAAQ,EACZ,KAAA,OAVYF,SAAmBI,GAAA,OAAAH,EAAAJ,MAAAC,KAAAC,UAAA,CAAA,CAAA,2BAsBD,SAC7BM,EACAC,GAGA,OAAOD,EAAWE,MAAK,SAACC,GAAC,OAAUF,CAAM,GAC3C"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r}from"../../../../_virtual/_rollupPluginBabelHelpers.js";function e(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.baseUrl,t=void 0===n?"undefined"!=typeof window?window.location.href:"":n,o=e.preserveHash,a=void 0===o||o;e.encode;try{var i=new URL(t),c=new URLSearchParams(i.search),u=r.key,s=r.value,l=r.action;switch(l){case"add":null!=s&&c.append(u,String(s));break;case"update":null!=s&&c.set(u,String(s));break;case"remove":c.delete(u);break;case"toggle":c.has(u)?c.delete(u):null!=s&&c.set(u,String(s));break;case"clear":c.forEach((function(r,e){c.delete(e)}));break;default:throw new Error("Unsupported action: ".concat(l))}return i.search=c.toString(),a||(i.hash=""),i.toString()}catch(r){return console.error("URL manipulation error:",r),t}}function n(r){try{var e=r||("undefined"!=typeof window?window.location.href:""),n=new URL(e),t={};return n.searchParams.forEach((function(r,e){t[e]?Array.isArray(t[e])?t[e].push(r):t[e]=[t[e],r]:t[e]=r})),t}catch(r){return console.error("Error parsing query parameters:",r),{}}}function t(r,e){try{var n=e||("undefined"!=typeof window?window.location.href:"");return new URL(n).searchParams.get(r)}catch(r){return console.error("Error getting query parameter:",r),null}}function o(r,e){try{var n=e||("undefined"!=typeof window?window.location.href:"");return new URL(n).searchParams.has(r)}catch(r){return console.error("Error checking query parameter:",r),!1}}function a(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{t.encode;var o=new URL(e,"undefined"!=typeof window?window.location.origin:"http://localhost");return Object.entries(n).forEach((function(e){var n=r(e,2),t=n[0],a=n[1];null!=a&&(Array.isArray(a)?a.forEach((function(r){return o.searchParams.append(t,String(r))})):o.searchParams.set(t,String(a)))})),o.toString()}catch(r){return console.error("Error building URL:",r),e}}function i(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("undefined"!=typeof window){var t=n.replace,o=void 0!==t&&t,a=e(r,n);o?window.history.replaceState({},"",a):window.history.pushState({},"",a)}else console.warn("navigateWithQuery can only be used in browser environment")}function c(e){var n={};return Object.entries(e).forEach((function(e){var t=r(e,2),o=t[0],a=t[1];null!=a&&""!==a&&(n[o]=String(a))})),a(window.location.pathname,n)}function u(r){return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?e({key:"page",value:r,action:"update"}):a(window.location.pathname,{page:r.toString()})}function s(r){try{var e=r||("undefined"!=typeof window?window.location.href:""),n=new URL(e),t=new URLSearchParams;return n.searchParams.forEach((function(r,e){r&&""!==r.trim()&&t.set(e,r)})),n.search=t.toString(),n.toString()}catch(e){return console.error("Error cleaning URL:",e),r||""}}export{c as buildDataFilterUrl,u as buildPaginationUrl,a as buildUrl,s as cleanUrl,t as getQueryParam,n as getQueryParams,o as hasQueryParam,i as navigateWithQuery,e as urlQueryHelper};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../../../../_virtual/_rollupPluginBabelHelpers.js");function e(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.baseUrl,t=void 0===n?"undefined"!=typeof window?window.location.href:"":n,a=e.preserveHash,o=void 0===a||a;e.encode;try{var i=new URL(t),c=new URLSearchParams(i.search),s=r.key,u=r.value,l=r.action;switch(l){case"add":null!=u&&c.append(s,String(u));break;case"update":null!=u&&c.set(s,String(u));break;case"remove":c.delete(s);break;case"toggle":c.has(s)?c.delete(s):null!=u&&c.set(s,String(u));break;case"clear":c.forEach((function(r,e){c.delete(e)}));break;default:throw new Error("Unsupported action: ".concat(l))}return i.search=c.toString(),o||(i.hash=""),i.toString()}catch(r){return console.error("URL manipulation error:",r),t}}function n(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{t.encode;var a=new URL(e,"undefined"!=typeof window?window.location.origin:"http://localhost");return Object.entries(n).forEach((function(e){var n=r.slicedToArray(e,2),t=n[0],o=n[1];null!=o&&(Array.isArray(o)?o.forEach((function(r){return a.searchParams.append(t,String(r))})):a.searchParams.set(t,String(o)))})),a.toString()}catch(r){return console.error("Error building URL:",r),e}}exports.buildDataFilterUrl=function(e){var t={};return Object.entries(e).forEach((function(e){var n=r.slicedToArray(e,2),a=n[0],o=n[1];null!=o&&""!==o&&(t[a]=String(o))})),n(window.location.pathname,t)},exports.buildPaginationUrl=function(r){return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?e({key:"page",value:r,action:"update"}):n(window.location.pathname,{page:r.toString()})},exports.buildUrl=n,exports.cleanUrl=function(r){try{var e=r||("undefined"!=typeof window?window.location.href:""),n=new URL(e),t=new URLSearchParams;return n.searchParams.forEach((function(r,e){r&&""!==r.trim()&&t.set(e,r)})),n.search=t.toString(),n.toString()}catch(e){return console.error("Error cleaning URL:",e),r||""}},exports.getQueryParam=function(r,e){try{var n=e||("undefined"!=typeof window?window.location.href:"");return new URL(n).searchParams.get(r)}catch(r){return console.error("Error getting query parameter:",r),null}},exports.getQueryParams=function(r){try{var e=r||("undefined"!=typeof window?window.location.href:""),n=new URL(e),t={};return n.searchParams.forEach((function(r,e){t[e]?Array.isArray(t[e])?t[e].push(r):t[e]=[t[e],r]:t[e]=r})),t}catch(r){return console.error("Error parsing query parameters:",r),{}}},exports.hasQueryParam=function(r,e){try{var n=e||("undefined"!=typeof window?window.location.href:"");return new URL(n).searchParams.has(r)}catch(r){return console.error("Error checking query parameter:",r),!1}},exports.navigateWithQuery=function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("undefined"!=typeof window){var t=n.replace,a=void 0!==t&&t,o=e(r,n);a?window.history.replaceState({},"",o):window.history.pushState({},"",o)}else console.warn("navigateWithQuery can only be used in browser environment")},exports.urlQueryHelper=e;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/lib/queryParameters/index.ts"],"sourcesContent":["/**\r\n * URL Query Parameter Helper for InstinctHub React UI\r\n * Handles adding, updating, removing, and manipulating URL query parameters\r\n */\r\n\r\nimport { QueryContextType } from \"@/types\";\r\n\r\n// Type definitions\r\n\r\ninterface QueryParams {\r\n [key: string]: string | string[] | undefined;\r\n}\r\n\r\ninterface UrlHelperOptions {\r\n baseUrl?: string;\r\n preserveHash?: boolean;\r\n encode?: boolean;\r\n}\r\n\r\n/**\r\n * Main URL query parameter helper function\r\n * @example\r\n * ```tsx\r\n * urlQueryHelper({ key: \"page\", value: 1, action: \"add\" });\r\n * ```\r\n * @param context - Object containing key, value, and action\r\n * @param options - Additional configuration options\r\n * @returns Updated URL string\r\n */\r\nexport function urlQueryHelper(\r\n context: QueryContextType,\r\n options: UrlHelperOptions = {}\r\n): string {\r\n const {\r\n baseUrl = typeof window !== \"undefined\" ? window.location.href : \"\",\r\n preserveHash = true,\r\n encode = true,\r\n } = options;\r\n\r\n try {\r\n const url = new URL(baseUrl);\r\n const params = new URLSearchParams(url.search);\r\n const { key, value, action } = context;\r\n\r\n // Perform the requested action\r\n switch (action) {\r\n case \"add\":\r\n if (value !== undefined && value !== null) {\r\n if (encode) {\r\n params.append(key, String(value));\r\n } else {\r\n params.append(key, String(value));\r\n }\r\n }\r\n break;\r\n\r\n case \"update\":\r\n if (value !== undefined && value !== null) {\r\n params.set(key, String(value));\r\n }\r\n break;\r\n\r\n case \"remove\":\r\n params.delete(key);\r\n break;\r\n\r\n case \"toggle\":\r\n if (params.has(key)) {\r\n params.delete(key);\r\n } else if (value !== undefined && value !== null) {\r\n params.set(key, String(value));\r\n }\r\n break;\r\n\r\n case \"clear\":\r\n // Clear all parameters\r\n params.forEach((_, paramKey) => {\r\n params.delete(paramKey);\r\n });\r\n break;\r\n\r\n default:\r\n throw new Error(`Unsupported action: ${action}`);\r\n }\r\n\r\n // Rebuild URL\r\n url.search = params.toString();\r\n\r\n // Handle hash preservation\r\n if (!preserveHash) {\r\n url.hash = \"\";\r\n }\r\n\r\n return url.toString();\r\n } catch (error) {\r\n console.error(\"URL manipulation error:\", error);\r\n return baseUrl;\r\n }\r\n}\r\n\r\n/**\r\n * Get all query parameters as an object\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Object with query parameters\r\n */\r\nexport function getQueryParams(url?: string): QueryParams {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n const params: QueryParams = {};\r\n\r\n urlObj.searchParams.forEach((value, key) => {\r\n if (params[key]) {\r\n // Handle multiple values for same key\r\n if (Array.isArray(params[key])) {\r\n (params[key] as string[]).push(value);\r\n } else {\r\n params[key] = [params[key] as string, value];\r\n }\r\n } else {\r\n params[key] = value;\r\n }\r\n });\r\n\r\n return params;\r\n } catch (error) {\r\n console.error(\"Error parsing query parameters:\", error);\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n * Get specific query parameter value\r\n * @param key - Parameter key to retrieve\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Parameter value or null if not found\r\n */\r\nexport function getQueryParam(key: string, url?: string): string | null {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n return urlObj.searchParams.get(key);\r\n } catch (error) {\r\n console.error(\"Error getting query parameter:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if a query parameter exists\r\n * @param key - Parameter key to check\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Boolean indicating if parameter exists\r\n */\r\nexport function hasQueryParam(key: string, url?: string): boolean {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n return urlObj.searchParams.has(key);\r\n } catch (error) {\r\n console.error(\"Error checking query parameter:\", error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Build URL from base path and parameters object\r\n * @param basePath - Base URL or path\r\n * @param params - Object of parameters to add\r\n * @param options - Additional configuration\r\n * @returns Complete URL string\r\n */\r\nexport function buildUrl(\r\n basePath: string,\r\n params: QueryParams,\r\n options: UrlHelperOptions = {}\r\n): string {\r\n try {\r\n const { encode = true } = options;\r\n const url = new URL(\r\n basePath,\r\n typeof window !== \"undefined\"\r\n ? window.location.origin\r\n : \"http://localhost\"\r\n );\r\n\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => url.searchParams.append(key, String(v)));\r\n } else {\r\n url.searchParams.set(key, String(value));\r\n }\r\n }\r\n });\r\n\r\n return url.toString();\r\n } catch (error) {\r\n console.error(\"Error building URL:\", error);\r\n return basePath;\r\n }\r\n}\r\n\r\n/**\r\n * Navigate to URL with updated query parameters (client-side only)\r\n * @example\r\n * ```tsx\r\n * navigateWithQuery({ key: \"page\", value: 1, action: \"add\" });\r\n * ```\r\n * @param context - Query context for manipulation\r\n * @param options - Navigation options\r\n */\r\nexport function navigateWithQuery(\r\n context: QueryContextType,\r\n options: UrlHelperOptions & { replace?: boolean } = {}\r\n): void {\r\n if (typeof window === \"undefined\") {\r\n console.warn(\"navigateWithQuery can only be used in browser environment\");\r\n return;\r\n }\r\n\r\n const { replace = false } = options;\r\n const newUrl = urlQueryHelper(context, options);\r\n\r\n if (replace) {\r\n window.history.replaceState({}, \"\", newUrl);\r\n } else {\r\n window.history.pushState({}, \"\", newUrl);\r\n }\r\n}\r\n\r\n/**\r\n * InstinctHub-specific helper for course filtering\r\n * @example\r\n * ```tsx\r\n * buildDataFilterUrl({ subject: \"Math\", level: \"100\", instructor: \"John Doe\" });\r\n * ```\r\n * @param filters - Course filter parameters\r\n * @returns URL with course filters applied\r\n */\r\nexport function buildDataFilterUrl(filters: {\r\n subject?: string;\r\n level?: string;\r\n instructor?: string;\r\n search?: string;\r\n page?: number;\r\n sort?: string;\r\n}): string {\r\n const params: QueryParams = {};\r\n\r\n Object.entries(filters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== \"\") {\r\n params[key] = String(value);\r\n }\r\n });\r\n\r\n return buildUrl(window.location.pathname, params);\r\n}\r\n\r\n/**\r\n * InstinctHub-specific helper for pagination\r\n * @example\r\n * ```tsx\r\n * buildPaginationUrl(1);\r\n * ```\r\n * @param page - Page number\r\n * @param preserveFilters - Whether to keep existing filters\r\n * @returns URL with pagination applied\r\n */\r\nexport function buildPaginationUrl(\r\n page: number,\r\n preserveFilters = true\r\n): string {\r\n if (preserveFilters) {\r\n return urlQueryHelper({ key: \"page\", value: page, action: \"update\" });\r\n } else {\r\n return buildUrl(window.location.pathname, { page: page.toString() });\r\n }\r\n}\r\n\r\n/**\r\n * Clean URL by removing empty or null parameters\r\n * @example\r\n * ```tsx\r\n * cleanUrl();\r\n * ```\r\n * @param url - URL to clean (defaults to current URL)\r\n * @returns Cleaned URL string\r\n */\r\nexport function cleanUrl(url?: string): string {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n const params = new URLSearchParams();\r\n\r\n urlObj.searchParams.forEach((value, key) => {\r\n if (value && value.trim() !== \"\") {\r\n params.set(key, value);\r\n }\r\n });\r\n\r\n urlObj.search = params.toString();\r\n return urlObj.toString();\r\n } catch (error) {\r\n console.error(\"Error cleaning URL:\", error);\r\n return url || \"\";\r\n }\r\n}\r\n"],"names":["urlQueryHelper","context","options","_options$baseUrl","baseUrl","window","location","href","_options$preserveHash","preserveHash","encode","url","URL","params","URLSearchParams","search","key","value","action","append","String","set","has","forEach","_","paramKey","Error","concat","toString","hash","error","console","getQueryParams","targetUrl","urlObj","searchParams","Array","isArray","push","getQueryParam","get","hasQueryParam","buildUrl","basePath","origin","Object","entries","_ref","_ref2","_slicedToArray","v","navigateWithQuery","_options$replace","replace","newUrl","history","replaceState","pushState","warn","buildDataFilterUrl","filters","_ref3","_ref4","pathname","buildPaginationUrl","page","arguments","length","undefined","cleanUrl","trim"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/lib/queryParameters/index.ts"],"sourcesContent":["/**\r\n * URL Query Parameter Helper for InstinctHub React UI\r\n * Handles adding, updating, removing, and manipulating URL query parameters\r\n */\r\n\r\nimport { QueryContextType } from \"@/types\";\r\n\r\n// Type definitions\r\n\r\ninterface QueryParams {\r\n [key: string]: string | string[] | undefined;\r\n}\r\n\r\ninterface UrlHelperOptions {\r\n baseUrl?: string;\r\n preserveHash?: boolean;\r\n encode?: boolean;\r\n}\r\n\r\n/**\r\n * Main URL query parameter helper function\r\n * @example\r\n * ```tsx\r\n * urlQueryHelper({ key: \"page\", value: 1, action: \"add\" });\r\n * ```\r\n * @param context - Object containing key, value, and action\r\n * @param options - Additional configuration options\r\n * @returns Updated URL string\r\n */\r\nexport function urlQueryHelper(\r\n context: QueryContextType,\r\n options: UrlHelperOptions = {}\r\n): string {\r\n const {\r\n baseUrl = typeof window !== \"undefined\" ? window.location.href : \"\",\r\n preserveHash = true,\r\n encode = true,\r\n } = options;\r\n\r\n try {\r\n const url = new URL(baseUrl);\r\n const params = new URLSearchParams(url.search);\r\n const { key, value, action } = context;\r\n\r\n // Perform the requested action\r\n switch (action) {\r\n case \"add\":\r\n if (value !== undefined && value !== null) {\r\n if (encode) {\r\n params.append(key, String(value));\r\n } else {\r\n params.append(key, String(value));\r\n }\r\n }\r\n break;\r\n\r\n case \"update\":\r\n if (value !== undefined && value !== null) {\r\n params.set(key, String(value));\r\n }\r\n break;\r\n\r\n case \"remove\":\r\n params.delete(key);\r\n break;\r\n\r\n case \"toggle\":\r\n if (params.has(key)) {\r\n params.delete(key);\r\n } else if (value !== undefined && value !== null) {\r\n params.set(key, String(value));\r\n }\r\n break;\r\n\r\n case \"clear\":\r\n // Clear all parameters\r\n params.forEach((_, paramKey) => {\r\n params.delete(paramKey);\r\n });\r\n break;\r\n\r\n default:\r\n throw new Error(`Unsupported action: ${action}`);\r\n }\r\n\r\n // Rebuild URL\r\n url.search = params.toString();\r\n\r\n // Handle hash preservation\r\n if (!preserveHash) {\r\n url.hash = \"\";\r\n }\r\n\r\n return url.toString();\r\n } catch (error) {\r\n console.error(\"URL manipulation error:\", error);\r\n return baseUrl;\r\n }\r\n}\r\n\r\n/**\r\n * Get all query parameters as an object\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Object with query parameters\r\n */\r\nexport function getQueryParams(url?: string): QueryParams {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n const params: QueryParams = {};\r\n\r\n urlObj.searchParams.forEach((value, key) => {\r\n if (params[key]) {\r\n // Handle multiple values for same key\r\n if (Array.isArray(params[key])) {\r\n (params[key] as string[]).push(value);\r\n } else {\r\n params[key] = [params[key] as string, value];\r\n }\r\n } else {\r\n params[key] = value;\r\n }\r\n });\r\n\r\n return params;\r\n } catch (error) {\r\n console.error(\"Error parsing query parameters:\", error);\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n * Get specific query parameter value\r\n * @param key - Parameter key to retrieve\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Parameter value or null if not found\r\n */\r\nexport function getQueryParam(key: string, url?: string): string | null {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n return urlObj.searchParams.get(key);\r\n } catch (error) {\r\n console.error(\"Error getting query parameter:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if a query parameter exists\r\n * @param key - Parameter key to check\r\n * @param url - URL string to parse (defaults to current URL)\r\n * @returns Boolean indicating if parameter exists\r\n */\r\nexport function hasQueryParam(key: string, url?: string): boolean {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n return urlObj.searchParams.has(key);\r\n } catch (error) {\r\n console.error(\"Error checking query parameter:\", error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Build URL from base path and parameters object\r\n * @param basePath - Base URL or path\r\n * @param params - Object of parameters to add\r\n * @param options - Additional configuration\r\n * @returns Complete URL string\r\n */\r\nexport function buildUrl(\r\n basePath: string,\r\n params: QueryParams,\r\n options: UrlHelperOptions = {}\r\n): string {\r\n try {\r\n const { encode = true } = options;\r\n const url = new URL(\r\n basePath,\r\n typeof window !== \"undefined\"\r\n ? window.location.origin\r\n : \"http://localhost\"\r\n );\r\n\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => url.searchParams.append(key, String(v)));\r\n } else {\r\n url.searchParams.set(key, String(value));\r\n }\r\n }\r\n });\r\n\r\n return url.toString();\r\n } catch (error) {\r\n console.error(\"Error building URL:\", error);\r\n return basePath;\r\n }\r\n}\r\n\r\n/**\r\n * Navigate to URL with updated query parameters (client-side only)\r\n * @example\r\n * ```tsx\r\n * navigateWithQuery({ key: \"page\", value: 1, action: \"add\" });\r\n * ```\r\n * @param context - Query context for manipulation\r\n * @param options - Navigation options\r\n */\r\nexport function navigateWithQuery(\r\n context: QueryContextType,\r\n options: UrlHelperOptions & { replace?: boolean } = {}\r\n): void {\r\n if (typeof window === \"undefined\") {\r\n console.warn(\"navigateWithQuery can only be used in browser environment\");\r\n return;\r\n }\r\n\r\n const { replace = false } = options;\r\n const newUrl = urlQueryHelper(context, options);\r\n\r\n if (replace) {\r\n window.history.replaceState({}, \"\", newUrl);\r\n } else {\r\n window.history.pushState({}, \"\", newUrl);\r\n }\r\n}\r\n\r\n/**\r\n * InstinctHub-specific helper for course filtering\r\n * @example\r\n * ```tsx\r\n * buildDataFilterUrl({ subject: \"Math\", level: \"100\", instructor: \"John Doe\" });\r\n * ```\r\n * @param filters - Course filter parameters\r\n * @returns URL with course filters applied\r\n */\r\nexport function buildDataFilterUrl(filters: {\r\n subject?: string;\r\n level?: string;\r\n instructor?: string;\r\n search?: string;\r\n page?: number;\r\n sort?: string;\r\n}): string {\r\n const params: QueryParams = {};\r\n\r\n Object.entries(filters).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== \"\") {\r\n params[key] = String(value);\r\n }\r\n });\r\n\r\n return buildUrl(window.location.pathname, params);\r\n}\r\n\r\n/**\r\n * InstinctHub-specific helper for pagination\r\n * @example\r\n * ```tsx\r\n * buildPaginationUrl(1);\r\n * ```\r\n * @param page - Page number\r\n * @param preserveFilters - Whether to keep existing filters\r\n * @returns URL with pagination applied\r\n */\r\nexport function buildPaginationUrl(\r\n page: number,\r\n preserveFilters = true\r\n): string {\r\n if (preserveFilters) {\r\n return urlQueryHelper({ key: \"page\", value: page, action: \"update\" });\r\n } else {\r\n return buildUrl(window.location.pathname, { page: page.toString() });\r\n }\r\n}\r\n\r\n/**\r\n * Clean URL by removing empty or null parameters\r\n * @example\r\n * ```tsx\r\n * cleanUrl();\r\n * ```\r\n * @param url - URL to clean (defaults to current URL)\r\n * @returns Cleaned URL string\r\n */\r\nexport function cleanUrl(url?: string): string {\r\n try {\r\n const targetUrl =\r\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\r\n const urlObj = new URL(targetUrl);\r\n const params = new URLSearchParams();\r\n\r\n urlObj.searchParams.forEach((value, key) => {\r\n if (value && value.trim() !== \"\") {\r\n params.set(key, value);\r\n }\r\n });\r\n\r\n urlObj.search = params.toString();\r\n return urlObj.toString();\r\n } catch (error) {\r\n console.error(\"Error cleaning URL:\", error);\r\n return url || \"\";\r\n }\r\n}\r\n"],"names":["urlQueryHelper","context","options","_options$baseUrl","baseUrl","window","location","href","_options$preserveHash","preserveHash","encode","url","URL","params","URLSearchParams","search","key","value","action","append","String","set","has","forEach","_","paramKey","Error","concat","toString","hash","error","console","buildUrl","basePath","origin","Object","entries","_ref","_ref2","_slicedToArray","Array","isArray","v","searchParams","filters","_ref3","_ref4","pathname","page","arguments","length","undefined","targetUrl","urlObj","trim","get","push","_options$replace","replace","newUrl","history","replaceState","pushState","warn"],"mappings":"gJA6BgBA,EACdC,GAC8B,IAA9BC,yDAA4B,CAAA,EAE5BC,EAIID,EAHFE,QAAAA,OAAO,IAAAD,EAAqB,oBAAXE,OAAyBA,OAAOC,SAASC,KAAO,GAAEJ,EAAAK,EAGjEN,EAFFO,aAAAA,OAAe,IAAHD,GAAOA,EAEjBN,EADFQ,OAGF,IACE,IAAMC,EAAM,IAAIC,IAAIR,GACdS,EAAS,IAAIC,gBAAgBH,EAAII,QAC/BC,EAAuBf,EAAvBe,IAAKC,EAAkBhB,EAAlBgB,MAAOC,EAAWjB,EAAXiB,OAGpB,OAAQA,GACN,IAAK,MACCD,SAEAJ,EAAOM,OAAOH,EAAKI,OAAOH,IAK9B,MAEF,IAAK,SACCA,SACFJ,EAAOQ,IAAIL,EAAKI,OAAOH,IAEzB,MAEF,IAAK,SACHJ,EAAM,OAAQG,GACd,MAEF,IAAK,SACCH,EAAOS,IAAIN,GACbH,EAAM,OAAQG,GACLC,SACTJ,EAAOQ,IAAIL,EAAKI,OAAOH,IAEzB,MAEF,IAAK,QAEHJ,EAAOU,SAAQ,SAACC,EAAGC,GACjBZ,EAAM,OAAQY,EAChB,IACA,MAEF,QACE,MAAM,IAAIC,MAAK,uBAAAC,OAAwBT,IAW3C,OAPAP,EAAII,OAASF,EAAOe,WAGfnB,IACHE,EAAIkB,KAAO,IAGNlB,EAAIiB,UACZ,CAAC,MAAOE,GAEP,OADAC,QAAQD,MAAM,0BAA2BA,GAClC1B,CACR,CACH,CA6EM,SAAU4B,EACdC,EACApB,GAC8B,IAA9BX,yDAA4B,CAAA,EAE5B,IAC4BA,EAAlBQ,OAAR,IACMC,EAAM,IAAIC,IACdqB,EACkB,oBAAX5B,OACHA,OAAOC,SAAS4B,OAChB,oBAaN,OAVAC,OAAOC,QAAQvB,GAAQU,SAAQ,SAAAc,GAAiB,IAAAC,EAAAC,EAAAA,cAAAF,EAAA,GAAfrB,EAAGsB,EAAA,GAAErB,EAAKqB,EAAA,GACrCrB,UACEuB,MAAMC,QAAQxB,GAChBA,EAAMM,SAAQ,SAACmB,GAAC,OAAK/B,EAAIgC,aAAaxB,OAAOH,EAAKI,OAAOsB,OAEzD/B,EAAIgC,aAAatB,IAAIL,EAAKI,OAAOH,IAGvC,IAEON,EAAIiB,UACZ,CAAC,MAAOE,GAEP,OADAC,QAAQD,MAAM,sBAAuBA,GAC9BG,CACR,CACH,4BAuCM,SAA6BW,GAQjC,IAAM/B,EAAsB,CAAA,EAQ5B,OANAsB,OAAOC,QAAQQ,GAASrB,SAAQ,SAAAsB,GAAiB,IAAAC,EAAAP,EAAAA,cAAAM,EAAA,GAAf7B,EAAG8B,EAAA,GAAE7B,EAAK6B,EAAA,GACtC7B,SAAmD,KAAVA,IAC3CJ,EAAOG,GAAOI,OAAOH,GAEzB,IAEOe,EAAS3B,OAAOC,SAASyC,SAAUlC,EAC5C,sCAaEmC,GAGA,QAFeC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAGNjD,EAAe,CAAEgB,IAAK,OAAQC,MAAO+B,EAAM9B,OAAQ,WAEnDc,EAAS3B,OAAOC,SAASyC,SAAU,CAAEC,KAAMA,EAAKpB,YAE3D,sCAWM,SAAmBjB,GACvB,IACE,IAAMyC,EACJzC,IAA0B,oBAAXN,OAAyBA,OAAOC,SAASC,KAAO,IAC3D8C,EAAS,IAAIzC,IAAIwC,GACjBvC,EAAS,IAAIC,gBASnB,OAPAuC,EAAOV,aAAapB,SAAQ,SAACN,EAAOD,GAC9BC,GAA0B,KAAjBA,EAAMqC,QACjBzC,EAAOQ,IAAIL,EAAKC,EAEpB,IAEAoC,EAAOtC,OAASF,EAAOe,WAChByB,EAAOzB,UACf,CAAC,MAAOE,GAEP,OADAC,QAAQD,MAAM,sBAAuBA,GAC9BnB,GAAO,EACf,CACH,wBA7KgB,SAAcK,EAAaL,GACzC,IACE,IAAMyC,EACJzC,IAA0B,oBAAXN,OAAyBA,OAAOC,SAASC,KAAO,IAEjE,OADe,IAAIK,IAAIwC,GACTT,aAAaY,IAAIvC,EAChC,CAAC,MAAOc,GAEP,OADAC,QAAQD,MAAM,iCAAkCA,GACzC,IACR,CACH,yBA3CM,SAAyBnB,GAC7B,IACE,IAAMyC,EACJzC,IAA0B,oBAAXN,OAAyBA,OAAOC,SAASC,KAAO,IAC3D8C,EAAS,IAAIzC,IAAIwC,GACjBvC,EAAsB,CAAA,EAe5B,OAbAwC,EAAOV,aAAapB,SAAQ,SAACN,EAAOD,GAC9BH,EAAOG,GAELwB,MAAMC,QAAQ5B,EAAOG,IACtBH,EAAOG,GAAkBwC,KAAKvC,GAE/BJ,EAAOG,GAAO,CAACH,EAAOG,GAAgBC,GAGxCJ,EAAOG,GAAOC,CAElB,IAEOJ,CACR,CAAC,MAAOiB,GAEP,OADAC,QAAQD,MAAM,kCAAmCA,GAC1C,EACR,CACH,wBA0BgB,SAAcd,EAAaL,GACzC,IACE,IAAMyC,EACJzC,IAA0B,oBAAXN,OAAyBA,OAAOC,SAASC,KAAO,IAEjE,OADe,IAAIK,IAAIwC,GACTT,aAAarB,IAAIN,EAChC,CAAC,MAAOc,GAEP,OADAC,QAAQD,MAAM,kCAAmCA,IAC1C,CACR,CACH,qCAkDE7B,GACsD,IAAtDC,yDAAoD,CAAA,EAEpD,GAAsB,oBAAXG,OAAX,CAKA,IAAAoD,EAA4BvD,EAApBwD,QAAAA,OAAU,IAAHD,GAAQA,EACjBE,EAAS3D,EAAeC,EAASC,GAEnCwD,EACFrD,OAAOuD,QAAQC,aAAa,CAAE,EAAE,GAAIF,GAEpCtD,OAAOuD,QAAQE,UAAU,CAAE,EAAE,GAAIH,EARlC,MAFC5B,QAAQgC,KAAK,4DAYjB"}