@cranberry-money/shared-utils 3.0.4 → 3.0.5
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/dist/badge/badgeSystem.d.ts +12 -0
- package/dist/badge/badgeSystem.d.ts.map +1 -0
- package/dist/badge/badgeSystem.js +153 -0
- package/dist/badge/index.d.ts +4 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/badge/index.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BadgeSize, BadgeConfig, BadgeStyle, BadgeStyleWithText } from '@cranberry-money/shared-types';
|
|
2
|
+
import { type TradeStatus as TradeStatusType, type TargetTradeStatus as TargetTradeStatusType, type WithdrawalStatus as WithdrawalStatusType, type LiquidationStatus as LiquidationStatusType } from '@cranberry-money/shared-constants';
|
|
3
|
+
export declare const createBadge: ({ variant, size, className }: BadgeConfig) => BadgeStyle;
|
|
4
|
+
export type TradeStatus = TradeStatusType | TargetTradeStatusType;
|
|
5
|
+
export declare const getTradeStatusBadge: (status: TradeStatus, size?: BadgeSize) => BadgeStyleWithText;
|
|
6
|
+
export type WithdrawalStatus = WithdrawalStatusType;
|
|
7
|
+
export declare const getWithdrawalStatusBadge: (status: WithdrawalStatus, size?: BadgeSize) => BadgeStyleWithText;
|
|
8
|
+
export type LiquidationStatus = LiquidationStatusType;
|
|
9
|
+
export declare const getLiquidationStatusBadge: (status: LiquidationStatus, size?: BadgeSize) => BadgeStyleWithText;
|
|
10
|
+
export type TargetTradeStatus = TargetTradeStatusType;
|
|
11
|
+
export declare const getTargetTradeStatusBadge: (status: TargetTradeStatus, size?: BadgeSize) => BadgeStyleWithText;
|
|
12
|
+
//# sourceMappingURL=badgeSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badgeSystem.d.ts","sourceRoot":"","sources":["../../src/badge/badgeSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EASL,KAAK,WAAW,IAAI,eAAe,EACnC,KAAK,iBAAiB,IAAI,qBAAqB,EAC/C,KAAK,gBAAgB,IAAI,oBAAoB,EAC7C,KAAK,iBAAiB,IAAI,qBAAqB,EAChD,MAAM,mCAAmC,CAAC;AAkC3C,eAAO,MAAM,WAAW,GAAI,8BAA0C,WAAW,KAAG,UAQnF,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,qBAAqB,CAAC;AA8BlE,eAAO,MAAM,mBAAmB,GAAI,QAAQ,WAAW,EAAE,OAAM,SAAgB,KAAG,kBAUjF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AA0BpD,eAAO,MAAM,wBAAwB,GAAI,QAAQ,gBAAgB,EAAE,OAAM,SAAgB,KAAG,kBAU3F,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAkBtD,eAAO,MAAM,yBAAyB,GAAI,QAAQ,iBAAiB,EAAE,OAAM,SAAgB,KAAG,kBAU7F,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAkBtD,eAAO,MAAM,yBAAyB,GAAI,QAAQ,iBAAiB,EAAE,OAAM,SAAgB,KAAG,kBAU7F,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { TRADE_STATUS, TRADE_STATUS_LABELS, TARGET_TRADE_STATUS, TARGET_TRADE_STATUS_LABELS, WITHDRAWAL_STATUS, WITHDRAWAL_STATUS_LABELS, LIQUIDATION_STATUS, LIQUIDATION_STATUS_LABELS, } from '@cranberry-money/shared-constants';
|
|
2
|
+
/**
|
|
3
|
+
* Centralized Badge System
|
|
4
|
+
*
|
|
5
|
+
* This module provides a standardized way to create and style badges across the application.
|
|
6
|
+
* It ensures consistency in colors, typography, and semantic meaning while maintaining
|
|
7
|
+
* accessibility standards.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Core badge styling configuration using custom color system
|
|
11
|
+
*/
|
|
12
|
+
const BADGE_VARIANTS = {
|
|
13
|
+
primary: 'bg-surface-tertiary text-content-secondary',
|
|
14
|
+
secondary: 'bg-surface-secondary text-content-body',
|
|
15
|
+
success: 'bg-success-900/80 text-success-300',
|
|
16
|
+
warning: 'bg-warning-900/80 text-warning-300',
|
|
17
|
+
error: 'bg-error-900/80 text-error-300',
|
|
18
|
+
info: 'bg-surface-tertiary text-content-body',
|
|
19
|
+
neutral: 'bg-surface-secondary text-content-muted',
|
|
20
|
+
};
|
|
21
|
+
const BADGE_SIZES = {
|
|
22
|
+
sm: 'text-xs px-1.5 py-0.5',
|
|
23
|
+
md: 'text-xs px-2 py-1',
|
|
24
|
+
lg: 'text-sm px-3 py-1.5',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Base badge styles that apply to all badges
|
|
28
|
+
*/
|
|
29
|
+
const BASE_BADGE_STYLES = 'inline-flex items-center rounded-md font-medium whitespace-nowrap transition-colors';
|
|
30
|
+
export const createBadge = ({ variant, size = 'md', className = '' }) => {
|
|
31
|
+
const variantClasses = BADGE_VARIANTS[variant];
|
|
32
|
+
const sizeClasses = BADGE_SIZES[size];
|
|
33
|
+
return {
|
|
34
|
+
className: `${BASE_BADGE_STYLES} ${variantClasses} ${sizeClasses} ${className}`.trim(),
|
|
35
|
+
ariaLabel: `${variant} status`,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
const TRADE_STATUS_MAPPING = {
|
|
39
|
+
// Executed Trade Statuses
|
|
40
|
+
[TRADE_STATUS.EXECUTED]: 'primary',
|
|
41
|
+
[TRADE_STATUS.SETTLED]: 'success',
|
|
42
|
+
[TRADE_STATUS.CANCELLED]: 'error',
|
|
43
|
+
[TRADE_STATUS.FAILED]: 'error',
|
|
44
|
+
// Target Trade Statuses
|
|
45
|
+
[TARGET_TRADE_STATUS.PENDING]: 'warning',
|
|
46
|
+
[TARGET_TRADE_STATUS.APPROVED]: 'success',
|
|
47
|
+
[TARGET_TRADE_STATUS.SUBMITTED]: 'primary',
|
|
48
|
+
[TARGET_TRADE_STATUS.EXPIRED]: 'neutral',
|
|
49
|
+
// Note: TARGET_TRADE_STATUS.CANCELLED has same value as TRADE_STATUS.CANCELLED
|
|
50
|
+
};
|
|
51
|
+
const TRADE_STATUS_LABELS_MAP = {
|
|
52
|
+
// Executed Trade Status Labels
|
|
53
|
+
[TRADE_STATUS.EXECUTED]: TRADE_STATUS_LABELS.EXECUTED,
|
|
54
|
+
[TRADE_STATUS.SETTLED]: TRADE_STATUS_LABELS.SETTLED,
|
|
55
|
+
[TRADE_STATUS.CANCELLED]: TRADE_STATUS_LABELS.CANCELLED,
|
|
56
|
+
[TRADE_STATUS.FAILED]: TRADE_STATUS_LABELS.FAILED,
|
|
57
|
+
// Target Trade Status Labels
|
|
58
|
+
[TARGET_TRADE_STATUS.PENDING]: TARGET_TRADE_STATUS_LABELS.PENDING,
|
|
59
|
+
[TARGET_TRADE_STATUS.APPROVED]: TARGET_TRADE_STATUS_LABELS.APPROVED,
|
|
60
|
+
[TARGET_TRADE_STATUS.SUBMITTED]: TARGET_TRADE_STATUS_LABELS.SUBMITTED,
|
|
61
|
+
[TARGET_TRADE_STATUS.EXPIRED]: TARGET_TRADE_STATUS_LABELS.EXPIRED,
|
|
62
|
+
// Note: TARGET_TRADE_STATUS.CANCELLED has same value as TRADE_STATUS.CANCELLED
|
|
63
|
+
};
|
|
64
|
+
export const getTradeStatusBadge = (status, size = 'md') => {
|
|
65
|
+
const variant = TRADE_STATUS_MAPPING[status] || 'neutral';
|
|
66
|
+
const badge = createBadge({ variant, size });
|
|
67
|
+
const displayText = TRADE_STATUS_LABELS_MAP[status] || status.charAt(0) + status.slice(1).toLowerCase();
|
|
68
|
+
return {
|
|
69
|
+
...badge,
|
|
70
|
+
displayText,
|
|
71
|
+
ariaLabel: `Trade status: ${displayText}`,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
const WITHDRAWAL_STATUS_MAPPING = {
|
|
75
|
+
[WITHDRAWAL_STATUS.PENDING_REVIEW]: 'warning',
|
|
76
|
+
[WITHDRAWAL_STATUS.APPROVED]: 'success',
|
|
77
|
+
[WITHDRAWAL_STATUS.REJECTED]: 'error',
|
|
78
|
+
[WITHDRAWAL_STATUS.PROCESSING]: 'primary',
|
|
79
|
+
[WITHDRAWAL_STATUS.AWAITING_LIQUIDATION]: 'warning',
|
|
80
|
+
[WITHDRAWAL_STATUS.LIQUIDATION_IN_PROGRESS]: 'primary',
|
|
81
|
+
[WITHDRAWAL_STATUS.COMPLETED]: 'success',
|
|
82
|
+
[WITHDRAWAL_STATUS.CANCELLED]: 'neutral',
|
|
83
|
+
[WITHDRAWAL_STATUS.FAILED]: 'error',
|
|
84
|
+
};
|
|
85
|
+
const WITHDRAWAL_STATUS_LABELS_MAP = {
|
|
86
|
+
[WITHDRAWAL_STATUS.PENDING_REVIEW]: WITHDRAWAL_STATUS_LABELS.PENDING_REVIEW,
|
|
87
|
+
[WITHDRAWAL_STATUS.APPROVED]: WITHDRAWAL_STATUS_LABELS.APPROVED,
|
|
88
|
+
[WITHDRAWAL_STATUS.REJECTED]: WITHDRAWAL_STATUS_LABELS.REJECTED,
|
|
89
|
+
[WITHDRAWAL_STATUS.PROCESSING]: WITHDRAWAL_STATUS_LABELS.PROCESSING,
|
|
90
|
+
[WITHDRAWAL_STATUS.AWAITING_LIQUIDATION]: WITHDRAWAL_STATUS_LABELS.AWAITING_LIQUIDATION,
|
|
91
|
+
[WITHDRAWAL_STATUS.LIQUIDATION_IN_PROGRESS]: WITHDRAWAL_STATUS_LABELS.LIQUIDATION_IN_PROGRESS,
|
|
92
|
+
[WITHDRAWAL_STATUS.COMPLETED]: WITHDRAWAL_STATUS_LABELS.COMPLETED,
|
|
93
|
+
[WITHDRAWAL_STATUS.CANCELLED]: WITHDRAWAL_STATUS_LABELS.CANCELLED,
|
|
94
|
+
[WITHDRAWAL_STATUS.FAILED]: WITHDRAWAL_STATUS_LABELS.FAILED,
|
|
95
|
+
};
|
|
96
|
+
export const getWithdrawalStatusBadge = (status, size = 'md') => {
|
|
97
|
+
const variant = WITHDRAWAL_STATUS_MAPPING[status] || 'neutral';
|
|
98
|
+
const badge = createBadge({ variant, size });
|
|
99
|
+
const displayText = WITHDRAWAL_STATUS_LABELS_MAP[status] || status;
|
|
100
|
+
return {
|
|
101
|
+
...badge,
|
|
102
|
+
displayText,
|
|
103
|
+
ariaLabel: `Withdrawal status: ${displayText}`,
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
const LIQUIDATION_STATUS_MAPPING = {
|
|
107
|
+
[LIQUIDATION_STATUS.PENDING]: 'warning',
|
|
108
|
+
[LIQUIDATION_STATUS.TRADES_CREATED]: 'primary',
|
|
109
|
+
[LIQUIDATION_STATUS.EXECUTED]: 'primary',
|
|
110
|
+
[LIQUIDATION_STATUS.SETTLED]: 'success',
|
|
111
|
+
[LIQUIDATION_STATUS.FAILED]: 'error',
|
|
112
|
+
};
|
|
113
|
+
const LIQUIDATION_STATUS_LABELS_MAP = {
|
|
114
|
+
[LIQUIDATION_STATUS.PENDING]: LIQUIDATION_STATUS_LABELS.PENDING,
|
|
115
|
+
[LIQUIDATION_STATUS.TRADES_CREATED]: LIQUIDATION_STATUS_LABELS.TRADES_CREATED,
|
|
116
|
+
[LIQUIDATION_STATUS.EXECUTED]: LIQUIDATION_STATUS_LABELS.EXECUTED,
|
|
117
|
+
[LIQUIDATION_STATUS.SETTLED]: LIQUIDATION_STATUS_LABELS.SETTLED,
|
|
118
|
+
[LIQUIDATION_STATUS.FAILED]: LIQUIDATION_STATUS_LABELS.FAILED,
|
|
119
|
+
};
|
|
120
|
+
export const getLiquidationStatusBadge = (status, size = 'md') => {
|
|
121
|
+
const variant = LIQUIDATION_STATUS_MAPPING[status] || 'neutral';
|
|
122
|
+
const badge = createBadge({ variant, size });
|
|
123
|
+
const displayText = LIQUIDATION_STATUS_LABELS_MAP[status] || status;
|
|
124
|
+
return {
|
|
125
|
+
...badge,
|
|
126
|
+
displayText,
|
|
127
|
+
ariaLabel: `Liquidation status: ${displayText}`,
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
const TARGET_TRADE_STATUS_MAPPING = {
|
|
131
|
+
[TARGET_TRADE_STATUS.PENDING]: 'warning',
|
|
132
|
+
[TARGET_TRADE_STATUS.APPROVED]: 'success',
|
|
133
|
+
[TARGET_TRADE_STATUS.SUBMITTED]: 'primary',
|
|
134
|
+
[TARGET_TRADE_STATUS.CANCELLED]: 'error',
|
|
135
|
+
[TARGET_TRADE_STATUS.EXPIRED]: 'neutral',
|
|
136
|
+
};
|
|
137
|
+
const TARGET_TRADE_STATUS_LABELS_MAP = {
|
|
138
|
+
[TARGET_TRADE_STATUS.PENDING]: TARGET_TRADE_STATUS_LABELS.PENDING,
|
|
139
|
+
[TARGET_TRADE_STATUS.APPROVED]: TARGET_TRADE_STATUS_LABELS.APPROVED,
|
|
140
|
+
[TARGET_TRADE_STATUS.SUBMITTED]: TARGET_TRADE_STATUS_LABELS.SUBMITTED,
|
|
141
|
+
[TARGET_TRADE_STATUS.CANCELLED]: TARGET_TRADE_STATUS_LABELS.CANCELLED,
|
|
142
|
+
[TARGET_TRADE_STATUS.EXPIRED]: TARGET_TRADE_STATUS_LABELS.EXPIRED,
|
|
143
|
+
};
|
|
144
|
+
export const getTargetTradeStatusBadge = (status, size = 'md') => {
|
|
145
|
+
const variant = TARGET_TRADE_STATUS_MAPPING[status] || 'neutral';
|
|
146
|
+
const badge = createBadge({ variant, size });
|
|
147
|
+
const displayText = TARGET_TRADE_STATUS_LABELS_MAP[status] || status;
|
|
148
|
+
return {
|
|
149
|
+
...badge,
|
|
150
|
+
displayText,
|
|
151
|
+
ariaLabel: `Target trade status: ${displayText}`,
|
|
152
|
+
};
|
|
153
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { BadgeVariant, BadgeSize, BadgeConfig, BadgeStyle, BadgeStyleWithText, } from '@cranberry-money/shared-types';
|
|
2
|
+
export type { TradeStatus, WithdrawalStatus, LiquidationStatus, TargetTradeStatus, } from './badgeSystem';
|
|
3
|
+
export { createBadge, getTradeStatusBadge, getWithdrawalStatusBadge, getLiquidationStatusBadge, getTargetTradeStatusBadge, } from './badgeSystem';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/badge/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAGvC,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cranberry-money/shared-utils",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"description": "Shared utility functions for MyPortfolio platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -48,4 +48,4 @@
|
|
|
48
48
|
"url": "git+https://github.com/your-org/cranberry.git",
|
|
49
49
|
"directory": "packages/shared-utils"
|
|
50
50
|
}
|
|
51
|
-
}
|
|
51
|
+
}
|