@cranberry-money/shared-utils 3.0.3 → 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.
@@ -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"}
@@ -0,0 +1,2 @@
1
+ // Export badge functions
2
+ export { createBadge, getTradeStatusBadge, getWithdrawalStatusBadge, getLiquidationStatusBadge, getTargetTradeStatusBadge, } from './badgeSystem';
@@ -3,4 +3,5 @@
3
3
  */
4
4
  export * from './filters';
5
5
  export * from './text';
6
+ export * from './portfolio';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
@@ -3,3 +3,4 @@
3
3
  */
4
4
  export * from './filters';
5
5
  export * from './text';
6
+ export * from './portfolio';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Portfolio-related helper functions
3
+ */
4
+ /**
5
+ * Calculate total portfolio value
6
+ */
7
+ export declare const calculateTotalValue: (marketValue: number, cashBalance: number) => number;
8
+ /**
9
+ * Calculate market allocation percentage
10
+ */
11
+ export declare const getMarketAllocation: (marketValue: number, totalValue: number) => number;
12
+ /**
13
+ * Calculate cash allocation percentage
14
+ */
15
+ export declare const getCashAllocation: (cashBalance: number, totalValue: number) => number;
16
+ /**
17
+ * Format portfolio value with default currency
18
+ */
19
+ export declare const formatPortfolioValue: (value: number) => string;
20
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../src/helpers/portfolio.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,aAAa,MAAM,EAAE,aAAa,MAAM,KAAG,MAE9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,aAAa,MAAM,EAAE,YAAY,MAAM,KAAG,MAE7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,EAAE,YAAY,MAAM,KAAG,MAE3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAEpD,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Portfolio-related helper functions
3
+ */
4
+ import { formatCurrency } from '../formatters/currency';
5
+ /**
6
+ * Calculate total portfolio value
7
+ */
8
+ export const calculateTotalValue = (marketValue, cashBalance) => {
9
+ return marketValue + cashBalance;
10
+ };
11
+ /**
12
+ * Calculate market allocation percentage
13
+ */
14
+ export const getMarketAllocation = (marketValue, totalValue) => {
15
+ return totalValue > 0 ? (marketValue / totalValue) * 100 : 0;
16
+ };
17
+ /**
18
+ * Calculate cash allocation percentage
19
+ */
20
+ export const getCashAllocation = (cashBalance, totalValue) => {
21
+ return totalValue > 0 ? (cashBalance / totalValue) * 100 : 0;
22
+ };
23
+ /**
24
+ * Format portfolio value with default currency
25
+ */
26
+ export const formatPortfolioValue = (value) => {
27
+ return formatCurrency(value);
28
+ };
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './formatters';
5
5
  export * from './helpers';
6
6
  export * from './portfolio';
7
7
  export * from './validation';
8
+ export * from './badge';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -5,3 +5,4 @@ export * from './formatters';
5
5
  export * from './helpers';
6
6
  export * from './portfolio';
7
7
  export * from './validation';
8
+ export * from './badge';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cranberry-money/shared-utils",
3
- "version": "3.0.3",
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
+ }