@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.
@@ -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
@@ -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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cranberry-money/shared-utils",
3
- "version": "4.4.0",
3
+ "version": "4.6.0",
4
4
  "description": "Shared utility functions for MyPortfolio platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",