dhanasekar-ui 1.6.0 → 1.7.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 (175) hide show
  1. package/dist/{chunk-ZMB4U5RP.js → chunk-2I4K4OCE.js} +3 -3
  2. package/dist/{chunk-ZMB4U5RP.js.map → chunk-2I4K4OCE.js.map} +1 -1
  3. package/dist/{chunk-WG2DQVVM.mjs → chunk-2OAU53K6.mjs} +3 -3
  4. package/dist/{chunk-WG2DQVVM.mjs.map → chunk-2OAU53K6.mjs.map} +1 -1
  5. package/dist/{chunk-ULMQZANW.mjs → chunk-3XBFOCPX.mjs} +3 -3
  6. package/dist/{chunk-ULMQZANW.mjs.map → chunk-3XBFOCPX.mjs.map} +1 -1
  7. package/dist/{chunk-P5HHRCE5.js → chunk-46JFDK2G.js} +4 -4
  8. package/dist/{chunk-P5HHRCE5.js.map → chunk-46JFDK2G.js.map} +1 -1
  9. package/dist/{chunk-PL2R3LYL.mjs → chunk-5D4JO44P.mjs} +3 -3
  10. package/dist/{chunk-PL2R3LYL.mjs.map → chunk-5D4JO44P.mjs.map} +1 -1
  11. package/dist/chunk-5ZOZOY4J.mjs +2 -0
  12. package/dist/chunk-5ZOZOY4J.mjs.map +1 -0
  13. package/dist/{chunk-UCFS7EH2.mjs → chunk-6FBJ3S6V.mjs} +3 -3
  14. package/dist/{chunk-UCFS7EH2.mjs.map → chunk-6FBJ3S6V.mjs.map} +1 -1
  15. package/dist/chunk-7FN45G2T.js +2 -0
  16. package/dist/chunk-7FN45G2T.js.map +1 -0
  17. package/dist/{chunk-AK3NQBYU.mjs → chunk-7U4ZR2N6.mjs} +3 -3
  18. package/dist/{chunk-AK3NQBYU.mjs.map → chunk-7U4ZR2N6.mjs.map} +1 -1
  19. package/dist/{chunk-K45L3ZJM.mjs → chunk-AXTWVJLU.mjs} +3 -3
  20. package/dist/{chunk-K45L3ZJM.mjs.map → chunk-AXTWVJLU.mjs.map} +1 -1
  21. package/dist/{chunk-TYVF66RP.js → chunk-BLXL2SZF.js} +3 -3
  22. package/dist/{chunk-TYVF66RP.js.map → chunk-BLXL2SZF.js.map} +1 -1
  23. package/dist/chunk-CQNHZJ7I.mjs +2 -0
  24. package/dist/chunk-CQNHZJ7I.mjs.map +1 -0
  25. package/dist/{chunk-UC2EXKW3.mjs → chunk-DYQFJBYE.mjs} +3 -3
  26. package/dist/chunk-DYQFJBYE.mjs.map +1 -0
  27. package/dist/chunk-FRZ7JKYE.js +303 -0
  28. package/dist/chunk-FRZ7JKYE.js.map +1 -0
  29. package/dist/{chunk-ZPJSBORX.js → chunk-GTLOJ4OX.js} +3 -3
  30. package/dist/{chunk-ZPJSBORX.js.map → chunk-GTLOJ4OX.js.map} +1 -1
  31. package/dist/chunk-HAWHD2CS.js +2 -0
  32. package/dist/chunk-HAWHD2CS.js.map +1 -0
  33. package/dist/{chunk-XWEEWNZK.mjs → chunk-HBRNCHNF.mjs} +3 -3
  34. package/dist/{chunk-XWEEWNZK.mjs.map → chunk-HBRNCHNF.mjs.map} +1 -1
  35. package/dist/{chunk-HEVMYBGK.js → chunk-HZF4MXSO.js} +3 -3
  36. package/dist/{chunk-HEVMYBGK.js.map → chunk-HZF4MXSO.js.map} +1 -1
  37. package/dist/{chunk-YPMUFP2I.js → chunk-IU3PO4JC.js} +4 -4
  38. package/dist/{chunk-YPMUFP2I.js.map → chunk-IU3PO4JC.js.map} +1 -1
  39. package/dist/{chunk-HWD2HCCH.js → chunk-KCHEAJQY.js} +4 -4
  40. package/dist/{chunk-HWD2HCCH.js.map → chunk-KCHEAJQY.js.map} +1 -1
  41. package/dist/chunk-KJECRLIK.mjs +2 -0
  42. package/dist/chunk-KJECRLIK.mjs.map +1 -0
  43. package/dist/{chunk-3K6JBWL2.mjs → chunk-L73SH4IC.mjs} +3 -3
  44. package/dist/{chunk-3K6JBWL2.mjs.map → chunk-L73SH4IC.mjs.map} +1 -1
  45. package/dist/chunk-LJZR5S2S.mjs +303 -0
  46. package/dist/chunk-LJZR5S2S.mjs.map +1 -0
  47. package/dist/chunk-MAXZQTTY.mjs +2 -0
  48. package/dist/chunk-MAXZQTTY.mjs.map +1 -0
  49. package/dist/{chunk-P4WXCRNI.mjs → chunk-MCQHRTRD.mjs} +3 -3
  50. package/dist/{chunk-P4WXCRNI.mjs.map → chunk-MCQHRTRD.mjs.map} +1 -1
  51. package/dist/{chunk-C5X45JOF.mjs → chunk-NGNPVIAG.mjs} +3 -3
  52. package/dist/{chunk-C5X45JOF.mjs.map → chunk-NGNPVIAG.mjs.map} +1 -1
  53. package/dist/{chunk-7UWMKTOT.js → chunk-NKEF355Z.js} +3 -3
  54. package/dist/chunk-NKEF355Z.js.map +1 -0
  55. package/dist/chunk-NPGQQ67F.js +90 -0
  56. package/dist/chunk-NPGQQ67F.js.map +1 -0
  57. package/dist/{chunk-PFQIHJ6F.js → chunk-OHZG62II.js} +2 -2
  58. package/dist/{chunk-PFQIHJ6F.js.map → chunk-OHZG62II.js.map} +1 -1
  59. package/dist/chunk-PSYZOU5W.js +2 -0
  60. package/dist/chunk-PSYZOU5W.js.map +1 -0
  61. package/dist/{chunk-7XVF6WPJ.js → chunk-Q6CP36OQ.js} +3 -3
  62. package/dist/chunk-Q6CP36OQ.js.map +1 -0
  63. package/dist/{chunk-IK7K7ZJZ.mjs → chunk-QSUBLNQA.mjs} +3 -3
  64. package/dist/{chunk-IK7K7ZJZ.mjs.map → chunk-QSUBLNQA.mjs.map} +1 -1
  65. package/dist/{chunk-N6LNMNTA.js → chunk-QTBXSLB7.js} +3 -3
  66. package/dist/{chunk-N6LNMNTA.js.map → chunk-QTBXSLB7.js.map} +1 -1
  67. package/dist/{chunk-KKRI6OSJ.mjs → chunk-RTAANBRB.mjs} +3 -3
  68. package/dist/{chunk-KKRI6OSJ.mjs.map → chunk-RTAANBRB.mjs.map} +1 -1
  69. package/dist/{chunk-EPVYHGER.js → chunk-SATPFSKS.js} +3 -3
  70. package/dist/{chunk-EPVYHGER.js.map → chunk-SATPFSKS.js.map} +1 -1
  71. package/dist/chunk-TYTCGH2C.js +2 -0
  72. package/dist/chunk-TYTCGH2C.js.map +1 -0
  73. package/dist/{chunk-7IWJZHMP.js → chunk-UFID3OJL.js} +3 -3
  74. package/dist/{chunk-7IWJZHMP.js.map → chunk-UFID3OJL.js.map} +1 -1
  75. package/dist/{chunk-NN5XQUE5.js → chunk-UMANLRMH.js} +3 -3
  76. package/dist/{chunk-NN5XQUE5.js.map → chunk-UMANLRMH.js.map} +1 -1
  77. package/dist/{chunk-DBSBLGGH.js → chunk-V7I4VOGW.js} +3 -3
  78. package/dist/{chunk-DBSBLGGH.js.map → chunk-V7I4VOGW.js.map} +1 -1
  79. package/dist/{chunk-MOC6N23X.mjs → chunk-VAK4ZMNE.mjs} +3 -3
  80. package/dist/{chunk-MOC6N23X.mjs.map → chunk-VAK4ZMNE.mjs.map} +1 -1
  81. package/dist/{chunk-JM6DZDO3.js → chunk-VT6MIHH4.js} +3 -3
  82. package/dist/{chunk-JM6DZDO3.js.map → chunk-VT6MIHH4.js.map} +1 -1
  83. package/dist/{chunk-SC44IC5R.js → chunk-VURSJNHH.js} +3 -3
  84. package/dist/{chunk-SC44IC5R.js.map → chunk-VURSJNHH.js.map} +1 -1
  85. package/dist/{chunk-IZN52F5Z.mjs → chunk-WCECOLC2.mjs} +2 -2
  86. package/dist/{chunk-IZN52F5Z.mjs.map → chunk-WCECOLC2.mjs.map} +1 -1
  87. package/dist/{chunk-YA7B43FL.mjs → chunk-WCY2XASM.mjs} +3 -3
  88. package/dist/{chunk-YA7B43FL.mjs.map → chunk-WCY2XASM.mjs.map} +1 -1
  89. package/dist/{chunk-BQVXQWPS.mjs → chunk-XT2L2TG3.mjs} +3 -3
  90. package/dist/{chunk-BQVXQWPS.mjs.map → chunk-XT2L2TG3.mjs.map} +1 -1
  91. package/dist/{chunk-UYHBKE7G.mjs → chunk-XZF5PTFB.mjs} +3 -3
  92. package/dist/chunk-XZF5PTFB.mjs.map +1 -0
  93. package/dist/{chunk-ZCSVGCYM.js → chunk-YMBVI7C3.js} +3 -3
  94. package/dist/{chunk-ZCSVGCYM.js.map → chunk-YMBVI7C3.js.map} +1 -1
  95. package/dist/chunk-ZSICE2YV.mjs +90 -0
  96. package/dist/chunk-ZSICE2YV.mjs.map +1 -0
  97. package/dist/components/Accordion/index.js +1 -1
  98. package/dist/components/Accordion/index.mjs +1 -1
  99. package/dist/components/AppBar/index.js +1 -1
  100. package/dist/components/AppBar/index.mjs +1 -1
  101. package/dist/components/BottomNavigation/index.js +1 -1
  102. package/dist/components/BottomNavigation/index.mjs +1 -1
  103. package/dist/components/Box/index.js +1 -1
  104. package/dist/components/Box/index.mjs +1 -1
  105. package/dist/components/DataGrid/index.js +1 -1
  106. package/dist/components/DataGrid/index.mjs +1 -1
  107. package/dist/components/DateFilter/index.js +1 -1
  108. package/dist/components/DateFilter/index.mjs +1 -1
  109. package/dist/components/FileUploadField/index.js +1 -1
  110. package/dist/components/FileUploadField/index.mjs +1 -1
  111. package/dist/components/FilterTable/index.js +1 -1
  112. package/dist/components/FilterTable/index.mjs +1 -1
  113. package/dist/components/FormLayout/index.js +1 -1
  114. package/dist/components/FormLayout/index.mjs +1 -1
  115. package/dist/components/Grid/index.js +1 -1
  116. package/dist/components/Grid/index.mjs +1 -1
  117. package/dist/components/List/index.js +1 -1
  118. package/dist/components/List/index.mjs +1 -1
  119. package/dist/components/Pagination/index.js +1 -1
  120. package/dist/components/Pagination/index.mjs +1 -1
  121. package/dist/components/Paper/index.js +1 -1
  122. package/dist/components/Paper/index.mjs +1 -1
  123. package/dist/components/Progress/index.js +1 -1
  124. package/dist/components/Progress/index.mjs +1 -1
  125. package/dist/components/Rating/index.d.mts +70 -0
  126. package/dist/components/Rating/index.d.ts +70 -0
  127. package/dist/components/Rating/index.js +2 -0
  128. package/dist/components/Rating/index.js.map +1 -0
  129. package/dist/components/Rating/index.mjs +2 -0
  130. package/dist/components/Rating/index.mjs.map +1 -0
  131. package/dist/components/RichTextEditor/index.d.mts +13 -0
  132. package/dist/components/RichTextEditor/index.d.ts +13 -0
  133. package/dist/components/RichTextEditor/index.js +142 -0
  134. package/dist/components/RichTextEditor/index.js.map +1 -0
  135. package/dist/components/RichTextEditor/index.mjs +142 -0
  136. package/dist/components/RichTextEditor/index.mjs.map +1 -0
  137. package/dist/components/Skeleton/index.js +1 -1
  138. package/dist/components/Skeleton/index.mjs +1 -1
  139. package/dist/components/Snackbar/index.js +1 -1
  140. package/dist/components/Snackbar/index.mjs +1 -1
  141. package/dist/components/Stack/index.js +1 -1
  142. package/dist/components/Stack/index.mjs +1 -1
  143. package/dist/components/Table/index.js +1 -1
  144. package/dist/components/Table/index.mjs +1 -1
  145. package/dist/components/ThemeProvider/index.d.mts +282 -0
  146. package/dist/components/ThemeProvider/index.d.ts +282 -0
  147. package/dist/components/ThemeProvider/index.js +2 -0
  148. package/dist/components/ThemeProvider/index.js.map +1 -0
  149. package/dist/components/ThemeProvider/index.mjs +2 -0
  150. package/dist/components/ThemeProvider/index.mjs.map +1 -0
  151. package/dist/components/Timeline/index.d.mts +100 -0
  152. package/dist/components/Timeline/index.d.ts +100 -0
  153. package/dist/components/Timeline/index.js +2 -0
  154. package/dist/components/Timeline/index.js.map +1 -0
  155. package/dist/components/Timeline/index.mjs +2 -0
  156. package/dist/components/Timeline/index.mjs.map +1 -0
  157. package/dist/components/Transitions/index.js +1 -1
  158. package/dist/components/Transitions/index.mjs +1 -1
  159. package/dist/index.d.mts +3 -0
  160. package/dist/index.d.ts +3 -0
  161. package/dist/index.js +1 -1
  162. package/dist/index.mjs +1 -1
  163. package/package.json +21 -1
  164. package/dist/chunk-7UWMKTOT.js.map +0 -1
  165. package/dist/chunk-7XVF6WPJ.js.map +0 -1
  166. package/dist/chunk-HGGQFNUJ.mjs +0 -2
  167. package/dist/chunk-HGGQFNUJ.mjs.map +0 -1
  168. package/dist/chunk-I6OJHQZX.mjs +0 -2
  169. package/dist/chunk-I6OJHQZX.mjs.map +0 -1
  170. package/dist/chunk-LIBHUJ27.js +0 -2
  171. package/dist/chunk-LIBHUJ27.js.map +0 -1
  172. package/dist/chunk-MLURKSJZ.js +0 -2
  173. package/dist/chunk-MLURKSJZ.js.map +0 -1
  174. package/dist/chunk-UC2EXKW3.mjs.map +0 -1
  175. package/dist/chunk-UYHBKE7G.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import {a as a$1}from'./chunk-HGGQFNUJ.mjs';import {a as a$2}from'./chunk-547MQ4FI.mjs';import {forwardRef}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var b=`
1
+ import {a as a$1}from'./chunk-MAXZQTTY.mjs';import {a as a$2}from'./chunk-547MQ4FI.mjs';import {forwardRef}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var b=`
2
2
  .ui-skeleton {
3
3
  display: block;
4
4
  background-color: rgba(0, 0, 0, 0.11);
@@ -83,5 +83,5 @@ import {a as a$1}from'./chunk-HGGQFNUJ.mjs';import {a as a$2}from'./chunk-547MQ4
83
83
  transform: translateX(100%);
84
84
  }
85
85
  }
86
- `,a=forwardRef(({className:s,component:i,animation:e="pulse",variant:l="text",width:u,height:m,sx:p,children:f,...t},d)=>{let k=i||"span",c={width:u,height:m,...a$1(p),...t.style};return jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:b}}),jsx(k,{ref:d,className:a$2("ui-skeleton",`ui-skeleton--${l}`,e&&`ui-skeleton--${e}`,s),style:c,...t,children:f})]})});a.displayName="Skeleton";var y=a;export{a,y as b};//# sourceMappingURL=chunk-ULMQZANW.mjs.map
87
- //# sourceMappingURL=chunk-ULMQZANW.mjs.map
86
+ `,a=forwardRef(({className:s,component:i,animation:e="pulse",variant:l="text",width:u,height:m,sx:p,children:f,...t},d)=>{let k=i||"span",c={width:u,height:m,...a$1(p),...t.style};return jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:b}}),jsx(k,{ref:d,className:a$2("ui-skeleton",`ui-skeleton--${l}`,e&&`ui-skeleton--${e}`,s),style:c,...t,children:f})]})});a.displayName="Skeleton";var y=a;export{a,y as b};//# sourceMappingURL=chunk-3XBFOCPX.mjs.map
87
+ //# sourceMappingURL=chunk-3XBFOCPX.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Skeleton/Skeleton.tsx"],"names":["STYLES","Skeleton","forwardRef","className","component","animation","variant","width","height","sx","children","props","ref","Component","style","handleSx","jsxs","Fragment","jsx","cn","Skeleton_default"],"mappings":"yKAOA,IAAMA,CAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAuFFC,EAAWC,UAAAA,CACtB,CACE,CACE,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,EAAY,OAAA,CACZ,OAAA,CAAAC,EAAU,MAAA,CACV,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,GAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAYT,GAAa,MAAA,CAEzBU,CAAAA,CAAQ,CACZ,KAAA,CAAAP,CAAAA,CACA,OAAAC,CAAAA,CACA,GAAGO,IAASN,CAAE,CAAA,CACd,GAAGE,CAAAA,CAAM,KACX,CAAA,CAEA,OACEK,KAAAC,QAAAA,CAAA,CACE,UAAAC,GAAAA,CAAC,OAAA,CAAA,CAAM,wBAAyB,CAAE,MAAA,CAAQlB,CAAO,CAAA,CAAG,CAAA,CACpDkB,IAACL,CAAAA,CAAA,CACC,IAAKD,CAAAA,CACL,SAAA,CAAWO,IACT,aAAA,CACA,CAAA,aAAA,EAAgBb,CAAO,CAAA,CAAA,CACvBD,CAAAA,EAAa,gBAAgBA,CAAS,CAAA,CAAA,CACtCF,CACF,CAAA,CACA,KAAA,CAAOW,EACN,GAAGH,CAAAA,CAEH,SAAAD,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CACF,EAEAT,EAAS,WAAA,CAAc,UAAA,KAEhBmB,CAAAA,CAAQnB","file":"chunk-ULMQZANW.mjs","sourcesContent":["'use client';\n\nimport { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { SkeletonProps } from './Skeleton.types';\n\nconst STYLES = `\n .ui-skeleton {\n display: block;\n background-color: rgba(0, 0, 0, 0.11);\n height: 1.2em;\n position: relative;\n overflow: hidden;\n }\n\n /* Variants */\n .ui-skeleton--text {\n margin-top: 0;\n margin-bottom: 0;\n height: auto;\n transform-origin: 0 55%;\n transform: scale(1, 0.60);\n border-radius: 4px;\n }\n \n .ui-skeleton--text:empty:before {\n content: \"\\\\00a0\";\n }\n\n .ui-skeleton--circular {\n border-radius: 50%;\n }\n\n .ui-skeleton--rectangular {\n border-radius: 0;\n }\n\n .ui-skeleton--rounded {\n border-radius: 8px;\n }\n\n /* Animations */\n .ui-skeleton--pulse {\n animation: ui-skeleton-pulse 1.5s ease-in-out 0.5s infinite;\n }\n\n .ui-skeleton--wave {\n position: relative;\n overflow: hidden;\n }\n\n .ui-skeleton--wave::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(255, 255, 255, 0.3),\n transparent\n );\n animation: ui-skeleton-wave 1.6s linear 0.5s infinite;\n transform: translateX(-100%);\n }\n\n @keyframes ui-skeleton-pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes ui-skeleton-wave {\n 0% {\n transform: translateX(-100%);\n }\n 50% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const Skeleton = forwardRef<HTMLElement, SkeletonProps>(\n (\n {\n className,\n component,\n animation = 'pulse',\n variant = 'text',\n width,\n height,\n sx,\n children,\n ...props\n },\n ref\n ) => {\n const Component = component || 'span';\n\n const style = {\n width,\n height,\n ...handleSx(sx),\n ...props.style,\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <Component\n ref={ref}\n className={cn(\n 'ui-skeleton',\n `ui-skeleton--${variant}`,\n animation && `ui-skeleton--${animation}`,\n className\n )}\n style={style}\n {...props}\n >\n {children}\n </Component>\n </>\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"]}
1
+ {"version":3,"sources":["../src/components/Skeleton/Skeleton.tsx"],"names":["STYLES","Skeleton","forwardRef","className","component","animation","variant","width","height","sx","children","props","ref","Component","style","handleSx","jsxs","Fragment","jsx","cn","Skeleton_default"],"mappings":"yKAOA,IAAMA,CAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAuFFC,EAAWC,UAAAA,CACtB,CACE,CACE,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,EAAY,OAAA,CACZ,OAAA,CAAAC,EAAU,MAAA,CACV,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,GAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAYT,GAAa,MAAA,CAEzBU,CAAAA,CAAQ,CACZ,KAAA,CAAAP,CAAAA,CACA,OAAAC,CAAAA,CACA,GAAGO,IAASN,CAAE,CAAA,CACd,GAAGE,CAAAA,CAAM,KACX,CAAA,CAEA,OACEK,KAAAC,QAAAA,CAAA,CACE,UAAAC,GAAAA,CAAC,OAAA,CAAA,CAAM,wBAAyB,CAAE,MAAA,CAAQlB,CAAO,CAAA,CAAG,CAAA,CACpDkB,IAACL,CAAAA,CAAA,CACC,IAAKD,CAAAA,CACL,SAAA,CAAWO,IACT,aAAA,CACA,CAAA,aAAA,EAAgBb,CAAO,CAAA,CAAA,CACvBD,CAAAA,EAAa,gBAAgBA,CAAS,CAAA,CAAA,CACtCF,CACF,CAAA,CACA,KAAA,CAAOW,EACN,GAAGH,CAAAA,CAEH,SAAAD,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CACF,EAEAT,EAAS,WAAA,CAAc,UAAA,KAEhBmB,CAAAA,CAAQnB","file":"chunk-3XBFOCPX.mjs","sourcesContent":["'use client';\n\nimport { forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { SkeletonProps } from './Skeleton.types';\n\nconst STYLES = `\n .ui-skeleton {\n display: block;\n background-color: rgba(0, 0, 0, 0.11);\n height: 1.2em;\n position: relative;\n overflow: hidden;\n }\n\n /* Variants */\n .ui-skeleton--text {\n margin-top: 0;\n margin-bottom: 0;\n height: auto;\n transform-origin: 0 55%;\n transform: scale(1, 0.60);\n border-radius: 4px;\n }\n \n .ui-skeleton--text:empty:before {\n content: \"\\\\00a0\";\n }\n\n .ui-skeleton--circular {\n border-radius: 50%;\n }\n\n .ui-skeleton--rectangular {\n border-radius: 0;\n }\n\n .ui-skeleton--rounded {\n border-radius: 8px;\n }\n\n /* Animations */\n .ui-skeleton--pulse {\n animation: ui-skeleton-pulse 1.5s ease-in-out 0.5s infinite;\n }\n\n .ui-skeleton--wave {\n position: relative;\n overflow: hidden;\n }\n\n .ui-skeleton--wave::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(255, 255, 255, 0.3),\n transparent\n );\n animation: ui-skeleton-wave 1.6s linear 0.5s infinite;\n transform: translateX(-100%);\n }\n\n @keyframes ui-skeleton-pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes ui-skeleton-wave {\n 0% {\n transform: translateX(-100%);\n }\n 50% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const Skeleton = forwardRef<HTMLElement, SkeletonProps>(\n (\n {\n className,\n component,\n animation = 'pulse',\n variant = 'text',\n width,\n height,\n sx,\n children,\n ...props\n },\n ref\n ) => {\n const Component = component || 'span';\n\n const style = {\n width,\n height,\n ...handleSx(sx),\n ...props.style,\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <Component\n ref={ref}\n className={cn(\n 'ui-skeleton',\n `ui-skeleton--${variant}`,\n animation && `ui-skeleton--${animation}`,\n className\n )}\n style={style}\n {...props}\n >\n {children}\n </Component>\n </>\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"]}
@@ -1,4 +1,4 @@
1
- 'use strict';var chunkMLURKSJZ_js=require('./chunk-MLURKSJZ.js'),react=require('react'),reactToastify=require('react-toastify'),jsxRuntime=require('react/jsx-runtime');var J=`
1
+ 'use strict';var chunkTYTCGH2C_js=require('./chunk-TYTCGH2C.js'),react=require('react'),reactToastify=require('react-toastify'),jsxRuntime=require('react/jsx-runtime');var J=`
2
2
  .fuf-root {
3
3
  display: flex;
4
4
  flex-direction: column;
@@ -193,6 +193,6 @@
193
193
  .fuf-hidden-input {
194
194
  display: none;
195
195
  }
196
- `,K=react.forwardRef((C,E)=>{let{label:N,required:I,error:d,accept:k=".pdf,.doc,.docx",maxSizeMB:U=10,disabled:c,uploadType:j,multiple:u,value:l,onChange:m,onDelete:z,previewUrl:$,previewUrls:R,existingFileUrl:b,existingFileName:y,editMode:M=true,viewMode:P=false,className:S="",style:T,sx:O}=C;react.useEffect(()=>{let e="tabler-icons-cdn";if(!document.getElementById(e)){let t=document.createElement("link");t.id=e,t.rel="stylesheet",t.href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css",document.head.appendChild(t);}},[]);let p=Array.isArray(b)?b:b?[b]:[],H=Array.isArray(l)?l:l?[l]:[],w=[...p,...H],g=c||P||!M,F=react.useRef(null);react.useImperativeHandle(E,()=>F.current);let[s,x]=react.useState([]);react.useEffect(()=>()=>{s.forEach(e=>{e.startsWith("blob:")&&URL.revokeObjectURL(e);});},[s]);let W=e=>{if(g)return;let t=e.target.files;if(!t||t.length===0)return;let f=Array.from(t),i=[],r=[];for(let n of f){if(n.size>U*1024*1024){reactToastify.toast.error(`File "${n.name}" exceeds the maximum size of ${U}MB`);continue}i.push(n),r.push(URL.createObjectURL(n));}if(i.length===0){e.target.value="";return}if(u){x(v=>[...v,...r]);let h=[...Array.isArray(l)?l:[],...i];m?.(h);}else s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x(r),m?.(i[0]);e.target.value="";},q=e=>{if(g)return;if(e<p.length){z?.(e);return}let f=e-p.length;if(u){let i=Array.isArray(l)?[...l]:[];i.splice(f,1),m?.(i.length>0?i:null);let r=[...s];r[f]?.startsWith("blob:")&&URL.revokeObjectURL(r[f]),r.splice(f,1),x(r);}else m?.(null),s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x([]);z?.(e);},B=(e,t)=>{t<p.length;let i=typeof e=="string"?(Array.isArray(y)?y[t]:y)||"Uploaded Document":e.name,r=t-p.length,n=typeof e=="string"?e:s[r]||(Array.isArray(R)?R[r]:$),h=i.toLowerCase().endsWith(".pdf")||typeof e!="string"&&e.type==="application/pdf",v=j==="image"||i.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/i);return jsxRuntime.jsxs("div",{className:"fuf-preview-item",children:[jsxRuntime.jsxs("div",{className:"fuf-file-info",children:[v&&n?jsxRuntime.jsx("img",{className:"fuf-thumbnail",src:n,alt:i}):h?jsxRuntime.jsx("i",{className:"ti ti-file-type-pdf fuf-file-icon pdf"}):jsxRuntime.jsx("i",{className:"ti ti-file fuf-file-icon general"}),jsxRuntime.jsx("span",{className:"fuf-file-name",title:i,children:i})]}),jsxRuntime.jsxs("div",{className:"fuf-actions",children:[(h||v)&&n&&jsxRuntime.jsx("button",{type:"button",className:"fuf-action-btn view",onClick:()=>window.open(n,"_blank"),title:"View",children:jsxRuntime.jsx("i",{className:"ti ti-eye"})}),!g&&jsxRuntime.jsx("button",{type:"button",className:"fuf-action-btn remove",onClick:()=>q(t),title:"Remove",children:jsxRuntime.jsx("i",{className:"ti ti-x"})})]})]},`${i}-${t}`)};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:J}}),jsxRuntime.jsxs("div",{className:`fuf-root ${S}`,style:{...chunkMLURKSJZ_js.a(O),...T},children:[N&&jsxRuntime.jsxs("label",{className:`fuf-label ${d?"error":""}`,children:[N," ",I&&jsxRuntime.jsx("span",{className:"fuf-required",children:"*"})]}),(!w.length||u)&&!g&&jsxRuntime.jsxs("div",{className:`fuf-dropzone ${d?"error":""} ${c?"disabled":""}`,onClick:()=>!c&&F.current?.click(),children:[jsxRuntime.jsx("i",{className:"ti ti-upload fuf-upload-icon"}),jsxRuntime.jsx("span",{className:"fuf-upload-text",children:c?"Upload disabled":"Click to upload"}),jsxRuntime.jsxs("span",{className:"fuf-format-text",children:["(Supported formats: ",k.replace(/\./g,"").toUpperCase(),")"]}),jsxRuntime.jsx("input",{type:"file",className:"fuf-hidden-input",ref:F,onChange:W,accept:k,disabled:c,multiple:u})]}),w.length>0&&jsxRuntime.jsx("div",{className:"fuf-preview-list",children:w.map((e,t)=>B(e,t))}),d&&jsxRuntime.jsx("span",{className:"fuf-error-message",children:d})]})]})});K.displayName="FileUploadField";
197
- exports.a=K;//# sourceMappingURL=chunk-P5HHRCE5.js.map
198
- //# sourceMappingURL=chunk-P5HHRCE5.js.map
196
+ `,K=react.forwardRef((C,E)=>{let{label:N,required:I,error:d,accept:k=".pdf,.doc,.docx",maxSizeMB:U=10,disabled:c,uploadType:j,multiple:u,value:l,onChange:m,onDelete:z,previewUrl:$,previewUrls:R,existingFileUrl:b,existingFileName:y,editMode:M=true,viewMode:P=false,className:S="",style:T,sx:O}=C;react.useEffect(()=>{let e="tabler-icons-cdn";if(!document.getElementById(e)){let t=document.createElement("link");t.id=e,t.rel="stylesheet",t.href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css",document.head.appendChild(t);}},[]);let p=Array.isArray(b)?b:b?[b]:[],H=Array.isArray(l)?l:l?[l]:[],w=[...p,...H],g=c||P||!M,F=react.useRef(null);react.useImperativeHandle(E,()=>F.current);let[s,x]=react.useState([]);react.useEffect(()=>()=>{s.forEach(e=>{e.startsWith("blob:")&&URL.revokeObjectURL(e);});},[s]);let W=e=>{if(g)return;let t=e.target.files;if(!t||t.length===0)return;let f=Array.from(t),i=[],r=[];for(let n of f){if(n.size>U*1024*1024){reactToastify.toast.error(`File "${n.name}" exceeds the maximum size of ${U}MB`);continue}i.push(n),r.push(URL.createObjectURL(n));}if(i.length===0){e.target.value="";return}if(u){x(v=>[...v,...r]);let h=[...Array.isArray(l)?l:[],...i];m?.(h);}else s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x(r),m?.(i[0]);e.target.value="";},q=e=>{if(g)return;if(e<p.length){z?.(e);return}let f=e-p.length;if(u){let i=Array.isArray(l)?[...l]:[];i.splice(f,1),m?.(i.length>0?i:null);let r=[...s];r[f]?.startsWith("blob:")&&URL.revokeObjectURL(r[f]),r.splice(f,1),x(r);}else m?.(null),s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x([]);z?.(e);},B=(e,t)=>{t<p.length;let i=typeof e=="string"?(Array.isArray(y)?y[t]:y)||"Uploaded Document":e.name,r=t-p.length,n=typeof e=="string"?e:s[r]||(Array.isArray(R)?R[r]:$),h=i.toLowerCase().endsWith(".pdf")||typeof e!="string"&&e.type==="application/pdf",v=j==="image"||i.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/i);return jsxRuntime.jsxs("div",{className:"fuf-preview-item",children:[jsxRuntime.jsxs("div",{className:"fuf-file-info",children:[v&&n?jsxRuntime.jsx("img",{className:"fuf-thumbnail",src:n,alt:i}):h?jsxRuntime.jsx("i",{className:"ti ti-file-type-pdf fuf-file-icon pdf"}):jsxRuntime.jsx("i",{className:"ti ti-file fuf-file-icon general"}),jsxRuntime.jsx("span",{className:"fuf-file-name",title:i,children:i})]}),jsxRuntime.jsxs("div",{className:"fuf-actions",children:[(h||v)&&n&&jsxRuntime.jsx("button",{type:"button",className:"fuf-action-btn view",onClick:()=>window.open(n,"_blank"),title:"View",children:jsxRuntime.jsx("i",{className:"ti ti-eye"})}),!g&&jsxRuntime.jsx("button",{type:"button",className:"fuf-action-btn remove",onClick:()=>q(t),title:"Remove",children:jsxRuntime.jsx("i",{className:"ti ti-x"})})]})]},`${i}-${t}`)};return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:J}}),jsxRuntime.jsxs("div",{className:`fuf-root ${S}`,style:{...chunkTYTCGH2C_js.a(O),...T},children:[N&&jsxRuntime.jsxs("label",{className:`fuf-label ${d?"error":""}`,children:[N," ",I&&jsxRuntime.jsx("span",{className:"fuf-required",children:"*"})]}),(!w.length||u)&&!g&&jsxRuntime.jsxs("div",{className:`fuf-dropzone ${d?"error":""} ${c?"disabled":""}`,onClick:()=>!c&&F.current?.click(),children:[jsxRuntime.jsx("i",{className:"ti ti-upload fuf-upload-icon"}),jsxRuntime.jsx("span",{className:"fuf-upload-text",children:c?"Upload disabled":"Click to upload"}),jsxRuntime.jsxs("span",{className:"fuf-format-text",children:["(Supported formats: ",k.replace(/\./g,"").toUpperCase(),")"]}),jsxRuntime.jsx("input",{type:"file",className:"fuf-hidden-input",ref:F,onChange:W,accept:k,disabled:c,multiple:u})]}),w.length>0&&jsxRuntime.jsx("div",{className:"fuf-preview-list",children:w.map((e,t)=>B(e,t))}),d&&jsxRuntime.jsx("span",{className:"fuf-error-message",children:d})]})]})});K.displayName="FileUploadField";
197
+ exports.a=K;//# sourceMappingURL=chunk-46JFDK2G.js.map
198
+ //# sourceMappingURL=chunk-46JFDK2G.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/FileUploadField/FileUploadField.tsx"],"names":["STYLES","FileUploadField","forwardRef","props","ref","label","required","error","accept","maxSizeMB","disabled","uploadType","multiple","value","onChange","onDelete","previewUrl","previewUrls","existingFileUrl","existingFileName","editMode","viewMode","className","style","sx","useEffect","cdnId","link","existingFiles","currentFiles","filesToRender","isReadOnly","inputRef","useRef","useImperativeHandle","internalPreviews","setInternalPreviews","useState","url","handleFileChange","files","fileList","validFiles","newPreviews","file","toast","prev","updatedFiles","handleRemove","index","currentFileIndex","currentPreviews","renderFileRow","fileName","fileUrl","isPdf","isImage","jsxs","jsx","Fragment","handleSx","idx"],"mappings":"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","file":"chunk-P5HHRCE5.js","sourcesContent":["'use client';\n\nimport React, { forwardRef, useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport { handleSx } from '../../utils/handleSx';\nimport { FileUploadFieldProps } from './FileUploadField.types';\n\nconst STYLES = `\n .fuf-root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n width: 100%;\n }\n\n .fuf-label {\n font-size: 14px;\n font-weight: 500;\n color: #64748b;\n margin-bottom: 4px;\n }\n\n .fuf-label.error {\n color: #ef4444;\n }\n\n .fuf-required {\n color: #ef4444;\n margin-left: 2px;\n }\n\n .fuf-dropzone {\n border: 2px dashed #cbd5e1;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n background: #f8fafc;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .fuf-dropzone:hover {\n border-color: #3b82f6;\n background: #eff6ff;\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n }\n\n .fuf-dropzone.error {\n border-color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-dropzone.error:hover {\n border-color: #dc2626;\n }\n\n .fuf-dropzone.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .fuf-dropzone.disabled:hover {\n transform: none;\n box-shadow: none;\n border-color: #cbd5e1;\n background: #f8fafc;\n }\n\n .fuf-upload-icon {\n color: #3b82f6;\n font-size: 48px;\n margin-bottom: 8px;\n display: block;\n }\n\n .fuf-dropzone.error .fuf-upload-icon {\n color: #ef4444;\n }\n\n .fuf-upload-text {\n font-size: 16px;\n font-weight: 500;\n color: #334155;\n }\n\n .fuf-format-text {\n font-size: 12px;\n color: #94a3b8;\n }\n\n .fuf-preview-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n }\n\n .fuf-preview-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: white;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n transition: all 0.2s ease;\n }\n\n .fuf-preview-item:hover {\n border-color: #cbd5e1;\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n }\n\n .fuf-file-info {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n\n .fuf-thumbnail {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 8px;\n border: 1px solid #f1f5f9;\n }\n\n .fuf-file-icon {\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .fuf-file-icon.pdf {\n color: #ef4444;\n }\n\n .fuf-file-icon.general {\n color: #3b82f6;\n }\n\n .fuf-file-name {\n font-size: 14px;\n color: #1e293b;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n }\n\n .fuf-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .fuf-action-btn {\n padding: 8px;\n border-radius: 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n color: #64748b;\n }\n\n .fuf-action-btn i {\n font-size: 18px;\n }\n\n .fuf-action-btn.view:hover {\n color: #3b82f6;\n background: #eff6ff;\n }\n\n .fuf-action-btn.remove:hover {\n color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-error-message {\n font-size: 12px;\n color: #ef4444;\n margin-top: 4px;\n }\n\n .fuf-hidden-input {\n display: none;\n }\n`;\n\n/**\n * FileUploadField component for single or multiple file uploads with preview support.\n */\nexport const FileUploadField = forwardRef<HTMLInputElement, FileUploadFieldProps>((props, ref) => {\n const {\n label,\n required,\n error,\n accept = '.pdf,.doc,.docx',\n maxSizeMB = 10,\n disabled,\n uploadType,\n multiple,\n value,\n onChange,\n onDelete,\n previewUrl,\n previewUrls,\n existingFileUrl,\n existingFileName,\n editMode = true,\n viewMode = false,\n className = '',\n style,\n sx,\n } = props;\n\n // Inject Tabler Icons CDN if not present\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n const existingFiles = Array.isArray(existingFileUrl)\n ? existingFileUrl\n : existingFileUrl ? [existingFileUrl] : [];\n\n const currentFiles = Array.isArray(value)\n ? value\n : value ? [value] : [];\n\n const filesToRender = [...existingFiles, ...currentFiles];\n const isReadOnly = disabled || viewMode || !editMode;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!);\n\n const [internalPreviews, setInternalPreviews] = useState<string[]>([]);\n\n // Cleanup object URLs on unmount\n useEffect(() => {\n return () => {\n internalPreviews.forEach((url) => {\n if (url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n });\n };\n }, [internalPreviews]);\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly) return;\n const files = e.target.files;\n if (!files || files.length === 0) return;\n\n const fileList = Array.from(files);\n const validFiles: File[] = [];\n const newPreviews: string[] = [];\n\n for (const file of fileList) {\n if (file.size > maxSizeMB * 1024 * 1024) {\n toast.error(`File \"${file.name}\" exceeds the maximum size of ${maxSizeMB}MB`);\n continue;\n }\n validFiles.push(file);\n newPreviews.push(URL.createObjectURL(file));\n }\n\n if (validFiles.length === 0) {\n e.target.value = '';\n return;\n }\n\n if (multiple) {\n setInternalPreviews((prev) => [...prev, ...newPreviews]);\n const currentFiles = Array.isArray(value) ? value : [];\n const updatedFiles = [...currentFiles, ...validFiles];\n (onChange as (files: File[] | null) => void)?.(updatedFiles);\n } else {\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews(newPreviews);\n (onChange as (file: File | null) => void)?.(validFiles[0]);\n }\n\n e.target.value = '';\n };\n\n const handleRemove = (index: number) => {\n if (isReadOnly) return;\n\n const isExisting = index < existingFiles.length;\n if (isExisting) {\n onDelete?.(index);\n return;\n }\n\n const currentFileIndex = index - existingFiles.length;\n\n if (multiple) {\n const currentFiles = Array.isArray(value) ? [...value] : [];\n currentFiles.splice(currentFileIndex, 1);\n (onChange as (files: File[] | null) => void)?.(currentFiles.length > 0 ? currentFiles : null);\n\n const currentPreviews = [...internalPreviews];\n if (currentPreviews[currentFileIndex]?.startsWith('blob:')) {\n URL.revokeObjectURL(currentPreviews[currentFileIndex]);\n }\n currentPreviews.splice(currentFileIndex, 1);\n setInternalPreviews(currentPreviews);\n } else {\n (onChange as (file: File | null) => void)?.(null);\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews([]);\n }\n onDelete?.(index);\n };\n\n const renderFileRow = (file: File | string, index: number) => {\n const isExisting = index < existingFiles.length;\n const fileName = typeof file === 'string'\n ? (Array.isArray(existingFileName) ? existingFileName[index] : existingFileName) || 'Uploaded Document'\n : file.name;\n\n const currentFileIndex = index - existingFiles.length;\n const fileUrl = typeof file === 'string'\n ? file\n : internalPreviews[currentFileIndex] || (Array.isArray(previewUrls) ? previewUrls[currentFileIndex] : previewUrl);\n\n const isPdf = fileName.toLowerCase().endsWith('.pdf') || (typeof file !== 'string' && file.type === 'application/pdf');\n const isImage = uploadType === 'image' || fileName.toLowerCase().match(/\\.(jpg|jpeg|png|gif|webp)$/i);\n\n return (\n <div className=\"fuf-preview-item\" key={`${fileName}-${index}`}>\n <div className=\"fuf-file-info\">\n {isImage && fileUrl ? (\n <img className=\"fuf-thumbnail\" src={fileUrl} alt={fileName} />\n ) : isPdf ? (\n <i className=\"ti ti-file-type-pdf fuf-file-icon pdf\"></i>\n ) : (\n <i className=\"ti ti-file fuf-file-icon general\"></i>\n )}\n <span className=\"fuf-file-name\" title={fileName}>\n {fileName}\n </span>\n </div>\n <div className=\"fuf-actions\">\n {(isPdf || isImage) && fileUrl && (\n <button\n type=\"button\"\n className=\"fuf-action-btn view\"\n onClick={() => window.open(fileUrl, '_blank')}\n title=\"View\"\n >\n <i className=\"ti ti-eye\"></i>\n </button>\n )}\n {!isReadOnly && (\n <button\n type=\"button\"\n className=\"fuf-action-btn remove\"\n onClick={() => handleRemove(index)}\n title=\"Remove\"\n >\n <i className=\"ti ti-x\"></i>\n </button>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div className={`fuf-root ${className}`} style={{ ...handleSx(sx), ...style }}>\n {label && (\n <label className={`fuf-label ${error ? 'error' : ''}`}>\n {label} {required && <span className=\"fuf-required\">*</span>}\n </label>\n )}\n\n {(!filesToRender.length || multiple) && !isReadOnly && (\n <div\n className={`fuf-dropzone ${error ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <i className=\"ti ti-upload fuf-upload-icon\"></i>\n <span className=\"fuf-upload-text\">\n {disabled ? 'Upload disabled' : 'Click to upload'}\n </span>\n <span className=\"fuf-format-text\">\n (Supported formats: {accept.replace(/\\./g, '').toUpperCase()})\n </span>\n <input\n type=\"file\"\n className=\"fuf-hidden-input\"\n ref={inputRef}\n onChange={handleFileChange}\n accept={accept}\n disabled={disabled}\n multiple={multiple}\n />\n </div>\n )}\n\n {filesToRender.length > 0 && (\n <div className=\"fuf-preview-list\">\n {filesToRender.map((file, idx) => renderFileRow(file, idx))}\n </div>\n )}\n\n {error && (\n <span className=\"fuf-error-message\">\n {error}\n </span>\n )}\n </div>\n </>\n );\n});\n\nFileUploadField.displayName = 'FileUploadField';\n"]}
1
+ {"version":3,"sources":["../src/components/FileUploadField/FileUploadField.tsx"],"names":["STYLES","FileUploadField","forwardRef","props","ref","label","required","error","accept","maxSizeMB","disabled","uploadType","multiple","value","onChange","onDelete","previewUrl","previewUrls","existingFileUrl","existingFileName","editMode","viewMode","className","style","sx","useEffect","cdnId","link","existingFiles","currentFiles","filesToRender","isReadOnly","inputRef","useRef","useImperativeHandle","internalPreviews","setInternalPreviews","useState","url","handleFileChange","files","fileList","validFiles","newPreviews","file","toast","prev","updatedFiles","handleRemove","index","currentFileIndex","currentPreviews","renderFileRow","fileName","fileUrl","isPdf","isImage","jsxs","jsx","Fragment","handleSx","idx"],"mappings":"wKAOA,IAAMA,CAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAwMFC,EAAkBC,gBAAAA,CAAmD,CAACC,EAAOC,CAAAA,GAAQ,CAChG,GAAM,CACJ,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CAAS,iBAAA,CACT,UAAAC,CAAAA,CAAY,EAAA,CACZ,QAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,eAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,IAAA,CACX,QAAA,CAAAC,CAAAA,CAAW,MACX,SAAA,CAAAC,CAAAA,CAAY,GACZ,KAAA,CAAAC,CAAAA,CACA,GAAAC,CACF,CAAA,CAAIrB,EAGJsB,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAQ,mBACd,GAAI,CAAC,SAAS,cAAA,CAAeA,CAAK,CAAA,CAAG,CACnC,IAAMC,CAAAA,CAAO,QAAA,CAAS,cAAc,MAAM,CAAA,CAC1CA,EAAK,EAAA,CAAKD,CAAAA,CACVC,EAAK,GAAA,CAAM,YAAA,CACXA,EAAK,IAAA,CAAO,qFAAA,CACZ,SAAS,IAAA,CAAK,WAAA,CAAYA,CAAI,EAChC,CACF,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMC,EAAgB,KAAA,CAAM,OAAA,CAAQV,CAAe,CAAA,CAC/CA,CAAAA,CACAA,CAAAA,CAAkB,CAACA,CAAe,CAAA,CAAI,GAEpCW,CAAAA,CAAe,KAAA,CAAM,QAAQhB,CAAK,CAAA,CACpCA,CAAAA,CACAA,CAAAA,CAAQ,CAACA,CAAK,CAAA,CAAI,EAAC,CAEjBiB,CAAAA,CAAgB,CAAC,GAAGF,CAAAA,CAAe,GAAGC,CAAY,CAAA,CAClDE,EAAarB,CAAAA,EAAYW,CAAAA,EAAY,CAACD,CAAAA,CAEtCY,CAAAA,CAAWC,aAAyB,IAAI,CAAA,CAC9CC,yBAAAA,CAAoB9B,CAAAA,CAAK,IAAM4B,CAAAA,CAAS,OAAQ,EAEhD,GAAM,CAACG,EAAkBC,CAAmB,CAAA,CAAIC,eAAmB,EAAE,EAGrEZ,eAAAA,CAAU,IACD,IAAM,CACXU,CAAAA,CAAiB,QAASG,CAAAA,EAAQ,CAC5BA,CAAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EACxB,GAAA,CAAI,gBAAgBA,CAAG,EAE3B,CAAC,EACH,CAAA,CACC,CAACH,CAAgB,CAAC,EAErB,IAAMI,CAAAA,CAAoB,GAA2C,CACnE,GAAIR,EAAY,OAChB,IAAMS,CAAAA,CAAQ,CAAA,CAAE,OAAO,KAAA,CACvB,GAAI,CAACA,CAAAA,EAASA,CAAAA,CAAM,SAAW,CAAA,CAAG,OAElC,IAAMC,CAAAA,CAAW,MAAM,IAAA,CAAKD,CAAK,EAC3BE,CAAAA,CAAqB,GACrBC,CAAAA,CAAwB,EAAC,CAE/B,IAAA,IAAWC,KAAQH,CAAAA,CAAU,CAC3B,GAAIG,CAAAA,CAAK,IAAA,CAAOnC,EAAY,IAAA,CAAO,IAAA,CAAM,CACvCoC,mBAAAA,CAAM,KAAA,CAAM,SAASD,CAAAA,CAAK,IAAI,iCAAiCnC,CAAS,CAAA,EAAA,CAAI,EAC5E,QACF,CACAiC,CAAAA,CAAW,IAAA,CAAKE,CAAI,CAAA,CACpBD,CAAAA,CAAY,KAAK,GAAA,CAAI,eAAA,CAAgBC,CAAI,CAAC,EAC5C,CAEA,GAAIF,CAAAA,CAAW,SAAW,CAAA,CAAG,CAC3B,EAAE,MAAA,CAAO,KAAA,CAAQ,GACjB,MACF,CAEA,GAAI9B,CAAAA,CAAU,CACZwB,CAAAA,CAAqBU,CAAAA,EAAS,CAAC,GAAGA,CAAAA,CAAM,GAAGH,CAAW,CAAC,EAEvD,IAAMI,CAAAA,CAAe,CAAC,GADD,KAAA,CAAM,QAAQlC,CAAK,CAAA,CAAIA,EAAQ,EAAC,CACd,GAAG6B,CAAU,EACnD5B,CAAAA,GAA8CiC,CAAY,EAC7D,CAAA,KACMZ,CAAAA,CAAiB,CAAC,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA,EACzC,IAAI,eAAA,CAAgBA,CAAAA,CAAiB,CAAC,CAAC,CAAA,CAEzCC,EAAoBO,CAAW,CAAA,CAC9B7B,CAAAA,GAA2C4B,CAAAA,CAAW,CAAC,CAAC,CAAA,CAG3D,EAAE,MAAA,CAAO,KAAA,CAAQ,GACnB,CAAA,CAEMM,CAAAA,CAAgBC,GAAkB,CACtC,GAAIlB,EAAY,OAGhB,GADmBkB,EAAQrB,CAAAA,CAAc,MAAA,CACzB,CACdb,CAAAA,GAAWkC,CAAK,CAAA,CAChB,MACF,CAEA,IAAMC,CAAAA,CAAmBD,EAAQrB,CAAAA,CAAc,MAAA,CAE/C,GAAIhB,CAAAA,CAAU,CACZ,IAAMiB,CAAAA,CAAe,KAAA,CAAM,QAAQhB,CAAK,CAAA,CAAI,CAAC,GAAGA,CAAK,EAAI,EAAC,CAC1DgB,CAAAA,CAAa,MAAA,CAAOqB,EAAkB,CAAC,CAAA,CACtCpC,IAA8Ce,CAAAA,CAAa,MAAA,CAAS,EAAIA,CAAAA,CAAe,IAAI,EAE5F,IAAMsB,CAAAA,CAAkB,CAAC,GAAGhB,CAAgB,EACxCgB,CAAAA,CAAgBD,CAAgB,GAAG,UAAA,CAAW,OAAO,CAAA,EACvD,GAAA,CAAI,gBAAgBC,CAAAA,CAAgBD,CAAgB,CAAC,CAAA,CAEvDC,CAAAA,CAAgB,OAAOD,CAAAA,CAAkB,CAAC,CAAA,CAC1Cd,CAAAA,CAAoBe,CAAe,EACrC,CAAA,KACGrC,IAA2C,IAAI,CAAA,CAC5CqB,EAAiB,CAAC,CAAA,EAAG,UAAA,CAAW,OAAO,GACzC,GAAA,CAAI,eAAA,CAAgBA,EAAiB,CAAC,CAAC,EAEzCC,CAAAA,CAAoB,EAAE,CAAA,CAExBrB,CAAAA,GAAWkC,CAAK,EAClB,CAAA,CAEMG,EAAgB,CAACR,CAAAA,CAAqBK,IAAkB,CACzCA,CAAAA,CAAQrB,EAAc,MAAA,KACnCyB,CAAAA,CAAW,OAAOT,CAAAA,EAAS,QAAA,CAAA,CAC5B,MAAM,OAAA,CAAQzB,CAAgB,EAAIA,CAAAA,CAAiB8B,CAAK,EAAI9B,CAAAA,GAAqB,mBAAA,CAClFyB,EAAK,IAAA,CAEHM,CAAAA,CAAmBD,EAAQrB,CAAAA,CAAc,MAAA,CACzC0B,CAAAA,CAAU,OAAOV,GAAS,QAAA,CAC5BA,CAAAA,CACAT,EAAiBe,CAAgB,CAAA,GAAM,MAAM,OAAA,CAAQjC,CAAW,EAAIA,CAAAA,CAAYiC,CAAgB,EAAIlC,CAAAA,CAAAA,CAElGuC,CAAAA,CAAQF,EAAS,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA,EAAM,OAAOT,CAAAA,EAAS,UAAYA,CAAAA,CAAK,IAAA,GAAS,kBAC9FY,CAAAA,CAAU7C,CAAAA,GAAe,SAAW0C,CAAAA,CAAS,WAAA,EAAY,CAAE,KAAA,CAAM,6BAA6B,EAEpG,OACEI,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBACb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACZ,QAAA,CAAA,CAAAD,CAAAA,EAAWF,EACVI,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CAAgB,GAAA,CAAKJ,EAAS,GAAA,CAAKD,CAAAA,CAAU,EAC1DE,CAAAA,CACFG,cAAAA,CAAC,KAAE,SAAA,CAAU,uCAAA,CAAwC,EAErDA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,kCAAA,CAAmC,EAElDA,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,eAAA,CAAgB,KAAA,CAAOL,EACpC,QAAA,CAAAA,CAAAA,CACH,GACF,CAAA,CACAI,eAAAA,CAAC,OAAI,SAAA,CAAU,aAAA,CACX,WAAAF,CAAAA,EAASC,CAAAA,GAAYF,GACrBI,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,UAAU,qBAAA,CACV,OAAA,CAAS,IAAM,MAAA,CAAO,IAAA,CAAKJ,EAAS,QAAQ,CAAA,CAC5C,MAAM,MAAA,CAEN,QAAA,CAAAI,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,YAAY,CAAA,CAC3B,CAAA,CAED,CAAC3B,CAAAA,EACA2B,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,SAAA,CAAU,uBAAA,CACV,QAAS,IAAMV,CAAAA,CAAaC,CAAK,CAAA,CACjC,KAAA,CAAM,QAAA,CAEN,QAAA,CAAAS,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,UAAU,CAAA,CACzB,CAAA,CAAA,CAEJ,IAlCqC,CAAA,EAAGL,CAAQ,CAAA,CAAA,EAAIJ,CAAK,EAmC3D,CAEJ,CAAA,CAEA,OACEQ,eAAAA,CAAAE,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,cAAAA,CAAC,SAAM,uBAAA,CAAyB,CAAE,OAAQ1D,CAAO,CAAA,CAAG,EACpDyD,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAW,CAAA,SAAA,EAAYnC,CAAS,CAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGsC,kBAAAA,CAASpC,CAAE,CAAA,CAAG,GAAGD,CAAM,CAAA,CACzE,QAAA,CAAA,CAAAlB,GACCoD,eAAAA,CAAC,OAAA,CAAA,CAAM,UAAW,CAAA,UAAA,EAAalD,CAAAA,CAAQ,QAAU,EAAE,CAAA,CAAA,CAChD,UAAAF,CAAAA,CAAM,GAAA,CAAEC,CAAAA,EAAYoD,cAAAA,CAAC,QAAK,SAAA,CAAU,cAAA,CAAe,aAAC,CAAA,CAAA,CACvD,CAAA,CAAA,CAGA,CAAC5B,CAAAA,CAAc,MAAA,EAAUlB,IAAa,CAACmB,CAAAA,EACvC0B,gBAAC,KAAA,CAAA,CACC,SAAA,CAAW,gBAAgBlD,CAAAA,CAAQ,OAAA,CAAU,EAAE,CAAA,CAAA,EAAIG,CAAAA,CAAW,UAAA,CAAa,EAAE,GAC7E,OAAA,CAAS,IAAM,CAACA,CAAAA,EAAYsB,CAAAA,CAAS,SAAS,KAAA,EAAM,CAEpD,UAAA0B,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,8BAAA,CAA+B,CAAA,CAC5CA,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kBACb,QAAA,CAAAhD,CAAAA,CAAW,iBAAA,CAAoB,iBAAA,CAClC,EACA+C,eAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CAAkB,QAAA,CAAA,CAAA,sBAAA,CACXjD,EAAO,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CAAE,WAAA,GAAc,GAAA,CAAA,CAC/D,CAAA,CACAkD,eAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,SAAA,CAAU,kBAAA,CACV,GAAA,CAAK1B,CAAAA,CACL,SAAUO,CAAAA,CACV,MAAA,CAAQ/B,EACR,QAAA,CAAUE,CAAAA,CACV,SAAUE,CAAAA,CACZ,CAAA,CAAA,CACF,EAGDkB,CAAAA,CAAc,MAAA,CAAS,GACtB4B,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kBAAA,CACZ,QAAA,CAAA5B,EAAc,GAAA,CAAI,CAACc,CAAAA,CAAMiB,CAAAA,GAAQT,EAAcR,CAAAA,CAAMiB,CAAG,CAAC,CAAA,CAC5D,CAAA,CAGDtD,GACCmD,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,mBAAA,CACb,QAAA,CAAAnD,EACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAAC,EAEDN,EAAgB,WAAA,CAAc,iBAAA","file":"chunk-46JFDK2G.js","sourcesContent":["'use client';\n\nimport React, { forwardRef, useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport { handleSx } from '../../utils/handleSx';\nimport { FileUploadFieldProps } from './FileUploadField.types';\n\nconst STYLES = `\n .fuf-root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n width: 100%;\n }\n\n .fuf-label {\n font-size: 14px;\n font-weight: 500;\n color: #64748b;\n margin-bottom: 4px;\n }\n\n .fuf-label.error {\n color: #ef4444;\n }\n\n .fuf-required {\n color: #ef4444;\n margin-left: 2px;\n }\n\n .fuf-dropzone {\n border: 2px dashed #cbd5e1;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n background: #f8fafc;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .fuf-dropzone:hover {\n border-color: #3b82f6;\n background: #eff6ff;\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n }\n\n .fuf-dropzone.error {\n border-color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-dropzone.error:hover {\n border-color: #dc2626;\n }\n\n .fuf-dropzone.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .fuf-dropzone.disabled:hover {\n transform: none;\n box-shadow: none;\n border-color: #cbd5e1;\n background: #f8fafc;\n }\n\n .fuf-upload-icon {\n color: #3b82f6;\n font-size: 48px;\n margin-bottom: 8px;\n display: block;\n }\n\n .fuf-dropzone.error .fuf-upload-icon {\n color: #ef4444;\n }\n\n .fuf-upload-text {\n font-size: 16px;\n font-weight: 500;\n color: #334155;\n }\n\n .fuf-format-text {\n font-size: 12px;\n color: #94a3b8;\n }\n\n .fuf-preview-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n }\n\n .fuf-preview-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: white;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n transition: all 0.2s ease;\n }\n\n .fuf-preview-item:hover {\n border-color: #cbd5e1;\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n }\n\n .fuf-file-info {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n\n .fuf-thumbnail {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 8px;\n border: 1px solid #f1f5f9;\n }\n\n .fuf-file-icon {\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .fuf-file-icon.pdf {\n color: #ef4444;\n }\n\n .fuf-file-icon.general {\n color: #3b82f6;\n }\n\n .fuf-file-name {\n font-size: 14px;\n color: #1e293b;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n }\n\n .fuf-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .fuf-action-btn {\n padding: 8px;\n border-radius: 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n color: #64748b;\n }\n\n .fuf-action-btn i {\n font-size: 18px;\n }\n\n .fuf-action-btn.view:hover {\n color: #3b82f6;\n background: #eff6ff;\n }\n\n .fuf-action-btn.remove:hover {\n color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-error-message {\n font-size: 12px;\n color: #ef4444;\n margin-top: 4px;\n }\n\n .fuf-hidden-input {\n display: none;\n }\n`;\n\n/**\n * FileUploadField component for single or multiple file uploads with preview support.\n */\nexport const FileUploadField = forwardRef<HTMLInputElement, FileUploadFieldProps>((props, ref) => {\n const {\n label,\n required,\n error,\n accept = '.pdf,.doc,.docx',\n maxSizeMB = 10,\n disabled,\n uploadType,\n multiple,\n value,\n onChange,\n onDelete,\n previewUrl,\n previewUrls,\n existingFileUrl,\n existingFileName,\n editMode = true,\n viewMode = false,\n className = '',\n style,\n sx,\n } = props;\n\n // Inject Tabler Icons CDN if not present\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n const existingFiles = Array.isArray(existingFileUrl)\n ? existingFileUrl\n : existingFileUrl ? [existingFileUrl] : [];\n\n const currentFiles = Array.isArray(value)\n ? value\n : value ? [value] : [];\n\n const filesToRender = [...existingFiles, ...currentFiles];\n const isReadOnly = disabled || viewMode || !editMode;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!);\n\n const [internalPreviews, setInternalPreviews] = useState<string[]>([]);\n\n // Cleanup object URLs on unmount\n useEffect(() => {\n return () => {\n internalPreviews.forEach((url) => {\n if (url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n });\n };\n }, [internalPreviews]);\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly) return;\n const files = e.target.files;\n if (!files || files.length === 0) return;\n\n const fileList = Array.from(files);\n const validFiles: File[] = [];\n const newPreviews: string[] = [];\n\n for (const file of fileList) {\n if (file.size > maxSizeMB * 1024 * 1024) {\n toast.error(`File \"${file.name}\" exceeds the maximum size of ${maxSizeMB}MB`);\n continue;\n }\n validFiles.push(file);\n newPreviews.push(URL.createObjectURL(file));\n }\n\n if (validFiles.length === 0) {\n e.target.value = '';\n return;\n }\n\n if (multiple) {\n setInternalPreviews((prev) => [...prev, ...newPreviews]);\n const currentFiles = Array.isArray(value) ? value : [];\n const updatedFiles = [...currentFiles, ...validFiles];\n (onChange as (files: File[] | null) => void)?.(updatedFiles);\n } else {\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews(newPreviews);\n (onChange as (file: File | null) => void)?.(validFiles[0]);\n }\n\n e.target.value = '';\n };\n\n const handleRemove = (index: number) => {\n if (isReadOnly) return;\n\n const isExisting = index < existingFiles.length;\n if (isExisting) {\n onDelete?.(index);\n return;\n }\n\n const currentFileIndex = index - existingFiles.length;\n\n if (multiple) {\n const currentFiles = Array.isArray(value) ? [...value] : [];\n currentFiles.splice(currentFileIndex, 1);\n (onChange as (files: File[] | null) => void)?.(currentFiles.length > 0 ? currentFiles : null);\n\n const currentPreviews = [...internalPreviews];\n if (currentPreviews[currentFileIndex]?.startsWith('blob:')) {\n URL.revokeObjectURL(currentPreviews[currentFileIndex]);\n }\n currentPreviews.splice(currentFileIndex, 1);\n setInternalPreviews(currentPreviews);\n } else {\n (onChange as (file: File | null) => void)?.(null);\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews([]);\n }\n onDelete?.(index);\n };\n\n const renderFileRow = (file: File | string, index: number) => {\n const isExisting = index < existingFiles.length;\n const fileName = typeof file === 'string'\n ? (Array.isArray(existingFileName) ? existingFileName[index] : existingFileName) || 'Uploaded Document'\n : file.name;\n\n const currentFileIndex = index - existingFiles.length;\n const fileUrl = typeof file === 'string'\n ? file\n : internalPreviews[currentFileIndex] || (Array.isArray(previewUrls) ? previewUrls[currentFileIndex] : previewUrl);\n\n const isPdf = fileName.toLowerCase().endsWith('.pdf') || (typeof file !== 'string' && file.type === 'application/pdf');\n const isImage = uploadType === 'image' || fileName.toLowerCase().match(/\\.(jpg|jpeg|png|gif|webp)$/i);\n\n return (\n <div className=\"fuf-preview-item\" key={`${fileName}-${index}`}>\n <div className=\"fuf-file-info\">\n {isImage && fileUrl ? (\n <img className=\"fuf-thumbnail\" src={fileUrl} alt={fileName} />\n ) : isPdf ? (\n <i className=\"ti ti-file-type-pdf fuf-file-icon pdf\"></i>\n ) : (\n <i className=\"ti ti-file fuf-file-icon general\"></i>\n )}\n <span className=\"fuf-file-name\" title={fileName}>\n {fileName}\n </span>\n </div>\n <div className=\"fuf-actions\">\n {(isPdf || isImage) && fileUrl && (\n <button\n type=\"button\"\n className=\"fuf-action-btn view\"\n onClick={() => window.open(fileUrl, '_blank')}\n title=\"View\"\n >\n <i className=\"ti ti-eye\"></i>\n </button>\n )}\n {!isReadOnly && (\n <button\n type=\"button\"\n className=\"fuf-action-btn remove\"\n onClick={() => handleRemove(index)}\n title=\"Remove\"\n >\n <i className=\"ti ti-x\"></i>\n </button>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div className={`fuf-root ${className}`} style={{ ...handleSx(sx), ...style }}>\n {label && (\n <label className={`fuf-label ${error ? 'error' : ''}`}>\n {label} {required && <span className=\"fuf-required\">*</span>}\n </label>\n )}\n\n {(!filesToRender.length || multiple) && !isReadOnly && (\n <div\n className={`fuf-dropzone ${error ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <i className=\"ti ti-upload fuf-upload-icon\"></i>\n <span className=\"fuf-upload-text\">\n {disabled ? 'Upload disabled' : 'Click to upload'}\n </span>\n <span className=\"fuf-format-text\">\n (Supported formats: {accept.replace(/\\./g, '').toUpperCase()})\n </span>\n <input\n type=\"file\"\n className=\"fuf-hidden-input\"\n ref={inputRef}\n onChange={handleFileChange}\n accept={accept}\n disabled={disabled}\n multiple={multiple}\n />\n </div>\n )}\n\n {filesToRender.length > 0 && (\n <div className=\"fuf-preview-list\">\n {filesToRender.map((file, idx) => renderFileRow(file, idx))}\n </div>\n )}\n\n {error && (\n <span className=\"fuf-error-message\">\n {error}\n </span>\n )}\n </div>\n </>\n );\n});\n\nFileUploadField.displayName = 'FileUploadField';\n"]}
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-HGGQFNUJ.mjs';import {forwardRef,useEffect,useRef,useImperativeHandle,useState}from'react';import {toast}from'react-toastify';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var J=`
1
+ import {a}from'./chunk-MAXZQTTY.mjs';import {forwardRef,useEffect,useRef,useImperativeHandle,useState}from'react';import {toast}from'react-toastify';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var J=`
2
2
  .fuf-root {
3
3
  display: flex;
4
4
  flex-direction: column;
@@ -194,5 +194,5 @@ import {a}from'./chunk-HGGQFNUJ.mjs';import {forwardRef,useEffect,useRef,useImpe
194
194
  display: none;
195
195
  }
196
196
  `,K=forwardRef((C,E)=>{let{label:N,required:I,error:d,accept:k=".pdf,.doc,.docx",maxSizeMB:U=10,disabled:c,uploadType:j,multiple:u,value:l,onChange:m,onDelete:z,previewUrl:$,previewUrls:R,existingFileUrl:b,existingFileName:y,editMode:M=true,viewMode:P=false,className:S="",style:T,sx:O}=C;useEffect(()=>{let e="tabler-icons-cdn";if(!document.getElementById(e)){let t=document.createElement("link");t.id=e,t.rel="stylesheet",t.href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css",document.head.appendChild(t);}},[]);let p=Array.isArray(b)?b:b?[b]:[],H=Array.isArray(l)?l:l?[l]:[],w=[...p,...H],g=c||P||!M,F=useRef(null);useImperativeHandle(E,()=>F.current);let[s,x]=useState([]);useEffect(()=>()=>{s.forEach(e=>{e.startsWith("blob:")&&URL.revokeObjectURL(e);});},[s]);let W=e=>{if(g)return;let t=e.target.files;if(!t||t.length===0)return;let f=Array.from(t),i=[],r=[];for(let n of f){if(n.size>U*1024*1024){toast.error(`File "${n.name}" exceeds the maximum size of ${U}MB`);continue}i.push(n),r.push(URL.createObjectURL(n));}if(i.length===0){e.target.value="";return}if(u){x(v=>[...v,...r]);let h=[...Array.isArray(l)?l:[],...i];m?.(h);}else s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x(r),m?.(i[0]);e.target.value="";},q=e=>{if(g)return;if(e<p.length){z?.(e);return}let f=e-p.length;if(u){let i=Array.isArray(l)?[...l]:[];i.splice(f,1),m?.(i.length>0?i:null);let r=[...s];r[f]?.startsWith("blob:")&&URL.revokeObjectURL(r[f]),r.splice(f,1),x(r);}else m?.(null),s[0]?.startsWith("blob:")&&URL.revokeObjectURL(s[0]),x([]);z?.(e);},B=(e,t)=>{t<p.length;let i=typeof e=="string"?(Array.isArray(y)?y[t]:y)||"Uploaded Document":e.name,r=t-p.length,n=typeof e=="string"?e:s[r]||(Array.isArray(R)?R[r]:$),h=i.toLowerCase().endsWith(".pdf")||typeof e!="string"&&e.type==="application/pdf",v=j==="image"||i.toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)$/i);return jsxs("div",{className:"fuf-preview-item",children:[jsxs("div",{className:"fuf-file-info",children:[v&&n?jsx("img",{className:"fuf-thumbnail",src:n,alt:i}):h?jsx("i",{className:"ti ti-file-type-pdf fuf-file-icon pdf"}):jsx("i",{className:"ti ti-file fuf-file-icon general"}),jsx("span",{className:"fuf-file-name",title:i,children:i})]}),jsxs("div",{className:"fuf-actions",children:[(h||v)&&n&&jsx("button",{type:"button",className:"fuf-action-btn view",onClick:()=>window.open(n,"_blank"),title:"View",children:jsx("i",{className:"ti ti-eye"})}),!g&&jsx("button",{type:"button",className:"fuf-action-btn remove",onClick:()=>q(t),title:"Remove",children:jsx("i",{className:"ti ti-x"})})]})]},`${i}-${t}`)};return jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:J}}),jsxs("div",{className:`fuf-root ${S}`,style:{...a(O),...T},children:[N&&jsxs("label",{className:`fuf-label ${d?"error":""}`,children:[N," ",I&&jsx("span",{className:"fuf-required",children:"*"})]}),(!w.length||u)&&!g&&jsxs("div",{className:`fuf-dropzone ${d?"error":""} ${c?"disabled":""}`,onClick:()=>!c&&F.current?.click(),children:[jsx("i",{className:"ti ti-upload fuf-upload-icon"}),jsx("span",{className:"fuf-upload-text",children:c?"Upload disabled":"Click to upload"}),jsxs("span",{className:"fuf-format-text",children:["(Supported formats: ",k.replace(/\./g,"").toUpperCase(),")"]}),jsx("input",{type:"file",className:"fuf-hidden-input",ref:F,onChange:W,accept:k,disabled:c,multiple:u})]}),w.length>0&&jsx("div",{className:"fuf-preview-list",children:w.map((e,t)=>B(e,t))}),d&&jsx("span",{className:"fuf-error-message",children:d})]})]})});K.displayName="FileUploadField";
197
- export{K as a};//# sourceMappingURL=chunk-PL2R3LYL.mjs.map
198
- //# sourceMappingURL=chunk-PL2R3LYL.mjs.map
197
+ export{K as a};//# sourceMappingURL=chunk-5D4JO44P.mjs.map
198
+ //# sourceMappingURL=chunk-5D4JO44P.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/FileUploadField/FileUploadField.tsx"],"names":["STYLES","FileUploadField","forwardRef","props","ref","label","required","error","accept","maxSizeMB","disabled","uploadType","multiple","value","onChange","onDelete","previewUrl","previewUrls","existingFileUrl","existingFileName","editMode","viewMode","className","style","sx","useEffect","cdnId","link","existingFiles","currentFiles","filesToRender","isReadOnly","inputRef","useRef","useImperativeHandle","internalPreviews","setInternalPreviews","useState","url","handleFileChange","files","fileList","validFiles","newPreviews","file","toast","prev","updatedFiles","handleRemove","index","currentFileIndex","currentPreviews","renderFileRow","fileName","fileUrl","isPdf","isImage","jsxs","jsx","Fragment","handleSx","idx"],"mappings":"uMAOA,IAAMA,CAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAwMFC,EAAkBC,UAAAA,CAAmD,CAACC,EAAOC,CAAAA,GAAQ,CAChG,GAAM,CACJ,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CAAS,iBAAA,CACT,UAAAC,CAAAA,CAAY,EAAA,CACZ,QAAA,CAAAC,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,eAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,IAAA,CACX,QAAA,CAAAC,CAAAA,CAAW,MACX,SAAA,CAAAC,CAAAA,CAAY,GACZ,KAAA,CAAAC,CAAAA,CACA,GAAAC,CACF,CAAA,CAAIrB,EAGJsB,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAQ,mBACd,GAAI,CAAC,SAAS,cAAA,CAAeA,CAAK,CAAA,CAAG,CACnC,IAAMC,CAAAA,CAAO,QAAA,CAAS,cAAc,MAAM,CAAA,CAC1CA,EAAK,EAAA,CAAKD,CAAAA,CACVC,EAAK,GAAA,CAAM,YAAA,CACXA,EAAK,IAAA,CAAO,qFAAA,CACZ,SAAS,IAAA,CAAK,WAAA,CAAYA,CAAI,EAChC,CACF,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMC,EAAgB,KAAA,CAAM,OAAA,CAAQV,CAAe,CAAA,CAC/CA,CAAAA,CACAA,CAAAA,CAAkB,CAACA,CAAe,CAAA,CAAI,GAEpCW,CAAAA,CAAe,KAAA,CAAM,QAAQhB,CAAK,CAAA,CACpCA,CAAAA,CACAA,CAAAA,CAAQ,CAACA,CAAK,CAAA,CAAI,EAAC,CAEjBiB,CAAAA,CAAgB,CAAC,GAAGF,CAAAA,CAAe,GAAGC,CAAY,CAAA,CAClDE,EAAarB,CAAAA,EAAYW,CAAAA,EAAY,CAACD,CAAAA,CAEtCY,CAAAA,CAAWC,OAAyB,IAAI,CAAA,CAC9CC,mBAAAA,CAAoB9B,CAAAA,CAAK,IAAM4B,CAAAA,CAAS,OAAQ,EAEhD,GAAM,CAACG,EAAkBC,CAAmB,CAAA,CAAIC,SAAmB,EAAE,EAGrEZ,SAAAA,CAAU,IACD,IAAM,CACXU,CAAAA,CAAiB,QAASG,CAAAA,EAAQ,CAC5BA,CAAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EACxB,GAAA,CAAI,gBAAgBA,CAAG,EAE3B,CAAC,EACH,CAAA,CACC,CAACH,CAAgB,CAAC,EAErB,IAAMI,CAAAA,CAAoB,GAA2C,CACnE,GAAIR,EAAY,OAChB,IAAMS,CAAAA,CAAQ,CAAA,CAAE,OAAO,KAAA,CACvB,GAAI,CAACA,CAAAA,EAASA,CAAAA,CAAM,SAAW,CAAA,CAAG,OAElC,IAAMC,CAAAA,CAAW,MAAM,IAAA,CAAKD,CAAK,EAC3BE,CAAAA,CAAqB,GACrBC,CAAAA,CAAwB,EAAC,CAE/B,IAAA,IAAWC,KAAQH,CAAAA,CAAU,CAC3B,GAAIG,CAAAA,CAAK,IAAA,CAAOnC,EAAY,IAAA,CAAO,IAAA,CAAM,CACvCoC,KAAAA,CAAM,KAAA,CAAM,SAASD,CAAAA,CAAK,IAAI,iCAAiCnC,CAAS,CAAA,EAAA,CAAI,EAC5E,QACF,CACAiC,CAAAA,CAAW,IAAA,CAAKE,CAAI,CAAA,CACpBD,CAAAA,CAAY,KAAK,GAAA,CAAI,eAAA,CAAgBC,CAAI,CAAC,EAC5C,CAEA,GAAIF,CAAAA,CAAW,SAAW,CAAA,CAAG,CAC3B,EAAE,MAAA,CAAO,KAAA,CAAQ,GACjB,MACF,CAEA,GAAI9B,CAAAA,CAAU,CACZwB,CAAAA,CAAqBU,CAAAA,EAAS,CAAC,GAAGA,CAAAA,CAAM,GAAGH,CAAW,CAAC,EAEvD,IAAMI,CAAAA,CAAe,CAAC,GADD,KAAA,CAAM,QAAQlC,CAAK,CAAA,CAAIA,EAAQ,EAAC,CACd,GAAG6B,CAAU,EACnD5B,CAAAA,GAA8CiC,CAAY,EAC7D,CAAA,KACMZ,CAAAA,CAAiB,CAAC,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA,EACzC,IAAI,eAAA,CAAgBA,CAAAA,CAAiB,CAAC,CAAC,CAAA,CAEzCC,EAAoBO,CAAW,CAAA,CAC9B7B,CAAAA,GAA2C4B,CAAAA,CAAW,CAAC,CAAC,CAAA,CAG3D,EAAE,MAAA,CAAO,KAAA,CAAQ,GACnB,CAAA,CAEMM,CAAAA,CAAgBC,GAAkB,CACtC,GAAIlB,EAAY,OAGhB,GADmBkB,EAAQrB,CAAAA,CAAc,MAAA,CACzB,CACdb,CAAAA,GAAWkC,CAAK,CAAA,CAChB,MACF,CAEA,IAAMC,CAAAA,CAAmBD,EAAQrB,CAAAA,CAAc,MAAA,CAE/C,GAAIhB,CAAAA,CAAU,CACZ,IAAMiB,CAAAA,CAAe,KAAA,CAAM,QAAQhB,CAAK,CAAA,CAAI,CAAC,GAAGA,CAAK,EAAI,EAAC,CAC1DgB,CAAAA,CAAa,MAAA,CAAOqB,EAAkB,CAAC,CAAA,CACtCpC,IAA8Ce,CAAAA,CAAa,MAAA,CAAS,EAAIA,CAAAA,CAAe,IAAI,EAE5F,IAAMsB,CAAAA,CAAkB,CAAC,GAAGhB,CAAgB,EACxCgB,CAAAA,CAAgBD,CAAgB,GAAG,UAAA,CAAW,OAAO,CAAA,EACvD,GAAA,CAAI,gBAAgBC,CAAAA,CAAgBD,CAAgB,CAAC,CAAA,CAEvDC,CAAAA,CAAgB,OAAOD,CAAAA,CAAkB,CAAC,CAAA,CAC1Cd,CAAAA,CAAoBe,CAAe,EACrC,CAAA,KACGrC,IAA2C,IAAI,CAAA,CAC5CqB,EAAiB,CAAC,CAAA,EAAG,UAAA,CAAW,OAAO,GACzC,GAAA,CAAI,eAAA,CAAgBA,EAAiB,CAAC,CAAC,EAEzCC,CAAAA,CAAoB,EAAE,CAAA,CAExBrB,CAAAA,GAAWkC,CAAK,EAClB,CAAA,CAEMG,EAAgB,CAACR,CAAAA,CAAqBK,IAAkB,CACzCA,CAAAA,CAAQrB,EAAc,MAAA,KACnCyB,CAAAA,CAAW,OAAOT,CAAAA,EAAS,QAAA,CAAA,CAC5B,MAAM,OAAA,CAAQzB,CAAgB,EAAIA,CAAAA,CAAiB8B,CAAK,EAAI9B,CAAAA,GAAqB,mBAAA,CAClFyB,EAAK,IAAA,CAEHM,CAAAA,CAAmBD,EAAQrB,CAAAA,CAAc,MAAA,CACzC0B,CAAAA,CAAU,OAAOV,GAAS,QAAA,CAC5BA,CAAAA,CACAT,EAAiBe,CAAgB,CAAA,GAAM,MAAM,OAAA,CAAQjC,CAAW,EAAIA,CAAAA,CAAYiC,CAAgB,EAAIlC,CAAAA,CAAAA,CAElGuC,CAAAA,CAAQF,EAAS,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA,EAAM,OAAOT,CAAAA,EAAS,UAAYA,CAAAA,CAAK,IAAA,GAAS,kBAC9FY,CAAAA,CAAU7C,CAAAA,GAAe,SAAW0C,CAAAA,CAAS,WAAA,EAAY,CAAE,KAAA,CAAM,6BAA6B,EAEpG,OACEI,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mBACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACZ,QAAA,CAAA,CAAAD,CAAAA,EAAWF,EACVI,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CAAgB,GAAA,CAAKJ,EAAS,GAAA,CAAKD,CAAAA,CAAU,EAC1DE,CAAAA,CACFG,GAAAA,CAAC,KAAE,SAAA,CAAU,uCAAA,CAAwC,EAErDA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,kCAAA,CAAmC,EAElDA,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,eAAA,CAAgB,KAAA,CAAOL,EACpC,QAAA,CAAAA,CAAAA,CACH,GACF,CAAA,CACAI,IAAAA,CAAC,OAAI,SAAA,CAAU,aAAA,CACX,WAAAF,CAAAA,EAASC,CAAAA,GAAYF,GACrBI,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,UAAU,qBAAA,CACV,OAAA,CAAS,IAAM,MAAA,CAAO,IAAA,CAAKJ,EAAS,QAAQ,CAAA,CAC5C,MAAM,MAAA,CAEN,QAAA,CAAAI,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,YAAY,CAAA,CAC3B,CAAA,CAED,CAAC3B,CAAAA,EACA2B,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,SAAA,CAAU,uBAAA,CACV,QAAS,IAAMV,CAAAA,CAAaC,CAAK,CAAA,CACjC,KAAA,CAAM,QAAA,CAEN,QAAA,CAAAS,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,UAAU,CAAA,CACzB,CAAA,CAAA,CAEJ,IAlCqC,CAAA,EAAGL,CAAQ,CAAA,CAAA,EAAIJ,CAAK,EAmC3D,CAEJ,CAAA,CAEA,OACEQ,IAAAA,CAAAE,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,GAAAA,CAAC,SAAM,uBAAA,CAAyB,CAAE,OAAQ1D,CAAO,CAAA,CAAG,EACpDyD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAW,CAAA,SAAA,EAAYnC,CAAS,CAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGsC,CAAAA,CAASpC,CAAE,CAAA,CAAG,GAAGD,CAAM,CAAA,CACzE,QAAA,CAAA,CAAAlB,GACCoD,IAAAA,CAAC,OAAA,CAAA,CAAM,UAAW,CAAA,UAAA,EAAalD,CAAAA,CAAQ,QAAU,EAAE,CAAA,CAAA,CAChD,UAAAF,CAAAA,CAAM,GAAA,CAAEC,CAAAA,EAAYoD,GAAAA,CAAC,QAAK,SAAA,CAAU,cAAA,CAAe,aAAC,CAAA,CAAA,CACvD,CAAA,CAAA,CAGA,CAAC5B,CAAAA,CAAc,MAAA,EAAUlB,IAAa,CAACmB,CAAAA,EACvC0B,KAAC,KAAA,CAAA,CACC,SAAA,CAAW,gBAAgBlD,CAAAA,CAAQ,OAAA,CAAU,EAAE,CAAA,CAAA,EAAIG,CAAAA,CAAW,UAAA,CAAa,EAAE,GAC7E,OAAA,CAAS,IAAM,CAACA,CAAAA,EAAYsB,CAAAA,CAAS,SAAS,KAAA,EAAM,CAEpD,UAAA0B,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,8BAAA,CAA+B,CAAA,CAC5CA,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kBACb,QAAA,CAAAhD,CAAAA,CAAW,iBAAA,CAAoB,iBAAA,CAClC,EACA+C,IAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CAAkB,QAAA,CAAA,CAAA,sBAAA,CACXjD,EAAO,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAA,CAAE,WAAA,GAAc,GAAA,CAAA,CAC/D,CAAA,CACAkD,IAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,SAAA,CAAU,kBAAA,CACV,GAAA,CAAK1B,CAAAA,CACL,SAAUO,CAAAA,CACV,MAAA,CAAQ/B,EACR,QAAA,CAAUE,CAAAA,CACV,SAAUE,CAAAA,CACZ,CAAA,CAAA,CACF,EAGDkB,CAAAA,CAAc,MAAA,CAAS,GACtB4B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kBAAA,CACZ,QAAA,CAAA5B,EAAc,GAAA,CAAI,CAACc,CAAAA,CAAMiB,CAAAA,GAAQT,EAAcR,CAAAA,CAAMiB,CAAG,CAAC,CAAA,CAC5D,CAAA,CAGDtD,GACCmD,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,mBAAA,CACb,QAAA,CAAAnD,EACH,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAAC,EAEDN,EAAgB,WAAA,CAAc,iBAAA","file":"chunk-PL2R3LYL.mjs","sourcesContent":["'use client';\n\nimport React, { forwardRef, useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport { handleSx } from '../../utils/handleSx';\nimport { FileUploadFieldProps } from './FileUploadField.types';\n\nconst STYLES = `\n .fuf-root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n width: 100%;\n }\n\n .fuf-label {\n font-size: 14px;\n font-weight: 500;\n color: #64748b;\n margin-bottom: 4px;\n }\n\n .fuf-label.error {\n color: #ef4444;\n }\n\n .fuf-required {\n color: #ef4444;\n margin-left: 2px;\n }\n\n .fuf-dropzone {\n border: 2px dashed #cbd5e1;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n background: #f8fafc;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .fuf-dropzone:hover {\n border-color: #3b82f6;\n background: #eff6ff;\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n }\n\n .fuf-dropzone.error {\n border-color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-dropzone.error:hover {\n border-color: #dc2626;\n }\n\n .fuf-dropzone.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .fuf-dropzone.disabled:hover {\n transform: none;\n box-shadow: none;\n border-color: #cbd5e1;\n background: #f8fafc;\n }\n\n .fuf-upload-icon {\n color: #3b82f6;\n font-size: 48px;\n margin-bottom: 8px;\n display: block;\n }\n\n .fuf-dropzone.error .fuf-upload-icon {\n color: #ef4444;\n }\n\n .fuf-upload-text {\n font-size: 16px;\n font-weight: 500;\n color: #334155;\n }\n\n .fuf-format-text {\n font-size: 12px;\n color: #94a3b8;\n }\n\n .fuf-preview-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n }\n\n .fuf-preview-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: white;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n transition: all 0.2s ease;\n }\n\n .fuf-preview-item:hover {\n border-color: #cbd5e1;\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n }\n\n .fuf-file-info {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n\n .fuf-thumbnail {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 8px;\n border: 1px solid #f1f5f9;\n }\n\n .fuf-file-icon {\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .fuf-file-icon.pdf {\n color: #ef4444;\n }\n\n .fuf-file-icon.general {\n color: #3b82f6;\n }\n\n .fuf-file-name {\n font-size: 14px;\n color: #1e293b;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n }\n\n .fuf-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .fuf-action-btn {\n padding: 8px;\n border-radius: 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n color: #64748b;\n }\n\n .fuf-action-btn i {\n font-size: 18px;\n }\n\n .fuf-action-btn.view:hover {\n color: #3b82f6;\n background: #eff6ff;\n }\n\n .fuf-action-btn.remove:hover {\n color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-error-message {\n font-size: 12px;\n color: #ef4444;\n margin-top: 4px;\n }\n\n .fuf-hidden-input {\n display: none;\n }\n`;\n\n/**\n * FileUploadField component for single or multiple file uploads with preview support.\n */\nexport const FileUploadField = forwardRef<HTMLInputElement, FileUploadFieldProps>((props, ref) => {\n const {\n label,\n required,\n error,\n accept = '.pdf,.doc,.docx',\n maxSizeMB = 10,\n disabled,\n uploadType,\n multiple,\n value,\n onChange,\n onDelete,\n previewUrl,\n previewUrls,\n existingFileUrl,\n existingFileName,\n editMode = true,\n viewMode = false,\n className = '',\n style,\n sx,\n } = props;\n\n // Inject Tabler Icons CDN if not present\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n const existingFiles = Array.isArray(existingFileUrl)\n ? existingFileUrl\n : existingFileUrl ? [existingFileUrl] : [];\n\n const currentFiles = Array.isArray(value)\n ? value\n : value ? [value] : [];\n\n const filesToRender = [...existingFiles, ...currentFiles];\n const isReadOnly = disabled || viewMode || !editMode;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!);\n\n const [internalPreviews, setInternalPreviews] = useState<string[]>([]);\n\n // Cleanup object URLs on unmount\n useEffect(() => {\n return () => {\n internalPreviews.forEach((url) => {\n if (url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n });\n };\n }, [internalPreviews]);\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly) return;\n const files = e.target.files;\n if (!files || files.length === 0) return;\n\n const fileList = Array.from(files);\n const validFiles: File[] = [];\n const newPreviews: string[] = [];\n\n for (const file of fileList) {\n if (file.size > maxSizeMB * 1024 * 1024) {\n toast.error(`File \"${file.name}\" exceeds the maximum size of ${maxSizeMB}MB`);\n continue;\n }\n validFiles.push(file);\n newPreviews.push(URL.createObjectURL(file));\n }\n\n if (validFiles.length === 0) {\n e.target.value = '';\n return;\n }\n\n if (multiple) {\n setInternalPreviews((prev) => [...prev, ...newPreviews]);\n const currentFiles = Array.isArray(value) ? value : [];\n const updatedFiles = [...currentFiles, ...validFiles];\n (onChange as (files: File[] | null) => void)?.(updatedFiles);\n } else {\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews(newPreviews);\n (onChange as (file: File | null) => void)?.(validFiles[0]);\n }\n\n e.target.value = '';\n };\n\n const handleRemove = (index: number) => {\n if (isReadOnly) return;\n\n const isExisting = index < existingFiles.length;\n if (isExisting) {\n onDelete?.(index);\n return;\n }\n\n const currentFileIndex = index - existingFiles.length;\n\n if (multiple) {\n const currentFiles = Array.isArray(value) ? [...value] : [];\n currentFiles.splice(currentFileIndex, 1);\n (onChange as (files: File[] | null) => void)?.(currentFiles.length > 0 ? currentFiles : null);\n\n const currentPreviews = [...internalPreviews];\n if (currentPreviews[currentFileIndex]?.startsWith('blob:')) {\n URL.revokeObjectURL(currentPreviews[currentFileIndex]);\n }\n currentPreviews.splice(currentFileIndex, 1);\n setInternalPreviews(currentPreviews);\n } else {\n (onChange as (file: File | null) => void)?.(null);\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews([]);\n }\n onDelete?.(index);\n };\n\n const renderFileRow = (file: File | string, index: number) => {\n const isExisting = index < existingFiles.length;\n const fileName = typeof file === 'string'\n ? (Array.isArray(existingFileName) ? existingFileName[index] : existingFileName) || 'Uploaded Document'\n : file.name;\n\n const currentFileIndex = index - existingFiles.length;\n const fileUrl = typeof file === 'string'\n ? file\n : internalPreviews[currentFileIndex] || (Array.isArray(previewUrls) ? previewUrls[currentFileIndex] : previewUrl);\n\n const isPdf = fileName.toLowerCase().endsWith('.pdf') || (typeof file !== 'string' && file.type === 'application/pdf');\n const isImage = uploadType === 'image' || fileName.toLowerCase().match(/\\.(jpg|jpeg|png|gif|webp)$/i);\n\n return (\n <div className=\"fuf-preview-item\" key={`${fileName}-${index}`}>\n <div className=\"fuf-file-info\">\n {isImage && fileUrl ? (\n <img className=\"fuf-thumbnail\" src={fileUrl} alt={fileName} />\n ) : isPdf ? (\n <i className=\"ti ti-file-type-pdf fuf-file-icon pdf\"></i>\n ) : (\n <i className=\"ti ti-file fuf-file-icon general\"></i>\n )}\n <span className=\"fuf-file-name\" title={fileName}>\n {fileName}\n </span>\n </div>\n <div className=\"fuf-actions\">\n {(isPdf || isImage) && fileUrl && (\n <button\n type=\"button\"\n className=\"fuf-action-btn view\"\n onClick={() => window.open(fileUrl, '_blank')}\n title=\"View\"\n >\n <i className=\"ti ti-eye\"></i>\n </button>\n )}\n {!isReadOnly && (\n <button\n type=\"button\"\n className=\"fuf-action-btn remove\"\n onClick={() => handleRemove(index)}\n title=\"Remove\"\n >\n <i className=\"ti ti-x\"></i>\n </button>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div className={`fuf-root ${className}`} style={{ ...handleSx(sx), ...style }}>\n {label && (\n <label className={`fuf-label ${error ? 'error' : ''}`}>\n {label} {required && <span className=\"fuf-required\">*</span>}\n </label>\n )}\n\n {(!filesToRender.length || multiple) && !isReadOnly && (\n <div\n className={`fuf-dropzone ${error ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <i className=\"ti ti-upload fuf-upload-icon\"></i>\n <span className=\"fuf-upload-text\">\n {disabled ? 'Upload disabled' : 'Click to upload'}\n </span>\n <span className=\"fuf-format-text\">\n (Supported formats: {accept.replace(/\\./g, '').toUpperCase()})\n </span>\n <input\n type=\"file\"\n className=\"fuf-hidden-input\"\n ref={inputRef}\n onChange={handleFileChange}\n accept={accept}\n disabled={disabled}\n multiple={multiple}\n />\n </div>\n )}\n\n {filesToRender.length > 0 && (\n <div className=\"fuf-preview-list\">\n {filesToRender.map((file, idx) => renderFileRow(file, idx))}\n </div>\n )}\n\n {error && (\n <span className=\"fuf-error-message\">\n {error}\n </span>\n )}\n </div>\n </>\n );\n});\n\nFileUploadField.displayName = 'FileUploadField';\n"]}
1
+ {"version":3,"sources":["../src/components/FileUploadField/FileUploadField.tsx"],"names":["STYLES","FileUploadField","forwardRef","props","ref","label","required","error","accept","maxSizeMB","disabled","uploadType","multiple","value","onChange","onDelete","previewUrl","previewUrls","existingFileUrl","existingFileName","editMode","viewMode","className","style","sx","useEffect","cdnId","link","existingFiles","currentFiles","filesToRender","isReadOnly","inputRef","useRef","useImperativeHandle","internalPreviews","setInternalPreviews","useState","url","handleFileChange","files","fileList","validFiles","newPreviews","file","toast","prev","updatedFiles","handleRemove","index","currentFileIndex","currentPreviews","renderFileRow","fileName","fileUrl","isPdf","isImage","jsxs","jsx","Fragment","handleSx","idx"],"mappings":"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","file":"chunk-5D4JO44P.mjs","sourcesContent":["'use client';\n\nimport React, { forwardRef, useImperativeHandle, useRef, useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport { handleSx } from '../../utils/handleSx';\nimport { FileUploadFieldProps } from './FileUploadField.types';\n\nconst STYLES = `\n .fuf-root {\n display: flex;\n flex-direction: column;\n gap: 8px;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n width: 100%;\n }\n\n .fuf-label {\n font-size: 14px;\n font-weight: 500;\n color: #64748b;\n margin-bottom: 4px;\n }\n\n .fuf-label.error {\n color: #ef4444;\n }\n\n .fuf-required {\n color: #ef4444;\n margin-left: 2px;\n }\n\n .fuf-dropzone {\n border: 2px dashed #cbd5e1;\n border-radius: 12px;\n padding: 32px;\n text-align: center;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n background: #f8fafc;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .fuf-dropzone:hover {\n border-color: #3b82f6;\n background: #eff6ff;\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n }\n\n .fuf-dropzone.error {\n border-color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-dropzone.error:hover {\n border-color: #dc2626;\n }\n\n .fuf-dropzone.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .fuf-dropzone.disabled:hover {\n transform: none;\n box-shadow: none;\n border-color: #cbd5e1;\n background: #f8fafc;\n }\n\n .fuf-upload-icon {\n color: #3b82f6;\n font-size: 48px;\n margin-bottom: 8px;\n display: block;\n }\n\n .fuf-dropzone.error .fuf-upload-icon {\n color: #ef4444;\n }\n\n .fuf-upload-text {\n font-size: 16px;\n font-weight: 500;\n color: #334155;\n }\n\n .fuf-format-text {\n font-size: 12px;\n color: #94a3b8;\n }\n\n .fuf-preview-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n }\n\n .fuf-preview-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n background: white;\n border: 1px solid #e2e8f0;\n border-radius: 12px;\n box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);\n transition: all 0.2s ease;\n }\n\n .fuf-preview-item:hover {\n border-color: #cbd5e1;\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n }\n\n .fuf-file-info {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n\n .fuf-thumbnail {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 8px;\n border: 1px solid #f1f5f9;\n }\n\n .fuf-file-icon {\n font-size: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .fuf-file-icon.pdf {\n color: #ef4444;\n }\n\n .fuf-file-icon.general {\n color: #3b82f6;\n }\n\n .fuf-file-name {\n font-size: 14px;\n color: #1e293b;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n }\n\n .fuf-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .fuf-action-btn {\n padding: 8px;\n border-radius: 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n color: #64748b;\n }\n\n .fuf-action-btn i {\n font-size: 18px;\n }\n\n .fuf-action-btn.view:hover {\n color: #3b82f6;\n background: #eff6ff;\n }\n\n .fuf-action-btn.remove:hover {\n color: #ef4444;\n background: #fef2f2;\n }\n\n .fuf-error-message {\n font-size: 12px;\n color: #ef4444;\n margin-top: 4px;\n }\n\n .fuf-hidden-input {\n display: none;\n }\n`;\n\n/**\n * FileUploadField component for single or multiple file uploads with preview support.\n */\nexport const FileUploadField = forwardRef<HTMLInputElement, FileUploadFieldProps>((props, ref) => {\n const {\n label,\n required,\n error,\n accept = '.pdf,.doc,.docx',\n maxSizeMB = 10,\n disabled,\n uploadType,\n multiple,\n value,\n onChange,\n onDelete,\n previewUrl,\n previewUrls,\n existingFileUrl,\n existingFileName,\n editMode = true,\n viewMode = false,\n className = '',\n style,\n sx,\n } = props;\n\n // Inject Tabler Icons CDN if not present\n useEffect(() => {\n const cdnId = 'tabler-icons-cdn';\n if (!document.getElementById(cdnId)) {\n const link = document.createElement('link');\n link.id = cdnId;\n link.rel = 'stylesheet';\n link.href = 'https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/dist/tabler-icons.min.css';\n document.head.appendChild(link);\n }\n }, []);\n\n const existingFiles = Array.isArray(existingFileUrl)\n ? existingFileUrl\n : existingFileUrl ? [existingFileUrl] : [];\n\n const currentFiles = Array.isArray(value)\n ? value\n : value ? [value] : [];\n\n const filesToRender = [...existingFiles, ...currentFiles];\n const isReadOnly = disabled || viewMode || !editMode;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!);\n\n const [internalPreviews, setInternalPreviews] = useState<string[]>([]);\n\n // Cleanup object URLs on unmount\n useEffect(() => {\n return () => {\n internalPreviews.forEach((url) => {\n if (url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n });\n };\n }, [internalPreviews]);\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly) return;\n const files = e.target.files;\n if (!files || files.length === 0) return;\n\n const fileList = Array.from(files);\n const validFiles: File[] = [];\n const newPreviews: string[] = [];\n\n for (const file of fileList) {\n if (file.size > maxSizeMB * 1024 * 1024) {\n toast.error(`File \"${file.name}\" exceeds the maximum size of ${maxSizeMB}MB`);\n continue;\n }\n validFiles.push(file);\n newPreviews.push(URL.createObjectURL(file));\n }\n\n if (validFiles.length === 0) {\n e.target.value = '';\n return;\n }\n\n if (multiple) {\n setInternalPreviews((prev) => [...prev, ...newPreviews]);\n const currentFiles = Array.isArray(value) ? value : [];\n const updatedFiles = [...currentFiles, ...validFiles];\n (onChange as (files: File[] | null) => void)?.(updatedFiles);\n } else {\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews(newPreviews);\n (onChange as (file: File | null) => void)?.(validFiles[0]);\n }\n\n e.target.value = '';\n };\n\n const handleRemove = (index: number) => {\n if (isReadOnly) return;\n\n const isExisting = index < existingFiles.length;\n if (isExisting) {\n onDelete?.(index);\n return;\n }\n\n const currentFileIndex = index - existingFiles.length;\n\n if (multiple) {\n const currentFiles = Array.isArray(value) ? [...value] : [];\n currentFiles.splice(currentFileIndex, 1);\n (onChange as (files: File[] | null) => void)?.(currentFiles.length > 0 ? currentFiles : null);\n\n const currentPreviews = [...internalPreviews];\n if (currentPreviews[currentFileIndex]?.startsWith('blob:')) {\n URL.revokeObjectURL(currentPreviews[currentFileIndex]);\n }\n currentPreviews.splice(currentFileIndex, 1);\n setInternalPreviews(currentPreviews);\n } else {\n (onChange as (file: File | null) => void)?.(null);\n if (internalPreviews[0]?.startsWith('blob:')) {\n URL.revokeObjectURL(internalPreviews[0]);\n }\n setInternalPreviews([]);\n }\n onDelete?.(index);\n };\n\n const renderFileRow = (file: File | string, index: number) => {\n const isExisting = index < existingFiles.length;\n const fileName = typeof file === 'string'\n ? (Array.isArray(existingFileName) ? existingFileName[index] : existingFileName) || 'Uploaded Document'\n : file.name;\n\n const currentFileIndex = index - existingFiles.length;\n const fileUrl = typeof file === 'string'\n ? file\n : internalPreviews[currentFileIndex] || (Array.isArray(previewUrls) ? previewUrls[currentFileIndex] : previewUrl);\n\n const isPdf = fileName.toLowerCase().endsWith('.pdf') || (typeof file !== 'string' && file.type === 'application/pdf');\n const isImage = uploadType === 'image' || fileName.toLowerCase().match(/\\.(jpg|jpeg|png|gif|webp)$/i);\n\n return (\n <div className=\"fuf-preview-item\" key={`${fileName}-${index}`}>\n <div className=\"fuf-file-info\">\n {isImage && fileUrl ? (\n <img className=\"fuf-thumbnail\" src={fileUrl} alt={fileName} />\n ) : isPdf ? (\n <i className=\"ti ti-file-type-pdf fuf-file-icon pdf\"></i>\n ) : (\n <i className=\"ti ti-file fuf-file-icon general\"></i>\n )}\n <span className=\"fuf-file-name\" title={fileName}>\n {fileName}\n </span>\n </div>\n <div className=\"fuf-actions\">\n {(isPdf || isImage) && fileUrl && (\n <button\n type=\"button\"\n className=\"fuf-action-btn view\"\n onClick={() => window.open(fileUrl, '_blank')}\n title=\"View\"\n >\n <i className=\"ti ti-eye\"></i>\n </button>\n )}\n {!isReadOnly && (\n <button\n type=\"button\"\n className=\"fuf-action-btn remove\"\n onClick={() => handleRemove(index)}\n title=\"Remove\"\n >\n <i className=\"ti ti-x\"></i>\n </button>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div className={`fuf-root ${className}`} style={{ ...handleSx(sx), ...style }}>\n {label && (\n <label className={`fuf-label ${error ? 'error' : ''}`}>\n {label} {required && <span className=\"fuf-required\">*</span>}\n </label>\n )}\n\n {(!filesToRender.length || multiple) && !isReadOnly && (\n <div\n className={`fuf-dropzone ${error ? 'error' : ''} ${disabled ? 'disabled' : ''}`}\n onClick={() => !disabled && inputRef.current?.click()}\n >\n <i className=\"ti ti-upload fuf-upload-icon\"></i>\n <span className=\"fuf-upload-text\">\n {disabled ? 'Upload disabled' : 'Click to upload'}\n </span>\n <span className=\"fuf-format-text\">\n (Supported formats: {accept.replace(/\\./g, '').toUpperCase()})\n </span>\n <input\n type=\"file\"\n className=\"fuf-hidden-input\"\n ref={inputRef}\n onChange={handleFileChange}\n accept={accept}\n disabled={disabled}\n multiple={multiple}\n />\n </div>\n )}\n\n {filesToRender.length > 0 && (\n <div className=\"fuf-preview-list\">\n {filesToRender.map((file, idx) => renderFileRow(file, idx))}\n </div>\n )}\n\n {error && (\n <span className=\"fuf-error-message\">\n {error}\n </span>\n )}\n </div>\n </>\n );\n});\n\nFileUploadField.displayName = 'FileUploadField';\n"]}
@@ -0,0 +1,2 @@
1
+ var u=t=>{let n=t.replace("#",""),o=n.length===3?n.split("").map(m=>m+m).join(""):n,f=parseInt(o,16),c=f>>16&255,g=f>>8&255,l=f&255;return `${c}, ${g}, ${l}`},h=(t,n)=>`rgba(${u(t)}, ${n})`,r=(t,n,o=195)=>`linear-gradient(${o}deg, ${t}, ${n})`,i=(t,n=16)=>`${t/n}rem`,e=(t,n,o,f,c,g=1,l=false)=>`${l?"inset ":""}${i(t)} ${i(n)} ${i(o)} ${i(f)} ${h(c,g)}`,d={xs:0,sm:576,md:768,lg:992,xl:1200,xxl:1400},s=["xs","sm","md","lg","xl","xxl"],b=t=>`@media (min-width: ${d[t]}px)`,$=t=>{let n=s.indexOf(t),o=n<s.length-1?d[s[n+1]]:null;return o===null?b("xs"):`@media (max-width: ${o-.02}px)`},p=(t,n)=>{let o=s.indexOf(n),f=o<s.length-1?d[s[o+1]]:null;return f===null?b(t):`@media (min-width: ${d[t]}px) and (max-width: ${f-.02}px)`},F=t=>p(t,t),x={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},y={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195},k=(t="all",n={})=>{let{duration:o=y.standard,easing:f=x.easeInOut,delay:c=0}=n;return (Array.isArray(t)?t:[t]).map(l=>`${l} ${o}ms ${f} ${c}ms`).join(", ")},A=8,S=t=>`${A*t}px`,a='"Roboto", "Helvetica", "Arial", sans-serif',E={palette:{mode:"light",common:{black:"#000000",white:"#ffffff"},primary:{main:"#1A73E8",light:"#49a3f1",dark:"#1266D8",contrastText:"#ffffff",focus:"#1A73E8"},secondary:{main:"#7b809a",light:"#8f93a9",dark:"#6b6f82",contrastText:"#ffffff",focus:"#7b809a"},error:{main:"#F44335",light:"#f65f53",dark:"#d32f2f",contrastText:"#ffffff",focus:"#F44335"},warning:{main:"#fb8c00",light:"#fca130",dark:"#e67c00",contrastText:"#ffffff",focus:"#fb8c00"},info:{main:"#1A73E8",light:"#49a3f1",dark:"#1266D8",contrastText:"#ffffff",focus:"#1A73E8"},success:{main:"#4CAF50",light:"#6fbf73",dark:"#388e3c",contrastText:"#ffffff",focus:"#4CAF50"},dark:{main:"#344767",light:"#485b75",dark:"#2c3c58",contrastText:"#ffffff",focus:"#344767"},white:{main:"#ffffff",light:"#ffffff",dark:"#f0f0f0",contrastText:"#344767",focus:"#ffffff"},grey:{100:"#f8f9fa",200:"#f0f2f5",300:"#dee2e6",400:"#ced4da",500:"#adb5bd",600:"#6c757d",700:"#495057",800:"#343a40",900:"#212529"},text:{primary:"#344767",secondary:"#7b809a",disabled:"#adb5bd"},background:{default:"#f0f2f5",paper:"#ffffff",card:"#ffffff"},divider:"#dee2e6",action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},gradients:{primary:{main:r("#49a3f1","#1A73E8"),state:r("#1A73E8","#1266D8")},secondary:{main:r("#747b8a","#495361"),state:r("#495361","#3b4250")},info:{main:r("#49a3f1","#1A73E8"),state:r("#1A73E8","#1266D8")},success:{main:r("#66BB6A","#43A047"),state:r("#43A047","#388e3c")},warning:{main:r("#FFA726","#FB8C00"),state:r("#FB8C00","#e67c00")},error:{main:r("#EF5350","#E53935"),state:r("#E53935","#d32f2f")},dark:{main:r("#42424a","#191919"),state:r("#191919","#0d0d0d")},light:{main:r("#EBEFF4","#CED4DA"),state:r("#CED4DA","#b0b7bf")}},typography:{fontFamily:a,fontSize:14,fontWeightLight:300,fontWeightRegular:400,fontWeightMedium:500,fontWeightBold:700,h1:{fontFamily:a,fontSize:i(48),fontWeight:700,lineHeight:1.25,letterSpacing:"-0.015em"},h2:{fontFamily:a,fontSize:i(36),fontWeight:700,lineHeight:1.3,letterSpacing:"-0.0125em"},h3:{fontFamily:a,fontSize:i(30),fontWeight:700,lineHeight:1.375,letterSpacing:"-0.01em"},h4:{fontFamily:a,fontSize:i(24),fontWeight:700,lineHeight:1.375},h5:{fontFamily:a,fontSize:i(20),fontWeight:600,lineHeight:1.375},h6:{fontFamily:a,fontSize:i(16),fontWeight:600,lineHeight:1.625},subtitle1:{fontFamily:a,fontSize:i(16),fontWeight:400,lineHeight:1.75},subtitle2:{fontFamily:a,fontSize:i(14),fontWeight:500,lineHeight:1.57},body1:{fontFamily:a,fontSize:i(16),fontWeight:400,lineHeight:1.5},body2:{fontFamily:a,fontSize:i(14),fontWeight:400,lineHeight:1.43},button:{fontFamily:a,fontSize:i(14),fontWeight:700,lineHeight:1.5,textTransform:"uppercase"},caption:{fontFamily:a,fontSize:i(12),fontWeight:400,lineHeight:1.25},overline:{fontFamily:a,fontSize:i(12),fontWeight:400,lineHeight:2.66,textTransform:"uppercase",letterSpacing:"0.083em"}},borders:{borderColor:"#dee2e6",borderWidth:{0:"0px",1:"1px",2:"2px",3:"3px",4:"4px",5:"5px"},borderRadius:{xs:"0.125rem",sm:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem",xxl:"1rem",section:"10rem"}},shadows:{xs:e(0,2,9,-5,"#000000",.15),sm:e(0,5,10,0,"#000000",.12),md:`${e(0,4,6,-1,"#000000",.1)}, ${e(0,2,4,-1,"#000000",.06)}`,lg:`${e(0,10,15,-3,"#000000",.1)}, ${e(0,4,6,-2,"#000000",.05)}`,xl:`${e(0,20,25,-5,"#000000",.1)}, ${e(0,10,10,-5,"#000000",.04)}`,xxl:e(0,20,27,0,"#000000",.05),inset:`${e(0,1,2,0,"#000000",.075,true)}, ${e(0,1,3,0,"#000000",.06,true)}`,none:"none",colored:{primary:`${e(0,4,20,0,"#1A73E8",.15)}, ${e(0,7,10,-5,"#1A73E8",.4)}`,secondary:`${e(0,4,20,0,"#7b809a",.15)}, ${e(0,7,10,-5,"#7b809a",.4)}`,info:`${e(0,4,20,0,"#1A73E8",.15)}, ${e(0,7,10,-5,"#1A73E8",.4)}`,success:`${e(0,4,20,0,"#4CAF50",.15)}, ${e(0,7,10,-5,"#4CAF50",.4)}`,warning:`${e(0,4,20,0,"#fb8c00",.15)}, ${e(0,7,10,-5,"#fb8c00",.4)}`,error:`${e(0,4,20,0,"#F44335",.15)}, ${e(0,7,10,-5,"#F44335",.4)}`,dark:`${e(0,4,20,0,"#344767",.15)}, ${e(0,7,10,-5,"#344767",.4)}`,light:`${e(0,4,20,0,"#adb5bd",.15)}, ${e(0,7,10,-5,"#adb5bd",.4)}`}},functions:{linearGradient:r,pxToRem:i,boxShadow:e,hexToRgb:u,rgba:h},breakpoints:{values:d,up:b,down:$,between:p,only:F},spacing:S,shape:{borderRadius:8},zIndex:{mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},transitions:{easing:x,duration:y,create:k}};export{E as a};//# sourceMappingURL=chunk-5ZOZOY4J.mjs.map
2
+ //# sourceMappingURL=chunk-5ZOZOY4J.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeProvider/defaultTheme.ts"],"names":["hexToRgb","hex","sanitized","fullHex","c","bigint","r","b","rgba","opacity","linearGradient","color","colorState","angle","pxToRem","px","baseFontSize","boxShadow","offsetX","offsetY","blur","spread","inset","breakpointValues","breakpointKeys","breakpointUp","key","breakpointDown","idx","nextValue","breakpointBetween","start","end","endIdx","breakpointOnly","transitionEasing","transitionDuration","createTransition","props","options","duration","easing","delay","p","BASE_SPACING","spacing","factor","FONT_FAMILY","defaultTheme"],"mappings":"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","file":"chunk-5ZOZOY4J.mjs","sourcesContent":["import type { Theme, BreakpointKey } from './ThemeProvider.types';\n\n// ─── Helper Functions ────────────────────────────────────────────────────────\n\n/**\n * Converts a hex color string to an RGB triplet string.\n * Supports both shorthand (#abc) and full (#aabbcc) hex formats.\n */\nconst hexToRgb = (hex: string): string => {\n const sanitized = hex.replace('#', '');\n const fullHex =\n sanitized.length === 3\n ? sanitized\n .split('')\n .map((c) => c + c)\n .join('')\n : sanitized;\n\n const bigint = parseInt(fullHex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n\n return `${r}, ${g}, ${b}`;\n};\n\n/**\n * Creates an rgba() CSS color value from a hex color and opacity.\n */\nconst rgba = (hex: string, opacity: number): string => {\n return `rgba(${hexToRgb(hex)}, ${opacity})`;\n};\n\n/**\n * Creates a CSS linear-gradient string.\n * @param color - Start color.\n * @param colorState - End color.\n * @param angle - Gradient angle in degrees. Defaults to 195.\n */\nconst linearGradient = (color: string, colorState: string, angle: number = 195): string => {\n return `linear-gradient(${angle}deg, ${color}, ${colorState})`;\n};\n\n/**\n * Converts a pixel value to rem units.\n * @param px - Pixel value.\n * @param baseFontSize - Base font-size. Defaults to 16.\n */\nconst pxToRem = (px: number, baseFontSize: number = 16): string => {\n return `${px / baseFontSize}rem`;\n};\n\n/**\n * Creates a CSS box-shadow string.\n */\nconst boxShadow = (\n offsetX: number,\n offsetY: number,\n blur: number,\n spread: number,\n color: string,\n opacity: number = 1,\n inset: boolean = false\n): string => {\n const insetStr = inset ? 'inset ' : '';\n return `${insetStr}${pxToRem(offsetX)} ${pxToRem(offsetY)} ${pxToRem(blur)} ${pxToRem(spread)} ${rgba(color, opacity)}`;\n};\n\n// ─── Breakpoint Helpers ──────────────────────────────────────────────────────\n\nconst breakpointValues: Record<BreakpointKey, number> = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400,\n};\n\nconst breakpointKeys: BreakpointKey[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\n\nconst breakpointUp = (key: BreakpointKey): string => {\n return `@media (min-width: ${breakpointValues[key]}px)`;\n};\n\nconst breakpointDown = (key: BreakpointKey): string => {\n const idx = breakpointKeys.indexOf(key);\n const nextValue = idx < breakpointKeys.length - 1 ? breakpointValues[breakpointKeys[idx + 1]] : null;\n if (nextValue === null) {\n return breakpointUp('xs'); // xxl down = everything\n }\n return `@media (max-width: ${nextValue - 0.02}px)`;\n};\n\nconst breakpointBetween = (start: BreakpointKey, end: BreakpointKey): string => {\n const endIdx = breakpointKeys.indexOf(end);\n const nextValue = endIdx < breakpointKeys.length - 1 ? breakpointValues[breakpointKeys[endIdx + 1]] : null;\n if (nextValue === null) {\n return breakpointUp(start);\n }\n return `@media (min-width: ${breakpointValues[start]}px) and (max-width: ${nextValue - 0.02}px)`;\n};\n\nconst breakpointOnly = (key: BreakpointKey): string => {\n return breakpointBetween(key, key);\n};\n\n// ─── Transition Helper ───────────────────────────────────────────────────────\n\nconst transitionEasing = {\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)',\n};\n\nconst transitionDuration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n standard: 300,\n complex: 375,\n enteringScreen: 225,\n leavingScreen: 195,\n};\n\nconst createTransition = (\n props: string | string[] = 'all',\n options: { duration?: number; easing?: string; delay?: number } = {}\n): string => {\n const {\n duration = transitionDuration.standard,\n easing = transitionEasing.easeInOut,\n delay = 0,\n } = options;\n\n const properties = Array.isArray(props) ? props : [props];\n return properties.map((p) => `${p} ${duration}ms ${easing} ${delay}ms`).join(', ');\n};\n\n// ─── Spacing Helper ──────────────────────────────────────────────────────────\n\nconst BASE_SPACING = 8;\n\nconst spacing = (factor: number): string => {\n return `${BASE_SPACING * factor}px`;\n};\n\n// ─── Font Family ─────────────────────────────────────────────────────────────\n\nconst FONT_FAMILY = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n// ─── Default Theme ───────────────────────────────────────────────────────────\n\nexport const defaultTheme: Theme = {\n // ── Palette ──────────────────────────────────────────────────────────────\n palette: {\n mode: 'light',\n\n common: {\n black: '#000000',\n white: '#ffffff',\n },\n\n primary: {\n main: '#1A73E8',\n light: '#49a3f1',\n dark: '#1266D8',\n contrastText: '#ffffff',\n focus: '#1A73E8',\n },\n\n secondary: {\n main: '#7b809a',\n light: '#8f93a9',\n dark: '#6b6f82',\n contrastText: '#ffffff',\n focus: '#7b809a',\n },\n\n error: {\n main: '#F44335',\n light: '#f65f53',\n dark: '#d32f2f',\n contrastText: '#ffffff',\n focus: '#F44335',\n },\n\n warning: {\n main: '#fb8c00',\n light: '#fca130',\n dark: '#e67c00',\n contrastText: '#ffffff',\n focus: '#fb8c00',\n },\n\n info: {\n main: '#1A73E8',\n light: '#49a3f1',\n dark: '#1266D8',\n contrastText: '#ffffff',\n focus: '#1A73E8',\n },\n\n success: {\n main: '#4CAF50',\n light: '#6fbf73',\n dark: '#388e3c',\n contrastText: '#ffffff',\n focus: '#4CAF50',\n },\n\n dark: {\n main: '#344767',\n light: '#485b75',\n dark: '#2c3c58',\n contrastText: '#ffffff',\n focus: '#344767',\n },\n\n white: {\n main: '#ffffff',\n light: '#ffffff',\n dark: '#f0f0f0',\n contrastText: '#344767',\n focus: '#ffffff',\n },\n\n grey: {\n 100: '#f8f9fa',\n 200: '#f0f2f5',\n 300: '#dee2e6',\n 400: '#ced4da',\n 500: '#adb5bd',\n 600: '#6c757d',\n 700: '#495057',\n 800: '#343a40',\n 900: '#212529',\n },\n\n text: {\n primary: '#344767',\n secondary: '#7b809a',\n disabled: '#adb5bd',\n },\n\n background: {\n default: '#f0f2f5',\n paper: '#ffffff',\n card: '#ffffff',\n },\n\n divider: '#dee2e6',\n\n action: {\n active: 'rgba(0, 0, 0, 0.54)',\n hover: 'rgba(0, 0, 0, 0.04)',\n hoverOpacity: 0.04,\n selected: 'rgba(0, 0, 0, 0.08)',\n selectedOpacity: 0.08,\n disabled: 'rgba(0, 0, 0, 0.26)',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n disabledOpacity: 0.38,\n focus: 'rgba(0, 0, 0, 0.12)',\n focusOpacity: 0.12,\n activatedOpacity: 0.12,\n },\n },\n\n // ── Gradients ────────────────────────────────────────────────────────────\n gradients: {\n primary: {\n main: linearGradient('#49a3f1', '#1A73E8'),\n state: linearGradient('#1A73E8', '#1266D8'),\n },\n\n secondary: {\n main: linearGradient('#747b8a', '#495361'),\n state: linearGradient('#495361', '#3b4250'),\n },\n\n info: {\n main: linearGradient('#49a3f1', '#1A73E8'),\n state: linearGradient('#1A73E8', '#1266D8'),\n },\n\n success: {\n main: linearGradient('#66BB6A', '#43A047'),\n state: linearGradient('#43A047', '#388e3c'),\n },\n\n warning: {\n main: linearGradient('#FFA726', '#FB8C00'),\n state: linearGradient('#FB8C00', '#e67c00'),\n },\n\n error: {\n main: linearGradient('#EF5350', '#E53935'),\n state: linearGradient('#E53935', '#d32f2f'),\n },\n\n dark: {\n main: linearGradient('#42424a', '#191919'),\n state: linearGradient('#191919', '#0d0d0d'),\n },\n\n light: {\n main: linearGradient('#EBEFF4', '#CED4DA'),\n state: linearGradient('#CED4DA', '#b0b7bf'),\n },\n },\n\n // ── Typography ───────────────────────────────────────────────────────────\n typography: {\n fontFamily: FONT_FAMILY,\n fontSize: 14,\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 700,\n\n h1: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(48),\n fontWeight: 700,\n lineHeight: 1.25,\n letterSpacing: '-0.015em',\n },\n\n h2: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(36),\n fontWeight: 700,\n lineHeight: 1.3,\n letterSpacing: '-0.0125em',\n },\n\n h3: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(30),\n fontWeight: 700,\n lineHeight: 1.375,\n letterSpacing: '-0.01em',\n },\n\n h4: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(24),\n fontWeight: 700,\n lineHeight: 1.375,\n },\n\n h5: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(20),\n fontWeight: 600,\n lineHeight: 1.375,\n },\n\n h6: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(16),\n fontWeight: 600,\n lineHeight: 1.625,\n },\n\n subtitle1: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(16),\n fontWeight: 400,\n lineHeight: 1.75,\n },\n\n subtitle2: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(14),\n fontWeight: 500,\n lineHeight: 1.57,\n },\n\n body1: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(16),\n fontWeight: 400,\n lineHeight: 1.5,\n },\n\n body2: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(14),\n fontWeight: 400,\n lineHeight: 1.43,\n },\n\n button: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(14),\n fontWeight: 700,\n lineHeight: 1.5,\n textTransform: 'uppercase',\n },\n\n caption: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(12),\n fontWeight: 400,\n lineHeight: 1.25,\n },\n\n overline: {\n fontFamily: FONT_FAMILY,\n fontSize: pxToRem(12),\n fontWeight: 400,\n lineHeight: 2.66,\n textTransform: 'uppercase',\n letterSpacing: '0.083em',\n },\n },\n\n // ── Borders ──────────────────────────────────────────────────────────────\n borders: {\n borderColor: '#dee2e6',\n\n borderWidth: {\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 3: '3px',\n 4: '4px',\n 5: '5px',\n },\n\n borderRadius: {\n xs: '0.125rem',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n xxl: '1rem',\n section: '10rem',\n },\n },\n\n // ── Shadows ──────────────────────────────────────────────────────────────\n shadows: {\n xs: boxShadow(0, 2, 9, -5, '#000000', 0.15),\n sm: boxShadow(0, 5, 10, 0, '#000000', 0.12),\n md: `${boxShadow(0, 4, 6, -1, '#000000', 0.1)}, ${boxShadow(0, 2, 4, -1, '#000000', 0.06)}`,\n lg: `${boxShadow(0, 10, 15, -3, '#000000', 0.1)}, ${boxShadow(0, 4, 6, -2, '#000000', 0.05)}`,\n xl: `${boxShadow(0, 20, 25, -5, '#000000', 0.1)}, ${boxShadow(0, 10, 10, -5, '#000000', 0.04)}`,\n xxl: boxShadow(0, 20, 27, 0, '#000000', 0.05),\n inset: `${boxShadow(0, 1, 2, 0, '#000000', 0.075, true)}, ${boxShadow(0, 1, 3, 0, '#000000', 0.06, true)}`,\n none: 'none',\n\n colored: {\n primary: `${boxShadow(0, 4, 20, 0, '#1A73E8', 0.15)}, ${boxShadow(0, 7, 10, -5, '#1A73E8', 0.4)}`,\n secondary: `${boxShadow(0, 4, 20, 0, '#7b809a', 0.15)}, ${boxShadow(0, 7, 10, -5, '#7b809a', 0.4)}`,\n info: `${boxShadow(0, 4, 20, 0, '#1A73E8', 0.15)}, ${boxShadow(0, 7, 10, -5, '#1A73E8', 0.4)}`,\n success: `${boxShadow(0, 4, 20, 0, '#4CAF50', 0.15)}, ${boxShadow(0, 7, 10, -5, '#4CAF50', 0.4)}`,\n warning: `${boxShadow(0, 4, 20, 0, '#fb8c00', 0.15)}, ${boxShadow(0, 7, 10, -5, '#fb8c00', 0.4)}`,\n error: `${boxShadow(0, 4, 20, 0, '#F44335', 0.15)}, ${boxShadow(0, 7, 10, -5, '#F44335', 0.4)}`,\n dark: `${boxShadow(0, 4, 20, 0, '#344767', 0.15)}, ${boxShadow(0, 7, 10, -5, '#344767', 0.4)}`,\n light: `${boxShadow(0, 4, 20, 0, '#adb5bd', 0.15)}, ${boxShadow(0, 7, 10, -5, '#adb5bd', 0.4)}`,\n },\n },\n\n // ── Functions ────────────────────────────────────────────────────────────\n functions: {\n linearGradient,\n pxToRem,\n boxShadow,\n hexToRgb,\n rgba,\n },\n\n // ── Breakpoints ──────────────────────────────────────────────────────────\n breakpoints: {\n values: breakpointValues,\n up: breakpointUp,\n down: breakpointDown,\n between: breakpointBetween,\n only: breakpointOnly,\n },\n\n // ── Spacing ──────────────────────────────────────────────────────────────\n spacing,\n\n // ── Shape ────────────────────────────────────────────────────────────────\n shape: {\n borderRadius: 8,\n },\n\n // ── zIndex ───────────────────────────────────────────────────────────────\n zIndex: {\n mobileStepper: 1000,\n fab: 1050,\n speedDial: 1050,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500,\n },\n\n // ── Transitions ──────────────────────────────────────────────────────────\n transitions: {\n easing: transitionEasing,\n duration: transitionDuration,\n create: createTransition,\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-HGGQFNUJ.mjs';import {a as a$1}from'./chunk-547MQ4FI.mjs';import y from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var u={xs:0,sm:600,md:900,lg:1200,xl:1536},S=()=>{let t=`
1
+ import {a}from'./chunk-MAXZQTTY.mjs';import {a as a$1}from'./chunk-547MQ4FI.mjs';import y from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var u={xs:0,sm:600,md:900,lg:1200,xl:1536},S=()=>{let t=`
2
2
  .ui-grid-container {
3
3
  display: flex;
4
4
  flex-wrap: wrap;
@@ -36,5 +36,5 @@ ${s}
36
36
  }
37
37
  `:t+=`
38
38
  ${s}
39
- `;}),t},b=S(),h=y.forwardRef(({children:t,className:d,container:e=false,spacing:o=0,direction:s="row",wrap:i="wrap",size:r,style:n,sx:g,...x},m)=>{let a$2=[];r!==void 0&&(typeof r=="number"||r==="auto"?a$2.push(`ui-grid-size-xs-${r}`):typeof r=="object"&&Object.entries(r).forEach(([$,p])=>{p!==void 0&&a$2.push(`ui-grid-size-${$}-${p}`);}));let w=e&&o?{gap:`${o*8}px`,"--ui-grid-gap":`${o*8}px`}:{};return jsxs(Fragment,{children:[e&&jsx("style",{dangerouslySetInnerHTML:{__html:b},suppressHydrationWarning:true}),jsx("div",{ref:m,className:a$1(e?"ui-grid-container":"ui-grid-item",e&&`ui-grid-direction-${s}`,e&&`ui-grid-wrap-${i}`,...a$2,d),style:{...w,...a(g),...n},...x,children:t})]})});h.displayName="Grid";export{h as a};//# sourceMappingURL=chunk-UCFS7EH2.mjs.map
40
- //# sourceMappingURL=chunk-UCFS7EH2.mjs.map
39
+ `;}),t},b=S(),h=y.forwardRef(({children:t,className:d,container:e=false,spacing:o=0,direction:s="row",wrap:i="wrap",size:r,style:n,sx:g,...x},m)=>{let a$2=[];r!==void 0&&(typeof r=="number"||r==="auto"?a$2.push(`ui-grid-size-xs-${r}`):typeof r=="object"&&Object.entries(r).forEach(([$,p])=>{p!==void 0&&a$2.push(`ui-grid-size-${$}-${p}`);}));let w=e&&o?{gap:`${o*8}px`,"--ui-grid-gap":`${o*8}px`}:{};return jsxs(Fragment,{children:[e&&jsx("style",{dangerouslySetInnerHTML:{__html:b},suppressHydrationWarning:true}),jsx("div",{ref:m,className:a$1(e?"ui-grid-container":"ui-grid-item",e&&`ui-grid-direction-${s}`,e&&`ui-grid-wrap-${i}`,...a$2,d),style:{...w,...a(g),...n},...x,children:t})]})});h.displayName="Grid";export{h as a};//# sourceMappingURL=chunk-6FBJ3S6V.mjs.map
40
+ //# sourceMappingURL=chunk-6FBJ3S6V.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Grid/Grid.tsx"],"names":["BREAKPOINTS","generateGridCSS","css","bp","minWidth","mediaQuery","bpCSS","percentage","gapOffset","GRID_STYLES","Grid","React","children","className","container","spacing","direction","wrap","size","style","sx","props","ref","sizeClasses","val","gapStyle","jsxs","Fragment","jsx","cn","handleSx"],"mappings":"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","file":"chunk-UCFS7EH2.mjs","sourcesContent":["'use client';\n\nimport React, { useEffect } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { GridProps } from './Grid.types';\n\n// Breakpoints matching standard MUI setups\nconst BREAKPOINTS = {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n};\n\n// CSS Generation for the 12-column grid system\nconst generateGridCSS = () => {\n let css = `\n .ui-grid-container {\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n width: 100%;\n }\n .ui-grid-item {\n box-sizing: border-box;\n margin: 0;\n }\n \n .ui-grid-direction-row { flex-direction: row; }\n .ui-grid-direction-row-reverse { flex-direction: row-reverse; }\n .ui-grid-direction-column { flex-direction: column; }\n .ui-grid-direction-column-reverse { flex-direction: column-reverse; }\n \n .ui-grid-wrap-nowrap { flex-wrap: nowrap; }\n .ui-grid-wrap-wrap { flex-wrap: wrap; }\n .ui-grid-wrap-wrap-reverse { flex-wrap: wrap-reverse; }\n `;\n\n // Generate responsive classes\n Object.keys(BREAKPOINTS).forEach((bp) => {\n const minWidth = BREAKPOINTS[bp as keyof typeof BREAKPOINTS];\n const mediaQuery = minWidth > 0 ? `@media (min-width: ${minWidth}px)` : '';\n\n let bpCSS = `\n .ui-grid-size-${bp}-auto {\n flex-grow: 1;\n max-width: 100%;\n flex-basis: 0;\n }\n `;\n\n for (let i = 1; i <= 12; i++) {\n const percentage = (i / 12) * 100;\n const gapOffset = (12 - i) / 12;\n bpCSS += `\n .ui-grid-size-${bp}-${i} {\n flex-grow: 0;\n max-width: calc(${percentage}% - var(--ui-grid-gap, 0px) * ${gapOffset});\n flex-basis: calc(${percentage}% - var(--ui-grid-gap, 0px) * ${gapOffset});\n }\n `;\n }\n\n if (mediaQuery) {\n css += `\\n${mediaQuery} {\\n${bpCSS}\\n}\\n`;\n } else {\n css += `\\n${bpCSS}\\n`;\n }\n });\n\n return css;\n};\n\nconst GRID_STYLES = generateGridCSS();\n\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n (\n {\n children,\n className,\n container = false,\n spacing = 0,\n direction = 'row',\n wrap = 'wrap',\n size,\n style,\n sx,\n ...props\n },\n ref\n ) => {\n // Generate classes based on size prop\n const sizeClasses: string[] = [];\n \n if (size !== undefined) {\n if (typeof size === 'number' || size === 'auto') {\n sizeClasses.push(`ui-grid-size-xs-${size}`);\n } else if (typeof size === 'object') {\n Object.entries(size).forEach(([bp, val]) => {\n if (val !== undefined) {\n sizeClasses.push(`ui-grid-size-${bp}-${val}`);\n }\n });\n }\n }\n\n // Handle gap for container\n const gapStyle = container && spacing ? { \n gap: `${spacing * 8}px`,\n '--ui-grid-gap': `${spacing * 8}px`\n } as React.CSSProperties : {};\n\n return (\n <>\n {/* Inject styles globally if it's a container. Browser will deduplicate multiple identical tags */}\n {container && (\n <style dangerouslySetInnerHTML={{ __html: GRID_STYLES }} suppressHydrationWarning />\n )}\n <div\n ref={ref}\n className={cn(\n container ? 'ui-grid-container' : 'ui-grid-item',\n container && `ui-grid-direction-${direction}`,\n container && `ui-grid-wrap-${wrap}`,\n ...sizeClasses,\n className\n )}\n style={{ ...gapStyle, ...handleSx(sx), ...style }}\n {...props}\n >\n {children}\n </div>\n </>\n );\n }\n);\n\nGrid.displayName = 'Grid';\n"]}
1
+ {"version":3,"sources":["../src/components/Grid/Grid.tsx"],"names":["BREAKPOINTS","generateGridCSS","css","bp","minWidth","mediaQuery","bpCSS","percentage","gapOffset","GRID_STYLES","Grid","React","children","className","container","spacing","direction","wrap","size","style","sx","props","ref","sizeClasses","val","gapStyle","jsxs","Fragment","jsx","cn","handleSx"],"mappings":"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","file":"chunk-6FBJ3S6V.mjs","sourcesContent":["'use client';\n\nimport React, { useEffect } from 'react';\nimport { cn } from '../../utils/cn';\nimport { handleSx } from '../../utils/handleSx';\nimport { GridProps } from './Grid.types';\n\n// Breakpoints matching standard MUI setups\nconst BREAKPOINTS = {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536,\n};\n\n// CSS Generation for the 12-column grid system\nconst generateGridCSS = () => {\n let css = `\n .ui-grid-container {\n display: flex;\n flex-wrap: wrap;\n box-sizing: border-box;\n width: 100%;\n }\n .ui-grid-item {\n box-sizing: border-box;\n margin: 0;\n }\n \n .ui-grid-direction-row { flex-direction: row; }\n .ui-grid-direction-row-reverse { flex-direction: row-reverse; }\n .ui-grid-direction-column { flex-direction: column; }\n .ui-grid-direction-column-reverse { flex-direction: column-reverse; }\n \n .ui-grid-wrap-nowrap { flex-wrap: nowrap; }\n .ui-grid-wrap-wrap { flex-wrap: wrap; }\n .ui-grid-wrap-wrap-reverse { flex-wrap: wrap-reverse; }\n `;\n\n // Generate responsive classes\n Object.keys(BREAKPOINTS).forEach((bp) => {\n const minWidth = BREAKPOINTS[bp as keyof typeof BREAKPOINTS];\n const mediaQuery = minWidth > 0 ? `@media (min-width: ${minWidth}px)` : '';\n\n let bpCSS = `\n .ui-grid-size-${bp}-auto {\n flex-grow: 1;\n max-width: 100%;\n flex-basis: 0;\n }\n `;\n\n for (let i = 1; i <= 12; i++) {\n const percentage = (i / 12) * 100;\n const gapOffset = (12 - i) / 12;\n bpCSS += `\n .ui-grid-size-${bp}-${i} {\n flex-grow: 0;\n max-width: calc(${percentage}% - var(--ui-grid-gap, 0px) * ${gapOffset});\n flex-basis: calc(${percentage}% - var(--ui-grid-gap, 0px) * ${gapOffset});\n }\n `;\n }\n\n if (mediaQuery) {\n css += `\\n${mediaQuery} {\\n${bpCSS}\\n}\\n`;\n } else {\n css += `\\n${bpCSS}\\n`;\n }\n });\n\n return css;\n};\n\nconst GRID_STYLES = generateGridCSS();\n\nexport const Grid = React.forwardRef<HTMLDivElement, GridProps>(\n (\n {\n children,\n className,\n container = false,\n spacing = 0,\n direction = 'row',\n wrap = 'wrap',\n size,\n style,\n sx,\n ...props\n },\n ref\n ) => {\n // Generate classes based on size prop\n const sizeClasses: string[] = [];\n \n if (size !== undefined) {\n if (typeof size === 'number' || size === 'auto') {\n sizeClasses.push(`ui-grid-size-xs-${size}`);\n } else if (typeof size === 'object') {\n Object.entries(size).forEach(([bp, val]) => {\n if (val !== undefined) {\n sizeClasses.push(`ui-grid-size-${bp}-${val}`);\n }\n });\n }\n }\n\n // Handle gap for container\n const gapStyle = container && spacing ? { \n gap: `${spacing * 8}px`,\n '--ui-grid-gap': `${spacing * 8}px`\n } as React.CSSProperties : {};\n\n return (\n <>\n {/* Inject styles globally if it's a container. Browser will deduplicate multiple identical tags */}\n {container && (\n <style dangerouslySetInnerHTML={{ __html: GRID_STYLES }} suppressHydrationWarning />\n )}\n <div\n ref={ref}\n className={cn(\n container ? 'ui-grid-container' : 'ui-grid-item',\n container && `ui-grid-direction-${direction}`,\n container && `ui-grid-wrap-${wrap}`,\n ...sizeClasses,\n className\n )}\n style={{ ...gapStyle, ...handleSx(sx), ...style }}\n {...props}\n >\n {children}\n </div>\n </>\n );\n }\n);\n\nGrid.displayName = 'Grid';\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkHAWHD2CS_js=require('./chunk-HAWHD2CS.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function i(e,a){let t={...e};for(let m of Object.keys(a)){let r=a[m],o=e[m];r!==void 0&&(r!==null&&typeof r=="object"&&!Array.isArray(r)&&typeof r!="function"&&o!==null&&typeof o=="object"&&!Array.isArray(o)&&typeof o!="function"?t[m]=i(o,r):t[m]=r);}return t}var s=react.createContext(chunkHAWHD2CS_js.a);s.displayName="ThemeContext";function d(e={}){return i(chunkHAWHD2CS_js.a,e)}function u({theme:e,children:a}){let t=react.useMemo(()=>e?i(chunkHAWHD2CS_js.a,e):chunkHAWHD2CS_js.a,[e]);return jsxRuntime.jsx(s.Provider,{value:t,children:a})}u.displayName="ThemeProvider";function P(){return react.useContext(s)}exports.a=d;exports.b=u;exports.c=P;//# sourceMappingURL=chunk-7FN45G2T.js.map
2
+ //# sourceMappingURL=chunk-7FN45G2T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeProvider/ThemeProvider.tsx"],"names":["deepMerge","target","source","output","key","sourceVal","targetVal","ThemeContext","createContext","defaultTheme","createTheme","overrides","ThemeProvider","theme","children","mergedTheme","useMemo","jsx","useTheme","useContext"],"mappings":"gIAcA,SAASA,CAAAA,CAAyCC,CAAAA,CAAWC,EAA2B,CACtF,IAAMC,CAAAA,CAAS,CAAE,GAAGF,CAAO,CAAA,CAE3B,IAAA,IAAWG,KAAO,MAAA,CAAO,IAAA,CAAKF,CAAM,CAAA,CAAqB,CACvD,IAAMG,CAAAA,CAAYH,CAAAA,CAAOE,CAAG,CAAA,CACtBE,CAAAA,CAAYL,CAAAA,CAAOG,CAAG,CAAA,CAExBC,CAAAA,GAAc,MAAA,GAKhBA,CAAAA,GAAc,MACd,OAAOA,CAAAA,EAAc,QAAA,EACrB,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAS,CAAA,EACxB,OAAOA,CAAAA,EAAc,UAAA,EACrBC,CAAAA,GAAc,IAAA,EACd,OAAOA,CAAAA,EAAc,QAAA,EACrB,CAAC,MAAM,OAAA,CAAQA,CAAS,CAAA,EACxB,OAAOA,GAAc,UAAA,CAEpBH,CAAAA,CAAeC,CAAG,CAAA,CAAIJ,EAAUM,CAAAA,CAAkBD,CAAgB,CAAA,CAElEF,CAAAA,CAAeC,CAAG,CAAA,CAAIC,CAAAA,EAE3B,CAEA,OAAOF,CACT,CAQA,IAAMI,CAAAA,CAAeC,mBAAAA,CAAqBC,kBAAY,CAAA,CAEtDF,CAAAA,CAAa,YAAc,cAAA,CAgBpB,SAASG,CAAAA,CAAYC,CAAAA,CAAgC,EAAC,CAAU,CACrE,OAAOX,EAAUS,kBAAAA,CAAcE,CAAS,CAC1C,CAuBO,SAASC,CAAAA,CAAc,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAAC,CAAS,CAAA,CAAqC,CACnF,IAAMC,CAAAA,CAAcC,aAAAA,CAAe,IAC5BH,CAAAA,CACEb,EAAUS,kBAAAA,CAAcI,CAA2B,CAAA,CADvCJ,kBAAAA,CAElB,CAACI,CAAK,CAAC,CAAA,CAEV,OACEI,cAAAA,CAACV,CAAAA,CAAa,QAAA,CAAb,CAAsB,KAAA,CAAOQ,CAAAA,CAC3B,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAEAF,CAAAA,CAAc,WAAA,CAAc,eAAA,CAmBrB,SAASM,CAAAA,EAAkB,CAChC,OAAOC,gBAAAA,CAAWZ,CAAY,CAChC","file":"chunk-7FN45G2T.js","sourcesContent":["'use client';\n\nimport { createContext, useContext, useMemo, ReactElement } from 'react';\nimport { defaultTheme } from './defaultTheme';\nimport type { Theme, DeepPartial, ThemeProviderProps } from './ThemeProvider.types';\n\n// ─── Deep Merge Utility ──────────────────────────────────────────────────────\n\n/**\n * Recursively deep-merges `source` into `target`.\n * - Functions are taken from source as-is (no merging into them).\n * - Arrays are replaced, not merged.\n * - Plain objects are merged recursively.\n */\nfunction deepMerge<T extends Record<string, any>>(target: T, source: DeepPartial<T>): T {\n const output = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceVal = source[key];\n const targetVal = target[key];\n\n if (sourceVal === undefined) {\n continue;\n }\n\n if (\n sourceVal !== null &&\n typeof sourceVal === 'object' &&\n !Array.isArray(sourceVal) &&\n typeof sourceVal !== 'function' &&\n targetVal !== null &&\n typeof targetVal === 'object' &&\n !Array.isArray(targetVal) &&\n typeof targetVal !== 'function'\n ) {\n (output as any)[key] = deepMerge(targetVal as any, sourceVal as any);\n } else {\n (output as any)[key] = sourceVal;\n }\n }\n\n return output;\n}\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\n/**\n * React context that holds the current theme.\n * Defaults to `defaultTheme` so that `useTheme()` works even without a provider.\n */\nconst ThemeContext = createContext<Theme>(defaultTheme);\n\nThemeContext.displayName = 'ThemeContext';\n\n// ─── createTheme ─────────────────────────────────────────────────────────────\n\n/**\n * Creates a complete theme by deep-merging user overrides over the default theme.\n *\n * @example\n * ```ts\n * import { createTheme } from 'dhanasekar-ui';\n *\n * const myTheme = createTheme({\n * palette: { primary: { main: '#6200ea' } },\n * });\n * ```\n */\nexport function createTheme(overrides: DeepPartial<Theme> = {}): Theme {\n return deepMerge(defaultTheme, overrides);\n}\n\n// ─── ThemeProvider ───────────────────────────────────────────────────────────\n\n/**\n * Provides a theme to all descendant components via React context.\n *\n * If a partial `theme` prop is supplied, it is deep-merged over the default theme.\n * If no `theme` prop is given, the full default theme is used.\n *\n * @example\n * ```tsx\n * import { ThemeProvider } from 'dhanasekar-ui';\n *\n * function App() {\n * return (\n * <ThemeProvider theme={{ palette: { primary: { main: '#6200ea' } } }}>\n * <MyApp />\n * </ThemeProvider>\n * );\n * }\n * ```\n */\nexport function ThemeProvider({ theme, children }: ThemeProviderProps): ReactElement {\n const mergedTheme = useMemo<Theme>(() => {\n if (!theme) return defaultTheme;\n return deepMerge(defaultTheme, theme as DeepPartial<Theme>);\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={mergedTheme}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nThemeProvider.displayName = 'ThemeProvider';\n\n// ─── useTheme ────────────────────────────────────────────────────────────────\n\n/**\n * Hook that returns the current theme from the nearest `ThemeProvider`.\n *\n * If no provider is found, the default theme is returned (never throws).\n *\n * @example\n * ```tsx\n * import { useTheme } from 'dhanasekar-ui';\n *\n * function MyComponent() {\n * const theme = useTheme();\n * return <div style={{ color: theme.palette.primary.main }}>Hello</div>;\n * }\n * ```\n */\nexport function useTheme(): Theme {\n return useContext(ThemeContext);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-HGGQFNUJ.mjs';import {useState,useRef,useEffect}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var T=`
1
+ import {a}from'./chunk-MAXZQTTY.mjs';import {useState,useRef,useEffect}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var T=`
2
2
  :root {
3
3
  --df-primary: #3b82f6;
4
4
  --df-primary-hover: #2563eb;
@@ -197,5 +197,5 @@ import {a}from'./chunk-HGGQFNUJ.mjs';import {useState,useRef,useEffect}from'reac
197
197
  body.df-modal-open {
198
198
  overflow: hidden;
199
199
  }
200
- `,C=["Today","Yesterday","Last 7 Days","Last 30 Days","This Month","Last Month","Custom"],M=({open:r,title:g="Date Filter",options:u=C,initialValue:t,onClose:d,onApply:v,sx:y,style:h,className:w=""})=>{let[s,f]=useState(t?.option||"Today"),[n,p]=useState(t?.from||""),[c,b]=useState(t?.to||""),m=useRef(null);useEffect(()=>{r&&t&&(f(t.option),p(t.from||""),b(t.to||""));},[r,t]),useEffect(()=>(r?document.body.classList.add("df-modal-open"):document.body.classList.remove("df-modal-open"),()=>document.body.classList.remove("df-modal-open")),[r]);let k=e=>{e.target===m.current&&d();};useEffect(()=>{let e=S=>{S.key==="Escape"&&r&&d();};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[r,d]);let N=()=>{v({option:s,...s==="Custom"?{from:n,to:c}:{}});},D=new Date().toISOString().split("T")[0];return jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:T}}),jsx("div",{ref:m,className:`df-backdrop ${r?"df-open":""} ${w}`,onClick:k,role:"dialog","aria-modal":"true","aria-labelledby":"df-dialog-title",style:{...a(y),...h},children:jsxs("div",{className:"df-dialog",children:[jsx("div",{className:"df-header",children:jsx("h2",{id:"df-dialog-title",className:"df-title",children:g})}),jsxs("div",{className:"df-content",children:[jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"Select Range"}),jsx("div",{className:"df-select-wrapper",children:jsx("select",{className:"df-input df-select",value:s,onChange:e=>f(e.target.value),children:u.map(e=>jsx("option",{value:e,children:e},e))})})]}),s==="Custom"&&jsxs("div",{className:"df-custom-range",children:[jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"From Date"}),jsx("input",{type:"date",className:"df-input",value:n,onChange:e=>p(e.target.value),max:D})]}),jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"To Date"}),jsx("input",{type:"date",className:"df-input",value:c,onChange:e=>b(e.target.value),min:n||void 0})]})]})]}),jsxs("div",{className:"df-footer",children:[jsx("button",{className:"df-btn df-btn-cancel",onClick:d,children:"Cancel"}),jsx("button",{className:"df-btn df-btn-apply",onClick:N,children:"Apply"})]})]})})]})};export{M as a};//# sourceMappingURL=chunk-AK3NQBYU.mjs.map
201
- //# sourceMappingURL=chunk-AK3NQBYU.mjs.map
200
+ `,C=["Today","Yesterday","Last 7 Days","Last 30 Days","This Month","Last Month","Custom"],M=({open:r,title:g="Date Filter",options:u=C,initialValue:t,onClose:d,onApply:v,sx:y,style:h,className:w=""})=>{let[s,f]=useState(t?.option||"Today"),[n,p]=useState(t?.from||""),[c,b]=useState(t?.to||""),m=useRef(null);useEffect(()=>{r&&t&&(f(t.option),p(t.from||""),b(t.to||""));},[r,t]),useEffect(()=>(r?document.body.classList.add("df-modal-open"):document.body.classList.remove("df-modal-open"),()=>document.body.classList.remove("df-modal-open")),[r]);let k=e=>{e.target===m.current&&d();};useEffect(()=>{let e=S=>{S.key==="Escape"&&r&&d();};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[r,d]);let N=()=>{v({option:s,...s==="Custom"?{from:n,to:c}:{}});},D=new Date().toISOString().split("T")[0];return jsxs(Fragment,{children:[jsx("style",{dangerouslySetInnerHTML:{__html:T}}),jsx("div",{ref:m,className:`df-backdrop ${r?"df-open":""} ${w}`,onClick:k,role:"dialog","aria-modal":"true","aria-labelledby":"df-dialog-title",style:{...a(y),...h},children:jsxs("div",{className:"df-dialog",children:[jsx("div",{className:"df-header",children:jsx("h2",{id:"df-dialog-title",className:"df-title",children:g})}),jsxs("div",{className:"df-content",children:[jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"Select Range"}),jsx("div",{className:"df-select-wrapper",children:jsx("select",{className:"df-input df-select",value:s,onChange:e=>f(e.target.value),children:u.map(e=>jsx("option",{value:e,children:e},e))})})]}),s==="Custom"&&jsxs("div",{className:"df-custom-range",children:[jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"From Date"}),jsx("input",{type:"date",className:"df-input",value:n,onChange:e=>p(e.target.value),max:D})]}),jsxs("div",{className:"df-form-group",children:[jsx("label",{className:"df-label",children:"To Date"}),jsx("input",{type:"date",className:"df-input",value:c,onChange:e=>b(e.target.value),min:n||void 0})]})]})]}),jsxs("div",{className:"df-footer",children:[jsx("button",{className:"df-btn df-btn-cancel",onClick:d,children:"Cancel"}),jsx("button",{className:"df-btn df-btn-apply",onClick:N,children:"Apply"})]})]})})]})};export{M as a};//# sourceMappingURL=chunk-7U4ZR2N6.mjs.map
201
+ //# sourceMappingURL=chunk-7U4ZR2N6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DateFilter/DateFilter.tsx"],"names":["STYLES","DEFAULT_OPTIONS","DateFilter","open","title","options","initialValue","onClose","onApply","sx","style","className","option","setOption","useState","from","setFrom","to","setTo","backdropRef","useRef","useEffect","handleBackdropClick","handleKeyDown","e","handleApply","todayStr","jsxs","Fragment","jsx","handleSx","opt"],"mappings":"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","file":"chunk-AK3NQBYU.mjs","sourcesContent":["'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { handleSx } from '../../utils/handleSx';\nimport { DateFilterProps, DateFilterValue } from './DateFilter.types';\n\nconst STYLES = `\n :root {\n --df-primary: #3b82f6;\n --df-primary-hover: #2563eb;\n --df-text-main: #1e293b;\n --df-text-secondary: #64748b;\n --df-bg-main: #ffffff;\n --df-bg-glass: rgba(255, 255, 255, 0.85);\n --df-border: #e2e8f0;\n --df-border-focus: #3b82f6;\n --df-radius-lg: 12px;\n --df-radius-md: 8px;\n --df-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n }\n\n .df-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(15, 23, 42, 0.4);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .df-backdrop.df-open {\n opacity: 1;\n visibility: visible;\n }\n\n .df-dialog {\n background: var(--df-bg-glass);\n backdrop-filter: blur(16px);\n width: 100%;\n max-width: 400px;\n border-radius: var(--df-radius-lg);\n box-shadow: var(--df-shadow);\n display: flex;\n flex-direction: column;\n transform: scale(0.95) translateY(10px);\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n border: 1px solid rgba(255, 255, 255, 0.5);\n margin: 16px;\n }\n\n .df-backdrop.df-open .df-dialog {\n transform: scale(1) translateY(0);\n opacity: 1;\n }\n\n .df-header {\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--df-border);\n }\n\n .df-title {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--df-primary);\n }\n\n .df-content {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .df-form-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n position: relative;\n }\n\n .df-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--df-text-secondary);\n }\n\n .df-input {\n width: 100%;\n padding: 10px 14px;\n font-size: 14px;\n color: var(--df-text-main);\n background: var(--df-bg-main);\n border: 1px solid var(--df-border);\n border-radius: var(--df-radius-md);\n outline: none;\n transition: all 0.2s ease;\n box-sizing: border-box;\n appearance: none;\n font-family: inherit;\n }\n\n .df-input:focus {\n border-color: var(--df-border-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);\n }\n\n /* Custom Select Wrapper for arrow */\n .df-select-wrapper {\n position: relative;\n width: 100%;\n }\n\n .df-select-wrapper::after {\n content: '';\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top: 5px solid var(--df-text-secondary);\n pointer-events: none;\n }\n\n .df-select {\n padding-right: 32px;\n cursor: pointer;\n }\n\n .df-custom-range {\n display: flex;\n gap: 16px;\n animation: dfSlideDown 0.3s ease-out;\n }\n\n .df-custom-range .df-form-group {\n flex: 1;\n }\n\n @keyframes dfSlideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .df-footer {\n padding: 16px 24px 24px;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n }\n\n .df-btn {\n padding: 8px 16px;\n font-size: 14px;\n font-weight: 600;\n border-radius: var(--df-radius-md);\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n font-family: inherit;\n }\n\n .df-btn-cancel {\n background: transparent;\n color: var(--df-text-secondary);\n }\n\n .df-btn-cancel:hover {\n background: rgba(0, 0, 0, 0.04);\n color: var(--df-text-main);\n }\n\n .df-btn-apply {\n background: var(--df-primary);\n color: white;\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .df-btn-apply:hover {\n background: var(--df-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 6px rgba(59, 130, 246, 0.4);\n }\n\n .df-btn-apply:active {\n transform: translateY(0);\n }\n \n /* Prevent background scrolling when modal is open */\n body.df-modal-open {\n overflow: hidden;\n }\n`;\n\nconst DEFAULT_OPTIONS = [\n 'Today',\n 'Yesterday',\n 'Last 7 Days',\n 'Last 30 Days',\n 'This Month',\n 'Last Month',\n 'Custom'\n];\n\nexport const DateFilter = ({\n open,\n title = 'Date Filter',\n options = DEFAULT_OPTIONS,\n initialValue,\n onClose,\n onApply,\n sx,\n style,\n className = '',\n}: DateFilterProps) => {\n const [option, setOption] = useState<string>(initialValue?.option || 'Today');\n const [from, setFrom] = useState<string>(initialValue?.from || '');\n const [to, setTo] = useState<string>(initialValue?.to || '');\n \n const backdropRef = useRef<HTMLDivElement>(null);\n\n // Sync state with prop if it changes\n useEffect(() => {\n if (open && initialValue) {\n setOption(initialValue.option);\n setFrom(initialValue.from || '');\n setTo(initialValue.to || '');\n }\n }, [open, initialValue]);\n\n // Handle body scroll locking\n useEffect(() => {\n if (open) {\n document.body.classList.add('df-modal-open');\n } else {\n document.body.classList.remove('df-modal-open');\n }\n return () => document.body.classList.remove('df-modal-open');\n }, [open]);\n\n // Handle click outside\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === backdropRef.current) {\n onClose();\n }\n };\n\n // Handle Escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onClose();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [open, onClose]);\n\n const handleApply = () => {\n onApply({\n option,\n ...(option === 'Custom' ? { from, to } : {})\n });\n };\n\n const todayStr = new Date().toISOString().split('T')[0];\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div \n ref={backdropRef}\n className={`df-backdrop ${open ? 'df-open' : ''} ${className}`}\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"df-dialog-title\"\n style={{ ...handleSx(sx), ...style }}\n >\n <div className=\"df-dialog\">\n <div className=\"df-header\">\n <h2 id=\"df-dialog-title\" className=\"df-title\">{title}</h2>\n </div>\n \n <div className=\"df-content\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">Select Range</label>\n <div className=\"df-select-wrapper\">\n <select \n className=\"df-input df-select\"\n value={option}\n onChange={(e) => setOption(e.target.value)}\n >\n {options.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n </div>\n\n {option === 'Custom' && (\n <div className=\"df-custom-range\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">From Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={from}\n onChange={(e) => setFrom(e.target.value)}\n max={todayStr}\n />\n </div>\n <div className=\"df-form-group\">\n <label className=\"df-label\">To Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={to}\n onChange={(e) => setTo(e.target.value)}\n min={from || undefined}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className=\"df-footer\">\n <button className=\"df-btn df-btn-cancel\" onClick={onClose}>\n Cancel\n </button>\n <button className=\"df-btn df-btn-apply\" onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </div>\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/DateFilter/DateFilter.tsx"],"names":["STYLES","DEFAULT_OPTIONS","DateFilter","open","title","options","initialValue","onClose","onApply","sx","style","className","option","setOption","useState","from","setFrom","to","setTo","backdropRef","useRef","useEffect","handleBackdropClick","handleKeyDown","e","handleApply","todayStr","jsxs","Fragment","jsx","handleSx","opt"],"mappings":"yIAMMA,CAAAA,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAyMTC,CAAAA,CAAkB,CACtB,OAAA,CACA,WAAA,CACA,cACA,cAAA,CACA,YAAA,CACA,aACA,QACF,CAAA,CAEaC,EAAa,CAAC,CACzB,KAAAC,CAAAA,CACA,KAAA,CAAAC,EAAQ,aAAA,CACR,OAAA,CAAAC,CAAAA,CAAUJ,CAAAA,CACV,YAAA,CAAAK,CAAAA,CACA,QAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,EAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,SAAA,CAAAC,EAAY,EACd,CAAA,GAAuB,CACrB,GAAM,CAACC,EAAQC,CAAS,CAAA,CAAIC,SAAiBR,CAAAA,EAAc,MAAA,EAAU,OAAO,CAAA,CACtE,CAACS,CAAAA,CAAMC,CAAO,CAAA,CAAIF,QAAAA,CAAiBR,GAAc,IAAA,EAAQ,EAAE,EAC3D,CAACW,CAAAA,CAAIC,CAAK,CAAA,CAAIJ,QAAAA,CAAiBR,GAAc,EAAA,EAAM,EAAE,EAErDa,CAAAA,CAAcC,MAAAA,CAAuB,IAAI,CAAA,CAG/CC,SAAAA,CAAU,IAAM,CACVlB,CAAAA,EAAQG,CAAAA,GACVO,EAAUP,CAAAA,CAAa,MAAM,EAC7BU,CAAAA,CAAQV,CAAAA,CAAa,MAAQ,EAAE,CAAA,CAC/BY,CAAAA,CAAMZ,CAAAA,CAAa,EAAA,EAAM,EAAE,GAE/B,CAAA,CAAG,CAACH,EAAMG,CAAY,CAAC,EAGvBe,SAAAA,CAAU,KACJlB,CAAAA,CACF,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,IAAI,eAAe,CAAA,CAE3C,SAAS,IAAA,CAAK,SAAA,CAAU,OAAO,eAAe,CAAA,CAEzC,IAAM,QAAA,CAAS,IAAA,CAAK,UAAU,MAAA,CAAO,eAAe,GAC1D,CAACA,CAAI,CAAC,CAAA,CAGT,IAAMmB,CAAAA,CAAuB,CAAA,EAAwB,CAC/C,CAAA,CAAE,SAAWH,CAAAA,CAAY,OAAA,EAC3BZ,IAEJ,CAAA,CAGAc,UAAU,IAAM,CACd,IAAME,CAAAA,CAAiBC,CAAAA,EAAqB,CACtCA,CAAAA,CAAE,GAAA,GAAQ,UAAYrB,CAAAA,EACxBI,CAAAA,GAEJ,CAAA,CACA,OAAA,MAAA,CAAO,gBAAA,CAAiB,SAAA,CAAWgB,CAAa,CAAA,CACzC,IAAM,MAAA,CAAO,mBAAA,CAAoB,UAAWA,CAAa,CAClE,EAAG,CAACpB,CAAAA,CAAMI,CAAO,CAAC,CAAA,CAElB,IAAMkB,CAAAA,CAAc,IAAM,CACxBjB,CAAAA,CAAQ,CACN,OAAAI,CAAAA,CACA,GAAIA,CAAAA,GAAW,QAAA,CAAW,CAAE,IAAA,CAAAG,EAAM,EAAA,CAAAE,CAAG,EAAI,EAC3C,CAAC,EACH,CAAA,CAEMS,CAAAA,CAAW,IAAI,IAAA,EAAK,CAAE,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAEtD,OACEC,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAC,GAAAA,CAAC,SAAM,uBAAA,CAAyB,CAAE,OAAQ7B,CAAO,CAAA,CAAG,EACpD6B,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKV,CAAAA,CACL,SAAA,CAAW,eAAehB,CAAAA,CAAO,SAAA,CAAY,EAAE,CAAA,CAAA,EAAIQ,CAAS,GAC5D,OAAA,CAASW,CAAAA,CACT,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,MAAA,CACX,kBAAgB,iBAAA,CAChB,KAAA,CAAO,CAAE,GAAGQ,CAAAA,CAASrB,CAAE,CAAA,CAAG,GAAGC,CAAM,CAAA,CAEnC,QAAA,CAAAiB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,IAAA,CAAA,CAAG,EAAA,CAAG,kBAAkB,SAAA,CAAU,UAAA,CAAY,SAAAzB,CAAAA,CAAM,CAAA,CACvD,EAEAuB,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,YAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,SAAM,SAAA,CAAU,UAAA,CAAW,QAAA,CAAA,cAAA,CAAY,CAAA,CACxCA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mBAAA,CACb,QAAA,CAAAA,IAAC,QAAA,CAAA,CACC,SAAA,CAAU,qBACV,KAAA,CAAOjB,CAAAA,CACP,QAAA,CAAW,CAAA,EAAMC,CAAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA,CAExC,SAAAR,CAAAA,CAAQ,GAAA,CAAK0B,GACZF,GAAAA,CAAC,QAAA,CAAA,CAAiB,KAAA,CAAOE,CAAAA,CAAM,QAAA,CAAAA,CAAAA,CAAAA,CAAlBA,CAAsB,CACpC,CAAA,CACH,EACF,CAAA,CAAA,CACF,CAAA,CAECnB,IAAW,QAAA,EACVe,IAAAA,CAAC,OAAI,SAAA,CAAU,iBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,eAAA,CACb,QAAA,CAAA,CAAAE,IAAC,OAAA,CAAA,CAAM,SAAA,CAAU,UAAA,CAAW,QAAA,CAAA,WAAA,CAAS,CAAA,CACrCA,GAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,UAAU,UAAA,CACV,KAAA,CAAOd,EACP,QAAA,CAAW,CAAA,EAAMC,CAAAA,CAAQ,CAAA,CAAE,MAAA,CAAO,KAAK,EACvC,GAAA,CAAKU,CAAAA,CACP,GACF,CAAA,CACAC,IAAAA,CAAC,OAAI,SAAA,CAAU,eAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,WAAW,QAAA,CAAA,SAAA,CAAO,CAAA,CACnCA,IAAC,OAAA,CAAA,CACC,IAAA,CAAK,OACL,SAAA,CAAU,UAAA,CACV,MAAOZ,CAAAA,CACP,QAAA,CAAW,GAAMC,CAAAA,CAAM,CAAA,CAAE,OAAO,KAAK,CAAA,CACrC,IAAKH,CAAAA,EAAQ,MAAA,CACf,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAEAY,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,UAAO,SAAA,CAAU,sBAAA,CAAuB,OAAA,CAAStB,CAAAA,CAAS,QAAA,CAAA,QAAA,CAE3D,CAAA,CACAsB,IAAC,QAAA,CAAA,CAAO,SAAA,CAAU,sBAAsB,OAAA,CAASJ,CAAAA,CAAa,iBAE9D,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-7U4ZR2N6.mjs","sourcesContent":["'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { handleSx } from '../../utils/handleSx';\nimport { DateFilterProps, DateFilterValue } from './DateFilter.types';\n\nconst STYLES = `\n :root {\n --df-primary: #3b82f6;\n --df-primary-hover: #2563eb;\n --df-text-main: #1e293b;\n --df-text-secondary: #64748b;\n --df-bg-main: #ffffff;\n --df-bg-glass: rgba(255, 255, 255, 0.85);\n --df-border: #e2e8f0;\n --df-border-focus: #3b82f6;\n --df-radius-lg: 12px;\n --df-radius-md: 8px;\n --df-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n }\n\n .df-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(15, 23, 42, 0.4);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .df-backdrop.df-open {\n opacity: 1;\n visibility: visible;\n }\n\n .df-dialog {\n background: var(--df-bg-glass);\n backdrop-filter: blur(16px);\n width: 100%;\n max-width: 400px;\n border-radius: var(--df-radius-lg);\n box-shadow: var(--df-shadow);\n display: flex;\n flex-direction: column;\n transform: scale(0.95) translateY(10px);\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n border: 1px solid rgba(255, 255, 255, 0.5);\n margin: 16px;\n }\n\n .df-backdrop.df-open .df-dialog {\n transform: scale(1) translateY(0);\n opacity: 1;\n }\n\n .df-header {\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--df-border);\n }\n\n .df-title {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--df-primary);\n }\n\n .df-content {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .df-form-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n position: relative;\n }\n\n .df-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--df-text-secondary);\n }\n\n .df-input {\n width: 100%;\n padding: 10px 14px;\n font-size: 14px;\n color: var(--df-text-main);\n background: var(--df-bg-main);\n border: 1px solid var(--df-border);\n border-radius: var(--df-radius-md);\n outline: none;\n transition: all 0.2s ease;\n box-sizing: border-box;\n appearance: none;\n font-family: inherit;\n }\n\n .df-input:focus {\n border-color: var(--df-border-focus);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);\n }\n\n /* Custom Select Wrapper for arrow */\n .df-select-wrapper {\n position: relative;\n width: 100%;\n }\n\n .df-select-wrapper::after {\n content: '';\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top: 5px solid var(--df-text-secondary);\n pointer-events: none;\n }\n\n .df-select {\n padding-right: 32px;\n cursor: pointer;\n }\n\n .df-custom-range {\n display: flex;\n gap: 16px;\n animation: dfSlideDown 0.3s ease-out;\n }\n\n .df-custom-range .df-form-group {\n flex: 1;\n }\n\n @keyframes dfSlideDown {\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .df-footer {\n padding: 16px 24px 24px;\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n }\n\n .df-btn {\n padding: 8px 16px;\n font-size: 14px;\n font-weight: 600;\n border-radius: var(--df-radius-md);\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n font-family: inherit;\n }\n\n .df-btn-cancel {\n background: transparent;\n color: var(--df-text-secondary);\n }\n\n .df-btn-cancel:hover {\n background: rgba(0, 0, 0, 0.04);\n color: var(--df-text-main);\n }\n\n .df-btn-apply {\n background: var(--df-primary);\n color: white;\n box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);\n }\n\n .df-btn-apply:hover {\n background: var(--df-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 6px rgba(59, 130, 246, 0.4);\n }\n\n .df-btn-apply:active {\n transform: translateY(0);\n }\n \n /* Prevent background scrolling when modal is open */\n body.df-modal-open {\n overflow: hidden;\n }\n`;\n\nconst DEFAULT_OPTIONS = [\n 'Today',\n 'Yesterday',\n 'Last 7 Days',\n 'Last 30 Days',\n 'This Month',\n 'Last Month',\n 'Custom'\n];\n\nexport const DateFilter = ({\n open,\n title = 'Date Filter',\n options = DEFAULT_OPTIONS,\n initialValue,\n onClose,\n onApply,\n sx,\n style,\n className = '',\n}: DateFilterProps) => {\n const [option, setOption] = useState<string>(initialValue?.option || 'Today');\n const [from, setFrom] = useState<string>(initialValue?.from || '');\n const [to, setTo] = useState<string>(initialValue?.to || '');\n \n const backdropRef = useRef<HTMLDivElement>(null);\n\n // Sync state with prop if it changes\n useEffect(() => {\n if (open && initialValue) {\n setOption(initialValue.option);\n setFrom(initialValue.from || '');\n setTo(initialValue.to || '');\n }\n }, [open, initialValue]);\n\n // Handle body scroll locking\n useEffect(() => {\n if (open) {\n document.body.classList.add('df-modal-open');\n } else {\n document.body.classList.remove('df-modal-open');\n }\n return () => document.body.classList.remove('df-modal-open');\n }, [open]);\n\n // Handle click outside\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === backdropRef.current) {\n onClose();\n }\n };\n\n // Handle Escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onClose();\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [open, onClose]);\n\n const handleApply = () => {\n onApply({\n option,\n ...(option === 'Custom' ? { from, to } : {})\n });\n };\n\n const todayStr = new Date().toISOString().split('T')[0];\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: STYLES }} />\n <div \n ref={backdropRef}\n className={`df-backdrop ${open ? 'df-open' : ''} ${className}`}\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"df-dialog-title\"\n style={{ ...handleSx(sx), ...style }}\n >\n <div className=\"df-dialog\">\n <div className=\"df-header\">\n <h2 id=\"df-dialog-title\" className=\"df-title\">{title}</h2>\n </div>\n \n <div className=\"df-content\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">Select Range</label>\n <div className=\"df-select-wrapper\">\n <select \n className=\"df-input df-select\"\n value={option}\n onChange={(e) => setOption(e.target.value)}\n >\n {options.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n </div>\n\n {option === 'Custom' && (\n <div className=\"df-custom-range\">\n <div className=\"df-form-group\">\n <label className=\"df-label\">From Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={from}\n onChange={(e) => setFrom(e.target.value)}\n max={todayStr}\n />\n </div>\n <div className=\"df-form-group\">\n <label className=\"df-label\">To Date</label>\n <input \n type=\"date\"\n className=\"df-input\"\n value={to}\n onChange={(e) => setTo(e.target.value)}\n min={from || undefined}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className=\"df-footer\">\n <button className=\"df-btn df-btn-cancel\" onClick={onClose}>\n Cancel\n </button>\n <button className=\"df-btn df-btn-apply\" onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </div>\n </>\n );\n};\n"]}