@contractspec/example.learning-journey-ui-coaching 1.46.0 → 1.47.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,5 +1,5 @@
1
1
  $ tsdown
2
- ℹ tsdown v0.18.3 powered by rolldown v1.0.0-beta.57
2
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
3
3
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/learning-journey-ui-coaching/tsdown.config.js
4
4
  ℹ entry: src/CoachingMiniApp.tsx, src/example.ts, src/index.ts, src/components/EngagementMeter.tsx, src/components/TipCard.tsx, src/components/TipFeed.tsx, src/components/index.ts, src/docs/index.ts, src/docs/learning-journey-ui-coaching.docblock.ts, src/views/Overview.tsx, src/views/Progress.tsx, src/views/Steps.tsx, src/views/Timeline.tsx, src/views/index.ts
5
5
  ℹ target: esnext
@@ -14,7 +14,7 @@ $ tsdown
14
14
  ℹ dist/components/TipFeed.js 2.59 kB │ gzip: 1.02 kB
15
15
  ℹ dist/CoachingMiniApp.js 2.34 kB │ gzip: 0.79 kB
16
16
  ℹ dist/views/Steps.js 2.05 kB │ gzip: 0.74 kB
17
- ℹ dist/example.js 0.88 kB │ gzip: 0.49 kB
17
+ ℹ dist/example.js 0.96 kB │ gzip: 0.52 kB
18
18
  ℹ dist/docs/learning-journey-ui-coaching.docblock.js 0.81 kB │ gzip: 0.46 kB
19
19
  ℹ dist/index.js 0.70 kB │ gzip: 0.24 kB
20
20
  ℹ dist/views/index.js 0.24 kB │ gzip: 0.12 kB
@@ -24,11 +24,11 @@ $ tsdown
24
24
  ℹ dist/views/Progress.js.map 7.15 kB │ gzip: 2.08 kB
25
25
  ℹ dist/views/Timeline.js.map 5.57 kB │ gzip: 1.59 kB
26
26
  ℹ dist/components/EngagementMeter.js.map 4.44 kB │ gzip: 1.34 kB
27
- ℹ dist/components/TipFeed.js.map 4.35 kB │ gzip: 1.66 kB
28
- ℹ dist/components/TipCard.js.map 4.02 kB │ gzip: 1.61 kB
27
+ ℹ dist/components/TipFeed.js.map 4.31 kB │ gzip: 1.65 kB
28
+ ℹ dist/components/TipCard.js.map 3.98 kB │ gzip: 1.61 kB
29
29
  ℹ dist/CoachingMiniApp.js.map 3.63 kB │ gzip: 1.31 kB
30
30
  ℹ dist/views/Steps.js.map 3.09 kB │ gzip: 1.24 kB
31
- ℹ dist/example.js.map 1.40 kB │ gzip: 0.70 kB
31
+ ℹ dist/example.js.map 1.39 kB │ gzip: 0.71 kB
32
32
  ℹ dist/docs/learning-journey-ui-coaching.docblock.js.map 1.14 kB │ gzip: 0.61 kB
33
33
  ℹ dist/components/TipCard.d.ts.map 0.36 kB │ gzip: 0.22 kB
34
34
  ℹ dist/components/EngagementMeter.d.ts.map 0.32 kB │ gzip: 0.21 kB
@@ -38,7 +38,7 @@ $ tsdown
38
38
  ℹ dist/views/Progress.d.ts.map 0.18 kB │ gzip: 0.15 kB
39
39
  ℹ dist/views/Timeline.d.ts.map 0.17 kB │ gzip: 0.15 kB
40
40
  ℹ dist/views/Steps.d.ts.map 0.17 kB │ gzip: 0.15 kB
41
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
41
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
42
42
  ℹ dist/index.d.ts 0.65 kB │ gzip: 0.23 kB
43
43
  ℹ dist/CoachingMiniApp.d.ts 0.59 kB │ gzip: 0.33 kB
44
44
  ℹ dist/components/TipCard.d.ts 0.56 kB │ gzip: 0.32 kB
@@ -48,10 +48,10 @@ $ tsdown
48
48
  ℹ dist/views/Progress.d.ts 0.39 kB │ gzip: 0.25 kB
49
49
  ℹ dist/views/Steps.d.ts 0.36 kB │ gzip: 0.25 kB
50
50
  ℹ dist/views/Timeline.d.ts 0.35 kB │ gzip: 0.24 kB
51
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
51
52
  ℹ dist/views/index.d.ts 0.24 kB │ gzip: 0.12 kB
52
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
53
53
  ℹ dist/components/index.d.ts 0.18 kB │ gzip: 0.10 kB
54
54
  ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
55
55
  ℹ dist/docs/learning-journey-ui-coaching.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
56
- ℹ 47 files, total: 79.94 kB
57
- ✔ Build complete in 8645ms
56
+ ℹ 47 files, total: 79.99 kB
57
+ ✔ Build complete in 3296ms
@@ -1,7 +1,7 @@
1
1
  $ bun build:types && bun build:bundle
2
2
  $ tsc --noEmit
3
3
  $ tsdown
4
- ℹ tsdown v0.18.3 powered by rolldown v1.0.0-beta.57
4
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
5
5
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/learning-journey-ui-coaching/tsdown.config.js
6
6
  ℹ entry: src/CoachingMiniApp.tsx, src/example.ts, src/index.ts, src/components/EngagementMeter.tsx, src/components/TipCard.tsx, src/components/TipFeed.tsx, src/components/index.ts, src/docs/index.ts, src/docs/learning-journey-ui-coaching.docblock.ts, src/views/Overview.tsx, src/views/Progress.tsx, src/views/Steps.tsx, src/views/Timeline.tsx, src/views/index.ts
7
7
  ℹ target: esnext
@@ -15,7 +15,7 @@ $ tsdown
15
15
  ℹ dist/components/TipFeed.js 2.59 kB │ gzip: 1.02 kB
16
16
  ℹ dist/CoachingMiniApp.js 2.34 kB │ gzip: 0.79 kB
17
17
  ℹ dist/views/Steps.js 2.05 kB │ gzip: 0.74 kB
18
- ℹ dist/example.js 0.88 kB │ gzip: 0.49 kB
18
+ ℹ dist/example.js 0.96 kB │ gzip: 0.52 kB
19
19
  ℹ dist/docs/learning-journey-ui-coaching.docblock.js 0.81 kB │ gzip: 0.46 kB
20
20
  ℹ dist/index.js 0.70 kB │ gzip: 0.24 kB
21
21
  ℹ dist/views/index.js 0.24 kB │ gzip: 0.12 kB
@@ -25,11 +25,11 @@ $ tsdown
25
25
  ℹ dist/views/Progress.js.map 7.15 kB │ gzip: 2.08 kB
26
26
  ℹ dist/views/Timeline.js.map 5.57 kB │ gzip: 1.59 kB
27
27
  ℹ dist/components/EngagementMeter.js.map 4.44 kB │ gzip: 1.34 kB
28
- ℹ dist/components/TipFeed.js.map 4.35 kB │ gzip: 1.66 kB
29
- ℹ dist/components/TipCard.js.map 4.02 kB │ gzip: 1.61 kB
28
+ ℹ dist/components/TipFeed.js.map 4.31 kB │ gzip: 1.65 kB
29
+ ℹ dist/components/TipCard.js.map 3.98 kB │ gzip: 1.61 kB
30
30
  ℹ dist/CoachingMiniApp.js.map 3.63 kB │ gzip: 1.31 kB
31
31
  ℹ dist/views/Steps.js.map 3.09 kB │ gzip: 1.24 kB
32
- ℹ dist/example.js.map 1.40 kB │ gzip: 0.70 kB
32
+ ℹ dist/example.js.map 1.39 kB │ gzip: 0.71 kB
33
33
  ℹ dist/docs/learning-journey-ui-coaching.docblock.js.map 1.14 kB │ gzip: 0.61 kB
34
34
  ℹ dist/components/TipCard.d.ts.map 0.36 kB │ gzip: 0.22 kB
35
35
  ℹ dist/components/EngagementMeter.d.ts.map 0.32 kB │ gzip: 0.21 kB
@@ -39,7 +39,7 @@ $ tsdown
39
39
  ℹ dist/views/Progress.d.ts.map 0.18 kB │ gzip: 0.15 kB
40
40
  ℹ dist/views/Timeline.d.ts.map 0.17 kB │ gzip: 0.15 kB
41
41
  ℹ dist/views/Steps.d.ts.map 0.17 kB │ gzip: 0.15 kB
42
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
42
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
43
43
  ℹ dist/index.d.ts 0.65 kB │ gzip: 0.23 kB
44
44
  ℹ dist/CoachingMiniApp.d.ts 0.59 kB │ gzip: 0.33 kB
45
45
  ℹ dist/components/TipCard.d.ts 0.56 kB │ gzip: 0.32 kB
@@ -49,10 +49,10 @@ $ tsdown
49
49
  ℹ dist/views/Progress.d.ts 0.39 kB │ gzip: 0.25 kB
50
50
  ℹ dist/views/Steps.d.ts 0.36 kB │ gzip: 0.25 kB
51
51
  ℹ dist/views/Timeline.d.ts 0.35 kB │ gzip: 0.24 kB
52
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
52
53
  ℹ dist/views/index.d.ts 0.24 kB │ gzip: 0.12 kB
53
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
54
54
  ℹ dist/components/index.d.ts 0.18 kB │ gzip: 0.10 kB
55
55
  ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
56
56
  ℹ dist/docs/learning-journey-ui-coaching.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
57
- ℹ 47 files, total: 79.94 kB
58
- ✔ Build complete in 4515ms
57
+ ℹ 47 files, total: 79.99 kB
58
+ ✔ Build complete in 3330ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # @contractspec/example.learning-journey-ui-coaching
2
2
 
3
+ ## 1.47.0
4
+
5
+ ### Minor Changes
6
+
7
+ - caf8701: feat: add cli vibe command to run workflow
8
+ - c69b849: feat: add api web services (mcp & website)
9
+ - 42b8d78: feat: add cli `contractspec vibe` workflow to simplify usage
10
+ - fd38e85: feat: auto-fix contractspec issues
11
+
12
+ ### Patch Changes
13
+
14
+ - e7ded36: feat: improve stability (adding ts-morph)
15
+ - c231a8b: test: improve workspace stability
16
+ - Updated dependencies [e7ded36]
17
+ - Updated dependencies [caf8701]
18
+ - Updated dependencies [c69b849]
19
+ - Updated dependencies [c231a8b]
20
+ - Updated dependencies [42b8d78]
21
+ - Updated dependencies [fd38e85]
22
+ - @contractspec/example.learning-journey-crm-onboarding@1.47.0
23
+ - @contractspec/example.learning-journey-ambient-coach@1.47.0
24
+ - @contractspec/example.learning-journey-ui-shared@1.47.0
25
+ - @contractspec/module.learning-journey@1.47.0
26
+ - @contractspec/lib.design-system@1.47.0
27
+ - @contractspec/lib.ui-kit-web@1.47.0
28
+ - @contractspec/lib.contracts@1.47.0
29
+
30
+ ## 1.46.2
31
+
32
+ ### Patch Changes
33
+
34
+ - 7e21625: feat: library services (landing page & api)
35
+ - Updated dependencies [7e21625]
36
+ - @contractspec/example.learning-journey-crm-onboarding@1.46.2
37
+ - @contractspec/example.learning-journey-ambient-coach@1.46.2
38
+ - @contractspec/example.learning-journey-ui-shared@1.46.2
39
+ - @contractspec/module.learning-journey@1.46.2
40
+ - @contractspec/lib.design-system@1.46.2
41
+ - @contractspec/lib.ui-kit-web@1.46.2
42
+ - @contractspec/lib.contracts@1.46.2
43
+
44
+ ## 1.46.1
45
+
46
+ ### Patch Changes
47
+
48
+ - 2d8a72b: fix: mcp for presentation
49
+ - Updated dependencies [2d8a72b]
50
+ - @contractspec/example.learning-journey-crm-onboarding@1.46.1
51
+ - @contractspec/example.learning-journey-ambient-coach@1.46.1
52
+ - @contractspec/example.learning-journey-ui-shared@1.46.1
53
+ - @contractspec/module.learning-journey@1.46.1
54
+ - @contractspec/lib.design-system@1.46.1
55
+ - @contractspec/lib.ui-kit-web@1.46.1
56
+ - @contractspec/lib.contracts@1.46.1
57
+
3
58
  ## 1.46.0
4
59
 
5
60
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime1 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
2
2
  import { LearningJourneyStepSpec } from "@contractspec/module.learning-journey/track-spec";
3
3
 
4
4
  //#region src/components/TipCard.d.ts
@@ -15,7 +15,7 @@ declare function TipCard({
15
15
  isCurrent,
16
16
  onComplete,
17
17
  onDismiss
18
- }: TipCardProps): react_jsx_runtime1.JSX.Element;
18
+ }: TipCardProps): react_jsx_runtime6.JSX.Element;
19
19
  //#endregion
20
20
  export { TipCard };
21
21
  //# sourceMappingURL=TipCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TipCard.js","names":["TIP_ICONS: Record<string, string>"],"sources":["../../src/components/TipCard.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@contractspec/lib.design-system';\nimport { Card, CardContent } from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface TipCardProps {\n step: LearningJourneyStepSpec;\n isCompleted: boolean;\n isCurrent: boolean;\n onComplete?: () => void;\n onDismiss?: () => void;\n}\n\nconst TIP_ICONS: Record<string, string> = {\n cash_buffer_too_high: '💰',\n no_savings_goal: '🎯',\n irregular_savings: '📅',\n noise_late_evening: '🔇',\n guest_frequency_high: '👥',\n shared_space_conflicts: '🏠',\n default: '💡',\n};\n\nexport function TipCard({\n step,\n isCompleted,\n isCurrent,\n onComplete,\n onDismiss,\n}: TipCardProps) {\n const tipId = (step.metadata?.tipId as string) ?? 'default';\n const icon = TIP_ICONS[tipId] ?? TIP_ICONS.default;\n\n return (\n <Card\n className={cn(\n 'transition-all',\n isCompleted && 'opacity-60',\n isCurrent && 'ring-2 ring-amber-500'\n )}\n >\n <CardContent className=\"p-4\">\n <div className=\"flex gap-4\">\n {/* Icon */}\n <div\n className={cn(\n 'flex h-12 w-12 shrink-0 items-center justify-center rounded-xl text-2xl',\n isCompleted\n ? 'bg-green-500/10'\n : isCurrent\n ? 'bg-amber-500/10'\n : 'bg-muted'\n )}\n >\n {isCompleted ? '✓' : icon}\n </div>\n\n {/* Content */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-semibold\">{step.title}</h4>\n {step.xpReward && (\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold',\n isCompleted\n ? 'bg-green-500/10 text-green-500'\n : 'bg-amber-500/10 text-amber-500'\n )}\n >\n +{step.xpReward} XP\n </span>\n )}\n </div>\n <p className=\"text-muted-foreground mt-1 text-sm\">\n {step.description}\n </p>\n\n {/* Actions */}\n {!isCompleted && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button size=\"sm\" onClick={onComplete}>\n Take Action\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={onDismiss}>\n Dismiss\n </Button>\n </div>\n )}\n\n {isCompleted && (\n <p className=\"mt-2 text-sm text-green-500\">✓ Tip acknowledged</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n"],"mappings":";;;;;;;;AAeA,MAAMA,YAAoC;CACxC,sBAAsB;CACtB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,SAAS;CACV;AAED,SAAgB,QAAQ,EACtB,MACA,aACA,WACA,YACA,aACe;CAEf,MAAM,OAAO,UADE,KAAK,UAAU,SAAoB,cACjB,UAAU;AAE3C,QACE,oBAAC;EACC,WAAW,GACT,kBACA,eAAe,cACf,aAAa,wBACd;YAED,oBAAC;GAAY,WAAU;aACrB,qBAAC;IAAI,WAAU;eAEb,oBAAC;KACC,WAAW,GACT,2EACA,cACI,oBACA,YACE,oBACA,WACP;eAEA,cAAc,MAAM;MACjB,EAGN,qBAAC;KAAI,WAAU;;MACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAG,WAAU;kBAAiB,KAAK;SAAW,EAC9C,KAAK,YACJ,qBAAC;QACC,WAAW,GACT,2DACA,cACI,mCACA,iCACL;;SACF;SACG,KAAK;SAAS;;SACX;QAEL;MACN,oBAAC;OAAE,WAAU;iBACV,KAAK;QACJ;MAGH,CAAC,eACA,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAO,MAAK;QAAK,SAAS;kBAAY;SAE9B,EACT,oBAAC;QAAO,SAAQ;QAAU,MAAK;QAAK,SAAS;kBAAW;SAE/C;QACL;MAGP,eACC,oBAAC;OAAE,WAAU;iBAA8B;QAAsB;;MAE/D;KACF;IACM;GACT"}
1
+ {"version":3,"file":"TipCard.js","names":[],"sources":["../../src/components/TipCard.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@contractspec/lib.design-system';\nimport { Card, CardContent } from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface TipCardProps {\n step: LearningJourneyStepSpec;\n isCompleted: boolean;\n isCurrent: boolean;\n onComplete?: () => void;\n onDismiss?: () => void;\n}\n\nconst TIP_ICONS: Record<string, string> = {\n cash_buffer_too_high: '💰',\n no_savings_goal: '🎯',\n irregular_savings: '📅',\n noise_late_evening: '🔇',\n guest_frequency_high: '👥',\n shared_space_conflicts: '🏠',\n default: '💡',\n};\n\nexport function TipCard({\n step,\n isCompleted,\n isCurrent,\n onComplete,\n onDismiss,\n}: TipCardProps) {\n const tipId = (step.metadata?.tipId as string) ?? 'default';\n const icon = TIP_ICONS[tipId] ?? TIP_ICONS.default;\n\n return (\n <Card\n className={cn(\n 'transition-all',\n isCompleted && 'opacity-60',\n isCurrent && 'ring-2 ring-amber-500'\n )}\n >\n <CardContent className=\"p-4\">\n <div className=\"flex gap-4\">\n {/* Icon */}\n <div\n className={cn(\n 'flex h-12 w-12 shrink-0 items-center justify-center rounded-xl text-2xl',\n isCompleted\n ? 'bg-green-500/10'\n : isCurrent\n ? 'bg-amber-500/10'\n : 'bg-muted'\n )}\n >\n {isCompleted ? '✓' : icon}\n </div>\n\n {/* Content */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <h4 className=\"font-semibold\">{step.title}</h4>\n {step.xpReward && (\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold',\n isCompleted\n ? 'bg-green-500/10 text-green-500'\n : 'bg-amber-500/10 text-amber-500'\n )}\n >\n +{step.xpReward} XP\n </span>\n )}\n </div>\n <p className=\"text-muted-foreground mt-1 text-sm\">\n {step.description}\n </p>\n\n {/* Actions */}\n {!isCompleted && (\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button size=\"sm\" onClick={onComplete}>\n Take Action\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={onDismiss}>\n Dismiss\n </Button>\n </div>\n )}\n\n {isCompleted && (\n <p className=\"mt-2 text-sm text-green-500\">✓ Tip acknowledged</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n"],"mappings":";;;;;;;;AAeA,MAAM,YAAoC;CACxC,sBAAsB;CACtB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,SAAS;CACV;AAED,SAAgB,QAAQ,EACtB,MACA,aACA,WACA,YACA,aACe;CAEf,MAAM,OAAO,UADE,KAAK,UAAU,SAAoB,cACjB,UAAU;AAE3C,QACE,oBAAC;EACC,WAAW,GACT,kBACA,eAAe,cACf,aAAa,wBACd;YAED,oBAAC;GAAY,WAAU;aACrB,qBAAC;IAAI,WAAU;eAEb,oBAAC;KACC,WAAW,GACT,2EACA,cACI,oBACA,YACE,oBACA,WACP;eAEA,cAAc,MAAM;MACjB,EAGN,qBAAC;KAAI,WAAU;;MACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAG,WAAU;kBAAiB,KAAK;SAAW,EAC9C,KAAK,YACJ,qBAAC;QACC,WAAW,GACT,2DACA,cACI,mCACA,iCACL;;SACF;SACG,KAAK;SAAS;;SACX;QAEL;MACN,oBAAC;OAAE,WAAU;iBACV,KAAK;QACJ;MAGH,CAAC,eACA,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAO,MAAK;QAAK,SAAS;kBAAY;SAE9B,EACT,oBAAC;QAAO,SAAQ;QAAU,MAAK;QAAK,SAAS;kBAAW;SAE/C;QACL;MAGP,eACC,oBAAC;OAAE,WAAU;iBAA8B;QAAsB;;MAE/D;KACF;IACM;GACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"TipFeed.js","names":["TIP_ICONS: Record<string, string>"],"sources":["../../src/components/TipFeed.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface TipFeedItem {\n step: LearningJourneyStepSpec;\n isCompleted: boolean;\n completedAt?: string;\n}\n\ninterface TipFeedProps {\n items: TipFeedItem[];\n}\n\nconst TIP_ICONS: Record<string, string> = {\n cash_buffer_too_high: '💰',\n no_savings_goal: '🎯',\n irregular_savings: '📅',\n noise_late_evening: '🔇',\n guest_frequency_high: '👥',\n shared_space_conflicts: '🏠',\n default: '💡',\n};\n\nexport function TipFeed({ items }: TipFeedProps) {\n if (items.length === 0) {\n return (\n <div className=\"text-muted-foreground py-8 text-center\">\n No tips yet. Start engaging with coaching tips!\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n {/* Timeline line */}\n <div className=\"bg-border absolute top-0 left-4 h-full w-0.5\" />\n\n {/* Feed items */}\n <div className=\"space-y-4\">\n {items.map((item) => {\n const tipId = (item.step.metadata?.tipId as string) ?? 'default';\n const icon = TIP_ICONS[tipId] ?? TIP_ICONS.default;\n\n return (\n <div key={item.step.id} className=\"relative flex gap-4 pl-2\">\n {/* Node */}\n <div\n className={cn(\n 'relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm',\n item.isCompleted\n ? 'bg-green-500 text-white'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {item.isCompleted ? '✓' : icon}\n </div>\n\n {/* Content */}\n <div className=\"bg-card flex-1 rounded-lg border p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <p className=\"font-medium\">{item.step.title}</p>\n <p className=\"text-muted-foreground mt-0.5 text-sm\">\n {item.step.description}\n </p>\n </div>\n {item.step.xpReward && (\n <span\n className={cn(\n 'shrink-0 text-xs font-medium',\n item.isCompleted\n ? 'text-green-500'\n : 'text-muted-foreground'\n )}\n >\n +{item.step.xpReward} XP\n </span>\n )}\n </div>\n\n {/* Timestamp */}\n <div className=\"text-muted-foreground mt-2 flex items-center gap-2 text-xs\">\n {item.isCompleted ? (\n <span className=\"text-green-500\">\n ✓ Completed\n {item.completedAt && ` • ${item.completedAt}`}\n </span>\n ) : (\n <span>Pending action</span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAeA,MAAMA,YAAoC;CACxC,sBAAsB;CACtB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,SAAS;CACV;AAED,SAAgB,QAAQ,EAAE,SAAuB;AAC/C,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC;EAAI,WAAU;YAAyC;GAElD;AAIV,QACE,qBAAC;EAAI,WAAU;aAEb,oBAAC,SAAI,WAAU,iDAAiD,EAGhE,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,SAAS;IAEnB,MAAM,OAAO,UADE,KAAK,KAAK,UAAU,SAAoB,cACtB,UAAU;AAE3C,WACE,qBAAC;KAAuB,WAAU;gBAEhC,oBAAC;MACC,WAAW,GACT,wFACA,KAAK,cACD,4BACA,iCACL;gBAEA,KAAK,cAAc,MAAM;OACtB,EAGN,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,qBAAC,oBACC,oBAAC;QAAE,WAAU;kBAAe,KAAK,KAAK;SAAU,EAChD,oBAAC;QAAE,WAAU;kBACV,KAAK,KAAK;SACT,IACA,EACL,KAAK,KAAK,YACT,qBAAC;QACC,WAAW,GACT,gCACA,KAAK,cACD,mBACA,wBACL;;SACF;SACG,KAAK,KAAK;SAAS;;SAChB;QAEL,EAGN,oBAAC;OAAI,WAAU;iBACZ,KAAK,cACJ,qBAAC;QAAK,WAAU;mBAAiB,eAE9B,KAAK,eAAe,MAAM,KAAK;SAC3B,GAEP,oBAAC,oBAAK,mBAAqB;QAEzB;OACF;OA/CE,KAAK,KAAK,GAgDd;KAER;IACE;GACF"}
1
+ {"version":3,"file":"TipFeed.js","names":[],"sources":["../../src/components/TipFeed.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport type { LearningJourneyStepSpec } from '@contractspec/module.learning-journey/track-spec';\n\ninterface TipFeedItem {\n step: LearningJourneyStepSpec;\n isCompleted: boolean;\n completedAt?: string;\n}\n\ninterface TipFeedProps {\n items: TipFeedItem[];\n}\n\nconst TIP_ICONS: Record<string, string> = {\n cash_buffer_too_high: '💰',\n no_savings_goal: '🎯',\n irregular_savings: '📅',\n noise_late_evening: '🔇',\n guest_frequency_high: '👥',\n shared_space_conflicts: '🏠',\n default: '💡',\n};\n\nexport function TipFeed({ items }: TipFeedProps) {\n if (items.length === 0) {\n return (\n <div className=\"text-muted-foreground py-8 text-center\">\n No tips yet. Start engaging with coaching tips!\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n {/* Timeline line */}\n <div className=\"bg-border absolute top-0 left-4 h-full w-0.5\" />\n\n {/* Feed items */}\n <div className=\"space-y-4\">\n {items.map((item) => {\n const tipId = (item.step.metadata?.tipId as string) ?? 'default';\n const icon = TIP_ICONS[tipId] ?? TIP_ICONS.default;\n\n return (\n <div key={item.step.id} className=\"relative flex gap-4 pl-2\">\n {/* Node */}\n <div\n className={cn(\n 'relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm',\n item.isCompleted\n ? 'bg-green-500 text-white'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {item.isCompleted ? '✓' : icon}\n </div>\n\n {/* Content */}\n <div className=\"bg-card flex-1 rounded-lg border p-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div>\n <p className=\"font-medium\">{item.step.title}</p>\n <p className=\"text-muted-foreground mt-0.5 text-sm\">\n {item.step.description}\n </p>\n </div>\n {item.step.xpReward && (\n <span\n className={cn(\n 'shrink-0 text-xs font-medium',\n item.isCompleted\n ? 'text-green-500'\n : 'text-muted-foreground'\n )}\n >\n +{item.step.xpReward} XP\n </span>\n )}\n </div>\n\n {/* Timestamp */}\n <div className=\"text-muted-foreground mt-2 flex items-center gap-2 text-xs\">\n {item.isCompleted ? (\n <span className=\"text-green-500\">\n ✓ Completed\n {item.completedAt && ` • ${item.completedAt}`}\n </span>\n ) : (\n <span>Pending action</span>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAeA,MAAM,YAAoC;CACxC,sBAAsB;CACtB,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,SAAS;CACV;AAED,SAAgB,QAAQ,EAAE,SAAuB;AAC/C,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC;EAAI,WAAU;YAAyC;GAElD;AAIV,QACE,qBAAC;EAAI,WAAU;aAEb,oBAAC,SAAI,WAAU,iDAAiD,EAGhE,oBAAC;GAAI,WAAU;aACZ,MAAM,KAAK,SAAS;IAEnB,MAAM,OAAO,UADE,KAAK,KAAK,UAAU,SAAoB,cACtB,UAAU;AAE3C,WACE,qBAAC;KAAuB,WAAU;gBAEhC,oBAAC;MACC,WAAW,GACT,wFACA,KAAK,cACD,4BACA,iCACL;gBAEA,KAAK,cAAc,MAAM;OACtB,EAGN,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,qBAAC,oBACC,oBAAC;QAAE,WAAU;kBAAe,KAAK,KAAK;SAAU,EAChD,oBAAC;QAAE,WAAU;kBACV,KAAK,KAAK;SACT,IACA,EACL,KAAK,KAAK,YACT,qBAAC;QACC,WAAW,GACT,gCACA,KAAK,cACD,mBACA,wBACL;;SACF;SACG,KAAK,KAAK;SAAS;;SAChB;QAEL,EAGN,oBAAC;OAAI,WAAU;iBACZ,KAAK,cACJ,qBAAC;QAAK,WAAU;mBAAiB,eAE9B,KAAK,eAAe,MAAM,KAAK;SAC3B,GAEP,oBAAC,oBAAK,mBAAqB;QAEzB;OACF;OA/CE,KAAK,KAAK,GAgDd;KAER;IACE;GACF"}
package/dist/example.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { ExampleSpec } from "@contractspec/lib.contracts";
1
+ import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
2
2
 
3
3
  //#region src/example.d.ts
4
- declare const example: ExampleSpec;
4
+ declare const example: _contractspec_lib_contracts0.ExampleSpec;
5
5
  //#endregion
6
6
  export { example as default };
7
7
  //# sourceMappingURL=example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SAAS"}
1
+ {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SA0BJ,4BAAA,CA1BW"}
package/dist/example.js CHANGED
@@ -1,5 +1,7 @@
1
+ import { defineExample } from "@contractspec/lib.contracts";
2
+
1
3
  //#region src/example.ts
2
- const example = {
4
+ const example = defineExample({
3
5
  meta: {
4
6
  key: "learning-journey-ui-coaching",
5
7
  version: "1.0.0",
@@ -32,7 +34,7 @@ const example = {
32
34
  },
33
35
  mcp: { enabled: true }
34
36
  }
35
- };
37
+ });
36
38
  var example_default = example;
37
39
 
38
40
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"example.js","names":["example: ExampleSpec"],"sources":["../src/example.ts"],"sourcesContent":["import type { ExampleSpec } from '@contractspec/lib.contracts';\n\nconst example: ExampleSpec = {\n meta: {\n key: 'learning-journey-ui-coaching',\n version: '1.0.0',\n title: 'Learning Journey UI — Coaching',\n description:\n 'UI mini-app for coaching patterns: tips, engagement meter, progress.',\n kind: 'ui',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['learning', 'ui', 'coaching'],\n },\n docs: {\n rootDocId: 'docs.examples.learning-journey-ui-coaching',\n },\n entrypoints: {\n packageName: '@contractspec/example.learning-journey-ui-coaching',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['playground', 'markdown'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n};\n\nexport default example;\n"],"mappings":";AAEA,MAAMA,UAAuB;CAC3B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAY;GAAM;GAAW;EACrC;CACD,MAAM,EACJ,WAAW,8CACZ;CACD,aAAa;EACX,aAAa;EACb,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO,CAAC,cAAc,WAAW;GAAE;EAC7D,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF;AAED,sBAAe"}
1
+ {"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'learning-journey-ui-coaching',\n version: '1.0.0',\n title: 'Learning Journey UI — Coaching',\n description:\n 'UI mini-app for coaching patterns: tips, engagement meter, progress.',\n kind: 'ui',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['learning', 'ui', 'coaching'],\n },\n docs: {\n rootDocId: 'docs.examples.learning-journey-ui-coaching',\n },\n entrypoints: {\n packageName: '@contractspec/example.learning-journey-ui-coaching',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['playground', 'markdown'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAY;GAAM;GAAW;EACrC;CACD,MAAM,EACJ,WAAW,8CACZ;CACD,aAAa;EACX,aAAa;EACb,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO,CAAC,cAAc,WAAW;GAAE;EAC7D,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC;AAEF,sBAAe"}
@@ -1,5 +1,5 @@
1
1
  import { LearningViewProps } from "@contractspec/example.learning-journey-ui-shared";
2
- import * as react_jsx_runtime3 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/views/Overview.d.ts
5
5
  interface CoachingOverviewProps extends LearningViewProps {
@@ -10,7 +10,7 @@ declare function Overview({
10
10
  progress,
11
11
  onStepComplete,
12
12
  onStart
13
- }: CoachingOverviewProps): react_jsx_runtime3.JSX.Element;
13
+ }: CoachingOverviewProps): react_jsx_runtime1.JSX.Element;
14
14
  //#endregion
15
15
  export { Overview };
16
16
  //# sourceMappingURL=Overview.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import { LearningViewProps } from "@contractspec/example.learning-journey-ui-shared";
2
- import * as react_jsx_runtime6 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/views/Progress.d.ts
5
5
  declare function ProgressView({
6
6
  track,
7
7
  progress
8
- }: LearningViewProps): react_jsx_runtime6.JSX.Element;
8
+ }: LearningViewProps): react_jsx_runtime4.JSX.Element;
9
9
  //#endregion
10
10
  export { ProgressView as Progress, ProgressView };
11
11
  //# sourceMappingURL=Progress.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import { LearningViewProps } from "@contractspec/example.learning-journey-ui-shared";
2
- import * as react_jsx_runtime4 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/views/Steps.d.ts
5
5
  declare function Steps({
6
6
  track,
7
7
  progress,
8
8
  onStepComplete
9
- }: LearningViewProps): react_jsx_runtime4.JSX.Element;
9
+ }: LearningViewProps): react_jsx_runtime3.JSX.Element;
10
10
  //#endregion
11
11
  export { Steps };
12
12
  //# sourceMappingURL=Steps.d.ts.map
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "@contractspec/example.learning-journey-ui-coaching",
3
- "version": "1.46.0",
3
+ "version": "1.47.0",
4
4
  "description": "Contextual coaching UI with tip cards and engagement tracking.",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
6
  "types": "./dist/index.d.ts",
8
7
  "exports": {
9
8
  ".": "./dist/index.js",
@@ -36,26 +35,25 @@
36
35
  "test": "bun test"
37
36
  },
38
37
  "dependencies": {
39
- "@contractspec/lib.contracts": "1.46.0",
40
- "@contractspec/example.learning-journey-ui-shared": "1.46.0",
41
- "@contractspec/example.learning-journey-ambient-coach": "1.46.0",
42
- "@contractspec/example.learning-journey-crm-onboarding": "1.46.0",
43
- "@contractspec/module.learning-journey": "1.46.0",
44
- "@contractspec/lib.design-system": "1.46.0",
45
- "@contractspec/lib.ui-kit-web": "1.46.0",
38
+ "@contractspec/lib.contracts": "1.47.0",
39
+ "@contractspec/example.learning-journey-ui-shared": "1.47.0",
40
+ "@contractspec/example.learning-journey-ambient-coach": "1.47.0",
41
+ "@contractspec/example.learning-journey-crm-onboarding": "1.47.0",
42
+ "@contractspec/module.learning-journey": "1.47.0",
43
+ "@contractspec/lib.design-system": "1.47.0",
44
+ "@contractspec/lib.ui-kit-web": "1.47.0",
46
45
  "react": "19.2.3"
47
46
  },
48
47
  "devDependencies": {
49
- "@contractspec/tool.tsdown": "1.46.0",
50
- "@contractspec/tool.typescript": "1.46.0",
51
- "@types/react": "^19.1.6",
52
- "tsdown": "^0.18.3",
48
+ "@contractspec/tool.tsdown": "1.47.0",
49
+ "@contractspec/tool.typescript": "1.47.0",
50
+ "@types/react": "^19.2.8",
51
+ "tsdown": "^0.19.0",
53
52
  "typescript": "^5.9.3"
54
53
  },
55
54
  "peerDependencies": {
56
55
  "react": "^19.2.3"
57
56
  },
58
- "module": "./dist/index.js",
59
57
  "publishConfig": {
60
58
  "exports": {
61
59
  ".": "./dist/index.js",
package/src/example.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { ExampleSpec } from '@contractspec/lib.contracts';
1
+ import { defineExample } from '@contractspec/lib.contracts';
2
2
 
3
- const example: ExampleSpec = {
3
+ const example = defineExample({
4
4
  meta: {
5
5
  key: 'learning-journey-ui-coaching',
6
6
  version: '1.0.0',
@@ -26,6 +26,6 @@ const example: ExampleSpec = {
26
26
  studio: { enabled: true, installable: true },
27
27
  mcp: { enabled: true },
28
28
  },
29
- };
29
+ });
30
30
 
31
31
  export default example;