erp-pro-ui 0.2.6 → 0.2.7

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 (422) hide show
  1. package/dist/accordion.cjs +1 -1
  2. package/dist/accordion.mjs +1 -1
  3. package/dist/alert.cjs +1 -1
  4. package/dist/alert.mjs +1 -1
  5. package/dist/animated-content.cjs +1 -1
  6. package/dist/animated-content.mjs +1 -1
  7. package/dist/ascii-text.cjs +1 -1
  8. package/dist/ascii-text.mjs +1 -1
  9. package/dist/background-gradient-animation.cjs +1 -1
  10. package/dist/background-gradient-animation.mjs +1 -1
  11. package/dist/button-hover-border-gradient.cjs +1 -1
  12. package/dist/button-hover-border-gradient.mjs +1 -1
  13. package/dist/button.cjs +1 -1
  14. package/dist/button.mjs +1 -1
  15. package/dist/calendar.cjs +1 -1
  16. package/dist/calendar.mjs +1 -1
  17. package/dist/card.cjs +1 -1
  18. package/dist/card.mjs +1 -1
  19. package/dist/carousel.cjs +1 -1
  20. package/dist/carousel.mjs +1 -1
  21. package/dist/catalog.cjs +7 -0
  22. package/dist/catalog.cjs.map +1 -1
  23. package/dist/catalog.d.ts +13 -1
  24. package/dist/catalog.d.ts.map +1 -1
  25. package/dist/catalog.mjs +7 -0
  26. package/dist/catalog.mjs.map +1 -1
  27. package/dist/charts.cjs +1 -1
  28. package/dist/charts.mjs +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.mjs +1 -1
  31. package/dist/chip.cjs +1 -1
  32. package/dist/chip.mjs +1 -1
  33. package/dist/chroma-grid.cjs +1 -1
  34. package/dist/chroma-grid.mjs +1 -1
  35. package/dist/chunks/{Drawer-Y0_sJni5.mjs → Drawer-BhTTQV8Q.mjs} +2 -2
  36. package/dist/chunks/{Drawer-Y0_sJni5.mjs.map → Drawer-BhTTQV8Q.mjs.map} +1 -1
  37. package/dist/chunks/{Drawer-D72Xi2Gq.cjs → Drawer-C_DLqrus.cjs} +2 -3
  38. package/dist/chunks/{Drawer-D72Xi2Gq.cjs.map → Drawer-C_DLqrus.cjs.map} +1 -1
  39. package/dist/chunks/{DropdownMenu-BQ4WlaGp.mjs → DropdownMenu-B18BI5l7.mjs} +2 -2
  40. package/dist/chunks/{DropdownMenu-BQ4WlaGp.mjs.map → DropdownMenu-B18BI5l7.mjs.map} +1 -1
  41. package/dist/chunks/{DropdownMenu-yh04burS.cjs → DropdownMenu-CEmlmX7P.cjs} +2 -3
  42. package/dist/chunks/{DropdownMenu-yh04burS.cjs.map → DropdownMenu-CEmlmX7P.cjs.map} +1 -1
  43. package/dist/chunks/{HoverBorderGradient-DEtm3owk.mjs → HoverBorderGradient-CGKcviEd.mjs} +2 -2
  44. package/dist/chunks/{HoverBorderGradient-DEtm3owk.mjs.map → HoverBorderGradient-CGKcviEd.mjs.map} +1 -1
  45. package/dist/chunks/{HoverBorderGradient-DMMyr2L3.cjs → HoverBorderGradient-DTKasFZO.cjs} +2 -3
  46. package/dist/chunks/{HoverBorderGradient-DMMyr2L3.cjs.map → HoverBorderGradient-DTKasFZO.cjs.map} +1 -1
  47. package/dist/chunks/{SunToMoonButton-BOKHzC1H.mjs → SunToMoonButton-DIMK53fW.mjs} +2 -2
  48. package/dist/chunks/{SunToMoonButton-BOKHzC1H.mjs.map → SunToMoonButton-DIMK53fW.mjs.map} +1 -1
  49. package/dist/chunks/{SunToMoonButton-gX4Kk_5B.cjs → SunToMoonButton-DUuIqw22.cjs} +2 -3
  50. package/dist/chunks/{SunToMoonButton-gX4Kk_5B.cjs.map → SunToMoonButton-DUuIqw22.cjs.map} +1 -1
  51. package/dist/chunks/{Tooltip-nnaiqJTT.cjs → Tooltip-1yPGRJ2Q.cjs} +1 -2
  52. package/dist/chunks/{Tooltip-nnaiqJTT.cjs.map → Tooltip-1yPGRJ2Q.cjs.map} +1 -1
  53. package/dist/chunks/{Tooltip-LbOKP__2.mjs → Tooltip-CEj-I4JO.mjs} +1 -1
  54. package/dist/chunks/{Tooltip-LbOKP__2.mjs.map → Tooltip-CEj-I4JO.mjs.map} +1 -1
  55. package/dist/chunks/{accordion-CLcjNX_X.mjs → accordion-Cf-Q3rec.mjs} +2 -2
  56. package/dist/chunks/{accordion-CLcjNX_X.mjs.map → accordion-Cf-Q3rec.mjs.map} +1 -1
  57. package/dist/chunks/{accordion-Bj3Sj0mC.cjs → accordion-X4PNqWkW.cjs} +2 -3
  58. package/dist/chunks/{accordion-Bj3Sj0mC.cjs.map → accordion-X4PNqWkW.cjs.map} +1 -1
  59. package/dist/chunks/{alert-BBA4Sh4e.cjs → alert-BEMULPIi.cjs} +2 -3
  60. package/dist/chunks/{alert-BBA4Sh4e.cjs.map → alert-BEMULPIi.cjs.map} +1 -1
  61. package/dist/chunks/{alert-oUz79MGc.mjs → alert-GImBqaCY.mjs} +2 -2
  62. package/dist/chunks/{alert-oUz79MGc.mjs.map → alert-GImBqaCY.mjs.map} +1 -1
  63. package/dist/chunks/{animated-content-CiNJLgbq.mjs → animated-content-Bp-Yt0_7.mjs} +1 -1
  64. package/dist/chunks/{animated-content-CiNJLgbq.mjs.map → animated-content-Bp-Yt0_7.mjs.map} +1 -1
  65. package/dist/chunks/{animated-content-B3wbiWQI.cjs → animated-content-tSHXDZq2.cjs} +1 -2
  66. package/dist/chunks/{animated-content-B3wbiWQI.cjs.map → animated-content-tSHXDZq2.cjs.map} +1 -1
  67. package/dist/chunks/{ascii-text-KwVE41Hw.cjs → ascii-text-Ctua6ucZ.cjs} +2 -2
  68. package/dist/chunks/{ascii-text-KwVE41Hw.cjs.map → ascii-text-Ctua6ucZ.cjs.map} +1 -1
  69. package/dist/chunks/{ascii-text-C6JegLhP.mjs → ascii-text-QyP7JU7g.mjs} +1 -1
  70. package/dist/chunks/{ascii-text-C6JegLhP.mjs.map → ascii-text-QyP7JU7g.mjs.map} +1 -1
  71. package/dist/chunks/{background-gradient-animation-CTc2ZR74.mjs → background-gradient-animation-CZUD_aq2.mjs} +2 -2
  72. package/dist/chunks/{background-gradient-animation-CTc2ZR74.mjs.map → background-gradient-animation-CZUD_aq2.mjs.map} +1 -1
  73. package/dist/chunks/{background-gradient-animation-1LZY3DYT.cjs → background-gradient-animation-PvM0i88k.cjs} +2 -3
  74. package/dist/chunks/{background-gradient-animation-1LZY3DYT.cjs.map → background-gradient-animation-PvM0i88k.cjs.map} +1 -1
  75. package/dist/chunks/{button-IDShmQqA.mjs → button-CAU9ej3h.mjs} +2 -2
  76. package/dist/chunks/{button-IDShmQqA.mjs.map → button-CAU9ej3h.mjs.map} +1 -1
  77. package/dist/chunks/{button-uD87K76W.cjs → button-D2ZYmVda.cjs} +2 -3
  78. package/dist/chunks/{button-uD87K76W.cjs.map → button-D2ZYmVda.cjs.map} +1 -1
  79. package/dist/chunks/{button-hover-border-gradient-DGZqd8je.cjs → button-hover-border-gradient-D12Zjmd3.cjs} +2 -3
  80. package/dist/chunks/{button-hover-border-gradient-DGZqd8je.cjs.map → button-hover-border-gradient-D12Zjmd3.cjs.map} +1 -1
  81. package/dist/chunks/{button-hover-border-gradient-B2ebbDek.mjs → button-hover-border-gradient-VNEg4V0o.mjs} +2 -2
  82. package/dist/chunks/{button-hover-border-gradient-B2ebbDek.mjs.map → button-hover-border-gradient-VNEg4V0o.mjs.map} +1 -1
  83. package/dist/chunks/calendar-BlUhssD4.mjs +203 -0
  84. package/dist/chunks/calendar-BlUhssD4.mjs.map +1 -0
  85. package/dist/chunks/calendar-CdKKhdx5.cjs +208 -0
  86. package/dist/chunks/calendar-CdKKhdx5.cjs.map +1 -0
  87. package/dist/chunks/{card-Cuud0jIt.cjs → card-C_Qr7E6E.cjs} +1 -2
  88. package/dist/chunks/{card-Cuud0jIt.cjs.map → card-C_Qr7E6E.cjs.map} +1 -1
  89. package/dist/chunks/{card-DNeC6jqk.mjs → card-DYHDNCPK.mjs} +1 -1
  90. package/dist/chunks/{card-DNeC6jqk.mjs.map → card-DYHDNCPK.mjs.map} +1 -1
  91. package/dist/chunks/{carousel-xHkrV_pt.cjs → carousel-DtOJEbEU.cjs} +4 -5
  92. package/dist/chunks/{carousel-xHkrV_pt.cjs.map → carousel-DtOJEbEU.cjs.map} +1 -1
  93. package/dist/chunks/{carousel-Dpe5QLJK.mjs → carousel-eeqWZZHE.mjs} +4 -4
  94. package/dist/chunks/{carousel-Dpe5QLJK.mjs.map → carousel-eeqWZZHE.mjs.map} +1 -1
  95. package/dist/chunks/{chartStyles-BADmRKZo.cjs → chartStyles-2mTluDoo.cjs} +1 -1
  96. package/dist/chunks/{chartStyles-BADmRKZo.cjs.map → chartStyles-2mTluDoo.cjs.map} +1 -1
  97. package/dist/chunks/{chartStyles-DPXgYmGn.mjs → chartStyles-DrHVYS5N.mjs} +1 -1
  98. package/dist/chunks/{chartStyles-DPXgYmGn.mjs.map → chartStyles-DrHVYS5N.mjs.map} +1 -1
  99. package/dist/chunks/{charts-COx3IbI2.cjs → charts-DMu4zp8j.cjs} +4 -4
  100. package/dist/chunks/{charts-COx3IbI2.cjs.map → charts-DMu4zp8j.cjs.map} +1 -1
  101. package/dist/chunks/{charts-C-KQ3Nk5.mjs → charts-DlskmT1J.mjs} +3 -3
  102. package/dist/chunks/{charts-C-KQ3Nk5.mjs.map → charts-DlskmT1J.mjs.map} +1 -1
  103. package/dist/chunks/{checkbox-Y04NlzB8.mjs → checkbox-D7EJQbqC.mjs} +1 -1
  104. package/dist/chunks/{checkbox-Y04NlzB8.mjs.map → checkbox-D7EJQbqC.mjs.map} +1 -1
  105. package/dist/chunks/{checkbox-CDknzh89.cjs → checkbox-Lw2UqyNE.cjs} +1 -2
  106. package/dist/chunks/{checkbox-CDknzh89.cjs.map → checkbox-Lw2UqyNE.cjs.map} +1 -1
  107. package/dist/chunks/{chip-sfQlzrbo.cjs → chip-D5i9VT9O.cjs} +4 -5
  108. package/dist/chunks/{chip-sfQlzrbo.cjs.map → chip-D5i9VT9O.cjs.map} +1 -1
  109. package/dist/chunks/{chip-B3j6R6sO.mjs → chip-DBlSQcqR.mjs} +4 -4
  110. package/dist/chunks/{chip-B3j6R6sO.mjs.map → chip-DBlSQcqR.mjs.map} +1 -1
  111. package/dist/chunks/{chroma-grid-Bp55pKEm.cjs → chroma-grid-CTDtdFUm.cjs} +2 -3
  112. package/dist/chunks/{chroma-grid-Bp55pKEm.cjs.map → chroma-grid-CTDtdFUm.cjs.map} +1 -1
  113. package/dist/chunks/{chroma-grid-BHS9qAn_.mjs → chroma-grid-DuLTfGVP.mjs} +2 -2
  114. package/dist/chunks/{chroma-grid-BHS9qAn_.mjs.map → chroma-grid-DuLTfGVP.mjs.map} +1 -1
  115. package/dist/chunks/{color-palette-Duud5Iqq.cjs → color-palette-DQQ9UV0N.cjs} +2 -2
  116. package/dist/chunks/{color-palette-Duud5Iqq.cjs.map → color-palette-DQQ9UV0N.cjs.map} +1 -1
  117. package/dist/chunks/{color-palette-D9Qlw2Cx.mjs → color-palette-G1HUXWJP.mjs} +1 -1
  118. package/dist/chunks/{color-palette-D9Qlw2Cx.mjs.map → color-palette-G1HUXWJP.mjs.map} +1 -1
  119. package/dist/chunks/{combobox-C3a2iogC.cjs → combobox-CkNzH1YV.cjs} +6 -6
  120. package/dist/chunks/{combobox-C3a2iogC.cjs.map → combobox-CkNzH1YV.cjs.map} +1 -1
  121. package/dist/chunks/{combobox-neBItbtz.mjs → combobox-xNmFFHd6.mjs} +5 -5
  122. package/dist/chunks/{combobox-neBItbtz.mjs.map → combobox-xNmFFHd6.mjs.map} +1 -1
  123. package/dist/chunks/dashboard-cards-Bww66_5K.cjs +6570 -0
  124. package/dist/chunks/dashboard-cards-Bww66_5K.cjs.map +1 -0
  125. package/dist/chunks/dashboard-cards-lnifLEyj.mjs +6385 -0
  126. package/dist/chunks/dashboard-cards-lnifLEyj.mjs.map +1 -0
  127. package/dist/chunks/{data-table-BZEiSZI2.cjs → data-table-BCVbzkLo.cjs} +16 -17
  128. package/dist/chunks/{data-table-BZEiSZI2.cjs.map → data-table-BCVbzkLo.cjs.map} +1 -1
  129. package/dist/chunks/{data-table-EfGKkerd.mjs → data-table-C25KHEn4.mjs} +14 -15
  130. package/dist/chunks/{data-table-EfGKkerd.mjs.map → data-table-C25KHEn4.mjs.map} +1 -1
  131. package/dist/chunks/date-picker--cqsgsIV.mjs +587 -0
  132. package/dist/chunks/date-picker--cqsgsIV.mjs.map +1 -0
  133. package/dist/chunks/date-picker-BJQdFyqr.cjs +592 -0
  134. package/dist/chunks/date-picker-BJQdFyqr.cjs.map +1 -0
  135. package/dist/chunks/{dialog-B60BjJz0.mjs → dialog-BHIeG3Sg.mjs} +3 -3
  136. package/dist/chunks/{dialog-B60BjJz0.mjs.map → dialog-BHIeG3Sg.mjs.map} +1 -1
  137. package/dist/chunks/{dialog-i9LdkXmF.cjs → dialog-CLKU0cXX.cjs} +3 -4
  138. package/dist/chunks/{dialog-i9LdkXmF.cjs.map → dialog-CLKU0cXX.cjs.map} +1 -1
  139. package/dist/chunks/draggable-grid-2L_eHKfp.cjs +245 -0
  140. package/dist/chunks/draggable-grid-2L_eHKfp.cjs.map +1 -0
  141. package/dist/chunks/draggable-grid-IuCMSOsE.mjs +240 -0
  142. package/dist/chunks/draggable-grid-IuCMSOsE.mjs.map +1 -0
  143. package/dist/chunks/{event-calendar-BbFOUDov.mjs → event-calendar-CO2doGJW.mjs} +11 -11
  144. package/dist/chunks/{event-calendar-BbFOUDov.mjs.map → event-calendar-CO2doGJW.mjs.map} +1 -1
  145. package/dist/chunks/{event-calendar-Bljd_7PI.cjs → event-calendar-CvficOuV.cjs} +11 -12
  146. package/dist/chunks/{event-calendar-Bljd_7PI.cjs.map → event-calendar-CvficOuV.cjs.map} +1 -1
  147. package/dist/chunks/{form-DGwdlSW2.cjs → form-DARN6jtX.cjs} +1 -2
  148. package/dist/chunks/{form-DGwdlSW2.cjs.map → form-DARN6jtX.cjs.map} +1 -1
  149. package/dist/chunks/{form-CDc9UM3r.mjs → form-DNuFklNR.mjs} +1 -1
  150. package/dist/chunks/{form-CDc9UM3r.mjs.map → form-DNuFklNR.mjs.map} +1 -1
  151. package/dist/chunks/{gradual-blur-BNYVlqb1.cjs → gradual-blur-BBLbpXD4.cjs} +2 -3
  152. package/dist/chunks/{gradual-blur-BNYVlqb1.cjs.map → gradual-blur-BBLbpXD4.cjs.map} +1 -1
  153. package/dist/chunks/{gradual-blur-Bw2KNmXb.mjs → gradual-blur-BPx2MSWI.mjs} +2 -2
  154. package/dist/chunks/{gradual-blur-Bw2KNmXb.mjs.map → gradual-blur-BPx2MSWI.mjs.map} +1 -1
  155. package/dist/chunks/{hover-card-G66SUyjq.mjs → hover-card-BkVHGXz6.mjs} +1 -1
  156. package/dist/chunks/{hover-card-G66SUyjq.mjs.map → hover-card-BkVHGXz6.mjs.map} +1 -1
  157. package/dist/chunks/{hover-card-Dp6Y2h2J.cjs → hover-card-DwZFtu8w.cjs} +1 -2
  158. package/dist/chunks/{hover-card-Dp6Y2h2J.cjs.map → hover-card-DwZFtu8w.cjs.map} +1 -1
  159. package/dist/chunks/{icons-ub9iu-JG.cjs → icons-Ci8yEvvF.cjs} +48 -2
  160. package/dist/chunks/icons-Ci8yEvvF.cjs.map +1 -0
  161. package/dist/chunks/{icons-JzMKLygv.mjs → icons-CkVHNbbN.mjs} +43 -2
  162. package/dist/chunks/icons-CkVHNbbN.mjs.map +1 -0
  163. package/dist/chunks/{input-CRc3MKb_.mjs → input-B-XSdnfh.mjs} +4 -4
  164. package/dist/chunks/{input-CRc3MKb_.mjs.map → input-B-XSdnfh.mjs.map} +1 -1
  165. package/dist/chunks/{input-DMTwz27q.cjs → input-EH7x0pQY.cjs} +4 -5
  166. package/dist/chunks/{input-DMTwz27q.cjs.map → input-EH7x0pQY.cjs.map} +1 -1
  167. package/dist/chunks/{label-Bc_r54NU.mjs → label-CcsncrKQ.mjs} +1 -1
  168. package/dist/chunks/{label-Bc_r54NU.mjs.map → label-CcsncrKQ.mjs.map} +1 -1
  169. package/dist/chunks/{label-B5Ugq0Nk.cjs → label-Du-5H7wd.cjs} +1 -2
  170. package/dist/chunks/{label-B5Ugq0Nk.cjs.map → label-Du-5H7wd.cjs.map} +1 -1
  171. package/dist/chunks/{loading-ll2L6lc7.mjs → loading-2Lh_355V.mjs} +2 -2
  172. package/dist/chunks/{loading-ll2L6lc7.mjs.map → loading-2Lh_355V.mjs.map} +1 -1
  173. package/dist/chunks/{loading-DZKJc3e7.cjs → loading-DeGHTDO2.cjs} +2 -3
  174. package/dist/chunks/{loading-DZKJc3e7.cjs.map → loading-DeGHTDO2.cjs.map} +1 -1
  175. package/dist/chunks/{multi-select-combobox-C_8sxaiL.mjs → multi-select-combobox-BOdKmPj2.mjs} +4 -4
  176. package/dist/chunks/{multi-select-combobox-C_8sxaiL.mjs.map → multi-select-combobox-BOdKmPj2.mjs.map} +1 -1
  177. package/dist/chunks/{multi-select-combobox-CFJGq1hn.cjs → multi-select-combobox-PPYRcaPg.cjs} +5 -5
  178. package/dist/chunks/{multi-select-combobox-CFJGq1hn.cjs.map → multi-select-combobox-PPYRcaPg.cjs.map} +1 -1
  179. package/dist/chunks/{otp-input-BpcTJOmU.mjs → otp-input--_itTXaL.mjs} +1 -1
  180. package/dist/chunks/{otp-input-BpcTJOmU.mjs.map → otp-input--_itTXaL.mjs.map} +1 -1
  181. package/dist/chunks/{otp-input-B5-tuc0q.cjs → otp-input-Dgw_47Z7.cjs} +1 -2
  182. package/dist/chunks/{otp-input-B5-tuc0q.cjs.map → otp-input-Dgw_47Z7.cjs.map} +1 -1
  183. package/dist/chunks/{overlay-DzE_GyYf.cjs → overlay-15EzdrIu.cjs} +1 -2
  184. package/dist/chunks/{overlay-DzE_GyYf.cjs.map → overlay-15EzdrIu.cjs.map} +1 -1
  185. package/dist/chunks/{overlay-CG1dMYtO.mjs → overlay-BMbhF-EC.mjs} +1 -1
  186. package/dist/chunks/{overlay-CG1dMYtO.mjs.map → overlay-BMbhF-EC.mjs.map} +1 -1
  187. package/dist/chunks/{password-strength-meter-_o1T1HLO.cjs → password-strength-meter-Be1c-dnK.cjs} +2 -3
  188. package/dist/chunks/{password-strength-meter-_o1T1HLO.cjs.map → password-strength-meter-Be1c-dnK.cjs.map} +1 -1
  189. package/dist/chunks/{password-strength-meter-CH6uQAuK.mjs → password-strength-meter-Q1Qr-4tz.mjs} +2 -2
  190. package/dist/chunks/{password-strength-meter-CH6uQAuK.mjs.map → password-strength-meter-Q1Qr-4tz.mjs.map} +1 -1
  191. package/dist/chunks/{progress-bar-FfdFVvTT.cjs → progress-bar-BsnX079N.cjs} +3 -3
  192. package/dist/chunks/{progress-bar-FfdFVvTT.cjs.map → progress-bar-BsnX079N.cjs.map} +1 -1
  193. package/dist/chunks/{progress-bar-BAvRSW1b.mjs → progress-bar-l5WpbpZf.mjs} +2 -2
  194. package/dist/chunks/{progress-bar-BAvRSW1b.mjs.map → progress-bar-l5WpbpZf.mjs.map} +1 -1
  195. package/dist/chunks/{radio-BMOnxnUS.mjs → radio-B94_TGtz.mjs} +2 -2
  196. package/dist/chunks/{radio-BMOnxnUS.mjs.map → radio-B94_TGtz.mjs.map} +1 -1
  197. package/dist/chunks/{radio-wagafWwx.cjs → radio-W_NiS_dO.cjs} +2 -3
  198. package/dist/chunks/{radio-wagafWwx.cjs.map → radio-W_NiS_dO.cjs.map} +1 -1
  199. package/dist/chunks/{select-zFFyNmlY.cjs → select-C5lkcrSB.cjs} +5 -6
  200. package/dist/chunks/{select-zFFyNmlY.cjs.map → select-C5lkcrSB.cjs.map} +1 -1
  201. package/dist/chunks/{select--DeSgPdn.mjs → select-DnSSxddm.mjs} +5 -5
  202. package/dist/chunks/{select--DeSgPdn.mjs.map → select-DnSSxddm.mjs.map} +1 -1
  203. package/dist/chunks/{sidebar-oemmRzCL.mjs → sidebar-C3Sx87wD.mjs} +10 -11
  204. package/dist/chunks/{sidebar-oemmRzCL.mjs.map → sidebar-C3Sx87wD.mjs.map} +1 -1
  205. package/dist/chunks/{sidebar-Cq7UbKJT.cjs → sidebar-DDRWkz5k.cjs} +10 -12
  206. package/dist/chunks/{sidebar-Cq7UbKJT.cjs.map → sidebar-DDRWkz5k.cjs.map} +1 -1
  207. package/dist/chunks/{skeleton-DWvVc17T.cjs → skeleton-B2u9c1xJ.cjs} +2 -3
  208. package/dist/chunks/{skeleton-DWvVc17T.cjs.map → skeleton-B2u9c1xJ.cjs.map} +1 -1
  209. package/dist/chunks/{skeleton-BsDMlWZG.mjs → skeleton-DVAlrOq2.mjs} +2 -2
  210. package/dist/chunks/{skeleton-BsDMlWZG.mjs.map → skeleton-DVAlrOq2.mjs.map} +1 -1
  211. package/dist/chunks/{spinners-DlMcokJa.mjs → spinners-BQtIp2ov.mjs} +2 -2
  212. package/dist/chunks/{spinners-DlMcokJa.mjs.map → spinners-BQtIp2ov.mjs.map} +1 -1
  213. package/dist/chunks/{spinners-DBAJliAj.cjs → spinners-BiebALzS.cjs} +2 -3
  214. package/dist/chunks/{spinners-DBAJliAj.cjs.map → spinners-BiebALzS.cjs.map} +1 -1
  215. package/dist/chunks/{splash-cursor-CQ6_HwHV.cjs → splash-cursor-8b7ORB2k.cjs} +2 -3
  216. package/dist/chunks/{splash-cursor-CQ6_HwHV.cjs.map → splash-cursor-8b7ORB2k.cjs.map} +1 -1
  217. package/dist/chunks/{splash-cursor-Bb7LSzaO.mjs → splash-cursor-CeZffMed.mjs} +2 -2
  218. package/dist/chunks/{splash-cursor-Bb7LSzaO.mjs.map → splash-cursor-CeZffMed.mjs.map} +1 -1
  219. package/dist/chunks/{spotlight-card-COfSD7ns.cjs → spotlight-card-BQjp7hO1.cjs} +2 -3
  220. package/dist/chunks/{spotlight-card-COfSD7ns.cjs.map → spotlight-card-BQjp7hO1.cjs.map} +1 -1
  221. package/dist/chunks/{spotlight-card-Bs0iiSLc.mjs → spotlight-card-DiPtBCAK.mjs} +2 -2
  222. package/dist/chunks/{spotlight-card-Bs0iiSLc.mjs.map → spotlight-card-DiPtBCAK.mjs.map} +1 -1
  223. package/dist/chunks/{stepper-CTteR-Kj.cjs → stepper-BuhQfQTH.cjs} +5 -6
  224. package/dist/chunks/{stepper-CTteR-Kj.cjs.map → stepper-BuhQfQTH.cjs.map} +1 -1
  225. package/dist/chunks/{stepper-B9NdZ6ZV.mjs → stepper-CVNcexxq.mjs} +5 -5
  226. package/dist/chunks/{stepper-B9NdZ6ZV.mjs.map → stepper-CVNcexxq.mjs.map} +1 -1
  227. package/dist/chunks/{sun-to-moon-button-lt-1vmWm.cjs → sun-to-moon-button-BzYGFhrg.cjs} +4 -5
  228. package/dist/chunks/{sun-to-moon-button-lt-1vmWm.cjs.map → sun-to-moon-button-BzYGFhrg.cjs.map} +1 -1
  229. package/dist/chunks/{sun-to-moon-button-DWHDpP5B.mjs → sun-to-moon-button-CRXBMFZb.mjs} +4 -4
  230. package/dist/chunks/{sun-to-moon-button-DWHDpP5B.mjs.map → sun-to-moon-button-CRXBMFZb.mjs.map} +1 -1
  231. package/dist/chunks/{switch-BbFl5b4t.cjs → switch-CEoT3MgX.cjs} +1 -2
  232. package/dist/chunks/{switch-BbFl5b4t.cjs.map → switch-CEoT3MgX.cjs.map} +1 -1
  233. package/dist/chunks/{switch--68scepb.mjs → switch-DUnNe4xP.mjs} +1 -1
  234. package/dist/chunks/{switch--68scepb.mjs.map → switch-DUnNe4xP.mjs.map} +1 -1
  235. package/dist/chunks/{textarea-U_JeSWI3.cjs → textarea-Bschfj24.cjs} +2 -3
  236. package/dist/chunks/{textarea-U_JeSWI3.cjs.map → textarea-Bschfj24.cjs.map} +1 -1
  237. package/dist/chunks/{textarea-CEj9voUJ.mjs → textarea-CfeKo5HA.mjs} +2 -2
  238. package/dist/chunks/{textarea-CEj9voUJ.mjs.map → textarea-CfeKo5HA.mjs.map} +1 -1
  239. package/dist/chunks/{theme-koPrLKQv.mjs → theme-BXML6jHE.mjs} +1 -1
  240. package/dist/chunks/{theme-koPrLKQv.mjs.map → theme-BXML6jHE.mjs.map} +1 -1
  241. package/dist/chunks/{theme-D6B-FaoE.cjs → theme-BzTaXYZ8.cjs} +1 -2
  242. package/dist/chunks/{theme-D6B-FaoE.cjs.map → theme-BzTaXYZ8.cjs.map} +1 -1
  243. package/dist/chunks/{toast-CyY8VZN7.mjs → toast-D1W0BvoH.mjs} +2 -2
  244. package/dist/chunks/{toast-CyY8VZN7.mjs.map → toast-D1W0BvoH.mjs.map} +1 -1
  245. package/dist/chunks/{toast-2yq4Q7-q.cjs → toast-DL8svc6q.cjs} +2 -3
  246. package/dist/chunks/{toast-2yq4Q7-q.cjs.map → toast-DL8svc6q.cjs.map} +1 -1
  247. package/dist/chunks/{truncated-text-CswjmrHZ.cjs → truncated-text-D0t4atw5.cjs} +3 -3
  248. package/dist/chunks/{truncated-text-CswjmrHZ.cjs.map → truncated-text-D0t4atw5.cjs.map} +1 -1
  249. package/dist/chunks/{truncated-text-DUYTW1KP.mjs → truncated-text-DIkg-8Vo.mjs} +2 -2
  250. package/dist/chunks/{truncated-text-DUYTW1KP.mjs.map → truncated-text-DIkg-8Vo.mjs.map} +1 -1
  251. package/dist/chunks/{typography-CFIiYk1d.cjs → typography-C5fYwhp2.cjs} +3 -3
  252. package/dist/chunks/{typography-CFIiYk1d.cjs.map → typography-C5fYwhp2.cjs.map} +1 -1
  253. package/dist/chunks/{typography-DHE9sUZ8.mjs → typography-Czi7t5y4.mjs} +2 -2
  254. package/dist/chunks/{typography-DHE9sUZ8.mjs.map → typography-Czi7t5y4.mjs.map} +1 -1
  255. package/dist/chunks/{utils-LRbEQHYs.cjs → utils-CoA0q63n.cjs} +84 -4
  256. package/dist/chunks/utils-CoA0q63n.cjs.map +1 -0
  257. package/dist/chunks/{utils-7S0u48mU.mjs → utils-Dc7j29ec.mjs} +84 -4
  258. package/dist/chunks/utils-Dc7j29ec.mjs.map +1 -0
  259. package/dist/color-palette.cjs +1 -1
  260. package/dist/color-palette.mjs +1 -1
  261. package/dist/combobox.cjs +1 -1
  262. package/dist/combobox.mjs +1 -1
  263. package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts +26 -0
  264. package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts.map +1 -0
  265. package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts +30 -0
  266. package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts.map +1 -0
  267. package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts +24 -0
  268. package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts.map +1 -0
  269. package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts +49 -0
  270. package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts.map +1 -0
  271. package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts +24 -0
  272. package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts.map +1 -0
  273. package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts +111 -2
  274. package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts.map +1 -1
  275. package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts +78 -0
  276. package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts.map +1 -0
  277. package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts +44 -0
  278. package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts.map +1 -0
  279. package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts +45 -0
  280. package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts.map +1 -0
  281. package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts +36 -0
  282. package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts.map +1 -0
  283. package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts +22 -0
  284. package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts.map +1 -0
  285. package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts +23 -0
  286. package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts.map +1 -0
  287. package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts +22 -0
  288. package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts.map +1 -0
  289. package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts +23 -0
  290. package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts.map +1 -0
  291. package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts +42 -0
  292. package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts.map +1 -0
  293. package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts +22 -0
  294. package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts.map +1 -0
  295. package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts +63 -0
  296. package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts.map +1 -0
  297. package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts +33 -0
  298. package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts.map +1 -0
  299. package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts +11 -0
  300. package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts.map +1 -0
  301. package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts +9 -0
  302. package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts.map +1 -0
  303. package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts +8 -0
  304. package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts.map +1 -0
  305. package/dist/components/data-display/dashboard-cards/index.d.ts +32 -1
  306. package/dist/components/data-display/dashboard-cards/index.d.ts.map +1 -1
  307. package/dist/components/forms/calendar/Calendar.d.ts +1 -1
  308. package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
  309. package/dist/components/forms/calendar/types.d.ts +6 -0
  310. package/dist/components/forms/calendar/types.d.ts.map +1 -1
  311. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  312. package/dist/components/layout/draggable-grid/DraggableGrid.d.ts +20 -0
  313. package/dist/components/layout/draggable-grid/DraggableGrid.d.ts.map +1 -0
  314. package/dist/components/layout/draggable-grid/index.d.ts +3 -0
  315. package/dist/components/layout/draggable-grid/index.d.ts.map +1 -0
  316. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts.map +1 -1
  317. package/dist/dashboard-cards.cjs +16 -1
  318. package/dist/dashboard-cards.mjs +2 -2
  319. package/dist/data-table.cjs +1 -1
  320. package/dist/data-table.mjs +1 -1
  321. package/dist/date-picker.cjs +1 -1
  322. package/dist/date-picker.mjs +1 -1
  323. package/dist/dialog.cjs +1 -1
  324. package/dist/dialog.mjs +1 -1
  325. package/dist/docs.cjs +13 -0
  326. package/dist/docs.cjs.map +1 -1
  327. package/dist/docs.d.ts.map +1 -1
  328. package/dist/docs.mjs +13 -0
  329. package/dist/docs.mjs.map +1 -1
  330. package/dist/draggable-grid.cjs +3 -0
  331. package/dist/draggable-grid.d.ts +2 -0
  332. package/dist/draggable-grid.mjs +2 -0
  333. package/dist/drawer.cjs +1 -1
  334. package/dist/drawer.mjs +1 -1
  335. package/dist/event-calendar.cjs +1 -1
  336. package/dist/event-calendar.mjs +1 -1
  337. package/dist/form.cjs +1 -1
  338. package/dist/form.mjs +1 -1
  339. package/dist/gradual-blur.cjs +1 -1
  340. package/dist/gradual-blur.mjs +1 -1
  341. package/dist/hover-border-gradient.cjs +1 -1
  342. package/dist/hover-border-gradient.mjs +1 -1
  343. package/dist/hover-card.cjs +1 -1
  344. package/dist/hover-card.mjs +1 -1
  345. package/dist/icons.cjs +2 -3
  346. package/dist/icons.mjs +1 -2
  347. package/dist/index.cjs +71 -56
  348. package/dist/index.cjs.map +1 -1
  349. package/dist/index.d.ts +7 -2
  350. package/dist/index.d.ts.map +1 -1
  351. package/dist/index.mjs +55 -55
  352. package/dist/index.mjs.map +1 -1
  353. package/dist/input.cjs +1 -1
  354. package/dist/input.mjs +1 -1
  355. package/dist/label.cjs +1 -1
  356. package/dist/label.mjs +1 -1
  357. package/dist/loading.cjs +1 -1
  358. package/dist/loading.mjs +1 -1
  359. package/dist/multi-select-combobox.cjs +1 -1
  360. package/dist/multi-select-combobox.mjs +1 -1
  361. package/dist/otp-input.cjs +1 -1
  362. package/dist/otp-input.mjs +1 -1
  363. package/dist/password-strength-meter.cjs +1 -1
  364. package/dist/password-strength-meter.mjs +1 -1
  365. package/dist/progress-bar.cjs +1 -1
  366. package/dist/progress-bar.mjs +1 -1
  367. package/dist/radio.cjs +1 -1
  368. package/dist/radio.mjs +1 -1
  369. package/dist/select.cjs +1 -1
  370. package/dist/select.mjs +1 -1
  371. package/dist/sidebar.cjs +1 -1
  372. package/dist/sidebar.mjs +1 -1
  373. package/dist/skeleton.cjs +1 -1
  374. package/dist/skeleton.mjs +1 -1
  375. package/dist/spinners.cjs +1 -1
  376. package/dist/spinners.mjs +1 -1
  377. package/dist/splash-cursor.cjs +1 -1
  378. package/dist/splash-cursor.mjs +1 -1
  379. package/dist/spotlight-card.cjs +1 -1
  380. package/dist/spotlight-card.mjs +1 -1
  381. package/dist/stepper.cjs +1 -1
  382. package/dist/stepper.mjs +1 -1
  383. package/dist/sun-to-moon-button.cjs +2 -2
  384. package/dist/sun-to-moon-button.mjs +2 -2
  385. package/dist/switch.cjs +1 -1
  386. package/dist/switch.mjs +1 -1
  387. package/dist/textarea.cjs +1 -1
  388. package/dist/textarea.mjs +1 -1
  389. package/dist/theme.cjs +1 -1
  390. package/dist/theme.mjs +1 -1
  391. package/dist/toast.cjs +1 -1
  392. package/dist/toast.mjs +1 -1
  393. package/dist/tooltip.cjs +1 -1
  394. package/dist/tooltip.mjs +1 -1
  395. package/dist/truncated-text.cjs +1 -1
  396. package/dist/truncated-text.mjs +1 -1
  397. package/dist/typography.cjs +1 -1
  398. package/dist/typography.mjs +1 -1
  399. package/dist/utils.cjs +1 -1
  400. package/dist/utils.mjs +1 -1
  401. package/package.json +34 -13
  402. package/dist/chunks/EllipsisVerticalIcon-BJw3MNkg.cjs +0 -51
  403. package/dist/chunks/EllipsisVerticalIcon-BJw3MNkg.cjs.map +0 -1
  404. package/dist/chunks/EllipsisVerticalIcon-C2b2KMfE.mjs +0 -45
  405. package/dist/chunks/EllipsisVerticalIcon-C2b2KMfE.mjs.map +0 -1
  406. package/dist/chunks/calendar-DCkikZYb.cjs +0 -184
  407. package/dist/chunks/calendar-DCkikZYb.cjs.map +0 -1
  408. package/dist/chunks/calendar-FxAmm_ao.mjs +0 -178
  409. package/dist/chunks/calendar-FxAmm_ao.mjs.map +0 -1
  410. package/dist/chunks/dashboard-cards-BnPt0gDW.mjs +0 -2428
  411. package/dist/chunks/dashboard-cards-BnPt0gDW.mjs.map +0 -1
  412. package/dist/chunks/dashboard-cards-DNWJPKRu.cjs +0 -2524
  413. package/dist/chunks/dashboard-cards-DNWJPKRu.cjs.map +0 -1
  414. package/dist/chunks/date-picker-3IDSmb9Z.mjs +0 -228
  415. package/dist/chunks/date-picker-3IDSmb9Z.mjs.map +0 -1
  416. package/dist/chunks/date-picker-_EVYpGga.cjs +0 -234
  417. package/dist/chunks/date-picker-_EVYpGga.cjs.map +0 -1
  418. package/dist/chunks/icons-JzMKLygv.mjs.map +0 -1
  419. package/dist/chunks/icons-ub9iu-JG.cjs.map +0 -1
  420. package/dist/chunks/utils-7S0u48mU.mjs.map +0 -1
  421. package/dist/chunks/utils-LRbEQHYs.cjs.map +0 -1
  422. /package/dist/chunks/{chunk-B_GkZjkl.cjs → chunk-D6vf50IK.cjs} +0 -0
@@ -1,2524 +0,0 @@
1
- require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-LRbEQHYs.cjs");
3
- const require_chartStyles = require("./chartStyles-BADmRKZo.cjs");
4
- const require_truncated_text = require("./truncated-text-CswjmrHZ.cjs");
5
- const require_EllipsisVerticalIcon = require("./EllipsisVerticalIcon-BJw3MNkg.cjs");
6
- const require_button = require("./button-uD87K76W.cjs");
7
- const require_Tooltip = require("./Tooltip-nnaiqJTT.cjs");
8
- let react = require("react");
9
- let react_jsx_runtime = require("react/jsx-runtime");
10
- let recharts = require("recharts");
11
- //#region src/components/data-display/dashboard-cards/StatCard.tsx
12
- var TrendBadge$3 = ({ value, direction }) => {
13
- const isUp = direction === "up";
14
- const color = isUp ? "var(--ds-color-success)" : "var(--ds-color-danger)";
15
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16
- className: "inline-flex items-center gap-1 rounded-sm border px-1 py-0.5 text-[11px] font-semibold leading-none",
17
- style: {
18
- color,
19
- borderColor: color,
20
- backgroundColor: isUp ? "var(--ds-color-success-subtle)" : "var(--ds-color-danger-subtle)"
21
- },
22
- "aria-label": `${value} ${isUp ? "increase" : "decrease"}`,
23
- children: [value, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
24
- width: "10",
25
- height: "10",
26
- viewBox: "0 0 10 10",
27
- fill: "none",
28
- "aria-hidden": "true",
29
- children: isUp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
30
- d: "M5 8V2M5 2L2 5M5 2L8 5",
31
- stroke: "currentColor",
32
- strokeWidth: "1.5",
33
- strokeLinecap: "round",
34
- strokeLinejoin: "round"
35
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
36
- d: "M5 2V8M5 8L2 5M5 8L8 5",
37
- stroke: "currentColor",
38
- strokeWidth: "1.5",
39
- strokeLinecap: "round",
40
- strokeLinejoin: "round"
41
- })
42
- })]
43
- });
44
- };
45
- var MenuButton = ({ onClick }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
46
- variant: "tertiary",
47
- size: "small",
48
- className: "shrink-0 p-0.5! text-ds-3",
49
- "aria-label": "More options",
50
- onClick,
51
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
52
- width: 18,
53
- height: 18
54
- })
55
- });
56
- var LegendDots = ({ items }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
57
- className: "flex items-center gap-3",
58
- children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59
- className: "flex items-center gap-1.5 text-xs text-ds-2",
60
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
61
- className: "inline-block h-2.5 w-2.5 shrink-0 rounded-full",
62
- style: { backgroundColor: item.color },
63
- "aria-hidden": "true"
64
- }), item.label]
65
- }, item.label))
66
- });
67
- var StatCard = ({ size = "md", title, badge, value, dateRange, chart, chartPosition = "side", chartClassName, legend, className, onMenuClick }) => {
68
- const base = require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className);
69
- if (size === "sm") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
70
- className: require_utils.mergeClassNames(base, "flex flex-col gap-7 p-5"),
71
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
72
- className: "flex items-start justify-between gap-2",
73
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
74
- className: "flex flex-wrap items-center gap-2",
75
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
76
- className: "text-sm font-semibold text-ds-1",
77
- children: title
78
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$3, {
79
- value: badge.value,
80
- direction: badge.direction
81
- })]
82
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuButton, { onClick: onMenuClick })]
83
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
84
- className: "flex flex-col gap-1",
85
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
86
- className: "text-2xl font-bold tracking-tight text-ds-1 leading-none",
87
- children: value
88
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
89
- className: "text-[10px] text-ds-3 mt-1",
90
- children: dateRange
91
- })]
92
- })]
93
- });
94
- if (size === "md") {
95
- const metricBlock = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
96
- className: "flex flex-col gap-1 min-w-0",
97
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
98
- className: "text-3xl font-bold tracking-tight text-ds-1 leading-none",
99
- children: value
100
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
101
- className: "text-[10px] text-ds-3 mt-1",
102
- children: dateRange
103
- })]
104
- });
105
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
106
- className: require_utils.mergeClassNames(base, "flex flex-col gap-3 p-5"),
107
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
108
- className: "flex items-start justify-between gap-2",
109
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
110
- className: "flex flex-wrap items-center gap-2",
111
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
112
- className: "text-sm font-semibold text-ds-1",
113
- children: title
114
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$3, {
115
- value: badge.value,
116
- direction: badge.direction
117
- })]
118
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuButton, { onClick: onMenuClick })]
119
- }), chartPosition === "bottom" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [metricBlock, chart && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
120
- className: require_utils.mergeClassNames("w-full pt-3", chartClassName),
121
- children: chart
122
- })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
123
- className: "flex items-end justify-between gap-3",
124
- children: [metricBlock, chart && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
125
- className: require_utils.mergeClassNames("h-[46px] w-[155px] shrink-0 overflow-hidden", chartClassName),
126
- children: chart
127
- })]
128
- })]
129
- });
130
- }
131
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
132
- className: require_utils.mergeClassNames(base, "flex flex-col p-5"),
133
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
134
- className: "flex flex-wrap items-start justify-between gap-x-6 gap-y-2 mb-4",
135
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
136
- className: "flex flex-col gap-1.5",
137
- children: [
138
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
139
- className: "flex flex-wrap items-center gap-2",
140
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
141
- className: "text-sm font-semibold text-ds-1",
142
- children: title
143
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$3, {
144
- value: badge.value,
145
- direction: badge.direction
146
- })]
147
- }),
148
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
149
- className: "text-3xl font-bold tracking-tight text-ds-1 leading-none",
150
- children: value
151
- }),
152
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
153
- className: "text-xs text-ds-3",
154
- children: dateRange
155
- })
156
- ]
157
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
158
- className: "flex items-center gap-4 ms-auto",
159
- children: [legend && legend.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LegendDots, { items: legend }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MenuButton, { onClick: onMenuClick })]
160
- })]
161
- }), chart && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
162
- className: require_utils.mergeClassNames("border-t border-ds-border-2 pt-4 w-full", chartClassName),
163
- children: chart
164
- })]
165
- });
166
- };
167
- //#endregion
168
- //#region src/components/data-display/dashboard-cards/ChartCard.tsx
169
- var ChartCard = ({ title, dateRange, legend, className, onMenuClick, children }) => {
170
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
171
- className: require_utils.mergeClassNames("flex flex-col gap-4 rounded-2xl border border-ds-border-2 bg-ds-surface-1 p-5", className),
172
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
173
- className: "flex flex-wrap items-start justify-between gap-x-6 gap-y-2",
174
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
175
- className: "flex flex-col gap-0.5",
176
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
177
- className: "text-sm font-semibold text-ds-color-fg",
178
- children: title
179
- }), dateRange && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
180
- className: "text-xs text-ds-color-fg-subtle",
181
- children: dateRange
182
- })]
183
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
184
- className: "flex items-center gap-4 ms-auto",
185
- children: [legend && legend.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
186
- className: "flex items-center gap-3",
187
- children: legend.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
188
- className: "flex items-center gap-1.5 text-xs text-ds-color-fg-muted",
189
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
190
- className: "inline-block h-2.5 w-2.5 rounded-full shrink-0",
191
- style: { backgroundColor: item.color },
192
- "aria-hidden": "true"
193
- }), item.label]
194
- }, item.label))
195
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
196
- variant: "tertiary",
197
- size: "small",
198
- className: "shrink-0 p-0.5! text-ds-color-fg-subtle",
199
- "aria-label": "More options",
200
- onClick: onMenuClick,
201
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
202
- width: 18,
203
- height: 18
204
- })
205
- })]
206
- })]
207
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
208
- className: "w-full",
209
- children
210
- })]
211
- });
212
- };
213
- //#endregion
214
- //#region src/components/data-display/dashboard-cards/TopProductsCard.tsx
215
- var RankBadge = ({ rank }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
216
- className: "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md border text-xs font-semibold border-ds-border-3/80 ",
217
- style: {
218
- borderColor: "var(--ds-color-accent)",
219
- color: "var(--ds-color-accent)"
220
- },
221
- "aria-label": `Rank ${rank}`,
222
- children: rank
223
- });
224
- var ProductImage = ({ src, alt }) => {
225
- if (src) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
226
- src,
227
- alt,
228
- className: "h-11 w-11 shrink-0 rounded-md object-contain bg-ds-color-bg-utility p-1"
229
- });
230
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
231
- className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-md bg-ds-color-bg-utility text-ds-color-fg-subtle text-lg",
232
- "aria-hidden": "true",
233
- children: "□"
234
- });
235
- };
236
- var TopProductsCard = ({ title = "Top Products", items, className, onMenuClick }) => {
237
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
238
- className: require_utils.mergeClassNames("flex flex-col rounded-lg border border-ds-border-3/80 bg-ds-surface-1 p-5", className),
239
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
240
- className: "mb-4 flex items-center justify-between",
241
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
242
- className: "text-sm font-semibold text-ds-color-fg",
243
- children: title
244
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
245
- variant: "tertiary",
246
- size: "small",
247
- className: "shrink-0 p-0.5! text-ds-color-fg-subtle",
248
- "aria-label": "More options",
249
- onClick: onMenuClick,
250
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
251
- width: 18,
252
- height: 18
253
- })
254
- })]
255
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
256
- className: "flex flex-col divide-y divide-ds-border-2",
257
- role: "list",
258
- children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
259
- className: "flex items-center gap-3 py-3 first:pt-0 last:pb-0",
260
- children: [
261
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProductImage, {
262
- src: item.image,
263
- alt: item.name
264
- }),
265
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
266
- className: "flex min-w-0 flex-1 flex-col gap-0.5",
267
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
268
- className: "truncate text-sm font-semibold text-ds-color-fg",
269
- children: item.name
270
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
271
- className: "truncate text-xs text-ds-color-fg-subtle",
272
- children: [
273
- item.category,
274
- " · ",
275
- item.soldCount.toLocaleString(),
276
- " sold"
277
- ]
278
- })]
279
- }),
280
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RankBadge, { rank: item.rank })
281
- ]
282
- }, item.id))
283
- })]
284
- });
285
- };
286
- //#endregion
287
- //#region src/components/data-display/dashboard-cards/EarningsCard.tsx
288
- var TrendBadge$2 = ({ value, direction }) => {
289
- const isUp = direction === "up";
290
- const color = isUp ? "var(--ds-color-success)" : "var(--ds-color-danger)";
291
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
292
- className: "inline-flex items-center gap-1 rounded-sm border px-1.5 py-0.5 text-[11px] font-semibold leading-none",
293
- style: {
294
- color,
295
- borderColor: color,
296
- backgroundColor: isUp ? "var(--ds-color-success-subtle)" : "var(--ds-color-danger-subtle)"
297
- },
298
- "aria-label": `${value} ${isUp ? "increase" : "decrease"}`,
299
- children: [value, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
300
- width: "10",
301
- height: "10",
302
- viewBox: "0 0 10 10",
303
- fill: "none",
304
- "aria-hidden": "true",
305
- children: isUp ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
306
- d: "M5 8V2M5 2L2 5M5 2L8 5",
307
- stroke: "currentColor",
308
- strokeWidth: "1.5",
309
- strokeLinecap: "round",
310
- strokeLinejoin: "round"
311
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
312
- d: "M5 2V8M5 8L2 5M5 8L8 5",
313
- stroke: "currentColor",
314
- strokeWidth: "1.5",
315
- strokeLinecap: "round",
316
- strokeLinejoin: "round"
317
- })
318
- })]
319
- });
320
- };
321
- var BarChartSection = ({ weeklyData, barSize = 16, height = 90 }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
322
- style: { height },
323
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
324
- width: "100%",
325
- height: "100%",
326
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
327
- data: weeklyData,
328
- barSize,
329
- barCategoryGap: "25%",
330
- margin: {
331
- top: 4,
332
- right: 0,
333
- left: 0,
334
- bottom: 0
335
- },
336
- children: [
337
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
338
- dataKey: "day",
339
- axisLine: false,
340
- tickLine: false,
341
- tick: {
342
- fill: "var(--ds-color-fg-muted)",
343
- fontSize: 10
344
- },
345
- dy: 6
346
- }),
347
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
348
- contentStyle: require_chartStyles.chartTooltipContentStyle,
349
- itemStyle: require_chartStyles.chartTooltipItemStyle,
350
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
351
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
352
- cursor: false
353
- }),
354
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
355
- dataKey: "value",
356
- radius: [
357
- 4,
358
- 4,
359
- 0,
360
- 0
361
- ],
362
- children: weeklyData.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.highlighted ? "var(--ds-color-accent)" : "var(--ds-color-accent-subtle)" }, i))
363
- })
364
- ]
365
- })
366
- })
367
- });
368
- var MetricsStrip = ({ metrics, large = false }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
369
- className: "mx-5 mb-5 rounded-lg border border-ds-border-3/60 bg-ds-surface-2/50 px-1 py-3",
370
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
371
- className: "grid grid-cols-3 divide-x divide-ds-border-3/50",
372
- children: metrics.slice(0, 3).map((metric, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
373
- className: require_utils.mergeClassNames("flex flex-col gap-2 px-4", large && "gap-3 px-5"),
374
- children: [
375
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
376
- className: "flex items-center gap-1.5",
377
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
378
- className: require_utils.mergeClassNames("inline-flex shrink-0 items-center justify-center rounded-full", large ? "h-6 w-6 text-xs" : "h-5 w-5 text-[10px]"),
379
- style: {
380
- backgroundColor: metric.color + "28",
381
- color: metric.color
382
- },
383
- "aria-hidden": "true",
384
- children: metric.icon
385
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
386
- className: require_utils.mergeClassNames("truncate text-ds-2", large ? "text-sm" : "text-xs"),
387
- children: metric.label
388
- })]
389
- }),
390
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
391
- className: require_utils.mergeClassNames("font-bold text-ds-1", large ? "text-base" : "text-sm"),
392
- children: metric.value
393
- }),
394
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
395
- className: "h-[3px] w-full overflow-hidden rounded-full bg-ds-border-3/50",
396
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
397
- className: "h-full rounded-full transition-all duration-500",
398
- style: {
399
- width: `${Math.min(100, Math.max(0, metric.progress))}%`,
400
- backgroundColor: metric.color
401
- }
402
- })
403
- })
404
- ]
405
- }, i))
406
- })
407
- });
408
- var EarningsCard = ({ title = "Earning Reports", subtitle = "Weekly Earnings Overview", value, badge, description, weeklyData, metrics, size = "md", className, onMenuClick }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
409
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
410
- children: [
411
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
412
- className: "flex items-start justify-between px-5 pb-3 pt-5",
413
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
414
- className: "text-base font-bold text-ds-1",
415
- children: title
416
- }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
417
- className: "mt-0.5 text-xs text-ds-3",
418
- children: subtitle
419
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
420
- variant: "tertiary",
421
- size: "small",
422
- className: "shrink-0 p-0.5! text-ds-3",
423
- "aria-label": "More options",
424
- onClick: onMenuClick,
425
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
426
- width: 18,
427
- height: 18
428
- })
429
- })]
430
- }),
431
- size === "md" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
432
- className: "flex items-start gap-4 px-5 pb-5",
433
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
434
- className: "min-w-0 flex-1",
435
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
436
- className: "flex items-center gap-2",
437
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
438
- className: "text-4xl font-bold tracking-tight text-ds-1",
439
- children: value
440
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$2, {
441
- value: badge.value,
442
- direction: badge.direction
443
- })]
444
- }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
445
- className: "mt-2 max-w-[180px] text-xs leading-relaxed text-ds-3",
446
- children: description
447
- })]
448
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
449
- className: "w-[185px] shrink-0",
450
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BarChartSection, {
451
- weeklyData,
452
- barSize: 16,
453
- height: 90
454
- })
455
- })]
456
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsStrip, { metrics })] }),
457
- size === "lg" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
458
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
459
- className: "px-5 pb-4",
460
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
461
- className: "flex items-center gap-3",
462
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
463
- className: "text-5xl font-bold tracking-tight text-ds-1",
464
- children: value
465
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$2, {
466
- value: badge.value,
467
- direction: badge.direction
468
- })]
469
- }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
470
- className: "mt-2 text-sm leading-relaxed text-ds-3",
471
- children: description
472
- })]
473
- }),
474
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
475
- className: "px-5 pb-5",
476
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BarChartSection, {
477
- weeklyData,
478
- barSize: 24,
479
- height: 160
480
- })
481
- }),
482
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricsStrip, {
483
- metrics,
484
- large: true
485
- })
486
- ] })
487
- ]
488
- });
489
- //#endregion
490
- //#region src/components/data-display/dashboard-cards/SupportTrackerCard.tsx
491
- function GaugeChart({ percentage, label = "Completed Task", size = 190 }) {
492
- const segments = 26;
493
- const filledCount = Math.round(percentage / 100 * segments);
494
- const cx = size / 2;
495
- const cy = size * .5;
496
- const radius = size * .4;
497
- const segW = size * .03;
498
- const segH = size * .1;
499
- const startAngle = 135;
500
- const step = 270 / segments;
501
- const viewH = Math.ceil(cy + radius * .78 + segH);
502
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
503
- width: "100%",
504
- viewBox: `0 0 ${size} ${viewH}`,
505
- style: { aspectRatio: `${size} / ${viewH}` },
506
- "aria-label": `${percentage}% ${label}`,
507
- role: "img",
508
- children: [
509
- Array.from({ length: segments }, (_, i) => {
510
- const angleDeg = startAngle + (i + .5) * step;
511
- const angleRad = angleDeg * Math.PI / 180;
512
- const x = cx + radius * Math.cos(angleRad);
513
- const y = cy + radius * Math.sin(angleRad);
514
- const filled = i < filledCount;
515
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
516
- x: -segW / 2,
517
- y: -segH / 2,
518
- width: segW,
519
- height: segH,
520
- rx: segW / 2,
521
- fill: filled ? "var(--ds-color-accent)" : "var(--ds-color-border-3)",
522
- opacity: filled ? 1 : .45,
523
- transform: `translate(${x}, ${y}) rotate(${angleDeg - 90})`
524
- }, i);
525
- }),
526
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("text", {
527
- x: cx,
528
- y: cy - size * .04,
529
- textAnchor: "middle",
530
- dominantBaseline: "middle",
531
- fontSize: size * .085,
532
- fill: "var(--ds-color-fg-muted)",
533
- children: label
534
- }),
535
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("text", {
536
- x: cx,
537
- y: cy + size * .12,
538
- textAnchor: "middle",
539
- dominantBaseline: "middle",
540
- fontSize: size * .22,
541
- fontWeight: "700",
542
- fill: "var(--ds-color-fg)",
543
- children: [percentage, "%"]
544
- })
545
- ]
546
- });
547
- }
548
- var SupportTrackerCard = ({ title = "Support Tracker", subtitle = "Last 7 Days", total, totalLabel = "Total Tickets", items, percentage, completedLabel = "Completed Task", className, onMenuClick }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
549
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
550
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
551
- className: "flex items-start justify-between px-5 pb-3 pt-5",
552
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
553
- className: "text-base font-bold text-ds-1",
554
- children: title
555
- }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
556
- className: "mt-0.5 text-xs text-ds-3",
557
- children: subtitle
558
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
559
- variant: "tertiary",
560
- size: "small",
561
- className: "shrink-0 p-0.5! text-ds-3",
562
- "aria-label": "More options",
563
- onClick: onMenuClick,
564
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
565
- width: 18,
566
- height: 18
567
- })
568
- })]
569
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
570
- className: "flex items-center gap-3 px-5 pb-6",
571
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
572
- className: "flex flex-[1_1_0] flex-col gap-5 min-w-0",
573
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
574
- className: "text-4xl font-bold tracking-tight text-ds-1",
575
- children: total
576
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
577
- className: "mt-0.5 text-xs text-ds-3",
578
- children: totalLabel
579
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
580
- className: "flex flex-col gap-3",
581
- children: items.map((item, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
582
- className: "flex items-center gap-3",
583
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
584
- className: "inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-md",
585
- style: {
586
- backgroundColor: item.iconColor + "22",
587
- color: item.iconColor
588
- },
589
- "aria-hidden": "true",
590
- children: item.icon
591
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
592
- className: "min-w-0",
593
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Tooltip.Tooltip, {
594
- content: item.label,
595
- position: "top",
596
- delayShow: 400,
597
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_truncated_text.TruncatedText, {
598
- showTitleOnHover: true,
599
- className: "text-sm font-semibold text-ds-1",
600
- children: item.label
601
- })
602
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
603
- className: "text-xs text-ds-3",
604
- children: item.value
605
- })]
606
- })]
607
- }, i))
608
- })]
609
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
610
- className: "flex-[1_1_0] min-w-0",
611
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GaugeChart, {
612
- percentage,
613
- label: completedLabel,
614
- size: 190
615
- })
616
- })]
617
- })]
618
- });
619
- //#endregion
620
- //#region src/components/data-display/dashboard-cards/SalesOverviewCard.tsx
621
- var TrendBadge$1 = ({ value, direction }) => {
622
- const isUp = direction === "up";
623
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
624
- className: "text-sm font-semibold",
625
- style: {
626
- color: isUp ? "var(--ds-color-success)" : "var(--ds-color-danger)",
627
- backgroundColor: isUp ? "var(--ds-color-success-subtle)" : "var(--ds-color-danger-subtle)"
628
- },
629
- "aria-label": `${value} ${isUp ? "increase" : "decrease"}`,
630
- children: value
631
- });
632
- };
633
- function parsePercent(s) {
634
- return parseFloat(s.replace("%", "")) || 0;
635
- }
636
- var SalesOverviewCard = ({ title = "Sales Overview", badge, value, leftMetric, rightMetric, leftProgress, vsLabel = "VS", className }) => {
637
- const leftPct = parsePercent(leftMetric.percentage);
638
- const total = leftPct + parsePercent(rightMetric.percentage);
639
- const resolvedLeftProgress = leftProgress ?? (total > 0 ? leftPct / total * 100 : 50);
640
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
641
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1 p-5", className),
642
- children: [
643
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
644
- className: "mb-1 flex items-center justify-between gap-2",
645
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
646
- className: "text-sm font-semibold text-ds-1",
647
- children: title
648
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge$1, {
649
- value: badge.value,
650
- direction: badge.direction
651
- })]
652
- }),
653
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
654
- className: "mb-5 text-3xl font-bold tracking-tight text-ds-1",
655
- children: value
656
- }),
657
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
658
- className: "relative mb-5 flex items-start",
659
- children: [
660
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
661
- className: "flex flex-1 flex-col gap-1",
662
- children: [
663
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
664
- className: "flex items-center gap-1.5 text-xs text-ds-2",
665
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
666
- className: "inline-flex h-6 w-6 items-center justify-center rounded-md",
667
- style: {
668
- backgroundColor: leftMetric.color + "20",
669
- color: leftMetric.color
670
- },
671
- "aria-hidden": "true",
672
- children: leftMetric.icon
673
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
674
- className: "font-medium",
675
- children: leftMetric.label
676
- })]
677
- }),
678
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
679
- className: "text-2xl font-bold text-ds-1",
680
- children: leftMetric.percentage
681
- }),
682
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
683
- className: "text-xs text-ds-3",
684
- children: leftMetric.count
685
- })
686
- ]
687
- }),
688
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
689
- className: "relative flex flex-col items-center self-stretch",
690
- children: [
691
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "w-px flex-1 bg-ds-border-3" }),
692
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
693
- className: "my-2 flex h-7 w-7 items-center justify-center rounded-full border border-ds-border-3 bg-ds-surface-1 text-[9px] font-bold text-ds-3",
694
- children: vsLabel
695
- }),
696
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "w-px flex-1 bg-ds-border-3" })
697
- ]
698
- }),
699
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
700
- className: "flex flex-1 flex-col items-end gap-1",
701
- children: [
702
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
703
- className: "flex items-center gap-1.5 text-xs text-ds-2",
704
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
705
- className: "font-medium",
706
- children: rightMetric.label
707
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
708
- className: "inline-flex h-6 w-6 items-center justify-center rounded-md",
709
- style: {
710
- backgroundColor: rightMetric.color + "20",
711
- color: rightMetric.color
712
- },
713
- "aria-hidden": "true",
714
- children: rightMetric.icon
715
- })]
716
- }),
717
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
718
- className: "text-2xl font-bold text-ds-1",
719
- children: rightMetric.percentage
720
- }),
721
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
722
- className: "text-xs text-ds-3",
723
- children: rightMetric.count
724
- })
725
- ]
726
- })
727
- ]
728
- }),
729
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
730
- className: "flex h-2 w-full overflow-hidden rounded-full",
731
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
732
- className: "h-full rounded-l-full transition-all duration-500",
733
- style: {
734
- width: `${resolvedLeftProgress}%`,
735
- backgroundColor: leftMetric.color
736
- }
737
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
738
- className: "h-full flex-1 rounded-r-full transition-all duration-500",
739
- style: { backgroundColor: rightMetric.color }
740
- })]
741
- })
742
- ]
743
- });
744
- };
745
- //#endregion
746
- //#region src/components/data-display/dashboard-cards/RevenueGrowthCard.tsx
747
- var TrendBadge = ({ value, direction, color, bg }) => {
748
- const isUp = direction === "up";
749
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
750
- className: "inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs font-semibold",
751
- style: {
752
- color: color ?? (isUp ? "var(--ds-color-success)" : "var(--ds-color-danger)"),
753
- backgroundColor: bg ?? (isUp ? "var(--ds-color-success-subtle)" : "var(--ds-color-danger-subtle)")
754
- },
755
- "aria-label": `${value} ${isUp ? "increase" : "decrease"}`,
756
- children: value
757
- });
758
- };
759
- var RevenueGrowthCard = ({ title = "Revenue Growth", subtitle = "Weekly Report", value, badge, weeklyData, highlightColor = "var(--ds-color-success)", barColor, className }) => {
760
- const resolvedBarColor = barColor ?? highlightColor + "38";
761
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
762
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1 p-5", className),
763
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
764
- className: "mb-4",
765
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
766
- className: "text-base font-bold text-ds-1",
767
- children: title
768
- }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
769
- className: "mt-0.5 text-xs text-ds-3",
770
- children: subtitle
771
- })]
772
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
773
- className: "flex items-end gap-4",
774
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
775
- className: "flex flex-col gap-2",
776
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
777
- className: "text-4xl font-bold tracking-tight text-ds-1",
778
- children: value
779
- }), badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendBadge, {
780
- value: badge.value,
781
- direction: badge.direction,
782
- color: highlightColor,
783
- bg: highlightColor + "22"
784
- })]
785
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
786
- className: "min-w-0 flex-1 pb-1",
787
- style: { height: 100 },
788
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
789
- width: "100%",
790
- height: "100%",
791
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
792
- data: weeklyData,
793
- barSize: 14,
794
- barCategoryGap: "25%",
795
- margin: {
796
- top: 4,
797
- right: 0,
798
- left: 0,
799
- bottom: 0
800
- },
801
- children: [
802
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
803
- dataKey: "day",
804
- axisLine: false,
805
- tickLine: false,
806
- tick: {
807
- fill: "var(--ds-color-fg-muted)",
808
- fontSize: 10
809
- },
810
- dy: 6
811
- }),
812
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
813
- contentStyle: require_chartStyles.chartTooltipContentStyle,
814
- itemStyle: require_chartStyles.chartTooltipItemStyle,
815
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
816
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
817
- cursor: false
818
- }),
819
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
820
- dataKey: "value",
821
- radius: [
822
- 4,
823
- 4,
824
- 0,
825
- 0
826
- ],
827
- children: weeklyData.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.highlighted ? highlightColor : resolvedBarColor }, i))
828
- })
829
- ]
830
- })
831
- })
832
- })]
833
- })]
834
- });
835
- };
836
- //#endregion
837
- //#region src/components/data-display/dashboard-cards/EarningReportsTabsCard.tsx
838
- function defaultKFormatter(value) {
839
- if (value >= 1e3) return `${Math.round(value / 1e3)}k`;
840
- return String(value);
841
- }
842
- var EarningReportsTabsCard = ({ title = "Earning Reports", subtitle = "Yearly Earnings Overview", tabs, selectedTabId, onTabChange, defaultTabId, yAxisFormatter = defaultKFormatter, barLabelFormatter, showAddTab = true, onAddTab, className, onMenuClick }) => {
843
- const [internalId, setInternalId] = (0, react.useState)(defaultTabId ?? tabs[0]?.id ?? "");
844
- const isControlled = selectedTabId !== void 0;
845
- const activeId = isControlled ? selectedTabId : internalId;
846
- const handleTabChange = (id) => {
847
- if (!isControlled) setInternalId(id);
848
- onTabChange?.(id);
849
- };
850
- const activeTab = tabs.find((t) => t.id === activeId) ?? tabs[0];
851
- const labelFormatter = barLabelFormatter ?? yAxisFormatter;
852
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
853
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
854
- children: [
855
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
856
- className: "flex items-start justify-between px-5 pb-4 pt-5",
857
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
858
- className: "text-base font-bold text-ds-1",
859
- children: title
860
- }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
861
- className: "mt-0.5 text-xs text-ds-3",
862
- children: subtitle
863
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
864
- variant: "tertiary",
865
- size: "small",
866
- className: "shrink-0 p-0.5! text-ds-3",
867
- "aria-label": "More options",
868
- onClick: onMenuClick,
869
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
870
- width: 18,
871
- height: 18
872
- })
873
- })]
874
- }),
875
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
876
- className: "flex items-center gap-3 overflow-x-auto px-5 pb-5",
877
- children: [tabs.map((tab) => {
878
- const isActive = tab.id === activeId;
879
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
880
- variant: "tertiary",
881
- onClick: () => handleTabChange(tab.id),
882
- className: require_utils.mergeClassNames("min-w-[72px] flex-col gap-1.5 rounded-lg border p-3 transition-colors hover:opacity-100", isActive ? "border-ds-accent bg-ds-accent-subtle text-ds-accent" : "border-ds-border-3 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/30 hover:bg-ds-surface-2"),
883
- "aria-pressed": isActive,
884
- "aria-label": tab.label,
885
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
886
- className: "flex h-6 w-6 items-center justify-center",
887
- children: tab.icon
888
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
889
- className: "text-xs font-semibold",
890
- children: tab.label
891
- })]
892
- }, tab.id);
893
- }), showAddTab && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
894
- variant: "tertiary",
895
- onClick: onAddTab,
896
- className: "min-w-[72px] flex-col gap-1.5 rounded-lg border border-dashed border-ds-border-3 p-3 text-ds-3 transition-colors hover:border-ds-border-2 hover:bg-ds-surface-2 hover:text-ds-2 hover:opacity-100",
897
- "aria-label": "Add category",
898
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
899
- className: "flex h-6 w-6 items-center justify-center text-lg font-light",
900
- children: "+"
901
- })
902
- })]
903
- }),
904
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
905
- className: "px-2 pb-5",
906
- style: { height: 280 },
907
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
908
- width: "100%",
909
- height: "100%",
910
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
911
- data: activeTab?.chartData ?? [],
912
- barSize: 36,
913
- barCategoryGap: "25%",
914
- margin: {
915
- top: 28,
916
- right: 16,
917
- left: 0,
918
- bottom: 0
919
- },
920
- children: [
921
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.CartesianGrid, {
922
- strokeDasharray: "3 3",
923
- vertical: false,
924
- stroke: "var(--ds-color-border)",
925
- opacity: .5
926
- }),
927
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
928
- dataKey: "name",
929
- axisLine: false,
930
- tickLine: false,
931
- tick: {
932
- fill: "var(--ds-color-fg-muted)",
933
- fontSize: 12
934
- },
935
- dy: 10
936
- }),
937
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
938
- axisLine: false,
939
- tickLine: false,
940
- tickFormatter: yAxisFormatter,
941
- tick: {
942
- fill: "var(--ds-color-fg-muted)",
943
- fontSize: 11
944
- },
945
- dx: -4
946
- }),
947
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
948
- contentStyle: require_chartStyles.chartTooltipContentStyle,
949
- itemStyle: require_chartStyles.chartTooltipItemStyle,
950
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
951
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
952
- cursor: {
953
- fill: "var(--ds-color-accent)",
954
- fillOpacity: .06
955
- },
956
- formatter: (v) => [labelFormatter(Number(v)), activeTab?.label]
957
- }),
958
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.Bar, {
959
- dataKey: "value",
960
- radius: [
961
- 4,
962
- 4,
963
- 0,
964
- 0
965
- ],
966
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.LabelList, {
967
- dataKey: "value",
968
- position: "top",
969
- formatter: (v) => labelFormatter(Number(v)),
970
- style: {
971
- fontSize: 11,
972
- fill: "var(--ds-color-fg-muted)",
973
- fontWeight: 600
974
- }
975
- }), (activeTab?.chartData ?? []).map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.highlighted ? "var(--ds-color-accent)" : "var(--ds-color-accent-subtle)" }, i))]
976
- })
977
- ]
978
- })
979
- })
980
- })
981
- ]
982
- });
983
- };
984
- //#endregion
985
- //#region src/components/data-display/dashboard-cards/TopicsCard.tsx
986
- function BarLabel({ x = 0, y = 0, width = 0, height = 0, value = "" }) {
987
- const pad = 10;
988
- const availW = width - pad * 2;
989
- if (availW < 24) return null;
990
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("foreignObject", {
991
- x: x + pad,
992
- y,
993
- width: availW,
994
- height,
995
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
996
- style: {
997
- height: "100%",
998
- display: "flex",
999
- alignItems: "center",
1000
- overflow: "hidden"
1001
- },
1002
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_truncated_text.TruncatedText, {
1003
- showTitleOnHover: true,
1004
- style: {
1005
- color: "#fff",
1006
- fontSize: 12,
1007
- fontWeight: 600,
1008
- lineHeight: 1
1009
- },
1010
- children: value
1011
- })
1012
- })
1013
- });
1014
- }
1015
- var TopicsCard = ({ title = "Topic you are interested in", items, xTickFormatter = (v) => `${v}%`, className, onMenuClick }) => {
1016
- const chartData = [...items].sort((a, b) => b.percentage - a.percentage).map((item, i) => ({
1017
- ...item,
1018
- rank: items.length - i
1019
- }));
1020
- const maxValue = Math.max(...items.map((it) => it.percentage), 1);
1021
- const xMax = Math.ceil(maxValue / 7) * 7;
1022
- const xTicks = Array.from({ length: Math.floor(xMax / 7) + 1 }, (_, i) => i * 7);
1023
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1024
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1025
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1026
- className: "flex items-start justify-between px-5 pb-4 pt-5",
1027
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1028
- className: "text-base font-bold text-ds-1",
1029
- children: title
1030
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1031
- variant: "tertiary",
1032
- size: "small",
1033
- className: "shrink-0 p-0.5! text-ds-3",
1034
- "aria-label": "More options",
1035
- onClick: onMenuClick,
1036
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
1037
- width: 18,
1038
- height: 18
1039
- })
1040
- })]
1041
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1042
- className: "flex items-center gap-4 px-5 pb-6",
1043
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1044
- className: "min-w-0 flex-1",
1045
- style: { height: items.length * 42 + 32 },
1046
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
1047
- width: "100%",
1048
- height: "100%",
1049
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
1050
- data: chartData,
1051
- layout: "vertical",
1052
- barSize: 28,
1053
- barCategoryGap: "20%",
1054
- margin: {
1055
- top: 0,
1056
- right: 16,
1057
- left: 8,
1058
- bottom: 24
1059
- },
1060
- children: [
1061
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.CartesianGrid, {
1062
- strokeDasharray: "3 3",
1063
- horizontal: false,
1064
- stroke: "var(--ds-color-border)",
1065
- opacity: .5
1066
- }),
1067
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
1068
- type: "number",
1069
- domain: [0, xMax],
1070
- ticks: xTicks,
1071
- tickFormatter: xTickFormatter,
1072
- axisLine: false,
1073
- tickLine: false,
1074
- tick: {
1075
- fill: "var(--ds-color-fg-muted)",
1076
- fontSize: 11
1077
- },
1078
- dy: 10
1079
- }),
1080
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
1081
- type: "category",
1082
- dataKey: "rank",
1083
- axisLine: false,
1084
- tickLine: false,
1085
- tick: {
1086
- fill: "var(--ds-color-fg-muted)",
1087
- fontSize: 11
1088
- },
1089
- dx: -4,
1090
- width: 16
1091
- }),
1092
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
1093
- contentStyle: require_chartStyles.chartTooltipContentStyle,
1094
- itemStyle: require_chartStyles.chartTooltipItemStyle,
1095
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
1096
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
1097
- cursor: { fill: "rgba(0,0,0,0.04)" },
1098
- formatter: (v, _name, props) => [`${Number(v)}%`, props.payload?.label ?? ""],
1099
- labelFormatter: () => ""
1100
- }),
1101
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.Bar, {
1102
- dataKey: "percentage",
1103
- radius: [
1104
- 0,
1105
- 4,
1106
- 4,
1107
- 0
1108
- ],
1109
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.LabelList, {
1110
- dataKey: "label",
1111
- content: (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BarLabel, { ...props })
1112
- }), chartData.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.color }, i))]
1113
- })
1114
- ]
1115
- })
1116
- })
1117
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1118
- className: "grid shrink-0 grid-cols-2 gap-x-6 gap-y-4",
1119
- children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1120
- className: "flex flex-col gap-0.5",
1121
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1122
- className: "flex items-center gap-1.5",
1123
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1124
- className: "inline-block h-2.5 w-2.5 shrink-0 rounded-full",
1125
- style: { backgroundColor: item.color },
1126
- "aria-hidden": "true"
1127
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1128
- className: "text-xs text-ds-2",
1129
- children: item.label
1130
- })]
1131
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
1132
- className: "ps-4 text-sm font-bold text-ds-1",
1133
- children: [item.percentage, "%"]
1134
- })]
1135
- }, item.label))
1136
- })]
1137
- })]
1138
- });
1139
- };
1140
- //#endregion
1141
- //#region src/components/data-display/dashboard-cards/ShipmentStatisticsCard.tsx
1142
- var ChevronDownIcon$2 = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1143
- width: "13",
1144
- height: "13",
1145
- viewBox: "0 0 24 24",
1146
- fill: "none",
1147
- stroke: "currentColor",
1148
- strokeWidth: "2.5",
1149
- strokeLinecap: "round",
1150
- strokeLinejoin: "round",
1151
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("polyline", { points: "6 9 12 15 18 9" })
1152
- });
1153
- var ShipmentStatisticsCard = ({ title = "Shipment statistics", subtitle, data, months = [
1154
- "January",
1155
- "February",
1156
- "March",
1157
- "April",
1158
- "May",
1159
- "June",
1160
- "July",
1161
- "August",
1162
- "September",
1163
- "October",
1164
- "November",
1165
- "December"
1166
- ], selectedMonth: controlledMonth, onMonthChange, defaultMonth, yAxisFormatter = (v) => `${v}%`, shipmentColor = "#FFB400", deliveryColor = "#7367F0", shipmentLabel = "Shipment", deliveryLabel = "Delivery", className }) => {
1167
- const isControlled = controlledMonth !== void 0;
1168
- const [internalMonth, setInternalMonth] = (0, react.useState)(defaultMonth ?? months[0] ?? "");
1169
- const activeMonth = isControlled ? controlledMonth : internalMonth;
1170
- const [dropdownOpen, setDropdownOpen] = (0, react.useState)(false);
1171
- const dropdownRef = (0, react.useRef)(null);
1172
- (0, react.useEffect)(() => {
1173
- function handleClickOutside(e) {
1174
- if (dropdownRef.current && !dropdownRef.current.contains(e.target)) setDropdownOpen(false);
1175
- }
1176
- if (dropdownOpen) document.addEventListener("mousedown", handleClickOutside);
1177
- return () => document.removeEventListener("mousedown", handleClickOutside);
1178
- }, [dropdownOpen]);
1179
- const handleMonthSelect = (m) => {
1180
- if (!isControlled) setInternalMonth(m);
1181
- onMonthChange?.(m);
1182
- setDropdownOpen(false);
1183
- };
1184
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1185
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1 p-5", className),
1186
- children: [
1187
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1188
- className: "mb-5 flex items-start justify-between gap-4",
1189
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1190
- className: "text-lg font-bold text-ds-1",
1191
- children: title
1192
- }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1193
- className: "mt-0.5 text-sm text-ds-3",
1194
- children: subtitle
1195
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1196
- ref: dropdownRef,
1197
- className: "relative shrink-0",
1198
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
1199
- variant: "tertiary",
1200
- size: "small",
1201
- onClick: () => setDropdownOpen((o) => !o),
1202
- className: "gap-1.5 rounded-md border border-ds-border-accent/30 bg-ds-accent-subtle px-3 py-1.5 text-sm font-semibold text-ds-accent hover:bg-ds-accent-subtle/80 hover:opacity-100",
1203
- "aria-haspopup": "listbox",
1204
- "aria-expanded": dropdownOpen,
1205
- children: [activeMonth, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1206
- className: require_utils.mergeClassNames("transition-transform duration-150", dropdownOpen ? "rotate-180" : ""),
1207
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon$2, {})
1208
- })]
1209
- }), dropdownOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1210
- role: "listbox",
1211
- className: "absolute end-0 top-full z-20 mt-1 max-h-48 min-w-[130px] overflow-y-auto rounded-md border border-ds-border-2 bg-ds-surface-1 py-1 shadow-lg",
1212
- children: months.map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1213
- variant: "tertiary",
1214
- size: "small",
1215
- role: "option",
1216
- "aria-selected": m === activeMonth,
1217
- onClick: () => handleMonthSelect(m),
1218
- className: require_utils.mergeClassNames("w-full justify-start rounded-none px-3 py-1.5 text-start text-sm hover:bg-ds-surface-2 hover:opacity-100", m === activeMonth ? "font-semibold text-ds-accent" : "text-ds-2"),
1219
- children: m
1220
- }, m))
1221
- })]
1222
- })]
1223
- }),
1224
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1225
- style: { height: 260 },
1226
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
1227
- width: "100%",
1228
- height: "100%",
1229
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.ComposedChart, {
1230
- data,
1231
- barSize: 22,
1232
- barCategoryGap: "30%",
1233
- margin: {
1234
- top: 8,
1235
- right: 8,
1236
- left: 0,
1237
- bottom: 0
1238
- },
1239
- children: [
1240
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.CartesianGrid, {
1241
- strokeDasharray: "3 3",
1242
- vertical: false,
1243
- stroke: "var(--ds-color-border)",
1244
- opacity: .5
1245
- }),
1246
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
1247
- dataKey: "date",
1248
- axisLine: false,
1249
- tickLine: false,
1250
- tick: {
1251
- fill: "var(--ds-color-fg-muted)",
1252
- fontSize: 12
1253
- },
1254
- dy: 10
1255
- }),
1256
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
1257
- axisLine: false,
1258
- tickLine: false,
1259
- tickFormatter: yAxisFormatter,
1260
- tick: {
1261
- fill: "var(--ds-color-fg-muted)",
1262
- fontSize: 11
1263
- },
1264
- dx: -4,
1265
- domain: [0, "auto"]
1266
- }),
1267
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
1268
- contentStyle: require_chartStyles.chartTooltipContentStyle,
1269
- itemStyle: require_chartStyles.chartTooltipItemStyle,
1270
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
1271
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
1272
- cursor: { fill: "rgba(0,0,0,0.04)" },
1273
- formatter: (v, name) => [yAxisFormatter(Number(v)), name === "shipment" ? shipmentLabel : deliveryLabel]
1274
- }),
1275
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
1276
- dataKey: "shipment",
1277
- fill: shipmentColor,
1278
- radius: [
1279
- 4,
1280
- 4,
1281
- 0,
1282
- 0
1283
- ]
1284
- }),
1285
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Line, {
1286
- type: "monotone",
1287
- dataKey: "delivery",
1288
- stroke: deliveryColor,
1289
- strokeWidth: 2.5,
1290
- dot: {
1291
- r: 3.5,
1292
- fill: deliveryColor,
1293
- strokeWidth: 0
1294
- },
1295
- activeDot: {
1296
- r: 5,
1297
- fill: deliveryColor,
1298
- strokeWidth: 0
1299
- }
1300
- })
1301
- ]
1302
- })
1303
- })
1304
- }),
1305
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1306
- className: "mt-4 flex items-center justify-center gap-6",
1307
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1308
- className: "flex items-center gap-2",
1309
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1310
- className: "inline-block h-2.5 w-2.5 shrink-0 rounded-full",
1311
- style: { backgroundColor: shipmentColor },
1312
- "aria-hidden": "true"
1313
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1314
- className: "text-sm text-ds-2",
1315
- children: shipmentLabel
1316
- })]
1317
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1318
- className: "flex items-center gap-2",
1319
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1320
- className: "inline-block h-2.5 w-2.5 shrink-0 rounded-full",
1321
- style: { backgroundColor: deliveryColor },
1322
- "aria-hidden": "true"
1323
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1324
- className: "text-sm text-ds-2",
1325
- children: deliveryLabel
1326
- })]
1327
- })]
1328
- })
1329
- ]
1330
- });
1331
- };
1332
- //#endregion
1333
- //#region src/components/data-display/dashboard-cards/VehicleConditionCard.tsx
1334
- var MiniGauge = ({ percentage, color, size = 62 }) => {
1335
- const strokeWidth = 4;
1336
- const r = (size - strokeWidth * 2) / 2;
1337
- const cx = size / 2;
1338
- const cy = size / 2;
1339
- const circumference = 2 * Math.PI * r;
1340
- const clamped = Math.max(0, Math.min(100, percentage));
1341
- const dashOffset = circumference - clamped / 100 * circumference;
1342
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
1343
- width: size,
1344
- height: size,
1345
- viewBox: `0 0 ${size} ${size}`,
1346
- "aria-hidden": "true",
1347
- children: [
1348
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
1349
- cx,
1350
- cy,
1351
- r,
1352
- fill: "none",
1353
- stroke: "var(--ds-color-border)",
1354
- strokeWidth
1355
- }),
1356
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
1357
- cx,
1358
- cy,
1359
- r,
1360
- fill: "none",
1361
- stroke: color,
1362
- strokeWidth,
1363
- strokeDasharray: circumference,
1364
- strokeDashoffset: dashOffset,
1365
- strokeLinecap: "round",
1366
- transform: `rotate(-90 ${cx} ${cy})`
1367
- }),
1368
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("text", {
1369
- x: cx,
1370
- y: cy,
1371
- textAnchor: "middle",
1372
- dominantBaseline: "middle",
1373
- fontSize: size * .21,
1374
- fontWeight: "700",
1375
- fill: "var(--ds-color-fg)",
1376
- children: [clamped, "%"]
1377
- })
1378
- ]
1379
- });
1380
- };
1381
- var VehicleConditionCard = ({ title = "Vehicle Condition", items, className, onMenuClick }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1382
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1383
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1384
- className: "flex items-start justify-between px-5 pb-2 pt-5",
1385
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1386
- className: "text-base font-bold text-ds-1",
1387
- children: title
1388
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1389
- variant: "tertiary",
1390
- size: "small",
1391
- className: "shrink-0 p-0.5! text-ds-3",
1392
- "aria-label": "More options",
1393
- onClick: onMenuClick,
1394
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
1395
- width: 18,
1396
- height: 18
1397
- })
1398
- })]
1399
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1400
- className: "divide-y divide-ds-border-3/50 px-5 pb-4",
1401
- children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1402
- className: "flex items-center gap-4 py-3",
1403
- children: [
1404
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1405
- className: "shrink-0",
1406
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MiniGauge, {
1407
- percentage: item.percentage,
1408
- color: item.color
1409
- })
1410
- }),
1411
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1412
- className: "min-w-0 flex-1",
1413
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1414
- className: "text-sm font-semibold leading-tight",
1415
- style: { color: item.color },
1416
- children: item.label
1417
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1418
- className: "mt-0.5 text-xs text-ds-3",
1419
- children: item.sublabel
1420
- })]
1421
- }),
1422
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1423
- className: "shrink-0 rounded-md bg-ds-surface-2 px-2.5 py-1 text-xs font-semibold text-ds-2",
1424
- children: item.badge
1425
- })
1426
- ]
1427
- }, item.label))
1428
- })]
1429
- });
1430
- //#endregion
1431
- //#region src/components/data-display/dashboard-cards/VehiclesOverviewCard.tsx
1432
- var VehiclesOverviewCard = ({ title = "Vehicles Overview", items, className, onMenuClick }) => {
1433
- const totalPct = items.reduce((sum, item) => sum + item.percentage, 0);
1434
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1435
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1436
- children: [
1437
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1438
- className: "flex items-start justify-between px-5 pb-2 pt-5",
1439
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1440
- className: "text-base font-bold text-ds-1",
1441
- children: title
1442
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1443
- variant: "tertiary",
1444
- size: "small",
1445
- className: "shrink-0 p-0.5! text-ds-3",
1446
- "aria-label": "More options",
1447
- onClick: onMenuClick,
1448
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
1449
- width: 18,
1450
- height: 18
1451
- })
1452
- })]
1453
- }),
1454
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1455
- className: "flex items-center px-5 pb-3",
1456
- children: items.map((item, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1457
- className: "flex flex-1 items-center",
1458
- children: [i > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "me-3 h-8 w-px shrink-0 bg-ds-border-3/60" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1459
- className: "text-xs font-medium text-ds-3",
1460
- children: item.label
1461
- })]
1462
- }, item.label))
1463
- }),
1464
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1465
- className: "mx-5 mb-5 flex h-3 overflow-hidden rounded-full",
1466
- children: items.map((item, i) => {
1467
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1468
- style: {
1469
- width: `${totalPct > 0 ? item.percentage / totalPct * 100 : 0}%`,
1470
- backgroundColor: item.color
1471
- },
1472
- className: require_utils.mergeClassNames("h-full transition-all", i === 0 && "rounded-s-full", i === items.length - 1 && "rounded-e-full"),
1473
- role: "presentation",
1474
- "aria-label": `${item.label}: ${item.percentage}%`
1475
- }, item.label);
1476
- })
1477
- }),
1478
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1479
- className: "divide-y divide-ds-border-3/50 px-5 pb-4",
1480
- children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1481
- className: "flex items-center gap-3 py-3",
1482
- children: [
1483
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1484
- className: "flex size-9 shrink-0 items-center justify-center rounded-full",
1485
- style: { backgroundColor: `${item.color}1a` },
1486
- "aria-hidden": "true",
1487
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1488
- style: { color: item.color },
1489
- className: "flex items-center",
1490
- children: item.icon
1491
- })
1492
- }),
1493
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1494
- className: "min-w-0 flex-1 text-sm font-medium text-ds-2",
1495
- children: item.label
1496
- }),
1497
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1498
- className: "text-sm font-bold text-ds-1",
1499
- children: item.duration
1500
- }),
1501
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1502
- className: "w-12 text-end text-xs font-semibold text-ds-3",
1503
- children: [item.percentage, "%"]
1504
- })
1505
- ]
1506
- }, item.label))
1507
- })
1508
- ]
1509
- });
1510
- };
1511
- //#endregion
1512
- //#region src/components/data-display/dashboard-cards/StockAvailabilityCard.tsx
1513
- var AVAILABLE_COLOR = "#0ABFBC";
1514
- var LOW_STOCK_COLOR = "#FFC107";
1515
- var OUT_OF_STOCK_COLOR = "#FF5B5C";
1516
- var StockAvailabilityCard = ({ title = "Stock Availability", totalAsset = "$53,000", totalProduct = 442, availability = {
1517
- available: 62,
1518
- lowStock: 28,
1519
- outOfStock: 10
1520
- }, lowStockItems = [], onViewAll, className, onMenuClick }) => {
1521
- const { available, lowStock, outOfStock } = availability;
1522
- const total = available + lowStock + outOfStock || 100;
1523
- const segments = [
1524
- {
1525
- label: "Available",
1526
- color: AVAILABLE_COLOR,
1527
- pct: available
1528
- },
1529
- {
1530
- label: "Low Stock",
1531
- color: LOW_STOCK_COLOR,
1532
- pct: lowStock
1533
- },
1534
- {
1535
- label: "Out of stock",
1536
- color: OUT_OF_STOCK_COLOR,
1537
- pct: outOfStock
1538
- }
1539
- ];
1540
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1541
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1542
- children: [
1543
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1544
- className: "flex items-center justify-between px-5 pb-3 pt-5",
1545
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1546
- className: "text-base font-bold text-ds-1",
1547
- children: title
1548
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1549
- variant: "tertiary",
1550
- size: "small",
1551
- className: "shrink-0 p-0.5! text-ds-3",
1552
- "aria-label": "More options",
1553
- onClick: onMenuClick,
1554
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_EllipsisVerticalIcon.EllipsisVerticalIcon, {
1555
- width: 18,
1556
- height: 18
1557
- })
1558
- })]
1559
- }),
1560
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1561
- className: "grid grid-cols-2 divide-x divide-ds-border-3/50 border-b border-ds-border-3/50 px-5 pb-5",
1562
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1563
- className: "pe-4",
1564
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1565
- className: "text-[10px] font-medium uppercase tracking-wide text-ds-3",
1566
- children: "Total Asset"
1567
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1568
- className: "mt-1 text-2xl font-bold text-ds-1",
1569
- children: totalAsset
1570
- })]
1571
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1572
- className: "ps-4",
1573
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1574
- className: "text-[10px] font-medium uppercase tracking-wide text-ds-3",
1575
- children: "Total Product"
1576
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1577
- className: "mt-1 text-2xl font-bold text-ds-1",
1578
- children: totalProduct.toLocaleString()
1579
- })]
1580
- })]
1581
- }),
1582
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1583
- className: "px-5 py-4",
1584
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1585
- className: "flex h-2 w-full overflow-hidden rounded-full",
1586
- children: segments.map(({ label, color, pct }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1587
- style: {
1588
- width: `${pct / total * 100}%`,
1589
- backgroundColor: color
1590
- },
1591
- "aria-hidden": "true"
1592
- }, label))
1593
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1594
- className: "mt-3 flex flex-wrap gap-x-4 gap-y-1.5",
1595
- children: segments.map(({ label, color, pct }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1596
- className: "flex items-center gap-1.5",
1597
- children: [
1598
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1599
- className: "h-2 w-2 shrink-0 rounded-full",
1600
- style: { backgroundColor: color },
1601
- "aria-hidden": "true"
1602
- }),
1603
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1604
- className: "text-xs text-ds-2",
1605
- children: label
1606
- }),
1607
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1608
- className: "text-xs font-semibold text-ds-1",
1609
- children: [pct, "%"]
1610
- })
1611
- ]
1612
- }, label))
1613
- })]
1614
- }),
1615
- lowStockItems.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1616
- className: "border-t border-ds-border-3/50",
1617
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1618
- className: "flex items-center justify-between px-5 py-3",
1619
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1620
- className: "text-xs font-bold uppercase tracking-wide text-ds-1",
1621
- children: "Low Stock"
1622
- }), onViewAll && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1623
- variant: "tertiary",
1624
- size: "small",
1625
- onClick: onViewAll,
1626
- className: "p-0! text-xs text-ds-accent hover:opacity-100",
1627
- children: "View all"
1628
- })]
1629
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1630
- className: "pb-2",
1631
- children: lowStockItems.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1632
- className: "flex items-center justify-between gap-2 px-5 py-2",
1633
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1634
- className: "truncate text-sm font-medium text-ds-1",
1635
- children: item.name
1636
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1637
- className: "flex shrink-0 items-center gap-3",
1638
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1639
- className: "text-xs text-ds-3",
1640
- children: ["Qty: ", item.qty]
1641
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1642
- variant: "secondary",
1643
- size: "small",
1644
- onClick: item.onOrder,
1645
- className: "h-7 rounded-md px-3 text-xs",
1646
- children: "Order"
1647
- })]
1648
- })]
1649
- }, item.id))
1650
- })]
1651
- })
1652
- ]
1653
- });
1654
- };
1655
- //#endregion
1656
- //#region src/components/data-display/dashboard-cards/ExpensesCard.tsx
1657
- var DEFAULT_EXPENSES = [
1658
- {
1659
- label: "Internet",
1660
- percentage: 45,
1661
- color: "#7367F0"
1662
- },
1663
- {
1664
- label: "Electricity",
1665
- percentage: 26,
1666
- color: "#00CFE8"
1667
- },
1668
- {
1669
- label: "Transactions",
1670
- percentage: 22,
1671
- color: "#28C76F"
1672
- },
1673
- {
1674
- label: "Rental Cost",
1675
- percentage: 8,
1676
- color: "#FF9F43"
1677
- },
1678
- {
1679
- label: "Foods",
1680
- percentage: 3,
1681
- color: "#EA5455"
1682
- },
1683
- {
1684
- label: "Other",
1685
- percentage: 2,
1686
- color: "#82868B"
1687
- }
1688
- ];
1689
- var DEFAULT_TOP = [
1690
- {
1691
- label: "Internet",
1692
- value: "$59.46",
1693
- color: "#7367F0"
1694
- },
1695
- {
1696
- label: "Electricity",
1697
- value: "$34.41",
1698
- color: "#00CFE8"
1699
- },
1700
- {
1701
- label: "Transactions",
1702
- value: "$29.12",
1703
- color: "#28C76F"
1704
- },
1705
- {
1706
- label: "Rental Cost",
1707
- value: "$10.58",
1708
- color: "#FF9F43"
1709
- }
1710
- ];
1711
- var ChevronDownIcon$1 = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1712
- width: "13",
1713
- height: "13",
1714
- viewBox: "0 0 24 24",
1715
- fill: "none",
1716
- stroke: "currentColor",
1717
- strokeWidth: "2.5",
1718
- strokeLinecap: "round",
1719
- strokeLinejoin: "round",
1720
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("polyline", { points: "6 9 12 15 18 9" })
1721
- });
1722
- var ExpensesCard = ({ title = "Expenses", totalExpense = "$132.34", expenses = DEFAULT_EXPENSES, topExpenses = DEFAULT_TOP, periods = [
1723
- "Last 6 months",
1724
- "Last 3 months",
1725
- "Last year"
1726
- ], defaultPeriod, selectedPeriod: controlledPeriod, onPeriodChange, className }) => {
1727
- const isControlled = controlledPeriod !== void 0;
1728
- const [internalPeriod, setInternalPeriod] = (0, react.useState)(defaultPeriod ?? periods[0] ?? "");
1729
- const activePeriod = isControlled ? controlledPeriod : internalPeriod;
1730
- const [dropdownOpen, setDropdownOpen] = (0, react.useState)(false);
1731
- const dropdownRef = (0, react.useRef)(null);
1732
- (0, react.useEffect)(() => {
1733
- function handleClickOutside(e) {
1734
- if (dropdownRef.current && !dropdownRef.current.contains(e.target)) setDropdownOpen(false);
1735
- }
1736
- if (dropdownOpen) document.addEventListener("mousedown", handleClickOutside);
1737
- return () => document.removeEventListener("mousedown", handleClickOutside);
1738
- }, [dropdownOpen]);
1739
- const handlePeriodSelect = (p) => {
1740
- if (!isControlled) setInternalPeriod(p);
1741
- onPeriodChange?.(p);
1742
- setDropdownOpen(false);
1743
- };
1744
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1745
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1746
- children: [
1747
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1748
- className: "flex items-center justify-between px-5 pb-3 pt-5",
1749
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1750
- className: "text-base font-bold text-ds-1",
1751
- children: title
1752
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1753
- ref: dropdownRef,
1754
- className: "relative shrink-0",
1755
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
1756
- variant: "tertiary",
1757
- size: "small",
1758
- onClick: () => setDropdownOpen((o) => !o),
1759
- className: "gap-1.5 rounded-md border border-ds-border-accent/30 bg-ds-accent-subtle px-3 py-1.5 text-sm font-semibold text-ds-accent hover:bg-ds-accent-subtle/80 hover:opacity-100",
1760
- "aria-haspopup": "listbox",
1761
- "aria-expanded": dropdownOpen,
1762
- children: [activePeriod, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1763
- className: require_utils.mergeClassNames("transition-transform duration-150", dropdownOpen ? "rotate-180" : ""),
1764
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon$1, {})
1765
- })]
1766
- }), dropdownOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1767
- role: "listbox",
1768
- className: "absolute end-0 top-full z-20 mt-1 min-w-[160px] overflow-y-auto rounded-md border border-ds-border-2 bg-ds-surface-1 py-1 shadow-lg",
1769
- children: periods.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1770
- variant: "tertiary",
1771
- size: "small",
1772
- role: "option",
1773
- "aria-selected": p === activePeriod,
1774
- onClick: () => handlePeriodSelect(p),
1775
- className: require_utils.mergeClassNames("w-full justify-start rounded-none px-3 py-1.5 text-start text-sm hover:bg-ds-surface-2 hover:opacity-100", p === activePeriod ? "font-semibold text-ds-accent" : "text-ds-2"),
1776
- children: p
1777
- }, p))
1778
- })]
1779
- })]
1780
- }),
1781
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1782
- className: "flex items-center gap-4 px-5 pb-5",
1783
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1784
- className: "relative shrink-0",
1785
- style: {
1786
- width: 160,
1787
- height: 160
1788
- },
1789
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
1790
- width: "100%",
1791
- height: "100%",
1792
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.PieChart, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Pie, {
1793
- data: expenses,
1794
- cx: "50%",
1795
- cy: "50%",
1796
- innerRadius: 52,
1797
- outerRadius: 72,
1798
- dataKey: "percentage",
1799
- paddingAngle: 2,
1800
- startAngle: 90,
1801
- endAngle: -270,
1802
- children: expenses.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.color }, i))
1803
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
1804
- contentStyle: require_chartStyles.chartTooltipContentStyle,
1805
- itemStyle: require_chartStyles.chartTooltipItemStyle,
1806
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
1807
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
1808
- formatter: (v, _name, props) => [`${v}%`, props.payload.label]
1809
- })] })
1810
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1811
- className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center text-center",
1812
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1813
- className: "text-[10px] leading-none text-ds-3",
1814
- children: "Total Expense"
1815
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1816
- className: "mt-1 text-base font-bold leading-none text-ds-1",
1817
- children: totalExpense
1818
- })]
1819
- })]
1820
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1821
- className: "flex min-w-0 flex-1 flex-col gap-2",
1822
- children: expenses.map((e) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1823
- className: "flex items-center gap-2",
1824
- children: [
1825
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1826
- className: "h-2.5 w-2.5 shrink-0 rounded-full",
1827
- style: { backgroundColor: e.color },
1828
- "aria-hidden": "true"
1829
- }),
1830
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1831
- className: "flex-1 truncate text-xs text-ds-2",
1832
- children: e.label
1833
- }),
1834
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1835
- className: "text-xs font-semibold text-ds-1",
1836
- children: [e.percentage, "%"]
1837
- })
1838
- ]
1839
- }, e.label))
1840
- })]
1841
- }),
1842
- topExpenses.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1843
- className: "border-t border-ds-border-3/50 px-5 pb-5 pt-4",
1844
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1845
- className: "mb-3 text-[10px] font-bold uppercase tracking-wide text-ds-3",
1846
- children: "Top Expense"
1847
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1848
- className: "grid grid-cols-2 gap-3",
1849
- children: topExpenses.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1850
- className: "flex items-start gap-2",
1851
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1852
- className: "mt-0.5 h-2.5 w-2.5 shrink-0 rounded-full",
1853
- style: { backgroundColor: item.color },
1854
- "aria-hidden": "true"
1855
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1856
- className: "min-w-0",
1857
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1858
- className: "truncate text-xs text-ds-3",
1859
- children: item.label
1860
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1861
- className: "text-sm font-bold text-ds-1",
1862
- children: item.value
1863
- })]
1864
- })]
1865
- }, item.label))
1866
- })]
1867
- })
1868
- ]
1869
- });
1870
- };
1871
- //#endregion
1872
- //#region src/components/data-display/dashboard-cards/IncomeExpenseCard.tsx
1873
- var DEFAULT_DATA = [
1874
- {
1875
- month: "JAN",
1876
- income: 800,
1877
- expense: 400
1878
- },
1879
- {
1880
- month: "FEB",
1881
- income: 1e3,
1882
- expense: 500
1883
- },
1884
- {
1885
- month: "MAR",
1886
- income: 1412,
1887
- expense: 612,
1888
- highlighted: true
1889
- },
1890
- {
1891
- month: "APR",
1892
- income: 900,
1893
- expense: 450
1894
- },
1895
- {
1896
- month: "MAY",
1897
- income: 1100,
1898
- expense: 520
1899
- },
1900
- {
1901
- month: "JUN",
1902
- income: 950,
1903
- expense: 480
1904
- }
1905
- ];
1906
- var ChevronDownIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1907
- width: "13",
1908
- height: "13",
1909
- viewBox: "0 0 24 24",
1910
- fill: "none",
1911
- stroke: "currentColor",
1912
- strokeWidth: "2.5",
1913
- strokeLinecap: "round",
1914
- strokeLinejoin: "round",
1915
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("polyline", { points: "6 9 12 15 18 9" })
1916
- });
1917
- var TrendLabel = ({ value, direction }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1918
- className: "text-xs font-semibold",
1919
- style: { color: direction === "up" ? "var(--ds-color-success)" : "var(--ds-color-danger)" },
1920
- children: [
1921
- direction === "up" ? "▲" : "▼",
1922
- " ",
1923
- value
1924
- ]
1925
- });
1926
- var IncomeExpenseCard = ({ title = "Income & Expense", totalIncome = "$1,412", incomeBadge = {
1927
- value: "4.51%",
1928
- direction: "up"
1929
- }, totalExpenses = "$612.34", expensesBadge = {
1930
- value: "2.41%",
1931
- direction: "down"
1932
- }, data = DEFAULT_DATA, incomeColor = "#28C76F", expenseColor = "#FFC107", periods = [
1933
- "Last 6 months",
1934
- "Last 3 months",
1935
- "Last year"
1936
- ], defaultPeriod, selectedPeriod: controlledPeriod, onPeriodChange, className }) => {
1937
- const isControlled = controlledPeriod !== void 0;
1938
- const [internalPeriod, setInternalPeriod] = (0, react.useState)(defaultPeriod ?? periods[0] ?? "");
1939
- const activePeriod = isControlled ? controlledPeriod : internalPeriod;
1940
- const [dropdownOpen, setDropdownOpen] = (0, react.useState)(false);
1941
- const dropdownRef = (0, react.useRef)(null);
1942
- (0, react.useEffect)(() => {
1943
- function handleClickOutside(e) {
1944
- if (dropdownRef.current && !dropdownRef.current.contains(e.target)) setDropdownOpen(false);
1945
- }
1946
- if (dropdownOpen) document.addEventListener("mousedown", handleClickOutside);
1947
- return () => document.removeEventListener("mousedown", handleClickOutside);
1948
- }, [dropdownOpen]);
1949
- const handlePeriodSelect = (p) => {
1950
- if (!isControlled) setInternalPeriod(p);
1951
- onPeriodChange?.(p);
1952
- setDropdownOpen(false);
1953
- };
1954
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1955
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
1956
- children: [
1957
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1958
- className: "flex items-center justify-between px-5 pb-3 pt-5",
1959
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1960
- className: "text-base font-bold text-ds-1",
1961
- children: title
1962
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1963
- ref: dropdownRef,
1964
- className: "relative shrink-0",
1965
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_button.Button, {
1966
- variant: "tertiary",
1967
- size: "small",
1968
- onClick: () => setDropdownOpen((o) => !o),
1969
- className: "gap-1.5 rounded-md border border-ds-border-accent/30 bg-ds-accent-subtle px-3 py-1.5 text-sm font-semibold text-ds-accent hover:bg-ds-accent-subtle/80 hover:opacity-100",
1970
- "aria-haspopup": "listbox",
1971
- "aria-expanded": dropdownOpen,
1972
- children: [activePeriod, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1973
- className: require_utils.mergeClassNames("transition-transform duration-150", dropdownOpen ? "rotate-180" : ""),
1974
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon, {})
1975
- })]
1976
- }), dropdownOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1977
- role: "listbox",
1978
- className: "absolute end-0 top-full z-20 mt-1 min-w-[160px] overflow-y-auto rounded-md border border-ds-border-2 bg-ds-surface-1 py-1 shadow-lg",
1979
- children: periods.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
1980
- variant: "tertiary",
1981
- size: "small",
1982
- role: "option",
1983
- "aria-selected": p === activePeriod,
1984
- onClick: () => handlePeriodSelect(p),
1985
- className: require_utils.mergeClassNames("w-full justify-start rounded-none px-3 py-1.5 text-start text-sm hover:bg-ds-surface-2 hover:opacity-100", p === activePeriod ? "font-semibold text-ds-accent" : "text-ds-2"),
1986
- children: p
1987
- }, p))
1988
- })]
1989
- })]
1990
- }),
1991
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1992
- className: "grid grid-cols-2 gap-4 px-5 pb-4",
1993
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1994
- className: "text-[10px] font-medium uppercase tracking-wide text-ds-3",
1995
- children: "Total Income"
1996
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1997
- className: "mt-1 flex items-baseline gap-2",
1998
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1999
- className: "text-2xl font-bold text-ds-1",
2000
- children: totalIncome
2001
- }), incomeBadge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendLabel, {
2002
- value: incomeBadge.value,
2003
- direction: incomeBadge.direction
2004
- })]
2005
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2006
- className: "text-[10px] font-medium uppercase tracking-wide text-ds-3",
2007
- children: "Total Expenses"
2008
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2009
- className: "mt-1 flex items-baseline gap-2",
2010
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2011
- className: "text-2xl font-bold text-ds-1",
2012
- children: totalExpenses
2013
- }), expensesBadge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendLabel, {
2014
- value: expensesBadge.value,
2015
- direction: expensesBadge.direction
2016
- })]
2017
- })] })]
2018
- }),
2019
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2020
- style: { height: 200 },
2021
- className: "px-2",
2022
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
2023
- width: "100%",
2024
- height: "100%",
2025
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
2026
- data,
2027
- barSize: 12,
2028
- barCategoryGap: "30%",
2029
- barGap: 4,
2030
- margin: {
2031
- top: 8,
2032
- right: 8,
2033
- left: 0,
2034
- bottom: 0
2035
- },
2036
- children: [
2037
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.CartesianGrid, {
2038
- strokeDasharray: "3 3",
2039
- vertical: false,
2040
- stroke: "var(--ds-color-border)",
2041
- opacity: .5
2042
- }),
2043
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
2044
- dataKey: "month",
2045
- axisLine: false,
2046
- tickLine: false,
2047
- tick: {
2048
- fill: "var(--ds-color-fg-muted)",
2049
- fontSize: 11
2050
- },
2051
- dy: 8
2052
- }),
2053
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
2054
- axisLine: false,
2055
- tickLine: false,
2056
- tick: {
2057
- fill: "var(--ds-color-fg-muted)",
2058
- fontSize: 10
2059
- },
2060
- dx: -4
2061
- }),
2062
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
2063
- contentStyle: require_chartStyles.chartTooltipContentStyle,
2064
- itemStyle: require_chartStyles.chartTooltipItemStyle,
2065
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
2066
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
2067
- cursor: { fill: "rgba(0,0,0,0.04)" }
2068
- }),
2069
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2070
- dataKey: "income",
2071
- name: "Income",
2072
- radius: [
2073
- 4,
2074
- 4,
2075
- 0,
2076
- 0
2077
- ],
2078
- children: data.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.highlighted ? incomeColor : incomeColor + "80" }, i))
2079
- }),
2080
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2081
- dataKey: "expense",
2082
- name: "Expense",
2083
- radius: [
2084
- 4,
2085
- 4,
2086
- 0,
2087
- 0
2088
- ],
2089
- children: data.map((entry, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: entry.highlighted ? expenseColor : expenseColor + "80" }, i))
2090
- })
2091
- ]
2092
- })
2093
- })
2094
- }),
2095
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2096
- className: "flex items-center justify-center gap-6 py-4",
2097
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2098
- className: "flex items-center gap-2",
2099
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2100
- className: "h-2.5 w-2.5 shrink-0 rounded-full",
2101
- style: { backgroundColor: incomeColor },
2102
- "aria-hidden": "true"
2103
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2104
- className: "text-sm text-ds-2",
2105
- children: "Income"
2106
- })]
2107
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2108
- className: "flex items-center gap-2",
2109
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2110
- className: "h-2.5 w-2.5 shrink-0 rounded-full",
2111
- style: { backgroundColor: expenseColor },
2112
- "aria-hidden": "true"
2113
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2114
- className: "text-sm text-ds-2",
2115
- children: "Expense"
2116
- })]
2117
- })]
2118
- })
2119
- ]
2120
- });
2121
- };
2122
- //#endregion
2123
- //#region src/components/data-display/dashboard-cards/DeviceSalesCard.tsx
2124
- var DEFAULT_CHANNELS = [
2125
- {
2126
- key: "retail",
2127
- label: "Retail",
2128
- sales: 310,
2129
- color: "#4361EE"
2130
- },
2131
- {
2132
- key: "website",
2133
- label: "Website",
2134
- sales: 1420,
2135
- color: "#00CFE8"
2136
- },
2137
- {
2138
- key: "thirdParty",
2139
- label: "Third Party",
2140
- sales: 1920,
2141
- color: "#FF9F43"
2142
- }
2143
- ];
2144
- var DEFAULT_BRANDS = [
2145
- {
2146
- name: "Apple",
2147
- retail: 35e3,
2148
- website: 4e4,
2149
- thirdParty: 45e3
2150
- },
2151
- {
2152
- name: "Lenovo",
2153
- retail: 2e4,
2154
- website: 35e3,
2155
- thirdParty: 3e4
2156
- },
2157
- {
2158
- name: "Asus",
2159
- retail: 15e3,
2160
- website: 25e3,
2161
- thirdParty: 2e4
2162
- }
2163
- ];
2164
- var InfoIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
2165
- width: "14",
2166
- height: "14",
2167
- viewBox: "0 0 24 24",
2168
- fill: "none",
2169
- stroke: "currentColor",
2170
- strokeWidth: "2",
2171
- strokeLinecap: "round",
2172
- strokeLinejoin: "round",
2173
- children: [
2174
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
2175
- cx: "12",
2176
- cy: "12",
2177
- r: "10"
2178
- }),
2179
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
2180
- x1: "12",
2181
- y1: "16",
2182
- x2: "12",
2183
- y2: "12"
2184
- }),
2185
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
2186
- x1: "12",
2187
- y1: "8",
2188
- x2: "12.01",
2189
- y2: "8"
2190
- })
2191
- ]
2192
- });
2193
- var ExpandIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
2194
- width: "14",
2195
- height: "14",
2196
- viewBox: "0 0 24 24",
2197
- fill: "none",
2198
- stroke: "currentColor",
2199
- strokeWidth: "2",
2200
- strokeLinecap: "round",
2201
- strokeLinejoin: "round",
2202
- children: [
2203
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("polyline", { points: "15 3 21 3 21 9" }),
2204
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("polyline", { points: "9 21 3 21 3 15" }),
2205
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
2206
- x1: "21",
2207
- y1: "3",
2208
- x2: "14",
2209
- y2: "10"
2210
- }),
2211
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
2212
- x1: "3",
2213
- y1: "21",
2214
- x2: "10",
2215
- y2: "14"
2216
- })
2217
- ]
2218
- });
2219
- var EditIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
2220
- width: "14",
2221
- height: "14",
2222
- viewBox: "0 0 24 24",
2223
- fill: "none",
2224
- stroke: "currentColor",
2225
- strokeWidth: "2",
2226
- strokeLinecap: "round",
2227
- strokeLinejoin: "round",
2228
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })]
2229
- });
2230
- var EllipsisHIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
2231
- width: "14",
2232
- height: "14",
2233
- viewBox: "0 0 24 24",
2234
- fill: "none",
2235
- stroke: "currentColor",
2236
- strokeWidth: "2",
2237
- strokeLinecap: "round",
2238
- strokeLinejoin: "round",
2239
- children: [
2240
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
2241
- cx: "12",
2242
- cy: "12",
2243
- r: "1"
2244
- }),
2245
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
2246
- cx: "19",
2247
- cy: "12",
2248
- r: "1"
2249
- }),
2250
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
2251
- cx: "5",
2252
- cy: "12",
2253
- r: "1"
2254
- })
2255
- ]
2256
- });
2257
- var xTickFormatter = (v) => v === 0 ? "0" : `${Math.round(v / 1e3)}K`;
2258
- var DeviceSalesCard = ({ title = "Device Sales", channels = DEFAULT_CHANNELS, brands = DEFAULT_BRANDS, className, onExpand, onEdit, onMoreClick }) => {
2259
- const channelMap = Object.fromEntries(channels.map((c) => [c.key, c]));
2260
- const maxValue = Math.ceil(brands.reduce((max, b) => Math.max(max, b.retail + b.website + b.thirdParty), 0) / 2e4) * 2e4;
2261
- const xDomain = [0, Math.max(maxValue, 1e5)];
2262
- const xTicks = Array.from({ length: Math.floor(xDomain[1] / 2e4) + 1 }, (_, i) => i * 2e4);
2263
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2264
- className: require_utils.mergeClassNames("rounded-lg border border-ds-border-3/80 bg-ds-surface-1", className),
2265
- children: [
2266
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2267
- className: "flex items-center justify-between px-5 pb-3 pt-5",
2268
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2269
- className: "flex items-center gap-2",
2270
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2271
- className: "text-base font-bold text-ds-1",
2272
- children: title
2273
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2274
- className: "text-ds-3",
2275
- "aria-hidden": "true",
2276
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoIcon, {})
2277
- })]
2278
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2279
- className: "flex items-center gap-0.5",
2280
- children: [
2281
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
2282
- variant: "tertiary",
2283
- size: "small",
2284
- className: "p-1! text-ds-3",
2285
- "aria-label": "Expand",
2286
- onClick: onExpand,
2287
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExpandIcon, {})
2288
- }),
2289
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
2290
- variant: "tertiary",
2291
- size: "small",
2292
- className: "p-1! text-ds-3",
2293
- "aria-label": "Edit",
2294
- onClick: onEdit,
2295
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EditIcon, {})
2296
- }),
2297
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_button.Button, {
2298
- variant: "tertiary",
2299
- size: "small",
2300
- className: "p-1! text-ds-3",
2301
- "aria-label": "More options",
2302
- onClick: onMoreClick,
2303
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EllipsisHIcon, {})
2304
- })
2305
- ]
2306
- })]
2307
- }),
2308
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2309
- className: "grid grid-cols-3 divide-x divide-ds-border-3/50 border-b border-ds-border-3/50 pb-4",
2310
- children: channels.map((channel) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2311
- className: "flex flex-col items-center gap-1 px-3 pt-1",
2312
- children: [
2313
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2314
- className: "mb-1 h-1 w-8 rounded-full",
2315
- style: { backgroundColor: channel.color },
2316
- "aria-hidden": "true"
2317
- }),
2318
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2319
- className: "text-lg font-bold text-ds-1",
2320
- children: channel.sales.toLocaleString()
2321
- }),
2322
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
2323
- className: "text-center text-[11px] leading-tight text-ds-3",
2324
- children: [channel.label, " Sales"]
2325
- })
2326
- ]
2327
- }, channel.key))
2328
- }),
2329
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2330
- style: { height: brands.length * 64 + 56 },
2331
- className: "px-2 pt-4",
2332
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
2333
- width: "100%",
2334
- height: "100%",
2335
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
2336
- data: brands,
2337
- layout: "vertical",
2338
- barSize: 18,
2339
- barCategoryGap: "35%",
2340
- margin: {
2341
- top: 4,
2342
- right: 12,
2343
- left: 0,
2344
- bottom: 4
2345
- },
2346
- children: [
2347
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
2348
- type: "number",
2349
- domain: xDomain,
2350
- ticks: xTicks,
2351
- axisLine: false,
2352
- tickLine: false,
2353
- tickFormatter: xTickFormatter,
2354
- tick: {
2355
- fill: "var(--ds-color-fg-muted)",
2356
- fontSize: 10
2357
- }
2358
- }),
2359
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
2360
- type: "category",
2361
- dataKey: "name",
2362
- axisLine: false,
2363
- tickLine: false,
2364
- tick: {
2365
- fill: "var(--ds-color-fg-muted)",
2366
- fontSize: 12
2367
- },
2368
- width: 52
2369
- }),
2370
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
2371
- contentStyle: require_chartStyles.chartTooltipContentStyle,
2372
- itemStyle: require_chartStyles.chartTooltipItemStyle,
2373
- labelStyle: require_chartStyles.chartTooltipLabelStyle,
2374
- wrapperStyle: require_chartStyles.chartTooltipWrapperStyle,
2375
- cursor: { fill: "rgba(0,0,0,0.04)" },
2376
- formatter: (v, name) => [Number(v).toLocaleString(), channelMap[name]?.label ?? String(name)]
2377
- }),
2378
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2379
- dataKey: "retail",
2380
- stackId: "stack",
2381
- fill: channelMap.retail?.color ?? "#4361EE",
2382
- radius: [
2383
- 2,
2384
- 0,
2385
- 0,
2386
- 2
2387
- ]
2388
- }),
2389
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2390
- dataKey: "website",
2391
- stackId: "stack",
2392
- fill: channelMap.website?.color ?? "#00CFE8"
2393
- }),
2394
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2395
- dataKey: "thirdParty",
2396
- stackId: "stack",
2397
- fill: channelMap.thirdParty?.color ?? "#FF9F43",
2398
- radius: [
2399
- 0,
2400
- 2,
2401
- 2,
2402
- 0
2403
- ]
2404
- })
2405
- ]
2406
- })
2407
- })
2408
- }),
2409
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2410
- className: "flex flex-wrap items-center justify-center gap-4 px-5 pb-4 pt-1",
2411
- children: channels.map((channel) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2412
- className: "flex items-center gap-2",
2413
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2414
- className: "h-2.5 w-2.5 shrink-0 rounded-full",
2415
- style: { backgroundColor: channel.color },
2416
- "aria-hidden": "true"
2417
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2418
- className: "text-xs text-ds-2",
2419
- children: channel.label
2420
- })]
2421
- }, channel.key))
2422
- })
2423
- ]
2424
- });
2425
- };
2426
- //#endregion
2427
- Object.defineProperty(exports, "ChartCard", {
2428
- enumerable: true,
2429
- get: function() {
2430
- return ChartCard;
2431
- }
2432
- });
2433
- Object.defineProperty(exports, "DeviceSalesCard", {
2434
- enumerable: true,
2435
- get: function() {
2436
- return DeviceSalesCard;
2437
- }
2438
- });
2439
- Object.defineProperty(exports, "EarningReportsTabsCard", {
2440
- enumerable: true,
2441
- get: function() {
2442
- return EarningReportsTabsCard;
2443
- }
2444
- });
2445
- Object.defineProperty(exports, "EarningsCard", {
2446
- enumerable: true,
2447
- get: function() {
2448
- return EarningsCard;
2449
- }
2450
- });
2451
- Object.defineProperty(exports, "ExpensesCard", {
2452
- enumerable: true,
2453
- get: function() {
2454
- return ExpensesCard;
2455
- }
2456
- });
2457
- Object.defineProperty(exports, "IncomeExpenseCard", {
2458
- enumerable: true,
2459
- get: function() {
2460
- return IncomeExpenseCard;
2461
- }
2462
- });
2463
- Object.defineProperty(exports, "RevenueGrowthCard", {
2464
- enumerable: true,
2465
- get: function() {
2466
- return RevenueGrowthCard;
2467
- }
2468
- });
2469
- Object.defineProperty(exports, "SalesOverviewCard", {
2470
- enumerable: true,
2471
- get: function() {
2472
- return SalesOverviewCard;
2473
- }
2474
- });
2475
- Object.defineProperty(exports, "ShipmentStatisticsCard", {
2476
- enumerable: true,
2477
- get: function() {
2478
- return ShipmentStatisticsCard;
2479
- }
2480
- });
2481
- Object.defineProperty(exports, "StatCard", {
2482
- enumerable: true,
2483
- get: function() {
2484
- return StatCard;
2485
- }
2486
- });
2487
- Object.defineProperty(exports, "StockAvailabilityCard", {
2488
- enumerable: true,
2489
- get: function() {
2490
- return StockAvailabilityCard;
2491
- }
2492
- });
2493
- Object.defineProperty(exports, "SupportTrackerCard", {
2494
- enumerable: true,
2495
- get: function() {
2496
- return SupportTrackerCard;
2497
- }
2498
- });
2499
- Object.defineProperty(exports, "TopProductsCard", {
2500
- enumerable: true,
2501
- get: function() {
2502
- return TopProductsCard;
2503
- }
2504
- });
2505
- Object.defineProperty(exports, "TopicsCard", {
2506
- enumerable: true,
2507
- get: function() {
2508
- return TopicsCard;
2509
- }
2510
- });
2511
- Object.defineProperty(exports, "VehicleConditionCard", {
2512
- enumerable: true,
2513
- get: function() {
2514
- return VehicleConditionCard;
2515
- }
2516
- });
2517
- Object.defineProperty(exports, "VehiclesOverviewCard", {
2518
- enumerable: true,
2519
- get: function() {
2520
- return VehiclesOverviewCard;
2521
- }
2522
- });
2523
-
2524
- //# sourceMappingURL=dashboard-cards-DNWJPKRu.cjs.map