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.
- 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 +97 -0
- package/dist/react/components/badge/index.cjs.js.map +1 -0
- package/dist/react/components/badge/index.d.ts +10 -1
- package/dist/react/components/badge/index.esm.js +92 -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 +540 -0
- package/dist/react/components/button/index.cjs.js.map +1 -0
- package/dist/react/components/button/index.d.ts +7 -1
- package/dist/react/components/button/index.esm.js +535 -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 +65 -0
- package/dist/react/components/heading/index.cjs.js.map +1 -0
- package/dist/react/components/heading/index.d.ts +4 -1
- package/dist/react/components/heading/index.esm.js +63 -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 +242 -0
- package/dist/react/components/input/index.cjs.js.map +1 -0
- package/dist/react/components/input/index.d.ts +4 -0
- package/dist/react/components/input/index.esm.js +237 -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 +469 -0
- package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
- package/dist/react/components/overlayMenu/index.d.ts +9 -10
- package/dist/react/components/overlayMenu/index.esm.js +464 -0
- package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
- package/dist/react/components/overlaySelect/index.cjs.js +350 -0
- package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
- package/dist/react/components/overlaySelect/index.d.ts +4 -0
- package/dist/react/components/overlaySelect/index.esm.js +345 -0
- package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
- package/dist/react/components/progressStepBar/index.cjs.js +54 -0
- package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
- package/dist/react/components/progressStepBar/index.d.ts +5 -2
- package/dist/react/components/progressStepBar/index.esm.js +52 -0
- package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
- package/dist/react/components/select/index.cjs.js +241 -0
- package/dist/react/components/select/index.cjs.js.map +1 -0
- package/dist/react/components/select/index.d.ts +4 -0
- package/dist/react/components/select/index.esm.js +217 -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 +126 -0
- package/dist/react/components/text/index.cjs.js.map +1 -0
- package/dist/react/components/text/index.d.ts +5 -0
- package/dist/react/components/text/index.esm.js +121 -0
- package/dist/react/components/text/index.esm.js.map +1 -0
- package/dist/react/components/textarea/index.cjs.js +260 -0
- package/dist/react/components/textarea/index.cjs.js.map +1 -0
- package/dist/react/components/textarea/index.d.ts +4 -0
- package/dist/react/components/textarea/index.esm.js +255 -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 +181 -0
- package/dist/react/components/valueCard/index.cjs.js.map +1 -0
- package/dist/react/components/valueCard/index.d.ts +5 -1
- package/dist/react/components/valueCard/index.esm.js +176 -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/index.d.ts +1 -0
- package/dist/react/hooks/useColorScheme.cjs.js +25 -0
- package/dist/react/hooks/useColorScheme.cjs.js.map +1 -0
- package/dist/react/hooks/useColorScheme.d.ts +9 -0
- package/dist/react/hooks/useColorScheme.esm.js +23 -0
- package/dist/react/hooks/useColorScheme.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 -12833
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +27 -12747
- 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 +63 -0
- package/dist/react-native/components/bigNumber/index.d.ts +26 -0
- package/dist/react-native/components/button/index.d.ts +45 -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 +59 -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 +47 -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 +2882 -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 +2833 -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 +3 -0
- package/dist/react-native/utils/resolveColorScheme.d.ts +1 -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
package/README.md
CHANGED
|
@@ -32,6 +32,58 @@ import { Button } from 'dash-ui-kit/react';
|
|
|
32
32
|
<Button colorScheme="brand">Button</Button>
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
## 📱 React Native Support
|
|
36
|
+
|
|
37
|
+
Dash UI Kit now includes **7 ported components** for React Native with full NativeWind support.
|
|
38
|
+
|
|
39
|
+
### Installation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm i dash-ui-kit
|
|
43
|
+
npm i nativewind twrnc
|
|
44
|
+
npm i react-native-svg
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Usage
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { Avatar, Badge, BigNumber, ValueCard } from 'dash-ui-kit/react-native';
|
|
51
|
+
|
|
52
|
+
// Avatar with identicon
|
|
53
|
+
<Avatar identifier="user123" size="md" />
|
|
54
|
+
|
|
55
|
+
// Badge with status
|
|
56
|
+
<Badge colorScheme="success">Active</Badge>
|
|
57
|
+
|
|
58
|
+
// BigNumber with formatting
|
|
59
|
+
<BigNumber variant="space">1234567.89</BigNumber>
|
|
60
|
+
|
|
61
|
+
// ValueCard container
|
|
62
|
+
<ValueCard label="Balance" value="$1,234.56" size="sm" />
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Available React Native Components
|
|
66
|
+
|
|
67
|
+
- **Avatar** - Unique identicons from usernames/IDs with full customization
|
|
68
|
+
- **Badge** - Status indicators with color schemes and sizes
|
|
69
|
+
- **BigNumber** - Large number formatting with space/comma variants
|
|
70
|
+
- **ValueCard** - Flexible labeled value containers
|
|
71
|
+
- **Identifier** - Transaction/document ID display with copy functionality
|
|
72
|
+
- **CopyButton** - Copy-to-clipboard with visual feedback
|
|
73
|
+
- **NotActive** - Inactive state indicator component
|
|
74
|
+
- **useDebounce** - Custom hook for debouncing values
|
|
75
|
+
|
|
76
|
+
### Peer Dependencies
|
|
77
|
+
|
|
78
|
+
React Native setup requires:
|
|
79
|
+
- `react-native` >= 0.70
|
|
80
|
+
- `nativewind` for styling (using twrnc)
|
|
81
|
+
- `react-native-svg` for SVG rendering
|
|
82
|
+
|
|
83
|
+
### Documentation
|
|
84
|
+
|
|
85
|
+
For detailed porting guide and technical details, see [REACT_NATIVE_PORT_GUIDE.md](./REACT_NATIVE_PORT_GUIDE.md)
|
|
86
|
+
|
|
35
87
|
## 📦 Components
|
|
36
88
|
|
|
37
89
|
- **ThemeProvider** - Theme context for dark/light mode
|
|
@@ -0,0 +1,193 @@
|
|
|
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 RadixAccordion = require('@radix-ui/react-accordion');
|
|
9
|
+
var classVarianceAuthority = require('class-variance-authority');
|
|
10
|
+
var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
|
|
11
|
+
var index = require('../icons/index.cjs.js');
|
|
12
|
+
|
|
13
|
+
function _interopNamespaceDefault(e) {
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var RadixAccordion__namespace = /*#__PURE__*/_interopNamespaceDefault(RadixAccordion);
|
|
31
|
+
|
|
32
|
+
const accordionRootStyles = classVarianceAuthority.cva(`
|
|
33
|
+
w-full
|
|
34
|
+
rounded-[1rem]
|
|
35
|
+
overflow-hidden
|
|
36
|
+
`, {
|
|
37
|
+
variants: {
|
|
38
|
+
theme: {
|
|
39
|
+
light: 'bg-dash-primary-dark-blue/[0.05]',
|
|
40
|
+
dark: 'bg-gray-800/20'
|
|
41
|
+
},
|
|
42
|
+
border: {
|
|
43
|
+
true: 'ring-1 ring-dash-primary-dark-blue/10',
|
|
44
|
+
false: ''
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
defaultVariants: {
|
|
48
|
+
theme: 'light',
|
|
49
|
+
border: false
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const accordionItemStyles = classVarianceAuthority.cva(`
|
|
53
|
+
border-none
|
|
54
|
+
outline-none
|
|
55
|
+
`);
|
|
56
|
+
const accordionTriggerStyles = classVarianceAuthority.cva(`
|
|
57
|
+
w-full
|
|
58
|
+
p-[0.875rem]
|
|
59
|
+
flex
|
|
60
|
+
items-center
|
|
61
|
+
justify-between
|
|
62
|
+
font-dash-main
|
|
63
|
+
font-medium
|
|
64
|
+
text-[0.875rem]
|
|
65
|
+
leading-[1.366]
|
|
66
|
+
text-dash-primary-dark-blue
|
|
67
|
+
bg-transparent
|
|
68
|
+
border-none
|
|
69
|
+
outline-none
|
|
70
|
+
cursor-pointer
|
|
71
|
+
transition-all
|
|
72
|
+
duration-300
|
|
73
|
+
ease-in-out
|
|
74
|
+
hover:bg-dash-primary-dark-blue/[0.01]
|
|
75
|
+
`, {
|
|
76
|
+
variants: {
|
|
77
|
+
theme: {
|
|
78
|
+
light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',
|
|
79
|
+
dark: 'text-white hover:bg-white/5'
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
defaultVariants: {
|
|
83
|
+
theme: 'light'
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const accordionContentStyles = classVarianceAuthority.cva(`
|
|
87
|
+
overflow-hidden
|
|
88
|
+
will-change-[height]
|
|
89
|
+
data-[state=open]:h-[var(--radix-accordion-content-height)]
|
|
90
|
+
data-[state=closed]:h-0
|
|
91
|
+
`);
|
|
92
|
+
const accordionContentInnerStyles = classVarianceAuthority.cva(`
|
|
93
|
+
p-[0.875rem]
|
|
94
|
+
space-y-[0.625rem]
|
|
95
|
+
`);
|
|
96
|
+
const separatorStyles = classVarianceAuthority.cva(`
|
|
97
|
+
mx-[0.875rem]
|
|
98
|
+
h-px
|
|
99
|
+
bg-dash-primary-dark-blue/10
|
|
100
|
+
transition-opacity
|
|
101
|
+
duration-300
|
|
102
|
+
ease-in-out
|
|
103
|
+
`, {
|
|
104
|
+
variants: {
|
|
105
|
+
theme: {
|
|
106
|
+
light: 'bg-dash-primary-dark-blue/10',
|
|
107
|
+
dark: 'bg-white/10'
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
defaultVariants: {
|
|
111
|
+
theme: 'light'
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const chevronStyles = classVarianceAuthority.cva(`
|
|
115
|
+
w-4
|
|
116
|
+
h-4
|
|
117
|
+
transition-transform
|
|
118
|
+
duration-300
|
|
119
|
+
ease-in-out
|
|
120
|
+
transform
|
|
121
|
+
group-data-[state=open]:rotate-180
|
|
122
|
+
`);
|
|
123
|
+
/**
|
|
124
|
+
* Accordion component based on Radix UI with smooth animations.
|
|
125
|
+
* Displays custom content in an expandable format.
|
|
126
|
+
*/
|
|
127
|
+
const Accordion = ({
|
|
128
|
+
title,
|
|
129
|
+
children,
|
|
130
|
+
defaultOpen = false,
|
|
131
|
+
open,
|
|
132
|
+
onOpenChange,
|
|
133
|
+
className = '',
|
|
134
|
+
rightElement,
|
|
135
|
+
showSeparator = false,
|
|
136
|
+
border = false
|
|
137
|
+
}) => {
|
|
138
|
+
const {
|
|
139
|
+
theme
|
|
140
|
+
} = ThemeContext.useTheme();
|
|
141
|
+
const isControlled = open !== undefined;
|
|
142
|
+
const rootClasses = accordionRootStyles({
|
|
143
|
+
theme,
|
|
144
|
+
border
|
|
145
|
+
}) + (className ? ` ${className}` : '');
|
|
146
|
+
return jsxRuntime.jsx(RadixAccordion__namespace.Root, {
|
|
147
|
+
type: 'single',
|
|
148
|
+
collapsible: true,
|
|
149
|
+
className: rootClasses,
|
|
150
|
+
value: isControlled ? open ? 'item-1' : undefined : undefined,
|
|
151
|
+
defaultValue: defaultOpen ? 'item-1' : undefined,
|
|
152
|
+
onValueChange: value => {
|
|
153
|
+
if (onOpenChange) {
|
|
154
|
+
onOpenChange(value === 'item-1');
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
children: jsxRuntime.jsxs(RadixAccordion__namespace.Item, {
|
|
158
|
+
value: 'item-1',
|
|
159
|
+
className: `AccordionItem ${accordionItemStyles()} group`,
|
|
160
|
+
children: [jsxRuntime.jsxs(RadixAccordion__namespace.Trigger, {
|
|
161
|
+
className: `${accordionTriggerStyles({
|
|
162
|
+
theme
|
|
163
|
+
})}`,
|
|
164
|
+
children: [jsxRuntime.jsx("div", {
|
|
165
|
+
className: 'w-full text-left',
|
|
166
|
+
children: title
|
|
167
|
+
}), jsxRuntime.jsxs("div", {
|
|
168
|
+
className: 'flex items-center gap-3',
|
|
169
|
+
children: [rightElement && jsxRuntime.jsx("div", {
|
|
170
|
+
children: rightElement
|
|
171
|
+
}), jsxRuntime.jsx(index.ChevronIcon, {
|
|
172
|
+
className: chevronStyles()
|
|
173
|
+
})]
|
|
174
|
+
})]
|
|
175
|
+
}), showSeparator && jsxRuntime.jsx("div", {
|
|
176
|
+
className: `${separatorStyles({
|
|
177
|
+
theme
|
|
178
|
+
})} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`
|
|
179
|
+
}), jsxRuntime.jsx(RadixAccordion__namespace.Content, {
|
|
180
|
+
forceMount: true,
|
|
181
|
+
className: accordionContentStyles(),
|
|
182
|
+
children: jsxRuntime.jsx("div", {
|
|
183
|
+
className: accordionContentInnerStyles(),
|
|
184
|
+
children: children
|
|
185
|
+
})
|
|
186
|
+
})]
|
|
187
|
+
})
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
exports.Accordion = Accordion;
|
|
192
|
+
exports.default = Accordion;
|
|
193
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/accordion/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as RadixAccordion from '@radix-ui/react-accordion'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { ChevronIcon } from '../icons'\n\nconst accordionRootStyles = cva(\n `\n w-full\n rounded-[1rem]\n overflow-hidden\n `,\n {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/[0.05]',\n dark: 'bg-gray-800/20'\n },\n border: {\n true: 'ring-1 ring-dash-primary-dark-blue/10',\n false: ''\n }\n },\n defaultVariants: {\n theme: 'light',\n border: false\n }\n }\n)\n\nconst accordionItemStyles = cva(\n `\n border-none\n outline-none\n `\n)\n\nconst accordionTriggerStyles = cva(\n `\n w-full\n p-[0.875rem]\n flex\n items-center\n justify-between\n font-dash-main\n font-medium\n text-[0.875rem]\n leading-[1.366]\n text-dash-primary-dark-blue\n bg-transparent\n border-none\n outline-none\n cursor-pointer\n transition-all\n duration-300\n ease-in-out\n hover:bg-dash-primary-dark-blue/[0.01]\n `,\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',\n dark: 'text-white hover:bg-white/5'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst accordionContentStyles = cva(`\n overflow-hidden\n will-change-[height]\n data-[state=open]:h-[var(--radix-accordion-content-height)]\n data-[state=closed]:h-0\n`)\n\nconst accordionContentInnerStyles = cva(`\n p-[0.875rem]\n space-y-[0.625rem]\n`)\n\nconst separatorStyles = cva(`\n mx-[0.875rem]\n h-px\n bg-dash-primary-dark-blue/10\n transition-opacity\n duration-300\n ease-in-out\n`, {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/10',\n dark: 'bg-white/10'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n})\n\nconst chevronStyles = cva(`\n w-4\n h-4\n transition-transform\n duration-300\n ease-in-out\n transform\n group-data-[state=open]:rotate-180\n`)\n\nexport interface AccordionProps {\n /** The title displayed in the accordion trigger */\n title: string\n /** Content to display in the accordion */\n children?: React.ReactNode\n /** Whether the accordion is open by default */\n defaultOpen?: boolean\n /** Controlled open state */\n open?: boolean\n /** Callback when the open state changes */\n onOpenChange?: (open: boolean) => void\n /** Additional CSS classes */\n className?: string\n /** Optional element to display on the right side of the trigger */\n rightElement?: React.ReactNode\n /** Whether to show separator between title and content when open */\n showSeparator?: boolean\n /** Whether to show border around the accordion */\n border?: boolean\n}\n\n/**\n * Accordion component based on Radix UI with smooth animations.\n * Displays custom content in an expandable format.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n open,\n onOpenChange,\n className = '',\n rightElement,\n showSeparator = false,\n border = false\n}) => {\n const { theme } = useTheme()\n const isControlled = open !== undefined\n\n const rootClasses = accordionRootStyles({ theme, border }) + (className ? ` ${className}` : '')\n\n return (\n <RadixAccordion.Root\n type='single'\n collapsible\n className={rootClasses}\n value={isControlled ? (open ? 'item-1' : undefined) : undefined}\n defaultValue={defaultOpen ? 'item-1' : undefined}\n onValueChange={(value) => {\n if (onOpenChange) {\n onOpenChange(value === 'item-1')\n }\n }}\n >\n <RadixAccordion.Item\n value='item-1'\n className={`AccordionItem ${accordionItemStyles()} group`}\n >\n <RadixAccordion.Trigger \n className={`${accordionTriggerStyles({ theme })}`}\n >\n <div className='w-full text-left'>{title}</div>\n <div className='flex items-center gap-3'>\n {rightElement && <div>{rightElement}</div>}\n <ChevronIcon className={chevronStyles()} />\n </div>\n </RadixAccordion.Trigger>\n\n {showSeparator && (\n <div className={`${separatorStyles({ theme })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`} />\n )}\n\n <RadixAccordion.Content forceMount className={accordionContentStyles()}>\n <div className={accordionContentInnerStyles()}>\n {children}\n </div>\n </RadixAccordion.Content>\n </RadixAccordion.Item>\n </RadixAccordion.Root>\n )\n}\n\nexport default Accordion\n"],"names":["accordionRootStyles","cva","variants","theme","light","dark","border","true","false","defaultVariants","accordionItemStyles","accordionTriggerStyles","accordionContentStyles","accordionContentInnerStyles","separatorStyles","chevronStyles","Accordion","title","children","defaultOpen","open","onOpenChange","className","rightElement","showSeparator","useTheme","isControlled","undefined","rootClasses","_jsx","RadixAccordion","Root","type","collapsible","value","defaultValue","onValueChange","_jsxs","Item","Trigger","ChevronIcon","Content","forceMount"],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import * as RadixAccordion from '@radix-ui/react-accordion';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { useTheme } from '../../contexts/ThemeContext.esm.js';
|
|
7
|
+
import { ChevronIcon } from '../icons/index.esm.js';
|
|
8
|
+
|
|
9
|
+
const accordionRootStyles = cva(`
|
|
10
|
+
w-full
|
|
11
|
+
rounded-[1rem]
|
|
12
|
+
overflow-hidden
|
|
13
|
+
`, {
|
|
14
|
+
variants: {
|
|
15
|
+
theme: {
|
|
16
|
+
light: 'bg-dash-primary-dark-blue/[0.05]',
|
|
17
|
+
dark: 'bg-gray-800/20'
|
|
18
|
+
},
|
|
19
|
+
border: {
|
|
20
|
+
true: 'ring-1 ring-dash-primary-dark-blue/10',
|
|
21
|
+
false: ''
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
theme: 'light',
|
|
26
|
+
border: false
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const accordionItemStyles = cva(`
|
|
30
|
+
border-none
|
|
31
|
+
outline-none
|
|
32
|
+
`);
|
|
33
|
+
const accordionTriggerStyles = cva(`
|
|
34
|
+
w-full
|
|
35
|
+
p-[0.875rem]
|
|
36
|
+
flex
|
|
37
|
+
items-center
|
|
38
|
+
justify-between
|
|
39
|
+
font-dash-main
|
|
40
|
+
font-medium
|
|
41
|
+
text-[0.875rem]
|
|
42
|
+
leading-[1.366]
|
|
43
|
+
text-dash-primary-dark-blue
|
|
44
|
+
bg-transparent
|
|
45
|
+
border-none
|
|
46
|
+
outline-none
|
|
47
|
+
cursor-pointer
|
|
48
|
+
transition-all
|
|
49
|
+
duration-300
|
|
50
|
+
ease-in-out
|
|
51
|
+
hover:bg-dash-primary-dark-blue/[0.01]
|
|
52
|
+
`, {
|
|
53
|
+
variants: {
|
|
54
|
+
theme: {
|
|
55
|
+
light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',
|
|
56
|
+
dark: 'text-white hover:bg-white/5'
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
defaultVariants: {
|
|
60
|
+
theme: 'light'
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const accordionContentStyles = cva(`
|
|
64
|
+
overflow-hidden
|
|
65
|
+
will-change-[height]
|
|
66
|
+
data-[state=open]:h-[var(--radix-accordion-content-height)]
|
|
67
|
+
data-[state=closed]:h-0
|
|
68
|
+
`);
|
|
69
|
+
const accordionContentInnerStyles = cva(`
|
|
70
|
+
p-[0.875rem]
|
|
71
|
+
space-y-[0.625rem]
|
|
72
|
+
`);
|
|
73
|
+
const separatorStyles = cva(`
|
|
74
|
+
mx-[0.875rem]
|
|
75
|
+
h-px
|
|
76
|
+
bg-dash-primary-dark-blue/10
|
|
77
|
+
transition-opacity
|
|
78
|
+
duration-300
|
|
79
|
+
ease-in-out
|
|
80
|
+
`, {
|
|
81
|
+
variants: {
|
|
82
|
+
theme: {
|
|
83
|
+
light: 'bg-dash-primary-dark-blue/10',
|
|
84
|
+
dark: 'bg-white/10'
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
defaultVariants: {
|
|
88
|
+
theme: 'light'
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const chevronStyles = cva(`
|
|
92
|
+
w-4
|
|
93
|
+
h-4
|
|
94
|
+
transition-transform
|
|
95
|
+
duration-300
|
|
96
|
+
ease-in-out
|
|
97
|
+
transform
|
|
98
|
+
group-data-[state=open]:rotate-180
|
|
99
|
+
`);
|
|
100
|
+
/**
|
|
101
|
+
* Accordion component based on Radix UI with smooth animations.
|
|
102
|
+
* Displays custom content in an expandable format.
|
|
103
|
+
*/
|
|
104
|
+
const Accordion = ({
|
|
105
|
+
title,
|
|
106
|
+
children,
|
|
107
|
+
defaultOpen = false,
|
|
108
|
+
open,
|
|
109
|
+
onOpenChange,
|
|
110
|
+
className = '',
|
|
111
|
+
rightElement,
|
|
112
|
+
showSeparator = false,
|
|
113
|
+
border = false
|
|
114
|
+
}) => {
|
|
115
|
+
const {
|
|
116
|
+
theme
|
|
117
|
+
} = useTheme();
|
|
118
|
+
const isControlled = open !== undefined;
|
|
119
|
+
const rootClasses = accordionRootStyles({
|
|
120
|
+
theme,
|
|
121
|
+
border
|
|
122
|
+
}) + (className ? ` ${className}` : '');
|
|
123
|
+
return jsx(RadixAccordion.Root, {
|
|
124
|
+
type: 'single',
|
|
125
|
+
collapsible: true,
|
|
126
|
+
className: rootClasses,
|
|
127
|
+
value: isControlled ? open ? 'item-1' : undefined : undefined,
|
|
128
|
+
defaultValue: defaultOpen ? 'item-1' : undefined,
|
|
129
|
+
onValueChange: value => {
|
|
130
|
+
if (onOpenChange) {
|
|
131
|
+
onOpenChange(value === 'item-1');
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
children: jsxs(RadixAccordion.Item, {
|
|
135
|
+
value: 'item-1',
|
|
136
|
+
className: `AccordionItem ${accordionItemStyles()} group`,
|
|
137
|
+
children: [jsxs(RadixAccordion.Trigger, {
|
|
138
|
+
className: `${accordionTriggerStyles({
|
|
139
|
+
theme
|
|
140
|
+
})}`,
|
|
141
|
+
children: [jsx("div", {
|
|
142
|
+
className: 'w-full text-left',
|
|
143
|
+
children: title
|
|
144
|
+
}), jsxs("div", {
|
|
145
|
+
className: 'flex items-center gap-3',
|
|
146
|
+
children: [rightElement && jsx("div", {
|
|
147
|
+
children: rightElement
|
|
148
|
+
}), jsx(ChevronIcon, {
|
|
149
|
+
className: chevronStyles()
|
|
150
|
+
})]
|
|
151
|
+
})]
|
|
152
|
+
}), showSeparator && jsx("div", {
|
|
153
|
+
className: `${separatorStyles({
|
|
154
|
+
theme
|
|
155
|
+
})} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`
|
|
156
|
+
}), jsx(RadixAccordion.Content, {
|
|
157
|
+
forceMount: true,
|
|
158
|
+
className: accordionContentStyles(),
|
|
159
|
+
children: jsx("div", {
|
|
160
|
+
className: accordionContentInnerStyles(),
|
|
161
|
+
children: children
|
|
162
|
+
})
|
|
163
|
+
})]
|
|
164
|
+
})
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export { Accordion, Accordion as default };
|
|
169
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/accordion/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as RadixAccordion from '@radix-ui/react-accordion'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { ChevronIcon } from '../icons'\n\nconst accordionRootStyles = cva(\n `\n w-full\n rounded-[1rem]\n overflow-hidden\n `,\n {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/[0.05]',\n dark: 'bg-gray-800/20'\n },\n border: {\n true: 'ring-1 ring-dash-primary-dark-blue/10',\n false: ''\n }\n },\n defaultVariants: {\n theme: 'light',\n border: false\n }\n }\n)\n\nconst accordionItemStyles = cva(\n `\n border-none\n outline-none\n `\n)\n\nconst accordionTriggerStyles = cva(\n `\n w-full\n p-[0.875rem]\n flex\n items-center\n justify-between\n font-dash-main\n font-medium\n text-[0.875rem]\n leading-[1.366]\n text-dash-primary-dark-blue\n bg-transparent\n border-none\n outline-none\n cursor-pointer\n transition-all\n duration-300\n ease-in-out\n hover:bg-dash-primary-dark-blue/[0.01]\n `,\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',\n dark: 'text-white hover:bg-white/5'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst accordionContentStyles = cva(`\n overflow-hidden\n will-change-[height]\n data-[state=open]:h-[var(--radix-accordion-content-height)]\n data-[state=closed]:h-0\n`)\n\nconst accordionContentInnerStyles = cva(`\n p-[0.875rem]\n space-y-[0.625rem]\n`)\n\nconst separatorStyles = cva(`\n mx-[0.875rem]\n h-px\n bg-dash-primary-dark-blue/10\n transition-opacity\n duration-300\n ease-in-out\n`, {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/10',\n dark: 'bg-white/10'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n})\n\nconst chevronStyles = cva(`\n w-4\n h-4\n transition-transform\n duration-300\n ease-in-out\n transform\n group-data-[state=open]:rotate-180\n`)\n\nexport interface AccordionProps {\n /** The title displayed in the accordion trigger */\n title: string\n /** Content to display in the accordion */\n children?: React.ReactNode\n /** Whether the accordion is open by default */\n defaultOpen?: boolean\n /** Controlled open state */\n open?: boolean\n /** Callback when the open state changes */\n onOpenChange?: (open: boolean) => void\n /** Additional CSS classes */\n className?: string\n /** Optional element to display on the right side of the trigger */\n rightElement?: React.ReactNode\n /** Whether to show separator between title and content when open */\n showSeparator?: boolean\n /** Whether to show border around the accordion */\n border?: boolean\n}\n\n/**\n * Accordion component based on Radix UI with smooth animations.\n * Displays custom content in an expandable format.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n open,\n onOpenChange,\n className = '',\n rightElement,\n showSeparator = false,\n border = false\n}) => {\n const { theme } = useTheme()\n const isControlled = open !== undefined\n\n const rootClasses = accordionRootStyles({ theme, border }) + (className ? ` ${className}` : '')\n\n return (\n <RadixAccordion.Root\n type='single'\n collapsible\n className={rootClasses}\n value={isControlled ? (open ? 'item-1' : undefined) : undefined}\n defaultValue={defaultOpen ? 'item-1' : undefined}\n onValueChange={(value) => {\n if (onOpenChange) {\n onOpenChange(value === 'item-1')\n }\n }}\n >\n <RadixAccordion.Item\n value='item-1'\n className={`AccordionItem ${accordionItemStyles()} group`}\n >\n <RadixAccordion.Trigger \n className={`${accordionTriggerStyles({ theme })}`}\n >\n <div className='w-full text-left'>{title}</div>\n <div className='flex items-center gap-3'>\n {rightElement && <div>{rightElement}</div>}\n <ChevronIcon className={chevronStyles()} />\n </div>\n </RadixAccordion.Trigger>\n\n {showSeparator && (\n <div className={`${separatorStyles({ theme })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`} />\n )}\n\n <RadixAccordion.Content forceMount className={accordionContentStyles()}>\n <div className={accordionContentInnerStyles()}>\n {children}\n </div>\n </RadixAccordion.Content>\n </RadixAccordion.Item>\n </RadixAccordion.Root>\n )\n}\n\nexport default Accordion\n"],"names":["accordionRootStyles","cva","variants","theme","light","dark","border","true","false","defaultVariants","accordionItemStyles","accordionTriggerStyles","accordionContentStyles","accordionContentInnerStyles","separatorStyles","chevronStyles","Accordion","title","children","defaultOpen","open","onOpenChange","className","rightElement","showSeparator","useTheme","isControlled","undefined","rootClasses","_jsx","RadixAccordion","Root","type","collapsible","value","defaultValue","onValueChange","_jsxs","Item","Trigger","ChevronIcon","Content","forceMount"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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 minidenticons = require('minidenticons');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Avatar component that creates unique identicons from usernames
|
|
14
|
+
* with customizable appearance.
|
|
15
|
+
*/
|
|
16
|
+
const Avatar = _a => {
|
|
17
|
+
var {
|
|
18
|
+
username,
|
|
19
|
+
className = '',
|
|
20
|
+
saturation = 50,
|
|
21
|
+
lightness = 50
|
|
22
|
+
} = _a,
|
|
23
|
+
props = tslib.__rest(_a, ["username", "className", "saturation", "lightness"]);
|
|
24
|
+
const svgURI = React.useMemo(() => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticons.minidenticon(username, saturation, lightness)), [username, saturation, lightness]);
|
|
25
|
+
const containerClasses = `relative inline-block ${className}`.trim();
|
|
26
|
+
const imageClasses = 'w-full h-full';
|
|
27
|
+
return jsxRuntime.jsx("div", {
|
|
28
|
+
className: containerClasses,
|
|
29
|
+
children: jsxRuntime.jsx("img", Object.assign({
|
|
30
|
+
src: svgURI,
|
|
31
|
+
alt: username || '',
|
|
32
|
+
className: imageClasses
|
|
33
|
+
}, props))
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
exports.Avatar = Avatar;
|
|
38
|
+
exports.default = Avatar;
|
|
39
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/avatar/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { minidenticon } from 'minidenticons'\n\nexport interface AvatarProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n /** Username to generate identicon for */\n username: string\n /** Additional CSS class name */\n className?: string\n /** Saturation level for the identicon (0-100) */\n saturation?: number\n /** Lightness level for the identicon (0-100) */\n lightness?: number\n}\n\n/**\n * Avatar component that creates unique identicons from usernames\n * with customizable appearance.\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n username,\n className = '',\n saturation = 50,\n lightness = 50,\n ...props\n}) => {\n const svgURI = useMemo(\n () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)),\n [username, saturation, lightness]\n )\n\n const containerClasses = `relative inline-block ${className}`.trim()\n const imageClasses = 'w-full h-full'\n\n return (\n <div className={containerClasses}>\n <img\n src={svgURI}\n alt={username || ''}\n className={imageClasses}\n {...props}\n />\n </div>\n )\n}\n\nexport default Avatar\n"],"names":["Avatar","_a","username","className","saturation","lightness","props","__rest","svgURI","useMemo","encodeURIComponent","minidenticon","containerClasses","trim","imageClasses","_jsx","Object","assign","src","alt"],"mappings":";;;;;;;;;;;AAcA;;;AAGG;AACUA,MAAAA,MAAM,GAA2BC,EAM7C,IAAI;EANyC,IAAA;MAC5CC,QAAQ;AACRC,MAAAA,SAAS,GAAG,EAAE;AACdC,MAAAA,UAAU,GAAG,EAAE;AACfC,MAAAA,SAAS,GAAG;AAAE,KAAA,GAAAJ,EAEf;AADIK,IAAAA,KAAK,GAAAC,YAAA,CAAAN,EAAA,EALoC,oDAM7C,CADS;EAER,MAAMO,MAAM,GAAGC,aAAO,CACpB,MAAM,0BAA0B,GAAGC,kBAAkB,CAACC,0BAAY,CAACT,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAAC,EACpG,CAACH,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAClC;EAED,MAAMO,gBAAgB,GAAG,CAAyBT,sBAAAA,EAAAA,SAAS,EAAE,CAACU,IAAI,EAAE;EACpE,MAAMC,YAAY,GAAG,eAAe;EAEpC,OACEC,cAAK,CAAA,KAAA,EAAA;AAAAZ,IAAAA,SAAS,EAAES,gBAAgB;cAC9BG,cACE,CAAA,KAAA,EAAAC,MAAA,CAAAC,MAAA,CAAA;AAAAC,MAAAA,GAAG,EAAEV,MAAM;MACXW,GAAG,EAAEjB,QAAQ,IAAI,EAAE;AACnBC,MAAAA,SAAS,EAAEW;KAAY,EACnBR,KAAK,CAAA;AAEP,GAAA,CAAA;AAEV;;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { __rest } from 'tslib';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
import { minidenticon } from 'minidenticons';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Avatar component that creates unique identicons from usernames
|
|
10
|
+
* with customizable appearance.
|
|
11
|
+
*/
|
|
12
|
+
const Avatar = _a => {
|
|
13
|
+
var {
|
|
14
|
+
username,
|
|
15
|
+
className = '',
|
|
16
|
+
saturation = 50,
|
|
17
|
+
lightness = 50
|
|
18
|
+
} = _a,
|
|
19
|
+
props = __rest(_a, ["username", "className", "saturation", "lightness"]);
|
|
20
|
+
const svgURI = useMemo(() => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)), [username, saturation, lightness]);
|
|
21
|
+
const containerClasses = `relative inline-block ${className}`.trim();
|
|
22
|
+
const imageClasses = 'w-full h-full';
|
|
23
|
+
return jsx("div", {
|
|
24
|
+
className: containerClasses,
|
|
25
|
+
children: jsx("img", Object.assign({
|
|
26
|
+
src: svgURI,
|
|
27
|
+
alt: username || '',
|
|
28
|
+
className: imageClasses
|
|
29
|
+
}, props))
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { Avatar, Avatar as default };
|
|
34
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/avatar/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { minidenticon } from 'minidenticons'\n\nexport interface AvatarProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n /** Username to generate identicon for */\n username: string\n /** Additional CSS class name */\n className?: string\n /** Saturation level for the identicon (0-100) */\n saturation?: number\n /** Lightness level for the identicon (0-100) */\n lightness?: number\n}\n\n/**\n * Avatar component that creates unique identicons from usernames\n * with customizable appearance.\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n username,\n className = '',\n saturation = 50,\n lightness = 50,\n ...props\n}) => {\n const svgURI = useMemo(\n () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)),\n [username, saturation, lightness]\n )\n\n const containerClasses = `relative inline-block ${className}`.trim()\n const imageClasses = 'w-full h-full'\n\n return (\n <div className={containerClasses}>\n <img\n src={svgURI}\n alt={username || ''}\n className={imageClasses}\n {...props}\n />\n </div>\n )\n}\n\nexport default Avatar\n"],"names":["Avatar","_a","username","className","saturation","lightness","props","__rest","svgURI","useMemo","encodeURIComponent","minidenticon","containerClasses","trim","imageClasses","_jsx","Object","assign","src","alt"],"mappings":";;;;;;;AAcA;;;AAGG;AACUA,MAAAA,MAAM,GAA2BC,EAM7C,IAAI;EANyC,IAAA;MAC5CC,QAAQ;AACRC,MAAAA,SAAS,GAAG,EAAE;AACdC,MAAAA,UAAU,GAAG,EAAE;AACfC,MAAAA,SAAS,GAAG;AAAE,KAAA,GAAAJ,EAEf;AADIK,IAAAA,KAAK,GAAAC,MAAA,CAAAN,EAAA,EALoC,oDAM7C,CADS;EAER,MAAMO,MAAM,GAAGC,OAAO,CACpB,MAAM,0BAA0B,GAAGC,kBAAkB,CAACC,YAAY,CAACT,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAAC,EACpG,CAACH,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAClC;EAED,MAAMO,gBAAgB,GAAG,CAAyBT,sBAAAA,EAAAA,SAAS,EAAE,CAACU,IAAI,EAAE;EACpE,MAAMC,YAAY,GAAG,eAAe;EAEpC,OACEC,GAAK,CAAA,KAAA,EAAA;AAAAZ,IAAAA,SAAS,EAAES,gBAAgB;cAC9BG,GACE,CAAA,KAAA,EAAAC,MAAA,CAAAC,MAAA,CAAA;AAAAC,MAAAA,GAAG,EAAEV,MAAM;MACXW,GAAG,EAAEjB,QAAQ,IAAI,EAAE;AACnBC,MAAAA,SAAS,EAAEW;KAAY,EACnBR,KAAK,CAAA;AAEP,GAAA,CAAA;AAEV;;;;"}
|
|
@@ -0,0 +1,97 @@
|
|
|
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 useColorScheme = require('../../hooks/useColorScheme.cjs.js');
|
|
10
|
+
|
|
11
|
+
const Badge = _a => {
|
|
12
|
+
var _b;
|
|
13
|
+
var {
|
|
14
|
+
children,
|
|
15
|
+
variant = 'default',
|
|
16
|
+
color,
|
|
17
|
+
colorLight,
|
|
18
|
+
colorDark,
|
|
19
|
+
size = 'sm',
|
|
20
|
+
borderRadius,
|
|
21
|
+
className = '',
|
|
22
|
+
onClick
|
|
23
|
+
} = _a,
|
|
24
|
+
props = tslib.__rest(_a, ["children", "variant", "color", "colorLight", "colorDark", "size", "borderRadius", "className", "onClick"]);
|
|
25
|
+
const effectiveColor = (_b = useColorScheme.useColorScheme(color, colorLight, colorDark)) !== null && _b !== void 0 ? _b : 'blue';
|
|
26
|
+
const baseClasses = 'inline-flex items-center justify-center font-medium transition-colors';
|
|
27
|
+
// Size classes with default border radius
|
|
28
|
+
const sizeClasses = {
|
|
29
|
+
xxs: 'px-1 py-1 text-xs gap-2 rounded-full',
|
|
30
|
+
xs: 'px-[0.5rem] py-[0.25rem] text-xs rounded-full',
|
|
31
|
+
sm: 'px-[2.125rem] py-[0.625rem] text-xs rounded-full',
|
|
32
|
+
xl: 'px-[2.25rem] py-4 text-lg rounded-full'
|
|
33
|
+
};
|
|
34
|
+
// Border radius classes (overrides size border radius)
|
|
35
|
+
const borderRadiusClasses = {
|
|
36
|
+
xs: 'rounded-[0.25rem]'
|
|
37
|
+
};
|
|
38
|
+
// Color and variant combination classes
|
|
39
|
+
const getVariantClasses = () => {
|
|
40
|
+
const colorMap = {
|
|
41
|
+
blue: {
|
|
42
|
+
default: 'text-[#4C7EFF]',
|
|
43
|
+
flat: 'bg-[rgba(76,126,255,0.15)] text-[#4C7EFF]',
|
|
44
|
+
solid: 'bg-[#4C7EFF] text-white',
|
|
45
|
+
bordered: 'outline outline-1 outline-[#4C7EFF] text-[#4C7EFF]'
|
|
46
|
+
},
|
|
47
|
+
white: {
|
|
48
|
+
default: 'text-white',
|
|
49
|
+
flat: 'bg-[rgba(255,255,255,0.15)] text-white',
|
|
50
|
+
solid: 'bg-white text-[#0C1C33]',
|
|
51
|
+
bordered: 'outline outline-1 outline-white text-white'
|
|
52
|
+
},
|
|
53
|
+
gray: {
|
|
54
|
+
default: 'text-[#0C1C33]',
|
|
55
|
+
flat: 'bg-[rgba(12,28,51,0.15)] text-[#0C1C33]',
|
|
56
|
+
solid: 'bg-[#0C1C33] text-white',
|
|
57
|
+
bordered: 'outline outline-1 outline-[#0C1C33] text-[#0C1C33]'
|
|
58
|
+
},
|
|
59
|
+
'light-gray': {
|
|
60
|
+
default: 'text-[#6B7280]',
|
|
61
|
+
flat: 'bg-[#0C1C33]/5 text-[#0C1C33]',
|
|
62
|
+
solid: 'bg-[#0C1C33]/15 text-[#0C1C33]',
|
|
63
|
+
bordered: 'outline outline-1 outline-[#6B7280] text-[#6B7280]'
|
|
64
|
+
},
|
|
65
|
+
turquoise: {
|
|
66
|
+
default: 'text-[#60F6D2]',
|
|
67
|
+
flat: 'bg-[rgba(96,246,210,0.15)] text-[#60F6D2]',
|
|
68
|
+
solid: 'bg-[#60F6D2] text-[#0C1C33]',
|
|
69
|
+
bordered: 'outline outline-1 outline-[#60F6D2] text-[#60F6D2]'
|
|
70
|
+
},
|
|
71
|
+
red: {
|
|
72
|
+
default: 'text-[#CD2E00]',
|
|
73
|
+
flat: 'bg-[rgba(205,46,0,0.15)] text-[#CD2E00]',
|
|
74
|
+
solid: 'bg-[#CD2E00] text-white',
|
|
75
|
+
bordered: 'outline outline-1 outline-[#CD2E00] text-[#CD2E00]'
|
|
76
|
+
},
|
|
77
|
+
orange: {
|
|
78
|
+
default: 'text-[#F98F12]',
|
|
79
|
+
flat: 'bg-[rgba(249,143,18,0.15)] text-[#F98F12]',
|
|
80
|
+
solid: 'bg-[#F98F12] text-white',
|
|
81
|
+
bordered: 'outline outline-1 outline-[#F98F12] text-[#F98F12]'
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
return colorMap[effectiveColor][variant];
|
|
85
|
+
};
|
|
86
|
+
const classes = [baseClasses, sizeClasses[size], getVariantClasses(), borderRadius && borderRadiusClasses[borderRadius], className].filter(Boolean).join(' ');
|
|
87
|
+
return jsxRuntime.jsx("span", Object.assign({
|
|
88
|
+
className: classes,
|
|
89
|
+
onClick: onClick
|
|
90
|
+
}, props, {
|
|
91
|
+
children: children
|
|
92
|
+
}));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
exports.Badge = Badge;
|
|
96
|
+
exports.default = Badge;
|
|
97
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/badge/index.tsx"],"sourcesContent":["import React from 'react';\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\ntype BadgeColor = 'blue' | 'white' | 'gray' | 'light-gray' | 'turquoise' | 'red' | 'orange'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Content of the badge\n */\n children: React.ReactNode;\n\n /**\n * Visual style variant\n */\n variant?: 'default' | 'flat' | 'solid' | 'bordered';\n\n /**\n * Color theme\n */\n color?: BadgeColor;\n\n /**\n * Color override for light theme\n */\n colorLight?: BadgeColor;\n\n /**\n * Color override for dark theme\n */\n colorDark?: BadgeColor;\n\n /**\n * Size of the badge\n */\n size?: 'xxs' | 'xs' | 'sm' | 'xl';\n\n /**\n * Border radius variant\n */\n borderRadius?: 'xs';\n\n /**\n * Additional CSS class name\n */\n className?: string;\n\n /**\n * Click handler\n */\n onClick?: React.MouseEventHandler<HTMLSpanElement>;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n color,\n colorLight,\n colorDark,\n size = 'sm',\n borderRadius,\n className = '',\n onClick,\n ...props\n}) => {\n const effectiveColor = useColorScheme(color, colorLight, colorDark) ?? 'blue'\n const baseClasses = 'inline-flex items-center justify-center font-medium transition-colors';\n \n // Size classes with default border radius\n const sizeClasses = {\n xxs: 'px-1 py-1 text-xs gap-2 rounded-full',\n xs: 'px-[0.5rem] py-[0.25rem] text-xs rounded-full',\n sm: 'px-[2.125rem] py-[0.625rem] text-xs rounded-full',\n xl: 'px-[2.25rem] py-4 text-lg rounded-full',\n }\n\n // Border radius classes (overrides size border radius)\n const borderRadiusClasses = {\n xs: 'rounded-[0.25rem]',\n }\n \n // Color and variant combination classes\n const getVariantClasses = () => {\n const colorMap = {\n blue: {\n default: 'text-[#4C7EFF]',\n flat: 'bg-[rgba(76,126,255,0.15)] text-[#4C7EFF]',\n solid: 'bg-[#4C7EFF] text-white',\n bordered: 'outline outline-1 outline-[#4C7EFF] text-[#4C7EFF]',\n },\n white: {\n default: 'text-white',\n flat: 'bg-[rgba(255,255,255,0.15)] text-white',\n solid: 'bg-white text-[#0C1C33]',\n bordered: 'outline outline-1 outline-white text-white',\n },\n gray: {\n default: 'text-[#0C1C33]',\n flat: 'bg-[rgba(12,28,51,0.15)] text-[#0C1C33]',\n solid: 'bg-[#0C1C33] text-white',\n bordered: 'outline outline-1 outline-[#0C1C33] text-[#0C1C33]',\n },\n 'light-gray': {\n default: 'text-[#6B7280]',\n flat: 'bg-[#0C1C33]/5 text-[#0C1C33]',\n solid: 'bg-[#0C1C33]/15 text-[#0C1C33]',\n bordered: 'outline outline-1 outline-[#6B7280] text-[#6B7280]',\n },\n turquoise: {\n default: 'text-[#60F6D2]',\n flat: 'bg-[rgba(96,246,210,0.15)] text-[#60F6D2]',\n solid: 'bg-[#60F6D2] text-[#0C1C33]',\n bordered: 'outline outline-1 outline-[#60F6D2] text-[#60F6D2]',\n },\n red: {\n default: 'text-[#CD2E00]',\n flat: 'bg-[rgba(205,46,0,0.15)] text-[#CD2E00]',\n solid: 'bg-[#CD2E00] text-white',\n bordered: 'outline outline-1 outline-[#CD2E00] text-[#CD2E00]',\n },\n orange: {\n default: 'text-[#F98F12]',\n flat: 'bg-[rgba(249,143,18,0.15)] text-[#F98F12]',\n solid: 'bg-[#F98F12] text-white',\n bordered: 'outline outline-1 outline-[#F98F12] text-[#F98F12]',\n },\n }\n \n return colorMap[effectiveColor][variant];\n }\n \n const classes = [\n baseClasses,\n sizeClasses[size],\n getVariantClasses(),\n borderRadius && borderRadiusClasses[borderRadius],\n className,\n ].filter(Boolean).join(' ')\n \n return (\n <span className={classes} onClick={onClick} {...props}>\n {children}\n </span>\n )\n}\n\nexport default Badge\n"],"names":["Badge","_a","children","variant","color","colorLight","colorDark","size","borderRadius","className","onClick","props","__rest","effectiveColor","_b","useColorScheme","baseClasses","sizeClasses","xxs","xs","sm","xl","borderRadiusClasses","getVariantClasses","colorMap","blue","default","flat","solid","bordered","white","gray","turquoise","red","orange","classes","filter","Boolean","join","_jsx","Object","assign"],"mappings":"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"}
|