@trustless-work/blocks 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +39 -13
  2. package/bin/index.js +1596 -1137
  3. package/package.json +44 -44
  4. package/templates/escrows/details/Actions.tsx +144 -149
  5. package/templates/escrows/details/Entities.tsx +1 -1
  6. package/templates/escrows/details/EntityCard.tsx +1 -3
  7. package/templates/escrows/details/EscrowDetailDialog.tsx +18 -18
  8. package/templates/escrows/details/GeneralInformation.tsx +20 -23
  9. package/templates/escrows/details/MilestoneCard.tsx +46 -47
  10. package/templates/escrows/details/MilestoneDetailDialog.tsx +1 -2
  11. package/templates/escrows/details/Milestones.tsx +0 -5
  12. package/templates/escrows/details/SuccessReleaseDialog.tsx +6 -9
  13. package/templates/escrows/details/useDetailsEscrow.ts +2 -2
  14. package/templates/escrows/escrows-by-role/cards/EscrowsCards.tsx +111 -60
  15. package/templates/escrows/escrows-by-role/cards/Filters.tsx +3 -5
  16. package/templates/escrows/escrows-by-role/table/EscrowsTable.tsx +36 -38
  17. package/templates/escrows/escrows-by-role/table/Filters.tsx +3 -5
  18. package/templates/escrows/escrows-by-role/useEscrowsByRole.shared.ts +33 -25
  19. package/templates/escrows/escrows-by-signer/cards/EscrowsCards.tsx +107 -67
  20. package/templates/escrows/escrows-by-signer/cards/Filters.tsx +3 -5
  21. package/templates/escrows/escrows-by-signer/table/EscrowsTable.tsx +28 -38
  22. package/templates/escrows/escrows-by-signer/table/Filters.tsx +3 -5
  23. package/templates/escrows/escrows-by-signer/useEscrowsBySigner.shared.ts +32 -25
  24. package/templates/escrows/multi-release/dispute-milestone/button/DisputeEscrow.tsx +98 -0
  25. package/templates/escrows/multi-release/initialize-escrow/dialog/InitializeEscrow.tsx +528 -0
  26. package/templates/escrows/multi-release/initialize-escrow/form/InitializeEscrow.tsx +506 -0
  27. package/templates/escrows/multi-release/initialize-escrow/shared/schema.ts +179 -0
  28. package/templates/escrows/multi-release/initialize-escrow/shared/useInitializeEscrow.ts +175 -0
  29. package/templates/escrows/multi-release/release-milestone/button/ReleaseEscrow.tsx +116 -0
  30. package/templates/escrows/multi-release/resolve-dispute/button/ResolveDispute.tsx +122 -0
  31. package/templates/escrows/multi-release/resolve-dispute/dialog/ResolveDispute.tsx +178 -0
  32. package/templates/escrows/multi-release/resolve-dispute/form/ResolveDispute.tsx +156 -0
  33. package/templates/escrows/multi-release/resolve-dispute/shared/schema.ts +85 -0
  34. package/templates/escrows/multi-release/resolve-dispute/shared/useResolveDispute.ts +105 -0
  35. package/templates/escrows/multi-release/update-escrow/dialog/UpdateEscrow.tsx +471 -0
  36. package/templates/escrows/multi-release/update-escrow/form/UpdateEscrow.tsx +449 -0
  37. package/templates/escrows/multi-release/update-escrow/shared/schema.ts +152 -0
  38. package/templates/escrows/multi-release/update-escrow/shared/useUpdateEscrow.ts +254 -0
  39. package/templates/escrows/{single-release → single-multi-release}/approve-milestone/button/ApproveMilestone.tsx +21 -8
  40. package/templates/escrows/{single-release → single-multi-release}/approve-milestone/dialog/ApproveMilestone.tsx +4 -4
  41. package/templates/escrows/{single-release → single-multi-release}/approve-milestone/form/ApproveMilestone.tsx +4 -4
  42. package/templates/escrows/{single-release/approve-milestone/shared → single-multi-release/approve-milestone}/useApproveMilestone.ts +17 -17
  43. package/templates/escrows/{single-release → single-multi-release}/change-milestone-status/button/ChangeMilestoneStatus.tsx +5 -5
  44. package/templates/escrows/{single-release → single-multi-release}/change-milestone-status/dialog/ChangeMilestoneStatus.tsx +5 -5
  45. package/templates/escrows/{single-release → single-multi-release}/change-milestone-status/form/ChangeMilestoneStatus.tsx +4 -4
  46. package/templates/escrows/{single-release/change-milestone-status/shared → single-multi-release/change-milestone-status}/useChangeMilestoneStatus.ts +2 -2
  47. package/templates/escrows/{single-release → single-multi-release}/fund-escrow/button/FundEscrow.tsx +4 -4
  48. package/templates/escrows/{single-release → single-multi-release}/fund-escrow/dialog/FundEscrow.tsx +3 -3
  49. package/templates/escrows/{single-release → single-multi-release}/fund-escrow/form/FundEscrow.tsx +3 -3
  50. package/templates/escrows/{single-release/fund-escrow/shared → single-multi-release/fund-escrow}/useFundEscrow.ts +2 -2
  51. package/templates/escrows/single-release/dispute-escrow/button/DisputeEscrow.tsx +3 -3
  52. package/templates/escrows/single-release/initialize-escrow/dialog/InitializeEscrow.tsx +14 -6
  53. package/templates/escrows/single-release/initialize-escrow/form/InitializeEscrow.tsx +14 -6
  54. package/templates/escrows/single-release/initialize-escrow/shared/schema.ts +0 -57
  55. package/templates/escrows/single-release/initialize-escrow/shared/useInitializeEscrow.ts +43 -2
  56. package/templates/escrows/single-release/release-escrow/button/ReleaseEscrow.tsx +5 -5
  57. package/templates/escrows/single-release/resolve-dispute/button/ResolveDispute.tsx +4 -4
  58. package/templates/escrows/single-release/resolve-dispute/dialog/ResolveDispute.tsx +4 -7
  59. package/templates/escrows/single-release/resolve-dispute/form/ResolveDispute.tsx +2 -2
  60. package/templates/escrows/single-release/resolve-dispute/shared/useResolveDispute.ts +15 -2
  61. package/templates/escrows/single-release/update-escrow/dialog/UpdateEscrow.tsx +2 -2
  62. package/templates/escrows/single-release/update-escrow/form/UpdateEscrow.tsx +2 -2
  63. package/templates/escrows/single-release/update-escrow/shared/useUpdateEscrow.ts +229 -224
  64. package/templates/{escrows/escrow-context → providers}/EscrowDialogsProvider.tsx +1 -3
  65. package/templates/{escrows/escrow-context → providers}/EscrowProvider.tsx +27 -4
  66. package/templates/providers/ReactQueryClientProvider.tsx +3 -1
  67. package/templates/providers/TrustlessWork.tsx +1 -1
  68. package/templates/escrows/details/ProgressEscrow.tsx +0 -191
  69. /package/templates/escrows/{single-release/approve-milestone/shared → single-multi-release/approve-milestone}/schema.ts +0 -0
  70. /package/templates/escrows/{single-release/change-milestone-status/shared → single-multi-release/change-milestone-status}/schema.ts +0 -0
  71. /package/templates/escrows/{single-release/fund-escrow/shared → single-multi-release/fund-escrow}/schema.ts +0 -0
  72. /package/templates/{escrows/escrow-context → providers}/EscrowAmountProvider.tsx +0 -0
@@ -1,191 +0,0 @@
1
- import { GetEscrowsFromIndexerResponse } from "@trustless-work/escrow/types";
2
- import { cn } from "@/lib/utils";
3
- import {
4
- MultiReleaseMilestone,
5
- SingleReleaseMilestone,
6
- } from "@trustless-work/escrow";
7
-
8
- type Escrow = {
9
- [K in keyof Omit<
10
- GetEscrowsFromIndexerResponse,
11
- "type" | "updatedAt" | "createdAt" | "user"
12
- >]: K extends "trustline"
13
- ? Omit<NonNullable<GetEscrowsFromIndexerResponse["trustline"]>, "name">
14
- : GetEscrowsFromIndexerResponse[K];
15
- };
16
-
17
- interface ProgressEscrowProps {
18
- escrow: Escrow;
19
- className?: string;
20
- }
21
-
22
- const ProgressCircle = ({
23
- percentage,
24
- color,
25
- size = 44,
26
- strokeWidth = 3,
27
- }: {
28
- percentage: number;
29
- color: string;
30
- size?: number;
31
- strokeWidth?: number;
32
- }) => {
33
- const radius = (size - strokeWidth) / 2;
34
- const circumference = 2 * Math.PI * radius;
35
- const strokeDashoffset = circumference - (percentage / 100) * circumference;
36
-
37
- return (
38
- <div className="relative inline-flex">
39
- <svg
40
- width={size}
41
- height={size}
42
- viewBox={`0 0 ${size} ${size}`}
43
- className="transform -rotate-90"
44
- >
45
- <circle
46
- cx={size / 2}
47
- cy={size / 2}
48
- r={radius}
49
- fill="none"
50
- stroke="rgba(226, 232, 240, 0.3)"
51
- strokeWidth={strokeWidth}
52
- />
53
- <circle
54
- cx={size / 2}
55
- cy={size / 2}
56
- r={radius}
57
- fill="none"
58
- stroke={color}
59
- strokeWidth={strokeWidth}
60
- strokeDasharray={circumference}
61
- strokeDashoffset={strokeDashoffset}
62
- strokeLinecap="round"
63
- />
64
- </svg>
65
- <div className="absolute inset-0 flex items-center justify-center text-xs font-medium">
66
- {Math.round(percentage)}%
67
- </div>
68
- </div>
69
- );
70
- };
71
-
72
- const ProgressEscrow = ({ escrow, className }: ProgressEscrowProps) => {
73
- const completedMilestones = escrow.milestones.filter(
74
- (milestone) => milestone.status === "completed"
75
- ).length;
76
- const approvedMilestones = escrow.milestones.filter(
77
- (milestone: SingleReleaseMilestone | MultiReleaseMilestone) =>
78
- ("flags" in milestone && milestone.flags?.approved === true) ||
79
- (!("flags" in milestone) &&
80
- (milestone as SingleReleaseMilestone).approved === true)
81
- ).length;
82
- const disputedMilestones = escrow.milestones.filter(
83
- (milestone: SingleReleaseMilestone | MultiReleaseMilestone) =>
84
- "flags" in milestone && milestone.flags?.disputed === true
85
- ).length;
86
- const resolvedMilestones = escrow.milestones.filter(
87
- (milestone: SingleReleaseMilestone | MultiReleaseMilestone) =>
88
- "flags" in milestone && milestone.flags?.resolved === true
89
- ).length;
90
- const releasedMilestones = escrow.milestones.filter(
91
- (milestone: SingleReleaseMilestone | MultiReleaseMilestone) =>
92
- "flags" in milestone && milestone.flags?.released === true
93
- ).length;
94
- const totalMilestones = escrow.milestones.length;
95
-
96
- const progressPercentageCompleted =
97
- totalMilestones > 0 ? (completedMilestones / totalMilestones) * 100 : 0;
98
- const progressPercentageApproved =
99
- totalMilestones > 0 ? (approvedMilestones / totalMilestones) * 100 : 0;
100
- const progressPercentageDisputed =
101
- totalMilestones > 0 ? (disputedMilestones / totalMilestones) * 100 : 0;
102
- const progressPercentageResolved =
103
- totalMilestones > 0 ? (resolvedMilestones / totalMilestones) * 100 : 0;
104
- const progressPercentageReleased =
105
- totalMilestones > 0 ? (releasedMilestones / totalMilestones) * 100 : 0;
106
-
107
- const shouldHideProgress = escrow.flags?.released || escrow.flags?.resolved;
108
- const isMultiRelease =
109
- escrow.milestones[0] && "flags" in escrow.milestones[0];
110
-
111
- if (shouldHideProgress || totalMilestones === 0) {
112
- return null;
113
- }
114
-
115
- return (
116
- <div className={cn("space-y-4 px-10 w-full", className)}>
117
- <div className="flex flex-wrap items-center justify-center gap-6">
118
- <div className="flex items-center gap-3">
119
- <ProgressCircle
120
- percentage={progressPercentageCompleted}
121
- color="#006be4"
122
- />
123
- <div className="text-xs">
124
- <div className="font-medium">Completed</div>
125
- <div className="text-muted-foreground">
126
- {completedMilestones}/{totalMilestones}
127
- </div>
128
- </div>
129
- </div>
130
-
131
- <div className="flex items-center gap-3">
132
- <ProgressCircle
133
- percentage={progressPercentageApproved}
134
- color="#15803d"
135
- />
136
- <div className="text-xs">
137
- <div className="font-medium">Approved</div>
138
- <div className="text-muted-foreground">
139
- {approvedMilestones}/{totalMilestones}
140
- </div>
141
- </div>
142
- </div>
143
-
144
- {isMultiRelease && (
145
- <>
146
- <div className="flex items-center gap-3">
147
- <ProgressCircle
148
- percentage={progressPercentageDisputed}
149
- color="#dc2626"
150
- />
151
- <div className="text-xs">
152
- <div className="font-medium">Disputed</div>
153
- <div className="text-muted-foreground">
154
- {disputedMilestones}/{totalMilestones}
155
- </div>
156
- </div>
157
- </div>
158
-
159
- <div className="flex items-center gap-3">
160
- <ProgressCircle
161
- percentage={progressPercentageResolved}
162
- color="#15803d"
163
- />
164
- <div className="text-xs">
165
- <div className="font-medium">Resolved</div>
166
- <div className="text-muted-foreground">
167
- {resolvedMilestones}/{totalMilestones}
168
- </div>
169
- </div>
170
- </div>
171
-
172
- <div className="flex items-center gap-3">
173
- <ProgressCircle
174
- percentage={progressPercentageReleased}
175
- color="#15803d"
176
- />
177
- <div className="text-xs">
178
- <div className="font-medium">Released</div>
179
- <div className="text-muted-foreground">
180
- {releasedMilestones}/{totalMilestones}
181
- </div>
182
- </div>
183
- </div>
184
- </>
185
- )}
186
- </div>
187
- </div>
188
- );
189
- };
190
-
191
- export default ProgressEscrow;