dash-ui-kit 1.0.94 → 2.1.0-dev

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 (201) hide show
  1. package/README.md +52 -0
  2. package/dist/react/components/accordion/index.cjs.js +193 -0
  3. package/dist/react/components/accordion/index.cjs.js.map +1 -0
  4. package/dist/react/components/accordion/index.esm.js +169 -0
  5. package/dist/react/components/accordion/index.esm.js.map +1 -0
  6. package/dist/react/components/avatar/index.cjs.js +39 -0
  7. package/dist/react/components/avatar/index.cjs.js.map +1 -0
  8. package/dist/react/components/avatar/index.esm.js +34 -0
  9. package/dist/react/components/avatar/index.esm.js.map +1 -0
  10. package/dist/react/components/badge/index.cjs.js +97 -0
  11. package/dist/react/components/badge/index.cjs.js.map +1 -0
  12. package/dist/react/components/badge/index.d.ts +10 -1
  13. package/dist/react/components/badge/index.esm.js +92 -0
  14. package/dist/react/components/badge/index.esm.js.map +1 -0
  15. package/dist/react/components/bigNumber/index.cjs.js +100 -0
  16. package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
  17. package/dist/react/components/bigNumber/index.esm.js +95 -0
  18. package/dist/react/components/bigNumber/index.esm.js.map +1 -0
  19. package/dist/react/components/button/index.cjs.js +540 -0
  20. package/dist/react/components/button/index.cjs.js.map +1 -0
  21. package/dist/react/components/button/index.d.ts +7 -1
  22. package/dist/react/components/button/index.esm.js +535 -0
  23. package/dist/react/components/button/index.esm.js.map +1 -0
  24. package/dist/react/components/copyButton/index.cjs.js +95 -0
  25. package/dist/react/components/copyButton/index.cjs.js.map +1 -0
  26. package/dist/react/components/copyButton/index.esm.js +71 -0
  27. package/dist/react/components/copyButton/index.esm.js.map +1 -0
  28. package/dist/react/components/dashLogo/index.cjs.js +74 -0
  29. package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
  30. package/dist/react/components/dashLogo/index.esm.js +69 -0
  31. package/dist/react/components/dashLogo/index.esm.js.map +1 -0
  32. package/dist/react/components/dateBlock/index.cjs.js +120 -0
  33. package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
  34. package/dist/react/components/dateBlock/index.esm.js +115 -0
  35. package/dist/react/components/dateBlock/index.esm.js.map +1 -0
  36. package/dist/react/components/dialog/index.cjs.js +292 -0
  37. package/dist/react/components/dialog/index.cjs.js.map +1 -0
  38. package/dist/react/components/dialog/index.esm.js +270 -0
  39. package/dist/react/components/dialog/index.esm.js.map +1 -0
  40. package/dist/react/components/heading/index.cjs.js +65 -0
  41. package/dist/react/components/heading/index.cjs.js.map +1 -0
  42. package/dist/react/components/heading/index.d.ts +4 -1
  43. package/dist/react/components/heading/index.esm.js +63 -0
  44. package/dist/react/components/heading/index.esm.js.map +1 -0
  45. package/dist/react/components/icons/index.cjs.js +1173 -0
  46. package/dist/react/components/icons/index.cjs.js.map +1 -0
  47. package/dist/react/components/icons/index.d.ts +2 -0
  48. package/dist/react/components/icons/index.esm.js +1128 -0
  49. package/dist/react/components/icons/index.esm.js.map +1 -0
  50. package/dist/react/components/identifier/index.cjs.js +286 -0
  51. package/dist/react/components/identifier/index.cjs.js.map +1 -0
  52. package/dist/react/components/identifier/index.esm.js +282 -0
  53. package/dist/react/components/identifier/index.esm.js.map +1 -0
  54. package/dist/react/components/index.cjs.js +101 -0
  55. package/dist/react/components/index.cjs.js.map +1 -0
  56. package/dist/react/components/index.d.ts +1 -1
  57. package/dist/react/components/index.esm.js +29 -0
  58. package/dist/react/components/index.esm.js.map +1 -0
  59. package/dist/react/components/input/index.cjs.js +242 -0
  60. package/dist/react/components/input/index.cjs.js.map +1 -0
  61. package/dist/react/components/input/index.d.ts +4 -0
  62. package/dist/react/components/input/index.esm.js +237 -0
  63. package/dist/react/components/input/index.esm.js.map +1 -0
  64. package/dist/react/components/list/index.cjs.js +49 -0
  65. package/dist/react/components/list/index.cjs.js.map +1 -0
  66. package/dist/react/components/list/index.esm.js +47 -0
  67. package/dist/react/components/list/index.esm.js.map +1 -0
  68. package/dist/react/components/notActive/index.cjs.js +40 -0
  69. package/dist/react/components/notActive/index.cjs.js.map +1 -0
  70. package/dist/react/components/notActive/index.esm.js +38 -0
  71. package/dist/react/components/notActive/index.esm.js.map +1 -0
  72. package/dist/react/components/overlayMenu/index.cjs.js +469 -0
  73. package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
  74. package/dist/react/components/overlayMenu/index.d.ts +9 -10
  75. package/dist/react/components/overlayMenu/index.esm.js +464 -0
  76. package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
  77. package/dist/react/components/overlaySelect/index.cjs.js +350 -0
  78. package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
  79. package/dist/react/components/overlaySelect/index.d.ts +4 -0
  80. package/dist/react/components/overlaySelect/index.esm.js +345 -0
  81. package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
  82. package/dist/react/components/progressStepBar/index.cjs.js +54 -0
  83. package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
  84. package/dist/react/components/progressStepBar/index.d.ts +5 -2
  85. package/dist/react/components/progressStepBar/index.esm.js +52 -0
  86. package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
  87. package/dist/react/components/select/index.cjs.js +241 -0
  88. package/dist/react/components/select/index.cjs.js.map +1 -0
  89. package/dist/react/components/select/index.d.ts +4 -0
  90. package/dist/react/components/select/index.esm.js +217 -0
  91. package/dist/react/components/select/index.esm.js.map +1 -0
  92. package/dist/react/components/switch/index.cjs.js +184 -0
  93. package/dist/react/components/switch/index.cjs.js.map +1 -0
  94. package/dist/react/components/switch/index.esm.js +179 -0
  95. package/dist/react/components/switch/index.esm.js.map +1 -0
  96. package/dist/react/components/tabs/index.cjs.js +178 -0
  97. package/dist/react/components/tabs/index.cjs.js.map +1 -0
  98. package/dist/react/components/tabs/index.esm.js +154 -0
  99. package/dist/react/components/tabs/index.esm.js.map +1 -0
  100. package/dist/react/components/text/index.cjs.js +126 -0
  101. package/dist/react/components/text/index.cjs.js.map +1 -0
  102. package/dist/react/components/text/index.d.ts +5 -0
  103. package/dist/react/components/text/index.esm.js +121 -0
  104. package/dist/react/components/text/index.esm.js.map +1 -0
  105. package/dist/react/components/textarea/index.cjs.js +260 -0
  106. package/dist/react/components/textarea/index.cjs.js.map +1 -0
  107. package/dist/react/components/textarea/index.d.ts +4 -0
  108. package/dist/react/components/textarea/index.esm.js +255 -0
  109. package/dist/react/components/textarea/index.esm.js.map +1 -0
  110. package/dist/react/components/timeDelta/index.cjs.js +93 -0
  111. package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
  112. package/dist/react/components/timeDelta/index.d.ts +1 -1
  113. package/dist/react/components/timeDelta/index.esm.js +88 -0
  114. package/dist/react/components/timeDelta/index.esm.js.map +1 -0
  115. package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
  116. package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
  117. package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
  118. package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
  119. package/dist/react/components/valueCard/index.cjs.js +181 -0
  120. package/dist/react/components/valueCard/index.cjs.js.map +1 -0
  121. package/dist/react/components/valueCard/index.d.ts +5 -1
  122. package/dist/react/components/valueCard/index.esm.js +176 -0
  123. package/dist/react/components/valueCard/index.esm.js.map +1 -0
  124. package/dist/react/contexts/ThemeContext.cjs.js +79 -0
  125. package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
  126. package/dist/react/contexts/ThemeContext.esm.js +76 -0
  127. package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
  128. package/dist/react/contexts/index.cjs.js +11 -0
  129. package/dist/react/contexts/index.cjs.js.map +1 -0
  130. package/dist/react/contexts/index.esm.js +4 -0
  131. package/dist/react/contexts/index.esm.js.map +1 -0
  132. package/dist/react/hooks/index.d.ts +1 -0
  133. package/dist/react/hooks/useColorScheme.cjs.js +25 -0
  134. package/dist/react/hooks/useColorScheme.cjs.js.map +1 -0
  135. package/dist/react/hooks/useColorScheme.d.ts +9 -0
  136. package/dist/react/hooks/useColorScheme.esm.js +23 -0
  137. package/dist/react/hooks/useColorScheme.esm.js.map +1 -0
  138. package/dist/react/hooks/useDebounce.cjs.js +83 -0
  139. package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
  140. package/dist/react/hooks/useDebounce.esm.js +78 -0
  141. package/dist/react/hooks/useDebounce.esm.js.map +1 -0
  142. package/dist/react/index.cjs.js +99 -12833
  143. package/dist/react/index.cjs.js.map +1 -1
  144. package/dist/react/index.d.ts +1 -1
  145. package/dist/react/index.esm.js +27 -12747
  146. package/dist/react/index.esm.js.map +1 -1
  147. package/dist/react/shared/utils/datetime.cjs.js +59 -0
  148. package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
  149. package/dist/react/shared/utils/datetime.esm.js +57 -0
  150. package/dist/react/shared/utils/datetime.esm.js.map +1 -0
  151. package/dist/react/utils/copyToClipboard.cjs.js +31 -0
  152. package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
  153. package/dist/react/utils/copyToClipboard.esm.js +26 -0
  154. package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
  155. package/dist/react/utils/index.d.ts +1 -1
  156. package/dist/react-native/components/avatar/index.d.ts +26 -0
  157. package/dist/react-native/components/avatar/index.web.d.ts +24 -0
  158. package/dist/react-native/components/badge/index.d.ts +63 -0
  159. package/dist/react-native/components/bigNumber/index.d.ts +26 -0
  160. package/dist/react-native/components/button/index.d.ts +45 -0
  161. package/dist/react-native/components/copyButton/index.d.ts +22 -0
  162. package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
  163. package/dist/react-native/components/dashLogo/index.d.ts +30 -0
  164. package/dist/react-native/components/heading/index.d.ts +25 -0
  165. package/dist/react-native/components/icons/index.d.ts +43 -0
  166. package/dist/react-native/components/identifier/index.d.ts +47 -0
  167. package/dist/react-native/components/index.d.ts +15 -0
  168. package/dist/react-native/components/input/index.d.ts +59 -0
  169. package/dist/react-native/components/notActive/index.d.ts +16 -0
  170. package/dist/react-native/components/tabs/index.d.ts +50 -0
  171. package/dist/react-native/components/text/index.d.ts +28 -0
  172. package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
  173. package/dist/react-native/components/valueCard/index.d.ts +47 -0
  174. package/dist/react-native/hooks/index.d.ts +1 -0
  175. package/dist/react-native/hooks/useDebounce.d.ts +43 -0
  176. package/dist/react-native/index.cjs.js +2882 -0
  177. package/dist/react-native/index.cjs.js.map +1 -0
  178. package/dist/react-native/index.d.ts +4 -0
  179. package/dist/react-native/index.esm.js +2833 -0
  180. package/dist/react-native/index.esm.js.map +1 -0
  181. package/dist/react-native/styles/index.d.ts +11 -0
  182. package/dist/react-native/styles/tokens.d.ts +308 -0
  183. package/dist/react-native/styles/utils.d.ts +65 -0
  184. package/dist/react-native/utils/clipboard.d.ts +27 -0
  185. package/dist/react-native/utils/index.d.ts +3 -0
  186. package/dist/react-native/utils/resolveColorScheme.d.ts +1 -0
  187. package/dist/react-native/utils/tw.d.ts +7 -0
  188. package/dist/shared/constants/colors.d.ts +25 -0
  189. package/dist/shared/constants/index.d.ts +2 -0
  190. package/dist/shared/constants/sizes.d.ts +49 -0
  191. package/dist/shared/index.cjs.js +171 -0
  192. package/dist/shared/index.cjs.js.map +1 -0
  193. package/dist/shared/index.d.ts +3 -0
  194. package/dist/shared/index.esm.js +161 -0
  195. package/dist/shared/index.esm.js.map +1 -0
  196. package/dist/shared/types/common.d.ts +33 -0
  197. package/dist/shared/types/index.d.ts +1 -0
  198. package/dist/shared/utils/index.d.ts +1 -0
  199. package/dist/styles.css +1 -1
  200. package/package.json +50 -8
  201. /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
@@ -0,0 +1,93 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var React = require('react');
9
+ var classVarianceAuthority = require('class-variance-authority');
10
+ var index = require('../notActive/index.cjs.js');
11
+ var datetime = require('../../shared/utils/datetime.cjs.js');
12
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
13
+
14
+ const wrapperStyles = classVarianceAuthority.cva('inline', {
15
+ variants: {
16
+ theme: {
17
+ light: 'text-gray-900',
18
+ dark: 'text-gray-100'
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ theme: 'light'
23
+ }
24
+ });
25
+ /**
26
+ * TimeDelta component renews a human-readable delta string periodically,
27
+ * and optionally wraps it in a tooltip showing the exact date/time.
28
+ * Supports light/dark theme.
29
+ */
30
+ const TimeDelta = ({
31
+ startDate,
32
+ endDate,
33
+ // showTimestampTooltip = true,
34
+ // tooltipDate,
35
+ format = 'default'
36
+ }) => {
37
+ const {
38
+ theme
39
+ } = ThemeContext.useTheme();
40
+ const [timeDelta, setTimeDelta] = React.useState(null);
41
+ // const tooltipDateObj = new Date(tooltipDate ?? endDate)
42
+ React.useEffect(() => {
43
+ if (endDate == null) {
44
+ setTimeDelta(null);
45
+ return;
46
+ }
47
+ let timeoutId;
48
+ const updateDelta = () => {
49
+ const start = startDate != null ? new Date(startDate) : new Date();
50
+ const end = new Date(endDate);
51
+ setTimeDelta(datetime.getTimeDelta(start, end, format));
52
+ const now = new Date();
53
+ const diffMs = Math.abs(end.getTime() - now.getTime());
54
+ if (diffMs > 60000) {
55
+ const msToNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();
56
+ timeoutId = setTimeout(updateDelta, msToNextMinute);
57
+ } else {
58
+ timeoutId = setTimeout(updateDelta, 1000);
59
+ }
60
+ };
61
+ updateDelta();
62
+ return () => clearTimeout(timeoutId);
63
+ }, [startDate, endDate, format]);
64
+ if (timeDelta == null || timeDelta === '') {
65
+ return jsxRuntime.jsx(index.NotActive, {});
66
+ }
67
+ // const showTooltip = showTimestampTooltip && format !== 'detailed' && !isNaN(tooltipDateObj.getTime())
68
+ const content = jsxRuntime.jsx("span", {
69
+ className: wrapperStyles({
70
+ theme
71
+ }),
72
+ children: timeDelta
73
+ });
74
+ // if (showTooltip) {
75
+ // return (
76
+ // <Tooltip
77
+ // placement="top"
78
+ // content={
79
+ // <span className={tooltipContentStyles()}>
80
+ // {tooltipDateObj.toLocaleDateString()}{' '}{tooltipDateObj.toLocaleTimeString()}
81
+ // </span>
82
+ // }
83
+ // >
84
+ // {content}
85
+ // </Tooltip>
86
+ // )
87
+ // }
88
+ return content;
89
+ };
90
+
91
+ exports.TimeDelta = TimeDelta;
92
+ exports.default = TimeDelta;
93
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/timeDelta/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { cva } from 'class-variance-authority'\nimport { NotActive } from '../notActive'\nimport { getTimeDelta, type TimeDeltaFormat } from '../../../shared/utils/datetime'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst wrapperStyles = cva(\n 'inline',\n {\n variants: {\n theme: {\n light: 'text-gray-900',\n dark: 'text-gray-100'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport interface TimeDeltaProps {\n /** Start date for delta calculation, defaults to now */\n startDate?: Date | number | string\n /** End date or timestamp */\n endDate: Date | number | string\n /** Show tooltip with exact timestamp */\n showTimestampTooltip?: boolean\n /** Override date for tooltip instead of endDate */\n tooltipDate?: Date | number | string\n /** Format mode: 'default' shows delta and tooltip, 'detailed' suppresses tooltip */\n format?: TimeDeltaFormat\n}\n\n/**\n * TimeDelta component renews a human-readable delta string periodically,\n * and optionally wraps it in a tooltip showing the exact date/time.\n * Supports light/dark theme.\n */\nexport const TimeDelta: React.FC<TimeDeltaProps> = ({\n startDate,\n endDate,\n // showTimestampTooltip = true,\n // tooltipDate,\n format = 'default'\n}) => {\n const { theme } = useTheme()\n const [timeDelta, setTimeDelta] = useState<string | null>(null)\n // const tooltipDateObj = new Date(tooltipDate ?? endDate)\n\n useEffect(() => {\n if (endDate == null) {\n setTimeDelta(null)\n return\n }\n\n let timeoutId: ReturnType<typeof setTimeout>\n\n const updateDelta = (): void => {\n const start = startDate != null ? new Date(startDate) : new Date()\n const end = new Date(endDate)\n setTimeDelta(getTimeDelta(start, end, format))\n\n const now = new Date()\n const diffMs = Math.abs(end.getTime() - now.getTime())\n if (diffMs > 60_000) {\n const msToNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds()\n timeoutId = setTimeout(updateDelta, msToNextMinute)\n } else {\n timeoutId = setTimeout(updateDelta, 1000)\n }\n }\n\n updateDelta()\n\n return () => clearTimeout(timeoutId)\n }, [startDate, endDate, format])\n\n if (timeDelta == null || timeDelta === '') {\n return <NotActive />\n }\n\n // const showTooltip = showTimestampTooltip && format !== 'detailed' && !isNaN(tooltipDateObj.getTime())\n const content = <span className={wrapperStyles({ theme })}>{timeDelta}</span>\n\n // if (showTooltip) {\n // return (\n // <Tooltip\n // placement=\"top\"\n // content={\n // <span className={tooltipContentStyles()}>\n // {tooltipDateObj.toLocaleDateString()}{' '}{tooltipDateObj.toLocaleTimeString()}\n // </span>\n // }\n // >\n // {content}\n // </Tooltip>\n // )\n // }\n\n return content\n}\n\nexport default TimeDelta "],"names":["wrapperStyles","cva","variants","theme","light","dark","defaultVariants","TimeDelta","startDate","endDate","format","useTheme","timeDelta","setTimeDelta","useState","useEffect","timeoutId","updateDelta","start","Date","end","getTimeDelta","now","diffMs","Math","abs","getTime","msToNextMinute","getSeconds","getMilliseconds","setTimeout","clearTimeout","_jsx","NotActive","content","className","children"],"mappings":";;;;;;;;;;;;;AAMA,MAAMA,aAAa,GAAGC,0BAAG,CACvB,QAAQ,EACR;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,eAAe;AACtBC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,eAAe,EAAE;AACfH,IAAAA,KAAK,EAAE;AACR;AACF,CAAA,CACF;AAeD;;;;AAIG;AACI,MAAMI,SAAS,GAA6BA,CAAC;EAClDC,SAAS;EACTC,OAAO;AACP;AACA;AACAC,EAAAA,MAAM,GAAG;AACV,CAAA,KAAI;EACH,MAAM;AAAEP,IAAAA;GAAO,GAAGQ,qBAAQ,EAAE;EAC5B,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGC,cAAQ,CAAgB,IAAI,CAAC;AAC/D;AAEAC,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIN,OAAO,IAAI,IAAI,EAAE;MACnBI,YAAY,CAAC,IAAI,CAAC;AAClB,MAAA;AACF;AAEA,IAAA,IAAIG,SAAwC;IAE5C,MAAMC,WAAW,GAAGA,MAAW;AAC7B,MAAA,MAAMC,KAAK,GAAGV,SAAS,IAAI,IAAI,GAAG,IAAIW,IAAI,CAACX,SAAS,CAAC,GAAG,IAAIW,IAAI,EAAE;AAClE,MAAA,MAAMC,GAAG,GAAG,IAAID,IAAI,CAACV,OAAO,CAAC;MAC7BI,YAAY,CAACQ,qBAAY,CAACH,KAAK,EAAEE,GAAG,EAAEV,MAAM,CAAC,CAAC;AAE9C,MAAA,MAAMY,GAAG,GAAG,IAAIH,IAAI,EAAE;AACtB,MAAA,MAAMI,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACL,GAAG,CAACM,OAAO,EAAE,GAAGJ,GAAG,CAACI,OAAO,EAAE,CAAC;MACtD,IAAIH,MAAM,GAAG,KAAM,EAAE;AACnB,QAAA,MAAMI,cAAc,GAAG,CAAC,EAAE,GAAGL,GAAG,CAACM,UAAU,EAAE,IAAI,IAAI,GAAGN,GAAG,CAACO,eAAe,EAAE;AAC7Eb,QAAAA,SAAS,GAAGc,UAAU,CAACb,WAAW,EAAEU,cAAc,CAAC;AACrD,OAAC,MAAM;AACLX,QAAAA,SAAS,GAAGc,UAAU,CAACb,WAAW,EAAE,IAAI,CAAC;AAC3C;KACD;AAEDA,IAAAA,WAAW,EAAE;AAEb,IAAA,OAAO,MAAMc,YAAY,CAACf,SAAS,CAAC;GACrC,EAAE,CAACR,SAAS,EAAEC,OAAO,EAAEC,MAAM,CAAC,CAAC;AAEhC,EAAA,IAAIE,SAAS,IAAI,IAAI,IAAIA,SAAS,KAAK,EAAE,EAAE;AACzC,IAAA,OAAOoB,cAAA,CAACC,eAAS,EAAA,EAAA,CAAG;AACtB;AAEA;AACA,EAAA,MAAMC,OAAO,GAAGF,cAAM,CAAA,MAAA,EAAA;IAAAG,SAAS,EAAEnC,aAAa,CAAC;AAAEG,MAAAA;AAAO,KAAA,CAAC;AAAGiC,IAAAA,QAAA,EAAAxB;IAAiB;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,EAAA,OAAOsB,OAAO;AAChB;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { type TimeDeltaFormat } from '../../utils/datetime';
2
+ import { type TimeDeltaFormat } from '../../../shared/utils/datetime';
3
3
  export interface TimeDeltaProps {
4
4
  /** Start date for delta calculation, defaults to now */
5
5
  startDate?: Date | number | string;
@@ -0,0 +1,88 @@
1
+ "use client";
2
+
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import { useState, useEffect } from 'react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { NotActive } from '../notActive/index.esm.js';
7
+ import { getTimeDelta } from '../../shared/utils/datetime.esm.js';
8
+ import { useTheme } from '../../contexts/ThemeContext.esm.js';
9
+
10
+ const wrapperStyles = cva('inline', {
11
+ variants: {
12
+ theme: {
13
+ light: 'text-gray-900',
14
+ dark: 'text-gray-100'
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ theme: 'light'
19
+ }
20
+ });
21
+ /**
22
+ * TimeDelta component renews a human-readable delta string periodically,
23
+ * and optionally wraps it in a tooltip showing the exact date/time.
24
+ * Supports light/dark theme.
25
+ */
26
+ const TimeDelta = ({
27
+ startDate,
28
+ endDate,
29
+ // showTimestampTooltip = true,
30
+ // tooltipDate,
31
+ format = 'default'
32
+ }) => {
33
+ const {
34
+ theme
35
+ } = useTheme();
36
+ const [timeDelta, setTimeDelta] = useState(null);
37
+ // const tooltipDateObj = new Date(tooltipDate ?? endDate)
38
+ useEffect(() => {
39
+ if (endDate == null) {
40
+ setTimeDelta(null);
41
+ return;
42
+ }
43
+ let timeoutId;
44
+ const updateDelta = () => {
45
+ const start = startDate != null ? new Date(startDate) : new Date();
46
+ const end = new Date(endDate);
47
+ setTimeDelta(getTimeDelta(start, end, format));
48
+ const now = new Date();
49
+ const diffMs = Math.abs(end.getTime() - now.getTime());
50
+ if (diffMs > 60000) {
51
+ const msToNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();
52
+ timeoutId = setTimeout(updateDelta, msToNextMinute);
53
+ } else {
54
+ timeoutId = setTimeout(updateDelta, 1000);
55
+ }
56
+ };
57
+ updateDelta();
58
+ return () => clearTimeout(timeoutId);
59
+ }, [startDate, endDate, format]);
60
+ if (timeDelta == null || timeDelta === '') {
61
+ return jsx(NotActive, {});
62
+ }
63
+ // const showTooltip = showTimestampTooltip && format !== 'detailed' && !isNaN(tooltipDateObj.getTime())
64
+ const content = jsx("span", {
65
+ className: wrapperStyles({
66
+ theme
67
+ }),
68
+ children: timeDelta
69
+ });
70
+ // if (showTooltip) {
71
+ // return (
72
+ // <Tooltip
73
+ // placement="top"
74
+ // content={
75
+ // <span className={tooltipContentStyles()}>
76
+ // {tooltipDateObj.toLocaleDateString()}{' '}{tooltipDateObj.toLocaleTimeString()}
77
+ // </span>
78
+ // }
79
+ // >
80
+ // {content}
81
+ // </Tooltip>
82
+ // )
83
+ // }
84
+ return content;
85
+ };
86
+
87
+ export { TimeDelta, TimeDelta as default };
88
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/timeDelta/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { cva } from 'class-variance-authority'\nimport { NotActive } from '../notActive'\nimport { getTimeDelta, type TimeDeltaFormat } from '../../../shared/utils/datetime'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst wrapperStyles = cva(\n 'inline',\n {\n variants: {\n theme: {\n light: 'text-gray-900',\n dark: 'text-gray-100'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport interface TimeDeltaProps {\n /** Start date for delta calculation, defaults to now */\n startDate?: Date | number | string\n /** End date or timestamp */\n endDate: Date | number | string\n /** Show tooltip with exact timestamp */\n showTimestampTooltip?: boolean\n /** Override date for tooltip instead of endDate */\n tooltipDate?: Date | number | string\n /** Format mode: 'default' shows delta and tooltip, 'detailed' suppresses tooltip */\n format?: TimeDeltaFormat\n}\n\n/**\n * TimeDelta component renews a human-readable delta string periodically,\n * and optionally wraps it in a tooltip showing the exact date/time.\n * Supports light/dark theme.\n */\nexport const TimeDelta: React.FC<TimeDeltaProps> = ({\n startDate,\n endDate,\n // showTimestampTooltip = true,\n // tooltipDate,\n format = 'default'\n}) => {\n const { theme } = useTheme()\n const [timeDelta, setTimeDelta] = useState<string | null>(null)\n // const tooltipDateObj = new Date(tooltipDate ?? endDate)\n\n useEffect(() => {\n if (endDate == null) {\n setTimeDelta(null)\n return\n }\n\n let timeoutId: ReturnType<typeof setTimeout>\n\n const updateDelta = (): void => {\n const start = startDate != null ? new Date(startDate) : new Date()\n const end = new Date(endDate)\n setTimeDelta(getTimeDelta(start, end, format))\n\n const now = new Date()\n const diffMs = Math.abs(end.getTime() - now.getTime())\n if (diffMs > 60_000) {\n const msToNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds()\n timeoutId = setTimeout(updateDelta, msToNextMinute)\n } else {\n timeoutId = setTimeout(updateDelta, 1000)\n }\n }\n\n updateDelta()\n\n return () => clearTimeout(timeoutId)\n }, [startDate, endDate, format])\n\n if (timeDelta == null || timeDelta === '') {\n return <NotActive />\n }\n\n // const showTooltip = showTimestampTooltip && format !== 'detailed' && !isNaN(tooltipDateObj.getTime())\n const content = <span className={wrapperStyles({ theme })}>{timeDelta}</span>\n\n // if (showTooltip) {\n // return (\n // <Tooltip\n // placement=\"top\"\n // content={\n // <span className={tooltipContentStyles()}>\n // {tooltipDateObj.toLocaleDateString()}{' '}{tooltipDateObj.toLocaleTimeString()}\n // </span>\n // }\n // >\n // {content}\n // </Tooltip>\n // )\n // }\n\n return content\n}\n\nexport default TimeDelta "],"names":["wrapperStyles","cva","variants","theme","light","dark","defaultVariants","TimeDelta","startDate","endDate","format","useTheme","timeDelta","setTimeDelta","useState","useEffect","timeoutId","updateDelta","start","Date","end","getTimeDelta","now","diffMs","Math","abs","getTime","msToNextMinute","getSeconds","getMilliseconds","setTimeout","clearTimeout","_jsx","NotActive","content","className","children"],"mappings":";;;;;;;;;AAMA,MAAMA,aAAa,GAAGC,GAAG,CACvB,QAAQ,EACR;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,eAAe;AACtBC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,eAAe,EAAE;AACfH,IAAAA,KAAK,EAAE;AACR;AACF,CAAA,CACF;AAeD;;;;AAIG;AACI,MAAMI,SAAS,GAA6BA,CAAC;EAClDC,SAAS;EACTC,OAAO;AACP;AACA;AACAC,EAAAA,MAAM,GAAG;AACV,CAAA,KAAI;EACH,MAAM;AAAEP,IAAAA;GAAO,GAAGQ,QAAQ,EAAE;EAC5B,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGC,QAAQ,CAAgB,IAAI,CAAC;AAC/D;AAEAC,EAAAA,SAAS,CAAC,MAAK;IACb,IAAIN,OAAO,IAAI,IAAI,EAAE;MACnBI,YAAY,CAAC,IAAI,CAAC;AAClB,MAAA;AACF;AAEA,IAAA,IAAIG,SAAwC;IAE5C,MAAMC,WAAW,GAAGA,MAAW;AAC7B,MAAA,MAAMC,KAAK,GAAGV,SAAS,IAAI,IAAI,GAAG,IAAIW,IAAI,CAACX,SAAS,CAAC,GAAG,IAAIW,IAAI,EAAE;AAClE,MAAA,MAAMC,GAAG,GAAG,IAAID,IAAI,CAACV,OAAO,CAAC;MAC7BI,YAAY,CAACQ,YAAY,CAACH,KAAK,EAAEE,GAAG,EAAEV,MAAM,CAAC,CAAC;AAE9C,MAAA,MAAMY,GAAG,GAAG,IAAIH,IAAI,EAAE;AACtB,MAAA,MAAMI,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACL,GAAG,CAACM,OAAO,EAAE,GAAGJ,GAAG,CAACI,OAAO,EAAE,CAAC;MACtD,IAAIH,MAAM,GAAG,KAAM,EAAE;AACnB,QAAA,MAAMI,cAAc,GAAG,CAAC,EAAE,GAAGL,GAAG,CAACM,UAAU,EAAE,IAAI,IAAI,GAAGN,GAAG,CAACO,eAAe,EAAE;AAC7Eb,QAAAA,SAAS,GAAGc,UAAU,CAACb,WAAW,EAAEU,cAAc,CAAC;AACrD,OAAC,MAAM;AACLX,QAAAA,SAAS,GAAGc,UAAU,CAACb,WAAW,EAAE,IAAI,CAAC;AAC3C;KACD;AAEDA,IAAAA,WAAW,EAAE;AAEb,IAAA,OAAO,MAAMc,YAAY,CAACf,SAAS,CAAC;GACrC,EAAE,CAACR,SAAS,EAAEC,OAAO,EAAEC,MAAM,CAAC,CAAC;AAEhC,EAAA,IAAIE,SAAS,IAAI,IAAI,IAAIA,SAAS,KAAK,EAAE,EAAE;AACzC,IAAA,OAAOoB,GAAA,CAACC,SAAS,EAAA,EAAA,CAAG;AACtB;AAEA;AACA,EAAA,MAAMC,OAAO,GAAGF,GAAM,CAAA,MAAA,EAAA;IAAAG,SAAS,EAAEnC,aAAa,CAAC;AAAEG,MAAAA;AAAO,KAAA,CAAC;AAAGiC,IAAAA,QAAA,EAAAxB;IAAiB;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,EAAA,OAAOsB,OAAO;AAChB;;;;"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var tslib = require('tslib');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
10
+ var index = require('../icons/index.cjs.js');
11
+
12
+ /**
13
+ * Renders an icon corresponding to the given `status`.
14
+ * If `status` is not recognized, returns null.
15
+ * Colors adapt to light/dark theme unless overridden.
16
+ */
17
+ const TransactionStatusIcon = _a => {
18
+ var {
19
+ status,
20
+ color
21
+ } = _a,
22
+ props = tslib.__rest(_a, ["status", "color"]);
23
+ const {
24
+ theme
25
+ } = ThemeContext.useTheme();
26
+ const map = {
27
+ SUCCESS: index.SuccessIcon,
28
+ FAIL: index.ErrorIcon,
29
+ QUEUED: index.QueuedIcon,
30
+ POOLED: index.PooledIcon,
31
+ BROADCASTED: index.BroadcastedIcon
32
+ };
33
+ const IconComponent = map[status];
34
+ // Default colors based on theme, if no color override provided
35
+ const defaultColors = {
36
+ light: {
37
+ SUCCESS: '#1CC400',
38
+ FAIL: '#F45858',
39
+ QUEUED: '#F4A358',
40
+ POOLED: '#008DE4',
41
+ BROADCASTED: '#008DE4'
42
+ },
43
+ dark: {
44
+ SUCCESS: '#22D32E',
45
+ FAIL: '#FF6B6B',
46
+ QUEUED: '#FFB366',
47
+ POOLED: '#42A5F5',
48
+ BROADCASTED: '#42A5F5'
49
+ }
50
+ };
51
+ const iconColor = color !== null && color !== void 0 ? color : defaultColors[theme][status];
52
+ return IconComponent != null ? jsxRuntime.jsx(IconComponent, Object.assign({
53
+ color: iconColor
54
+ }, props)) : null;
55
+ };
56
+
57
+ exports.TransactionStatusIcon = TransactionStatusIcon;
58
+ exports.default = TransactionStatusIcon;
59
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/transactionStatusIcon/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport {\n SuccessIcon,\n ErrorIcon,\n QueuedIcon,\n PooledIcon,\n BroadcastedIcon\n} from '../icons'\n\n/**\n * Available status keys for which an icon will be rendered.\n */\nexport type StatusKey =\n | 'SUCCESS'\n | 'FAIL'\n | 'QUEUED'\n | 'POOLED'\n | 'BROADCASTED'\n\n/**\n * Props for the TransactionStatusIcon component.\n * Inherits all props of SuccessIcon (assumed representative of all icons),\n * plus a `status` field to choose which icon to render.\n */\nexport interface TransactionStatusIconProps\n extends Omit<React.ComponentProps<typeof SuccessIcon>, 'size' | 'color'> {\n /** Which status icon to show. */\n status: StatusKey\n /** Optional override for icon size. */\n size?: number\n /** Optional override for icon color. */\n color?: string\n}\n\n/**\n * Renders an icon corresponding to the given `status`.\n * If `status` is not recognized, returns null.\n * Colors adapt to light/dark theme unless overridden.\n */\nexport const TransactionStatusIcon: React.FC<TransactionStatusIconProps> = ({ status, color, ...props }) => {\n const { theme } = useTheme()\n \n const map = {\n SUCCESS: SuccessIcon,\n FAIL: ErrorIcon,\n QUEUED: QueuedIcon,\n POOLED: PooledIcon,\n BROADCASTED: BroadcastedIcon\n } as const\n\n const IconComponent = map[status]\n\n // Default colors based on theme, if no color override provided\n const defaultColors = {\n light: {\n SUCCESS: '#1CC400',\n FAIL: '#F45858',\n QUEUED: '#F4A358',\n POOLED: '#008DE4',\n BROADCASTED: '#008DE4'\n },\n dark: {\n SUCCESS: '#22D32E',\n FAIL: '#FF6B6B',\n QUEUED: '#FFB366',\n POOLED: '#42A5F5',\n BROADCASTED: '#42A5F5'\n }\n }\n\n const iconColor = color ?? defaultColors[theme][status]\n\n return IconComponent != null ? <IconComponent color={iconColor} {...props} /> : null\n}\n\nexport default TransactionStatusIcon "],"names":["TransactionStatusIcon","_a","status","color","props","__rest","theme","useTheme","map","SUCCESS","SuccessIcon","FAIL","ErrorIcon","QUEUED","QueuedIcon","POOLED","PooledIcon","BROADCASTED","BroadcastedIcon","IconComponent","defaultColors","light","dark","iconColor","_jsx","Object","assign"],"mappings":";;;;;;;;;;;AAmCA;;;;AAIG;AACUA,MAAAA,qBAAqB,GAA0CC,EAA2B,IAAI;MAA/B;MAAEC,MAAM;AAAEC,MAAAA;AAAK,KAAA,GAAAF,EAAY;IAAPG,KAAK,GAAAC,YAAA,CAAAJ,EAAA,EAAzB,mBAA2B,CAAF;EACnG,MAAM;AAAEK,IAAAA;GAAO,GAAGC,qBAAQ,EAAE;AAE5B,EAAA,MAAMC,GAAG,GAAG;AACVC,IAAAA,OAAO,EAAEC,iBAAW;AACpBC,IAAAA,IAAI,EAAEC,eAAS;AACfC,IAAAA,MAAM,EAAEC,gBAAU;AAClBC,IAAAA,MAAM,EAAEC,gBAAU;AAClBC,IAAAA,WAAW,EAAEC;GACL;AAEV,EAAA,MAAMC,aAAa,GAAGX,GAAG,CAACN,MAAM,CAAC;AAEjC;AACA,EAAA,MAAMkB,aAAa,GAAG;AACpBC,IAAAA,KAAK,EAAE;AACLZ,MAAAA,OAAO,EAAE,SAAS;AAClBE,MAAAA,IAAI,EAAE,SAAS;AACfE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,WAAW,EAAE;KACd;AACDK,IAAAA,IAAI,EAAE;AACJb,MAAAA,OAAO,EAAE,SAAS;AAClBE,MAAAA,IAAI,EAAE,SAAS;AACfE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,WAAW,EAAE;AACd;GACF;AAED,EAAA,MAAMM,SAAS,GAAGpB,KAAK,KAAA,IAAA,IAALA,KAAK,KAAL,MAAA,GAAAA,KAAK,GAAIiB,aAAa,CAACd,KAAK,CAAC,CAACJ,MAAM,CAAC;EAEvD,OAAOiB,aAAa,IAAI,IAAI,GAAGK,eAACL,aAAa,EAAAM,MAAA,CAAAC,MAAA,CAAA;AAACvB,IAAAA,KAAK,EAAEoB;KAAenB,KAAK,CAAA,CAAI,GAAG,IAAI;AACtF;;;;;"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+
3
+ import { __rest } from 'tslib';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { useTheme } from '../../contexts/ThemeContext.esm.js';
6
+ import { BroadcastedIcon, PooledIcon, QueuedIcon, ErrorIcon, SuccessIcon } from '../icons/index.esm.js';
7
+
8
+ /**
9
+ * Renders an icon corresponding to the given `status`.
10
+ * If `status` is not recognized, returns null.
11
+ * Colors adapt to light/dark theme unless overridden.
12
+ */
13
+ const TransactionStatusIcon = _a => {
14
+ var {
15
+ status,
16
+ color
17
+ } = _a,
18
+ props = __rest(_a, ["status", "color"]);
19
+ const {
20
+ theme
21
+ } = useTheme();
22
+ const map = {
23
+ SUCCESS: SuccessIcon,
24
+ FAIL: ErrorIcon,
25
+ QUEUED: QueuedIcon,
26
+ POOLED: PooledIcon,
27
+ BROADCASTED: BroadcastedIcon
28
+ };
29
+ const IconComponent = map[status];
30
+ // Default colors based on theme, if no color override provided
31
+ const defaultColors = {
32
+ light: {
33
+ SUCCESS: '#1CC400',
34
+ FAIL: '#F45858',
35
+ QUEUED: '#F4A358',
36
+ POOLED: '#008DE4',
37
+ BROADCASTED: '#008DE4'
38
+ },
39
+ dark: {
40
+ SUCCESS: '#22D32E',
41
+ FAIL: '#FF6B6B',
42
+ QUEUED: '#FFB366',
43
+ POOLED: '#42A5F5',
44
+ BROADCASTED: '#42A5F5'
45
+ }
46
+ };
47
+ const iconColor = color !== null && color !== void 0 ? color : defaultColors[theme][status];
48
+ return IconComponent != null ? jsx(IconComponent, Object.assign({
49
+ color: iconColor
50
+ }, props)) : null;
51
+ };
52
+
53
+ export { TransactionStatusIcon, TransactionStatusIcon as default };
54
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/transactionStatusIcon/index.tsx"],"sourcesContent":["import React from 'react'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport {\n SuccessIcon,\n ErrorIcon,\n QueuedIcon,\n PooledIcon,\n BroadcastedIcon\n} from '../icons'\n\n/**\n * Available status keys for which an icon will be rendered.\n */\nexport type StatusKey =\n | 'SUCCESS'\n | 'FAIL'\n | 'QUEUED'\n | 'POOLED'\n | 'BROADCASTED'\n\n/**\n * Props for the TransactionStatusIcon component.\n * Inherits all props of SuccessIcon (assumed representative of all icons),\n * plus a `status` field to choose which icon to render.\n */\nexport interface TransactionStatusIconProps\n extends Omit<React.ComponentProps<typeof SuccessIcon>, 'size' | 'color'> {\n /** Which status icon to show. */\n status: StatusKey\n /** Optional override for icon size. */\n size?: number\n /** Optional override for icon color. */\n color?: string\n}\n\n/**\n * Renders an icon corresponding to the given `status`.\n * If `status` is not recognized, returns null.\n * Colors adapt to light/dark theme unless overridden.\n */\nexport const TransactionStatusIcon: React.FC<TransactionStatusIconProps> = ({ status, color, ...props }) => {\n const { theme } = useTheme()\n \n const map = {\n SUCCESS: SuccessIcon,\n FAIL: ErrorIcon,\n QUEUED: QueuedIcon,\n POOLED: PooledIcon,\n BROADCASTED: BroadcastedIcon\n } as const\n\n const IconComponent = map[status]\n\n // Default colors based on theme, if no color override provided\n const defaultColors = {\n light: {\n SUCCESS: '#1CC400',\n FAIL: '#F45858',\n QUEUED: '#F4A358',\n POOLED: '#008DE4',\n BROADCASTED: '#008DE4'\n },\n dark: {\n SUCCESS: '#22D32E',\n FAIL: '#FF6B6B',\n QUEUED: '#FFB366',\n POOLED: '#42A5F5',\n BROADCASTED: '#42A5F5'\n }\n }\n\n const iconColor = color ?? defaultColors[theme][status]\n\n return IconComponent != null ? <IconComponent color={iconColor} {...props} /> : null\n}\n\nexport default TransactionStatusIcon "],"names":["TransactionStatusIcon","_a","status","color","props","__rest","theme","useTheme","map","SUCCESS","SuccessIcon","FAIL","ErrorIcon","QUEUED","QueuedIcon","POOLED","PooledIcon","BROADCASTED","BroadcastedIcon","IconComponent","defaultColors","light","dark","iconColor","_jsx","Object","assign"],"mappings":";;;;;;;AAmCA;;;;AAIG;AACUA,MAAAA,qBAAqB,GAA0CC,EAA2B,IAAI;MAA/B;MAAEC,MAAM;AAAEC,MAAAA;AAAK,KAAA,GAAAF,EAAY;IAAPG,KAAK,GAAAC,MAAA,CAAAJ,EAAA,EAAzB,mBAA2B,CAAF;EACnG,MAAM;AAAEK,IAAAA;GAAO,GAAGC,QAAQ,EAAE;AAE5B,EAAA,MAAMC,GAAG,GAAG;AACVC,IAAAA,OAAO,EAAEC,WAAW;AACpBC,IAAAA,IAAI,EAAEC,SAAS;AACfC,IAAAA,MAAM,EAAEC,UAAU;AAClBC,IAAAA,MAAM,EAAEC,UAAU;AAClBC,IAAAA,WAAW,EAAEC;GACL;AAEV,EAAA,MAAMC,aAAa,GAAGX,GAAG,CAACN,MAAM,CAAC;AAEjC;AACA,EAAA,MAAMkB,aAAa,GAAG;AACpBC,IAAAA,KAAK,EAAE;AACLZ,MAAAA,OAAO,EAAE,SAAS;AAClBE,MAAAA,IAAI,EAAE,SAAS;AACfE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,WAAW,EAAE;KACd;AACDK,IAAAA,IAAI,EAAE;AACJb,MAAAA,OAAO,EAAE,SAAS;AAClBE,MAAAA,IAAI,EAAE,SAAS;AACfE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,MAAM,EAAE,SAAS;AACjBE,MAAAA,WAAW,EAAE;AACd;GACF;AAED,EAAA,MAAMM,SAAS,GAAGpB,KAAK,KAAA,IAAA,IAALA,KAAK,KAAL,MAAA,GAAAA,KAAK,GAAIiB,aAAa,CAACd,KAAK,CAAC,CAACJ,MAAM,CAAC;EAEvD,OAAOiB,aAAa,IAAI,IAAI,GAAGK,IAACL,aAAa,EAAAM,MAAA,CAAAC,MAAA,CAAA;AAACvB,IAAAA,KAAK,EAAEoB;KAAenB,KAAK,CAAA,CAAI,GAAG,IAAI;AACtF;;;;"}
@@ -0,0 +1,181 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var tslib = require('tslib');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var classVarianceAuthority = require('class-variance-authority');
10
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
11
+ var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
12
+
13
+ const valueCard = classVarianceAuthority.cva('flex items-center transition-all outline outline-1 outline-offset-[-1px]', {
14
+ variants: {
15
+ theme: {
16
+ light: 'outline-gray-200',
17
+ dark: 'bg-gray-800/50 outline-gray-400'
18
+ },
19
+ colorScheme: {
20
+ default: '',
21
+ transparent: 'bg-transparent',
22
+ green: 'text-green-500 bg-green-200 outline-green-400',
23
+ lightBlue: 'bg-dash-brand-dim/10 !outline-dash-brand/20',
24
+ white: 'bg-white',
25
+ lightGray: 'bg-dash-primary-die-subdued',
26
+ yellow: 'bg-dash-yellow-light !outline-dash-yellow'
27
+ },
28
+ size: {
29
+ xs: 'px-[0.5rem] py-[0.25rem] rounded-[0.25rem]',
30
+ sm: 'dash-block-sm',
31
+ md: 'dash-block-md',
32
+ xl: 'dash-block-xl'
33
+ },
34
+ clickable: {
35
+ false: '',
36
+ true: 'cursor-pointer transition-colors active:translate-y-px active:opacity-90'
37
+ },
38
+ loading: {
39
+ false: '',
40
+ true: 'animate-pulse'
41
+ },
42
+ border: {
43
+ false: '!outline-none',
44
+ true: ''
45
+ }
46
+ },
47
+ compoundVariants: [
48
+ // default scheme hover
49
+ {
50
+ theme: 'light',
51
+ colorScheme: 'default',
52
+ clickable: true,
53
+ class: 'hover:bg-gray-200/50'
54
+ }, {
55
+ theme: 'dark',
56
+ colorScheme: 'default',
57
+ clickable: true,
58
+ class: 'hover:bg-gray-700/50'
59
+ },
60
+ // transparent scheme hover
61
+ {
62
+ theme: 'light',
63
+ colorScheme: 'transparent',
64
+ clickable: true,
65
+ class: 'hover:bg-gray-100'
66
+ }, {
67
+ theme: 'dark',
68
+ colorScheme: 'transparent',
69
+ clickable: true,
70
+ class: 'hover:bg-gray-900'
71
+ },
72
+ // green scheme hover
73
+ {
74
+ theme: 'light',
75
+ colorScheme: 'green',
76
+ clickable: true,
77
+ class: 'hover:bg-green-300'
78
+ }, {
79
+ theme: 'dark',
80
+ colorScheme: 'green',
81
+ clickable: true,
82
+ class: 'hover:bg-green-400'
83
+ },
84
+ // green lightBlue
85
+ {
86
+ colorScheme: 'lightBlue',
87
+ clickable: true,
88
+ class: 'hover:bg-dash-brand/15'
89
+ },
90
+ // white
91
+ {
92
+ theme: 'light',
93
+ colorScheme: 'white',
94
+ clickable: true,
95
+ class: 'hover:bg-gray-100'
96
+ }, {
97
+ theme: 'dark',
98
+ colorScheme: 'white',
99
+ clickable: true,
100
+ class: 'hover:bg-gray-100'
101
+ },
102
+ // lightGray scheme hover
103
+ {
104
+ theme: 'light',
105
+ colorScheme: 'lightGray',
106
+ clickable: true,
107
+ class: 'hover:bg-dash-primary-die'
108
+ }, {
109
+ theme: 'dark',
110
+ colorScheme: 'lightGray',
111
+ clickable: true,
112
+ class: 'hover:bg-gray-600'
113
+ },
114
+ // yellow scheme hover
115
+ {
116
+ colorScheme: 'yellow',
117
+ clickable: true,
118
+ class: 'hover:bg-dash-yellow'
119
+ }],
120
+ defaultVariants: {
121
+ theme: 'light',
122
+ colorScheme: 'default',
123
+ size: 'md',
124
+ clickable: false,
125
+ loading: false,
126
+ border: true
127
+ }
128
+ });
129
+ /**
130
+ * A card container that adapts to light/dark theme,
131
+ * supports various color schemes, sizes, clickability,
132
+ * loading state, and optional border styling.
133
+ *
134
+ * @example
135
+ * <ValueCard colorScheme="green" border as={Link} link="/foo">
136
+ * Go
137
+ * </ValueCard>
138
+ */
139
+ const ValueCard = _a => {
140
+ var _b;
141
+ var {
142
+ as,
143
+ link = '',
144
+ colorScheme,
145
+ colorSchemeLight,
146
+ colorSchemeDark,
147
+ size,
148
+ clickable = false,
149
+ loading,
150
+ border,
151
+ className = '',
152
+ children
153
+ } = _a,
154
+ props = tslib.__rest(_a, ["as", "link", "colorScheme", "colorSchemeLight", "colorSchemeDark", "size", "clickable", "loading", "border", "className", "children"]);
155
+ const {
156
+ theme
157
+ } = ThemeContext.useTheme();
158
+ const effectiveColorScheme = (_b = useColorScheme.useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark)) !== null && _b !== void 0 ? _b : 'default';
159
+ const isClickable = Boolean(link !== '' || clickable);
160
+ const classes = valueCard({
161
+ theme,
162
+ colorScheme: effectiveColorScheme,
163
+ size,
164
+ clickable: isClickable,
165
+ loading,
166
+ border
167
+ }) + ' ' + String(className);
168
+ // choose element: custom `as`, or <a> if link, else <div>
169
+ const Component = as !== null && as !== void 0 ? as : link !== '' ? 'a' : 'div';
170
+ const mergedProps = Object.assign(Object.assign({}, props), {
171
+ className: classes
172
+ });
173
+ if (link !== '') mergedProps.href = link;
174
+ return jsxRuntime.jsx(Component, Object.assign({}, mergedProps, {
175
+ children: children
176
+ }));
177
+ };
178
+
179
+ exports.ValueCard = ValueCard;
180
+ exports.default = ValueCard;
181
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/valueCard/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\nconst valueCard = cva(\n 'flex items-center transition-all outline outline-1 outline-offset-[-1px]',\n {\n variants: {\n theme: {\n light: 'outline-gray-200',\n dark: 'bg-gray-800/50 outline-gray-400'\n },\n colorScheme: {\n default: '',\n transparent: 'bg-transparent',\n green: 'text-green-500 bg-green-200 outline-green-400',\n lightBlue: 'bg-dash-brand-dim/10 !outline-dash-brand/20',\n white: 'bg-white',\n lightGray: 'bg-dash-primary-die-subdued',\n yellow: 'bg-dash-yellow-light !outline-dash-yellow'\n },\n size: {\n xs: 'px-[0.5rem] py-[0.25rem] rounded-[0.25rem]',\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n clickable: {\n false: '',\n true: 'cursor-pointer transition-colors active:translate-y-px active:opacity-90'\n },\n loading: {\n false: '',\n true: 'animate-pulse'\n },\n border: {\n false: '!outline-none',\n true: ''\n }\n },\n compoundVariants: [\n // default scheme hover\n { theme: 'light', colorScheme: 'default', clickable: true, class: 'hover:bg-gray-200/50' },\n { theme: 'dark', colorScheme: 'default', clickable: true, class: 'hover:bg-gray-700/50' },\n // transparent scheme hover\n { theme: 'light', colorScheme: 'transparent', clickable: true, class: 'hover:bg-gray-100' },\n { theme: 'dark', colorScheme: 'transparent', clickable: true, class: 'hover:bg-gray-900' },\n // green scheme hover\n { theme: 'light', colorScheme: 'green', clickable: true, class: 'hover:bg-green-300' },\n { theme: 'dark', colorScheme: 'green', clickable: true, class: 'hover:bg-green-400' },\n // green lightBlue\n { colorScheme: 'lightBlue', clickable: true, class: 'hover:bg-dash-brand/15' },\n // white\n { theme: 'light', colorScheme: 'white', clickable: true, class: 'hover:bg-gray-100' },\n { theme: 'dark', colorScheme: 'white', clickable: true, class: 'hover:bg-gray-100' },\n // lightGray scheme hover\n { theme: 'light', colorScheme: 'lightGray', clickable: true, class: 'hover:bg-dash-primary-die' },\n { theme: 'dark', colorScheme: 'lightGray', clickable: true, class: 'hover:bg-gray-600' },\n // yellow scheme hover\n { colorScheme: 'yellow', clickable: true, class: 'hover:bg-dash-yellow' }\n ],\n defaultVariants: {\n theme: 'light',\n colorScheme: 'default',\n size: 'md',\n clickable: false,\n loading: false,\n border: true\n }\n }\n)\n\ntype ValueCardVariants = VariantProps<typeof valueCard>\n\nexport interface ValueCardProps extends Omit<ValueCardVariants, 'theme'> {\n /** If you pass an `as` component, it'll receive `href` when `link` is set */\n as?: React.ElementType\n /** Only applies `href` if `as` is `'a'` or a component that accepts `href` */\n link?: string\n className?: string\n children: React.ReactNode\n /** Color scheme override for light theme */\n colorSchemeLight?: 'default' | 'transparent' | 'green' | 'lightBlue' | 'white' | 'lightGray' | 'yellow'\n /** Color scheme override for dark theme */\n colorSchemeDark?: 'default' | 'transparent' | 'green' | 'lightBlue' | 'white' | 'lightGray' | 'yellow'\n /** Additional props to pass to the underlying element */\n [key: string]: any\n}\n\n/**\n * A card container that adapts to light/dark theme,\n * supports various color schemes, sizes, clickability,\n * loading state, and optional border styling.\n *\n * @example\n * <ValueCard colorScheme=\"green\" border as={Link} link=\"/foo\">\n * Go\n * </ValueCard>\n */\nexport const ValueCard: React.FC<ValueCardProps> = ({\n as,\n link = '',\n colorScheme,\n colorSchemeLight,\n colorSchemeDark,\n size,\n clickable = false,\n loading,\n border,\n className = '',\n children,\n ...props\n}) => {\n const { theme } = useTheme()\n const effectiveColorScheme = useColorScheme(colorScheme, colorSchemeLight, colorSchemeDark) ?? 'default'\n const isClickable = Boolean(link !== '' || clickable)\n\n const classes = valueCard({\n theme,\n colorScheme: effectiveColorScheme,\n size,\n clickable: isClickable,\n loading,\n border\n }) + ' ' + (String(className))\n\n // choose element: custom `as`, or <a> if link, else <div>\n const Component = as ?? (link !== '' ? 'a' : 'div')\n\n const mergedProps: any = { ...props, className: classes }\n if (link !== '') mergedProps.href = link\n\n return <Component {...mergedProps}>{children}</Component>\n}\n\nexport default ValueCard "],"names":["valueCard","cva","variants","theme","light","dark","colorScheme","default","transparent","green","lightBlue","white","lightGray","yellow","size","xs","sm","md","xl","clickable","false","true","loading","border","compoundVariants","class","defaultVariants","ValueCard","_a","as","link","colorSchemeLight","colorSchemeDark","className","children","props","__rest","useTheme","effectiveColorScheme","_b","useColorScheme","isClickable","Boolean","classes","String","Component","mergedProps","href","_jsx","Object","assign"],"mappings":"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"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { VariantProps } from 'class-variance-authority';
3
3
  declare const valueCard: (props?: ({
4
4
  theme?: "light" | "dark" | null | undefined;
5
- colorScheme?: "white" | "default" | "lightBlue" | "lightGray" | "green" | "transparent" | "yellow" | null | undefined;
5
+ colorScheme?: "white" | "default" | "lightBlue" | "lightGray" | "green" | "yellow" | "transparent" | null | undefined;
6
6
  size?: "xs" | "sm" | "xl" | "md" | null | undefined;
7
7
  clickable?: boolean | null | undefined;
8
8
  loading?: boolean | null | undefined;
@@ -16,6 +16,10 @@ export interface ValueCardProps extends Omit<ValueCardVariants, 'theme'> {
16
16
  link?: string;
17
17
  className?: string;
18
18
  children: React.ReactNode;
19
+ /** Color scheme override for light theme */
20
+ colorSchemeLight?: 'default' | 'transparent' | 'green' | 'lightBlue' | 'white' | 'lightGray' | 'yellow';
21
+ /** Color scheme override for dark theme */
22
+ colorSchemeDark?: 'default' | 'transparent' | 'green' | 'lightBlue' | 'white' | 'lightGray' | 'yellow';
19
23
  /** Additional props to pass to the underlying element */
20
24
  [key: string]: any;
21
25
  }