@contractspec/example.learning-journey-ui-coaching 1.57.0 → 1.58.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.
Files changed (87) hide show
  1. package/.turbo/turbo-build.log +58 -59
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +18 -0
  4. package/dist/CoachingMiniApp.d.ts +4 -14
  5. package/dist/CoachingMiniApp.d.ts.map +1 -1
  6. package/dist/CoachingMiniApp.js +1056 -59
  7. package/dist/browser/CoachingMiniApp.js +1059 -0
  8. package/dist/browser/components/EngagementMeter.js +143 -0
  9. package/dist/browser/components/TipCard.js +89 -0
  10. package/dist/browser/components/TipFeed.js +90 -0
  11. package/dist/browser/components/index.js +320 -0
  12. package/dist/browser/docs/index.js +22 -0
  13. package/dist/browser/docs/learning-journey-ui-coaching.docblock.js +22 -0
  14. package/dist/browser/example.js +32 -0
  15. package/dist/browser/index.js +1118 -0
  16. package/dist/browser/views/Overview.js +303 -0
  17. package/dist/browser/views/Progress.js +344 -0
  18. package/dist/browser/views/Steps.js +159 -0
  19. package/dist/browser/views/Timeline.js +266 -0
  20. package/dist/browser/views/index.js +980 -0
  21. package/dist/components/EngagementMeter.d.ts +6 -15
  22. package/dist/components/EngagementMeter.d.ts.map +1 -1
  23. package/dist/components/EngagementMeter.js +143 -107
  24. package/dist/components/TipCard.d.ts +8 -18
  25. package/dist/components/TipCard.d.ts.map +1 -1
  26. package/dist/components/TipCard.js +86 -72
  27. package/dist/components/TipFeed.d.ts +7 -13
  28. package/dist/components/TipFeed.d.ts.map +1 -1
  29. package/dist/components/TipFeed.js +87 -62
  30. package/dist/components/index.d.ts +4 -4
  31. package/dist/components/index.d.ts.map +1 -0
  32. package/dist/components/index.js +320 -4
  33. package/dist/docs/index.d.ts +2 -1
  34. package/dist/docs/index.d.ts.map +1 -0
  35. package/dist/docs/index.js +23 -1
  36. package/dist/docs/learning-journey-ui-coaching.docblock.d.ts +2 -1
  37. package/dist/docs/learning-journey-ui-coaching.docblock.d.ts.map +1 -0
  38. package/dist/docs/learning-journey-ui-coaching.docblock.js +21 -18
  39. package/dist/example.d.ts +2 -6
  40. package/dist/example.d.ts.map +1 -1
  41. package/dist/example.js +31 -39
  42. package/dist/index.d.ts +6 -12
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +1119 -14
  45. package/dist/node/CoachingMiniApp.js +1059 -0
  46. package/dist/node/components/EngagementMeter.js +143 -0
  47. package/dist/node/components/TipCard.js +89 -0
  48. package/dist/node/components/TipFeed.js +90 -0
  49. package/dist/node/components/index.js +320 -0
  50. package/dist/node/docs/index.js +22 -0
  51. package/dist/node/docs/learning-journey-ui-coaching.docblock.js +22 -0
  52. package/dist/node/example.js +32 -0
  53. package/dist/node/index.js +1118 -0
  54. package/dist/node/views/Overview.js +303 -0
  55. package/dist/node/views/Progress.js +344 -0
  56. package/dist/node/views/Steps.js +159 -0
  57. package/dist/node/views/Timeline.js +266 -0
  58. package/dist/node/views/index.js +980 -0
  59. package/dist/views/Overview.d.ts +4 -13
  60. package/dist/views/Overview.d.ts.map +1 -1
  61. package/dist/views/Overview.js +301 -148
  62. package/dist/views/Progress.d.ts +3 -10
  63. package/dist/views/Progress.d.ts.map +1 -1
  64. package/dist/views/Progress.js +342 -112
  65. package/dist/views/Steps.d.ts +2 -11
  66. package/dist/views/Steps.d.ts.map +1 -1
  67. package/dist/views/Steps.js +157 -66
  68. package/dist/views/Timeline.d.ts +2 -10
  69. package/dist/views/Timeline.d.ts.map +1 -1
  70. package/dist/views/Timeline.js +264 -110
  71. package/dist/views/index.d.ts +5 -5
  72. package/dist/views/index.d.ts.map +1 -0
  73. package/dist/views/index.js +980 -5
  74. package/package.json +154 -38
  75. package/tsdown.config.js +1 -2
  76. package/.turbo/turbo-build$colon$bundle.log +0 -62
  77. package/dist/CoachingMiniApp.js.map +0 -1
  78. package/dist/components/EngagementMeter.js.map +0 -1
  79. package/dist/components/TipCard.js.map +0 -1
  80. package/dist/components/TipFeed.js.map +0 -1
  81. package/dist/docs/learning-journey-ui-coaching.docblock.js.map +0 -1
  82. package/dist/example.js.map +0 -1
  83. package/dist/views/Overview.js.map +0 -1
  84. package/dist/views/Progress.js.map +0 -1
  85. package/dist/views/Steps.js.map +0 -1
  86. package/dist/views/Timeline.js.map +0 -1
  87. package/tsconfig.tsbuildinfo +0 -1
@@ -1,18 +1,9 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/components/EngagementMeter.d.ts
4
1
  interface EngagementMeterProps {
5
- acknowledged: number;
6
- actioned: number;
7
- pending: number;
8
- streak?: number;
2
+ acknowledged: number;
3
+ actioned: number;
4
+ pending: number;
5
+ streak?: number;
9
6
  }
10
- declare function EngagementMeter({
11
- acknowledged,
12
- actioned,
13
- pending,
14
- streak
15
- }: EngagementMeterProps): react_jsx_runtime0.JSX.Element;
16
- //#endregion
17
- export { EngagementMeter };
7
+ export declare function EngagementMeter({ acknowledged, actioned, pending, streak, }: EngagementMeterProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
18
9
  //# sourceMappingURL=EngagementMeter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EngagementMeter.d.ts","names":[],"sources":["../../src/components/EngagementMeter.tsx"],"mappings":";;;UAEU,oBAAA;EACR,YAAA;EACA,QAAA;EACA,OAAA;EACA,MAAA;AAAA;AAAA,iBAGc,eAAA,CAAA;EACd,YAAA;EACA,QAAA;EACA,OAAA;EACA;AAAA,GACC,oBAAA,GAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"EngagementMeter.d.ts","sourceRoot":"","sources":["../../src/components/EngagementMeter.tsx"],"names":[],"mappings":"AAEA,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,EAC9B,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,MAAU,GACX,EAAE,oBAAoB,2CA8EtB"}
@@ -1,108 +1,144 @@
1
- 'use client';
2
-
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
-
5
- //#region src/components/EngagementMeter.tsx
6
- function EngagementMeter({ acknowledged, actioned, pending, streak = 0 }) {
7
- const total = acknowledged + actioned + pending;
8
- const actionedPercent = total > 0 ? actioned / total * 100 : 0;
9
- const acknowledgedPercent = total > 0 ? acknowledged / total * 100 : 0;
10
- return /* @__PURE__ */ jsxs("div", {
11
- className: "space-y-4",
12
- children: [
13
- /* @__PURE__ */ jsx("div", {
14
- className: "flex items-center justify-center",
15
- children: /* @__PURE__ */ jsxs("div", {
16
- className: "relative h-32 w-32",
17
- children: [/* @__PURE__ */ jsxs("svg", {
18
- className: "h-full w-full -rotate-90",
19
- viewBox: "0 0 100 100",
20
- children: [
21
- /* @__PURE__ */ jsx("circle", {
22
- cx: "50",
23
- cy: "50",
24
- r: "40",
25
- fill: "none",
26
- strokeWidth: "12",
27
- className: "stroke-muted"
28
- }),
29
- /* @__PURE__ */ jsx("circle", {
30
- cx: "50",
31
- cy: "50",
32
- r: "40",
33
- fill: "none",
34
- strokeWidth: "12",
35
- strokeLinecap: "round",
36
- strokeDasharray: `${actionedPercent * 2.51} 251`,
37
- className: "stroke-green-500 transition-all duration-500"
38
- }),
39
- /* @__PURE__ */ jsx("circle", {
40
- cx: "50",
41
- cy: "50",
42
- r: "40",
43
- fill: "none",
44
- strokeWidth: "12",
45
- strokeLinecap: "round",
46
- strokeDasharray: `${acknowledgedPercent * 2.51} 251`,
47
- strokeDashoffset: `${-actionedPercent * 2.51}`,
48
- className: "stroke-amber-500 transition-all duration-500"
49
- })
50
- ]
51
- }), /* @__PURE__ */ jsxs("div", {
52
- className: "absolute inset-0 flex flex-col items-center justify-center",
53
- children: [/* @__PURE__ */ jsx("span", {
54
- className: "text-2xl font-bold",
55
- children: total
56
- }), /* @__PURE__ */ jsx("span", {
57
- className: "text-muted-foreground text-xs",
58
- children: "tips"
59
- })]
60
- })]
61
- })
62
- }),
63
- /* @__PURE__ */ jsxs("div", {
64
- className: "flex justify-center gap-4 text-sm",
65
- children: [
66
- /* @__PURE__ */ jsxs("div", {
67
- className: "flex items-center gap-1.5",
68
- children: [/* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-green-500" }), /* @__PURE__ */ jsxs("span", { children: [
69
- "Actioned (",
70
- actioned,
71
- ")"
72
- ] })]
73
- }),
74
- /* @__PURE__ */ jsxs("div", {
75
- className: "flex items-center gap-1.5",
76
- children: [/* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-amber-500" }), /* @__PURE__ */ jsxs("span", { children: [
77
- "Acknowledged (",
78
- acknowledged,
79
- ")"
80
- ] })]
81
- }),
82
- /* @__PURE__ */ jsxs("div", {
83
- className: "flex items-center gap-1.5",
84
- children: [/* @__PURE__ */ jsx("div", { className: "bg-muted h-3 w-3 rounded-full" }), /* @__PURE__ */ jsxs("span", { children: [
85
- "Pending (",
86
- pending,
87
- ")"
88
- ] })]
89
- })
90
- ]
91
- }),
92
- streak > 0 && /* @__PURE__ */ jsxs("div", {
93
- className: "flex items-center justify-center gap-2 rounded-lg bg-orange-500/10 px-4 py-2",
94
- children: [/* @__PURE__ */ jsx("span", {
95
- className: "text-xl",
96
- children: "🔥"
97
- }), /* @__PURE__ */ jsxs("span", {
98
- className: "font-semibold text-orange-500",
99
- children: [streak, " day engagement streak!"]
100
- })]
101
- })
102
- ]
103
- });
1
+ // @bun
2
+ // src/components/EngagementMeter.tsx
3
+ import { jsxDEV } from "react/jsx-dev-runtime";
4
+ "use client";
5
+ function EngagementMeter({
6
+ acknowledged,
7
+ actioned,
8
+ pending,
9
+ streak = 0
10
+ }) {
11
+ const total = acknowledged + actioned + pending;
12
+ const actionedPercent = total > 0 ? actioned / total * 100 : 0;
13
+ const acknowledgedPercent = total > 0 ? acknowledged / total * 100 : 0;
14
+ return /* @__PURE__ */ jsxDEV("div", {
15
+ className: "space-y-4",
16
+ children: [
17
+ /* @__PURE__ */ jsxDEV("div", {
18
+ className: "flex items-center justify-center",
19
+ children: /* @__PURE__ */ jsxDEV("div", {
20
+ className: "relative h-32 w-32",
21
+ children: [
22
+ /* @__PURE__ */ jsxDEV("svg", {
23
+ className: "h-full w-full -rotate-90",
24
+ viewBox: "0 0 100 100",
25
+ children: [
26
+ /* @__PURE__ */ jsxDEV("circle", {
27
+ cx: "50",
28
+ cy: "50",
29
+ r: "40",
30
+ fill: "none",
31
+ strokeWidth: "12",
32
+ className: "stroke-muted"
33
+ }, undefined, false, undefined, this),
34
+ /* @__PURE__ */ jsxDEV("circle", {
35
+ cx: "50",
36
+ cy: "50",
37
+ r: "40",
38
+ fill: "none",
39
+ strokeWidth: "12",
40
+ strokeLinecap: "round",
41
+ strokeDasharray: `${actionedPercent * 2.51} 251`,
42
+ className: "stroke-green-500 transition-all duration-500"
43
+ }, undefined, false, undefined, this),
44
+ /* @__PURE__ */ jsxDEV("circle", {
45
+ cx: "50",
46
+ cy: "50",
47
+ r: "40",
48
+ fill: "none",
49
+ strokeWidth: "12",
50
+ strokeLinecap: "round",
51
+ strokeDasharray: `${acknowledgedPercent * 2.51} 251`,
52
+ strokeDashoffset: `${-actionedPercent * 2.51}`,
53
+ className: "stroke-amber-500 transition-all duration-500"
54
+ }, undefined, false, undefined, this)
55
+ ]
56
+ }, undefined, true, undefined, this),
57
+ /* @__PURE__ */ jsxDEV("div", {
58
+ className: "absolute inset-0 flex flex-col items-center justify-center",
59
+ children: [
60
+ /* @__PURE__ */ jsxDEV("span", {
61
+ className: "text-2xl font-bold",
62
+ children: total
63
+ }, undefined, false, undefined, this),
64
+ /* @__PURE__ */ jsxDEV("span", {
65
+ className: "text-muted-foreground text-xs",
66
+ children: "tips"
67
+ }, undefined, false, undefined, this)
68
+ ]
69
+ }, undefined, true, undefined, this)
70
+ ]
71
+ }, undefined, true, undefined, this)
72
+ }, undefined, false, undefined, this),
73
+ /* @__PURE__ */ jsxDEV("div", {
74
+ className: "flex justify-center gap-4 text-sm",
75
+ children: [
76
+ /* @__PURE__ */ jsxDEV("div", {
77
+ className: "flex items-center gap-1.5",
78
+ children: [
79
+ /* @__PURE__ */ jsxDEV("div", {
80
+ className: "h-3 w-3 rounded-full bg-green-500"
81
+ }, undefined, false, undefined, this),
82
+ /* @__PURE__ */ jsxDEV("span", {
83
+ children: [
84
+ "Actioned (",
85
+ actioned,
86
+ ")"
87
+ ]
88
+ }, undefined, true, undefined, this)
89
+ ]
90
+ }, undefined, true, undefined, this),
91
+ /* @__PURE__ */ jsxDEV("div", {
92
+ className: "flex items-center gap-1.5",
93
+ children: [
94
+ /* @__PURE__ */ jsxDEV("div", {
95
+ className: "h-3 w-3 rounded-full bg-amber-500"
96
+ }, undefined, false, undefined, this),
97
+ /* @__PURE__ */ jsxDEV("span", {
98
+ children: [
99
+ "Acknowledged (",
100
+ acknowledged,
101
+ ")"
102
+ ]
103
+ }, undefined, true, undefined, this)
104
+ ]
105
+ }, undefined, true, undefined, this),
106
+ /* @__PURE__ */ jsxDEV("div", {
107
+ className: "flex items-center gap-1.5",
108
+ children: [
109
+ /* @__PURE__ */ jsxDEV("div", {
110
+ className: "bg-muted h-3 w-3 rounded-full"
111
+ }, undefined, false, undefined, this),
112
+ /* @__PURE__ */ jsxDEV("span", {
113
+ children: [
114
+ "Pending (",
115
+ pending,
116
+ ")"
117
+ ]
118
+ }, undefined, true, undefined, this)
119
+ ]
120
+ }, undefined, true, undefined, this)
121
+ ]
122
+ }, undefined, true, undefined, this),
123
+ streak > 0 && /* @__PURE__ */ jsxDEV("div", {
124
+ className: "flex items-center justify-center gap-2 rounded-lg bg-orange-500/10 px-4 py-2",
125
+ children: [
126
+ /* @__PURE__ */ jsxDEV("span", {
127
+ className: "text-xl",
128
+ children: "\uD83D\uDD25"
129
+ }, undefined, false, undefined, this),
130
+ /* @__PURE__ */ jsxDEV("span", {
131
+ className: "font-semibold text-orange-500",
132
+ children: [
133
+ streak,
134
+ " day engagement streak!"
135
+ ]
136
+ }, undefined, true, undefined, this)
137
+ ]
138
+ }, undefined, true, undefined, this)
139
+ ]
140
+ }, undefined, true, undefined, this);
104
141
  }
105
-
106
- //#endregion
107
- export { EngagementMeter };
108
- //# sourceMappingURL=EngagementMeter.js.map
142
+ export {
143
+ EngagementMeter
144
+ };
@@ -1,21 +1,11 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
- import { LearningJourneyStepSpec } from "@contractspec/module.learning-journey/track-spec";
3
-
4
- //#region src/components/TipCard.d.ts
1
+ import type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';
5
2
  interface TipCardProps {
6
- step: LearningJourneyStepSpec;
7
- isCompleted: boolean;
8
- isCurrent: boolean;
9
- onComplete?: () => void;
10
- onDismiss?: () => void;
3
+ step: LearningJourneyStepSpec;
4
+ isCompleted: boolean;
5
+ isCurrent: boolean;
6
+ onComplete?: () => void;
7
+ onDismiss?: () => void;
11
8
  }
12
- declare function TipCard({
13
- step,
14
- isCompleted,
15
- isCurrent,
16
- onComplete,
17
- onDismiss
18
- }: TipCardProps): react_jsx_runtime0.JSX.Element;
19
- //#endregion
20
- export { TipCard };
9
+ export declare function TipCard({ step, isCompleted, isCurrent, onComplete, onDismiss, }: TipCardProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
21
11
  //# sourceMappingURL=TipCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TipCard.d.ts","names":[],"sources":["../../src/components/TipCard.tsx"],"mappings":";;;;UAOU,YAAA;EACR,IAAA,EAAM,uBAAA;EACN,WAAA;EACA,SAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,iBAac,OAAA,CAAA;EACd,IAAA;EACA,WAAA;EACA,SAAA;EACA,UAAA;EACA;AAAA,GACC,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"TipCard.d.ts","sourceRoot":"","sources":["../../src/components/TipCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAEhG,UAAU,YAAY;IACpB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAYD,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,GACV,EAAE,YAAY,2CAqEd"}
@@ -1,76 +1,90 @@
1
- 'use client';
2
-
3
- import { Card, CardContent } from "@contractspec/lib.ui-kit-web/ui/card";
1
+ // @bun
2
+ // src/components/TipCard.tsx
4
3
  import { Button } from "@contractspec/lib.design-system";
4
+ import { Card, CardContent } from "@contractspec/lib.ui-kit-web/ui/card";
5
5
  import { cn } from "@contractspec/lib.ui-kit-web/ui/utils";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
-
8
- //#region src/components/TipCard.tsx
9
- const TIP_ICONS = {
10
- cash_buffer_too_high: "💰",
11
- no_savings_goal: "🎯",
12
- irregular_savings: "📅",
13
- noise_late_evening: "🔇",
14
- guest_frequency_high: "👥",
15
- shared_space_conflicts: "🏠",
16
- default: "💡"
6
+ import { jsxDEV } from "react/jsx-dev-runtime";
7
+ "use client";
8
+ var TIP_ICONS = {
9
+ cash_buffer_too_high: "\uD83D\uDCB0",
10
+ no_savings_goal: "\uD83C\uDFAF",
11
+ irregular_savings: "\uD83D\uDCC5",
12
+ noise_late_evening: "\uD83D\uDD07",
13
+ guest_frequency_high: "\uD83D\uDC65",
14
+ shared_space_conflicts: "\uD83C\uDFE0",
15
+ default: "\uD83D\uDCA1"
17
16
  };
18
- function TipCard({ step, isCompleted, isCurrent, onComplete, onDismiss }) {
19
- const icon = TIP_ICONS[step.metadata?.tipId ?? "default"] ?? TIP_ICONS.default;
20
- return /* @__PURE__ */ jsx(Card, {
21
- className: cn("transition-all", isCompleted && "opacity-60", isCurrent && "ring-2 ring-amber-500"),
22
- children: /* @__PURE__ */ jsx(CardContent, {
23
- className: "p-4",
24
- children: /* @__PURE__ */ jsxs("div", {
25
- className: "flex gap-4",
26
- children: [/* @__PURE__ */ jsx("div", {
27
- className: cn("flex h-12 w-12 shrink-0 items-center justify-center rounded-xl text-2xl", isCompleted ? "bg-green-500/10" : isCurrent ? "bg-amber-500/10" : "bg-muted"),
28
- children: isCompleted ? "" : icon
29
- }), /* @__PURE__ */ jsxs("div", {
30
- className: "min-w-0 flex-1",
31
- children: [
32
- /* @__PURE__ */ jsxs("div", {
33
- className: "flex items-start justify-between gap-2",
34
- children: [/* @__PURE__ */ jsx("h4", {
35
- className: "font-semibold",
36
- children: step.title
37
- }), step.xpReward && /* @__PURE__ */ jsxs("span", {
38
- className: cn("shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold", isCompleted ? "bg-green-500/10 text-green-500" : "bg-amber-500/10 text-amber-500"),
39
- children: [
40
- "+",
41
- step.xpReward,
42
- " XP"
43
- ]
44
- })]
45
- }),
46
- /* @__PURE__ */ jsx("p", {
47
- className: "text-muted-foreground mt-1 text-sm",
48
- children: step.description
49
- }),
50
- !isCompleted && /* @__PURE__ */ jsxs("div", {
51
- className: "mt-3 flex flex-wrap gap-2",
52
- children: [/* @__PURE__ */ jsx(Button, {
53
- size: "sm",
54
- onClick: onComplete,
55
- children: "Take Action"
56
- }), /* @__PURE__ */ jsx(Button, {
57
- variant: "outline",
58
- size: "sm",
59
- onClick: onDismiss,
60
- children: "Dismiss"
61
- })]
62
- }),
63
- isCompleted && /* @__PURE__ */ jsx("p", {
64
- className: "mt-2 text-sm text-green-500",
65
- children: "✓ Tip acknowledged"
66
- })
67
- ]
68
- })]
69
- })
70
- })
71
- });
17
+ function TipCard({
18
+ step,
19
+ isCompleted,
20
+ isCurrent,
21
+ onComplete,
22
+ onDismiss
23
+ }) {
24
+ const tipId = step.metadata?.tipId ?? "default";
25
+ const icon = TIP_ICONS[tipId] ?? TIP_ICONS.default;
26
+ return /* @__PURE__ */ jsxDEV(Card, {
27
+ className: cn("transition-all", isCompleted && "opacity-60", isCurrent && "ring-2 ring-amber-500"),
28
+ children: /* @__PURE__ */ jsxDEV(CardContent, {
29
+ className: "p-4",
30
+ children: /* @__PURE__ */ jsxDEV("div", {
31
+ className: "flex gap-4",
32
+ children: [
33
+ /* @__PURE__ */ jsxDEV("div", {
34
+ className: cn("flex h-12 w-12 shrink-0 items-center justify-center rounded-xl text-2xl", isCompleted ? "bg-green-500/10" : isCurrent ? "bg-amber-500/10" : "bg-muted"),
35
+ children: isCompleted ? "\u2713" : icon
36
+ }, undefined, false, undefined, this),
37
+ /* @__PURE__ */ jsxDEV("div", {
38
+ className: "min-w-0 flex-1",
39
+ children: [
40
+ /* @__PURE__ */ jsxDEV("div", {
41
+ className: "flex items-start justify-between gap-2",
42
+ children: [
43
+ /* @__PURE__ */ jsxDEV("h4", {
44
+ className: "font-semibold",
45
+ children: step.title
46
+ }, undefined, false, undefined, this),
47
+ step.xpReward && /* @__PURE__ */ jsxDEV("span", {
48
+ className: cn("shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold", isCompleted ? "bg-green-500/10 text-green-500" : "bg-amber-500/10 text-amber-500"),
49
+ children: [
50
+ "+",
51
+ step.xpReward,
52
+ " XP"
53
+ ]
54
+ }, undefined, true, undefined, this)
55
+ ]
56
+ }, undefined, true, undefined, this),
57
+ /* @__PURE__ */ jsxDEV("p", {
58
+ className: "text-muted-foreground mt-1 text-sm",
59
+ children: step.description
60
+ }, undefined, false, undefined, this),
61
+ !isCompleted && /* @__PURE__ */ jsxDEV("div", {
62
+ className: "mt-3 flex flex-wrap gap-2",
63
+ children: [
64
+ /* @__PURE__ */ jsxDEV(Button, {
65
+ size: "sm",
66
+ onClick: onComplete,
67
+ children: "Take Action"
68
+ }, undefined, false, undefined, this),
69
+ /* @__PURE__ */ jsxDEV(Button, {
70
+ variant: "outline",
71
+ size: "sm",
72
+ onClick: onDismiss,
73
+ children: "Dismiss"
74
+ }, undefined, false, undefined, this)
75
+ ]
76
+ }, undefined, true, undefined, this),
77
+ isCompleted && /* @__PURE__ */ jsxDEV("p", {
78
+ className: "mt-2 text-sm text-green-500",
79
+ children: "\u2713 Tip acknowledged"
80
+ }, undefined, false, undefined, this)
81
+ ]
82
+ }, undefined, true, undefined, this)
83
+ ]
84
+ }, undefined, true, undefined, this)
85
+ }, undefined, false, undefined, this)
86
+ }, undefined, false, undefined, this);
72
87
  }
73
-
74
- //#endregion
75
- export { TipCard };
76
- //# sourceMappingURL=TipCard.js.map
88
+ export {
89
+ TipCard
90
+ };
@@ -1,18 +1,12 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
- import { LearningJourneyStepSpec } from "@contractspec/module.learning-journey/track-spec";
3
-
4
- //#region src/components/TipFeed.d.ts
1
+ import type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';
5
2
  interface TipFeedItem {
6
- step: LearningJourneyStepSpec;
7
- isCompleted: boolean;
8
- completedAt?: string;
3
+ step: LearningJourneyStepSpec;
4
+ isCompleted: boolean;
5
+ completedAt?: string;
9
6
  }
10
7
  interface TipFeedProps {
11
- items: TipFeedItem[];
8
+ items: TipFeedItem[];
12
9
  }
13
- declare function TipFeed({
14
- items
15
- }: TipFeedProps): react_jsx_runtime0.JSX.Element;
16
- //#endregion
17
- export { TipFeed };
10
+ export declare function TipFeed({ items }: TipFeedProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
18
12
  //# sourceMappingURL=TipFeed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TipFeed.d.ts","names":[],"sources":["../../src/components/TipFeed.tsx"],"mappings":";;;;UAKU,WAAA;EACR,IAAA,EAAM,uBAAA;EACN,WAAA;EACA,WAAA;AAAA;AAAA,UAGQ,YAAA;EACR,KAAA,EAAO,WAAA;AAAA;AAAA,iBAaO,OAAA,CAAA;EAAU;AAAA,GAAS,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"TipFeed.d.ts","sourceRoot":"","sources":["../../src/components/TipFeed.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAEhG,UAAU,WAAW;IACnB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAYD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,2CA2E9C"}