dash-ui-kit 1.0.93 → 2.0.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.
- package/README.md +52 -0
- package/dist/react/components/accordion/index.cjs.js +193 -0
- package/dist/react/components/accordion/index.cjs.js.map +1 -0
- package/dist/react/components/accordion/index.esm.js +169 -0
- package/dist/react/components/accordion/index.esm.js.map +1 -0
- package/dist/react/components/avatar/index.cjs.js +39 -0
- package/dist/react/components/avatar/index.cjs.js.map +1 -0
- package/dist/react/components/avatar/index.esm.js +34 -0
- package/dist/react/components/avatar/index.esm.js.map +1 -0
- package/dist/react/components/badge/index.cjs.js +92 -0
- package/dist/react/components/badge/index.cjs.js.map +1 -0
- package/dist/react/components/badge/index.esm.js +87 -0
- package/dist/react/components/badge/index.esm.js.map +1 -0
- package/dist/react/components/bigNumber/index.cjs.js +100 -0
- package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
- package/dist/react/components/bigNumber/index.esm.js +95 -0
- package/dist/react/components/bigNumber/index.esm.js.map +1 -0
- package/dist/react/components/button/index.cjs.js +535 -0
- package/dist/react/components/button/index.cjs.js.map +1 -0
- package/dist/react/components/button/index.d.ts +3 -1
- package/dist/react/components/button/index.esm.js +530 -0
- package/dist/react/components/button/index.esm.js.map +1 -0
- package/dist/react/components/copyButton/index.cjs.js +95 -0
- package/dist/react/components/copyButton/index.cjs.js.map +1 -0
- package/dist/react/components/copyButton/index.esm.js +71 -0
- package/dist/react/components/copyButton/index.esm.js.map +1 -0
- package/dist/react/components/dashLogo/index.cjs.js +74 -0
- package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
- package/dist/react/components/dashLogo/index.esm.js +69 -0
- package/dist/react/components/dashLogo/index.esm.js.map +1 -0
- package/dist/react/components/dateBlock/index.cjs.js +120 -0
- package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
- package/dist/react/components/dateBlock/index.esm.js +115 -0
- package/dist/react/components/dateBlock/index.esm.js.map +1 -0
- package/dist/react/components/dialog/index.cjs.js +292 -0
- package/dist/react/components/dialog/index.cjs.js.map +1 -0
- package/dist/react/components/dialog/index.esm.js +270 -0
- package/dist/react/components/dialog/index.esm.js.map +1 -0
- package/dist/react/components/heading/index.cjs.js +60 -0
- package/dist/react/components/heading/index.cjs.js.map +1 -0
- package/dist/react/components/heading/index.esm.js +58 -0
- package/dist/react/components/heading/index.esm.js.map +1 -0
- package/dist/react/components/icons/index.cjs.js +1173 -0
- package/dist/react/components/icons/index.cjs.js.map +1 -0
- package/dist/react/components/icons/index.d.ts +2 -0
- package/dist/react/components/icons/index.esm.js +1128 -0
- package/dist/react/components/icons/index.esm.js.map +1 -0
- package/dist/react/components/identifier/index.cjs.js +286 -0
- package/dist/react/components/identifier/index.cjs.js.map +1 -0
- package/dist/react/components/identifier/index.esm.js +282 -0
- package/dist/react/components/identifier/index.esm.js.map +1 -0
- package/dist/react/components/index.cjs.js +101 -0
- package/dist/react/components/index.cjs.js.map +1 -0
- package/dist/react/components/index.d.ts +1 -1
- package/dist/react/components/index.esm.js +29 -0
- package/dist/react/components/index.esm.js.map +1 -0
- package/dist/react/components/input/index.cjs.js +237 -0
- package/dist/react/components/input/index.cjs.js.map +1 -0
- package/dist/react/components/input/index.esm.js +232 -0
- package/dist/react/components/input/index.esm.js.map +1 -0
- package/dist/react/components/list/index.cjs.js +49 -0
- package/dist/react/components/list/index.cjs.js.map +1 -0
- package/dist/react/components/list/index.esm.js +47 -0
- package/dist/react/components/list/index.esm.js.map +1 -0
- package/dist/react/components/notActive/index.cjs.js +40 -0
- package/dist/react/components/notActive/index.cjs.js.map +1 -0
- package/dist/react/components/notActive/index.esm.js +38 -0
- package/dist/react/components/notActive/index.esm.js.map +1 -0
- package/dist/react/components/overlayMenu/index.cjs.js +425 -0
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
- package/dist/react/components/overlayMenu/index.esm.js +420 -0
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
- package/dist/react/components/overlaySelect/index.cjs.js +345 -0
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
- package/dist/react/components/overlaySelect/index.esm.js +340 -0
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +49 -0
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
- package/dist/react/components/progressStepBar/index.d.ts +2 -1
- package/dist/react/components/progressStepBar/index.esm.js +47 -0
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
- package/dist/react/components/select/index.cjs.js +236 -0
- package/dist/react/components/select/index.cjs.js.map +1 -0
- package/dist/react/components/select/index.esm.js +212 -0
- package/dist/react/components/select/index.esm.js.map +1 -0
- package/dist/react/components/switch/index.cjs.js +184 -0
- package/dist/react/components/switch/index.cjs.js.map +1 -0
- package/dist/react/components/switch/index.esm.js +179 -0
- package/dist/react/components/switch/index.esm.js.map +1 -0
- package/dist/react/components/tabs/index.cjs.js +178 -0
- package/dist/react/components/tabs/index.cjs.js.map +1 -0
- package/dist/react/components/tabs/index.esm.js +154 -0
- package/dist/react/components/tabs/index.esm.js.map +1 -0
- package/dist/react/components/text/index.cjs.js +120 -0
- package/dist/react/components/text/index.cjs.js.map +1 -0
- package/dist/react/components/text/index.esm.js +115 -0
- package/dist/react/components/text/index.esm.js.map +1 -0
- package/dist/react/components/textarea/index.cjs.js +256 -0
- package/dist/react/components/textarea/index.cjs.js.map +1 -0
- package/dist/react/components/textarea/index.esm.js +251 -0
- package/dist/react/components/textarea/index.esm.js.map +1 -0
- package/dist/react/components/timeDelta/index.cjs.js +93 -0
- package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
- package/dist/react/components/timeDelta/index.d.ts +1 -1
- package/dist/react/components/timeDelta/index.esm.js +88 -0
- package/dist/react/components/timeDelta/index.esm.js.map +1 -0
- package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
- package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
- package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
- package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
- package/dist/react/components/valueCard/index.cjs.js +176 -0
- package/dist/react/components/valueCard/index.cjs.js.map +1 -0
- package/dist/react/components/valueCard/index.d.ts +1 -1
- package/dist/react/components/valueCard/index.esm.js +171 -0
- package/dist/react/components/valueCard/index.esm.js.map +1 -0
- package/dist/react/contexts/ThemeContext.cjs.js +79 -0
- package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
- package/dist/react/contexts/ThemeContext.esm.js +76 -0
- package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
- package/dist/react/contexts/index.cjs.js +11 -0
- package/dist/react/contexts/index.cjs.js.map +1 -0
- package/dist/react/contexts/index.esm.js +4 -0
- package/dist/react/contexts/index.esm.js.map +1 -0
- package/dist/react/hooks/useDebounce.cjs.js +83 -0
- package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
- package/dist/react/hooks/useDebounce.esm.js +78 -0
- package/dist/react/hooks/useDebounce.esm.js.map +1 -0
- package/dist/react/index.cjs.js +99 -12811
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +27 -12725
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react/shared/utils/datetime.cjs.js +59 -0
- package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
- package/dist/react/shared/utils/datetime.esm.js +57 -0
- package/dist/react/shared/utils/datetime.esm.js.map +1 -0
- package/dist/react/utils/copyToClipboard.cjs.js +31 -0
- package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
- package/dist/react/utils/copyToClipboard.esm.js +26 -0
- package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
- package/dist/react/utils/index.d.ts +1 -1
- package/dist/react-native/components/avatar/index.d.ts +26 -0
- package/dist/react-native/components/avatar/index.web.d.ts +24 -0
- package/dist/react-native/components/badge/index.d.ts +51 -0
- package/dist/react-native/components/bigNumber/index.d.ts +26 -0
- package/dist/react-native/components/button/index.d.ts +39 -0
- package/dist/react-native/components/copyButton/index.d.ts +22 -0
- package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
- package/dist/react-native/components/dashLogo/index.d.ts +30 -0
- package/dist/react-native/components/heading/index.d.ts +25 -0
- package/dist/react-native/components/icons/index.d.ts +43 -0
- package/dist/react-native/components/identifier/index.d.ts +47 -0
- package/dist/react-native/components/index.d.ts +15 -0
- package/dist/react-native/components/input/index.d.ts +53 -0
- package/dist/react-native/components/notActive/index.d.ts +16 -0
- package/dist/react-native/components/tabs/index.d.ts +50 -0
- package/dist/react-native/components/text/index.d.ts +28 -0
- package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
- package/dist/react-native/components/valueCard/index.d.ts +43 -0
- package/dist/react-native/hooks/index.d.ts +1 -0
- package/dist/react-native/hooks/useDebounce.d.ts +43 -0
- package/dist/react-native/index.cjs.js +2856 -0
- package/dist/react-native/index.cjs.js.map +1 -0
- package/dist/react-native/index.d.ts +4 -0
- package/dist/react-native/index.esm.js +2808 -0
- package/dist/react-native/index.esm.js.map +1 -0
- package/dist/react-native/styles/index.d.ts +11 -0
- package/dist/react-native/styles/tokens.d.ts +308 -0
- package/dist/react-native/styles/utils.d.ts +65 -0
- package/dist/react-native/utils/clipboard.d.ts +27 -0
- package/dist/react-native/utils/index.d.ts +2 -0
- package/dist/react-native/utils/tw.d.ts +7 -0
- package/dist/shared/constants/colors.d.ts +25 -0
- package/dist/shared/constants/index.d.ts +2 -0
- package/dist/shared/constants/sizes.d.ts +49 -0
- package/dist/shared/index.cjs.js +171 -0
- package/dist/shared/index.cjs.js.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.esm.js +161 -0
- package/dist/shared/index.esm.js.map +1 -0
- package/dist/shared/types/common.d.ts +33 -0
- package/dist/shared/types/index.d.ts +1 -0
- package/dist/shared/utils/index.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/package.json +50 -8
- /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
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 React = require('react');
|
|
10
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
11
|
+
var Popover = require('@radix-ui/react-popover');
|
|
12
|
+
var index = require('../icons/index.cjs.js');
|
|
13
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
14
|
+
var copyToClipboard = require('../../utils/copyToClipboard.cjs.js');
|
|
15
|
+
|
|
16
|
+
function _interopNamespaceDefault(e) {
|
|
17
|
+
var n = Object.create(null);
|
|
18
|
+
if (e) {
|
|
19
|
+
Object.keys(e).forEach(function (k) {
|
|
20
|
+
if (k !== 'default') {
|
|
21
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
22
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () { return e[k]; }
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
n.default = e;
|
|
30
|
+
return Object.freeze(n);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var Popover__namespace = /*#__PURE__*/_interopNamespaceDefault(Popover);
|
|
34
|
+
|
|
35
|
+
const copyBtn = classVarianceAuthority.cva('p-0 flex-shrink-0 h-[max-content] min-w-0 bg-transparent transition-colors', {
|
|
36
|
+
variants: {
|
|
37
|
+
theme: {
|
|
38
|
+
light: 'hover:text-gray-600 active:text-gray-800',
|
|
39
|
+
dark: 'hover:text-gray-300 active:text-gray-100'
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
defaultVariants: {
|
|
43
|
+
theme: 'light'
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const CopyButton = _a => {
|
|
47
|
+
var {
|
|
48
|
+
text,
|
|
49
|
+
className,
|
|
50
|
+
onCopy
|
|
51
|
+
} = _a,
|
|
52
|
+
props = tslib.__rest(_a, ["text", "className", "onCopy"]);
|
|
53
|
+
const {
|
|
54
|
+
theme
|
|
55
|
+
} = ThemeContext.useTheme();
|
|
56
|
+
const [open, setOpen] = React.useState(false);
|
|
57
|
+
const handleCopy = e => {
|
|
58
|
+
e.stopPropagation();
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
copyToClipboard.copyToClipboard(text, onCopy);
|
|
61
|
+
setOpen(true);
|
|
62
|
+
setTimeout(() => setOpen(false), 1000);
|
|
63
|
+
};
|
|
64
|
+
return jsxRuntime.jsxs(Popover__namespace.Root, {
|
|
65
|
+
open: open,
|
|
66
|
+
children: [jsxRuntime.jsx(Popover__namespace.Trigger, {
|
|
67
|
+
asChild: true,
|
|
68
|
+
children: jsxRuntime.jsx("button", Object.assign({
|
|
69
|
+
type: 'button',
|
|
70
|
+
className: `${copyBtn({
|
|
71
|
+
theme
|
|
72
|
+
})} ${className !== null && className !== void 0 ? className : ''} hover:cursor-pointer`,
|
|
73
|
+
onClick: handleCopy
|
|
74
|
+
}, props, {
|
|
75
|
+
children: jsxRuntime.jsx(index.CopyIcon, {
|
|
76
|
+
className: 'w-4 h-4 transition',
|
|
77
|
+
color: theme === 'light' ? '#000000' : '#ffffff'
|
|
78
|
+
})
|
|
79
|
+
}))
|
|
80
|
+
}), jsxRuntime.jsx(Popover__namespace.Portal, {
|
|
81
|
+
children: jsxRuntime.jsxs(Popover__namespace.Content, {
|
|
82
|
+
className: 'bg-white text-gray-900 text-sm px-2 py-1 rounded shadow-lg',
|
|
83
|
+
side: 'top',
|
|
84
|
+
sideOffset: 5,
|
|
85
|
+
children: ["Copied", jsxRuntime.jsx(Popover__namespace.Arrow, {
|
|
86
|
+
className: 'fill-white'
|
|
87
|
+
})]
|
|
88
|
+
})
|
|
89
|
+
})]
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
exports.CopyButton = CopyButton;
|
|
94
|
+
exports.default = CopyButton;
|
|
95
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/copyButton/index.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { cva } from 'class-variance-authority'\nimport * as Popover from '@radix-ui/react-popover'\nimport { CopyIcon } from '../icons'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport copyToClipboard, { CopyResult } from '../../utils/copyToClipboard'\n\nconst copyBtn = cva(\n 'p-0 flex-shrink-0 h-[max-content] min-w-0 bg-transparent transition-colors',\n {\n variants: {\n theme: {\n light: 'hover:text-gray-600 active:text-gray-800',\n dark: 'hover:text-gray-300 active:text-gray-100'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport interface CopyButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onCopy'> {\n /** Text to copy into clipboard */\n text: string\n /** Optional callback that will be called with the copy result */\n onCopy?: (result: CopyResult) => void\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ text, className, onCopy, ...props }) => {\n const { theme } = useTheme()\n const [open, setOpen] = useState(false)\n\n const handleCopy = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n e.preventDefault()\n copyToClipboard(text, onCopy)\n setOpen(true)\n setTimeout(() => setOpen(false), 1000)\n }\n\n return (\n <Popover.Root open={open}>\n <Popover.Trigger asChild>\n <button\n type='button'\n className={`${copyBtn({ theme })} ${className ?? ''} hover:cursor-pointer`}\n onClick={handleCopy}\n {...props}\n >\n <CopyIcon\n className='w-4 h-4 transition'\n color={theme === 'light' ? '#000000' : '#ffffff'}\n />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className='bg-white text-gray-900 text-sm px-2 py-1 rounded shadow-lg'\n side='top'\n sideOffset={5}\n >\n Copied\n <Popover.Arrow className='fill-white' />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n\nexport default CopyButton\n"],"names":["copyBtn","cva","variants","theme","light","dark","defaultVariants","CopyButton","_a","text","className","onCopy","props","__rest","useTheme","open","setOpen","useState","handleCopy","e","stopPropagation","preventDefault","copyToClipboard","setTimeout","_jsxs","Popover","Root","children","_jsx","Trigger","asChild","Object","assign","type","onClick","CopyIcon","color","Portal","Content","side","sideOffset","Arrow"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,OAAO,GAAGC,0BAAG,CACjB,4EAA4E,EAC5E;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,0CAA0C;AACjDC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,eAAe,EAAE;AACfH,IAAAA,KAAK,EAAE;AACR;AACF,CAAA,CACF;AASYI,MAAAA,UAAU,GAA+BC,EAAqC,IAAI;MAAzC;MAAEC,IAAI;MAAEC,SAAS;AAAEC,MAAAA;UAAkB;AAAPC,IAAAA,KAAK,GAAnCC,YAAA,CAAAL,EAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,QAAA,CAAqC,CAAF;EACvF,MAAM;AAAEL,IAAAA;GAAO,GAAGW,qBAAQ,EAAE;EAC5B,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;EAEvC,MAAMC,UAAU,GAAIC,CAAsC,IAAI;IAC5DA,CAAC,CAACC,eAAe,EAAE;IACnBD,CAAC,CAACE,cAAc,EAAE;AAClBC,IAAAA,+BAAe,CAACb,IAAI,EAAEE,MAAM,CAAC;IAC7BK,OAAO,CAAC,IAAI,CAAC;IACbO,UAAU,CAAC,MAAMP,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;GACvC;AAED,EAAA,OACEQ,gBAACC,kBAAO,CAACC,IAAI,EAAC;AAAAX,IAAAA,IAAI,EAAEA,IAAI;AACtBY,IAAAA,QAAA,EAAA,CAAAC,cAAA,CAACH,kBAAO,CAACI,OAAO,EAAC;AAAAC,MAAAA,OAAO,EACtB,IAAA;MAAAH,QAAA,EAAAC,cAAA,CAAA,QAAA,EAAAG,MAAA,CAAAC,MAAA,CAAA;AACEC,QAAAA,IAAI,EAAC,QAAQ;QACbvB,SAAS,EAAE,CAAGV,EAAAA,OAAO,CAAC;AAAEG,UAAAA;AAAK,SAAE,CAAC,CAAA,CAAA,EAAIO,SAAS,KAAT,IAAA,IAAAA,SAAS,KAAT,MAAA,GAAAA,SAAS,GAAI,EAAE,CAAuB,qBAAA,CAAA;AAC1EwB,QAAAA,OAAO,EAAEhB;OACL,EAAAN,KAAK;kBAETgB,cAAC,CAAAO,cAAQ,EACP;AAAAzB,UAAAA,SAAS,EAAC,oBAAoB;AAC9B0B,UAAAA,KAAK,EAAEjC,KAAK,KAAK,OAAO,GAAG,SAAS,GAAG;SACvC;AAAA,OAAA,CAAA;AAEY,KAAA,CAAA,EAClByB,cAAC,CAAAH,kBAAO,CAACY,MAAM,EAAA;AAAAV,MAAAA,QAAA,EACbH,eAAC,CAAAC,kBAAO,CAACa,OAAO;AACd5B,QAAAA,SAAS,EAAC,4DAA4D;AACtE6B,QAAAA,IAAI,EAAC,KAAK;AACVC,QAAAA,UAAU,EAAE,CAAC;QAGbb,QAAA,EAAA,CAAA,QAAA,EAAAC,cAAA,CAACH,kBAAO,CAACgB,KAAK,EAAC;AAAA/B,UAAAA,SAAS,EAAC;UAAe;OACxB;AAAA,KAAA,CACH;AACJ,GAAA,CAAA;AAEnB;;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { __rest } from 'tslib';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { cva } from 'class-variance-authority';
|
|
7
|
+
import * as Popover from '@radix-ui/react-popover';
|
|
8
|
+
import { CopyIcon } from '../icons/index.esm.js';
|
|
9
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
10
|
+
import { copyToClipboard } from '../../utils/copyToClipboard.esm.js';
|
|
11
|
+
|
|
12
|
+
const copyBtn = cva('p-0 flex-shrink-0 h-[max-content] min-w-0 bg-transparent transition-colors', {
|
|
13
|
+
variants: {
|
|
14
|
+
theme: {
|
|
15
|
+
light: 'hover:text-gray-600 active:text-gray-800',
|
|
16
|
+
dark: 'hover:text-gray-300 active:text-gray-100'
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
theme: 'light'
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
const CopyButton = _a => {
|
|
24
|
+
var {
|
|
25
|
+
text,
|
|
26
|
+
className,
|
|
27
|
+
onCopy
|
|
28
|
+
} = _a,
|
|
29
|
+
props = __rest(_a, ["text", "className", "onCopy"]);
|
|
30
|
+
const {
|
|
31
|
+
theme
|
|
32
|
+
} = useTheme();
|
|
33
|
+
const [open, setOpen] = useState(false);
|
|
34
|
+
const handleCopy = e => {
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
copyToClipboard(text, onCopy);
|
|
38
|
+
setOpen(true);
|
|
39
|
+
setTimeout(() => setOpen(false), 1000);
|
|
40
|
+
};
|
|
41
|
+
return jsxs(Popover.Root, {
|
|
42
|
+
open: open,
|
|
43
|
+
children: [jsx(Popover.Trigger, {
|
|
44
|
+
asChild: true,
|
|
45
|
+
children: jsx("button", Object.assign({
|
|
46
|
+
type: 'button',
|
|
47
|
+
className: `${copyBtn({
|
|
48
|
+
theme
|
|
49
|
+
})} ${className !== null && className !== void 0 ? className : ''} hover:cursor-pointer`,
|
|
50
|
+
onClick: handleCopy
|
|
51
|
+
}, props, {
|
|
52
|
+
children: jsx(CopyIcon, {
|
|
53
|
+
className: 'w-4 h-4 transition',
|
|
54
|
+
color: theme === 'light' ? '#000000' : '#ffffff'
|
|
55
|
+
})
|
|
56
|
+
}))
|
|
57
|
+
}), jsx(Popover.Portal, {
|
|
58
|
+
children: jsxs(Popover.Content, {
|
|
59
|
+
className: 'bg-white text-gray-900 text-sm px-2 py-1 rounded shadow-lg',
|
|
60
|
+
side: 'top',
|
|
61
|
+
sideOffset: 5,
|
|
62
|
+
children: ["Copied", jsx(Popover.Arrow, {
|
|
63
|
+
className: 'fill-white'
|
|
64
|
+
})]
|
|
65
|
+
})
|
|
66
|
+
})]
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export { CopyButton, CopyButton as default };
|
|
71
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/copyButton/index.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { cva } from 'class-variance-authority'\nimport * as Popover from '@radix-ui/react-popover'\nimport { CopyIcon } from '../icons'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport copyToClipboard, { CopyResult } from '../../utils/copyToClipboard'\n\nconst copyBtn = cva(\n 'p-0 flex-shrink-0 h-[max-content] min-w-0 bg-transparent transition-colors',\n {\n variants: {\n theme: {\n light: 'hover:text-gray-600 active:text-gray-800',\n dark: 'hover:text-gray-300 active:text-gray-100'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport interface CopyButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onCopy'> {\n /** Text to copy into clipboard */\n text: string\n /** Optional callback that will be called with the copy result */\n onCopy?: (result: CopyResult) => void\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ text, className, onCopy, ...props }) => {\n const { theme } = useTheme()\n const [open, setOpen] = useState(false)\n\n const handleCopy = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n e.preventDefault()\n copyToClipboard(text, onCopy)\n setOpen(true)\n setTimeout(() => setOpen(false), 1000)\n }\n\n return (\n <Popover.Root open={open}>\n <Popover.Trigger asChild>\n <button\n type='button'\n className={`${copyBtn({ theme })} ${className ?? ''} hover:cursor-pointer`}\n onClick={handleCopy}\n {...props}\n >\n <CopyIcon\n className='w-4 h-4 transition'\n color={theme === 'light' ? '#000000' : '#ffffff'}\n />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className='bg-white text-gray-900 text-sm px-2 py-1 rounded shadow-lg'\n side='top'\n sideOffset={5}\n >\n Copied\n <Popover.Arrow className='fill-white' />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n\nexport default CopyButton\n"],"names":["copyBtn","cva","variants","theme","light","dark","defaultVariants","CopyButton","_a","text","className","onCopy","props","__rest","useTheme","open","setOpen","useState","handleCopy","e","stopPropagation","preventDefault","copyToClipboard","setTimeout","_jsxs","Popover","Root","children","_jsx","Trigger","asChild","Object","assign","type","onClick","CopyIcon","color","Portal","Content","side","sideOffset","Arrow"],"mappings":";;;;;;;;;;;AAOA,MAAMA,OAAO,GAAGC,GAAG,CACjB,4EAA4E,EAC5E;AACEC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,0CAA0C;AACjDC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,eAAe,EAAE;AACfH,IAAAA,KAAK,EAAE;AACR;AACF,CAAA,CACF;AASYI,MAAAA,UAAU,GAA+BC,EAAqC,IAAI;MAAzC;MAAEC,IAAI;MAAEC,SAAS;AAAEC,MAAAA;UAAkB;AAAPC,IAAAA,KAAK,GAAnCC,MAAA,CAAAL,EAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,QAAA,CAAqC,CAAF;EACvF,MAAM;AAAEL,IAAAA;GAAO,GAAGW,QAAQ,EAAE;EAC5B,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;EAEvC,MAAMC,UAAU,GAAIC,CAAsC,IAAI;IAC5DA,CAAC,CAACC,eAAe,EAAE;IACnBD,CAAC,CAACE,cAAc,EAAE;AAClBC,IAAAA,eAAe,CAACb,IAAI,EAAEE,MAAM,CAAC;IAC7BK,OAAO,CAAC,IAAI,CAAC;IACbO,UAAU,CAAC,MAAMP,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;GACvC;AAED,EAAA,OACEQ,KAACC,OAAO,CAACC,IAAI,EAAC;AAAAX,IAAAA,IAAI,EAAEA,IAAI;AACtBY,IAAAA,QAAA,EAAA,CAAAC,GAAA,CAACH,OAAO,CAACI,OAAO,EAAC;AAAAC,MAAAA,OAAO,EACtB,IAAA;MAAAH,QAAA,EAAAC,GAAA,CAAA,QAAA,EAAAG,MAAA,CAAAC,MAAA,CAAA;AACEC,QAAAA,IAAI,EAAC,QAAQ;QACbvB,SAAS,EAAE,CAAGV,EAAAA,OAAO,CAAC;AAAEG,UAAAA;AAAK,SAAE,CAAC,CAAA,CAAA,EAAIO,SAAS,KAAT,IAAA,IAAAA,SAAS,KAAT,MAAA,GAAAA,SAAS,GAAI,EAAE,CAAuB,qBAAA,CAAA;AAC1EwB,QAAAA,OAAO,EAAEhB;OACL,EAAAN,KAAK;kBAETgB,GAAC,CAAAO,QAAQ,EACP;AAAAzB,UAAAA,SAAS,EAAC,oBAAoB;AAC9B0B,UAAAA,KAAK,EAAEjC,KAAK,KAAK,OAAO,GAAG,SAAS,GAAG;SACvC;AAAA,OAAA,CAAA;AAEY,KAAA,CAAA,EAClByB,GAAC,CAAAH,OAAO,CAACY,MAAM,EAAA;AAAAV,MAAAA,QAAA,EACbH,IAAC,CAAAC,OAAO,CAACa,OAAO;AACd5B,QAAAA,SAAS,EAAC,4DAA4D;AACtE6B,QAAAA,IAAI,EAAC,KAAK;AACVC,QAAAA,UAAU,EAAE,CAAC;QAGbb,QAAA,EAAA,CAAA,QAAA,EAAAC,GAAA,CAACH,OAAO,CAACgB,KAAK,EAAC;AAAA/B,UAAAA,SAAS,EAAC;UAAe;OACxB;AAAA,KAAA,CACH;AACJ,GAAA,CAAA;AAEnB;;;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6
|
+
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Dash Logo component with customizable size and color
|
|
11
|
+
* Original aspect ratio: 30:25 (1.2:1)
|
|
12
|
+
*
|
|
13
|
+
* Color can be set via:
|
|
14
|
+
* - color prop (takes precedence)
|
|
15
|
+
* - CSS class with text color (e.g., "text-dash-primary-dark-blue")
|
|
16
|
+
*
|
|
17
|
+
* SVG is wrapped in a container that centers the logo and supports:
|
|
18
|
+
* - containerPadding: padding around the logo
|
|
19
|
+
* - containerSize: width/height of the container
|
|
20
|
+
* - containerClassName: CSS class for the container
|
|
21
|
+
* - minWidth/minHeight: min-content (adapts to logo size)
|
|
22
|
+
*/
|
|
23
|
+
const DashLogo = ({
|
|
24
|
+
color,
|
|
25
|
+
size,
|
|
26
|
+
width,
|
|
27
|
+
height,
|
|
28
|
+
className = '',
|
|
29
|
+
onClick,
|
|
30
|
+
containerPadding,
|
|
31
|
+
containerSize,
|
|
32
|
+
containerClassName = ''
|
|
33
|
+
}) => {
|
|
34
|
+
const logoWidth = width || size || 30;
|
|
35
|
+
const logoHeight = height || (size ? size * 25 / 30 : 25);
|
|
36
|
+
const containerStyle = {
|
|
37
|
+
display: 'flex',
|
|
38
|
+
justifyContent: 'center',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
minWidth: 'min-content',
|
|
41
|
+
minHeight: 'min-content',
|
|
42
|
+
padding: typeof containerPadding === 'number' ? `${containerPadding}px` : containerPadding,
|
|
43
|
+
width: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,
|
|
44
|
+
height: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,
|
|
45
|
+
cursor: onClick ? 'pointer' : 'default'
|
|
46
|
+
};
|
|
47
|
+
return jsxRuntime.jsx("div", {
|
|
48
|
+
className: containerClassName,
|
|
49
|
+
style: containerStyle,
|
|
50
|
+
onClick: onClick,
|
|
51
|
+
children: jsxRuntime.jsxs("svg", {
|
|
52
|
+
width: logoWidth,
|
|
53
|
+
height: logoHeight,
|
|
54
|
+
viewBox: '0 0 30 25',
|
|
55
|
+
fill: 'none',
|
|
56
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
57
|
+
className: `text-dash-brand ${className}`,
|
|
58
|
+
style: {
|
|
59
|
+
color: color || 'var(--color-dash-brand, #4C7EFF)'
|
|
60
|
+
},
|
|
61
|
+
children: [jsxRuntime.jsx("path", {
|
|
62
|
+
d: 'M19.6465 0C29.2466 2.13767e-05 30.9542 5.2464 29.585 12.6006C28.6773 17.5547 26.3845 21.3391 22.5537 23.1084C20.8153 23.9084 19.1848 24.3555 15.3389 24.3555H4.44629L5.33887 19.293H14.9229C20.6921 19.3084 22.2159 16.8009 22.9697 14.6162C23.2467 13.8008 23.9084 11.2619 23.9238 9.76953C23.9699 6.84642 22.5383 5.07715 17.6768 5.07715L7.81543 5.06152L8.72363 0H19.6465Z',
|
|
63
|
+
fill: color || 'currentColor'
|
|
64
|
+
}), jsxRuntime.jsx("path", {
|
|
65
|
+
d: 'M15.2002 9.63184C15.2002 9.63184 15.0775 10.232 14.7236 11.709C14.4621 12.8321 14.0462 14.6934 11.1846 14.6934H0C0.00327153 14.6775 0.12745 14.0734 0.476562 12.6162C0.73811 11.493 1.15435 9.63184 4.01562 9.63184H15.2002Z',
|
|
66
|
+
fill: color || 'currentColor'
|
|
67
|
+
})]
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.DashLogo = DashLogo;
|
|
73
|
+
exports.default = DashLogo;
|
|
74
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/dashLogo/index.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface DashLogoProps {\n color?: string\n size?: number\n width?: number\n height?: number\n className?: string\n onClick?: () => void\n containerPadding?: string | number\n containerSize?: string | number\n containerClassName?: string\n}\n\n/**\n * Dash Logo component with customizable size and color\n * Original aspect ratio: 30:25 (1.2:1)\n * \n * Color can be set via:\n * - color prop (takes precedence)\n * - CSS class with text color (e.g., \"text-dash-primary-dark-blue\")\n * \n * SVG is wrapped in a container that centers the logo and supports:\n * - containerPadding: padding around the logo\n * - containerSize: width/height of the container \n * - containerClassName: CSS class for the container\n * - minWidth/minHeight: min-content (adapts to logo size)\n */\nexport const DashLogo: React.FC<DashLogoProps> = ({\n color,\n size,\n width,\n height,\n className = '',\n onClick,\n containerPadding,\n containerSize,\n containerClassName = ''\n}) => {\n const logoWidth = width || size || 30\n const logoHeight = height || (size ? (size * 25) / 30 : 25)\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: 'min-content',\n minHeight: 'min-content',\n padding: typeof containerPadding === 'number' ? `${containerPadding}px` : containerPadding,\n width: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,\n height: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,\n cursor: onClick ? 'pointer' : 'default'\n }\n\n return (\n <div\n className={containerClassName}\n style={containerStyle}\n onClick={onClick}\n >\n <svg\n width={logoWidth}\n height={logoHeight}\n viewBox='0 0 30 25'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={`text-dash-brand ${className}`}\n style={{ \n color: color || 'var(--color-dash-brand, #4C7EFF)'\n }}\n >\n <path\n d='M19.6465 0C29.2466 2.13767e-05 30.9542 5.2464 29.585 12.6006C28.6773 17.5547 26.3845 21.3391 22.5537 23.1084C20.8153 23.9084 19.1848 24.3555 15.3389 24.3555H4.44629L5.33887 19.293H14.9229C20.6921 19.3084 22.2159 16.8009 22.9697 14.6162C23.2467 13.8008 23.9084 11.2619 23.9238 9.76953C23.9699 6.84642 22.5383 5.07715 17.6768 5.07715L7.81543 5.06152L8.72363 0H19.6465Z'\n fill={color || 'currentColor'}\n />\n <path\n d='M15.2002 9.63184C15.2002 9.63184 15.0775 10.232 14.7236 11.709C14.4621 12.8321 14.0462 14.6934 11.1846 14.6934H0C0.00327153 14.6775 0.12745 14.0734 0.476562 12.6162C0.73811 11.493 1.15435 9.63184 4.01562 9.63184H15.2002Z'\n fill={color || 'currentColor'}\n />\n </svg>\n </div>\n )\n}\n\nexport default DashLogo\n"],"names":["DashLogo","color","size","width","height","className","onClick","containerPadding","containerSize","containerClassName","logoWidth","logoHeight","containerStyle","display","justifyContent","alignItems","minWidth","minHeight","padding","cursor","_jsx","style","children","_jsxs","viewBox","fill","xmlns","d"],"mappings":";;;;;;;;AAcA;;;;;;;;;;;;;AAaG;AACI,MAAMA,QAAQ,GAA4BA,CAAC;EAChDC,KAAK;EACLC,IAAI;EACJC,KAAK;EACLC,MAAM;AACNC,EAAAA,SAAS,GAAG,EAAE;EACdC,OAAO;EACPC,gBAAgB;EAChBC,aAAa;AACbC,EAAAA,kBAAkB,GAAG;AAAE,CACxB,KAAI;AACH,EAAA,MAAMC,SAAS,GAAGP,KAAK,IAAID,IAAI,IAAI,EAAE;AACrC,EAAA,MAAMS,UAAU,GAAGP,MAAM,KAAKF,IAAI,GAAIA,IAAI,GAAG,EAAE,GAAI,EAAE,GAAG,EAAE,CAAC;AAE3D,EAAA,MAAMU,cAAc,GAAwB;AAC1CC,IAAAA,OAAO,EAAE,MAAM;AACfC,IAAAA,cAAc,EAAE,QAAQ;AACxBC,IAAAA,UAAU,EAAE,QAAQ;AACpBC,IAAAA,QAAQ,EAAE,aAAa;AACvBC,IAAAA,SAAS,EAAE,aAAa;IACxBC,OAAO,EAAE,OAAOX,gBAAgB,KAAK,QAAQ,GAAG,CAAGA,EAAAA,gBAAgB,CAAI,EAAA,CAAA,GAAGA,gBAAgB;IAC1FJ,KAAK,EAAE,OAAOK,aAAa,KAAK,QAAQ,GAAG,CAAGA,EAAAA,aAAa,CAAI,EAAA,CAAA,GAAGA,aAAa;IAC/EJ,MAAM,EAAE,OAAOI,aAAa,KAAK,QAAQ,GAAG,CAAGA,EAAAA,aAAa,CAAI,EAAA,CAAA,GAAGA,aAAa;AAChFW,IAAAA,MAAM,EAAEb,OAAO,GAAG,SAAS,GAAG;GAC/B;EAED,OACEc,cACE,CAAA,KAAA,EAAA;AAAAf,IAAAA,SAAS,EAAEI,kBAAkB;AAC7BY,IAAAA,KAAK,EAAET,cAAc;AACrBN,IAAAA,OAAO,EAAEA,OAAO;AAEhBgB,IAAAA,QAAA,EAAAC,eAAA,CAAA,KAAA,EAAA;AACEpB,MAAAA,KAAK,EAAEO,SAAS;AAChBN,MAAAA,MAAM,EAAEO,UAAU;AAClBa,MAAAA,OAAO,EAAC,WAAW;AACnBC,MAAAA,IAAI,EAAC,MAAM;AACXC,MAAAA,KAAK,EAAC,4BAA4B;MAClCrB,SAAS,EAAE,CAAmBA,gBAAAA,EAAAA,SAAS,CAAE,CAAA;AACzCgB,MAAAA,KAAK,EAAE;QACLpB,KAAK,EAAEA,KAAK,IAAI;OACjB;AAEDqB,MAAAA,QAAA,EAAA,CAAAF,cAAA,CAAA,MAAA,EAAA;AACEO,QAAAA,CAAC,EAAC,gXAAgX;QAClXF,IAAI,EAAExB,KAAK,IAAI;AAAc,OAAA,CAC7B,EACFmB,cAAA,CAAA,MAAA,EAAA;AACEO,QAAAA,CAAC,EAAC,8NAA8N;QAChOF,IAAI,EAAExB,KAAK,IAAI;AACf,OAAA,CAAA;KAAA;AAEA,GAAA,CAAA;AAEV;;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Dash Logo component with customizable size and color
|
|
7
|
+
* Original aspect ratio: 30:25 (1.2:1)
|
|
8
|
+
*
|
|
9
|
+
* Color can be set via:
|
|
10
|
+
* - color prop (takes precedence)
|
|
11
|
+
* - CSS class with text color (e.g., "text-dash-primary-dark-blue")
|
|
12
|
+
*
|
|
13
|
+
* SVG is wrapped in a container that centers the logo and supports:
|
|
14
|
+
* - containerPadding: padding around the logo
|
|
15
|
+
* - containerSize: width/height of the container
|
|
16
|
+
* - containerClassName: CSS class for the container
|
|
17
|
+
* - minWidth/minHeight: min-content (adapts to logo size)
|
|
18
|
+
*/
|
|
19
|
+
const DashLogo = ({
|
|
20
|
+
color,
|
|
21
|
+
size,
|
|
22
|
+
width,
|
|
23
|
+
height,
|
|
24
|
+
className = '',
|
|
25
|
+
onClick,
|
|
26
|
+
containerPadding,
|
|
27
|
+
containerSize,
|
|
28
|
+
containerClassName = ''
|
|
29
|
+
}) => {
|
|
30
|
+
const logoWidth = width || size || 30;
|
|
31
|
+
const logoHeight = height || (size ? size * 25 / 30 : 25);
|
|
32
|
+
const containerStyle = {
|
|
33
|
+
display: 'flex',
|
|
34
|
+
justifyContent: 'center',
|
|
35
|
+
alignItems: 'center',
|
|
36
|
+
minWidth: 'min-content',
|
|
37
|
+
minHeight: 'min-content',
|
|
38
|
+
padding: typeof containerPadding === 'number' ? `${containerPadding}px` : containerPadding,
|
|
39
|
+
width: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,
|
|
40
|
+
height: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,
|
|
41
|
+
cursor: onClick ? 'pointer' : 'default'
|
|
42
|
+
};
|
|
43
|
+
return jsx("div", {
|
|
44
|
+
className: containerClassName,
|
|
45
|
+
style: containerStyle,
|
|
46
|
+
onClick: onClick,
|
|
47
|
+
children: jsxs("svg", {
|
|
48
|
+
width: logoWidth,
|
|
49
|
+
height: logoHeight,
|
|
50
|
+
viewBox: '0 0 30 25',
|
|
51
|
+
fill: 'none',
|
|
52
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
53
|
+
className: `text-dash-brand ${className}`,
|
|
54
|
+
style: {
|
|
55
|
+
color: color || 'var(--color-dash-brand, #4C7EFF)'
|
|
56
|
+
},
|
|
57
|
+
children: [jsx("path", {
|
|
58
|
+
d: 'M19.6465 0C29.2466 2.13767e-05 30.9542 5.2464 29.585 12.6006C28.6773 17.5547 26.3845 21.3391 22.5537 23.1084C20.8153 23.9084 19.1848 24.3555 15.3389 24.3555H4.44629L5.33887 19.293H14.9229C20.6921 19.3084 22.2159 16.8009 22.9697 14.6162C23.2467 13.8008 23.9084 11.2619 23.9238 9.76953C23.9699 6.84642 22.5383 5.07715 17.6768 5.07715L7.81543 5.06152L8.72363 0H19.6465Z',
|
|
59
|
+
fill: color || 'currentColor'
|
|
60
|
+
}), jsx("path", {
|
|
61
|
+
d: 'M15.2002 9.63184C15.2002 9.63184 15.0775 10.232 14.7236 11.709C14.4621 12.8321 14.0462 14.6934 11.1846 14.6934H0C0.00327153 14.6775 0.12745 14.0734 0.476562 12.6162C0.73811 11.493 1.15435 9.63184 4.01562 9.63184H15.2002Z',
|
|
62
|
+
fill: color || 'currentColor'
|
|
63
|
+
})]
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { DashLogo, DashLogo as default };
|
|
69
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/dashLogo/index.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface DashLogoProps {\n color?: string\n size?: number\n width?: number\n height?: number\n className?: string\n onClick?: () => void\n containerPadding?: string | number\n containerSize?: string | number\n containerClassName?: string\n}\n\n/**\n * Dash Logo component with customizable size and color\n * Original aspect ratio: 30:25 (1.2:1)\n * \n * Color can be set via:\n * - color prop (takes precedence)\n * - CSS class with text color (e.g., \"text-dash-primary-dark-blue\")\n * \n * SVG is wrapped in a container that centers the logo and supports:\n * - containerPadding: padding around the logo\n * - containerSize: width/height of the container \n * - containerClassName: CSS class for the container\n * - minWidth/minHeight: min-content (adapts to logo size)\n */\nexport const DashLogo: React.FC<DashLogoProps> = ({\n color,\n size,\n width,\n height,\n className = '',\n onClick,\n containerPadding,\n containerSize,\n containerClassName = ''\n}) => {\n const logoWidth = width || size || 30\n const logoHeight = height || (size ? (size * 25) / 30 : 25)\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: 'min-content',\n minHeight: 'min-content',\n padding: typeof containerPadding === 'number' ? `${containerPadding}px` : containerPadding,\n width: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,\n height: typeof containerSize === 'number' ? `${containerSize}px` : containerSize,\n cursor: onClick ? 'pointer' : 'default'\n }\n\n return (\n <div\n className={containerClassName}\n style={containerStyle}\n onClick={onClick}\n >\n <svg\n width={logoWidth}\n height={logoHeight}\n viewBox='0 0 30 25'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={`text-dash-brand ${className}`}\n style={{ \n color: color || 'var(--color-dash-brand, #4C7EFF)'\n }}\n >\n <path\n d='M19.6465 0C29.2466 2.13767e-05 30.9542 5.2464 29.585 12.6006C28.6773 17.5547 26.3845 21.3391 22.5537 23.1084C20.8153 23.9084 19.1848 24.3555 15.3389 24.3555H4.44629L5.33887 19.293H14.9229C20.6921 19.3084 22.2159 16.8009 22.9697 14.6162C23.2467 13.8008 23.9084 11.2619 23.9238 9.76953C23.9699 6.84642 22.5383 5.07715 17.6768 5.07715L7.81543 5.06152L8.72363 0H19.6465Z'\n fill={color || 'currentColor'}\n />\n <path\n d='M15.2002 9.63184C15.2002 9.63184 15.0775 10.232 14.7236 11.709C14.4621 12.8321 14.0462 14.6934 11.1846 14.6934H0C0.00327153 14.6775 0.12745 14.0734 0.476562 12.6162C0.73811 11.493 1.15435 9.63184 4.01562 9.63184H15.2002Z'\n fill={color || 'currentColor'}\n />\n </svg>\n </div>\n )\n}\n\nexport default DashLogo\n"],"names":["DashLogo","color","size","width","height","className","onClick","containerPadding","containerSize","containerClassName","logoWidth","logoHeight","containerStyle","display","justifyContent","alignItems","minWidth","minHeight","padding","cursor","_jsx","style","children","_jsxs","viewBox","fill","xmlns","d"],"mappings":";;;;AAcA;;;;;;;;;;;;;AAaG;AACI,MAAMA,QAAQ,GAA4BA,CAAC;EAChDC,KAAK;EACLC,IAAI;EACJC,KAAK;EACLC,MAAM;AACNC,EAAAA,SAAS,GAAG,EAAE;EACdC,OAAO;EACPC,gBAAgB;EAChBC,aAAa;AACbC,EAAAA,kBAAkB,GAAG;AAAE,CACxB,KAAI;AACH,EAAA,MAAMC,SAAS,GAAGP,KAAK,IAAID,IAAI,IAAI,EAAE;AACrC,EAAA,MAAMS,UAAU,GAAGP,MAAM,KAAKF,IAAI,GAAIA,IAAI,GAAG,EAAE,GAAI,EAAE,GAAG,EAAE,CAAC;AAE3D,EAAA,MAAMU,cAAc,GAAwB;AAC1CC,IAAAA,OAAO,EAAE,MAAM;AACfC,IAAAA,cAAc,EAAE,QAAQ;AACxBC,IAAAA,UAAU,EAAE,QAAQ;AACpBC,IAAAA,QAAQ,EAAE,aAAa;AACvBC,IAAAA,SAAS,EAAE,aAAa;IACxBC,OAAO,EAAE,OAAOX,gBAAgB,KAAK,QAAQ,GAAG,CAAGA,EAAAA,gBAAgB,CAAI,EAAA,CAAA,GAAGA,gBAAgB;IAC1FJ,KAAK,EAAE,OAAOK,aAAa,KAAK,QAAQ,GAAG,CAAGA,EAAAA,aAAa,CAAI,EAAA,CAAA,GAAGA,aAAa;IAC/EJ,MAAM,EAAE,OAAOI,aAAa,KAAK,QAAQ,GAAG,CAAGA,EAAAA,aAAa,CAAI,EAAA,CAAA,GAAGA,aAAa;AAChFW,IAAAA,MAAM,EAAEb,OAAO,GAAG,SAAS,GAAG;GAC/B;EAED,OACEc,GACE,CAAA,KAAA,EAAA;AAAAf,IAAAA,SAAS,EAAEI,kBAAkB;AAC7BY,IAAAA,KAAK,EAAET,cAAc;AACrBN,IAAAA,OAAO,EAAEA,OAAO;AAEhBgB,IAAAA,QAAA,EAAAC,IAAA,CAAA,KAAA,EAAA;AACEpB,MAAAA,KAAK,EAAEO,SAAS;AAChBN,MAAAA,MAAM,EAAEO,UAAU;AAClBa,MAAAA,OAAO,EAAC,WAAW;AACnBC,MAAAA,IAAI,EAAC,MAAM;AACXC,MAAAA,KAAK,EAAC,4BAA4B;MAClCrB,SAAS,EAAE,CAAmBA,gBAAAA,EAAAA,SAAS,CAAE,CAAA;AACzCgB,MAAAA,KAAK,EAAE;QACLpB,KAAK,EAAEA,KAAK,IAAI;OACjB;AAEDqB,MAAAA,QAAA,EAAA,CAAAF,GAAA,CAAA,MAAA,EAAA;AACEO,QAAAA,CAAC,EAAC,gXAAgX;QAClXF,IAAI,EAAExB,KAAK,IAAI;AAAc,OAAA,CAC7B,EACFmB,GAAA,CAAA,MAAA,EAAA;AACEO,QAAAA,CAAC,EAAC,8NAA8N;QAChOF,IAAI,EAAExB,KAAK,IAAI;AACf,OAAA,CAAA;KAAA;AAEA,GAAA,CAAA;AAEV;;;;"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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 classVarianceAuthority = require('class-variance-authority');
|
|
9
|
+
var index = require('../icons/index.cjs.js');
|
|
10
|
+
var index$1 = require('../timeDelta/index.cjs.js');
|
|
11
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
12
|
+
|
|
13
|
+
const wrapperStyles = classVarianceAuthority.cva('');
|
|
14
|
+
const infoContainer = classVarianceAuthority.cva('flex flex-wrap items-center whitespace-nowrap -mt-1 -mb-1');
|
|
15
|
+
const itemStyles = classVarianceAuthority.cva('mt-1 mb-1 mr-2 last:mr-0');
|
|
16
|
+
const dateTextStyles = classVarianceAuthority.cva('text-[0.813rem]', {
|
|
17
|
+
variants: {
|
|
18
|
+
theme: {
|
|
19
|
+
light: 'text-gray-900',
|
|
20
|
+
dark: 'text-gray-100'
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
theme: 'light'
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
const deltaContainerStyles = classVarianceAuthority.cva('inline-block px-[10px] py-[3px] border rounded-[4px] text-[0.688rem]', {
|
|
28
|
+
variants: {
|
|
29
|
+
theme: {
|
|
30
|
+
light: 'border-[rgba(147,170,178,0.4)] text-[var(--chakra-colors-gray-250)]',
|
|
31
|
+
dark: 'border-gray-600 text-gray-400'
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
defaultVariants: {
|
|
35
|
+
theme: 'light'
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* DateBlock component displays a date, optional calendar icon,
|
|
40
|
+
* and relative time via TimeDelta. It can also show an optional
|
|
41
|
+
* tooltip with the relative time when hovered. Supports light/dark theme.
|
|
42
|
+
*/
|
|
43
|
+
const DateBlock = ({
|
|
44
|
+
timestamp,
|
|
45
|
+
format = 'all',
|
|
46
|
+
showTime = false,
|
|
47
|
+
// showRelativeTooltip = false,
|
|
48
|
+
className = ''
|
|
49
|
+
}) => {
|
|
50
|
+
const {
|
|
51
|
+
theme
|
|
52
|
+
} = ThemeContext.useTheme();
|
|
53
|
+
const date = new Date(timestamp);
|
|
54
|
+
if (isNaN(date.getTime())) return null;
|
|
55
|
+
const modes = {
|
|
56
|
+
all: {
|
|
57
|
+
calendarIcon: true,
|
|
58
|
+
date: true,
|
|
59
|
+
delta: true
|
|
60
|
+
},
|
|
61
|
+
deltaOnly: {
|
|
62
|
+
calendarIcon: false,
|
|
63
|
+
date: false,
|
|
64
|
+
delta: true
|
|
65
|
+
},
|
|
66
|
+
dateOnly: {
|
|
67
|
+
calendarIcon: false,
|
|
68
|
+
date: true,
|
|
69
|
+
delta: false
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const options = Object.assign({
|
|
73
|
+
day: 'numeric',
|
|
74
|
+
month: 'short',
|
|
75
|
+
year: 'numeric'
|
|
76
|
+
}, showTime ? {
|
|
77
|
+
hour: '2-digit',
|
|
78
|
+
minute: '2-digit'
|
|
79
|
+
} : {});
|
|
80
|
+
const formattedDate = date.toLocaleDateString('en-GB', options);
|
|
81
|
+
// const tooltipContent = showRelativeTooltip
|
|
82
|
+
// ? <TimeDelta endDate={timestamp} showTimestampTooltip={false} />
|
|
83
|
+
// : null
|
|
84
|
+
const content = jsxRuntime.jsxs("div", {
|
|
85
|
+
className: infoContainer(),
|
|
86
|
+
children: [modes[format].calendarIcon && jsxRuntime.jsx(index.CalendarIcon, {
|
|
87
|
+
className: `${itemStyles()} w-[12px] h-[14px]`,
|
|
88
|
+
color: theme === 'dark' ? '#9CA3AF' : '#93AAB2'
|
|
89
|
+
}), modes[format].date && jsxRuntime.jsx("div", {
|
|
90
|
+
className: `${itemStyles()} ${dateTextStyles({
|
|
91
|
+
theme
|
|
92
|
+
})}`,
|
|
93
|
+
children: formattedDate
|
|
94
|
+
}), modes[format].delta && jsxRuntime.jsx("div", {
|
|
95
|
+
className: `${itemStyles()} ${deltaContainerStyles({
|
|
96
|
+
theme
|
|
97
|
+
})}`,
|
|
98
|
+
children: jsxRuntime.jsx(index$1.TimeDelta, {
|
|
99
|
+
endDate: date,
|
|
100
|
+
showTimestampTooltip: format !== 'all'
|
|
101
|
+
})
|
|
102
|
+
})]
|
|
103
|
+
});
|
|
104
|
+
const wrapperClass = `${wrapperStyles()} ${className !== '' ? ` ${className}` : ''}`;
|
|
105
|
+
return jsxRuntime.jsx("div", {
|
|
106
|
+
className: wrapperClass,
|
|
107
|
+
children: content
|
|
108
|
+
});
|
|
109
|
+
// return tooltipContent ? (
|
|
110
|
+
// <Tooltip placement="top" content={tooltipContent}>
|
|
111
|
+
// <div className={wrapperClass}>{content}</div>
|
|
112
|
+
// </Tooltip>
|
|
113
|
+
// ) : (
|
|
114
|
+
// <div className={wrapperClass}>{content}</div>
|
|
115
|
+
// )
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
exports.DateBlock = DateBlock;
|
|
119
|
+
exports.default = DateBlock;
|
|
120
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/dateBlock/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { CalendarIcon } from '../icons'\nimport { TimeDelta } from '../timeDelta'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst wrapperStyles = cva('')\n\nconst infoContainer = cva(\n 'flex flex-wrap items-center whitespace-nowrap -mt-1 -mb-1'\n)\n\nconst itemStyles = cva(\n 'mt-1 mb-1 mr-2 last:mr-0'\n)\n\nconst dateTextStyles = cva(\n 'text-[0.813rem]',\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\nconst deltaContainerStyles = cva(\n 'inline-block px-[10px] py-[3px] border rounded-[4px] text-[0.688rem]',\n {\n variants: {\n theme: {\n light: 'border-[rgba(147,170,178,0.4)] text-[var(--chakra-colors-gray-250)]',\n dark: 'border-gray-600 text-gray-400'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport type DateBlockFormat = 'all' | 'deltaOnly' | 'dateOnly'\n\nexport interface DateBlockProps {\n /** Unix timestamp (ms), Date object, or parsable date string */\n timestamp: number | Date | string\n /** Display format: full date+delta, delta only, or date only */\n format?: DateBlockFormat\n /** Include hours and minutes in formatted date */\n showTime?: boolean\n /** Show a tooltip with relative time */\n showRelativeTooltip?: boolean\n /** Additional CSS classes for wrapper div */\n className?: string\n}\n\n/**\n * DateBlock component displays a date, optional calendar icon,\n * and relative time via TimeDelta. It can also show an optional\n * tooltip with the relative time when hovered. Supports light/dark theme.\n */\nexport const DateBlock: React.FC<DateBlockProps> = ({\n timestamp,\n format = 'all',\n showTime = false,\n // showRelativeTooltip = false,\n className = ''\n}) => {\n const { theme } = useTheme()\n const date = new Date(timestamp)\n if (isNaN(date.getTime())) return null\n\n const modes = {\n all: { calendarIcon: true, date: true, delta: true },\n deltaOnly: { calendarIcon: false, date: false, delta: true },\n dateOnly: { calendarIcon: false, date: true, delta: false }\n } as const\n\n const options: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n ...(showTime ? { hour: '2-digit', minute: '2-digit' } : {})\n }\n\n const formattedDate = date.toLocaleDateString('en-GB', options)\n\n // const tooltipContent = showRelativeTooltip\n // ? <TimeDelta endDate={timestamp} showTimestampTooltip={false} />\n // : null\n\n const content = (\n <div className={infoContainer()}>\n {modes[format].calendarIcon && (\n <CalendarIcon\n className={`${itemStyles()} w-[12px] h-[14px]`}\n color={theme === 'dark' ? '#9CA3AF' : '#93AAB2'}\n />\n )}\n {modes[format].date && (\n <div className={`${itemStyles()} ${dateTextStyles({ theme })}`}>{formattedDate}</div>\n )}\n {modes[format].delta && (\n <div className={`${itemStyles()} ${deltaContainerStyles({ theme })}`}>\n <TimeDelta\n endDate={date}\n showTimestampTooltip={format !== 'all'}\n />\n </div>\n )}\n </div>\n )\n\n const wrapperClass = `${wrapperStyles()} ${className !== '' ? ` ${className}` : ''}`\n\n return <div className={wrapperClass}>{content}</div>\n\n // return tooltipContent ? (\n // <Tooltip placement=\"top\" content={tooltipContent}>\n // <div className={wrapperClass}>{content}</div>\n // </Tooltip>\n // ) : (\n // <div className={wrapperClass}>{content}</div>\n // )\n}\n\nexport default DateBlock "],"names":["wrapperStyles","cva","infoContainer","itemStyles","dateTextStyles","variants","theme","light","dark","defaultVariants","deltaContainerStyles","DateBlock","timestamp","format","showTime","className","useTheme","date","Date","isNaN","getTime","modes","all","calendarIcon","delta","deltaOnly","dateOnly","options","Object","assign","day","month","year","hour","minute","formattedDate","toLocaleDateString","content","_jsxs","children","_jsx","CalendarIcon","color","TimeDelta","endDate","showTimestampTooltip","wrapperClass"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { CalendarIcon } from '../icons/index.esm.js';
|
|
6
|
+
import { TimeDelta } from '../timeDelta/index.esm.js';
|
|
7
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
8
|
+
|
|
9
|
+
const wrapperStyles = cva('');
|
|
10
|
+
const infoContainer = cva('flex flex-wrap items-center whitespace-nowrap -mt-1 -mb-1');
|
|
11
|
+
const itemStyles = cva('mt-1 mb-1 mr-2 last:mr-0');
|
|
12
|
+
const dateTextStyles = cva('text-[0.813rem]', {
|
|
13
|
+
variants: {
|
|
14
|
+
theme: {
|
|
15
|
+
light: 'text-gray-900',
|
|
16
|
+
dark: 'text-gray-100'
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
theme: 'light'
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
const deltaContainerStyles = cva('inline-block px-[10px] py-[3px] border rounded-[4px] text-[0.688rem]', {
|
|
24
|
+
variants: {
|
|
25
|
+
theme: {
|
|
26
|
+
light: 'border-[rgba(147,170,178,0.4)] text-[var(--chakra-colors-gray-250)]',
|
|
27
|
+
dark: 'border-gray-600 text-gray-400'
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
defaultVariants: {
|
|
31
|
+
theme: 'light'
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* DateBlock component displays a date, optional calendar icon,
|
|
36
|
+
* and relative time via TimeDelta. It can also show an optional
|
|
37
|
+
* tooltip with the relative time when hovered. Supports light/dark theme.
|
|
38
|
+
*/
|
|
39
|
+
const DateBlock = ({
|
|
40
|
+
timestamp,
|
|
41
|
+
format = 'all',
|
|
42
|
+
showTime = false,
|
|
43
|
+
// showRelativeTooltip = false,
|
|
44
|
+
className = ''
|
|
45
|
+
}) => {
|
|
46
|
+
const {
|
|
47
|
+
theme
|
|
48
|
+
} = useTheme();
|
|
49
|
+
const date = new Date(timestamp);
|
|
50
|
+
if (isNaN(date.getTime())) return null;
|
|
51
|
+
const modes = {
|
|
52
|
+
all: {
|
|
53
|
+
calendarIcon: true,
|
|
54
|
+
date: true,
|
|
55
|
+
delta: true
|
|
56
|
+
},
|
|
57
|
+
deltaOnly: {
|
|
58
|
+
calendarIcon: false,
|
|
59
|
+
date: false,
|
|
60
|
+
delta: true
|
|
61
|
+
},
|
|
62
|
+
dateOnly: {
|
|
63
|
+
calendarIcon: false,
|
|
64
|
+
date: true,
|
|
65
|
+
delta: false
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const options = Object.assign({
|
|
69
|
+
day: 'numeric',
|
|
70
|
+
month: 'short',
|
|
71
|
+
year: 'numeric'
|
|
72
|
+
}, showTime ? {
|
|
73
|
+
hour: '2-digit',
|
|
74
|
+
minute: '2-digit'
|
|
75
|
+
} : {});
|
|
76
|
+
const formattedDate = date.toLocaleDateString('en-GB', options);
|
|
77
|
+
// const tooltipContent = showRelativeTooltip
|
|
78
|
+
// ? <TimeDelta endDate={timestamp} showTimestampTooltip={false} />
|
|
79
|
+
// : null
|
|
80
|
+
const content = jsxs("div", {
|
|
81
|
+
className: infoContainer(),
|
|
82
|
+
children: [modes[format].calendarIcon && jsx(CalendarIcon, {
|
|
83
|
+
className: `${itemStyles()} w-[12px] h-[14px]`,
|
|
84
|
+
color: theme === 'dark' ? '#9CA3AF' : '#93AAB2'
|
|
85
|
+
}), modes[format].date && jsx("div", {
|
|
86
|
+
className: `${itemStyles()} ${dateTextStyles({
|
|
87
|
+
theme
|
|
88
|
+
})}`,
|
|
89
|
+
children: formattedDate
|
|
90
|
+
}), modes[format].delta && jsx("div", {
|
|
91
|
+
className: `${itemStyles()} ${deltaContainerStyles({
|
|
92
|
+
theme
|
|
93
|
+
})}`,
|
|
94
|
+
children: jsx(TimeDelta, {
|
|
95
|
+
endDate: date,
|
|
96
|
+
showTimestampTooltip: format !== 'all'
|
|
97
|
+
})
|
|
98
|
+
})]
|
|
99
|
+
});
|
|
100
|
+
const wrapperClass = `${wrapperStyles()} ${className !== '' ? ` ${className}` : ''}`;
|
|
101
|
+
return jsx("div", {
|
|
102
|
+
className: wrapperClass,
|
|
103
|
+
children: content
|
|
104
|
+
});
|
|
105
|
+
// return tooltipContent ? (
|
|
106
|
+
// <Tooltip placement="top" content={tooltipContent}>
|
|
107
|
+
// <div className={wrapperClass}>{content}</div>
|
|
108
|
+
// </Tooltip>
|
|
109
|
+
// ) : (
|
|
110
|
+
// <div className={wrapperClass}>{content}</div>
|
|
111
|
+
// )
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export { DateBlock, DateBlock as default };
|
|
115
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/dateBlock/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva } from 'class-variance-authority'\nimport { CalendarIcon } from '../icons'\nimport { TimeDelta } from '../timeDelta'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst wrapperStyles = cva('')\n\nconst infoContainer = cva(\n 'flex flex-wrap items-center whitespace-nowrap -mt-1 -mb-1'\n)\n\nconst itemStyles = cva(\n 'mt-1 mb-1 mr-2 last:mr-0'\n)\n\nconst dateTextStyles = cva(\n 'text-[0.813rem]',\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\nconst deltaContainerStyles = cva(\n 'inline-block px-[10px] py-[3px] border rounded-[4px] text-[0.688rem]',\n {\n variants: {\n theme: {\n light: 'border-[rgba(147,170,178,0.4)] text-[var(--chakra-colors-gray-250)]',\n dark: 'border-gray-600 text-gray-400'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nexport type DateBlockFormat = 'all' | 'deltaOnly' | 'dateOnly'\n\nexport interface DateBlockProps {\n /** Unix timestamp (ms), Date object, or parsable date string */\n timestamp: number | Date | string\n /** Display format: full date+delta, delta only, or date only */\n format?: DateBlockFormat\n /** Include hours and minutes in formatted date */\n showTime?: boolean\n /** Show a tooltip with relative time */\n showRelativeTooltip?: boolean\n /** Additional CSS classes for wrapper div */\n className?: string\n}\n\n/**\n * DateBlock component displays a date, optional calendar icon,\n * and relative time via TimeDelta. It can also show an optional\n * tooltip with the relative time when hovered. Supports light/dark theme.\n */\nexport const DateBlock: React.FC<DateBlockProps> = ({\n timestamp,\n format = 'all',\n showTime = false,\n // showRelativeTooltip = false,\n className = ''\n}) => {\n const { theme } = useTheme()\n const date = new Date(timestamp)\n if (isNaN(date.getTime())) return null\n\n const modes = {\n all: { calendarIcon: true, date: true, delta: true },\n deltaOnly: { calendarIcon: false, date: false, delta: true },\n dateOnly: { calendarIcon: false, date: true, delta: false }\n } as const\n\n const options: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n ...(showTime ? { hour: '2-digit', minute: '2-digit' } : {})\n }\n\n const formattedDate = date.toLocaleDateString('en-GB', options)\n\n // const tooltipContent = showRelativeTooltip\n // ? <TimeDelta endDate={timestamp} showTimestampTooltip={false} />\n // : null\n\n const content = (\n <div className={infoContainer()}>\n {modes[format].calendarIcon && (\n <CalendarIcon\n className={`${itemStyles()} w-[12px] h-[14px]`}\n color={theme === 'dark' ? '#9CA3AF' : '#93AAB2'}\n />\n )}\n {modes[format].date && (\n <div className={`${itemStyles()} ${dateTextStyles({ theme })}`}>{formattedDate}</div>\n )}\n {modes[format].delta && (\n <div className={`${itemStyles()} ${deltaContainerStyles({ theme })}`}>\n <TimeDelta\n endDate={date}\n showTimestampTooltip={format !== 'all'}\n />\n </div>\n )}\n </div>\n )\n\n const wrapperClass = `${wrapperStyles()} ${className !== '' ? ` ${className}` : ''}`\n\n return <div className={wrapperClass}>{content}</div>\n\n // return tooltipContent ? (\n // <Tooltip placement=\"top\" content={tooltipContent}>\n // <div className={wrapperClass}>{content}</div>\n // </Tooltip>\n // ) : (\n // <div className={wrapperClass}>{content}</div>\n // )\n}\n\nexport default DateBlock "],"names":["wrapperStyles","cva","infoContainer","itemStyles","dateTextStyles","variants","theme","light","dark","defaultVariants","deltaContainerStyles","DateBlock","timestamp","format","showTime","className","useTheme","date","Date","isNaN","getTime","modes","all","calendarIcon","delta","deltaOnly","dateOnly","options","Object","assign","day","month","year","hour","minute","formattedDate","toLocaleDateString","content","_jsxs","children","_jsx","CalendarIcon","color","TimeDelta","endDate","showTimestampTooltip","wrapperClass"],"mappings":";;;;;;;;AAMA,MAAMA,aAAa,GAAGC,GAAG,CAAC,EAAE,CAAC;AAE7B,MAAMC,aAAa,GAAGD,GAAG,CACvB,2DAA2D,CAC5D;AAED,MAAME,UAAU,GAAGF,GAAG,CACpB,0BAA0B,CAC3B;AAED,MAAMG,cAAc,GAAGH,GAAG,CACxB,iBAAiB,EACjB;AACEI,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,MAAMI,oBAAoB,GAAGT,GAAG,CAC9B,sEAAsE,EACtE;AACEI,EAAAA,QAAQ,EAAE;AACRC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,qEAAqE;AAC5EC,MAAAA,IAAI,EAAE;AACP;GACF;AACDC,EAAAA,eAAe,EAAE;AACfH,IAAAA,KAAK,EAAE;AACR;AACF,CAAA,CACF;AAiBD;;;;AAIG;AACI,MAAMK,SAAS,GAA6BA,CAAC;EAClDC,SAAS;AACTC,EAAAA,MAAM,GAAG,KAAK;AACdC,EAAAA,QAAQ,GAAG,KAAK;AAChB;AACAC,EAAAA,SAAS,GAAG;AACb,CAAA,KAAI;EACH,MAAM;AAAET,IAAAA;GAAO,GAAGU,QAAQ,EAAE;AAC5B,EAAA,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACN,SAAS,CAAC;EAChC,IAAIO,KAAK,CAACF,IAAI,CAACG,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI;AAEtC,EAAA,MAAMC,KAAK,GAAG;AACZC,IAAAA,GAAG,EAAE;AAAEC,MAAAA,YAAY,EAAE,IAAI;AAAEN,MAAAA,IAAI,EAAE,IAAI;AAAEO,MAAAA,KAAK,EAAE;KAAM;AACpDC,IAAAA,SAAS,EAAE;AAAEF,MAAAA,YAAY,EAAE,KAAK;AAAEN,MAAAA,IAAI,EAAE,KAAK;AAAEO,MAAAA,KAAK,EAAE;KAAM;AAC5DE,IAAAA,QAAQ,EAAE;AAAEH,MAAAA,YAAY,EAAE,KAAK;AAAEN,MAAAA,IAAI,EAAE,IAAI;AAAEO,MAAAA,KAAK,EAAE;AAAO;GACnD;AAEV,EAAA,MAAMG,OAAO,GAAAC,MAAA,CAAAC,MAAA,CAAA;AACXC,IAAAA,GAAG,EAAE,SAAS;AACdC,IAAAA,KAAK,EAAE,OAAO;AACdC,IAAAA,IAAI,EAAE;GAAS,EACXlB,QAAQ,GAAG;AAAEmB,IAAAA,IAAI,EAAE,SAAS;AAAEC,IAAAA,MAAM,EAAE;GAAW,GAAG,EAAG,CAC5D;EAED,MAAMC,aAAa,GAAGlB,IAAI,CAACmB,kBAAkB,CAAC,OAAO,EAAET,OAAO,CAAC;AAE/D;AACA;AACA;AAEA,EAAA,MAAMU,OAAO,GACXC,IAAK,CAAA,KAAA,EAAA;IAAAvB,SAAS,EAAEb,aAAa,EAAE;AAC5BqC,IAAAA,QAAA,EAAA,CAAAlB,KAAK,CAACR,MAAM,CAAC,CAACU,YAAY,IACzBiB,GAAC,CAAAC,YAAY;AACX1B,MAAAA,SAAS,EAAE,CAAA,EAAGZ,UAAU,EAAE,CAAoB,kBAAA,CAAA;AAC9CuC,MAAAA,KAAK,EAAEpC,KAAK,KAAK,MAAM,GAAG,SAAS,GAAG;MAEzC,EACAe,KAAK,CAACR,MAAM,CAAC,CAACI,IAAI,IACjBuB,GAAK,CAAA,KAAA,EAAA;AAAAzB,MAAAA,SAAS,EAAE,CAAGZ,EAAAA,UAAU,EAAE,CAAA,CAAA,EAAIC,cAAc,CAAC;AAAEE,QAAAA;OAAO,CAAC,CAAE,CAAA;AAAGiC,MAAAA,QAAA,EAAAJ;AAAoB,KAAA,CACtF,EACAd,KAAK,CAACR,MAAM,CAAC,CAACW,KAAK,IAClBgB,GAAA,CAAA,KAAA,EAAA;AAAKzB,MAAAA,SAAS,EAAE,CAAGZ,EAAAA,UAAU,EAAE,CAAA,CAAA,EAAIO,oBAAoB,CAAC;AAAEJ,QAAAA;AAAK,OAAE,CAAC,CAAE,CAAA;AAAAiC,MAAAA,QAAA,EAClEC,GAAC,CAAAG,SAAS,EACR;AAAAC,QAAAA,OAAO,EAAE3B,IAAI;QACb4B,oBAAoB,EAAEhC,MAAM,KAAK;OAAK;AAEpC,KAAA,CACP;AACG,GAAA,CACP;AAED,EAAA,MAAMiC,YAAY,GAAG,CAAA,EAAG9C,aAAa,EAAE,CAAIe,CAAAA,EAAAA,SAAS,KAAK,EAAE,GAAG,CAAIA,CAAAA,EAAAA,SAAS,CAAE,CAAA,GAAG,EAAE,CAAE,CAAA;EAEpF,OAAOyB;AAAKzB,IAAAA,SAAS,EAAE+B,YAAY;AAAGP,IAAAA,QAAA,EAAAF;IAAc;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACF;;;;"}
|