@kiva/kv-components 10.5.0 → 10.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.
@@ -1,151 +1,77 @@
1
- import { toRefs as f, ref as v, computed as n } from "vue";
2
- import { gql as p } from "@apollo/client/core";
3
- import { format as y } from "date-fns";
4
- import A from "numeral";
5
- import g from "./KvActivityRow.js";
6
- import b from "./KvLightbox.js";
7
- import F from "./KvLendCta.js";
8
- const O = p`
9
- fragment KvLoanActivities on LoanBasic {
10
- id
11
- name
12
- lenders(limit: 0) {
13
- totalCount
14
- }
15
- loanFundraisingInfo {
16
- id
17
- fundedAmount
18
- }
19
- }
20
- `, _ = {
21
- name: "KvLoanActivities",
22
- components: {
23
- KvActivityRow: g,
24
- KvLightbox: b,
25
- KvLendCta: F
26
- },
27
- props: {
28
- /**
29
- * loan object coming from parent component
30
- */
31
- loan: {
32
- type: Object,
33
- default: () => ({})
34
- },
35
- /**
36
- * loan combined activities coming from parent component
37
- */
38
- combinedActivities: {
39
- type: Array,
40
- default: () => []
41
- },
42
- /**
43
- * isAdding flag coming from parent add to basket method
44
- */
45
- isAdding: {
46
- type: Boolean,
47
- default: !1
48
- },
49
- /**
50
- * basketItems array coming from parent component
51
- */
52
- basketItems: {
53
- type: Array,
54
- default: () => []
55
- },
56
- /**
57
- * userBalance string coming from parent component
58
- */
59
- userBalance: {
60
- type: String,
61
- default: void 0
62
- },
63
- /**
64
- * errorMsg string coming from parent add to basket method
65
- */
66
- errorMsg: {
67
- type: String,
68
- default: void 0
69
- },
70
- /**
71
- * kvTrackFunction function to track events from LendCta component
72
- */
73
- kvTrackFunction: {
74
- type: Function,
75
- required: !0
76
- },
77
- /**
78
- * getCookie function for LendCta component
79
- */
80
- getCookie: {
81
- type: Function,
82
- default: void 0
83
- },
84
- /**
85
- * setCookie function for LendCta component
86
- */
87
- setCookie: {
88
- type: Function,
89
- default: void 0
90
- },
91
- /**
92
- * route object for LendCta component
93
- */
94
- route: {
95
- type: Object,
96
- default: void 0
97
- },
98
- enableFiveDollarsNotes: {
99
- type: Boolean,
100
- default: !1
101
- },
102
- isVisitor: {
103
- type: Boolean,
104
- default: !0
105
- }
106
- },
107
- emits: [
108
- "add-to-basket"
109
- ],
110
- setup(r) {
111
- const {
112
- loan: a,
113
- combinedActivities: l,
114
- kvTrackFunction: s
115
- } = f(r), i = v(!1), u = n(() => {
116
- var t;
117
- return `Activity for ${((t = a.value) == null ? void 0 : t.name) || ""}`;
118
- }), d = n(() => {
119
- var t, e;
120
- return ((e = (t = a.value) == null ? void 0 : t.lenders) == null ? void 0 : e.totalCount) ?? 0;
121
- }), c = n(() => {
122
- var e, o;
123
- const t = ((o = (e = a.value) == null ? void 0 : e.loanFundraisingInfo) == null ? void 0 : o.fundedAmount) ?? 0;
124
- return A(parseFloat(t)).format("$0,0");
125
- }), m = n(() => {
126
- const t = l.value.find((e) => e.data.some((o) => o.type === "LendingAction"));
127
- return (t == null ? void 0 : t.data[0]) ?? {};
128
- });
129
- return {
130
- lightboxOpen: i,
131
- modalTitle: u,
132
- formattedDate: (t) => {
133
- const e = new Date(t);
134
- return y(e, "MMM d, yyyy");
135
- },
136
- showActivityModal: () => {
137
- s.value("loan-card", "click", "see-all-activity"), i.value = !0;
138
- },
139
- closeLightbox: () => {
140
- i.value = !1;
141
- },
142
- singleActivity: m,
143
- lendersNumber: d,
144
- amountLent: c
145
- };
146
- }
147
- };
1
+ import g from "./KvLoanActivities.js";
2
+ import { KV_LOAN_ACTIVITIES_FRAGMENT as H } from "./KvLoanActivities.js";
3
+ import { resolveComponent as c, openBlock as n, createElementBlock as s, createElementVNode as i, createVNode as d, toDisplayString as l, createCommentVNode as r, withCtx as m, Fragment as w, renderList as _, createBlock as h } from "vue";
4
+ import "./KvLoanActivities.css";
5
+ import y from "../_virtual/_plugin-vue_export-helper.js";
6
+ const A = {
7
+ key: 0,
8
+ class: "loan-activity"
9
+ }, L = { class: "tw-flex tw-justify-center lg:tw-px-0" }, C = { class: "tw-flex tw-justify-center tw-mt-1 tw-text-small" }, K = { key: 0 }, N = { class: "tw-text-title tw-flex-1 data-hj-suppress" }, M = { class: "tw-overflow-x-hidden tw-px-2 tw-pb-1" }, T = { class: "tw-text-center tw-text-upper" }, V = { class: "tw-flex tw-flex-col tw-gap-y-1" }, B = {
10
+ key: 0,
11
+ class: "tw-mt-1 tw-text-small tw-text-danger"
12
+ }, F = { class: "tw-flex tw-justify-end tw-mt-4 tw-pb-2.5 md:tw-pb-4" };
13
+ function I(k, a, t, e, j, E) {
14
+ const v = c("KvActivityRow"), x = c("KvLendCta"), u = c("KvLightbox");
15
+ return t.combinedActivities.length > 0 ? (n(), s("div", A, [
16
+ i("div", L, [
17
+ d(v, { activity: e.singleActivity }, null, 8, ["activity"])
18
+ ]),
19
+ i("div", C, [
20
+ e.lendersNumber && e.amountLent ? (n(), s("span", K, l(e.lendersNumber) + " lenders lent " + l(e.amountLent) + ".   ", 1)) : r("", !0),
21
+ i("button", {
22
+ class: "tw-text-action hover:tw-underline",
23
+ onClick: a[0] || (a[0] = (...o) => e.showActivityModal && e.showActivityModal(...o))
24
+ }, " See all activity ")
25
+ ]),
26
+ d(u, {
27
+ title: "Activity Feed Modal",
28
+ visible: e.lightboxOpen,
29
+ onLightboxClosed: e.closeLightbox
30
+ }, {
31
+ header: m(() => [
32
+ i("h2", N, l(e.modalTitle), 1)
33
+ ]),
34
+ default: m(() => [
35
+ i("div", M, [
36
+ (n(!0), s(w, null, _(t.combinedActivities, (o) => (n(), s("div", {
37
+ key: o.key,
38
+ class: "md:tw-px-8 lg:tw-px-14 tw-mt-4"
39
+ }, [
40
+ i("p", T, l(e.formattedDate(o.key)), 1),
41
+ i("div", V, [
42
+ (n(!0), s(w, null, _(o.data, (b, f) => (n(), h(v, {
43
+ key: f,
44
+ activity: b
45
+ }, null, 8, ["activity"]))), 128))
46
+ ])
47
+ ]))), 128))
48
+ ]),
49
+ i("div", null, [
50
+ t.errorMsg ? (n(), s("p", B, l(t.errorMsg), 1)) : r("", !0),
51
+ i("div", F, [
52
+ d(x, {
53
+ loan: t.loan,
54
+ "is-loading": !1,
55
+ "kv-track-function": t.kvTrackFunction,
56
+ "get-cookie": t.getCookie,
57
+ "set-cookie": t.setCookie,
58
+ "user-balance": t.userBalance,
59
+ "basket-items": t.basketItems,
60
+ route: t.route,
61
+ "is-adding": t.isAdding,
62
+ "is-visitor": t.isVisitor,
63
+ "enable-five-dollars-notes": t.enableFiveDollarsNotes,
64
+ onAddToBasket: a[1] || (a[1] = (o) => k.$emit("add-to-basket", o))
65
+ }, null, 8, ["loan", "kv-track-function", "get-cookie", "set-cookie", "user-balance", "basket-items", "route", "is-adding", "is-visitor", "enable-five-dollars-notes"])
66
+ ])
67
+ ])
68
+ ]),
69
+ _: 1
70
+ }, 8, ["visible", "onLightboxClosed"])
71
+ ])) : r("", !0);
72
+ }
73
+ const G = /* @__PURE__ */ y(g, [["render", I], ["__scopeId", "data-v-c2b4aeda"]]);
148
74
  export {
149
- O as KV_LOAN_ACTIVITIES_FRAGMENT,
150
- _ as default
75
+ H as KV_LOAN_ACTIVITIES_FRAGMENT,
76
+ G as default
151
77
  };
@@ -1,24 +1,35 @@
1
- import i from "./KvLoanBookmark2.js";
2
- import { KV_LOAN_BOOKMARK_FRAGMENT as K } from "./KvLoanBookmark2.js";
3
- import { resolveComponent as m, openBlock as a, createElementBlock as l, createElementVNode as s, createVNode as c, normalizeClass as k } from "vue";
4
- import d from "../_virtual/_plugin-vue_export-helper.js";
5
- function f(r, e, o, u, t, _) {
6
- const n = m("kv-material-icon");
7
- return a(), l("div", null, [
8
- s("button", {
9
- style: { "border-radius": "8px", padding: "3px" },
10
- class: "tw-cursor-pointer tw-font-medium tw-bg-white tw-flex tw-justify-center",
11
- onClick: e[0] || (e[0] = (p) => r.$emit("toggle-bookmark"))
12
- }, [
13
- c(n, {
14
- class: k(["tw-w-3", { "tw-text-black": !o.isBookmarked, "tw-text-marigold": o.isBookmarked }]),
15
- icon: `${o.isBookmarked ? t.mdiBookmark : t.mdiBookmarkOutline}`
16
- }, null, 8, ["class", "icon"])
17
- ])
18
- ]);
19
- }
20
- const v = /* @__PURE__ */ d(i, [["render", f]]);
1
+ import o from "graphql-tag";
2
+ import { mdiBookmark as a, mdiBookmarkOutline as r } from "@mdi/js";
3
+ import e from "./KvMaterialIcon.js";
4
+ const i = o`
5
+ fragment KvLoanBookmark on LoanBasic {
6
+ id
7
+ userProperties {
8
+ favorited
9
+ }
10
+ }
11
+ `, k = {
12
+ name: "KvLoanBookmark",
13
+ components: {
14
+ KvMaterialIcon: e
15
+ },
16
+ props: {
17
+ isBookmarked: {
18
+ type: Boolean,
19
+ default: !1
20
+ }
21
+ },
22
+ emits: [
23
+ "toggle-bookmark"
24
+ ],
25
+ data() {
26
+ return {
27
+ mdiBookmarkOutline: r,
28
+ mdiBookmark: a
29
+ };
30
+ }
31
+ };
21
32
  export {
22
- K as KV_LOAN_BOOKMARK_FRAGMENT,
23
- v as default
33
+ i as KV_LOAN_BOOKMARK_FRAGMENT,
34
+ k as default
24
35
  };
@@ -1,35 +1,24 @@
1
- import o from "graphql-tag";
2
- import { mdiBookmark as a, mdiBookmarkOutline as r } from "@mdi/js";
3
- import e from "./KvMaterialIcon.js";
4
- const i = o`
5
- fragment KvLoanBookmark on LoanBasic {
6
- id
7
- userProperties {
8
- favorited
9
- }
10
- }
11
- `, k = {
12
- name: "KvLoanBookmark",
13
- components: {
14
- KvMaterialIcon: e
15
- },
16
- props: {
17
- isBookmarked: {
18
- type: Boolean,
19
- default: !1
20
- }
21
- },
22
- emits: [
23
- "toggle-bookmark"
24
- ],
25
- data() {
26
- return {
27
- mdiBookmarkOutline: r,
28
- mdiBookmark: a
29
- };
30
- }
31
- };
1
+ import i from "./KvLoanBookmark.js";
2
+ import { KV_LOAN_BOOKMARK_FRAGMENT as K } from "./KvLoanBookmark.js";
3
+ import { resolveComponent as m, openBlock as a, createElementBlock as l, createElementVNode as s, createVNode as c, normalizeClass as k } from "vue";
4
+ import d from "../_virtual/_plugin-vue_export-helper.js";
5
+ function f(r, e, o, u, t, _) {
6
+ const n = m("kv-material-icon");
7
+ return a(), l("div", null, [
8
+ s("button", {
9
+ style: { "border-radius": "8px", padding: "3px" },
10
+ class: "tw-cursor-pointer tw-font-medium tw-bg-white tw-flex tw-justify-center",
11
+ onClick: e[0] || (e[0] = (p) => r.$emit("toggle-bookmark"))
12
+ }, [
13
+ c(n, {
14
+ class: k(["tw-w-3", { "tw-text-black": !o.isBookmarked, "tw-text-marigold": o.isBookmarked }]),
15
+ icon: `${o.isBookmarked ? t.mdiBookmark : t.mdiBookmarkOutline}`
16
+ }, null, 8, ["class", "icon"])
17
+ ])
18
+ ]);
19
+ }
20
+ const v = /* @__PURE__ */ d(i, [["render", f]]);
32
21
  export {
33
- i as KV_LOAN_BOOKMARK_FRAGMENT,
34
- k as default
22
+ K as KV_LOAN_BOOKMARK_FRAGMENT,
23
+ v as default
35
24
  };
@@ -1,6 +1,6 @@
1
1
  import K from "graphql-tag";
2
2
  import { LOAN_GEOCODE_FRAGMENT as z, loanCardComputedProperties as D, loanCardMethods as I, useLocationTruncation as W } from "../utils/loanCard.js";
3
- import F from "./KvLoanUse.js";
3
+ import F from "./KvLoanUse2.js";
4
4
  import E from "./KvBorrowerImage.js";
5
5
  import O from "./KvMaterialIcon.js";
6
6
  import V from "./KvLoadingPlaceholder.js";
@@ -8,7 +8,7 @@ import U from "./KvTooltip.js";
8
8
  import { resolveComponent as s, openBlock as e, createElementBlock as i, normalizeStyle as G, normalizeClass as k, createElementVNode as l, createBlock as c, resolveDynamicComponent as y, withCtx as w, createVNode as m, toDisplayString as b, createTextVNode as H, createCommentVNode as L, Fragment as q, renderList as j, withModifiers as J } from "vue";
9
9
  import "./KvLoanInfoCard.css";
10
10
  import Q from "../_virtual/_plugin-vue_export-helper.js";
11
- import { KV_LOAN_USE_FRAGMENT as X } from "./KvLoanUse2.js";
11
+ import { KV_LOAN_USE_FRAGMENT as X } from "./KvLoanUse.js";
12
12
  const bt = K`
13
13
  fragment KvLoanInfoCard on LoanBasic {
14
14
  id
@@ -1,46 +1,125 @@
1
- import h from "./KvLoanTag2.js";
2
- import { KV_LOAN_TAG_FRAGMENT as L } from "./KvLoanTag2.js";
3
- import { resolveComponent as d, openBlock as e, createElementBlock as r, normalizeStyle as _, normalizeClass as w, Fragment as o, createTextVNode as m, toDisplayString as a, createElementVNode as l, createVNode as p, withCtx as y, renderList as k, createBlock as f, createCommentVNode as s } from "vue";
4
- import x from "../_virtual/_plugin-vue_export-helper.js";
5
- const v = ["id"], M = { class: "tw-whitespace-nowrap tw-pb-0.5" };
6
- function N(b, i, c, C, T, t) {
7
- const u = d("kv-tooltip"), g = d("kv-countdown-timer");
8
- return t.variation ? (e(), r("div", {
9
- key: 0,
10
- class: w(["tw-text-small tw-font-medium tw-pt-0.5", { "tw-line-clamp-1": !t.isMultipleMatch }]),
11
- style: _({ color: t.tagColor })
12
- }, [
13
- t.isMultipleMatch ? (e(), r(o, { key: 0 }, [
14
- m(a(t.totalMatchRatio) + "x match by ", 1),
15
- l("span", {
16
- id: `matching-orgs-${c.loan.id}`,
17
- class: "tw-underline tw-decoration-dotted tw-cursor-pointer"
18
- }, a(t.multiMatchingOrgs.length) + " organizations", 9, v),
19
- p(u, {
20
- controller: `matching-orgs-${c.loan.id}`,
21
- "max-width": "320px"
22
- }, {
23
- default: y(() => [
24
- l("p", M, " Your contribution is matched by " + a(t.multiMatchingOrgs.length) + " partners ", 1),
25
- i[0] || (i[0] = l("hr", { class: "tw-border-caution-highlight tw-py-0.5" }, null, -1)),
26
- (e(!0), r(o, null, k(t.multiMatchingOrgs, (n) => (e(), r("p", {
27
- key: n.managedAccountId,
28
- class: "tw-m-0"
29
- }, a(n.ratio) + ":1 matching by " + a(t.orgDisplayName(n)), 1))), 128))
30
- ]),
31
- _: 1
32
- }, 8, ["controller"])
33
- ], 64)) : (e(), r(o, { key: 1 }, [
34
- m(a(t.tagText) + " ", 1),
35
- t.variation === "ending-soon" ? (e(), f(g, {
36
- key: 0,
37
- deadline: t.deadline
38
- }, null, 8, ["deadline"])) : s("", !0)
39
- ], 64))
40
- ], 6)) : s("", !0);
41
- }
42
- const z = /* @__PURE__ */ x(h, [["render", N]]);
1
+ import { differenceInDays as r, parseISO as s } from "date-fns";
2
+ import u from "graphql-tag";
3
+ import l from "numeral";
4
+ import d from "./KvCountdownTimer.js";
5
+ import m from "./KvTooltip.js";
6
+ const h = "N/A", a = {
7
+ almostFunded: "almost-funded",
8
+ endingSoon: "ending-soon",
9
+ matchedLoan: "matched-loan",
10
+ lseLoan: "lse-loan"
11
+ }, y = u`
12
+ fragment KvLoanTag on LoanBasic {
13
+ id
14
+ loanFundraisingInfo {
15
+ id
16
+ fundedAmount
17
+ reservedAmount
18
+ }
19
+ loanAmount
20
+ matchRatio
21
+ matchingText
22
+ simultaneousMatching {
23
+ managedAccountId
24
+ displayName
25
+ ratio
26
+ }
27
+ plannedExpirationDate
28
+ ... on LoanPartner {
29
+ partnerName
30
+ }
31
+ }
32
+ `, L = {
33
+ name: "KvLoanTag",
34
+ components: {
35
+ KvCountdownTimer: d,
36
+ KvTooltip: m
37
+ },
38
+ props: {
39
+ loan: {
40
+ type: Object,
41
+ required: !0
42
+ },
43
+ useExpandedStyles: {
44
+ type: Boolean,
45
+ default: !1
46
+ },
47
+ enableMultiMatching: {
48
+ type: Boolean,
49
+ default: !1
50
+ }
51
+ },
52
+ computed: {
53
+ deadline() {
54
+ var t;
55
+ return s((t = this.loan) == null ? void 0 : t.plannedExpirationDate);
56
+ },
57
+ isLseLoan() {
58
+ var t, n;
59
+ return ((n = (t = this.loan) == null ? void 0 : t.partnerName) == null ? void 0 : n.toUpperCase().includes(h)) ?? !1;
60
+ },
61
+ amountLeft() {
62
+ var e, o;
63
+ const t = ((e = this.loan) == null ? void 0 : e.loanFundraisingInfo) ?? { fundedAmount: 0, reservedAmount: 0 }, { fundedAmount: n, reservedAmount: i } = t;
64
+ return l((o = this.loan) == null ? void 0 : o.loanAmount).subtract(n).subtract(i).value();
65
+ },
66
+ multiMatchingOrgs() {
67
+ var t;
68
+ return ((t = this.loan) == null ? void 0 : t.simultaneousMatching) ?? [];
69
+ },
70
+ isMultipleMatch() {
71
+ return this.enableMultiMatching && this.multiMatchingOrgs.length > 1;
72
+ },
73
+ totalMatchRatio() {
74
+ return this.multiMatchingOrgs.reduce((t, n) => t + n.ratio, 1);
75
+ },
76
+ variation() {
77
+ var i, e;
78
+ const t = !!((i = this.loan) != null && i.matchingText), n = this.enableMultiMatching && this.multiMatchingOrgs.length > 0;
79
+ return t || n ? a.matchedLoan : this.isLseLoan ? a.lseLoan : r(s((e = this.loan) == null ? void 0 : e.plannedExpirationDate), Date.now()) <= 3 ? a.endingSoon : this.amountLeft < 100 && this.amountLeft >= 0 ? a.almostFunded : null;
80
+ },
81
+ tagText() {
82
+ var t;
83
+ switch (this.variation) {
84
+ case a.lseLoan:
85
+ return `${this.useExpandedStyles ? "⚡ " : ""}High community impact`;
86
+ case a.almostFunded:
87
+ return `${this.useExpandedStyles ? "💸 " : ""}Almost funded`;
88
+ case a.matchedLoan: {
89
+ if (this.enableMultiMatching && this.multiMatchingOrgs.length === 1) {
90
+ const n = this.multiMatchingOrgs[0];
91
+ return `${this.useExpandedStyles ? "🤝 " : ""}${n.ratio + 1}x matching by ${this.orgDisplayName(n)}`;
92
+ }
93
+ return `${this.useExpandedStyles ? "🤝 " : ""}${this.matchRatio + 1}x matching by ${(t = this.loan) == null ? void 0 : t.matchingText}`;
94
+ }
95
+ default:
96
+ return `${this.useExpandedStyles ? "⏰ " : ""}Ending soon: `;
97
+ }
98
+ },
99
+ tagColor() {
100
+ if (this.useExpandedStyles)
101
+ switch (this.variation) {
102
+ case a.almostFunded:
103
+ return "#AF741C";
104
+ case a.endingSoon:
105
+ return "#CE2626";
106
+ default:
107
+ return "#2B7C5F";
108
+ }
109
+ return "#CE4A00";
110
+ },
111
+ matchRatio() {
112
+ var t;
113
+ return (t = this.loan) == null ? void 0 : t.matchRatio;
114
+ }
115
+ },
116
+ methods: {
117
+ orgDisplayName(t) {
118
+ return t.displayName && t.displayName !== "Anonymous" ? t.displayName : "a Kiva supporter";
119
+ }
120
+ }
121
+ };
43
122
  export {
44
- L as KV_LOAN_TAG_FRAGMENT,
45
- z as default
123
+ y as KV_LOAN_TAG_FRAGMENT,
124
+ L as default
46
125
  };