@happyvertical/smrt-projects 0.40.66 → 0.40.67
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +489 -420
- package/dist/index.js.map +1 -1
- package/dist/managed-client.d.ts +9 -0
- package/dist/managed-client.d.ts.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/playground.js +48 -3
- package/dist/playground.js.map +1 -1
- package/dist/project-board-types.d.ts +12 -0
- package/dist/project-board-types.d.ts.map +1 -0
- package/dist/project-board-types.js +0 -0
- package/dist/services/delivery-service.d.ts +1 -1
- package/dist/services/delivery-service.d.ts.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/project-board-service.d.ts +32 -0
- package/dist/services/project-board-service.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +5 -3
- package/dist/svelte/DevelopmentBoard.svelte +54 -74
- package/dist/svelte/DevelopmentBoard.svelte.d.ts.map +1 -1
- package/dist/svelte/ProjectBoard.svelte +157 -0
- package/dist/svelte/ProjectBoard.svelte.d.ts +32 -0
- package/dist/svelte/ProjectBoard.svelte.d.ts.map +1 -0
- package/dist/svelte/components/__tests__/ProjectBoard.test.js +156 -0
- package/dist/svelte/i18n.d.ts +2 -0
- package/dist/svelte/i18n.d.ts.map +1 -1
- package/dist/svelte/i18n.js +2 -0
- package/dist/svelte/index.d.ts +4 -1
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +3 -1
- package/dist/svelte/playground.d.ts +99 -0
- package/dist/svelte/playground.d.ts.map +1 -1
- package/dist/svelte/playground.js +49 -3
- package/dist/svelte/project-board-types.d.ts +3 -0
- package/dist/svelte/project-board-types.d.ts.map +1 -0
- package/dist/svelte/project-board-types.js +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +10 -1
- package/dist/ui.js.map +1 -1
- package/package.json +11 -10
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { expectNoA11yViolations, fireEvent, render, screen, userEvent, } from '@happyvertical/smrt-vitest/svelte';
|
|
3
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
4
|
+
import ProjectBoard from '../../ProjectBoard.svelte';
|
|
5
|
+
const statuses = [
|
|
6
|
+
{ id: 'todo', name: 'Todo', order: 0 },
|
|
7
|
+
{ id: 'done', name: 'Done', order: 1 },
|
|
8
|
+
];
|
|
9
|
+
const items = [
|
|
10
|
+
{
|
|
11
|
+
id: 'item-1',
|
|
12
|
+
contentId: 'content-1',
|
|
13
|
+
title: 'Publish release notes',
|
|
14
|
+
status: 'Todo',
|
|
15
|
+
fields: {},
|
|
16
|
+
type: 'Issue',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'item-2',
|
|
20
|
+
contentId: 'content-2',
|
|
21
|
+
title: 'Stale provider status',
|
|
22
|
+
status: 'Provider-only',
|
|
23
|
+
fields: {},
|
|
24
|
+
type: 'DraftIssue',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
const sameStatusItems = [
|
|
28
|
+
items[0],
|
|
29
|
+
{
|
|
30
|
+
id: 'item-3',
|
|
31
|
+
contentId: 'content-3',
|
|
32
|
+
title: 'Review release notes',
|
|
33
|
+
status: 'Todo',
|
|
34
|
+
fields: {},
|
|
35
|
+
type: 'Issue',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
describe('ProjectBoard', () => {
|
|
39
|
+
it('does not persist same-status keyboard or pointer reordering', async () => {
|
|
40
|
+
const onmove = vi.fn().mockResolvedValue(undefined);
|
|
41
|
+
const onrefresh = vi.fn().mockResolvedValue(undefined);
|
|
42
|
+
render(ProjectBoard, {
|
|
43
|
+
props: {
|
|
44
|
+
projectId: 'project-1',
|
|
45
|
+
statuses,
|
|
46
|
+
items: sameStatusItems,
|
|
47
|
+
onmove,
|
|
48
|
+
onrefresh,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
const first = screen.getByRole('button', {
|
|
52
|
+
name: /Publish release notes/,
|
|
53
|
+
});
|
|
54
|
+
const second = screen.getByRole('button', {
|
|
55
|
+
name: /Review release notes/,
|
|
56
|
+
});
|
|
57
|
+
first.focus();
|
|
58
|
+
await userEvent.keyboard(' ');
|
|
59
|
+
await userEvent.keyboard('{ArrowDown}');
|
|
60
|
+
await userEvent.keyboard(' ');
|
|
61
|
+
fireEvent.dragStart(first, { dataTransfer: { setData: vi.fn() } });
|
|
62
|
+
fireEvent.drop(second, { clientY: 999 });
|
|
63
|
+
expect(onmove).not.toHaveBeenCalled();
|
|
64
|
+
expect(onrefresh).not.toHaveBeenCalled();
|
|
65
|
+
expect(screen.queryByText(/Moved Publish release notes to Todo/i)).not.toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
it('stays read-only when a browser move callback has no authoritative refresh', async () => {
|
|
68
|
+
const onmove = vi.fn();
|
|
69
|
+
render(ProjectBoard, {
|
|
70
|
+
// Runtime callers can bypass the public discriminated callback contract.
|
|
71
|
+
// The adapter must still avoid a move that cannot reconcile its cards.
|
|
72
|
+
props: {
|
|
73
|
+
projectId: 'project-1',
|
|
74
|
+
statuses,
|
|
75
|
+
items: [items[0]],
|
|
76
|
+
onmove,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const card = screen.getByRole('button', {
|
|
80
|
+
name: /Publish release notes/,
|
|
81
|
+
});
|
|
82
|
+
await userEvent.click(card);
|
|
83
|
+
card.focus();
|
|
84
|
+
await userEvent.keyboard(' ');
|
|
85
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
86
|
+
await userEvent.keyboard(' ');
|
|
87
|
+
expect(onmove).not.toHaveBeenCalled();
|
|
88
|
+
});
|
|
89
|
+
it('preserves supplied status order, keeps unmatched items visible, and sends a pure move intent', async () => {
|
|
90
|
+
const onmove = vi.fn().mockResolvedValue(undefined);
|
|
91
|
+
const onrefresh = vi.fn().mockResolvedValue(undefined);
|
|
92
|
+
const onselect = vi.fn();
|
|
93
|
+
const { container } = render(ProjectBoard, {
|
|
94
|
+
props: {
|
|
95
|
+
projectId: 'project-1',
|
|
96
|
+
statuses,
|
|
97
|
+
items,
|
|
98
|
+
onmove,
|
|
99
|
+
onrefresh,
|
|
100
|
+
onselect,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
const lanes = Array.from(container.querySelectorAll('.smrt-board__lane'));
|
|
104
|
+
expect(lanes.map((lane) => lane.getAttribute('aria-label'))).toEqual([
|
|
105
|
+
'Todo, 1 cards',
|
|
106
|
+
'Done, 0 cards',
|
|
107
|
+
'Unassigned, 1 cards',
|
|
108
|
+
]);
|
|
109
|
+
expect(screen.getByText('Stale provider status')).toBeVisible();
|
|
110
|
+
const card = screen.getByRole('button', {
|
|
111
|
+
name: /Publish release notes/,
|
|
112
|
+
});
|
|
113
|
+
await userEvent.click(card);
|
|
114
|
+
expect(onselect).toHaveBeenCalledWith(items[0]);
|
|
115
|
+
card.focus();
|
|
116
|
+
await userEvent.keyboard(' ');
|
|
117
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
118
|
+
await userEvent.keyboard(' ');
|
|
119
|
+
await vi.waitFor(() => {
|
|
120
|
+
expect(onmove).toHaveBeenCalledWith({
|
|
121
|
+
projectId: 'project-1',
|
|
122
|
+
itemId: 'item-1',
|
|
123
|
+
status: 'Done',
|
|
124
|
+
});
|
|
125
|
+
expect(onrefresh).toHaveBeenCalledTimes(1);
|
|
126
|
+
});
|
|
127
|
+
await expectNoA11yViolations(container);
|
|
128
|
+
});
|
|
129
|
+
it('refreshes authoritative state and lets Board make one sanitized failure announcement', async () => {
|
|
130
|
+
const onmove = vi
|
|
131
|
+
.fn()
|
|
132
|
+
.mockRejectedValue(new Error('provider token detail'));
|
|
133
|
+
const onrefresh = vi.fn().mockResolvedValue(undefined);
|
|
134
|
+
render(ProjectBoard, {
|
|
135
|
+
props: {
|
|
136
|
+
projectId: 'project-1',
|
|
137
|
+
statuses,
|
|
138
|
+
items: [items[0]],
|
|
139
|
+
onmove,
|
|
140
|
+
onrefresh,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
const card = screen.getByRole('button', {
|
|
144
|
+
name: /Publish release notes/,
|
|
145
|
+
});
|
|
146
|
+
card.focus();
|
|
147
|
+
await userEvent.keyboard(' ');
|
|
148
|
+
await userEvent.keyboard('{ArrowRight}');
|
|
149
|
+
await userEvent.keyboard(' ');
|
|
150
|
+
await vi.waitFor(() => {
|
|
151
|
+
expect(onrefresh).toHaveBeenCalledTimes(1);
|
|
152
|
+
expect(screen.getByText('Could not move Publish release notes. The board was restored.')).toBeVisible();
|
|
153
|
+
expect(screen.getAllByText('Could not move Publish release notes. The board was restored.')).toHaveLength(1);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
package/dist/svelte/i18n.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export declare const M: {
|
|
|
11
11
|
readonly 'projects.development_request.list_aria': "projects.development_request.list_aria";
|
|
12
12
|
readonly 'projects.development_board.aria': "projects.development_board.aria";
|
|
13
13
|
readonly 'projects.development_board.empty': "projects.development_board.empty";
|
|
14
|
+
readonly 'projects.project_board.aria': "projects.project_board.aria";
|
|
15
|
+
readonly 'projects.project_board.unassigned': "projects.project_board.unassigned";
|
|
14
16
|
readonly 'projects.development_request.detail_aria': "projects.development_request.detail_aria";
|
|
15
17
|
readonly 'projects.development_request.status': "projects.development_request.status";
|
|
16
18
|
readonly 'projects.development_request.visibility': "projects.development_request.visibility";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDZ,CAAC"}
|
package/dist/svelte/i18n.js
CHANGED
|
@@ -12,6 +12,8 @@ export const M = defineMessages({
|
|
|
12
12
|
'projects.development_request.list_aria': 'Development requests',
|
|
13
13
|
'projects.development_board.aria': 'Development board',
|
|
14
14
|
'projects.development_board.empty': 'No visible development work',
|
|
15
|
+
'projects.project_board.aria': 'Project board',
|
|
16
|
+
'projects.project_board.unassigned': 'Unassigned',
|
|
15
17
|
'projects.development_request.detail_aria': 'Development request details',
|
|
16
18
|
'projects.development_request.status': 'Status',
|
|
17
19
|
'projects.development_request.visibility': 'Visibility',
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -21,8 +21,9 @@ import DeliveryStatus from './DeliveryStatus.svelte';
|
|
|
21
21
|
import DevelopmentBoard from './DevelopmentBoard.svelte';
|
|
22
22
|
import DevelopmentRequestDetail from './DevelopmentRequestDetail.svelte';
|
|
23
23
|
import PreviewApprovalPanel from './PreviewApprovalPanel.svelte';
|
|
24
|
+
import ProjectBoard from './ProjectBoard.svelte';
|
|
24
25
|
import ServiceEvidenceList from './ServiceEvidenceList.svelte';
|
|
25
|
-
export { ApprovalActions, AssistanceLauncher, BulkActions, DeliveryStatus, DevelopmentBoard, DevelopmentRequestDetail, DevelopmentRequestForm, DevelopmentRequestList, DurationDisplay, PreviewApprovalPanel, RejectDialog, ServiceEvidenceList, TimeEntryCard, TimeEntryList, TimeSummary, };
|
|
26
|
+
export { ApprovalActions, AssistanceLauncher, BulkActions, DeliveryStatus, DevelopmentBoard, DevelopmentRequestDetail, DevelopmentRequestForm, DevelopmentRequestList, DurationDisplay, PreviewApprovalPanel, ProjectBoard, RejectDialog, ServiceEvidenceList, TimeEntryCard, TimeEntryList, TimeSummary, };
|
|
26
27
|
export type ApprovalActionsProps = ComponentProps<typeof ApprovalActions>;
|
|
27
28
|
export type AssistanceLauncherProps = ComponentProps<typeof AssistanceLauncher>;
|
|
28
29
|
export type BulkActionsProps = ComponentProps<typeof BulkActions>;
|
|
@@ -34,10 +35,12 @@ export type DevelopmentRequestListProps = ComponentProps<typeof DevelopmentReque
|
|
|
34
35
|
export type DurationDisplayProps = ComponentProps<typeof DurationDisplay>;
|
|
35
36
|
export type RejectDialogProps = ComponentProps<typeof RejectDialog>;
|
|
36
37
|
export type PreviewApprovalPanelProps = ComponentProps<typeof PreviewApprovalPanel>;
|
|
38
|
+
export type ProjectBoardProps = ComponentProps<typeof ProjectBoard>;
|
|
37
39
|
export type ServiceEvidenceListProps = ComponentProps<typeof ServiceEvidenceList>;
|
|
38
40
|
export type TimeEntryCardProps = ComponentProps<typeof TimeEntryCard>;
|
|
39
41
|
export type TimeEntryListProps = ComponentProps<typeof TimeEntryList>;
|
|
40
42
|
export type TimeSummaryProps = ComponentProps<typeof TimeSummary>;
|
|
41
43
|
export * from './delivery-types.js';
|
|
44
|
+
export type { ProjectBoardMoveIntent } from './project-board-types.js';
|
|
42
45
|
export { type ApprovalStatus, type Currency, formatCurrency, formatDate, formatHours, formatHoursHHMM, statusColors, type TimeEntry, type TimeEntryStatus, } from './utils.js';
|
|
43
46
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,kBAAkB,MAAM,6BAA6B,CAAC;AAE7D,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,sBAAsB,MAAM,4CAA4C,CAAC;AAChF,OAAO,sBAAsB,MAAM,4CAA4C,CAAC;AAChF,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,gBAAgB,MAAM,2BAA2B,CAAC;AACzD,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,oBAAoB,MAAM,+BAA+B,CAAC;AACjE,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,GACZ,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5E,MAAM,MAAM,2BAA2B,GAAG,cAAc,CACtD,OAAO,sBAAsB,CAC9B,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,cAAc,CACxD,OAAO,wBAAwB,CAChC,CAAC;AACF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CACtD,OAAO,sBAAsB,CAC9B,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,yBAAyB,GAAG,cAAc,CACpD,OAAO,oBAAoB,CAC5B,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG,cAAc,CACnD,OAAO,mBAAmB,CAC3B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAElE,cAAc,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,kBAAkB,MAAM,6BAA6B,CAAC;AAE7D,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,sBAAsB,MAAM,4CAA4C,CAAC;AAChF,OAAO,sBAAsB,MAAM,4CAA4C,CAAC;AAChF,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,WAAW,MAAM,iCAAiC,CAAC;AAC1D,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,gBAAgB,MAAM,2BAA2B,CAAC;AACzD,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,oBAAoB,MAAM,+BAA+B,CAAC;AACjE,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,GACZ,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,cAAc,CAAC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5E,MAAM,MAAM,2BAA2B,GAAG,cAAc,CACtD,OAAO,sBAAsB,CAC9B,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG,cAAc,CACxD,OAAO,wBAAwB,CAChC,CAAC;AACF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CACtD,OAAO,sBAAsB,CAC9B,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,yBAAyB,GAAG,cAAc,CACpD,OAAO,oBAAoB,CAC5B,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;AACpE,MAAM,MAAM,wBAAwB,GAAG,cAAc,CACnD,OAAO,mBAAmB,CAC3B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAElE,cAAc,qBAAqB,CAAC;AACpC,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC"}
|
package/dist/svelte/index.js
CHANGED
|
@@ -23,15 +23,17 @@ import DeliveryStatus from './DeliveryStatus.svelte';
|
|
|
23
23
|
import DevelopmentBoard from './DevelopmentBoard.svelte';
|
|
24
24
|
import DevelopmentRequestDetail from './DevelopmentRequestDetail.svelte';
|
|
25
25
|
import PreviewApprovalPanel from './PreviewApprovalPanel.svelte';
|
|
26
|
+
import ProjectBoard from './ProjectBoard.svelte';
|
|
26
27
|
import ServiceEvidenceList from './ServiceEvidenceList.svelte';
|
|
27
28
|
// Export components
|
|
28
|
-
export { ApprovalActions, AssistanceLauncher, BulkActions, DeliveryStatus, DevelopmentBoard, DevelopmentRequestDetail, DevelopmentRequestForm, DevelopmentRequestList, DurationDisplay, PreviewApprovalPanel, RejectDialog, ServiceEvidenceList, TimeEntryCard, TimeEntryList, TimeSummary, };
|
|
29
|
+
export { ApprovalActions, AssistanceLauncher, BulkActions, DeliveryStatus, DevelopmentBoard, DevelopmentRequestDetail, DevelopmentRequestForm, DevelopmentRequestList, DurationDisplay, PreviewApprovalPanel, ProjectBoard, RejectDialog, ServiceEvidenceList, TimeEntryCard, TimeEntryList, TimeSummary, };
|
|
29
30
|
export * from './delivery-types.js';
|
|
30
31
|
// Export types and utilities
|
|
31
32
|
export { formatCurrency, formatDate, formatHours, formatHoursHHMM, statusColors, } from './utils.js';
|
|
32
33
|
// Auto-register with ModuleUIRegistry
|
|
33
34
|
ModuleUIRegistry.registerModule(PROJECTS_MODULE_META);
|
|
34
35
|
ModuleUIRegistry.register('@happyvertical/smrt-projects', 'development-board', DevelopmentBoard);
|
|
36
|
+
ModuleUIRegistry.register('@happyvertical/smrt-projects', 'project-board', ProjectBoard);
|
|
35
37
|
ModuleUIRegistry.register('@happyvertical/smrt-projects', 'delivery-status', DeliveryStatus);
|
|
36
38
|
ModuleUIRegistry.register('@happyvertical/smrt-projects', 'preview-approval', PreviewApprovalPanel);
|
|
37
39
|
ModuleUIRegistry.register('@happyvertical/smrt-projects', 'assistance-launcher', AssistanceLauncher);
|
|
@@ -4,6 +4,93 @@ declare const _default: {
|
|
|
4
4
|
description: string | undefined;
|
|
5
5
|
moduleMeta: import("@happyvertical/smrt-types").SmrtModuleMeta;
|
|
6
6
|
entries: ({
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
loadComponent: () => Promise<typeof import("./ProjectBoard.svelte")>;
|
|
11
|
+
order: number;
|
|
12
|
+
props: {
|
|
13
|
+
projectId: string;
|
|
14
|
+
statuses: {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
order: number;
|
|
18
|
+
}[];
|
|
19
|
+
items: {
|
|
20
|
+
id: string;
|
|
21
|
+
contentId: string;
|
|
22
|
+
title: string;
|
|
23
|
+
status: string;
|
|
24
|
+
fields: {};
|
|
25
|
+
type: string;
|
|
26
|
+
}[];
|
|
27
|
+
requests?: undefined;
|
|
28
|
+
entries?: undefined;
|
|
29
|
+
selectable?: undefined;
|
|
30
|
+
selectedIds?: undefined;
|
|
31
|
+
currency?: undefined;
|
|
32
|
+
onselectionchange?: undefined;
|
|
33
|
+
baseHref?: undefined;
|
|
34
|
+
totalHours?: undefined;
|
|
35
|
+
totalAmount?: undefined;
|
|
36
|
+
pendingHours?: undefined;
|
|
37
|
+
pendingAmount?: undefined;
|
|
38
|
+
approvedHours?: undefined;
|
|
39
|
+
approvedAmount?: undefined;
|
|
40
|
+
entryCount?: undefined;
|
|
41
|
+
showApproved?: undefined;
|
|
42
|
+
status?: undefined;
|
|
43
|
+
onapprove?: undefined;
|
|
44
|
+
onreject?: undefined;
|
|
45
|
+
onedit?: undefined;
|
|
46
|
+
};
|
|
47
|
+
modes: {
|
|
48
|
+
mock: {
|
|
49
|
+
label: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
} | {
|
|
53
|
+
id: string;
|
|
54
|
+
title: string;
|
|
55
|
+
description: string;
|
|
56
|
+
loadComponent: () => Promise<typeof import("./DevelopmentBoard.svelte")>;
|
|
57
|
+
order: number;
|
|
58
|
+
props: {
|
|
59
|
+
requests: {
|
|
60
|
+
id: string;
|
|
61
|
+
description: string;
|
|
62
|
+
type: string;
|
|
63
|
+
status: string;
|
|
64
|
+
requesterLabel: string;
|
|
65
|
+
}[];
|
|
66
|
+
projectId?: undefined;
|
|
67
|
+
statuses?: undefined;
|
|
68
|
+
items?: undefined;
|
|
69
|
+
entries?: undefined;
|
|
70
|
+
selectable?: undefined;
|
|
71
|
+
selectedIds?: undefined;
|
|
72
|
+
currency?: undefined;
|
|
73
|
+
onselectionchange?: undefined;
|
|
74
|
+
baseHref?: undefined;
|
|
75
|
+
totalHours?: undefined;
|
|
76
|
+
totalAmount?: undefined;
|
|
77
|
+
pendingHours?: undefined;
|
|
78
|
+
pendingAmount?: undefined;
|
|
79
|
+
approvedHours?: undefined;
|
|
80
|
+
approvedAmount?: undefined;
|
|
81
|
+
entryCount?: undefined;
|
|
82
|
+
showApproved?: undefined;
|
|
83
|
+
status?: undefined;
|
|
84
|
+
onapprove?: undefined;
|
|
85
|
+
onreject?: undefined;
|
|
86
|
+
onedit?: undefined;
|
|
87
|
+
};
|
|
88
|
+
modes: {
|
|
89
|
+
mock: {
|
|
90
|
+
label: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
} | {
|
|
7
94
|
id: string;
|
|
8
95
|
title: string;
|
|
9
96
|
description: string;
|
|
@@ -36,6 +123,10 @@ declare const _default: {
|
|
|
36
123
|
currency: string;
|
|
37
124
|
onselectionchange: () => void;
|
|
38
125
|
baseHref: string;
|
|
126
|
+
projectId?: undefined;
|
|
127
|
+
statuses?: undefined;
|
|
128
|
+
items?: undefined;
|
|
129
|
+
requests?: undefined;
|
|
39
130
|
totalHours?: undefined;
|
|
40
131
|
totalAmount?: undefined;
|
|
41
132
|
pendingHours?: undefined;
|
|
@@ -70,6 +161,10 @@ declare const _default: {
|
|
|
70
161
|
entryCount: number;
|
|
71
162
|
currency: string;
|
|
72
163
|
showApproved: boolean;
|
|
164
|
+
projectId?: undefined;
|
|
165
|
+
statuses?: undefined;
|
|
166
|
+
items?: undefined;
|
|
167
|
+
requests?: undefined;
|
|
73
168
|
entries?: undefined;
|
|
74
169
|
selectable?: undefined;
|
|
75
170
|
selectedIds?: undefined;
|
|
@@ -96,6 +191,10 @@ declare const _default: {
|
|
|
96
191
|
onapprove: () => void;
|
|
97
192
|
onreject: () => void;
|
|
98
193
|
onedit: () => void;
|
|
194
|
+
projectId?: undefined;
|
|
195
|
+
statuses?: undefined;
|
|
196
|
+
items?: undefined;
|
|
197
|
+
requests?: undefined;
|
|
99
198
|
entries?: undefined;
|
|
100
199
|
selectable?: undefined;
|
|
101
200
|
selectedIds?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../src/svelte/playground.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../src/svelte/playground.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,wBA4HE"}
|
|
@@ -39,18 +39,64 @@ const pendingEntries = sampleTimeEntries.filter((entry) => entry.status === 'sub
|
|
|
39
39
|
const loadApprovalActions = () => import('./components/ApprovalActions.svelte');
|
|
40
40
|
const loadTimeEntryList = () => import('./components/TimeEntryList.svelte');
|
|
41
41
|
const loadTimeSummary = () => import('./components/TimeSummary.svelte');
|
|
42
|
+
const loadDevelopmentBoard = () => import('./DevelopmentBoard.svelte');
|
|
43
|
+
const loadProjectBoard = () => import('./ProjectBoard.svelte');
|
|
42
44
|
export default {
|
|
43
45
|
packageName: '@happyvertical/smrt-projects',
|
|
44
46
|
displayName: PROJECTS_MODULE_META.displayName,
|
|
45
47
|
description: PROJECTS_MODULE_META.description,
|
|
46
48
|
moduleMeta: PROJECTS_MODULE_META,
|
|
47
49
|
entries: [
|
|
50
|
+
{
|
|
51
|
+
id: 'project-board',
|
|
52
|
+
title: 'Project Board',
|
|
53
|
+
description: 'Controlled provider project board with canonical statuses.',
|
|
54
|
+
loadComponent: loadProjectBoard,
|
|
55
|
+
order: 0,
|
|
56
|
+
props: {
|
|
57
|
+
projectId: 'project-demo',
|
|
58
|
+
statuses: [
|
|
59
|
+
{ id: 'todo', name: 'Todo', order: 0 },
|
|
60
|
+
{ id: 'done', name: 'Done', order: 1 },
|
|
61
|
+
],
|
|
62
|
+
items: [
|
|
63
|
+
{
|
|
64
|
+
id: 'item-demo',
|
|
65
|
+
contentId: 'content-demo',
|
|
66
|
+
title: 'Publish project board',
|
|
67
|
+
status: 'Todo',
|
|
68
|
+
fields: {},
|
|
69
|
+
type: 'Issue',
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
modes: { mock: { label: 'Mock' } },
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'development-board',
|
|
77
|
+
title: 'Development Board',
|
|
78
|
+
description: 'Read-only delivery-status projection.',
|
|
79
|
+
loadComponent: loadDevelopmentBoard,
|
|
80
|
+
order: 1,
|
|
81
|
+
props: {
|
|
82
|
+
requests: [
|
|
83
|
+
{
|
|
84
|
+
id: 'request-demo',
|
|
85
|
+
description: 'Publish project board',
|
|
86
|
+
type: 'feature',
|
|
87
|
+
status: 'planned',
|
|
88
|
+
requesterLabel: 'Project owner',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
modes: { mock: { label: 'Mock' } },
|
|
93
|
+
},
|
|
48
94
|
{
|
|
49
95
|
id: 'time-entry-list',
|
|
50
96
|
title: 'Time Entry List',
|
|
51
97
|
description: 'Selectable list view for recent time entries with billing context.',
|
|
52
98
|
loadComponent: loadTimeEntryList,
|
|
53
|
-
order:
|
|
99
|
+
order: 2,
|
|
54
100
|
props: {
|
|
55
101
|
entries: sampleTimeEntries,
|
|
56
102
|
selectable: true,
|
|
@@ -70,7 +116,7 @@ export default {
|
|
|
70
116
|
title: 'Time Summary',
|
|
71
117
|
description: 'Hours and value summary cards for a project review period.',
|
|
72
118
|
loadComponent: loadTimeSummary,
|
|
73
|
-
order:
|
|
119
|
+
order: 3,
|
|
74
120
|
props: {
|
|
75
121
|
totalHours,
|
|
76
122
|
totalAmount,
|
|
@@ -97,7 +143,7 @@ export default {
|
|
|
97
143
|
title: 'Approval Actions',
|
|
98
144
|
description: 'Status-sensitive action row for approving or returning submitted work.',
|
|
99
145
|
loadComponent: loadApprovalActions,
|
|
100
|
-
order:
|
|
146
|
+
order: 4,
|
|
101
147
|
props: {
|
|
102
148
|
status: 'submitted',
|
|
103
149
|
onapprove: noop,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-board-types.d.ts","sourceRoot":"","sources":["../../src/svelte/project-board-types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/types.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export interface SyncStatus {
|
|
|
54
54
|
/**
|
|
55
55
|
* Managed application capability keys for project integrations.
|
|
56
56
|
*/
|
|
57
|
-
export type ProjectIntegrationCapability = 'requests:create' | 'requests:read-own' | 'delivery:write' | 'delivery:read' | 'previews:approve' | 'assistance:create' | (string & {});
|
|
57
|
+
export type ProjectIntegrationCapability = 'requests:create' | 'requests:read-own' | 'delivery:write' | 'delivery:read' | 'projects:write' | 'previews:approve' | 'assistance:create' | (string & {});
|
|
58
58
|
/**
|
|
59
59
|
* Provisioned managed-application integration lifecycle.
|
|
60
60
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,KAAK,IAAI,YAAY,EACrB,WAAW,IAAI,kBAAkB,EACjC,QAAQ,EACR,WAAW,EACX,OAAO,IAAI,UAAU,EACrB,aAAa,EACb,WAAW,EACX,MAAM,IAAI,aAAa,GACxB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,MAAM,EACN,OAAO,IAAI,UAAU,EACrB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,KAAK,IAAI,QAAQ,EACjB,KAAK,IAAI,QAAQ,EACjB,WAAW,EACX,WAAW,IAAI,cAAc,EAC7B,UAAU,IAAI,aAAa,EAC3B,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,IAAI,GACL,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,OAAO,CAAC;AACZ,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9E;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,WAAW,GACX,WAAW,GACX,QAAQ,GACR,cAAc,GACd,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAChC,WAAW,GACX,SAAS,GACT,SAAS,GACT,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAoC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACxC,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,QAAQ,GACR,cAAc,GACd,IAAI,GACJ,SAAS,GACT,UAAU,GACV,YAAY,GACZ,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,MAAM,wBAAwB,GAChC,cAAc,GACd,SAAS,GACT,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC7E,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP,WAAW,GACX,UAAU,GACV,UAAU,GACV,WAAW,CAAC;AAChB,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,0BAA0B,EAAE,CAAC;CACzC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiJ1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cA8ClC,CAAC"}
|
package/dist/ui.js
CHANGED
|
@@ -36,13 +36,22 @@ var PROJECTS_UI_SLOTS = {
|
|
|
36
36
|
order: 4,
|
|
37
37
|
propsInterface: "DevelopmentBoardProps"
|
|
38
38
|
},
|
|
39
|
+
"project-board": {
|
|
40
|
+
id: "project-board",
|
|
41
|
+
label: "Project Board",
|
|
42
|
+
description: "Provider-backed project status board",
|
|
43
|
+
icon: "columns",
|
|
44
|
+
category: "display",
|
|
45
|
+
order: 5,
|
|
46
|
+
propsInterface: "ProjectBoardProps"
|
|
47
|
+
},
|
|
39
48
|
"delivery-status": {
|
|
40
49
|
id: "delivery-status",
|
|
41
50
|
label: "Delivery Status",
|
|
42
51
|
description: "Ordered timeline of delivery outcomes",
|
|
43
52
|
icon: "activity",
|
|
44
53
|
category: "display",
|
|
45
|
-
order:
|
|
54
|
+
order: 6,
|
|
46
55
|
propsInterface: "DeliveryStatusProps"
|
|
47
56
|
},
|
|
48
57
|
"preview-approval": {
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Projects Module UI Slot Declarations\n *\n * This file defines the UI extension points for the projects module.\n * UI components are implemented in the ./svelte subpath.\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * Projects module UI slots\n */\nexport const PROJECTS_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'development-request-form': {\n id: 'development-request-form',\n label: 'Development Request Form',\n description: 'Reusable managed-application request submission form',\n icon: 'send',\n category: 'form',\n order: 1,\n propsInterface: 'DevelopmentRequestFormProps',\n },\n 'development-request-list': {\n id: 'development-request-list',\n label: 'Development Request List',\n description: 'Requester-facing list of managed development requests',\n icon: 'list',\n category: 'list',\n order: 2,\n propsInterface: 'DevelopmentRequestListProps',\n },\n 'development-request-detail': {\n id: 'development-request-detail',\n label: 'Development Request Detail',\n description: 'Provider-neutral request detail and delivery timeline',\n icon: 'file-text',\n category: 'display',\n order: 3,\n propsInterface: 'DevelopmentRequestDetailProps',\n },\n 'development-board': {\n id: 'development-board',\n label: 'Development Board',\n description: 'Visibility-filtered projection of connected delivery work',\n icon: 'columns',\n category: 'display',\n order: 4,\n propsInterface: 'DevelopmentBoardProps',\n },\n 'delivery-status': {\n id: 'delivery-status',\n label: 'Delivery Status',\n description: 'Ordered timeline of delivery outcomes',\n icon: 'activity',\n category: 'display',\n order:
|
|
1
|
+
{"version":3,"file":"ui.js","names":[],"sources":["../src/ui.ts"],"sourcesContent":["/**\n * Projects Module UI Slot Declarations\n *\n * This file defines the UI extension points for the projects module.\n * UI components are implemented in the ./svelte subpath.\n */\n\nimport type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * Projects module UI slots\n */\nexport const PROJECTS_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'development-request-form': {\n id: 'development-request-form',\n label: 'Development Request Form',\n description: 'Reusable managed-application request submission form',\n icon: 'send',\n category: 'form',\n order: 1,\n propsInterface: 'DevelopmentRequestFormProps',\n },\n 'development-request-list': {\n id: 'development-request-list',\n label: 'Development Request List',\n description: 'Requester-facing list of managed development requests',\n icon: 'list',\n category: 'list',\n order: 2,\n propsInterface: 'DevelopmentRequestListProps',\n },\n 'development-request-detail': {\n id: 'development-request-detail',\n label: 'Development Request Detail',\n description: 'Provider-neutral request detail and delivery timeline',\n icon: 'file-text',\n category: 'display',\n order: 3,\n propsInterface: 'DevelopmentRequestDetailProps',\n },\n 'development-board': {\n id: 'development-board',\n label: 'Development Board',\n description: 'Visibility-filtered projection of connected delivery work',\n icon: 'columns',\n category: 'display',\n order: 4,\n propsInterface: 'DevelopmentBoardProps',\n },\n 'project-board': {\n id: 'project-board',\n label: 'Project Board',\n description: 'Provider-backed project status board',\n icon: 'columns',\n category: 'display',\n order: 5,\n propsInterface: 'ProjectBoardProps',\n },\n 'delivery-status': {\n id: 'delivery-status',\n label: 'Delivery Status',\n description: 'Ordered timeline of delivery outcomes',\n icon: 'activity',\n category: 'display',\n order: 6,\n propsInterface: 'DeliveryStatusProps',\n },\n 'preview-approval': {\n id: 'preview-approval',\n label: 'Preview Approval',\n description: 'Approve or reject a managed delivery preview',\n icon: 'eye',\n category: 'action',\n order: 6,\n propsInterface: 'PreviewApprovalPanelProps',\n },\n 'assistance-launcher': {\n id: 'assistance-launcher',\n label: 'Assistance Launcher',\n description: 'Open a contextual support or development conversation',\n icon: 'message-circle',\n category: 'form',\n order: 7,\n propsInterface: 'AssistanceLauncherProps',\n },\n 'service-evidence-list': {\n id: 'service-evidence-list',\n label: 'Service Evidence List',\n description: 'Shared service duration, charge, and compensation evidence',\n icon: 'receipt',\n category: 'display',\n order: 8,\n propsInterface: 'ServiceEvidenceListProps',\n },\n 'time-entry-card': {\n id: 'time-entry-card',\n label: 'Time Entry Card',\n description: 'Card component for displaying time entries',\n icon: 'clock',\n category: 'display',\n order: 3,\n propsInterface: 'TimeEntryCardProps',\n },\n 'time-entry-list': {\n id: 'time-entry-list',\n label: 'Time Entry List',\n description: 'List of time entries with optional selection',\n icon: 'list',\n category: 'list',\n order: 4,\n propsInterface: 'TimeEntryListProps',\n },\n 'time-summary': {\n id: 'time-summary',\n label: 'Time Summary',\n description: 'Summary statistics for time entries',\n icon: 'chart',\n category: 'display',\n order: 5,\n propsInterface: 'TimeSummaryProps',\n },\n 'duration-display': {\n id: 'duration-display',\n label: 'Duration Display',\n description: 'Formats hours for display in decimal or HH:MM format',\n icon: 'timer',\n category: 'display',\n order: 6,\n propsInterface: 'DurationDisplayProps',\n },\n 'approval-actions': {\n id: 'approval-actions',\n label: 'Approval Actions',\n description: 'Status-based action buttons for approval workflow',\n icon: 'check',\n category: 'action',\n order: 7,\n propsInterface: 'ApprovalActionsProps',\n },\n 'bulk-actions': {\n id: 'bulk-actions',\n label: 'Bulk Actions',\n description: 'Action bar for bulk operations on selected items',\n icon: 'select-all',\n category: 'action',\n order: 8,\n propsInterface: 'BulkActionsProps',\n },\n 'reject-dialog': {\n id: 'reject-dialog',\n label: 'Reject Dialog',\n description: 'Modal dialog for rejecting with a reason',\n icon: 'x-circle',\n category: 'form',\n order: 9,\n propsInterface: 'RejectDialogProps',\n },\n};\n\n/**\n * Projects module metadata\n */\nexport const PROJECTS_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-projects',\n displayName: 'Projects',\n description:\n 'Provider-agnostic project management with managed-app request intake and time tracking',\n uiSlots: PROJECTS_UI_SLOTS,\n models: [\n 'Repository',\n 'Issue',\n 'PullRequest',\n 'Project',\n 'Comment',\n 'Label',\n 'ProjectIntegration',\n 'ProjectIntegrationAudit',\n 'DevelopmentRequest',\n 'DevelopmentRequestHistory',\n 'DevelopmentRequestWorkLink',\n 'ProjectDeliveryEvent',\n 'PreviewApproval',\n 'AssistanceRequest',\n 'AssistanceRequestEvent',\n 'ServiceTimeEntry',\n 'ServiceChargeSnapshot',\n 'ServiceCompensationSnapshot',\n ],\n collections: [\n 'RepositoryCollection',\n 'IssueCollection',\n 'PullRequestCollection',\n 'ProjectCollection',\n 'CommentCollection',\n 'LabelCollection',\n 'ProjectIntegrationCollection',\n 'ProjectIntegrationAuditCollection',\n 'DevelopmentRequestCollection',\n 'DevelopmentRequestHistoryCollection',\n 'DevelopmentRequestWorkLinkCollection',\n 'ProjectDeliveryEventCollection',\n 'PreviewApprovalCollection',\n 'AssistanceRequestCollection',\n 'AssistanceRequestEventCollection',\n 'ServiceTimeEntryCollection',\n 'ServiceChargeSnapshotCollection',\n 'ServiceCompensationSnapshotCollection',\n ],\n};\n"],"mappings":";AAYO,IAAM,oBAAkD;CAC7D,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,4BAA4B;EAC1B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,8BAA8B;EAC5B,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,qBAAqB;EACnB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,oBAAoB;EAClB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,uBAAuB;EACrB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,yBAAyB;EACvB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,mBAAmB;EACjB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,oBAAoB;EAClB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,oBAAoB;EAClB,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,gBAAgB;EACd,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;CACA,iBAAiB;EACf,IAAI;EACJ,OAAO;EACP,aAAa;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,gBAAgB;CAClB;AACF;AAKO,IAAM,uBAAuC;CAClD,MAAM;CACN,aAAa;CACb,aACE;CACF,SAAS;CACT,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-projects",
|
|
3
|
-
"version": "0.40.
|
|
3
|
+
"version": "0.40.67",
|
|
4
4
|
"description": "Provider-agnostic project management models (Issues, PRs, Repositories, Projects) for SMRT framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"smrtRawPrimitives": "strict",
|
|
@@ -40,13 +40,14 @@
|
|
|
40
40
|
"@happyvertical/repos": "^0.86.3",
|
|
41
41
|
"@happyvertical/sql": "^0.86.3",
|
|
42
42
|
"@happyvertical/utils": "^0.86.3",
|
|
43
|
-
"@happyvertical/smrt-config": "0.40.
|
|
44
|
-
"@happyvertical/smrt-core": "0.40.
|
|
45
|
-
"@happyvertical/smrt-prompts": "0.40.
|
|
46
|
-
"@happyvertical/smrt-
|
|
47
|
-
"@happyvertical/smrt-
|
|
48
|
-
"@happyvertical/smrt-
|
|
49
|
-
"@happyvertical/smrt-
|
|
43
|
+
"@happyvertical/smrt-config": "0.40.67",
|
|
44
|
+
"@happyvertical/smrt-core": "0.40.67",
|
|
45
|
+
"@happyvertical/smrt-prompts": "0.40.67",
|
|
46
|
+
"@happyvertical/smrt-svelte": "0.40.67",
|
|
47
|
+
"@happyvertical/smrt-subscriptions": "0.40.67",
|
|
48
|
+
"@happyvertical/smrt-tenancy": "0.40.67",
|
|
49
|
+
"@happyvertical/smrt-types": "0.40.67",
|
|
50
|
+
"@happyvertical/smrt-ui": "0.40.67"
|
|
50
51
|
},
|
|
51
52
|
"peerDependencies": {
|
|
52
53
|
"svelte": "^5.56.4"
|
|
@@ -66,8 +67,8 @@
|
|
|
66
67
|
"typescript": "5.9.3",
|
|
67
68
|
"vite": "8.1.4",
|
|
68
69
|
"vitest": "4.1.10",
|
|
69
|
-
"@happyvertical/smrt-cli": "0.40.
|
|
70
|
-
"@happyvertical/smrt-vitest": "0.40.
|
|
70
|
+
"@happyvertical/smrt-cli": "0.40.67",
|
|
71
|
+
"@happyvertical/smrt-vitest": "0.40.67"
|
|
71
72
|
},
|
|
72
73
|
"keywords": [
|
|
73
74
|
"ai",
|