kitunga-web 0.1.78

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 (402) hide show
  1. package/dist/features/buttons/components/Btns/Button.d.ts +32 -0
  2. package/dist/features/buttons/components/Btns/Button.d.ts.map +1 -0
  3. package/dist/features/buttons/components/Btns/Button.js +50 -0
  4. package/dist/features/buttons/components/Btns/Button.js.map +1 -0
  5. package/dist/features/buttons/components/Btns/Button.module.css +205 -0
  6. package/dist/features/data-display/components/Cards/ChartCard.d.ts +9 -0
  7. package/dist/features/data-display/components/Cards/ChartCard.d.ts.map +1 -0
  8. package/dist/features/data-display/components/Cards/ChartCard.js +7 -0
  9. package/dist/features/data-display/components/Cards/ChartCard.js.map +1 -0
  10. package/dist/features/data-display/components/Cards/ChartCard.module.css +27 -0
  11. package/dist/features/data-display/components/Cards/MetricCard.d.ts +11 -0
  12. package/dist/features/data-display/components/Cards/MetricCard.d.ts.map +1 -0
  13. package/dist/features/data-display/components/Cards/MetricCard.js +10 -0
  14. package/dist/features/data-display/components/Cards/MetricCard.js.map +1 -0
  15. package/dist/features/data-display/components/Cards/MetricCard.module.css +86 -0
  16. package/dist/features/data-display/components/Cards/StatCard.d.ts +15 -0
  17. package/dist/features/data-display/components/Cards/StatCard.d.ts.map +1 -0
  18. package/dist/features/data-display/components/Cards/StatCard.js +23 -0
  19. package/dist/features/data-display/components/Cards/StatCard.js.map +1 -0
  20. package/dist/features/data-display/components/Cards/StatCard.module.css +98 -0
  21. package/dist/features/data-display/components/Table/LineItemsTable.d.ts +4 -0
  22. package/dist/features/data-display/components/Table/LineItemsTable.d.ts.map +1 -0
  23. package/dist/features/data-display/components/Table/LineItemsTable.js +216 -0
  24. package/dist/features/data-display/components/Table/LineItemsTable.js.map +1 -0
  25. package/dist/features/data-display/components/Table/LineItemsTable.module.css +223 -0
  26. package/dist/features/data-display/components/Table/Table.d.ts +4 -0
  27. package/dist/features/data-display/components/Table/Table.d.ts.map +1 -0
  28. package/dist/features/data-display/components/Table/Table.js +181 -0
  29. package/dist/features/data-display/components/Table/Table.js.map +1 -0
  30. package/dist/features/data-display/components/Table/Table.module.css +305 -0
  31. package/dist/features/data-display/components/Table/types/LineItemsTable.d.ts +83 -0
  32. package/dist/features/data-display/components/Table/types/LineItemsTable.d.ts.map +1 -0
  33. package/dist/features/data-display/components/Table/types/LineItemsTable.js +2 -0
  34. package/dist/features/data-display/components/Table/types/LineItemsTable.js.map +1 -0
  35. package/dist/features/data-display/components/Table/types/Table.d.ts +78 -0
  36. package/dist/features/data-display/components/Table/types/Table.d.ts.map +1 -0
  37. package/dist/features/data-display/components/Table/types/Table.js +2 -0
  38. package/dist/features/data-display/components/Table/types/Table.js.map +1 -0
  39. package/dist/features/data-display/components/Tabs/PillTabs/PillTabs.d.ts +12 -0
  40. package/dist/features/data-display/components/Tabs/PillTabs/PillTabs.d.ts.map +1 -0
  41. package/dist/features/data-display/components/Tabs/PillTabs/PillTabs.js +7 -0
  42. package/dist/features/data-display/components/Tabs/PillTabs/PillTabs.js.map +1 -0
  43. package/dist/features/data-display/components/Tabs/PillTabs/PillTabs.module.css +36 -0
  44. package/dist/features/feedback/components/ChangedDataSummary/ChangedDataSummary.d.ts +18 -0
  45. package/dist/features/feedback/components/ChangedDataSummary/ChangedDataSummary.d.ts.map +1 -0
  46. package/dist/features/feedback/components/ChangedDataSummary/ChangedDataSummary.js +52 -0
  47. package/dist/features/feedback/components/ChangedDataSummary/ChangedDataSummary.js.map +1 -0
  48. package/dist/features/feedback/components/ChangedDataSummary/ChangedDataSummary.module.css +90 -0
  49. package/dist/features/feedback/components/ChangedDataSummary/getFormDataChanges.d.ts +21 -0
  50. package/dist/features/feedback/components/ChangedDataSummary/getFormDataChanges.d.ts.map +1 -0
  51. package/dist/features/feedback/components/ChangedDataSummary/getFormDataChanges.js +37 -0
  52. package/dist/features/feedback/components/ChangedDataSummary/getFormDataChanges.js.map +1 -0
  53. package/dist/features/feedback/components/CreatedDataSummary/CreatedDataSummary.d.ts +15 -0
  54. package/dist/features/feedback/components/CreatedDataSummary/CreatedDataSummary.d.ts.map +1 -0
  55. package/dist/features/feedback/components/CreatedDataSummary/CreatedDataSummary.js +56 -0
  56. package/dist/features/feedback/components/CreatedDataSummary/CreatedDataSummary.js.map +1 -0
  57. package/dist/features/feedback/components/CreatedDataSummary/CreatedDataSummary.module.css +90 -0
  58. package/dist/features/feedback/components/EmptyStates/SearchEmptyState/SearchEmptyState.d.ts +9 -0
  59. package/dist/features/feedback/components/EmptyStates/SearchEmptyState/SearchEmptyState.d.ts.map +1 -0
  60. package/dist/features/feedback/components/EmptyStates/SearchEmptyState/SearchEmptyState.js +9 -0
  61. package/dist/features/feedback/components/EmptyStates/SearchEmptyState/SearchEmptyState.js.map +1 -0
  62. package/dist/features/feedback/components/EmptyStates/SearchEmptyState/SearchEmptyState.module.css +36 -0
  63. package/dist/features/feedback/components/FlowNotice/FlowNotice.d.ts +8 -0
  64. package/dist/features/feedback/components/FlowNotice/FlowNotice.d.ts.map +1 -0
  65. package/dist/features/feedback/components/FlowNotice/FlowNotice.js +52 -0
  66. package/dist/features/feedback/components/FlowNotice/FlowNotice.js.map +1 -0
  67. package/dist/features/feedback/components/FlowNotice/FlowNotice.module.css +122 -0
  68. package/dist/features/feedback/components/Loading/AppLoading.d.ts +14 -0
  69. package/dist/features/feedback/components/Loading/AppLoading.d.ts.map +1 -0
  70. package/dist/features/feedback/components/Loading/AppLoading.js +17 -0
  71. package/dist/features/feedback/components/Loading/AppLoading.js.map +1 -0
  72. package/dist/features/feedback/components/Loading/AppLoading.module.css +95 -0
  73. package/dist/features/feedback/components/SuccesModal/ModalSuccess.d.ts +24 -0
  74. package/dist/features/feedback/components/SuccesModal/ModalSuccess.d.ts.map +1 -0
  75. package/dist/features/feedback/components/SuccesModal/ModalSuccess.js +11 -0
  76. package/dist/features/feedback/components/SuccesModal/ModalSuccess.js.map +1 -0
  77. package/dist/features/feedback/components/SuccesModal/ModalSuccess.module.css +141 -0
  78. package/dist/features/feedback/components/Tooltips/InfoTooltip.d.ts +10 -0
  79. package/dist/features/feedback/components/Tooltips/InfoTooltip.d.ts.map +1 -0
  80. package/dist/features/feedback/components/Tooltips/InfoTooltip.js +48 -0
  81. package/dist/features/feedback/components/Tooltips/InfoTooltip.js.map +1 -0
  82. package/dist/features/feedback/components/Tooltips/InfoTooltip.module.css +123 -0
  83. package/dist/features/feedback/components/Tooltips/InfoTooltipContent.d.ts +11 -0
  84. package/dist/features/feedback/components/Tooltips/InfoTooltipContent.d.ts.map +1 -0
  85. package/dist/features/feedback/components/Tooltips/InfoTooltipContent.js +8 -0
  86. package/dist/features/feedback/components/Tooltips/InfoTooltipContent.js.map +1 -0
  87. package/dist/features/feedback/components/Tooltips/InfoTooltipContent.module.css +58 -0
  88. package/dist/features/feedback/components/Tooltips/ProgressChecklistTooltip.d.ts +27 -0
  89. package/dist/features/feedback/components/Tooltips/ProgressChecklistTooltip.d.ts.map +1 -0
  90. package/dist/features/feedback/components/Tooltips/ProgressChecklistTooltip.js +56 -0
  91. package/dist/features/feedback/components/Tooltips/ProgressChecklistTooltip.js.map +1 -0
  92. package/dist/features/feedback/components/Tooltips/ProgressChecklistTooltip.module.css +200 -0
  93. package/dist/features/inputs/components/DatePicker/DatePicker.d.ts +13 -0
  94. package/dist/features/inputs/components/DatePicker/DatePicker.d.ts.map +1 -0
  95. package/dist/features/inputs/components/DatePicker/DatePicker.js +97 -0
  96. package/dist/features/inputs/components/DatePicker/DatePicker.js.map +1 -0
  97. package/dist/features/inputs/components/DatePicker/DatePicker.module.css +186 -0
  98. package/dist/features/inputs/components/Inputs/DateInput.d.ts +27 -0
  99. package/dist/features/inputs/components/Inputs/DateInput.d.ts.map +1 -0
  100. package/dist/features/inputs/components/Inputs/DateInput.js +236 -0
  101. package/dist/features/inputs/components/Inputs/DateInput.js.map +1 -0
  102. package/dist/features/inputs/components/Inputs/DateInput.module.css +301 -0
  103. package/dist/features/inputs/components/Inputs/DateRangeInput.d.ts +24 -0
  104. package/dist/features/inputs/components/Inputs/DateRangeInput.d.ts.map +1 -0
  105. package/dist/features/inputs/components/Inputs/DateRangeInput.js +10 -0
  106. package/dist/features/inputs/components/Inputs/DateRangeInput.js.map +1 -0
  107. package/dist/features/inputs/components/Inputs/DateRangeInput.module.css +24 -0
  108. package/dist/features/inputs/components/Inputs/NumberInput.d.ts +21 -0
  109. package/dist/features/inputs/components/Inputs/NumberInput.d.ts.map +1 -0
  110. package/dist/features/inputs/components/Inputs/NumberInput.js +82 -0
  111. package/dist/features/inputs/components/Inputs/NumberInput.js.map +1 -0
  112. package/dist/features/inputs/components/Inputs/NumberInput.module.css +148 -0
  113. package/dist/features/inputs/components/Inputs/PhoneInput/PhoneInput.d.ts +9 -0
  114. package/dist/features/inputs/components/Inputs/PhoneInput/PhoneInput.d.ts.map +1 -0
  115. package/dist/features/inputs/components/Inputs/PhoneInput/PhoneInput.js +187 -0
  116. package/dist/features/inputs/components/Inputs/PhoneInput/PhoneInput.js.map +1 -0
  117. package/dist/features/inputs/components/Inputs/PhoneInput/PhoneInput.module.css +259 -0
  118. package/dist/features/inputs/components/Inputs/PhoneInput/countries/ao.d.ts +3 -0
  119. package/dist/features/inputs/components/Inputs/PhoneInput/countries/ao.d.ts.map +1 -0
  120. package/dist/features/inputs/components/Inputs/PhoneInput/countries/ao.js +20 -0
  121. package/dist/features/inputs/components/Inputs/PhoneInput/countries/ao.js.map +1 -0
  122. package/dist/features/inputs/components/Inputs/PhoneInput/countries/br.d.ts +3 -0
  123. package/dist/features/inputs/components/Inputs/PhoneInput/countries/br.d.ts.map +1 -0
  124. package/dist/features/inputs/components/Inputs/PhoneInput/countries/br.js +9 -0
  125. package/dist/features/inputs/components/Inputs/PhoneInput/countries/br.js.map +1 -0
  126. package/dist/features/inputs/components/Inputs/PhoneInput/countries/index.d.ts +5 -0
  127. package/dist/features/inputs/components/Inputs/PhoneInput/countries/index.d.ts.map +1 -0
  128. package/dist/features/inputs/components/Inputs/PhoneInput/countries/index.js +48 -0
  129. package/dist/features/inputs/components/Inputs/PhoneInput/countries/index.js.map +1 -0
  130. package/dist/features/inputs/components/Inputs/PhoneInput/countries/pt.d.ts +3 -0
  131. package/dist/features/inputs/components/Inputs/PhoneInput/countries/pt.d.ts.map +1 -0
  132. package/dist/features/inputs/components/Inputs/PhoneInput/countries/pt.js +9 -0
  133. package/dist/features/inputs/components/Inputs/PhoneInput/countries/pt.js.map +1 -0
  134. package/dist/features/inputs/components/Inputs/PhoneInput/countries/us.d.ts +3 -0
  135. package/dist/features/inputs/components/Inputs/PhoneInput/countries/us.d.ts.map +1 -0
  136. package/dist/features/inputs/components/Inputs/PhoneInput/countries/us.js +17 -0
  137. package/dist/features/inputs/components/Inputs/PhoneInput/countries/us.js.map +1 -0
  138. package/dist/features/inputs/components/Inputs/PhoneInput/types/phone.types.d.ts +10 -0
  139. package/dist/features/inputs/components/Inputs/PhoneInput/types/phone.types.d.ts.map +1 -0
  140. package/dist/features/inputs/components/Inputs/PhoneInput/types/phone.types.js +2 -0
  141. package/dist/features/inputs/components/Inputs/PhoneInput/types/phone.types.js.map +1 -0
  142. package/dist/features/inputs/components/Inputs/SearchInput.d.ts +13 -0
  143. package/dist/features/inputs/components/Inputs/SearchInput.d.ts.map +1 -0
  144. package/dist/features/inputs/components/Inputs/SearchInput.js +12 -0
  145. package/dist/features/inputs/components/Inputs/SearchInput.js.map +1 -0
  146. package/dist/features/inputs/components/Inputs/SearchInput.module.css +107 -0
  147. package/dist/features/inputs/components/Inputs/StepperInput.d.ts +14 -0
  148. package/dist/features/inputs/components/Inputs/StepperInput.d.ts.map +1 -0
  149. package/dist/features/inputs/components/Inputs/StepperInput.js +44 -0
  150. package/dist/features/inputs/components/Inputs/StepperInput.js.map +1 -0
  151. package/dist/features/inputs/components/Inputs/StepperInput.module.css +96 -0
  152. package/dist/features/inputs/components/Inputs/TaxIdInput/TaxIdInput.d.ts +15 -0
  153. package/dist/features/inputs/components/Inputs/TaxIdInput/TaxIdInput.d.ts.map +1 -0
  154. package/dist/features/inputs/components/Inputs/TaxIdInput/TaxIdInput.js +102 -0
  155. package/dist/features/inputs/components/Inputs/TaxIdInput/TaxIdInput.js.map +1 -0
  156. package/dist/features/inputs/components/Inputs/TaxIdInput/TaxIdInput.module.css +259 -0
  157. package/dist/features/inputs/components/Inputs/TaxIdInput/index.d.ts +5 -0
  158. package/dist/features/inputs/components/Inputs/TaxIdInput/index.d.ts.map +1 -0
  159. package/dist/features/inputs/components/Inputs/TaxIdInput/index.js +3 -0
  160. package/dist/features/inputs/components/Inputs/TaxIdInput/index.js.map +1 -0
  161. package/dist/features/inputs/components/Inputs/TextInput.d.ts +4 -0
  162. package/dist/features/inputs/components/Inputs/TextInput.d.ts.map +1 -0
  163. package/dist/features/inputs/components/Inputs/TextInput.js +61 -0
  164. package/dist/features/inputs/components/Inputs/TextInput.js.map +1 -0
  165. package/dist/features/inputs/components/Inputs/TextInput.module.css +174 -0
  166. package/dist/features/inputs/components/Inputs/TextareaInput.d.ts +4 -0
  167. package/dist/features/inputs/components/Inputs/TextareaInput.d.ts.map +1 -0
  168. package/dist/features/inputs/components/Inputs/TextareaInput.js +45 -0
  169. package/dist/features/inputs/components/Inputs/TextareaInput.js.map +1 -0
  170. package/dist/features/inputs/components/Inputs/TextareaInput.module.css +144 -0
  171. package/dist/features/inputs/components/Inputs/types/input.types.d.ts +28 -0
  172. package/dist/features/inputs/components/Inputs/types/input.types.d.ts.map +1 -0
  173. package/dist/features/inputs/components/Inputs/types/input.types.js +2 -0
  174. package/dist/features/inputs/components/Inputs/types/input.types.js.map +1 -0
  175. package/dist/features/navigation/components/Menu/SharedMenuItem.d.ts +25 -0
  176. package/dist/features/navigation/components/Menu/SharedMenuItem.d.ts.map +1 -0
  177. package/dist/features/navigation/components/Menu/SharedMenuItem.js +40 -0
  178. package/dist/features/navigation/components/Menu/SharedMenuItem.js.map +1 -0
  179. package/dist/features/navigation/components/Menu/SharedMenuItem.module.css +219 -0
  180. package/dist/features/navigation/components/PageFooter/PageFooter.d.ts +13 -0
  181. package/dist/features/navigation/components/PageFooter/PageFooter.d.ts.map +1 -0
  182. package/dist/features/navigation/components/PageFooter/PageFooter.js +52 -0
  183. package/dist/features/navigation/components/PageFooter/PageFooter.js.map +1 -0
  184. package/dist/features/navigation/components/PageFooter/PageFooter.module.css +24 -0
  185. package/dist/features/navigation/components/PageHeader/PageHeader.d.ts +14 -0
  186. package/dist/features/navigation/components/PageHeader/PageHeader.d.ts.map +1 -0
  187. package/dist/features/navigation/components/PageHeader/PageHeader.js +22 -0
  188. package/dist/features/navigation/components/PageHeader/PageHeader.js.map +1 -0
  189. package/dist/features/navigation/components/PageHeader/PageHeader.module.css +41 -0
  190. package/dist/features/navigation/components/Sidebar/Sidebar.d.ts +24 -0
  191. package/dist/features/navigation/components/Sidebar/Sidebar.d.ts.map +1 -0
  192. package/dist/features/navigation/components/Sidebar/Sidebar.js +131 -0
  193. package/dist/features/navigation/components/Sidebar/Sidebar.js.map +1 -0
  194. package/dist/features/navigation/components/Sidebar/Sidebar.module.css +139 -0
  195. package/dist/features/overlays/components/DeleteModal/ComprehensiveDeleteModal.d.ts +66 -0
  196. package/dist/features/overlays/components/DeleteModal/ComprehensiveDeleteModal.d.ts.map +1 -0
  197. package/dist/features/overlays/components/DeleteModal/ComprehensiveDeleteModal.js +89 -0
  198. package/dist/features/overlays/components/DeleteModal/ComprehensiveDeleteModal.js.map +1 -0
  199. package/dist/features/overlays/components/DeleteModal/ComprehensiveDeleteModal.module.css +269 -0
  200. package/dist/features/overlays/components/Popup/Popup.d.ts +8 -0
  201. package/dist/features/overlays/components/Popup/Popup.d.ts.map +1 -0
  202. package/dist/features/overlays/components/Popup/Popup.js +23 -0
  203. package/dist/features/overlays/components/Popup/Popup.js.map +1 -0
  204. package/dist/features/overlays/components/Popup/Popup.module.css +64 -0
  205. package/dist/features/overlays/components/Popup/index.d.ts +3 -0
  206. package/dist/features/overlays/components/Popup/index.d.ts.map +1 -0
  207. package/dist/features/overlays/components/Popup/index.js +2 -0
  208. package/dist/features/overlays/components/Popup/index.js.map +1 -0
  209. package/dist/features/overlays/components/PrerequisiteGuardModal/PrerequisiteGuardModal.d.ts +36 -0
  210. package/dist/features/overlays/components/PrerequisiteGuardModal/PrerequisiteGuardModal.d.ts.map +1 -0
  211. package/dist/features/overlays/components/PrerequisiteGuardModal/PrerequisiteGuardModal.js +38 -0
  212. package/dist/features/overlays/components/PrerequisiteGuardModal/PrerequisiteGuardModal.js.map +1 -0
  213. package/dist/features/overlays/components/PrerequisiteGuardModal/PrerequisiteGuardModal.module.css +339 -0
  214. package/dist/features/overlays/components/dropdowns/DropdownMenu.d.ts +18 -0
  215. package/dist/features/overlays/components/dropdowns/DropdownMenu.d.ts.map +1 -0
  216. package/dist/features/overlays/components/dropdowns/DropdownMenu.js +34 -0
  217. package/dist/features/overlays/components/dropdowns/DropdownMenu.js.map +1 -0
  218. package/dist/features/overlays/components/dropdowns/DropdownMenu.module.css +23 -0
  219. package/dist/features/patterns/components/Form/MultiStepForm/components/FormActions.d.ts +36 -0
  220. package/dist/features/patterns/components/Form/MultiStepForm/components/FormActions.d.ts.map +1 -0
  221. package/dist/features/patterns/components/Form/MultiStepForm/components/FormActions.js +19 -0
  222. package/dist/features/patterns/components/Form/MultiStepForm/components/FormActions.js.map +1 -0
  223. package/dist/features/patterns/components/Form/MultiStepForm/components/FormActions.module.css +88 -0
  224. package/dist/features/patterns/components/Form/MultiStepForm/components/GenericStepRenderer.d.ts +14 -0
  225. package/dist/features/patterns/components/Form/MultiStepForm/components/GenericStepRenderer.d.ts.map +1 -0
  226. package/dist/features/patterns/components/Form/MultiStepForm/components/GenericStepRenderer.js +119 -0
  227. package/dist/features/patterns/components/Form/MultiStepForm/components/GenericStepRenderer.js.map +1 -0
  228. package/dist/features/patterns/components/Form/MultiStepForm/components/GenericStepRenderer.module.css +76 -0
  229. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepForm.d.ts +3 -0
  230. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepForm.d.ts.map +1 -0
  231. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepForm.js +486 -0
  232. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepForm.js.map +1 -0
  233. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepForm.module.css +55 -0
  234. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepHeader.d.ts +16 -0
  235. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepHeader.d.ts.map +1 -0
  236. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepHeader.js +8 -0
  237. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepHeader.js.map +1 -0
  238. package/dist/features/patterns/components/Form/MultiStepForm/components/MultiStepHeader.module.css +77 -0
  239. package/dist/features/patterns/components/Form/MultiStepForm/components/StepIndicator.d.ts +10 -0
  240. package/dist/features/patterns/components/Form/MultiStepForm/components/StepIndicator.d.ts.map +1 -0
  241. package/dist/features/patterns/components/Form/MultiStepForm/components/StepIndicator.js +9 -0
  242. package/dist/features/patterns/components/Form/MultiStepForm/components/StepIndicator.js.map +1 -0
  243. package/dist/features/patterns/components/Form/MultiStepForm/components/StepIndicator.module.css +86 -0
  244. package/dist/features/patterns/components/Form/MultiStepForm/components/StepsContainer.d.ts +13 -0
  245. package/dist/features/patterns/components/Form/MultiStepForm/components/StepsContainer.d.ts.map +1 -0
  246. package/dist/features/patterns/components/Form/MultiStepForm/components/StepsContainer.js +9 -0
  247. package/dist/features/patterns/components/Form/MultiStepForm/components/StepsContainer.js.map +1 -0
  248. package/dist/features/patterns/components/Form/MultiStepForm/components/StepsContainer.module.css +8 -0
  249. package/dist/features/patterns/components/Form/MultiStepForm/components/SuccessScreen.d.ts +20 -0
  250. package/dist/features/patterns/components/Form/MultiStepForm/components/SuccessScreen.d.ts.map +1 -0
  251. package/dist/features/patterns/components/Form/MultiStepForm/components/SuccessScreen.js +7 -0
  252. package/dist/features/patterns/components/Form/MultiStepForm/components/SuccessScreen.js.map +1 -0
  253. package/dist/features/patterns/components/Form/MultiStepForm/components/SuccessScreen.module.css +13 -0
  254. package/dist/features/patterns/components/Form/MultiStepForm/types/types.d.ts +216 -0
  255. package/dist/features/patterns/components/Form/MultiStepForm/types/types.d.ts.map +1 -0
  256. package/dist/features/patterns/components/Form/MultiStepForm/types/types.js +2 -0
  257. package/dist/features/patterns/components/Form/MultiStepForm/types/types.js.map +1 -0
  258. package/dist/features/patterns/components/Form/MultiStepForm/utils/constants.d.ts +6 -0
  259. package/dist/features/patterns/components/Form/MultiStepForm/utils/constants.d.ts.map +1 -0
  260. package/dist/features/patterns/components/Form/MultiStepForm/utils/constants.js +22 -0
  261. package/dist/features/patterns/components/Form/MultiStepForm/utils/constants.js.map +1 -0
  262. package/dist/features/patterns/components/Form/MultiStepForm/utils/utils.d.ts +10 -0
  263. package/dist/features/patterns/components/Form/MultiStepForm/utils/utils.d.ts.map +1 -0
  264. package/dist/features/patterns/components/Form/MultiStepForm/utils/utils.js +31 -0
  265. package/dist/features/patterns/components/Form/MultiStepForm/utils/utils.js.map +1 -0
  266. package/dist/features/patterns/components/Form/VerificationCodeStep/VerificationCodeStep.d.ts +19 -0
  267. package/dist/features/patterns/components/Form/VerificationCodeStep/VerificationCodeStep.d.ts.map +1 -0
  268. package/dist/features/patterns/components/Form/VerificationCodeStep/VerificationCodeStep.js +104 -0
  269. package/dist/features/patterns/components/Form/VerificationCodeStep/VerificationCodeStep.js.map +1 -0
  270. package/dist/features/patterns/components/Form/VerificationCodeStep/VerificationCodeStep.module.css +55 -0
  271. package/dist/features/selects/components/Selects/CustomSelect.d.ts +27 -0
  272. package/dist/features/selects/components/Selects/CustomSelect.d.ts.map +1 -0
  273. package/dist/features/selects/components/Selects/CustomSelect.js +53 -0
  274. package/dist/features/selects/components/Selects/CustomSelect.js.map +1 -0
  275. package/dist/features/selects/components/Selects/CustomSelect.module.css +307 -0
  276. package/dist/features/uploads/components/ImageUpload/ImageUpload.d.ts +12 -0
  277. package/dist/features/uploads/components/ImageUpload/ImageUpload.d.ts.map +1 -0
  278. package/dist/features/uploads/components/ImageUpload/ImageUpload.js +178 -0
  279. package/dist/features/uploads/components/ImageUpload/ImageUpload.js.map +1 -0
  280. package/dist/features/uploads/components/ImageUpload/ImageUpload.module.css +254 -0
  281. package/dist/features/uploads/components/VideoUpload/VideoUpload.d.ts +12 -0
  282. package/dist/features/uploads/components/VideoUpload/VideoUpload.d.ts.map +1 -0
  283. package/dist/features/uploads/components/VideoUpload/VideoUpload.js +183 -0
  284. package/dist/features/uploads/components/VideoUpload/VideoUpload.js.map +1 -0
  285. package/dist/features/uploads/components/VideoUpload/VideoUpload.module.css +277 -0
  286. package/dist/features/uploads/components/VideoUpload/index.d.ts +2 -0
  287. package/dist/features/uploads/components/VideoUpload/index.d.ts.map +1 -0
  288. package/dist/features/uploads/components/VideoUpload/index.js +2 -0
  289. package/dist/features/uploads/components/VideoUpload/index.js.map +1 -0
  290. package/dist/index.d.ts +5 -0
  291. package/dist/index.d.ts.map +1 -0
  292. package/dist/index.js +5 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/shared/styles/globals.css +80 -0
  295. package/dist/shared/styles/tokens.css +138 -0
  296. package/dist/shared/utils/devDelay.d.ts +8 -0
  297. package/dist/shared/utils/devDelay.d.ts.map +1 -0
  298. package/dist/shared/utils/devDelay.js +11 -0
  299. package/dist/shared/utils/devDelay.js.map +1 -0
  300. package/dist/shared/utils/files.d.ts +9 -0
  301. package/dist/shared/utils/files.d.ts.map +1 -0
  302. package/dist/shared/utils/files.js +26 -0
  303. package/dist/shared/utils/files.js.map +1 -0
  304. package/dist/shared/utils/formatCurrency.d.ts +24 -0
  305. package/dist/shared/utils/formatCurrency.d.ts.map +1 -0
  306. package/dist/shared/utils/formatCurrency.js +96 -0
  307. package/dist/shared/utils/formatCurrency.js.map +1 -0
  308. package/dist/shared/utils/location/countries/ao.d.ts +3 -0
  309. package/dist/shared/utils/location/countries/ao.d.ts.map +1 -0
  310. package/dist/shared/utils/location/countries/ao.js +52 -0
  311. package/dist/shared/utils/location/countries/ao.js.map +1 -0
  312. package/dist/shared/utils/location/countries/ao.json +254 -0
  313. package/dist/shared/utils/location/countries/ao.official-2026.json +254 -0
  314. package/dist/shared/utils/location/countries/br.d.ts +3 -0
  315. package/dist/shared/utils/location/countries/br.d.ts.map +1 -0
  316. package/dist/shared/utils/location/countries/br.js +33 -0
  317. package/dist/shared/utils/location/countries/br.js.map +1 -0
  318. package/dist/shared/utils/location/countries/mz.d.ts +3 -0
  319. package/dist/shared/utils/location/countries/mz.d.ts.map +1 -0
  320. package/dist/shared/utils/location/countries/mz.js +17 -0
  321. package/dist/shared/utils/location/countries/mz.js.map +1 -0
  322. package/dist/shared/utils/location/countries/ng.d.ts +3 -0
  323. package/dist/shared/utils/location/countries/ng.d.ts.map +1 -0
  324. package/dist/shared/utils/location/countries/ng.js +43 -0
  325. package/dist/shared/utils/location/countries/ng.js.map +1 -0
  326. package/dist/shared/utils/location/countries/pt.d.ts +3 -0
  327. package/dist/shared/utils/location/countries/pt.d.ts.map +1 -0
  328. package/dist/shared/utils/location/countries/pt.js +26 -0
  329. package/dist/shared/utils/location/countries/pt.js.map +1 -0
  330. package/dist/shared/utils/location/countries/us.d.ts +3 -0
  331. package/dist/shared/utils/location/countries/us.d.ts.map +1 -0
  332. package/dist/shared/utils/location/countries/us.js +57 -0
  333. package/dist/shared/utils/location/countries/us.js.map +1 -0
  334. package/dist/shared/utils/location/countries/za.d.ts +3 -0
  335. package/dist/shared/utils/location/countries/za.d.ts.map +1 -0
  336. package/dist/shared/utils/location/countries/za.js +15 -0
  337. package/dist/shared/utils/location/countries/za.js.map +1 -0
  338. package/dist/shared/utils/location/index.d.ts +14 -0
  339. package/dist/shared/utils/location/index.d.ts.map +1 -0
  340. package/dist/shared/utils/location/index.js +131 -0
  341. package/dist/shared/utils/location/index.js.map +1 -0
  342. package/dist/shared/utils/location/types.d.ts +24 -0
  343. package/dist/shared/utils/location/types.d.ts.map +1 -0
  344. package/dist/shared/utils/location/types.js +2 -0
  345. package/dist/shared/utils/location/types.js.map +1 -0
  346. package/dist/shared/utils/logger.d.ts +43 -0
  347. package/dist/shared/utils/logger.d.ts.map +1 -0
  348. package/dist/shared/utils/logger.js +139 -0
  349. package/dist/shared/utils/logger.js.map +1 -0
  350. package/dist/shared/utils/maskedDecimal.d.ts +8 -0
  351. package/dist/shared/utils/maskedDecimal.d.ts.map +1 -0
  352. package/dist/shared/utils/maskedDecimal.js +42 -0
  353. package/dist/shared/utils/maskedDecimal.js.map +1 -0
  354. package/dist/shared/utils/slug.d.ts +12 -0
  355. package/dist/shared/utils/slug.d.ts.map +1 -0
  356. package/dist/shared/utils/slug.js +31 -0
  357. package/dist/shared/utils/slug.js.map +1 -0
  358. package/dist/shared/utils/tax-id/countries/ao.d.ts +11 -0
  359. package/dist/shared/utils/tax-id/countries/ao.d.ts.map +1 -0
  360. package/dist/shared/utils/tax-id/countries/ao.js +115 -0
  361. package/dist/shared/utils/tax-id/countries/ao.js.map +1 -0
  362. package/dist/shared/utils/tax-id/countries/br.d.ts +3 -0
  363. package/dist/shared/utils/tax-id/countries/br.d.ts.map +1 -0
  364. package/dist/shared/utils/tax-id/countries/br.js +24 -0
  365. package/dist/shared/utils/tax-id/countries/br.js.map +1 -0
  366. package/dist/shared/utils/tax-id/countries/index.d.ts +8 -0
  367. package/dist/shared/utils/tax-id/countries/index.d.ts.map +1 -0
  368. package/dist/shared/utils/tax-id/countries/index.js +12 -0
  369. package/dist/shared/utils/tax-id/countries/index.js.map +1 -0
  370. package/dist/shared/utils/tax-id/countries/pt.d.ts +3 -0
  371. package/dist/shared/utils/tax-id/countries/pt.d.ts.map +1 -0
  372. package/dist/shared/utils/tax-id/countries/pt.js +24 -0
  373. package/dist/shared/utils/tax-id/countries/pt.js.map +1 -0
  374. package/dist/shared/utils/tax-id/countries/us.d.ts +3 -0
  375. package/dist/shared/utils/tax-id/countries/us.d.ts.map +1 -0
  376. package/dist/shared/utils/tax-id/countries/us.js +24 -0
  377. package/dist/shared/utils/tax-id/countries/us.js.map +1 -0
  378. package/dist/shared/utils/tax-id/index.d.ts +14 -0
  379. package/dist/shared/utils/tax-id/index.d.ts.map +1 -0
  380. package/dist/shared/utils/tax-id/index.js +140 -0
  381. package/dist/shared/utils/tax-id/index.js.map +1 -0
  382. package/dist/shared/utils/tax-id/types.d.ts +21 -0
  383. package/dist/shared/utils/tax-id/types.d.ts.map +1 -0
  384. package/dist/shared/utils/tax-id/types.js +2 -0
  385. package/dist/shared/utils/tax-id/types.js.map +1 -0
  386. package/dist/styles.d.ts +2 -0
  387. package/dist/styles.d.ts.map +1 -0
  388. package/dist/styles.js +2 -0
  389. package/dist/styles.js.map +1 -0
  390. package/dist/tokens.d.ts +2 -0
  391. package/dist/tokens.d.ts.map +1 -0
  392. package/dist/tokens.js +2 -0
  393. package/dist/tokens.js.map +1 -0
  394. package/dist/ui.d.ts +67 -0
  395. package/dist/ui.d.ts.map +1 -0
  396. package/dist/ui.js +39 -0
  397. package/dist/ui.js.map +1 -0
  398. package/dist/utils.d.ts +7 -0
  399. package/dist/utils.d.ts.map +1 -0
  400. package/dist/utils.js +4 -0
  401. package/dist/utils.js.map +1 -0
  402. package/package.json +80 -0
@@ -0,0 +1,178 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useRef, useCallback, useEffect } from 'react';
4
+ import { X, Pause, Check, Image as ImageIcon, ArrowLeft, ArrowRight, AlertCircle } from 'lucide-react';
5
+ import styles from './ImageUpload.module.css';
6
+ import TextInput from '@/features/inputs/components/Inputs/TextInput';
7
+ import Button from '@/features/buttons/components/Btns/Button';
8
+ import axios from 'axios';
9
+ const API_URL = process.env.NEXT_PUBLIC_API_URL;
10
+ const ImageUpload = ({ value = '', onChange, onKeyChange, accept = 'image/png,image/jpeg,image/jpg,image/webp,image/avif', uploadUrl, tokenStorageKey, }) => {
11
+ const [isDragging, setIsDragging] = useState(false);
12
+ const [isUploading, setIsUploading] = useState(false);
13
+ const [uploadProgress, setUploadProgress] = useState(0);
14
+ const [uploadedFile, setUploadedFile] = useState(null);
15
+ const [urlInput, setUrlInput] = useState('');
16
+ const fileInputRef = useRef(null);
17
+ const dragCounterRef = useRef(0);
18
+ const [error, setError] = useState(null);
19
+ // Limpar estado quando o value for vazio (quando a imagem é removida)
20
+ useEffect(() => {
21
+ if (!value || (typeof value === 'string' && value.trim().length === 0)) {
22
+ setUploadedFile(null);
23
+ setUploadProgress(0);
24
+ setIsUploading(false);
25
+ setIsDragging(false);
26
+ setError(null);
27
+ dragCounterRef.current = 0;
28
+ if (fileInputRef.current) {
29
+ fileInputRef.current.value = '';
30
+ }
31
+ }
32
+ }, [value]);
33
+ // Auto-clear error after 3000ms
34
+ useEffect(() => {
35
+ if (error) {
36
+ const timer = setTimeout(() => {
37
+ setError(null);
38
+ }, 3000);
39
+ return () => clearTimeout(timer);
40
+ }
41
+ }, [error]);
42
+ const formatFileSize = (bytes) => {
43
+ if (bytes < 1024)
44
+ return `${bytes} B`;
45
+ if (bytes < 1024 * 1024)
46
+ return `${(bytes / 1024).toFixed(1)} KB`;
47
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
48
+ };
49
+ const handleFileSelect = async (file) => {
50
+ var _a, _b;
51
+ setError(null);
52
+ if (!file.type.startsWith('image/')) {
53
+ setError('Apenas imagens são permitidas');
54
+ return;
55
+ }
56
+ setUploadedFile({ name: file.name, size: file.size });
57
+ setIsUploading(true);
58
+ setUploadProgress(0);
59
+ try {
60
+ const formData = new FormData();
61
+ formData.append('file', file);
62
+ const token = (typeof window !== 'undefined' && tokenStorageKey) ? localStorage.getItem(tokenStorageKey) : null;
63
+ if (!uploadUrl) {
64
+ throw new Error('uploadUrl é obrigatório para ImageUpload');
65
+ }
66
+ const uploadEndpoint = uploadUrl.startsWith('http')
67
+ ? uploadUrl
68
+ : `${API_URL}${uploadUrl}`;
69
+ const response = await axios.post(uploadEndpoint, formData, {
70
+ headers: Object.assign({ 'Content-Type': 'multipart/form-data' }, (token ? { Authorization: `Bearer ${token}` } : {})),
71
+ onUploadProgress: (progressEvent) => {
72
+ if (progressEvent.total) {
73
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
74
+ setUploadProgress(percentCompleted);
75
+ }
76
+ },
77
+ });
78
+ const imageUrl = response.data.url;
79
+ const objectKey = response.data.key;
80
+ setIsUploading(false);
81
+ setUploadProgress(100); // Garante 100% ao finalizar
82
+ if (typeof objectKey === 'string' && objectKey.trim().length > 0) {
83
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange(objectKey);
84
+ }
85
+ onChange(imageUrl);
86
+ }
87
+ catch (error) {
88
+ const uploadError = error;
89
+ console.warn('Erro ao fazer upload do ficheiro:', uploadError.message); // Usar warn para evitar overlay de erro no Next.js
90
+ // Extrair mensagem de erro amigável
91
+ const backendMessage = (_b = (_a = uploadError.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message;
92
+ // Se for array (NestJS default validation), pega o primeiro
93
+ const message = Array.isArray(backendMessage) ? backendMessage[0] : backendMessage;
94
+ setError(message || 'Erro ao fazer upload');
95
+ setIsUploading(false);
96
+ setUploadedFile(null);
97
+ setUploadProgress(0);
98
+ }
99
+ };
100
+ const handleDragEnter = useCallback((e) => {
101
+ e.preventDefault();
102
+ e.stopPropagation();
103
+ dragCounterRef.current++;
104
+ if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
105
+ setIsDragging(true);
106
+ }
107
+ }, []);
108
+ const handleDragLeave = useCallback((e) => {
109
+ e.preventDefault();
110
+ e.stopPropagation();
111
+ dragCounterRef.current--;
112
+ if (dragCounterRef.current === 0) {
113
+ setIsDragging(false);
114
+ }
115
+ }, []);
116
+ const handleDragOver = useCallback((e) => {
117
+ e.preventDefault();
118
+ e.stopPropagation();
119
+ }, []);
120
+ const handleDrop = useCallback((e) => {
121
+ e.preventDefault();
122
+ e.stopPropagation();
123
+ setIsDragging(false);
124
+ dragCounterRef.current = 0;
125
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
126
+ handleFileSelect(e.dataTransfer.files[0]);
127
+ }
128
+ }, []);
129
+ const handleFileInputChange = (e) => {
130
+ if (e.target.files && e.target.files.length > 0) {
131
+ handleFileSelect(e.target.files[0]);
132
+ }
133
+ };
134
+ const handleUrlUpload = () => {
135
+ setError(null);
136
+ if (urlInput.trim()) {
137
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange('');
138
+ onChange(urlInput.trim());
139
+ setUrlInput('');
140
+ }
141
+ };
142
+ const handleRemove = () => {
143
+ if (value && value.startsWith('blob:')) {
144
+ URL.revokeObjectURL(value);
145
+ }
146
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange('');
147
+ onChange('');
148
+ setUploadedFile(null);
149
+ setUploadProgress(0);
150
+ setIsUploading(false);
151
+ setError(null);
152
+ if (fileInputRef.current) {
153
+ fileInputRef.current.value = '';
154
+ }
155
+ };
156
+ const handlePause = () => {
157
+ // Implementar pausa de upload se necessário
158
+ console.log('Pausar upload');
159
+ };
160
+ const handleBrowseClick = () => {
161
+ var _a;
162
+ (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
163
+ };
164
+ // Verificar se há uma imagem válida (não vazia, não null, não undefined)
165
+ const hasImage = Boolean(value && typeof value === 'string' && value.trim().length > 0 && !isUploading);
166
+ return (_jsxs("div", { className: styles.imageUploadContainer, children: [!hasImage && !isUploading && (_jsxs(_Fragment, { children: [_jsxs("div", { className: `${styles.dropZone} ${isDragging ? styles.dragging : ''} ${error ? styles.dropZoneError : ''}`, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleBrowseClick, children: [_jsx("div", { className: styles.dropZoneContent, children: error ? (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.errorIcon, children: _jsx(AlertCircle, { size: 48, color: "#ef4444" }) }), _jsx("p", { className: styles.errorMessageText, style: { color: '#ef4444' }, children: error })] })) : isDragging ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: styles.dragIcons, children: [_jsx(ArrowLeft, { size: 24 }), _jsx(ArrowRight, { size: 24 })] }), _jsx("p", { className: styles.dropText, children: "Solte seus arquivos aqui" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.uploadIcon, children: _jsx(ImageIcon, { size: 48 }) }), _jsx("p", { className: styles.dropText, children: "Arraste sua imagem aqui, ou clique para procurar" }), _jsx("p", { className: styles.supportedFormats, children: "Suporta: PNG, JPG, JPEG, WEBP, AVIF" })] })) }), _jsx("input", { ref: fileInputRef, type: "file", accept: accept, onChange: handleFileInputChange, className: styles.fileInput, disabled: !!error })] }), _jsx("div", { className: styles.divider, children: _jsx("span", { children: "ou" }) }), _jsxs("div", { className: styles.urlUpload, children: [_jsx(TextInput, { value: urlInput, onChange: (value) => setUrlInput(value), placeholder: "Adicione URL do arquivo", onKeyPress: (e) => {
167
+ if (e.key === 'Enter') {
168
+ handleUrlUpload();
169
+ }
170
+ } }), _jsx(Button, { onClick: handleUrlUpload, disabled: !urlInput.trim(), children: "Upload" })] })] })), isUploading && uploadedFile && (_jsxs("div", { className: styles.uploadProgress, children: [_jsxs("div", { className: styles.fileInfo, children: [_jsx(ImageIcon, { size: 20 }), _jsxs("div", { className: styles.fileDetails, children: [_jsx("span", { className: styles.fileName, children: uploadedFile.name }), _jsx("span", { className: styles.fileSize, children: formatFileSize(uploadedFile.size) })] })] }), _jsxs("div", { className: styles.progressBarContainer, children: [_jsx("div", { className: styles.progressBar, children: _jsx("div", { className: styles.progressFill, style: { width: `${uploadProgress}%` } }) }), _jsxs("span", { className: styles.progressText, children: [uploadProgress, "%"] }), _jsx("button", { type: "button", onClick: handlePause, className: styles.pauseButton, title: "Pausar", children: _jsx(Pause, { size: 16 }) }), _jsx("button", { type: "button", onClick: handleRemove, className: styles.removeButton, title: "Cancelar", children: _jsx(X, { size: 16 }) })] })] })), hasImage && value && value.trim().length > 0 && (_jsxs("div", { className: styles.imagePreview, children: [_jsxs("div", { className: styles.previewContainer, children: [_jsx("img", { src: value, alt: "Preview", className: styles.previewImage, onError: (e) => {
171
+ // Se a imagem falhar ao carregar, limpar o valor
172
+ const target = e.target;
173
+ target.style.display = 'none';
174
+ onChange('');
175
+ } }, value), _jsx("button", { type: "button", onClick: handleRemove, className: styles.removeImageButton, title: "Remover imagem", children: _jsx(X, { size: 20 }) })] }), uploadedFile && (_jsxs("div", { className: styles.fileInfo, children: [_jsx(ImageIcon, { size: 16 }), _jsx("span", { className: styles.fileName, children: uploadedFile.name }), _jsx("span", { className: styles.fileSize, children: formatFileSize(uploadedFile.size) }), _jsx(Check, { size: 16, className: styles.checkIcon })] }))] }))] }));
176
+ };
177
+ export default ImageUpload;
178
+ //# sourceMappingURL=ImageUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageUpload.js","sourceRoot":"","sources":["../../../../../src/features/uploads/components/ImageUpload/ImageUpload.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ .imageUploadContainer {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 0;
5
+ }
6
+
7
+ .label {
8
+ display: block;
9
+ margin-bottom: 0.5rem;
10
+ font-weight: 500;
11
+ color: var(--text-primary);
12
+ font-size: 0.9rem;
13
+ }
14
+
15
+ .dropZone {
16
+ border: 2px dashed var(--border-divider);
17
+ border-radius: var(--radius-sm);
18
+ padding: var(--spacing-xl);
19
+ text-align: center;
20
+ cursor: pointer;
21
+ transition: all var(--transition-fast);
22
+ background-color: var(--bg-secondary);
23
+ min-height: 180px;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ }
28
+
29
+ .dropZone:hover {
30
+ border-color: var(--color-primary);
31
+ background-color: var(--bg-primary);
32
+ }
33
+
34
+ .dropZone.dragging {
35
+ border-color: var(--color-primary);
36
+ background-color: var(--color-primary-light, rgba(59, 130, 246, 0.1));
37
+ border-style: solid;
38
+ }
39
+
40
+ .dropZoneContent {
41
+ display: flex;
42
+ flex-direction: column;
43
+ align-items: center;
44
+ gap: var(--spacing-md);
45
+ }
46
+
47
+ .uploadIcon {
48
+ color: var(--text-secondary);
49
+ margin-bottom: var(--spacing-sm);
50
+ }
51
+
52
+ .dragIcons {
53
+ display: flex;
54
+ gap: var(--spacing-md);
55
+ color: var(--color-primary);
56
+ margin-bottom: var(--spacing-sm);
57
+ }
58
+
59
+ .dropText {
60
+ font-size: 0.95rem;
61
+ color: var(--text-primary);
62
+ margin: 0;
63
+ font-weight: 500;
64
+ }
65
+
66
+ .supportedFormats {
67
+ font-size: 0.85rem;
68
+ color: var(--text-secondary);
69
+ margin: 0;
70
+ }
71
+
72
+ .fileInput {
73
+ display: none;
74
+ }
75
+
76
+ .divider {
77
+ display: flex;
78
+ align-items: center;
79
+ text-align: center;
80
+ margin: var(--spacing-md) 0;
81
+ position: relative;
82
+ }
83
+
84
+ .divider::before,
85
+ .divider::after {
86
+ content: '';
87
+ flex: 1;
88
+ border-bottom: 1px solid var(--border-divider);
89
+ }
90
+
91
+ .divider span {
92
+ padding: 0 var(--spacing-md);
93
+ color: var(--text-secondary);
94
+ font-size: 0.875rem;
95
+ background-color: var(--bg-primary);
96
+ }
97
+
98
+ .urlUpload {
99
+ display: flex;
100
+ gap: var(--spacing-sm);
101
+ }
102
+
103
+ .uploadProgress {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: var(--spacing-md);
107
+ padding: var(--spacing-md);
108
+ background-color: var(--bg-secondary);
109
+ border-radius: var(--radius-sm);
110
+ border: 1px solid var(--border-color);
111
+ }
112
+
113
+ .fileInfo {
114
+ display: flex;
115
+ align-items: center;
116
+ gap: var(--spacing-sm);
117
+ color: var(--text-primary);
118
+ }
119
+
120
+ .fileDetails {
121
+ display: flex;
122
+ flex-direction: column;
123
+ flex: 1;
124
+ gap: 0.25rem;
125
+ }
126
+
127
+ .fileName {
128
+ font-size: 0.875rem;
129
+ font-weight: 500;
130
+ color: var(--text-primary);
131
+ }
132
+
133
+ .fileSize {
134
+ font-size: 0.75rem;
135
+ color: var(--text-secondary);
136
+ }
137
+
138
+ .progressBarContainer {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: var(--spacing-sm);
142
+ }
143
+
144
+ .progressBar {
145
+ flex: 1;
146
+ height: 8px;
147
+ background-color: var(--bg-primary);
148
+ border-radius: 999px;
149
+ overflow: hidden;
150
+ }
151
+
152
+ .progressFill {
153
+ height: 100%;
154
+ background-color: var(--color-primary);
155
+ transition: width 0.3s ease;
156
+ border-radius: 999px;
157
+ }
158
+
159
+ .progressText {
160
+ font-size: 0.75rem;
161
+ font-weight: 600;
162
+ color: var(--text-secondary);
163
+ min-width: 40px;
164
+ text-align: right;
165
+ }
166
+
167
+ .pauseButton,
168
+ .removeButton {
169
+ background: transparent;
170
+ border: none;
171
+ color: var(--text-secondary);
172
+ cursor: pointer;
173
+ padding: 0.25rem;
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ transition: color var(--transition-fast);
178
+ border-radius: var(--radius-sm);
179
+ }
180
+
181
+ .pauseButton:hover,
182
+ .removeButton:hover {
183
+ color: var(--text-primary);
184
+ background-color: var(--bg-primary);
185
+ }
186
+
187
+ .imagePreview {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: var(--spacing-md);
191
+ }
192
+
193
+ .previewContainer {
194
+ position: relative;
195
+ width: 100%;
196
+ height: 200px;
197
+ max-height: 200px;
198
+ border-radius: var(--radius-lg);
199
+ overflow: hidden;
200
+ border: 1px solid var(--border-color);
201
+ background-color: var(--bg-secondary);
202
+ }
203
+
204
+ .previewImage {
205
+ width: 100%;
206
+ height: 100%;
207
+ object-fit: cover;
208
+ display: block;
209
+ }
210
+
211
+ .removeImageButton {
212
+ position: absolute;
213
+ top: var(--spacing-sm);
214
+ right: var(--spacing-sm);
215
+ background-color: rgba(0, 0, 0, 0.7);
216
+ color: white;
217
+ border: none;
218
+ border-radius: 50%;
219
+ width: 32px;
220
+ height: 32px;
221
+ display: flex;
222
+ align-items: center;
223
+ justify-content: center;
224
+ cursor: pointer;
225
+ transition: all var(--transition-fast);
226
+ }
227
+
228
+ .removeImageButton:hover {
229
+ background-color: rgba(0, 0, 0, 0.9);
230
+ transform: scale(1.1);
231
+ }
232
+
233
+ .checkIcon {
234
+ color: var(--color-success, #10b981);
235
+ margin-left: auto;
236
+ }
237
+
238
+ .dropZoneError {
239
+ border-color: #ef4444;
240
+ background-color: rgba(239, 68, 68, 0.05); /* slightly red bg */
241
+ }
242
+
243
+ .errorIcon {
244
+ color: #ef4444;
245
+ margin-bottom: var(--spacing-sm);
246
+ }
247
+
248
+ .errorMessageText {
249
+ font-size: 0.95rem;
250
+ color: #ef4444;
251
+ margin: 0;
252
+ font-weight: 500;
253
+ text-align: center;
254
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface VideoUploadProps {
3
+ value?: string;
4
+ onChange: (url: string) => void;
5
+ onKeyChange?: (key: string) => void;
6
+ accept?: string;
7
+ uploadUrl?: string;
8
+ tokenStorageKey?: string;
9
+ }
10
+ declare const VideoUpload: React.FC<VideoUploadProps>;
11
+ export default VideoUpload;
12
+ //# sourceMappingURL=VideoUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoUpload.d.ts","sourceRoot":"","sources":["../../../../../src/features/uploads/components/VideoUpload/VideoUpload.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AASxE,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyU3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,183 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useRef, useCallback, useEffect } from 'react';
4
+ import { X, Pause, Check, Video, ArrowLeft, ArrowRight, AlertCircle, Play, PauseIcon } from 'lucide-react';
5
+ import styles from './VideoUpload.module.css';
6
+ import TextInput from '@/features/inputs/components/Inputs/TextInput';
7
+ import Button from '@/features/buttons/components/Btns/Button';
8
+ import axios from 'axios';
9
+ const API_URL = process.env.NEXT_PUBLIC_API_URL;
10
+ const VideoUpload = ({ value = '', onChange, onKeyChange, accept = 'video/mp4,video/webm,video/ogg,video/quicktime', uploadUrl, tokenStorageKey, }) => {
11
+ const [isDragging, setIsDragging] = useState(false);
12
+ const [isUploading, setIsUploading] = useState(false);
13
+ const [uploadProgress, setUploadProgress] = useState(0);
14
+ const [uploadedFile, setUploadedFile] = useState(null);
15
+ const [urlInput, setUrlInput] = useState('');
16
+ const [isPlaying, setIsPlaying] = useState(false);
17
+ const fileInputRef = useRef(null);
18
+ const videoRef = useRef(null);
19
+ const dragCounterRef = useRef(0);
20
+ const [error, setError] = useState(null);
21
+ useEffect(() => {
22
+ if (!value || (typeof value === 'string' && value.trim().length === 0)) {
23
+ setUploadedFile(null);
24
+ setUploadProgress(0);
25
+ setIsUploading(false);
26
+ setIsDragging(false);
27
+ setIsPlaying(false);
28
+ setError(null);
29
+ dragCounterRef.current = 0;
30
+ if (fileInputRef.current) {
31
+ fileInputRef.current.value = '';
32
+ }
33
+ }
34
+ }, [value]);
35
+ useEffect(() => {
36
+ if (error) {
37
+ const timer = setTimeout(() => setError(null), 3000);
38
+ return () => clearTimeout(timer);
39
+ }
40
+ }, [error]);
41
+ const formatFileSize = (bytes) => {
42
+ if (bytes < 1024)
43
+ return `${bytes} B`;
44
+ if (bytes < 1024 * 1024)
45
+ return `${(bytes / 1024).toFixed(1)} KB`;
46
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
47
+ };
48
+ const handleFileSelect = async (file) => {
49
+ var _a, _b;
50
+ setError(null);
51
+ if (!file.type.startsWith('video/')) {
52
+ setError('Apenas videos sao permitidos');
53
+ return;
54
+ }
55
+ setUploadedFile({ name: file.name, size: file.size });
56
+ setIsUploading(true);
57
+ setUploadProgress(0);
58
+ try {
59
+ const formData = new FormData();
60
+ formData.append('file', file);
61
+ const token = (typeof window !== 'undefined' && tokenStorageKey) ? localStorage.getItem(tokenStorageKey) : null;
62
+ if (!uploadUrl) {
63
+ throw new Error('uploadUrl e obrigatorio para VideoUpload');
64
+ }
65
+ const uploadEndpoint = uploadUrl.startsWith('http')
66
+ ? uploadUrl
67
+ : `${API_URL}${uploadUrl}`;
68
+ const response = await axios.post(uploadEndpoint, formData, {
69
+ headers: Object.assign({ 'Content-Type': 'multipart/form-data' }, (token ? { Authorization: `Bearer ${token}` } : {})),
70
+ onUploadProgress: (progressEvent) => {
71
+ if (progressEvent.total) {
72
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
73
+ setUploadProgress(percentCompleted);
74
+ }
75
+ },
76
+ });
77
+ const videoUrl = response.data.url;
78
+ const objectKey = response.data.key;
79
+ setIsUploading(false);
80
+ setUploadProgress(100);
81
+ if (typeof objectKey === 'string' && objectKey.trim().length > 0) {
82
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange(objectKey);
83
+ }
84
+ onChange(videoUrl);
85
+ }
86
+ catch (error) {
87
+ const uploadError = error;
88
+ console.warn('Erro ao fazer upload do video:', uploadError.message);
89
+ const backendMessage = (_b = (_a = uploadError.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message;
90
+ const message = Array.isArray(backendMessage) ? backendMessage[0] : backendMessage;
91
+ setError(message || 'Erro ao fazer upload do video');
92
+ setIsUploading(false);
93
+ setUploadedFile(null);
94
+ setUploadProgress(0);
95
+ }
96
+ };
97
+ const handleDragEnter = useCallback((e) => {
98
+ e.preventDefault();
99
+ e.stopPropagation();
100
+ dragCounterRef.current++;
101
+ if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
102
+ setIsDragging(true);
103
+ }
104
+ }, []);
105
+ const handleDragLeave = useCallback((e) => {
106
+ e.preventDefault();
107
+ e.stopPropagation();
108
+ dragCounterRef.current--;
109
+ if (dragCounterRef.current === 0) {
110
+ setIsDragging(false);
111
+ }
112
+ }, []);
113
+ const handleDragOver = useCallback((e) => {
114
+ e.preventDefault();
115
+ e.stopPropagation();
116
+ }, []);
117
+ const handleDrop = useCallback((e) => {
118
+ e.preventDefault();
119
+ e.stopPropagation();
120
+ setIsDragging(false);
121
+ dragCounterRef.current = 0;
122
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
123
+ handleFileSelect(e.dataTransfer.files[0]);
124
+ }
125
+ }, []);
126
+ const handleFileInputChange = (e) => {
127
+ if (e.target.files && e.target.files.length > 0) {
128
+ handleFileSelect(e.target.files[0]);
129
+ }
130
+ };
131
+ const handleUrlUpload = () => {
132
+ setError(null);
133
+ if (urlInput.trim()) {
134
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange('');
135
+ onChange(urlInput.trim());
136
+ setUrlInput('');
137
+ }
138
+ };
139
+ const handleRemove = () => {
140
+ if (value && value.startsWith('blob:')) {
141
+ URL.revokeObjectURL(value);
142
+ }
143
+ onKeyChange === null || onKeyChange === void 0 ? void 0 : onKeyChange('');
144
+ onChange('');
145
+ setUploadedFile(null);
146
+ setUploadProgress(0);
147
+ setIsUploading(false);
148
+ setIsPlaying(false);
149
+ setError(null);
150
+ if (fileInputRef.current) {
151
+ fileInputRef.current.value = '';
152
+ }
153
+ };
154
+ const handlePause = () => {
155
+ console.log('Pausar upload');
156
+ };
157
+ const handleBrowseClick = () => {
158
+ var _a;
159
+ (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
160
+ };
161
+ const togglePlayPause = (e) => {
162
+ e.stopPropagation();
163
+ if (!videoRef.current)
164
+ return;
165
+ if (isPlaying) {
166
+ videoRef.current.pause();
167
+ }
168
+ else {
169
+ videoRef.current.play();
170
+ }
171
+ setIsPlaying(!isPlaying);
172
+ };
173
+ const handleVideoPlay = () => setIsPlaying(true);
174
+ const handleVideoPause = () => setIsPlaying(false);
175
+ const handleVideoEnded = () => setIsPlaying(false);
176
+ const hasVideo = Boolean(value && typeof value === 'string' && value.trim().length > 0 && !isUploading);
177
+ return (_jsxs("div", { className: styles.videoUploadContainer, children: [!hasVideo && !isUploading && (_jsxs(_Fragment, { children: [_jsxs("div", { className: `${styles.dropZone} ${isDragging ? styles.dragging : ''} ${error ? styles.dropZoneError : ''}`, onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, onClick: handleBrowseClick, children: [_jsx("div", { className: styles.dropZoneContent, children: error ? (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.errorIcon, children: _jsx(AlertCircle, { size: 48, color: "#ef4444" }) }), _jsx("p", { className: styles.errorMessageText, style: { color: '#ef4444' }, children: error })] })) : isDragging ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: styles.dragIcons, children: [_jsx(ArrowLeft, { size: 24 }), _jsx(ArrowRight, { size: 24 })] }), _jsx("p", { className: styles.dropText, children: "Solte seus videos aqui" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.uploadIcon, children: _jsx(Video, { size: 48 }) }), _jsx("p", { className: styles.dropText, children: "Arraste seu video aqui, ou clique para procurar" }), _jsx("p", { className: styles.supportedFormats, children: "Suporta: MP4, WebM, OGG, MOV" })] })) }), _jsx("input", { ref: fileInputRef, type: "file", accept: accept, onChange: handleFileInputChange, className: styles.fileInput, disabled: !!error })] }), _jsx("div", { className: styles.divider, children: _jsx("span", { children: "ou" }) }), _jsxs("div", { className: styles.urlUpload, children: [_jsx(TextInput, { value: urlInput, onChange: (value) => setUrlInput(value), placeholder: "Adicione URL do video", onKeyPress: (e) => {
178
+ if (e.key === 'Enter')
179
+ handleUrlUpload();
180
+ } }), _jsx(Button, { onClick: handleUrlUpload, disabled: !urlInput.trim(), children: "Upload" })] })] })), isUploading && uploadedFile && (_jsxs("div", { className: styles.uploadProgress, children: [_jsxs("div", { className: styles.fileInfo, children: [_jsx(Video, { size: 20 }), _jsxs("div", { className: styles.fileDetails, children: [_jsx("span", { className: styles.fileName, children: uploadedFile.name }), _jsx("span", { className: styles.fileSize, children: formatFileSize(uploadedFile.size) })] })] }), _jsxs("div", { className: styles.progressBarContainer, children: [_jsx("div", { className: styles.progressBar, children: _jsx("div", { className: styles.progressFill, style: { width: `${uploadProgress}%` } }) }), _jsxs("span", { className: styles.progressText, children: [uploadProgress, "%"] }), _jsx("button", { type: "button", onClick: handlePause, className: styles.pauseButton, title: "Pausar", children: _jsx(Pause, { size: 16 }) }), _jsx("button", { type: "button", onClick: handleRemove, className: styles.removeButton, title: "Cancelar", children: _jsx(X, { size: 16 }) })] })] })), hasVideo && value && value.trim().length > 0 && (_jsxs("div", { className: styles.videoPreview, children: [_jsxs("div", { className: styles.previewContainer, children: [_jsx("video", { ref: videoRef, src: value, className: styles.previewVideo, onPlay: handleVideoPlay, onPause: handleVideoPause, onEnded: handleVideoEnded, onError: () => onChange('') }, value), _jsx("button", { type: "button", onClick: togglePlayPause, className: styles.playPauseButton, title: isPlaying ? 'Pausar' : 'Reproduzir', children: isPlaying ? _jsx(PauseIcon, { size: 32 }) : _jsx(Play, { size: 32 }) }), _jsx("button", { type: "button", onClick: handleRemove, className: styles.removeVideoButton, title: "Remover video", children: _jsx(X, { size: 20 }) })] }), uploadedFile && (_jsxs("div", { className: styles.fileInfo, children: [_jsx(Video, { size: 16 }), _jsx("span", { className: styles.fileName, children: uploadedFile.name }), _jsx("span", { className: styles.fileSize, children: formatFileSize(uploadedFile.size) }), _jsx(Check, { size: 16, className: styles.checkIcon })] }))] }))] }));
181
+ };
182
+ export default VideoUpload;
183
+ //# sourceMappingURL=VideoUpload.js.map