@cranberry-money/shared-utils 4.4.0 → 4.6.0
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-status.d.ts +87 -0
- package/dist/badge-status.d.ts.map +1 -0
- package/dist/badge-status.js +170 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/portfolio.d.ts +68 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +87 -0
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Badge Status Utilities - Status-specific badge functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides pre-configured badge functions for common status types
|
|
5
|
+
* in the MyPortfolio platform. It builds on top of the core badge system.
|
|
6
|
+
*/
|
|
7
|
+
import { TRADE_STATUS_EXECUTED, TRADE_STATUS_SETTLED, TRADE_STATUS_CANCELLED, TRADE_STATUS_FAILED, TARGET_TRADE_STATUS_PENDING, TARGET_TRADE_STATUS_APPROVED, TARGET_TRADE_STATUS_SUBMITTED, TARGET_TRADE_STATUS_CANCELLED, TARGET_TRADE_STATUS_EXPIRED, WITHDRAWAL_STATUS_PENDING_REVIEW, WITHDRAWAL_STATUS_APPROVED, WITHDRAWAL_STATUS_REJECTED, WITHDRAWAL_STATUS_PROCESSING, WITHDRAWAL_STATUS_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_COMPLETED, WITHDRAWAL_STATUS_CANCELLED, WITHDRAWAL_STATUS_FAILED, LIQUIDATION_STATUS_PENDING, LIQUIDATION_STATUS_TRADES_CREATED, LIQUIDATION_STATUS_EXECUTED, LIQUIDATION_STATUS_SETTLED, LIQUIDATION_STATUS_FAILED } from '@cranberry-money/shared-constants';
|
|
8
|
+
import type { BadgeSize, BadgeStyle } from './badge';
|
|
9
|
+
/**
|
|
10
|
+
* Extended badge style with display text for status badges
|
|
11
|
+
*/
|
|
12
|
+
export interface StatusBadgeStyle extends BadgeStyle {
|
|
13
|
+
displayText: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Trade status type encompassing regular and target trades
|
|
17
|
+
*/
|
|
18
|
+
export type TradeStatus = typeof TRADE_STATUS_EXECUTED | typeof TRADE_STATUS_SETTLED | typeof TRADE_STATUS_CANCELLED | typeof TRADE_STATUS_FAILED | typeof TARGET_TRADE_STATUS_PENDING | typeof TARGET_TRADE_STATUS_SUBMITTED | typeof TARGET_TRADE_STATUS_EXPIRED;
|
|
19
|
+
/**
|
|
20
|
+
* Withdrawal status type
|
|
21
|
+
*/
|
|
22
|
+
export type WithdrawalStatus = typeof WITHDRAWAL_STATUS_PENDING_REVIEW | typeof WITHDRAWAL_STATUS_APPROVED | typeof WITHDRAWAL_STATUS_REJECTED | typeof WITHDRAWAL_STATUS_PROCESSING | typeof WITHDRAWAL_STATUS_AWAITING_LIQUIDATION | typeof WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS | typeof WITHDRAWAL_STATUS_COMPLETED | typeof WITHDRAWAL_STATUS_CANCELLED | typeof WITHDRAWAL_STATUS_FAILED;
|
|
23
|
+
/**
|
|
24
|
+
* Liquidation status type
|
|
25
|
+
*/
|
|
26
|
+
export type LiquidationStatus = typeof LIQUIDATION_STATUS_PENDING | typeof LIQUIDATION_STATUS_TRADES_CREATED | typeof LIQUIDATION_STATUS_EXECUTED | typeof LIQUIDATION_STATUS_SETTLED | typeof LIQUIDATION_STATUS_FAILED;
|
|
27
|
+
/**
|
|
28
|
+
* Target trade status type
|
|
29
|
+
*/
|
|
30
|
+
export type TargetTradeStatus = typeof TARGET_TRADE_STATUS_PENDING | typeof TARGET_TRADE_STATUS_APPROVED | typeof TARGET_TRADE_STATUS_SUBMITTED | typeof TARGET_TRADE_STATUS_CANCELLED | typeof TARGET_TRADE_STATUS_EXPIRED;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a badge for trade status
|
|
33
|
+
*
|
|
34
|
+
* @param status - Trade status constant
|
|
35
|
+
* @param size - Badge size (default: 'md')
|
|
36
|
+
* @returns Badge style with display text and accessibility attributes
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const badge = getTradeStatusBadge(TRADE_STATUS_SETTLED);
|
|
41
|
+
* // Returns badge with success variant and "Settled" display text
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTradeStatusBadge(status: TradeStatus, size?: BadgeSize): StatusBadgeStyle;
|
|
45
|
+
/**
|
|
46
|
+
* Creates a badge for withdrawal status
|
|
47
|
+
*
|
|
48
|
+
* @param status - Withdrawal status constant
|
|
49
|
+
* @param size - Badge size (default: 'md')
|
|
50
|
+
* @returns Badge style with display text and accessibility attributes
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const badge = getWithdrawalStatusBadge(WITHDRAWAL_STATUS_APPROVED);
|
|
55
|
+
* // Returns badge with success variant and "Approved" display text
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function getWithdrawalStatusBadge(status: WithdrawalStatus, size?: BadgeSize): StatusBadgeStyle;
|
|
59
|
+
/**
|
|
60
|
+
* Creates a badge for liquidation status
|
|
61
|
+
*
|
|
62
|
+
* @param status - Liquidation status constant
|
|
63
|
+
* @param size - Badge size (default: 'md')
|
|
64
|
+
* @returns Badge style with display text and accessibility attributes
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const badge = getLiquidationStatusBadge(LIQUIDATION_STATUS_SETTLED);
|
|
69
|
+
* // Returns badge with success variant and "Settled" display text
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function getLiquidationStatusBadge(status: LiquidationStatus, size?: BadgeSize): StatusBadgeStyle;
|
|
73
|
+
/**
|
|
74
|
+
* Creates a badge for target trade status
|
|
75
|
+
*
|
|
76
|
+
* @param status - Target trade status constant
|
|
77
|
+
* @param size - Badge size (default: 'md')
|
|
78
|
+
* @returns Badge style with display text and accessibility attributes
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const badge = getTargetTradeStatusBadge(TARGET_TRADE_STATUS_PENDING);
|
|
83
|
+
* // Returns badge with warning variant and "Pending" display text
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function getTargetTradeStatusBadge(status: TargetTradeStatus, size?: BadgeSize): StatusBadgeStyle;
|
|
87
|
+
//# sourceMappingURL=badge-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge-status.d.ts","sourceRoot":"","sources":["../src/badge-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EAKnB,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,2BAA2B,EAM3B,gCAAgC,EAChC,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yCAAyC,EACzC,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EAUxB,0BAA0B,EAC1B,iCAAiC,EACjC,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EAM1B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAgB,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,qBAAqB,GAC5B,OAAO,oBAAoB,GAC3B,OAAO,sBAAsB,GAC7B,OAAO,mBAAmB,GAC1B,OAAO,2BAA2B,GAClC,OAAO,6BAA6B,GACpC,OAAO,2BAA2B,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,gCAAgC,GACvC,OAAO,0BAA0B,GACjC,OAAO,0BAA0B,GACjC,OAAO,4BAA4B,GACnC,OAAO,sCAAsC,GAC7C,OAAO,yCAAyC,GAChD,OAAO,2BAA2B,GAClC,OAAO,2BAA2B,GAClC,OAAO,wBAAwB,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,OAAO,0BAA0B,GACjC,OAAO,iCAAiC,GACxC,OAAO,2BAA2B,GAClC,OAAO,0BAA0B,GACjC,OAAO,yBAAyB,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,OAAO,2BAA2B,GAClC,OAAO,4BAA4B,GACnC,OAAO,6BAA6B,GACpC,OAAO,6BAA6B,GACpC,OAAO,2BAA2B,CAAC;AAgFvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,GAAE,SAAgB,GAAG,gBAAgB,CAUjG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,GAAE,SAAgB,GAAG,gBAAgB,CAU3G;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,SAAgB,GAAG,gBAAgB,CAU7G;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,SAAgB,GAAG,gBAAgB,CAU7G"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Badge Status Utilities - Status-specific badge functions
|
|
3
|
+
*
|
|
4
|
+
* This module provides pre-configured badge functions for common status types
|
|
5
|
+
* in the MyPortfolio platform. It builds on top of the core badge system.
|
|
6
|
+
*/
|
|
7
|
+
import { TRADE_STATUS_EXECUTED, TRADE_STATUS_SETTLED, TRADE_STATUS_CANCELLED, TRADE_STATUS_FAILED, TRADE_STATUS_LABEL_EXECUTED, TRADE_STATUS_LABEL_SETTLED, TRADE_STATUS_LABEL_CANCELLED, TRADE_STATUS_LABEL_FAILED, TARGET_TRADE_STATUS_PENDING, TARGET_TRADE_STATUS_APPROVED, TARGET_TRADE_STATUS_SUBMITTED, TARGET_TRADE_STATUS_CANCELLED, TARGET_TRADE_STATUS_EXPIRED, TARGET_TRADE_STATUS_LABEL_PENDING, TARGET_TRADE_STATUS_LABEL_APPROVED, TARGET_TRADE_STATUS_LABEL_SUBMITTED, TARGET_TRADE_STATUS_LABEL_CANCELLED, TARGET_TRADE_STATUS_LABEL_EXPIRED, WITHDRAWAL_STATUS_PENDING_REVIEW, WITHDRAWAL_STATUS_APPROVED, WITHDRAWAL_STATUS_REJECTED, WITHDRAWAL_STATUS_PROCESSING, WITHDRAWAL_STATUS_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_COMPLETED, WITHDRAWAL_STATUS_CANCELLED, WITHDRAWAL_STATUS_FAILED, WITHDRAWAL_STATUS_LABEL_PENDING_REVIEW, WITHDRAWAL_STATUS_LABEL_APPROVED, WITHDRAWAL_STATUS_LABEL_REJECTED, WITHDRAWAL_STATUS_LABEL_PROCESSING, WITHDRAWAL_STATUS_LABEL_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LABEL_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_LABEL_COMPLETED, WITHDRAWAL_STATUS_LABEL_CANCELLED, WITHDRAWAL_STATUS_LABEL_FAILED, LIQUIDATION_STATUS_PENDING, LIQUIDATION_STATUS_TRADES_CREATED, LIQUIDATION_STATUS_EXECUTED, LIQUIDATION_STATUS_SETTLED, LIQUIDATION_STATUS_FAILED, LIQUIDATION_STATUS_LABEL_PENDING, LIQUIDATION_STATUS_LABEL_TRADES_CREATED, LIQUIDATION_STATUS_LABEL_EXECUTED, LIQUIDATION_STATUS_LABEL_SETTLED, LIQUIDATION_STATUS_LABEL_FAILED, } from '@cranberry-money/shared-constants';
|
|
8
|
+
import { createBadge } from './badge';
|
|
9
|
+
// Status to variant mappings
|
|
10
|
+
const TRADE_STATUS_MAPPING = {
|
|
11
|
+
[TRADE_STATUS_EXECUTED]: 'primary',
|
|
12
|
+
[TRADE_STATUS_SETTLED]: 'success',
|
|
13
|
+
[TRADE_STATUS_CANCELLED]: 'error',
|
|
14
|
+
[TRADE_STATUS_FAILED]: 'error',
|
|
15
|
+
[TARGET_TRADE_STATUS_PENDING]: 'warning',
|
|
16
|
+
[TARGET_TRADE_STATUS_SUBMITTED]: 'primary',
|
|
17
|
+
[TARGET_TRADE_STATUS_EXPIRED]: 'neutral',
|
|
18
|
+
};
|
|
19
|
+
const WITHDRAWAL_STATUS_MAPPING = {
|
|
20
|
+
[WITHDRAWAL_STATUS_PENDING_REVIEW]: 'warning',
|
|
21
|
+
[WITHDRAWAL_STATUS_APPROVED]: 'success',
|
|
22
|
+
[WITHDRAWAL_STATUS_REJECTED]: 'error',
|
|
23
|
+
[WITHDRAWAL_STATUS_PROCESSING]: 'primary',
|
|
24
|
+
[WITHDRAWAL_STATUS_AWAITING_LIQUIDATION]: 'warning',
|
|
25
|
+
[WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS]: 'primary',
|
|
26
|
+
[WITHDRAWAL_STATUS_COMPLETED]: 'success',
|
|
27
|
+
[WITHDRAWAL_STATUS_CANCELLED]: 'neutral',
|
|
28
|
+
[WITHDRAWAL_STATUS_FAILED]: 'error',
|
|
29
|
+
};
|
|
30
|
+
const LIQUIDATION_STATUS_MAPPING = {
|
|
31
|
+
[LIQUIDATION_STATUS_PENDING]: 'warning',
|
|
32
|
+
[LIQUIDATION_STATUS_TRADES_CREATED]: 'primary',
|
|
33
|
+
[LIQUIDATION_STATUS_EXECUTED]: 'primary',
|
|
34
|
+
[LIQUIDATION_STATUS_SETTLED]: 'success',
|
|
35
|
+
[LIQUIDATION_STATUS_FAILED]: 'error',
|
|
36
|
+
};
|
|
37
|
+
const TARGET_TRADE_STATUS_MAPPING = {
|
|
38
|
+
[TARGET_TRADE_STATUS_PENDING]: 'warning',
|
|
39
|
+
[TARGET_TRADE_STATUS_APPROVED]: 'success',
|
|
40
|
+
[TARGET_TRADE_STATUS_SUBMITTED]: 'primary',
|
|
41
|
+
[TARGET_TRADE_STATUS_CANCELLED]: 'error',
|
|
42
|
+
[TARGET_TRADE_STATUS_EXPIRED]: 'neutral',
|
|
43
|
+
};
|
|
44
|
+
// Status to label mappings
|
|
45
|
+
const TRADE_STATUS_LABELS = {
|
|
46
|
+
[TRADE_STATUS_EXECUTED]: TRADE_STATUS_LABEL_EXECUTED,
|
|
47
|
+
[TRADE_STATUS_SETTLED]: TRADE_STATUS_LABEL_SETTLED,
|
|
48
|
+
[TRADE_STATUS_CANCELLED]: TRADE_STATUS_LABEL_CANCELLED,
|
|
49
|
+
[TRADE_STATUS_FAILED]: TRADE_STATUS_LABEL_FAILED,
|
|
50
|
+
[TARGET_TRADE_STATUS_PENDING]: TARGET_TRADE_STATUS_LABEL_PENDING,
|
|
51
|
+
[TARGET_TRADE_STATUS_SUBMITTED]: TARGET_TRADE_STATUS_LABEL_SUBMITTED,
|
|
52
|
+
[TARGET_TRADE_STATUS_EXPIRED]: TARGET_TRADE_STATUS_LABEL_EXPIRED,
|
|
53
|
+
};
|
|
54
|
+
const WITHDRAWAL_STATUS_LABELS = {
|
|
55
|
+
[WITHDRAWAL_STATUS_PENDING_REVIEW]: WITHDRAWAL_STATUS_LABEL_PENDING_REVIEW,
|
|
56
|
+
[WITHDRAWAL_STATUS_APPROVED]: WITHDRAWAL_STATUS_LABEL_APPROVED,
|
|
57
|
+
[WITHDRAWAL_STATUS_REJECTED]: WITHDRAWAL_STATUS_LABEL_REJECTED,
|
|
58
|
+
[WITHDRAWAL_STATUS_PROCESSING]: WITHDRAWAL_STATUS_LABEL_PROCESSING,
|
|
59
|
+
[WITHDRAWAL_STATUS_AWAITING_LIQUIDATION]: WITHDRAWAL_STATUS_LABEL_AWAITING_LIQUIDATION,
|
|
60
|
+
[WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS]: WITHDRAWAL_STATUS_LABEL_LIQUIDATION_IN_PROGRESS,
|
|
61
|
+
[WITHDRAWAL_STATUS_COMPLETED]: WITHDRAWAL_STATUS_LABEL_COMPLETED,
|
|
62
|
+
[WITHDRAWAL_STATUS_CANCELLED]: WITHDRAWAL_STATUS_LABEL_CANCELLED,
|
|
63
|
+
[WITHDRAWAL_STATUS_FAILED]: WITHDRAWAL_STATUS_LABEL_FAILED,
|
|
64
|
+
};
|
|
65
|
+
const LIQUIDATION_STATUS_LABELS = {
|
|
66
|
+
[LIQUIDATION_STATUS_PENDING]: LIQUIDATION_STATUS_LABEL_PENDING,
|
|
67
|
+
[LIQUIDATION_STATUS_TRADES_CREATED]: LIQUIDATION_STATUS_LABEL_TRADES_CREATED,
|
|
68
|
+
[LIQUIDATION_STATUS_EXECUTED]: LIQUIDATION_STATUS_LABEL_EXECUTED,
|
|
69
|
+
[LIQUIDATION_STATUS_SETTLED]: LIQUIDATION_STATUS_LABEL_SETTLED,
|
|
70
|
+
[LIQUIDATION_STATUS_FAILED]: LIQUIDATION_STATUS_LABEL_FAILED,
|
|
71
|
+
};
|
|
72
|
+
const TARGET_TRADE_STATUS_LABELS = {
|
|
73
|
+
[TARGET_TRADE_STATUS_PENDING]: TARGET_TRADE_STATUS_LABEL_PENDING,
|
|
74
|
+
[TARGET_TRADE_STATUS_APPROVED]: TARGET_TRADE_STATUS_LABEL_APPROVED,
|
|
75
|
+
[TARGET_TRADE_STATUS_SUBMITTED]: TARGET_TRADE_STATUS_LABEL_SUBMITTED,
|
|
76
|
+
[TARGET_TRADE_STATUS_CANCELLED]: TARGET_TRADE_STATUS_LABEL_CANCELLED,
|
|
77
|
+
[TARGET_TRADE_STATUS_EXPIRED]: TARGET_TRADE_STATUS_LABEL_EXPIRED,
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Creates a badge for trade status
|
|
81
|
+
*
|
|
82
|
+
* @param status - Trade status constant
|
|
83
|
+
* @param size - Badge size (default: 'md')
|
|
84
|
+
* @returns Badge style with display text and accessibility attributes
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const badge = getTradeStatusBadge(TRADE_STATUS_SETTLED);
|
|
89
|
+
* // Returns badge with success variant and "Settled" display text
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function getTradeStatusBadge(status, size = 'md') {
|
|
93
|
+
const variant = TRADE_STATUS_MAPPING[status] || 'neutral';
|
|
94
|
+
const badge = createBadge({ variant, size });
|
|
95
|
+
const displayText = TRADE_STATUS_LABELS[status] || status.charAt(0) + status.slice(1).toLowerCase();
|
|
96
|
+
return {
|
|
97
|
+
...badge,
|
|
98
|
+
displayText,
|
|
99
|
+
ariaLabel: `Trade status: ${displayText}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Creates a badge for withdrawal status
|
|
104
|
+
*
|
|
105
|
+
* @param status - Withdrawal status constant
|
|
106
|
+
* @param size - Badge size (default: 'md')
|
|
107
|
+
* @returns Badge style with display text and accessibility attributes
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const badge = getWithdrawalStatusBadge(WITHDRAWAL_STATUS_APPROVED);
|
|
112
|
+
* // Returns badge with success variant and "Approved" display text
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function getWithdrawalStatusBadge(status, size = 'md') {
|
|
116
|
+
const variant = WITHDRAWAL_STATUS_MAPPING[status] || 'neutral';
|
|
117
|
+
const badge = createBadge({ variant, size });
|
|
118
|
+
const displayText = WITHDRAWAL_STATUS_LABELS[status] || status;
|
|
119
|
+
return {
|
|
120
|
+
...badge,
|
|
121
|
+
displayText,
|
|
122
|
+
ariaLabel: `Withdrawal status: ${displayText}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Creates a badge for liquidation status
|
|
127
|
+
*
|
|
128
|
+
* @param status - Liquidation status constant
|
|
129
|
+
* @param size - Badge size (default: 'md')
|
|
130
|
+
* @returns Badge style with display text and accessibility attributes
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const badge = getLiquidationStatusBadge(LIQUIDATION_STATUS_SETTLED);
|
|
135
|
+
* // Returns badge with success variant and "Settled" display text
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export function getLiquidationStatusBadge(status, size = 'md') {
|
|
139
|
+
const variant = LIQUIDATION_STATUS_MAPPING[status] || 'neutral';
|
|
140
|
+
const badge = createBadge({ variant, size });
|
|
141
|
+
const displayText = LIQUIDATION_STATUS_LABELS[status] || status;
|
|
142
|
+
return {
|
|
143
|
+
...badge,
|
|
144
|
+
displayText,
|
|
145
|
+
ariaLabel: `Liquidation status: ${displayText}`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Creates a badge for target trade status
|
|
150
|
+
*
|
|
151
|
+
* @param status - Target trade status constant
|
|
152
|
+
* @param size - Badge size (default: 'md')
|
|
153
|
+
* @returns Badge style with display text and accessibility attributes
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const badge = getTargetTradeStatusBadge(TARGET_TRADE_STATUS_PENDING);
|
|
158
|
+
* // Returns badge with warning variant and "Pending" display text
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export function getTargetTradeStatusBadge(status, size = 'md') {
|
|
162
|
+
const variant = TARGET_TRADE_STATUS_MAPPING[status] || 'neutral';
|
|
163
|
+
const badge = createBadge({ variant, size });
|
|
164
|
+
const displayText = TARGET_TRADE_STATUS_LABELS[status] || status;
|
|
165
|
+
return {
|
|
166
|
+
...badge,
|
|
167
|
+
displayText,
|
|
168
|
+
ariaLabel: `Target trade status: ${displayText}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,7 @@ export { formatDate, formatShortDate, formatTime, formatDateTime } from './date'
|
|
|
9
9
|
export { NUMBER_FORMAT_OPTIONS_CURRENCY, NUMBER_FORMAT_OPTIONS_CURRENCY_SIGNED, formatCurrency, parseCurrencyInput, formatCurrencyWithCode, formatDefaultCurrency, formatShares, } from './currency';
|
|
10
10
|
export type { BadgeVariant, BadgeSize, BadgeConfig, BadgeStyle } from './badge';
|
|
11
11
|
export { createBadge, BADGE_VARIANTS, BADGE_SIZES } from './badge';
|
|
12
|
+
export type { StatusBadgeStyle, TradeStatus, WithdrawalStatus, LiquidationStatus, TargetTradeStatus, } from './badge-status';
|
|
13
|
+
export { getTradeStatusBadge, getWithdrawalStatusBadge, getLiquidationStatusBadge, getTargetTradeStatusBadge, } from './badge-status';
|
|
14
|
+
export { formatPortfolioValue, calculateTotalValue, getMarketAllocation, getCashAllocation, } from './portfolio';
|
|
12
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGjF,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGjF,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGnE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,3 +11,6 @@ export { formatDate, formatShortDate, formatTime, formatDateTime } from './date'
|
|
|
11
11
|
// Currency formatting utilities
|
|
12
12
|
export { NUMBER_FORMAT_OPTIONS_CURRENCY, NUMBER_FORMAT_OPTIONS_CURRENCY_SIGNED, formatCurrency, parseCurrencyInput, formatCurrencyWithCode, formatDefaultCurrency, formatShares, } from './currency';
|
|
13
13
|
export { createBadge, BADGE_VARIANTS, BADGE_SIZES } from './badge';
|
|
14
|
+
export { getTradeStatusBadge, getWithdrawalStatusBadge, getLiquidationStatusBadge, getTargetTradeStatusBadge, } from './badge-status';
|
|
15
|
+
// Portfolio utilities
|
|
16
|
+
export { formatPortfolioValue, calculateTotalValue, getMarketAllocation, getCashAllocation, } from './portfolio';
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portfolio calculation and formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* This module provides pure functions for portfolio value calculations,
|
|
5
|
+
* allocations, and formatting. All functions handle string or number inputs
|
|
6
|
+
* for flexibility with API responses.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Formats a portfolio value as currency with AUD
|
|
10
|
+
*
|
|
11
|
+
* @param value - Portfolio value as string or number
|
|
12
|
+
* @returns Formatted currency string with AUD symbol
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* formatPortfolioValue(12345.67) // 'A$12,345.67'
|
|
17
|
+
* formatPortfolioValue('12345.67') // 'A$12,345.67'
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatPortfolioValue(value: string | number): string;
|
|
21
|
+
/**
|
|
22
|
+
* Calculates total portfolio value from market value and cash balance
|
|
23
|
+
*
|
|
24
|
+
* @param marketValue - Market value of holdings
|
|
25
|
+
* @param cashBalance - Cash balance in portfolio
|
|
26
|
+
* @returns Total portfolio value as number
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* calculateTotalValue(10000, 5000) // 15000
|
|
31
|
+
* calculateTotalValue('10000', '5000') // 15000
|
|
32
|
+
* calculateTotalValue('10000.50', 5000.25) // 15000.75
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function calculateTotalValue(marketValue: string | number, cashBalance: string | number): number;
|
|
36
|
+
/**
|
|
37
|
+
* Calculates market allocation percentage in portfolio
|
|
38
|
+
*
|
|
39
|
+
* @param marketValue - Market value of holdings
|
|
40
|
+
* @param totalValue - Total portfolio value
|
|
41
|
+
* @returns Market allocation percentage (0-100)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* getMarketAllocation(7500, 10000) // 75
|
|
46
|
+
* getMarketAllocation('7500', '10000') // 75
|
|
47
|
+
* getMarketAllocation(0, 10000) // 0
|
|
48
|
+
* getMarketAllocation(100, 0) // 0 (prevents division by zero)
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function getMarketAllocation(marketValue: string | number, totalValue: string | number): number;
|
|
52
|
+
/**
|
|
53
|
+
* Calculates cash allocation percentage in portfolio
|
|
54
|
+
*
|
|
55
|
+
* @param cashBalance - Cash balance in portfolio
|
|
56
|
+
* @param totalValue - Total portfolio value
|
|
57
|
+
* @returns Cash allocation percentage (0-100)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* getCashAllocation(2500, 10000) // 25
|
|
62
|
+
* getCashAllocation('2500', '10000') // 25
|
|
63
|
+
* getCashAllocation(0, 10000) // 0
|
|
64
|
+
* getCashAllocation(100, 0) // 0 (prevents division by zero)
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function getCashAllocation(cashBalance: string | number, totalValue: string | number): number;
|
|
68
|
+
//# sourceMappingURL=portfolio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../src/portfolio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAMnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAItG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAIrG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAInG"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portfolio calculation and formatting utilities
|
|
3
|
+
*
|
|
4
|
+
* This module provides pure functions for portfolio value calculations,
|
|
5
|
+
* allocations, and formatting. All functions handle string or number inputs
|
|
6
|
+
* for flexibility with API responses.
|
|
7
|
+
*/
|
|
8
|
+
import { LOCALE_AUSTRALIA, DEFAULT_NUMERIC_ZERO, DEFAULT_EMPTY_STRING, CURRENCY_AUD } from '@cranberry-money/shared-constants';
|
|
9
|
+
import { NUMBER_FORMAT_OPTIONS_CURRENCY } from './currency';
|
|
10
|
+
/**
|
|
11
|
+
* Formats a portfolio value as currency with AUD
|
|
12
|
+
*
|
|
13
|
+
* @param value - Portfolio value as string or number
|
|
14
|
+
* @returns Formatted currency string with AUD symbol
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* formatPortfolioValue(12345.67) // 'A$12,345.67'
|
|
19
|
+
* formatPortfolioValue('12345.67') // 'A$12,345.67'
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function formatPortfolioValue(value) {
|
|
23
|
+
const numValue = typeof value === 'string' ? parseFloat(value) : value;
|
|
24
|
+
return new Intl.NumberFormat(LOCALE_AUSTRALIA, {
|
|
25
|
+
...NUMBER_FORMAT_OPTIONS_CURRENCY,
|
|
26
|
+
currency: CURRENCY_AUD,
|
|
27
|
+
}).format(numValue);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Calculates total portfolio value from market value and cash balance
|
|
31
|
+
*
|
|
32
|
+
* @param marketValue - Market value of holdings
|
|
33
|
+
* @param cashBalance - Cash balance in portfolio
|
|
34
|
+
* @returns Total portfolio value as number
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* calculateTotalValue(10000, 5000) // 15000
|
|
39
|
+
* calculateTotalValue('10000', '5000') // 15000
|
|
40
|
+
* calculateTotalValue('10000.50', 5000.25) // 15000.75
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function calculateTotalValue(marketValue, cashBalance) {
|
|
44
|
+
const market = typeof marketValue === 'string' ? parseFloat(marketValue || DEFAULT_EMPTY_STRING) : marketValue;
|
|
45
|
+
const cash = typeof cashBalance === 'string' ? parseFloat(cashBalance || DEFAULT_EMPTY_STRING) : cashBalance;
|
|
46
|
+
return market + cash;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculates market allocation percentage in portfolio
|
|
50
|
+
*
|
|
51
|
+
* @param marketValue - Market value of holdings
|
|
52
|
+
* @param totalValue - Total portfolio value
|
|
53
|
+
* @returns Market allocation percentage (0-100)
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* getMarketAllocation(7500, 10000) // 75
|
|
58
|
+
* getMarketAllocation('7500', '10000') // 75
|
|
59
|
+
* getMarketAllocation(0, 10000) // 0
|
|
60
|
+
* getMarketAllocation(100, 0) // 0 (prevents division by zero)
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function getMarketAllocation(marketValue, totalValue) {
|
|
64
|
+
const market = typeof marketValue === 'string' ? parseFloat(marketValue || DEFAULT_EMPTY_STRING) : marketValue;
|
|
65
|
+
const total = typeof totalValue === 'string' ? parseFloat(totalValue || DEFAULT_EMPTY_STRING) : totalValue;
|
|
66
|
+
return total > DEFAULT_NUMERIC_ZERO ? (market / total) * 100 : DEFAULT_NUMERIC_ZERO;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Calculates cash allocation percentage in portfolio
|
|
70
|
+
*
|
|
71
|
+
* @param cashBalance - Cash balance in portfolio
|
|
72
|
+
* @param totalValue - Total portfolio value
|
|
73
|
+
* @returns Cash allocation percentage (0-100)
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* getCashAllocation(2500, 10000) // 25
|
|
78
|
+
* getCashAllocation('2500', '10000') // 25
|
|
79
|
+
* getCashAllocation(0, 10000) // 0
|
|
80
|
+
* getCashAllocation(100, 0) // 0 (prevents division by zero)
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function getCashAllocation(cashBalance, totalValue) {
|
|
84
|
+
const cash = typeof cashBalance === 'string' ? parseFloat(cashBalance || DEFAULT_EMPTY_STRING) : cashBalance;
|
|
85
|
+
const total = typeof totalValue === 'string' ? parseFloat(totalValue || DEFAULT_EMPTY_STRING) : totalValue;
|
|
86
|
+
return total > DEFAULT_NUMERIC_ZERO ? (cash / total) * 100 : DEFAULT_NUMERIC_ZERO;
|
|
87
|
+
}
|