@ansiversa/components 0.0.135 → 0.0.137

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ansiversa/components",
3
- "version": "0.0.135",
3
+ "version": "0.0.137",
4
4
  "description": "Shared UI components and layouts for the Ansiversa ecosystem",
5
5
  "type": "module",
6
6
  "exports": {
@@ -17,6 +17,13 @@ const formatDateTime = (value: string | null, fallback = "Not yet") => {
17
17
 
18
18
  const flashnoteBaseUrl = buildAppUrl(summary.appId);
19
19
  const decksUrl = buildAppUrl(summary.appId, "/decks");
20
+ const trackOpenPayload = JSON.stringify({
21
+ id: summary.appId,
22
+ key: summary.appId,
23
+ name: "FlashNote",
24
+ description: "FlashNote",
25
+ url: flashnoteBaseUrl,
26
+ });
20
27
  ---
21
28
 
22
29
  <section class="av-auth-stack-lg">
@@ -25,7 +32,13 @@ const decksUrl = buildAppUrl(summary.appId, "/decks");
25
32
  <p class="av-text-soft">Last study: {formatDateTime(summary.lastStudyAt)}</p>
26
33
  </div>
27
34
  <div class="av-row-wrap">
28
- <AvButton href={flashnoteBaseUrl} size="sm">Open FlashNote</AvButton>
35
+ <AvButton
36
+ href={flashnoteBaseUrl}
37
+ size="sm"
38
+ onclick={`window.dispatchEvent(new CustomEvent('ansiversa:app-opened', { detail: ${trackOpenPayload} }))`}
39
+ >
40
+ Open App ->
41
+ </AvButton>
29
42
  <AvButton href={decksUrl} size="sm" variant="ghost">View decks</AvButton>
30
43
  </div>
31
44
  </div>
@@ -19,6 +19,13 @@ const portfolioBaseUrl = buildAppUrl(summary.appId);
19
19
  const portfoliosUrl = buildAppUrl(summary.appId, "/app/portfolios");
20
20
  const completionLabel =
21
21
  typeof summary.completionHint === "number" ? `${summary.completionHint}%` : "—";
22
+ const trackOpenPayload = JSON.stringify({
23
+ id: summary.appId,
24
+ key: summary.appId,
25
+ name: "Portfolio Creator",
26
+ description: "Portfolio Creator",
27
+ url: portfolioBaseUrl,
28
+ });
22
29
  ---
23
30
 
24
31
  <section class="av-auth-stack-lg">
@@ -27,7 +34,13 @@ const completionLabel =
27
34
  <p class="av-text-soft">Last updated: {formatDateTime(summary.lastUpdatedAt)}</p>
28
35
  </div>
29
36
  <div class="av-row-wrap">
30
- <AvButton href={portfolioBaseUrl} size="sm">Open Portfolio Creator</AvButton>
37
+ <AvButton
38
+ href={portfolioBaseUrl}
39
+ size="sm"
40
+ onclick={`window.dispatchEvent(new CustomEvent('ansiversa:app-opened', { detail: ${trackOpenPayload} }))`}
41
+ >
42
+ Open App ->
43
+ </AvButton>
31
44
  <AvButton href={portfoliosUrl} size="sm" variant="ghost">View portfolios</AvButton>
32
45
  </div>
33
46
  </div>
@@ -20,6 +20,13 @@ const attemptsDelta = typeof attemptsPrevious7d === "number"
20
20
  ? summary.kpis.attemptsLast7d - attemptsPrevious7d
21
21
  : null;
22
22
  const quizBaseUrl = buildAppUrl(summary.appId);
23
+ const trackOpenPayload = JSON.stringify({
24
+ id: summary.appId,
25
+ key: summary.appId,
26
+ name: "Quiz",
27
+ description: "Quiz",
28
+ url: quizBaseUrl,
29
+ });
23
30
  ---
24
31
 
25
32
  <section class="av-auth-stack-lg">
@@ -28,7 +35,13 @@ const quizBaseUrl = buildAppUrl(summary.appId);
28
35
  <p class="av-text-soft">Last attempt: {formatDateTime(summary.kpis.lastAttemptAt)}</p>
29
36
  </div>
30
37
  <div class="av-row-wrap">
31
- <AvButton href={quizBaseUrl} size="sm">Open Quiz</AvButton>
38
+ <AvButton
39
+ href={quizBaseUrl}
40
+ size="sm"
41
+ onclick={`window.dispatchEvent(new CustomEvent('ansiversa:app-opened', { detail: ${trackOpenPayload} }))`}
42
+ >
43
+ Open App ->
44
+ </AvButton>
32
45
  <AvButton href={buildAppUrl(summary.appId, "/results")} size="sm" variant="ghost">View Results</AvButton>
33
46
  </div>
34
47
  </div>
@@ -20,6 +20,13 @@ const resumesUrl = buildAppUrl(summary.appId, "/app/resumes");
20
20
  const templatesLabel = summary.templatesUsed.length > 0 ? summary.templatesUsed.join(", ") : "No templates yet";
21
21
  const completionLabel =
22
22
  typeof summary.completionHint === "number" ? `${summary.completionHint}%` : "—";
23
+ const trackOpenPayload = JSON.stringify({
24
+ id: summary.appId,
25
+ key: summary.appId,
26
+ name: "Resume Builder",
27
+ description: "Resume Builder",
28
+ url: resumeBaseUrl,
29
+ });
23
30
  ---
24
31
 
25
32
  <section class="av-auth-stack-lg">
@@ -28,7 +35,13 @@ const completionLabel =
28
35
  <p class="av-text-soft">Last updated: {formatDateTime(summary.lastUpdatedAt)}</p>
29
36
  </div>
30
37
  <div class="av-row-wrap">
31
- <AvButton href={resumeBaseUrl} size="sm">Open Resume Builder</AvButton>
38
+ <AvButton
39
+ href={resumeBaseUrl}
40
+ size="sm"
41
+ onclick={`window.dispatchEvent(new CustomEvent('ansiversa:app-opened', { detail: ${trackOpenPayload} }))`}
42
+ >
43
+ Open App ->
44
+ </AvButton>
32
45
  <AvButton href={resumesUrl} size="sm" variant="ghost">View resumes</AvButton>
33
46
  </div>
34
47
  </div>