@happyvertical/smrt-projects 0.30.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.
- package/AGENTS.md +31 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +97 -0
- package/dist/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/collections/Issues.d.ts +107 -0
- package/dist/collections/Issues.d.ts.map +1 -0
- package/dist/collections/Projects.d.ts +90 -0
- package/dist/collections/Projects.d.ts.map +1 -0
- package/dist/collections/PullRequests.d.ts +107 -0
- package/dist/collections/PullRequests.d.ts.map +1 -0
- package/dist/collections/Repositories.d.ts +77 -0
- package/dist/collections/Repositories.d.ts.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2477 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.json +4193 -0
- package/dist/models/Comment.d.ts +77 -0
- package/dist/models/Comment.d.ts.map +1 -0
- package/dist/models/Issue.d.ts +200 -0
- package/dist/models/Issue.d.ts.map +1 -0
- package/dist/models/Label.d.ts +63 -0
- package/dist/models/Label.d.ts.map +1 -0
- package/dist/models/Project.d.ts +183 -0
- package/dist/models/Project.d.ts.map +1 -0
- package/dist/models/PullRequest.d.ts +114 -0
- package/dist/models/PullRequest.d.ts.map +1 -0
- package/dist/models/Repository.d.ts +141 -0
- package/dist/models/Repository.d.ts.map +1 -0
- package/dist/playground.d.ts +2 -0
- package/dist/playground.d.ts.map +1 -0
- package/dist/playground.js +129 -0
- package/dist/playground.js.map +1 -0
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +1956 -0
- package/dist/svelte/components/ApprovalActions.svelte +213 -0
- package/dist/svelte/components/ApprovalActions.svelte.d.ts +17 -0
- package/dist/svelte/components/ApprovalActions.svelte.d.ts.map +1 -0
- package/dist/svelte/components/BulkActions.svelte +224 -0
- package/dist/svelte/components/BulkActions.svelte.d.ts +14 -0
- package/dist/svelte/components/BulkActions.svelte.d.ts.map +1 -0
- package/dist/svelte/components/DurationDisplay.svelte +68 -0
- package/dist/svelte/components/DurationDisplay.svelte.d.ts +11 -0
- package/dist/svelte/components/DurationDisplay.svelte.d.ts.map +1 -0
- package/dist/svelte/components/RejectDialog.svelte +250 -0
- package/dist/svelte/components/RejectDialog.svelte.d.ts +17 -0
- package/dist/svelte/components/RejectDialog.svelte.d.ts.map +1 -0
- package/dist/svelte/components/TimeEntryCard.svelte +294 -0
- package/dist/svelte/components/TimeEntryCard.svelte.d.ts +17 -0
- package/dist/svelte/components/TimeEntryCard.svelte.d.ts.map +1 -0
- package/dist/svelte/components/TimeEntryList.svelte +351 -0
- package/dist/svelte/components/TimeEntryList.svelte.d.ts +17 -0
- package/dist/svelte/components/TimeEntryList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/TimeSummary.svelte +165 -0
- package/dist/svelte/components/TimeSummary.svelte.d.ts +19 -0
- package/dist/svelte/components/TimeSummary.svelte.d.ts.map +1 -0
- package/dist/svelte/components/__tests__/ApprovalActions.test.js +41 -0
- package/dist/svelte/components/__tests__/BulkActions.test.js +46 -0
- package/dist/svelte/components/__tests__/DurationDisplay.test.js +23 -0
- package/dist/svelte/components/__tests__/RejectDialog.test.js +45 -0
- package/dist/svelte/components/__tests__/TimeEntryCard.test.js +45 -0
- package/dist/svelte/components/__tests__/TimeEntryList.test.js +50 -0
- package/dist/svelte/components/__tests__/TimeSummary.test.js +39 -0
- package/dist/svelte/components/utils.d.ts +42 -0
- package/dist/svelte/components/utils.d.ts.map +1 -0
- package/dist/svelte/components/utils.js +43 -0
- package/dist/svelte/i18n.d.ts +18 -0
- package/dist/svelte/i18n.d.ts.map +1 -0
- package/dist/svelte/i18n.js +18 -0
- package/dist/svelte/index.d.ts +26 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +31 -0
- package/dist/svelte/playground.d.ts +122 -0
- package/dist/svelte/playground.d.ts.map +1 -0
- package/dist/svelte/playground.js +114 -0
- package/dist/svelte/utils.d.ts +42 -0
- package/dist/svelte/utils.d.ts.map +1 -0
- package/dist/svelte/utils.js +43 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +85 -0
- package/dist/ui.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
|
|
2
|
+
import { CreateIssueInput, CreatePRInput, IRepository, RepositoryProviderType, SearchFilters, SyncOptions } from '../types';
|
|
3
|
+
import { Issue } from './Issue';
|
|
4
|
+
import { PullRequest } from './PullRequest';
|
|
5
|
+
export interface RepositoryOptions extends SmrtObjectOptions {
|
|
6
|
+
owner?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
fullName?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
defaultBranch?: string;
|
|
11
|
+
isPrivate?: boolean;
|
|
12
|
+
providerType?: RepositoryProviderType;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
tokenConfigKey?: string;
|
|
15
|
+
tenantId?: string | null;
|
|
16
|
+
}
|
|
17
|
+
export declare class Repository extends SmrtObject {
|
|
18
|
+
/**
|
|
19
|
+
* Tenant ID for multi-tenant isolation
|
|
20
|
+
*/
|
|
21
|
+
tenantId: string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Repository owner (organization or user)
|
|
24
|
+
*/
|
|
25
|
+
owner: string;
|
|
26
|
+
/**
|
|
27
|
+
* Repository name
|
|
28
|
+
*/
|
|
29
|
+
name: string;
|
|
30
|
+
/**
|
|
31
|
+
* Full name in owner/repo format
|
|
32
|
+
*/
|
|
33
|
+
fullName: string;
|
|
34
|
+
/**
|
|
35
|
+
* Repository description
|
|
36
|
+
*/
|
|
37
|
+
description: string;
|
|
38
|
+
/**
|
|
39
|
+
* Default branch name
|
|
40
|
+
*/
|
|
41
|
+
defaultBranch: string;
|
|
42
|
+
/**
|
|
43
|
+
* Whether repository is private
|
|
44
|
+
*/
|
|
45
|
+
isPrivate: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Repository provider type
|
|
48
|
+
*/
|
|
49
|
+
providerType: RepositoryProviderType;
|
|
50
|
+
/**
|
|
51
|
+
* Base URL for self-hosted instances (GitHub Enterprise, GitLab self-hosted, etc.)
|
|
52
|
+
*/
|
|
53
|
+
baseUrl: string;
|
|
54
|
+
/**
|
|
55
|
+
* Environment variable name or config key for token resolution
|
|
56
|
+
* The token is NOT stored - only the key name is persisted
|
|
57
|
+
*/
|
|
58
|
+
tokenConfigKey: string;
|
|
59
|
+
/**
|
|
60
|
+
* Last sync timestamp
|
|
61
|
+
*/
|
|
62
|
+
lastSyncedAt: Date | null;
|
|
63
|
+
/**
|
|
64
|
+
* Transient: Cached repository client (not persisted)
|
|
65
|
+
*/
|
|
66
|
+
private _client?;
|
|
67
|
+
constructor(options?: RepositoryOptions);
|
|
68
|
+
/**
|
|
69
|
+
* Get the repository client, resolving token from config
|
|
70
|
+
*
|
|
71
|
+
* Token resolution order:
|
|
72
|
+
* 1. Environment variable matching tokenConfigKey
|
|
73
|
+
* 2. Module config value matching tokenConfigKey
|
|
74
|
+
*
|
|
75
|
+
* @returns Repository client for API operations
|
|
76
|
+
* @throws Error if token cannot be resolved
|
|
77
|
+
*/
|
|
78
|
+
getClient(): Promise<IRepository>;
|
|
79
|
+
/**
|
|
80
|
+
* Clear the cached client (useful after token refresh)
|
|
81
|
+
*/
|
|
82
|
+
clearClient(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Sync repository metadata from the provider
|
|
85
|
+
*
|
|
86
|
+
* @param options - Sync options
|
|
87
|
+
* @returns This repository with updated fields
|
|
88
|
+
*/
|
|
89
|
+
sync(options?: SyncOptions): Promise<this>;
|
|
90
|
+
/**
|
|
91
|
+
* Get issues from this repository
|
|
92
|
+
*
|
|
93
|
+
* @param filters - Optional search filters
|
|
94
|
+
* @returns Array of Issue objects (SMRT models)
|
|
95
|
+
*/
|
|
96
|
+
getIssues(filters?: SearchFilters): Promise<Issue[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Get pull requests from this repository
|
|
99
|
+
*
|
|
100
|
+
* @param filters - Optional search filters
|
|
101
|
+
* @returns Array of PullRequest objects (SMRT models)
|
|
102
|
+
*/
|
|
103
|
+
getPullRequests(filters?: SearchFilters): Promise<PullRequest[]>;
|
|
104
|
+
/**
|
|
105
|
+
* Create a new issue in this repository
|
|
106
|
+
*
|
|
107
|
+
* @param data - Issue creation data
|
|
108
|
+
* @returns Created Issue (SMRT model)
|
|
109
|
+
*/
|
|
110
|
+
createIssue(data: CreateIssueInput): Promise<Issue>;
|
|
111
|
+
/**
|
|
112
|
+
* Create a new pull request in this repository
|
|
113
|
+
*
|
|
114
|
+
* @param data - PR creation data
|
|
115
|
+
* @returns Created PullRequest (SMRT model)
|
|
116
|
+
*/
|
|
117
|
+
createPullRequest(data: CreatePRInput): Promise<PullRequest>;
|
|
118
|
+
/**
|
|
119
|
+
* Check if this repository has any open issues matching criteria
|
|
120
|
+
*
|
|
121
|
+
* @param criteria - Natural language description of what to check
|
|
122
|
+
* @returns True if matching issues exist
|
|
123
|
+
*/
|
|
124
|
+
hasOpenIssuesMatching(criteria: string): Promise<boolean>;
|
|
125
|
+
/**
|
|
126
|
+
* Generate a summary of repository activity
|
|
127
|
+
*
|
|
128
|
+
* @returns AI-generated summary
|
|
129
|
+
*/
|
|
130
|
+
summarizeActivity(): Promise<string>;
|
|
131
|
+
/**
|
|
132
|
+
* Get repository by owner and name
|
|
133
|
+
*
|
|
134
|
+
* @param owner - Repository owner
|
|
135
|
+
* @param name - Repository name
|
|
136
|
+
* @param options - Additional options
|
|
137
|
+
* @returns Repository or null if not found
|
|
138
|
+
*/
|
|
139
|
+
static getByFullName(owner: string, name: string, options?: SmrtObjectOptions): Promise<Repository | null>;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=Repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/models/Repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,sBAAsB,EAEtB,aAAa,EACb,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAQa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAM;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAM;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAM;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAU;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAS;IAE3B;;OAEG;IACH,YAAY,EAAE,sBAAsB,CAAY;IAEhD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAM;IAErB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAkB;IAExC;;OAEG;IACH,YAAY,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAAc;gBAElB,OAAO,GAAE,iBAAsB;IAmB3C;;;;;;;;;OASG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BvC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpD;;;;;OAKG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAM1D;;;;;OAKG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAUtE;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IA8BzD;;;;;OAKG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAkClE;;;;;OAKG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAW1C;;;;;;;OAOG;WACU,aAAa,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAO9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { PROJECTS_MODULE_META } from "./ui.js";
|
|
2
|
+
const noop = () => {
|
|
3
|
+
};
|
|
4
|
+
const sampleTimeEntries = [
|
|
5
|
+
{
|
|
6
|
+
id: "time-entry-1",
|
|
7
|
+
date: "2026-03-18T16:00:00.000Z",
|
|
8
|
+
hours: 6.5,
|
|
9
|
+
description: "Editorial governance review and fact-linking pass",
|
|
10
|
+
status: "submitted",
|
|
11
|
+
amount: 780,
|
|
12
|
+
workerName: "Taylor Rowan",
|
|
13
|
+
hourlyRate: 120,
|
|
14
|
+
mileage: 18
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "time-entry-2",
|
|
18
|
+
date: "2026-03-19T16:00:00.000Z",
|
|
19
|
+
hours: 4.25,
|
|
20
|
+
description: "Content workflow instrumentation and approval QA",
|
|
21
|
+
status: "approved",
|
|
22
|
+
amount: 510,
|
|
23
|
+
workerName: "Jordan Lee",
|
|
24
|
+
hourlyRate: 120
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "time-entry-3",
|
|
28
|
+
date: "2026-03-20T16:00:00.000Z",
|
|
29
|
+
hours: 2,
|
|
30
|
+
description: "Follow-up revisions for contributor feedback",
|
|
31
|
+
status: "draft",
|
|
32
|
+
amount: 240,
|
|
33
|
+
workerName: "Casey Tran",
|
|
34
|
+
hourlyRate: 120
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
const totalHours = sampleTimeEntries.reduce(
|
|
38
|
+
(sum, entry) => sum + entry.hours,
|
|
39
|
+
0
|
|
40
|
+
);
|
|
41
|
+
const totalAmount = sampleTimeEntries.reduce(
|
|
42
|
+
(sum, entry) => sum + (entry.amount ?? 0),
|
|
43
|
+
0
|
|
44
|
+
);
|
|
45
|
+
const pendingEntries = sampleTimeEntries.filter(
|
|
46
|
+
(entry) => entry.status === "submitted"
|
|
47
|
+
);
|
|
48
|
+
const loadApprovalActions = () => import("./svelte/components/ApprovalActions.svelte");
|
|
49
|
+
const loadTimeEntryList = () => import("./svelte/components/TimeEntryList.svelte");
|
|
50
|
+
const loadTimeSummary = () => import("./svelte/components/TimeSummary.svelte");
|
|
51
|
+
const playground = {
|
|
52
|
+
packageName: "@happyvertical/smrt-projects",
|
|
53
|
+
displayName: PROJECTS_MODULE_META.displayName,
|
|
54
|
+
description: PROJECTS_MODULE_META.description,
|
|
55
|
+
moduleMeta: PROJECTS_MODULE_META,
|
|
56
|
+
entries: [
|
|
57
|
+
{
|
|
58
|
+
id: "time-entry-list",
|
|
59
|
+
title: "Time Entry List",
|
|
60
|
+
description: "Selectable list view for recent time entries with billing context.",
|
|
61
|
+
loadComponent: loadTimeEntryList,
|
|
62
|
+
order: 1,
|
|
63
|
+
props: {
|
|
64
|
+
entries: sampleTimeEntries,
|
|
65
|
+
selectable: true,
|
|
66
|
+
selectedIds: ["time-entry-1"],
|
|
67
|
+
currency: "CAD",
|
|
68
|
+
onselectionchange: noop,
|
|
69
|
+
baseHref: "/projects/time-entries"
|
|
70
|
+
},
|
|
71
|
+
modes: {
|
|
72
|
+
mock: {
|
|
73
|
+
label: "Mock"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "time-summary",
|
|
79
|
+
title: "Time Summary",
|
|
80
|
+
description: "Hours and value summary cards for a project review period.",
|
|
81
|
+
loadComponent: loadTimeSummary,
|
|
82
|
+
order: 2,
|
|
83
|
+
props: {
|
|
84
|
+
totalHours,
|
|
85
|
+
totalAmount,
|
|
86
|
+
pendingHours: pendingEntries.reduce(
|
|
87
|
+
(sum, entry) => sum + entry.hours,
|
|
88
|
+
0
|
|
89
|
+
),
|
|
90
|
+
pendingAmount: pendingEntries.reduce(
|
|
91
|
+
(sum, entry) => sum + (entry.amount ?? 0),
|
|
92
|
+
0
|
|
93
|
+
),
|
|
94
|
+
approvedHours: sampleTimeEntries.filter((entry) => entry.status === "approved").reduce((sum, entry) => sum + entry.hours, 0),
|
|
95
|
+
approvedAmount: sampleTimeEntries.filter((entry) => entry.status === "approved").reduce((sum, entry) => sum + (entry.amount ?? 0), 0),
|
|
96
|
+
entryCount: sampleTimeEntries.length,
|
|
97
|
+
currency: "CAD",
|
|
98
|
+
showApproved: true
|
|
99
|
+
},
|
|
100
|
+
modes: {
|
|
101
|
+
mock: {
|
|
102
|
+
label: "Mock"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "approval-actions",
|
|
108
|
+
title: "Approval Actions",
|
|
109
|
+
description: "Status-sensitive action row for approving or returning submitted work.",
|
|
110
|
+
loadComponent: loadApprovalActions,
|
|
111
|
+
order: 3,
|
|
112
|
+
props: {
|
|
113
|
+
status: "submitted",
|
|
114
|
+
onapprove: noop,
|
|
115
|
+
onreject: noop,
|
|
116
|
+
onedit: noop
|
|
117
|
+
},
|
|
118
|
+
modes: {
|
|
119
|
+
mock: {
|
|
120
|
+
label: "Mock"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
};
|
|
126
|
+
export {
|
|
127
|
+
playground as default
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=playground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.js","sources":["../src/svelte/playground.ts"],"sourcesContent":["import { PROJECTS_MODULE_META } from '../ui.js';\n\nconst noop = () => {};\n\nconst sampleTimeEntries = [\n {\n id: 'time-entry-1',\n date: '2026-03-18T16:00:00.000Z',\n hours: 6.5,\n description: 'Editorial governance review and fact-linking pass',\n status: 'submitted',\n amount: 780,\n workerName: 'Taylor Rowan',\n hourlyRate: 120,\n mileage: 18,\n },\n {\n id: 'time-entry-2',\n date: '2026-03-19T16:00:00.000Z',\n hours: 4.25,\n description: 'Content workflow instrumentation and approval QA',\n status: 'approved',\n amount: 510,\n workerName: 'Jordan Lee',\n hourlyRate: 120,\n },\n {\n id: 'time-entry-3',\n date: '2026-03-20T16:00:00.000Z',\n hours: 2,\n description: 'Follow-up revisions for contributor feedback',\n status: 'draft',\n amount: 240,\n workerName: 'Casey Tran',\n hourlyRate: 120,\n },\n];\n\nconst totalHours = sampleTimeEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n);\nconst totalAmount = sampleTimeEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n);\nconst pendingEntries = sampleTimeEntries.filter(\n (entry) => entry.status === 'submitted',\n);\n\nconst loadApprovalActions = () => import('./components/ApprovalActions.svelte');\nconst loadTimeEntryList = () => import('./components/TimeEntryList.svelte');\nconst loadTimeSummary = () => import('./components/TimeSummary.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-projects',\n displayName: PROJECTS_MODULE_META.displayName,\n description: PROJECTS_MODULE_META.description,\n moduleMeta: PROJECTS_MODULE_META,\n entries: [\n {\n id: 'time-entry-list',\n title: 'Time Entry List',\n description:\n 'Selectable list view for recent time entries with billing context.',\n loadComponent: loadTimeEntryList,\n order: 1,\n props: {\n entries: sampleTimeEntries,\n selectable: true,\n selectedIds: ['time-entry-1'],\n currency: 'CAD',\n onselectionchange: noop,\n baseHref: '/projects/time-entries',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'time-summary',\n title: 'Time Summary',\n description: 'Hours and value summary cards for a project review period.',\n loadComponent: loadTimeSummary,\n order: 2,\n props: {\n totalHours,\n totalAmount,\n pendingHours: pendingEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n ),\n pendingAmount: pendingEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n ),\n approvedHours: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + entry.hours, 0),\n approvedAmount: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + (entry.amount ?? 0), 0),\n entryCount: sampleTimeEntries.length,\n currency: 'CAD',\n showApproved: true,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'approval-actions',\n title: 'Approval Actions',\n description:\n 'Status-sensitive action row for approving or returning submitted work.',\n loadComponent: loadApprovalActions,\n order: 3,\n props: {\n status: 'submitted',\n onapprove: noop,\n onreject: noop,\n onedit: noop,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,8BAA8B,wDAyBzC,CAAC"}
|