@happyvertical/smrt-sales 0.39.2
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/AGENTS.md +87 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/chunks/__smrt-register__-kWdT7LOt.js +6 -0
- package/dist/chunks/__smrt-register__-kWdT7LOt.js.map +1 -0
- package/dist/chunks/commissions-BCxqOKVM.js +2181 -0
- package/dist/chunks/commissions-BCxqOKVM.js.map +1 -0
- package/dist/chunks/crm-DwEz7E2r.js +1428 -0
- package/dist/chunks/crm-DwEz7E2r.js.map +1 -0
- package/dist/chunks/referrals-BY47p70T.js +2880 -0
- package/dist/chunks/referrals-BY47p70T.js.map +1 -0
- package/dist/commissions/collections/CommissionAdjustmentCollection.d.ts +26 -0
- package/dist/commissions/collections/CommissionAdjustmentCollection.d.ts.map +1 -0
- package/dist/commissions/collections/CommissionCollection.d.ts +43 -0
- package/dist/commissions/collections/CommissionCollection.d.ts.map +1 -0
- package/dist/commissions/collections/CommissionPayoutCollection.d.ts +19 -0
- package/dist/commissions/collections/CommissionPayoutCollection.d.ts.map +1 -0
- package/dist/commissions/collections/CommissionPlanCollection.d.ts +46 -0
- package/dist/commissions/collections/CommissionPlanCollection.d.ts.map +1 -0
- package/dist/commissions/collections/EarnerCollection.d.ts +14 -0
- package/dist/commissions/collections/EarnerCollection.d.ts.map +1 -0
- package/dist/commissions/collections/EarningEventCollection.d.ts +27 -0
- package/dist/commissions/collections/EarningEventCollection.d.ts.map +1 -0
- package/dist/commissions/collections/index.d.ts +11 -0
- package/dist/commissions/collections/index.d.ts.map +1 -0
- package/dist/commissions/index.d.ts +20 -0
- package/dist/commissions/index.d.ts.map +1 -0
- package/dist/commissions/models/Commission.d.ts +150 -0
- package/dist/commissions/models/Commission.d.ts.map +1 -0
- package/dist/commissions/models/CommissionAdjustment.d.ts +62 -0
- package/dist/commissions/models/CommissionAdjustment.d.ts.map +1 -0
- package/dist/commissions/models/CommissionPayout.d.ts +119 -0
- package/dist/commissions/models/CommissionPayout.d.ts.map +1 -0
- package/dist/commissions/models/CommissionPlan.d.ts +117 -0
- package/dist/commissions/models/CommissionPlan.d.ts.map +1 -0
- package/dist/commissions/models/Earner.d.ts +49 -0
- package/dist/commissions/models/Earner.d.ts.map +1 -0
- package/dist/commissions/models/EarningEvent.d.ts +89 -0
- package/dist/commissions/models/EarningEvent.d.ts.map +1 -0
- package/dist/commissions/models/index.d.ts +11 -0
- package/dist/commissions/models/index.d.ts.map +1 -0
- package/dist/commissions/money.d.ts +42 -0
- package/dist/commissions/money.d.ts.map +1 -0
- package/dist/commissions/services/CommissionBalanceService.d.ts +14 -0
- package/dist/commissions/services/CommissionBalanceService.d.ts.map +1 -0
- package/dist/commissions/services/CommissionCalculationService.d.ts +142 -0
- package/dist/commissions/services/CommissionCalculationService.d.ts.map +1 -0
- package/dist/commissions/services/CommissionPayoutService.d.ts +134 -0
- package/dist/commissions/services/CommissionPayoutService.d.ts.map +1 -0
- package/dist/commissions/services/CommissionSettlementService.d.ts +42 -0
- package/dist/commissions/services/CommissionSettlementService.d.ts.map +1 -0
- package/dist/commissions/services/index.d.ts +9 -0
- package/dist/commissions/services/index.d.ts.map +1 -0
- package/dist/commissions/types.d.ts +243 -0
- package/dist/commissions/types.d.ts.map +1 -0
- package/dist/commissions.d.ts +2 -0
- package/dist/commissions.d.ts.map +1 -0
- package/dist/commissions.js +3 -0
- package/dist/crm/collections/LeadCollection.d.ts +79 -0
- package/dist/crm/collections/LeadCollection.d.ts.map +1 -0
- package/dist/crm/collections/OpportunityCollection.d.ts +42 -0
- package/dist/crm/collections/OpportunityCollection.d.ts.map +1 -0
- package/dist/crm/collections/OpportunityConversionCollection.d.ts +26 -0
- package/dist/crm/collections/OpportunityConversionCollection.d.ts.map +1 -0
- package/dist/crm/collections/PipelineDefinitionCollection.d.ts +46 -0
- package/dist/crm/collections/PipelineDefinitionCollection.d.ts.map +1 -0
- package/dist/crm/collections/PipelineStageCollection.d.ts +22 -0
- package/dist/crm/collections/PipelineStageCollection.d.ts.map +1 -0
- package/dist/crm/collections/SalesActivityCollection.d.ts +24 -0
- package/dist/crm/collections/SalesActivityCollection.d.ts.map +1 -0
- package/dist/crm/collections/SalesRepresentativeCollection.d.ts +19 -0
- package/dist/crm/collections/SalesRepresentativeCollection.d.ts.map +1 -0
- package/dist/crm/index.d.ts +27 -0
- package/dist/crm/index.d.ts.map +1 -0
- package/dist/crm/models/Lead.d.ts +135 -0
- package/dist/crm/models/Lead.d.ts.map +1 -0
- package/dist/crm/models/Opportunity.d.ts +111 -0
- package/dist/crm/models/Opportunity.d.ts.map +1 -0
- package/dist/crm/models/OpportunityConversion.d.ts +66 -0
- package/dist/crm/models/OpportunityConversion.d.ts.map +1 -0
- package/dist/crm/models/PipelineDefinition.d.ts +58 -0
- package/dist/crm/models/PipelineDefinition.d.ts.map +1 -0
- package/dist/crm/models/PipelineStage.d.ts +66 -0
- package/dist/crm/models/PipelineStage.d.ts.map +1 -0
- package/dist/crm/models/SalesActivity.d.ts +76 -0
- package/dist/crm/models/SalesActivity.d.ts.map +1 -0
- package/dist/crm/models/SalesRepresentative.d.ts +60 -0
- package/dist/crm/models/SalesRepresentative.d.ts.map +1 -0
- package/dist/crm/types.d.ts +228 -0
- package/dist/crm/types.d.ts.map +1 -0
- package/dist/crm.d.ts +2 -0
- package/dist/crm.d.ts.map +1 -0
- package/dist/crm.js +3 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/manifest.json +9340 -0
- package/dist/referrals/collections/AttributionExceptionCollection.d.ts +17 -0
- package/dist/referrals/collections/AttributionExceptionCollection.d.ts.map +1 -0
- package/dist/referrals/collections/AttributionPolicyCollection.d.ts +50 -0
- package/dist/referrals/collections/AttributionPolicyCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralAgreementCollection.d.ts +48 -0
- package/dist/referrals/collections/ReferralAgreementCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralCollection.d.ts +25 -0
- package/dist/referrals/collections/ReferralCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralLinkCollection.d.ts +96 -0
- package/dist/referrals/collections/ReferralLinkCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralProgramCollection.d.ts +18 -0
- package/dist/referrals/collections/ReferralProgramCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralTermSnapshotCollection.d.ts +13 -0
- package/dist/referrals/collections/ReferralTermSnapshotCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferralTouchCollection.d.ts +30 -0
- package/dist/referrals/collections/ReferralTouchCollection.d.ts.map +1 -0
- package/dist/referrals/collections/ReferrerCollection.d.ts +17 -0
- package/dist/referrals/collections/ReferrerCollection.d.ts.map +1 -0
- package/dist/referrals/index.d.ts +38 -0
- package/dist/referrals/index.d.ts.map +1 -0
- package/dist/referrals/models/AttributionException.d.ts +85 -0
- package/dist/referrals/models/AttributionException.d.ts.map +1 -0
- package/dist/referrals/models/AttributionPolicy.d.ts +128 -0
- package/dist/referrals/models/AttributionPolicy.d.ts.map +1 -0
- package/dist/referrals/models/Referral.d.ts +112 -0
- package/dist/referrals/models/Referral.d.ts.map +1 -0
- package/dist/referrals/models/ReferralAgreement.d.ts +125 -0
- package/dist/referrals/models/ReferralAgreement.d.ts.map +1 -0
- package/dist/referrals/models/ReferralLink.d.ts +71 -0
- package/dist/referrals/models/ReferralLink.d.ts.map +1 -0
- package/dist/referrals/models/ReferralProgram.d.ts +57 -0
- package/dist/referrals/models/ReferralProgram.d.ts.map +1 -0
- package/dist/referrals/models/ReferralTermSnapshot.d.ts +61 -0
- package/dist/referrals/models/ReferralTermSnapshot.d.ts.map +1 -0
- package/dist/referrals/models/ReferralTouch.d.ts +55 -0
- package/dist/referrals/models/ReferralTouch.d.ts.map +1 -0
- package/dist/referrals/models/Referrer.d.ts +69 -0
- package/dist/referrals/models/Referrer.d.ts.map +1 -0
- package/dist/referrals/services/AttributionService.d.ts +248 -0
- package/dist/referrals/services/AttributionService.d.ts.map +1 -0
- package/dist/referrals/services/ReferralCommissionService.d.ts +91 -0
- package/dist/referrals/services/ReferralCommissionService.d.ts.map +1 -0
- package/dist/referrals/services/ReferralQualificationService.d.ts +135 -0
- package/dist/referrals/services/ReferralQualificationService.d.ts.map +1 -0
- package/dist/referrals/types.d.ts +226 -0
- package/dist/referrals/types.d.ts.map +1 -0
- package/dist/referrals.d.ts +2 -0
- package/dist/referrals.d.ts.map +1 -0
- package/dist/referrals.js +3 -0
- package/dist/smrt-knowledge.json +5501 -0
- package/dist/svelte/__tests__/format.test.js +68 -0
- package/dist/svelte/__tests__/types.test.js +349 -0
- package/dist/svelte/components/AttributionConflictQueue.svelte +361 -0
- package/dist/svelte/components/AttributionConflictQueue.svelte.d.ts +15 -0
- package/dist/svelte/components/AttributionConflictQueue.svelte.d.ts.map +1 -0
- package/dist/svelte/components/CommissionBreakdown.svelte +251 -0
- package/dist/svelte/components/CommissionBreakdown.svelte.d.ts +11 -0
- package/dist/svelte/components/CommissionBreakdown.svelte.d.ts.map +1 -0
- package/dist/svelte/components/CommissionExpenseSummary.svelte +186 -0
- package/dist/svelte/components/CommissionExpenseSummary.svelte.d.ts +13 -0
- package/dist/svelte/components/CommissionExpenseSummary.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ExecutedAgreementsList.svelte +136 -0
- package/dist/svelte/components/ExecutedAgreementsList.svelte.d.ts +11 -0
- package/dist/svelte/components/ExecutedAgreementsList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/LeadList.svelte +224 -0
- package/dist/svelte/components/LeadList.svelte.d.ts +19 -0
- package/dist/svelte/components/LeadList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/OpportunityBoard.svelte +230 -0
- package/dist/svelte/components/OpportunityBoard.svelte.d.ts +17 -0
- package/dist/svelte/components/OpportunityBoard.svelte.d.ts.map +1 -0
- package/dist/svelte/components/OpportunityDetail.svelte +472 -0
- package/dist/svelte/components/OpportunityDetail.svelte.d.ts +27 -0
- package/dist/svelte/components/OpportunityDetail.svelte.d.ts.map +1 -0
- package/dist/svelte/components/PayoutBatchReview.svelte +285 -0
- package/dist/svelte/components/PayoutBatchReview.svelte.d.ts +21 -0
- package/dist/svelte/components/PayoutBatchReview.svelte.d.ts.map +1 -0
- package/dist/svelte/components/PayoutHistoryList.svelte +245 -0
- package/dist/svelte/components/PayoutHistoryList.svelte.d.ts +11 -0
- package/dist/svelte/components/PayoutHistoryList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ReferralLinkManager.svelte +216 -0
- package/dist/svelte/components/ReferralLinkManager.svelte.d.ts +17 -0
- package/dist/svelte/components/ReferralLinkManager.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ReferralStatusList.svelte +118 -0
- package/dist/svelte/components/ReferralStatusList.svelte.d.ts +11 -0
- package/dist/svelte/components/ReferralStatusList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ReferrerEarningsSummary.svelte +106 -0
- package/dist/svelte/components/ReferrerEarningsSummary.svelte.d.ts +11 -0
- package/dist/svelte/components/ReferrerEarningsSummary.svelte.d.ts.map +1 -0
- package/dist/svelte/components/SalesDashboard.svelte +192 -0
- package/dist/svelte/components/SalesDashboard.svelte.d.ts +29 -0
- package/dist/svelte/components/SalesDashboard.svelte.d.ts.map +1 -0
- package/dist/svelte/format.d.ts +46 -0
- package/dist/svelte/format.d.ts.map +1 -0
- package/dist/svelte/format.js +75 -0
- package/dist/svelte/index.d.ts +50 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +37 -0
- package/dist/svelte/types.d.ts +422 -0
- package/dist/svelte/types.d.ts.map +1 -0
- package/dist/svelte/types.js +376 -0
- package/package.json +89 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SalesDashboard — CRM composition surface (#1924).
|
|
3
|
+
*
|
|
4
|
+
* Summary tiles (open opportunity count, open pipeline value per stage, win
|
|
5
|
+
* rate) computed from props via the exported pure helpers in `types.ts`, plus
|
|
6
|
+
* snippet props to embed the board and list surfaces underneath. Multi-currency
|
|
7
|
+
* pipelines render one total line per currency — amounts are never summed
|
|
8
|
+
* across currencies.
|
|
9
|
+
*/
|
|
10
|
+
import type { Snippet } from 'svelte';
|
|
11
|
+
import type { OpportunityCardView, PipelineStageView } from '../types.js';
|
|
12
|
+
export interface Props {
|
|
13
|
+
/** All opportunities in scope (open and closed — closed feed the win rate). */
|
|
14
|
+
opportunities?: OpportunityCardView[];
|
|
15
|
+
/** Pipeline stages, in order (for the per-stage value breakdown). */
|
|
16
|
+
stages?: PipelineStageView[];
|
|
17
|
+
/** BCP 47 locale for money/percent formatting. */
|
|
18
|
+
locale?: string;
|
|
19
|
+
/** Embedded pipeline board (e.g. an `OpportunityBoard`). */
|
|
20
|
+
board?: Snippet;
|
|
21
|
+
/** Embedded lead/opportunity list (e.g. a `LeadList`). */
|
|
22
|
+
list?: Snippet;
|
|
23
|
+
/** Additional embedded content rendered last. */
|
|
24
|
+
children?: Snippet;
|
|
25
|
+
}
|
|
26
|
+
declare const SalesDashboard: import("svelte").Component<Props, {}, "">;
|
|
27
|
+
type SalesDashboard = ReturnType<typeof SalesDashboard>;
|
|
28
|
+
export default SalesDashboard;
|
|
29
|
+
//# sourceMappingURL=SalesDashboard.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SalesDashboard.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/SalesDashboard.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAS1E,MAAM,WAAW,KAAK;IACpB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,qEAAqE;IACrE,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwFD,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render-time formatting helpers for the sales Svelte surfaces.
|
|
3
|
+
*
|
|
4
|
+
* All monetary values across `@happyvertical/smrt-sales` are integer cents
|
|
5
|
+
* (`*Cents` fields); these helpers convert to display strings at the render
|
|
6
|
+
* boundary only — view models keep the raw cents. Every helper is pure and
|
|
7
|
+
* locale-parameterised so it stays deterministic under test.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
/** Placeholder rendered for absent/unparseable values. */
|
|
12
|
+
export declare const EMPTY_VALUE_PLACEHOLDER = "\u2014";
|
|
13
|
+
/**
|
|
14
|
+
* Format integer cents as a localized currency string in major units.
|
|
15
|
+
*
|
|
16
|
+
* Negative-safe (clawbacks/adjustments render as negative amounts) and
|
|
17
|
+
* tolerant of accidental float inputs (rounded to whole cents first,
|
|
18
|
+
* half-away-from-zero — the module's `roundCents()` contract). Unknown
|
|
19
|
+
* currency codes fall back to `"<major-units> <code>"` instead of throwing.
|
|
20
|
+
*
|
|
21
|
+
* @param amountCents - Amount in integer cents (may be negative).
|
|
22
|
+
* @param currency - ISO 4217 currency code, e.g. `'USD'`.
|
|
23
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatCents(amountCents: number, currency: string, locale?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format a date-ish value as a localized medium date (e.g. `Mar 5, 2026`).
|
|
28
|
+
*
|
|
29
|
+
* `null`/`undefined`/empty/unparseable inputs render the shared
|
|
30
|
+
* {@link EMPTY_VALUE_PLACEHOLDER} so optional lifecycle timestamps
|
|
31
|
+
* (`qualifiedAt`, `paidAt`, …) can be passed straight through.
|
|
32
|
+
*
|
|
33
|
+
* @param d - A `Date`, an ISO-8601 string, or `null`/`undefined`.
|
|
34
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatDate(d: Date | string | null | undefined, locale?: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format a 0–1 fraction as a localized percentage with at most one decimal
|
|
39
|
+
* (e.g. `0.5` → `50%`, `0.333` → `33.3%`). Used for credit fractions, split
|
|
40
|
+
* shares, plan rates, and win rates.
|
|
41
|
+
*
|
|
42
|
+
* @param fraction - Fraction in the 0–1 range (values outside still format).
|
|
43
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatPercent(fraction: number, locale?: string): string;
|
|
46
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/svelte/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,WAAM,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAcR;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMvE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render-time formatting helpers for the sales Svelte surfaces.
|
|
3
|
+
*
|
|
4
|
+
* All monetary values across `@happyvertical/smrt-sales` are integer cents
|
|
5
|
+
* (`*Cents` fields); these helpers convert to display strings at the render
|
|
6
|
+
* boundary only — view models keep the raw cents. Every helper is pure and
|
|
7
|
+
* locale-parameterised so it stays deterministic under test.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
/** Placeholder rendered for absent/unparseable values. */
|
|
12
|
+
export const EMPTY_VALUE_PLACEHOLDER = '—';
|
|
13
|
+
/**
|
|
14
|
+
* Format integer cents as a localized currency string in major units.
|
|
15
|
+
*
|
|
16
|
+
* Negative-safe (clawbacks/adjustments render as negative amounts) and
|
|
17
|
+
* tolerant of accidental float inputs (rounded to whole cents first,
|
|
18
|
+
* half-away-from-zero — the module's `roundCents()` contract). Unknown
|
|
19
|
+
* currency codes fall back to `"<major-units> <code>"` instead of throwing.
|
|
20
|
+
*
|
|
21
|
+
* @param amountCents - Amount in integer cents (may be negative).
|
|
22
|
+
* @param currency - ISO 4217 currency code, e.g. `'USD'`.
|
|
23
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
24
|
+
*/
|
|
25
|
+
export function formatCents(amountCents, currency, locale) {
|
|
26
|
+
if (!Number.isFinite(amountCents))
|
|
27
|
+
return EMPTY_VALUE_PLACEHOLDER;
|
|
28
|
+
const sign = amountCents < 0 ? -1 : 1;
|
|
29
|
+
const wholeCents = sign * Math.round(Math.abs(amountCents));
|
|
30
|
+
const major = wholeCents / 100;
|
|
31
|
+
try {
|
|
32
|
+
return new Intl.NumberFormat(locale, {
|
|
33
|
+
style: 'currency',
|
|
34
|
+
currency,
|
|
35
|
+
}).format(major);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Unknown/invalid currency code — keep the surface rendering.
|
|
39
|
+
return `${major.toFixed(2)} ${currency}`.trim();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Format a date-ish value as a localized medium date (e.g. `Mar 5, 2026`).
|
|
44
|
+
*
|
|
45
|
+
* `null`/`undefined`/empty/unparseable inputs render the shared
|
|
46
|
+
* {@link EMPTY_VALUE_PLACEHOLDER} so optional lifecycle timestamps
|
|
47
|
+
* (`qualifiedAt`, `paidAt`, …) can be passed straight through.
|
|
48
|
+
*
|
|
49
|
+
* @param d - A `Date`, an ISO-8601 string, or `null`/`undefined`.
|
|
50
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
51
|
+
*/
|
|
52
|
+
export function formatDate(d, locale) {
|
|
53
|
+
if (d == null || d === '')
|
|
54
|
+
return EMPTY_VALUE_PLACEHOLDER;
|
|
55
|
+
const date = d instanceof Date ? d : new Date(d);
|
|
56
|
+
if (Number.isNaN(date.getTime()))
|
|
57
|
+
return EMPTY_VALUE_PLACEHOLDER;
|
|
58
|
+
return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Format a 0–1 fraction as a localized percentage with at most one decimal
|
|
62
|
+
* (e.g. `0.5` → `50%`, `0.333` → `33.3%`). Used for credit fractions, split
|
|
63
|
+
* shares, plan rates, and win rates.
|
|
64
|
+
*
|
|
65
|
+
* @param fraction - Fraction in the 0–1 range (values outside still format).
|
|
66
|
+
* @param locale - BCP 47 locale; defaults to the runtime locale.
|
|
67
|
+
*/
|
|
68
|
+
export function formatPercent(fraction, locale) {
|
|
69
|
+
if (!Number.isFinite(fraction))
|
|
70
|
+
return EMPTY_VALUE_PLACEHOLDER;
|
|
71
|
+
return new Intl.NumberFormat(locale, {
|
|
72
|
+
style: 'percent',
|
|
73
|
+
maximumFractionDigits: 1,
|
|
74
|
+
}).format(fraction);
|
|
75
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@happyvertical/smrt-sales/svelte` — reusable sales surfaces
|
|
3
|
+
* (#1924, #1931, #1933).
|
|
4
|
+
*
|
|
5
|
+
* Props-driven, presentational Svelte 5 components: the CRM dashboard/list/
|
|
6
|
+
* board/detail set, the referrer portal (share links, referral status,
|
|
7
|
+
* earnings explanation, payout history, executed agreements), and the
|
|
8
|
+
* operator surfaces (attribution conflict queue, payout batch review, and the
|
|
9
|
+
* commission-expense summary kept separate from client invoices).
|
|
10
|
+
*
|
|
11
|
+
* No component fetches data or imports model classes — hosts map rows onto
|
|
12
|
+
* the exported view-model interfaces and wire the action callbacks. Monetary
|
|
13
|
+
* props stay integer cents; `format.ts` converts at render time. Everything
|
|
14
|
+
* works without `@happyvertical/smrt-svelte`'s `<Provider>` (only Provider-free
|
|
15
|
+
* `@happyvertical/smrt-ui` primitives are used).
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
import type { ComponentProps } from 'svelte';
|
|
20
|
+
import AttributionConflictQueue from './components/AttributionConflictQueue.svelte';
|
|
21
|
+
import CommissionBreakdown from './components/CommissionBreakdown.svelte';
|
|
22
|
+
import CommissionExpenseSummary from './components/CommissionExpenseSummary.svelte';
|
|
23
|
+
import ExecutedAgreementsList from './components/ExecutedAgreementsList.svelte';
|
|
24
|
+
import LeadList from './components/LeadList.svelte';
|
|
25
|
+
import OpportunityBoard from './components/OpportunityBoard.svelte';
|
|
26
|
+
import OpportunityDetail from './components/OpportunityDetail.svelte';
|
|
27
|
+
import PayoutBatchReview from './components/PayoutBatchReview.svelte';
|
|
28
|
+
import PayoutHistoryList from './components/PayoutHistoryList.svelte';
|
|
29
|
+
import ReferralLinkManager from './components/ReferralLinkManager.svelte';
|
|
30
|
+
import ReferralStatusList from './components/ReferralStatusList.svelte';
|
|
31
|
+
import ReferrerEarningsSummary from './components/ReferrerEarningsSummary.svelte';
|
|
32
|
+
import SalesDashboard from './components/SalesDashboard.svelte';
|
|
33
|
+
export { AttributionConflictQueue, CommissionBreakdown, CommissionExpenseSummary, ExecutedAgreementsList, LeadList, OpportunityBoard, OpportunityDetail, PayoutBatchReview, PayoutHistoryList, ReferralLinkManager, ReferralStatusList, ReferrerEarningsSummary, SalesDashboard, };
|
|
34
|
+
export type AttributionConflictQueueProps = ComponentProps<typeof AttributionConflictQueue>;
|
|
35
|
+
export type CommissionBreakdownProps = ComponentProps<typeof CommissionBreakdown>;
|
|
36
|
+
export type CommissionExpenseSummaryProps = ComponentProps<typeof CommissionExpenseSummary>;
|
|
37
|
+
export type ExecutedAgreementsListProps = ComponentProps<typeof ExecutedAgreementsList>;
|
|
38
|
+
export type LeadListProps = ComponentProps<typeof LeadList>;
|
|
39
|
+
export type OpportunityBoardProps = ComponentProps<typeof OpportunityBoard>;
|
|
40
|
+
export type OpportunityDetailProps = ComponentProps<typeof OpportunityDetail>;
|
|
41
|
+
export type PayoutBatchReviewProps = ComponentProps<typeof PayoutBatchReview>;
|
|
42
|
+
export type PayoutHistoryListProps = ComponentProps<typeof PayoutHistoryList>;
|
|
43
|
+
export type ReferralLinkManagerProps = ComponentProps<typeof ReferralLinkManager>;
|
|
44
|
+
export type ReferralStatusListProps = ComponentProps<typeof ReferralStatusList>;
|
|
45
|
+
export type ReferrerEarningsSummaryProps = ComponentProps<typeof ReferrerEarningsSummary>;
|
|
46
|
+
export type SalesDashboardProps = ComponentProps<typeof SalesDashboard>;
|
|
47
|
+
export { EMPTY_VALUE_PLACEHOLDER, formatCents, formatDate, formatPercent, } from './format.js';
|
|
48
|
+
export type { AgreementVersionView, AttributionAward, AttributionCandidateView, AttributionExceptionView, AwardValidation, BoardColumn, ClosedOpportunityOutcome, CommissionAdjustmentView, CommissionExpenseRowView, CommissionExpenseTotals, CommissionFormulaParts, CommissionRowView, CommissionTraceView, ConversionLinkView, CreateReferralLinkDraft, CurrencyAmount, DateInput, EarnerBalance, LeadListItemView, NextActionView, OpportunityCardView, OpportunityDetailView, PayoutActions, PayoutBatchReviewItemView, PayoutTimelineStep, PayoutView, PipelineStageView, RecordActivityDraft, ReferralLinkView, ReferralStatusView, SalesActivityView, SalesRepOptionView, StagePipelineSummary, StatusBadgeVariant, } from './types.js';
|
|
49
|
+
export { AWARD_FRACTION_TOLERANCE, adjacentStageIds, agreementStatusBadgeVariant, buildShareUrl, canQualifyLead, commissionStatusBadgeVariant, equalSplitAwards, formatCommissionFormula, formatPlanRef, groupOpportunitiesByStage, isHttpUrl, isOverdue, leadStatusBadgeVariant, openOpportunityCount, openPipelineTotals, opportunityStatusBadgeVariant, payoutActionsFor, payoutStatusBadgeVariant, payoutStatusTimeline, pipelineValueByStage, referralLinkStatusBadgeVariant, referralStatusBadgeVariant, sumExpenseRowsByCurrency, uniqueCandidateReferrerIds, validateAwards, winRate, } from './types.js';
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@happyvertical/smrt-sales/svelte` — reusable sales surfaces
|
|
3
|
+
* (#1924, #1931, #1933).
|
|
4
|
+
*
|
|
5
|
+
* Props-driven, presentational Svelte 5 components: the CRM dashboard/list/
|
|
6
|
+
* board/detail set, the referrer portal (share links, referral status,
|
|
7
|
+
* earnings explanation, payout history, executed agreements), and the
|
|
8
|
+
* operator surfaces (attribution conflict queue, payout batch review, and the
|
|
9
|
+
* commission-expense summary kept separate from client invoices).
|
|
10
|
+
*
|
|
11
|
+
* No component fetches data or imports model classes — hosts map rows onto
|
|
12
|
+
* the exported view-model interfaces and wire the action callbacks. Monetary
|
|
13
|
+
* props stay integer cents; `format.ts` converts at render time. Everything
|
|
14
|
+
* works without `@happyvertical/smrt-svelte`'s `<Provider>` (only Provider-free
|
|
15
|
+
* `@happyvertical/smrt-ui` primitives are used).
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
import AttributionConflictQueue from './components/AttributionConflictQueue.svelte';
|
|
20
|
+
import CommissionBreakdown from './components/CommissionBreakdown.svelte';
|
|
21
|
+
import CommissionExpenseSummary from './components/CommissionExpenseSummary.svelte';
|
|
22
|
+
import ExecutedAgreementsList from './components/ExecutedAgreementsList.svelte';
|
|
23
|
+
import LeadList from './components/LeadList.svelte';
|
|
24
|
+
import OpportunityBoard from './components/OpportunityBoard.svelte';
|
|
25
|
+
import OpportunityDetail from './components/OpportunityDetail.svelte';
|
|
26
|
+
import PayoutBatchReview from './components/PayoutBatchReview.svelte';
|
|
27
|
+
import PayoutHistoryList from './components/PayoutHistoryList.svelte';
|
|
28
|
+
import ReferralLinkManager from './components/ReferralLinkManager.svelte';
|
|
29
|
+
import ReferralStatusList from './components/ReferralStatusList.svelte';
|
|
30
|
+
import ReferrerEarningsSummary from './components/ReferrerEarningsSummary.svelte';
|
|
31
|
+
import SalesDashboard from './components/SalesDashboard.svelte';
|
|
32
|
+
// Components
|
|
33
|
+
export { AttributionConflictQueue, CommissionBreakdown, CommissionExpenseSummary, ExecutedAgreementsList, LeadList, OpportunityBoard, OpportunityDetail, PayoutBatchReview, PayoutHistoryList, ReferralLinkManager, ReferralStatusList, ReferrerEarningsSummary, SalesDashboard, };
|
|
34
|
+
// Formatting helpers
|
|
35
|
+
export { EMPTY_VALUE_PLACEHOLDER, formatCents, formatDate, formatPercent, } from './format.js';
|
|
36
|
+
// View models and pure helpers
|
|
37
|
+
export { AWARD_FRACTION_TOLERANCE, adjacentStageIds, agreementStatusBadgeVariant, buildShareUrl, canQualifyLead, commissionStatusBadgeVariant, equalSplitAwards, formatCommissionFormula, formatPlanRef, groupOpportunitiesByStage, isHttpUrl, isOverdue, leadStatusBadgeVariant, openOpportunityCount, openPipelineTotals, opportunityStatusBadgeVariant, payoutActionsFor, payoutStatusBadgeVariant, payoutStatusTimeline, pipelineValueByStage, referralLinkStatusBadgeVariant, referralStatusBadgeVariant, sumExpenseRowsByCurrency, uniqueCandidateReferrerIds, validateAwards, winRate, } from './types.js';
|