dgrcorrientes-modulos 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/.nvmrc +1 -0
  2. package/.prettierrc.cjs +8 -0
  3. package/.storybook/main.cjs +11 -0
  4. package/.storybook/manager-head.html +2 -0
  5. package/.storybook/manager.cjs +6 -0
  6. package/.storybook/preview-head.html +3 -0
  7. package/.storybook/preview.cjs +11 -0
  8. package/.storybook/themes.cjs +14 -0
  9. package/README.md +21 -0
  10. package/StoryBook.txt +19 -0
  11. package/dist-config.cjs +57 -0
  12. package/index.html +13 -0
  13. package/package.json +60 -0
  14. package/public/elevation.ico +0 -0
  15. package/public/elevationImage.png +0 -0
  16. package/public/vite.svg +1 -0
  17. package/src/App.scss +36 -0
  18. package/src/App.tsx +34 -0
  19. package/src/assets/react.svg +1 -0
  20. package/src/index.js +70 -0
  21. package/src/index.scss +63 -0
  22. package/src/index.ts +108 -0
  23. package/src/main.tsx +11 -0
  24. package/src/sass/base/_base.scss +50 -0
  25. package/src/sass/base/_controls.scss +90 -0
  26. package/src/sass/base/_datepicker.scss +114 -0
  27. package/src/sass/base/_typo.scss +71 -0
  28. package/src/sass/base/fonts/SFUIText-Bold.ttf +0 -0
  29. package/src/sass/base/fonts/SFUIText-BoldItalic.ttf +0 -0
  30. package/src/sass/base/fonts/SFUIText-Heavy.ttf +0 -0
  31. package/src/sass/base/fonts/SFUIText-HeavyItalic.ttf +0 -0
  32. package/src/sass/base/fonts/SFUIText-Light.ttf +0 -0
  33. package/src/sass/base/fonts/SFUIText-LightItalic.ttf +0 -0
  34. package/src/sass/base/fonts/SFUIText-Medium.ttf +0 -0
  35. package/src/sass/base/fonts/SFUIText-MediumItalic.ttf +0 -0
  36. package/src/sass/base/fonts/SFUIText-Regular.ttf +0 -0
  37. package/src/sass/base/fonts/SFUIText-RegularItalic.ttf +0 -0
  38. package/src/sass/base/fonts/SFUIText-Semibold.ttf +0 -0
  39. package/src/sass/base/fonts/SFUIText-SemiboldItalic.ttf +0 -0
  40. package/src/sass/bulma/bulma-changes.scss +19 -0
  41. package/src/sass/bulma/extensions/extensions.sass +1 -0
  42. package/src/sass/bulma/extensions/steps/bulma-steps.sass +3 -0
  43. package/src/sass/bulma/extensions/steps/index.sass +421 -0
  44. package/src/sass/bulma/variables/_variables-bulma.sass +16 -0
  45. package/src/sass/bulma/variables/components/card.sass +20 -0
  46. package/src/sass/bulma/variables/components/navbar.sass +50 -0
  47. package/src/sass/bulma/variables/components/tabs.sass +28 -0
  48. package/src/sass/bulma/variables/elements/button.sass +46 -0
  49. package/src/sass/bulma/variables/elements/notification.sass +8 -0
  50. package/src/sass/bulma/variables/elements/title.sass +20 -0
  51. package/src/sass/bulma/variables/grid/column.sass +2 -0
  52. package/src/sass/main.sass +16 -0
  53. package/src/sass/utilities/_bulma-variables.sass +20 -0
  54. package/src/sass/utilities/_derived-variables.scss +68 -0
  55. package/src/sass/utilities/_helpers.scss +70 -0
  56. package/src/sass/utilities/_variables.scss +147 -0
  57. package/src/stories/Changelog.stories.tsx +73 -0
  58. package/src/stories/Components/AssistanceDiary/AssistanceDiary.scss +19 -0
  59. package/src/stories/Components/AssistanceDiary/AssistanceDiary.stories.tsx +25 -0
  60. package/src/stories/Components/AssistanceDiary/AssistanceDiary.tsx +57 -0
  61. package/src/stories/Components/AverageAttended/AverageAttended.scss +39 -0
  62. package/src/stories/Components/AverageAttended/AverageAttended.stories.tsx +71 -0
  63. package/src/stories/Components/AverageAttended/AverageAttended.tsx +311 -0
  64. package/src/stories/Components/Breadcrumb/Breadcrumb.stories.tsx +45 -0
  65. package/src/stories/Components/Breadcrumb/Breadcrumb.tsx +68 -0
  66. package/src/stories/Components/Breadcrumb/breadcrumb.scss +82 -0
  67. package/src/stories/Components/CTA/CTA.scss +76 -0
  68. package/src/stories/Components/CTA/CTA.stories.tsx +46 -0
  69. package/src/stories/Components/CTA/CTA.tsx +70 -0
  70. package/src/stories/Components/Cards/Card CTA/CardCta.stories.tsx +34 -0
  71. package/src/stories/Components/Cards/Card CTA/CardCta.tsx +81 -0
  72. package/src/stories/Components/Cards/Card CTA/cardCta.scss +71 -0
  73. package/src/stories/Components/Cards/Card Expiration/cardExpiration.scss +105 -0
  74. package/src/stories/Components/Cards/Card Expiration/cardExpiration.stories.tsx +40 -0
  75. package/src/stories/Components/Cards/Card Expiration/cardExpiration.tsx +95 -0
  76. package/src/stories/Components/Cards/Card Vertical/CardVertical.stories.tsx +43 -0
  77. package/src/stories/Components/Cards/Card Vertical/CardVertical.tsx +106 -0
  78. package/src/stories/Components/Cards/Card Vertical/cardVertical.scss +130 -0
  79. package/src/stories/Components/Cards/CardActivity/cardActivity.scss +31 -0
  80. package/src/stories/Components/Cards/CardActivity/cardActivity.stories.tsx +20 -0
  81. package/src/stories/Components/Cards/CardActivity/cardActivity.tsx +48 -0
  82. package/src/stories/Components/Cards/CardHorizontal/CardHorizontal.stories.tsx +96 -0
  83. package/src/stories/Components/Cards/CardHorizontal/CardHorizontal.tsx +94 -0
  84. package/src/stories/Components/Cards/CardHorizontal/cardHorizontal.scss +65 -0
  85. package/src/stories/Components/Cards/CardUser/CardUser.stories.tsx +135 -0
  86. package/src/stories/Components/Cards/CardUser/CardUser.tsx +122 -0
  87. package/src/stories/Components/Cards/CardUser/cardUser.scss +115 -0
  88. package/src/stories/Components/Cart/Cart.scss +279 -0
  89. package/src/stories/Components/Cart/Cart.stories.tsx +350 -0
  90. package/src/stories/Components/Cart/Cart.tsx +277 -0
  91. package/src/stories/Components/Collapse/Collapse.scss +339 -0
  92. package/src/stories/Components/Collapse/Collapse.stories.tsx +766 -0
  93. package/src/stories/Components/Collapse/Collapse.tsx +451 -0
  94. package/src/stories/Components/CollapseEdit/CollapseEdit.scss +128 -0
  95. package/src/stories/Components/CollapseEdit/CollapseEdit.stories.tsx +29 -0
  96. package/src/stories/Components/CollapseEdit/CollapseEdit.tsx +185 -0
  97. package/src/stories/Components/CompleteDiary/CompleteDiary.scss +165 -0
  98. package/src/stories/Components/CompleteDiary/CompleteDiary.stories.tsx +219 -0
  99. package/src/stories/Components/CompleteDiary/CompleteDiary.tsx +394 -0
  100. package/src/stories/Components/Dropdown/Dropdown.scss +60 -0
  101. package/src/stories/Components/Dropdown/Dropdown.stories.tsx +19 -0
  102. package/src/stories/Components/Dropdown/Dropdown.tsx +99 -0
  103. package/src/stories/Components/EmptyState/EmptyState.stories.tsx +46 -0
  104. package/src/stories/Components/EmptyState/EmptyState.tsx +44 -0
  105. package/src/stories/Components/EmptyState/emptyState.scss +75 -0
  106. package/src/stories/Components/ErrorPage/ErrorPage.scss +65 -0
  107. package/src/stories/Components/ErrorPage/ErrorPage.stories.tsx +164 -0
  108. package/src/stories/Components/ErrorPage/ErrorPage.tsx +107 -0
  109. package/src/stories/Components/IncomingCall/IncomingCall.scss +27 -0
  110. package/src/stories/Components/IncomingCall/IncomingCall.stories.tsx +43 -0
  111. package/src/stories/Components/IncomingCall/IncomingCall.tsx +76 -0
  112. package/src/stories/Components/ModalConfirm/ModalConfirm.scss +30 -0
  113. package/src/stories/Components/ModalConfirm/ModalConfirm.stories.tsx +21 -0
  114. package/src/stories/Components/ModalConfirm/ModalConfirm.tsx +118 -0
  115. package/src/stories/Components/Pagination/Pagination.scss +42 -0
  116. package/src/stories/Components/Pagination/Pagination.stories.tsx +25 -0
  117. package/src/stories/Components/Pagination/Pagination.tsx +143 -0
  118. package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.scss +26 -0
  119. package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.stories.tsx +27 -0
  120. package/src/stories/Components/PerformanceAssessment/PerformanceAssessment.tsx +108 -0
  121. package/src/stories/Components/ShiftDiary/ShiftDiary.scss +45 -0
  122. package/src/stories/Components/ShiftDiary/ShiftDiary.stories.tsx +32 -0
  123. package/src/stories/Components/ShiftDiary/ShiftDiary.tsx +92 -0
  124. package/src/stories/Components/Stepper/Stepper.stories.tsx +26 -0
  125. package/src/stories/Components/Stepper/Stepper.tsx +102 -0
  126. package/src/stories/Components/Stepper/stepper.scss +59 -0
  127. package/src/stories/Components/Tabs/Tabs.stories.tsx +76 -0
  128. package/src/stories/Components/Tabs/Tabs.tsx +111 -0
  129. package/src/stories/Components/Tabs/tabs.scss +118 -0
  130. package/src/stories/Components/Tooltip/Tooltip.scss +235 -0
  131. package/src/stories/Components/Tooltip/Tooltip.stories.tsx +125 -0
  132. package/src/stories/Components/Tooltip/Tooltip.tsx +222 -0
  133. package/src/stories/Elements/Alert/Alert.stories.tsx +65 -0
  134. package/src/stories/Elements/Alert/Alert.tsx +49 -0
  135. package/src/stories/Elements/Alert/alert.scss +189 -0
  136. package/src/stories/Elements/Badge/Badge.stories.tsx +15 -0
  137. package/src/stories/Elements/Badge/Badge.tsx +21 -0
  138. package/src/stories/Elements/Badge/badge.scss +24 -0
  139. package/src/stories/Elements/Button/Button.stories.tsx +54 -0
  140. package/src/stories/Elements/Button/Button.tsx +118 -0
  141. package/src/stories/Elements/Button/button.scss +102 -0
  142. package/src/stories/Elements/Icon/Icon.stories.tsx +33 -0
  143. package/src/stories/Elements/Icon/Icon.tsx +57 -0
  144. package/src/stories/Elements/Icon/icon.scss +15 -0
  145. package/src/stories/Elements/Icon/icono.svg +1 -0
  146. package/src/stories/Elements/ProgressBar/ProgressBar.scss +26 -0
  147. package/src/stories/Elements/ProgressBar/ProgressBar.stories.tsx +19 -0
  148. package/src/stories/Elements/ProgressBar/ProgressBar.tsx +35 -0
  149. package/src/stories/Form/Autocomplete/Autocomplete.stories.tsx +55 -0
  150. package/src/stories/Form/Autocomplete/Autocomplete.tsx +160 -0
  151. package/src/stories/Form/Autocomplete/autocomplete.scss +311 -0
  152. package/src/stories/Form/Autocomplete-Prueba/Autocomplete.stories.tsx +50 -0
  153. package/src/stories/Form/Autocomplete-Prueba/AutocompletePrueba.tsx +83 -0
  154. package/src/stories/Form/Checkbox/Checkbox.stories.tsx +26 -0
  155. package/src/stories/Form/Checkbox/Checkbox.tsx +89 -0
  156. package/src/stories/Form/Checkbox/checkbox.scss +41 -0
  157. package/src/stories/Form/DatePicker/DatePickerExample.stories.tsx +27 -0
  158. package/src/stories/Form/DatePicker/DatePickerExample.tsx +65 -0
  159. package/src/stories/Form/DatePickerComponent/DatePickerComponent.scss +116 -0
  160. package/src/stories/Form/DatePickerComponent/DatePickerComponent.stories.tsx +37 -0
  161. package/src/stories/Form/DatePickerComponent/DatePickerComponent.tsx +97 -0
  162. package/src/stories/Form/Filters/Filters.stories.tsx +84 -0
  163. package/src/stories/Form/Filters/Filters.tsx +230 -0
  164. package/src/stories/Form/Filters/filters.scss +261 -0
  165. package/src/stories/Form/Input/Input.stories.tsx +25 -0
  166. package/src/stories/Form/Input/Input.tsx +86 -0
  167. package/src/stories/Form/Input/InputVar.sass +26 -0
  168. package/src/stories/Form/Input/input.scss +19 -0
  169. package/src/stories/Form/InputFormControl/Input-form-control.stories.tsx +26 -0
  170. package/src/stories/Form/InputFormControl/Input-form-control.tsx +48 -0
  171. package/src/stories/Form/InputFormControl/input-form-control.scss +34 -0
  172. package/src/stories/Form/Radio/Radio.stories.tsx +19 -0
  173. package/src/stories/Form/Radio/Radio.tsx +84 -0
  174. package/src/stories/Form/Radio/radio.scss +19 -0
  175. package/src/stories/Form/Search/Search.scss +50 -0
  176. package/src/stories/Form/Search/Search.stories.tsx +26 -0
  177. package/src/stories/Form/Search/Search.tsx +84 -0
  178. package/src/stories/Form/Select/Select.stories.tsx +55 -0
  179. package/src/stories/Form/Select/Select.tsx +121 -0
  180. package/src/stories/Form/Select/select.scss +303 -0
  181. package/src/stories/Form/Switch/Switch.stories.tsx +17 -0
  182. package/src/stories/Form/Switch/Switch.tsx +36 -0
  183. package/src/stories/Form/Switch/switch.scss +123 -0
  184. package/src/stories/Form/Textarea/Textarea.stories.tsx +19 -0
  185. package/src/stories/Form/Textarea/Textarea.tsx +52 -0
  186. package/src/stories/Form/Textarea/textarea.scss +25 -0
  187. package/src/stories/Form/UploadFileItem/UploadFileItem.scss +49 -0
  188. package/src/stories/Form/UploadFileItem/UploadFileItem.stories.tsx +18 -0
  189. package/src/stories/Form/UploadFileItem/UploadFileItem.tsx +89 -0
  190. package/src/stories/Form/UploadFiles/UploadFiles.scss +17 -0
  191. package/src/stories/Form/UploadFiles/UploadFiles.stories.tsx +32 -0
  192. package/src/stories/Form/UploadFiles/UploadFiles.tsx +177 -0
  193. package/src/stories/Layout/Footer/Footer.scss +129 -0
  194. package/src/stories/Layout/Footer/Footer.stories.tsx +101 -0
  195. package/src/stories/Layout/Footer/Footer.tsx +81 -0
  196. package/src/stories/Layout/Header/Header.scss +190 -0
  197. package/src/stories/Layout/Header/Header.stories.tsx +223 -0
  198. package/src/stories/Layout/Header/Header.tsx +278 -0
  199. package/src/stories/Layout/HeaderTable/HeaderTable.scss +21 -0
  200. package/src/stories/Layout/HeaderTable/HeaderTable.stories.tsx +112 -0
  201. package/src/stories/Layout/HeaderTable/HeaderTable.tsx +72 -0
  202. package/src/stories/Layout/Sidebar/Sidebar.scss +50 -0
  203. package/src/stories/Layout/Sidebar/Sidebar.stories.tsx +744 -0
  204. package/src/stories/Layout/Sidebar/Sidebar.tsx +129 -0
  205. package/src/stories/Layout/SidebarEmpty/SidebarEmpty.scss +64 -0
  206. package/src/stories/Layout/SidebarEmpty/SidebarEmpty.stories.tsx +26 -0
  207. package/src/stories/Layout/SidebarEmpty/SidebarEmpty.tsx +100 -0
  208. package/src/stories/Layout/Subtitle/Subtitle.scss +88 -0
  209. package/src/stories/Layout/Subtitle/Subtitle.stories.tsx +46 -0
  210. package/src/stories/Layout/Subtitle/Subtitle.tsx +108 -0
  211. package/src/stories/Layout/Title/Title.scss +79 -0
  212. package/src/stories/Layout/Title/Title.stories.tsx +86 -0
  213. package/src/stories/Layout/Title/Title.tsx +96 -0
  214. package/src/stories/Welcome.stories.tsx +111 -0
  215. package/src/stories/assets/404 Page Not Found _Two Color (1).png +0 -0
  216. package/src/stories/assets/404 Page Not Found _Two Color.png +0 -0
  217. package/src/stories/assets/Empty Inbox _Two Color.png +0 -0
  218. package/src/stories/assets/Loading _Two Color.png +0 -0
  219. package/src/stories/assets/Notifications_Two Color 1.png +0 -0
  220. package/src/stories/assets/Online protection_Two Color.png +0 -0
  221. package/src/stories/assets/Under Constructions _Two Color.png +0 -0
  222. package/src/stories/assets/bulma.png +0 -0
  223. package/src/stories/assets/burger.svg +5 -0
  224. package/src/stories/assets/code-brackets.svg +1 -0
  225. package/src/stories/assets/colors.svg +1 -0
  226. package/src/stories/assets/comments.svg +1 -0
  227. package/src/stories/assets/decor-bg.png +0 -0
  228. package/src/stories/assets/direction.svg +1 -0
  229. package/src/stories/assets/e-isologo.svg +4 -0
  230. package/src/stories/assets/e-isotype.svg +4 -0
  231. package/src/stories/assets/e-logo_negative.svg +14 -0
  232. package/src/stories/assets/e-logotype.svg +14 -0
  233. package/src/stories/assets/flow.svg +1 -0
  234. package/src/stories/assets/logo_gobierno_corrientes.svg +9 -0
  235. package/src/stories/assets/logo_rentas_corrientes.svg +10 -0
  236. package/src/stories/assets/logo_rentas_corrientes_compacto.svg +10 -0
  237. package/src/stories/assets/plugin.svg +1 -0
  238. package/src/stories/assets/repo.svg +1 -0
  239. package/src/stories/assets/stackalt.svg +1 -0
  240. package/src/stories/assets/storybook.svg +13 -0
  241. package/src/stories/assets/thumbnail-black.jpg +0 -0
  242. package/src/stories/assets/thumbnail-black[2].jpg +0 -0
  243. package/src/stories/assets/thumbnail.jpg +0 -0
  244. package/src/stories/assets/thumbnail[2].jpg +0 -0
  245. package/src/stories/changelog.ts +389 -0
  246. package/src/utils/functions.ts +57 -0
  247. package/src/vite-env.d.ts +2 -0
  248. package/static/e-isologo-192.jpg +0 -0
  249. package/static/e-isologo.svg +4 -0
  250. package/static/e-logotype.svg +14 -0
  251. package/static/favicon.ico +0 -0
  252. package/tsconfig.json +22 -0
  253. package/tsconfig.node.json +9 -0
  254. package/vite.config.ts +22 -0
@@ -0,0 +1,89 @@
1
+ import './UploadFileItem.scss';
2
+ import {ProgressBar, IProgressBar} from '../../Elements/ProgressBar/ProgressBar';
3
+ import {IButton, Button} from '../../Elements/Button/Button';
4
+ import {formatFileSize, getIconForFile} from '../../../utils/functions';
5
+ import {IIcon, Icon} from '../../Elements/Icon/Icon';
6
+
7
+ export interface IUploadFileItem extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
8
+ // BASE
9
+ /**Archivo */
10
+ file?: File;
11
+ /**Nombre del archivo */
12
+ file_name?: string;
13
+ /**Tamaño en bytes */
14
+ file_size?: number;
15
+ progressBar?: IProgressBar;
16
+ showBar: boolean;
17
+
18
+ // IS-OPTIONS
19
+
20
+ // EVENTS
21
+ onPreview?: (file: File) => void;
22
+ onDelete?: (file: File) => void;
23
+
24
+ // GENERIC
25
+ className?: string;
26
+ }
27
+
28
+ export const UploadFileItem = ({
29
+ className,
30
+ progressBar,
31
+ showBar,
32
+ file,
33
+ file_name,
34
+ file_size,
35
+ onPreview,
36
+ onDelete,
37
+ ...props
38
+ }: IUploadFileItem) => {
39
+ return (
40
+ <div className="elv-component elv-uploadfile" {...props}>
41
+ <div className={['uploadfile p-4 is-flex is-align-items-center is-relative ', `${className ? ' ' + className : ''}`].join('')}>
42
+ <div className="mr-5">{file_name && <Icon icon={getIconForFile(file_name)} className="has-tc-primary-600" size="24px" />}</div>
43
+ <div className="uploadfile__info is-flex-direction-column ">
44
+ <div className="is-flex is-justify-content-space-between is-align-items-center ">
45
+ <div className="is-flex is-align-items-center">
46
+ {file_name ? (
47
+ <p className="file_name is-size-7">{file_name}</p>
48
+ ) : file ? (
49
+ <p className="file_name is-size-7">{file.name}</p>
50
+ ) : (
51
+ <></>
52
+ )}
53
+ <span className="uploadfile__elipse has-background-grey mt-2 mr-2 ml-2"></span>
54
+ <Button
55
+ label="Previsualizar"
56
+ fill="unstyled"
57
+ className="preview"
58
+ onClick={() => {
59
+ file && onPreview ? onPreview(file) : null;
60
+ }}
61
+ />
62
+ </div>
63
+
64
+ {file_size ? (
65
+ <div className="is-size-7">{formatFileSize(file_size)}</div>
66
+ ) : file ? (
67
+ <div className="is-size-7">{formatFileSize(file.size)}</div>
68
+ ) : (
69
+ <></>
70
+ )}
71
+ </div>
72
+ {showBar && (
73
+ <div className="uploadfile__progress pt-2">
74
+ <ProgressBar {...progressBar}></ProgressBar>
75
+ </div>
76
+ )}
77
+ </div>
78
+ <div
79
+ className="uploadfile__icon is-absolute"
80
+ onClick={() => {
81
+ file && onDelete ? onDelete(file) : null;
82
+ }}
83
+ >
84
+ <Icon icon="fa-solid fa-circle-xmark fa-2xl" />
85
+ </div>
86
+ </div>
87
+ </div>
88
+ );
89
+ };
@@ -0,0 +1,17 @@
1
+ @import '/src/sass/utilities/variables';
2
+
3
+ .elv-uploadfiles {
4
+ .uploadfiles {
5
+ &__data {
6
+ color: $truegray-400;
7
+ }
8
+
9
+ &__download {
10
+ width: 483px;
11
+ }
12
+
13
+ .dragging {
14
+ border: 1px dashed black;
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,32 @@
1
+ import {ComponentStory, ComponentMeta} from '@storybook/react';
2
+ import {UploadFiles} from './UploadFiles';
3
+
4
+ export default {
5
+ title: 'Form/UploadFiles',
6
+ component: UploadFiles,
7
+ args: {
8
+ labelSelection: 'Seleccioná un archivo o arrastralo acá',
9
+ labelData: 'JPG, PNG ó PDF, tamaño máximo 10MB',
10
+ maxSizeInMB: 5,
11
+ maxFiles: 3,
12
+ defaultFiles: [new File(['archivo1'], 'archivo1.pdf'), new File(['archivo2'], 'archivo2.pdf')],
13
+ onPreviewFile(file) {
14
+ console.log('Preview: ' + file.name);
15
+ },
16
+ onDeleteFile(file) {
17
+ console.log('Se eliminó: ' + file.name);
18
+ },
19
+ onErrorExtensions(file) {
20
+ alert('Extensión no permitida');
21
+ },
22
+ onErrorSize(file) {
23
+ alert('Se excedió del tamaño máximo');
24
+ },
25
+ acceptedExtensions: ['txt', 'pdf'],
26
+ },
27
+ } as ComponentMeta<typeof UploadFiles>;
28
+
29
+ const Template: ComponentStory<typeof UploadFiles> = args => <UploadFiles {...args} />;
30
+
31
+ export const Standard = Template.bind({});
32
+ Standard.args = {};
@@ -0,0 +1,177 @@
1
+ import './UploadFiles.scss';
2
+ import {UploadFileItem, IUploadFileItem} from '../UploadFileItem/UploadFileItem';
3
+ import {FormEvent, useState} from 'react';
4
+ import {Icon} from '../../Elements/Icon/Icon';
5
+
6
+ export interface IUploadFiles extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
7
+ // BASE
8
+ labelSelection?: string;
9
+ labelData?: string;
10
+ maxSizeInMB: number;
11
+ maxFiles: number;
12
+ screenshot: string;
13
+ icon: string;
14
+ number: string;
15
+ progressUpload: number[];
16
+ // IS-OPTIONS
17
+ defaultFiles?: File[];
18
+ acceptedExtensions?: string[];
19
+
20
+ // EVENTS
21
+ onProgressFile?: (file: File) => void;
22
+ onPreviewFile?: (file: File) => void;
23
+ onDeleteFile?: (file: File) => void;
24
+
25
+ onErrorSize?: (file: File) => void;
26
+ onErrorExtensions?: (file: File) => void;
27
+
28
+ // GENERIC
29
+ className?: string;
30
+ }
31
+
32
+ export const UploadFiles = ({
33
+ className,
34
+ labelSelection,
35
+ labelData,
36
+ maxSizeInMB,
37
+ maxFiles,
38
+ progressUpload,
39
+ defaultFiles,
40
+ acceptedExtensions,
41
+ onProgressFile,
42
+ onPreviewFile,
43
+ onDeleteFile,
44
+ onErrorSize,
45
+ onErrorExtensions,
46
+ ...props
47
+ }: IUploadFiles) => {
48
+ const [dragging, setDragging] = useState(false);
49
+ // const [progress, setProgress] = useState(0);
50
+ // const [uploadedFile, setUploadedFile] = useState(null);
51
+ const [fileList, setFileList] = useState<File[]>(() => {
52
+ if (!acceptedExtensions || acceptedExtensions?.length === 0) {
53
+ return defaultFiles || [];
54
+ } else {
55
+ // Si acceptedExtensions tiene extensiones específicas, filtra defaultFiles por esas extensiones
56
+ return (defaultFiles || []).filter(file => {
57
+ const extension = file.name.split('.').pop()?.toLowerCase();
58
+ return acceptedExtensions?.includes(extension || '');
59
+ });
60
+ }
61
+ });
62
+
63
+ const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {
64
+ e.preventDefault();
65
+ setDragging(true);
66
+ };
67
+
68
+ const handleDragLeave = () => {
69
+ setDragging(false);
70
+ };
71
+
72
+ const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {
73
+ e.preventDefault();
74
+ setDragging(false);
75
+
76
+ const newFiles = e.dataTransfer.files;
77
+
78
+ if (newFiles) {
79
+ handleNewFiles(newFiles);
80
+ }
81
+ };
82
+
83
+ const onFileDrop = (e: React.ChangeEvent<HTMLInputElement>) => {
84
+ const newFiles = e.target.files;
85
+
86
+ if (newFiles) {
87
+ handleNewFiles(newFiles);
88
+ }
89
+ };
90
+
91
+ const handleNewFiles = (newFiles: FileList) => {
92
+ if (newFiles.length <= maxFiles && fileList.length + newFiles.length <= maxFiles) {
93
+ for (let index = 0; index < newFiles.length; index++) {
94
+ const newFile = newFiles[index];
95
+ const fileNameParts = newFile.name.split('.');
96
+ const extension = fileNameParts.length > 1 ? fileNameParts.pop()?.toLowerCase() : '';
97
+
98
+ // Verificar si la extensión está permitida
99
+ if (acceptedExtensions?.length === 0 || acceptedExtensions?.includes(extension || '')) {
100
+ if (newFile.size <= maxSizeInMB * 1024 * 1024) {
101
+ onProgressFile && onProgressFile(newFile);
102
+ } else {
103
+ // alert('El archivo es demasiado grande. El tamaño máximo es de ' + maxSizeInMB + ' megabytes.');
104
+ onErrorSize && onErrorSize(newFile);
105
+ return;
106
+ }
107
+
108
+ setFileList(prevFileList => [...prevFileList, newFile]);
109
+ } else {
110
+ // alert('La extensión del archivo no está permitida.');
111
+ onErrorExtensions && onErrorExtensions(newFile);
112
+ return;
113
+ }
114
+ }
115
+ } else {
116
+ alert('La cantidad de archivos exceden el máximo que es: ' + maxFiles + '.');
117
+ return;
118
+ }
119
+ };
120
+
121
+ const removeFileFromList = (fileToRemove: File) => {
122
+ const updatedList = fileList.filter(file => file !== fileToRemove);
123
+ setFileList(updatedList);
124
+ };
125
+
126
+ return (
127
+ <div className="elv-component elv-uploadfiles" {...props}>
128
+ <div
129
+ className={[
130
+ 'uploadfiles is-flex is-flex-direction-column is-align-items-center is-gap-4 p-5',
131
+ `${className ? ' ' + className : ''}`,
132
+ ].join('')}
133
+ >
134
+ <div
135
+ className={`uploadfiles__files file ${dragging ? 'dragging' : ''}`}
136
+ onDragEnter={handleDragEnter}
137
+ onDragLeave={handleDragLeave}
138
+ onDragOver={e => e.preventDefault()}
139
+ onDrop={handleDrop}
140
+ >
141
+ <label htmlFor="file-input" className="file-label">
142
+ <input id="file-input" className="file-input" type="file" name="resume" onChange={onFileDrop} multiple />
143
+ <span className="file-cta px-6 py-5 is-flex-direction-column">
144
+ <span className="file-icon">
145
+ <Icon icon="fas fa-upload has-text-grey-dark mb-3"></Icon>
146
+ </span>
147
+ <span className="file-label has-text-grey-dark">{labelSelection}</span>
148
+ </span>
149
+ </label>
150
+ </div>
151
+ <div className="uploadfiles__data">{labelData}</div>
152
+ {fileList.length > 0 ? (
153
+ <div>
154
+ {fileList.map((item, index) => (
155
+ <div key={index} className="uploadfiles__download mb-3">
156
+ <UploadFileItem
157
+ showBar={progressUpload && progressUpload[index] && progressUpload[index] !== 100 ? true : false}
158
+ file={item}
159
+ file_name={item.name}
160
+ file_size={item.size}
161
+ onPreview={file => {
162
+ onPreviewFile && onPreviewFile(file);
163
+ }}
164
+ onDelete={file => {
165
+ onDeleteFile && onDeleteFile(file);
166
+ removeFileFromList(file);
167
+ }}
168
+ progressBar={{value: progressUpload && progressUpload[index] ? progressUpload[index] : 0}}
169
+ />
170
+ </div>
171
+ ))}
172
+ </div>
173
+ ) : null}
174
+ </div>
175
+ </div>
176
+ );
177
+ };
@@ -0,0 +1,129 @@
1
+ @import '/src/sass/utilities/variables';
2
+
3
+ .elv-footer {
4
+ width: 100%;
5
+
6
+ .footer-component {
7
+ border-top: 4px solid $truegray-200;
8
+ background-color: $white;
9
+ min-width: 320px;
10
+
11
+ &__container {
12
+ gap: 16px;
13
+ padding-top: 24px;
14
+ padding-bottom: 24px;
15
+
16
+ display: grid;
17
+ grid-template-columns: 1fr 1fr 1fr 1fr;
18
+
19
+ @media screen and (max-width: 870px) {
20
+ grid-template-columns: 1fr 1fr;
21
+ }
22
+
23
+ @media screen and (max-width: $mobile) {
24
+ grid-template-columns: 1fr;
25
+ gap: 48px;
26
+ align-items: center;
27
+ justify-content: center;
28
+ }
29
+
30
+ @media screen and (max-width: $desktopFullHd) {
31
+ padding-left: 10%;
32
+ padding-right: 10%;
33
+ }
34
+
35
+ @media screen and (min-width: $desktopFullHd) {
36
+ padding-left: 320px;
37
+ padding-right: 320px;
38
+ }
39
+
40
+ .button {
41
+ padding: 2px;
42
+ }
43
+
44
+ .column-item {
45
+ gap: 16px;
46
+
47
+ &__title {
48
+ font-weight: $fw-medium;
49
+ font-size: 24px;
50
+ width: 100%;
51
+ }
52
+ }
53
+
54
+ .final-item {
55
+ gap: 19px;
56
+
57
+ &__title {
58
+ padding-bottom: 2px;
59
+ font-weight: $fw-medium;
60
+ font-size: 24px;
61
+ }
62
+
63
+ &__phoneNumber {
64
+ font-size: 20px;
65
+ font-weight: $fw-medium;
66
+ }
67
+ }
68
+ }
69
+
70
+ &__end {
71
+ background-color: $truegray-100;
72
+ padding-top: 16px;
73
+ padding-bottom: 16px;
74
+
75
+ @media screen and (max-width: $desktopFullHd) {
76
+ padding-left: 10%;
77
+ padding-right: 10%;
78
+ }
79
+
80
+ @media screen and (min-width: $desktopFullHd) {
81
+ padding-left: 320px;
82
+ padding-right: 320px;
83
+ }
84
+
85
+ .logos {
86
+ gap: 24px;
87
+ padding-bottom: 16px;
88
+
89
+ @media screen and (max-width: $mobile) {
90
+ flex-direction: column;
91
+ }
92
+ }
93
+
94
+ .copy {
95
+ gap: 16px;
96
+ font-size: 12px;
97
+ color: $text-400;
98
+
99
+ &__text {
100
+ padding-top: 3px;
101
+ }
102
+
103
+ .button {
104
+ padding: 0px;
105
+ font-size: 12px;
106
+ color: $text-400;
107
+ }
108
+
109
+ @media screen and (max-width: $mobile) {
110
+ margin-top: 1rem;
111
+ flex-direction: column;
112
+ }
113
+
114
+ .end-button-links {
115
+ gap: 16px;
116
+
117
+ &__item {
118
+ padding-left: 10px;
119
+ border-left: 1px solid $truegray-400;
120
+ }
121
+
122
+ @media screen and (max-width: $mobile) {
123
+ // gap: 0px;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,101 @@
1
+ import React from 'react';
2
+ import {ComponentStory, ComponentMeta} from '@storybook/react';
3
+ import {Footer} from './Footer';
4
+
5
+ import logo_gobierno_corrientes from '../../assets/logo_gobierno_corrientes.svg';
6
+ import logo_rentas_corrientes from '../../assets/logo_rentas_corrientes.svg';
7
+
8
+ export default {
9
+ title: 'Layout/Footer',
10
+ component: Footer,
11
+ args: {
12
+ columnItems: [
13
+ {
14
+ title: 'Normativas',
15
+ buttonLinks: [
16
+ {label: 'Resoluciones', fill: 'unstyled', type: 'button', onClick: () => console.log('Resoluciones Clicked')},
17
+ {label: 'Decretos', fill: 'unstyled', type: 'button', onClick: () => console.log('Decretos Clicked')},
18
+ {label: 'Leyes', fill: 'unstyled', type: 'button', onClick: () => console.log('Leyes Clicked')},
19
+ ],
20
+ finalLink: {
21
+ label: 'Más normativas',
22
+ fill: 'link',
23
+ type: 'button',
24
+ onClick: () => console.log('Más normativas Clicked'),
25
+ },
26
+ },
27
+ {
28
+ title: 'Información útil',
29
+ buttonLinks: [
30
+ {label: 'Inmobiliario Rural', fill: 'unstyled', type: 'button', onClick: () => console.log('Resoluciones Clicked')},
31
+ {label: 'Denuncias', fill: 'unstyled', type: 'button', onClick: () => console.log('Decretos Clicked')},
32
+ {label: 'Gestión de Calidad', fill: 'unstyled', type: 'button', onClick: () => console.log('Leyes Clicked')},
33
+ {label: 'Gestión transparente', fill: 'unstyled', type: 'button', onClick: () => console.log('Leyes Clicked')},
34
+ {label: 'Responsabilidad Social', fill: 'unstyled', type: 'button', onClick: () => console.log('Leyes Clicked')},
35
+ ],
36
+ finalLink: {label: 'Más enlaces', fill: 'link', type: 'button', onClick: () => console.log('Más enlaces Clicked')},
37
+ },
38
+ {
39
+ title: 'Preguntas frecuentes',
40
+ buttonLinks: [
41
+ {label: 'Pagos', fill: 'unstyled', type: 'button', onClick: () => console.log('Pagos Clicked')},
42
+ {
43
+ label: 'Gestiones y solicitudes',
44
+ fill: 'unstyled',
45
+ type: 'button',
46
+ onClick: () => console.log('Gestiones y solicitudes Clicked'),
47
+ },
48
+ {label: 'Agentes', fill: 'unstyled', type: 'button', onClick: () => console.log('Agentes Clicked')},
49
+ {label: 'Sellos', fill: 'unstyled', type: 'button', onClick: () => console.log('Sellos Clicked')},
50
+ ],
51
+ finalLink: {label: 'Más preguntas', fill: 'link', type: 'button', onClick: () => console.log('Más preguntas Clicked')},
52
+ },
53
+ ],
54
+ finalItem: {
55
+ title: 'Rentas, está con vos',
56
+ buttonLinks: [
57
+ {
58
+ label: 'Chateá con nosotros',
59
+ icon: 'fa-regular fa-message',
60
+ fill: 'unstyled',
61
+ type: 'button',
62
+ onClick: () => console.log('Chateá con nosotros Clicked'),
63
+ },
64
+ {
65
+ label: 'Rentas Corrientes',
66
+ icon: 'fa-brands fa-square-facebook',
67
+ fill: 'unstyled',
68
+ type: 'button',
69
+ onClick: () => console.log('Rentas Corrientes Clicked'),
70
+ },
71
+ {
72
+ label: 'Contanos tu experiencia',
73
+ icon: 'fa-regular fa-envelope',
74
+ fill: 'unstyled',
75
+ type: 'button',
76
+ onClick: () => console.log('Contanos tu experiencia Clicked'),
77
+ },
78
+ {
79
+ label: 'Denuncias',
80
+ icon: 'fa-solid fa-triangle-exclamation',
81
+ fill: 'unstyled',
82
+ type: 'button',
83
+ onClick: () => console.log('Contanos tu experiencia Clicked'),
84
+ },
85
+ ],
86
+ phoneNumber: '0800-444-8008',
87
+ },
88
+ logo_1: logo_gobierno_corrientes,
89
+ logo_2: logo_rentas_corrientes,
90
+ endButtonLinks: [
91
+ {label: 'Resoluciones', fill: 'unstyled', type: 'button', onClick: () => console.log('Resoluciones Clicked')},
92
+ {label: 'Decretos', fill: 'unstyled', type: 'button', onClick: () => console.log('Decretos Clicked')},
93
+ {label: 'Leyes', fill: 'unstyled', type: 'button', onClick: () => console.log('Leyes Clicked')},
94
+ ],
95
+ },
96
+ } as ComponentMeta<typeof Footer>;
97
+
98
+ const Template: ComponentStory<typeof Footer> = args => <Footer {...args} />;
99
+
100
+ export const Standard = Template.bind({});
101
+ Standard.args = {};
@@ -0,0 +1,81 @@
1
+ import './Footer.scss';
2
+ import {Button, IButton} from '../../Elements/Button/Button';
3
+ import {generateRandomKey} from '../../../utils/functions';
4
+
5
+ export interface IFooter extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
6
+ // base
7
+ columnItems?: {title: string; buttonLinks: IButton[]; finalLink: IButton}[];
8
+ finalItem?: {title: string; buttonLinks: IButton[]; phoneNumber: string};
9
+
10
+ //Footer END
11
+ logo_1: string;
12
+ logo_2: string;
13
+ endButtonLinks: IButton[];
14
+ className?: string;
15
+ }
16
+
17
+ export const Footer = ({columnItems, finalItem, logo_1, logo_2, endButtonLinks, className, ...props}: IFooter) => {
18
+ var today = new Date();
19
+ var year = today.getFullYear();
20
+
21
+ return (
22
+ <div className={`elv-component elv-footer`} {...props}>
23
+ <div className={`footer-component is-flex is-flex-direction-column ${className ? className : ''}`}>
24
+ <div className="footer-component__container">
25
+ {columnItems && (
26
+ <>
27
+ {columnItems.map(col => (
28
+ <div key={generateRandomKey()} className="column-item is-flex is-flex-direction-column">
29
+ <p className="column-item__title">{col.title}</p>
30
+ {col.buttonLinks.map(but => (
31
+ <span key={generateRandomKey()} className="column-item__button">
32
+ <Button {...but}></Button>
33
+ </span>
34
+ ))}
35
+ <span className="column-item__final">
36
+ <Button {...col.finalLink}></Button>
37
+ </span>
38
+ </div>
39
+ ))}
40
+ </>
41
+ )}
42
+
43
+ {finalItem && (
44
+ <div className="final-item is-flex is-flex-direction-column">
45
+ <p className="final-item__title">{finalItem.title}</p>
46
+ {finalItem.buttonLinks.map(but => (
47
+ <span key={generateRandomKey()} className="final-item__button">
48
+ <Button {...but}></Button>
49
+ </span>
50
+ ))}
51
+ <p className="final-item__phoneNumber">{finalItem.phoneNumber}</p>
52
+ </div>
53
+ )}
54
+ </div>
55
+ <div className="footer-component__end">
56
+ <div className="logos is-flex">
57
+ <img src={logo_1} alt="" width={'155px'} height={'37px'} />
58
+ <img src={logo_2} alt="" width={'261px'} height={'37px'} />
59
+ </div>
60
+ <div className="copy is-flex">
61
+ <div className="copy__text is-flex">
62
+ <p>Copyright&copy; {year} - Rentas Corrientes</p>
63
+ </div>
64
+ {endButtonLinks && (
65
+ <div className="end-button-links is-flex">
66
+ {endButtonLinks.map(but => (
67
+ <div key={generateRandomKey()} className="end-button-links__item is-flex">
68
+ {/* <span className="end-button-links__separator"></span> */}
69
+ <span key={but.label} className="end-button-links__button">
70
+ <Button {...but}></Button>
71
+ </span>
72
+ </div>
73
+ ))}
74
+ </div>
75
+ )}
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ );
81
+ };