@contractspec/example.saas-boilerplate 1.57.0 → 1.59.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.
Files changed (283) hide show
  1. package/.turbo/turbo-build.log +160 -180
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +39 -0
  4. package/dist/billing/billing.entity.d.ts +40 -45
  5. package/dist/billing/billing.entity.d.ts.map +1 -1
  6. package/dist/billing/billing.entity.js +110 -118
  7. package/dist/billing/billing.enum.d.ts +2 -7
  8. package/dist/billing/billing.enum.d.ts.map +1 -1
  9. package/dist/billing/billing.enum.js +17 -24
  10. package/dist/billing/billing.event.d.ts +67 -73
  11. package/dist/billing/billing.event.d.ts.map +1 -1
  12. package/dist/billing/billing.event.js +84 -146
  13. package/dist/billing/billing.handler.d.ts +59 -62
  14. package/dist/billing/billing.handler.d.ts.map +1 -1
  15. package/dist/billing/billing.handler.js +140 -49
  16. package/dist/billing/billing.operations.d.ts +138 -144
  17. package/dist/billing/billing.operations.d.ts.map +1 -1
  18. package/dist/billing/billing.operations.js +273 -175
  19. package/dist/billing/billing.presentation.d.ts +2 -7
  20. package/dist/billing/billing.presentation.d.ts.map +1 -1
  21. package/dist/billing/billing.presentation.js +51 -57
  22. package/dist/billing/billing.schema.d.ts +159 -164
  23. package/dist/billing/billing.schema.d.ts.map +1 -1
  24. package/dist/billing/billing.schema.js +112 -204
  25. package/dist/billing/index.d.ts +11 -8
  26. package/dist/billing/index.d.ts.map +1 -0
  27. package/dist/billing/index.js +689 -9
  28. package/dist/browser/billing/billing.entity.js +113 -0
  29. package/dist/browser/billing/billing.enum.js +19 -0
  30. package/dist/browser/billing/billing.event.js +90 -0
  31. package/dist/browser/billing/billing.handler.js +148 -0
  32. package/dist/browser/billing/billing.operations.js +278 -0
  33. package/dist/browser/billing/billing.presentation.js +52 -0
  34. package/dist/browser/billing/billing.schema.js +121 -0
  35. package/dist/browser/billing/index.js +688 -0
  36. package/dist/browser/dashboard/dashboard.presentation.js +52 -0
  37. package/dist/browser/dashboard/index.js +52 -0
  38. package/dist/browser/docs/index.js +93 -0
  39. package/dist/browser/docs/saas-boilerplate.docblock.js +93 -0
  40. package/dist/browser/example.js +39 -0
  41. package/dist/browser/handlers/index.js +358 -0
  42. package/dist/browser/handlers/saas.handlers.js +134 -0
  43. package/dist/browser/index.js +3340 -0
  44. package/dist/browser/presentations/index.js +290 -0
  45. package/dist/browser/project/index.js +790 -0
  46. package/dist/browser/project/project.entity.js +77 -0
  47. package/dist/browser/project/project.enum.js +18 -0
  48. package/dist/browser/project/project.event.js +103 -0
  49. package/dist/browser/project/project.handler.js +178 -0
  50. package/dist/browser/project/project.operations.js +372 -0
  51. package/dist/browser/project/project.presentation.js +177 -0
  52. package/dist/browser/project/project.schema.js +134 -0
  53. package/dist/browser/saas-boilerplate.feature.js +88 -0
  54. package/dist/browser/seeders/index.js +20 -0
  55. package/dist/browser/settings/index.js +75 -0
  56. package/dist/browser/settings/settings.entity.js +74 -0
  57. package/dist/browser/settings/settings.enum.js +11 -0
  58. package/dist/browser/shared/mock-data.js +104 -0
  59. package/dist/browser/shared/overlay-types.js +0 -0
  60. package/dist/browser/tests/operations.test-spec.js +112 -0
  61. package/dist/browser/ui/SaasDashboard.js +988 -0
  62. package/dist/browser/ui/SaasProjectList.js +162 -0
  63. package/dist/browser/ui/SaasSettingsPanel.js +145 -0
  64. package/dist/browser/ui/hooks/index.js +159 -0
  65. package/dist/browser/ui/hooks/useProjectList.js +66 -0
  66. package/dist/browser/ui/hooks/useProjectMutations.js +91 -0
  67. package/dist/browser/ui/index.js +1808 -0
  68. package/dist/browser/ui/modals/CreateProjectModal.js +153 -0
  69. package/dist/browser/ui/modals/ProjectActionsModal.js +335 -0
  70. package/dist/browser/ui/modals/index.js +487 -0
  71. package/dist/browser/ui/overlays/demo-overlays.js +61 -0
  72. package/dist/browser/ui/overlays/index.js +61 -0
  73. package/dist/browser/ui/renderers/index.js +675 -0
  74. package/dist/browser/ui/renderers/project-list.markdown.js +499 -0
  75. package/dist/browser/ui/renderers/project-list.renderer.js +177 -0
  76. package/dist/dashboard/dashboard.presentation.d.ts +2 -7
  77. package/dist/dashboard/dashboard.presentation.d.ts.map +1 -1
  78. package/dist/dashboard/dashboard.presentation.js +51 -53
  79. package/dist/dashboard/index.d.ts +5 -2
  80. package/dist/dashboard/index.d.ts.map +1 -0
  81. package/dist/dashboard/index.js +53 -3
  82. package/dist/docs/index.d.ts +2 -1
  83. package/dist/docs/index.d.ts.map +1 -0
  84. package/dist/docs/index.js +94 -1
  85. package/dist/docs/saas-boilerplate.docblock.d.ts +2 -1
  86. package/dist/docs/saas-boilerplate.docblock.d.ts.map +1 -0
  87. package/dist/docs/saas-boilerplate.docblock.js +45 -51
  88. package/dist/example.d.ts +2 -6
  89. package/dist/example.d.ts.map +1 -1
  90. package/dist/example.js +38 -50
  91. package/dist/handlers/index.d.ts +7 -4
  92. package/dist/handlers/index.d.ts.map +1 -0
  93. package/dist/handlers/index.js +358 -4
  94. package/dist/handlers/saas.handlers.d.ts +60 -59
  95. package/dist/handlers/saas.handlers.d.ts.map +1 -1
  96. package/dist/handlers/saas.handlers.js +127 -140
  97. package/dist/index.d.ts +15 -45
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3335 -75
  100. package/dist/node/billing/billing.entity.js +113 -0
  101. package/dist/node/billing/billing.enum.js +19 -0
  102. package/dist/node/billing/billing.event.js +90 -0
  103. package/dist/node/billing/billing.handler.js +148 -0
  104. package/dist/node/billing/billing.operations.js +278 -0
  105. package/dist/node/billing/billing.presentation.js +52 -0
  106. package/dist/node/billing/billing.schema.js +121 -0
  107. package/dist/node/billing/index.js +688 -0
  108. package/dist/node/dashboard/dashboard.presentation.js +52 -0
  109. package/dist/node/dashboard/index.js +52 -0
  110. package/dist/node/docs/index.js +93 -0
  111. package/dist/node/docs/saas-boilerplate.docblock.js +93 -0
  112. package/dist/node/example.js +39 -0
  113. package/dist/node/handlers/index.js +358 -0
  114. package/dist/node/handlers/saas.handlers.js +134 -0
  115. package/dist/node/index.js +3340 -0
  116. package/dist/node/presentations/index.js +290 -0
  117. package/dist/node/project/index.js +790 -0
  118. package/dist/node/project/project.entity.js +77 -0
  119. package/dist/node/project/project.enum.js +18 -0
  120. package/dist/node/project/project.event.js +103 -0
  121. package/dist/node/project/project.handler.js +178 -0
  122. package/dist/node/project/project.operations.js +372 -0
  123. package/dist/node/project/project.presentation.js +177 -0
  124. package/dist/node/project/project.schema.js +134 -0
  125. package/dist/node/saas-boilerplate.feature.js +88 -0
  126. package/dist/node/seeders/index.js +20 -0
  127. package/dist/node/settings/index.js +75 -0
  128. package/dist/node/settings/settings.entity.js +74 -0
  129. package/dist/node/settings/settings.enum.js +11 -0
  130. package/dist/node/shared/mock-data.js +104 -0
  131. package/dist/node/shared/overlay-types.js +0 -0
  132. package/dist/node/tests/operations.test-spec.js +112 -0
  133. package/dist/node/ui/SaasDashboard.js +988 -0
  134. package/dist/node/ui/SaasProjectList.js +162 -0
  135. package/dist/node/ui/SaasSettingsPanel.js +145 -0
  136. package/dist/node/ui/hooks/index.js +159 -0
  137. package/dist/node/ui/hooks/useProjectList.js +66 -0
  138. package/dist/node/ui/hooks/useProjectMutations.js +91 -0
  139. package/dist/node/ui/index.js +1808 -0
  140. package/dist/node/ui/modals/CreateProjectModal.js +153 -0
  141. package/dist/node/ui/modals/ProjectActionsModal.js +335 -0
  142. package/dist/node/ui/modals/index.js +487 -0
  143. package/dist/node/ui/overlays/demo-overlays.js +61 -0
  144. package/dist/node/ui/overlays/index.js +61 -0
  145. package/dist/node/ui/renderers/index.js +675 -0
  146. package/dist/node/ui/renderers/project-list.markdown.js +499 -0
  147. package/dist/node/ui/renderers/project-list.renderer.js +177 -0
  148. package/dist/presentations/index.d.ts +13 -14
  149. package/dist/presentations/index.d.ts.map +1 -1
  150. package/dist/presentations/index.js +289 -15
  151. package/dist/project/index.d.ts +11 -8
  152. package/dist/project/index.d.ts.map +1 -0
  153. package/dist/project/index.js +791 -9
  154. package/dist/project/project.entity.d.ts +23 -28
  155. package/dist/project/project.entity.d.ts.map +1 -1
  156. package/dist/project/project.entity.js +75 -82
  157. package/dist/project/project.enum.d.ts +2 -7
  158. package/dist/project/project.enum.d.ts.map +1 -1
  159. package/dist/project/project.enum.js +16 -23
  160. package/dist/project/project.event.d.ts +69 -75
  161. package/dist/project/project.event.d.ts.map +1 -1
  162. package/dist/project/project.event.js +95 -156
  163. package/dist/project/project.handler.d.ts +44 -47
  164. package/dist/project/project.handler.d.ts.map +1 -1
  165. package/dist/project/project.handler.js +168 -71
  166. package/dist/project/project.operations.d.ts +341 -347
  167. package/dist/project/project.operations.d.ts.map +1 -1
  168. package/dist/project/project.operations.js +366 -253
  169. package/dist/project/project.presentation.d.ts +2 -7
  170. package/dist/project/project.presentation.d.ts.map +1 -1
  171. package/dist/project/project.presentation.js +174 -61
  172. package/dist/project/project.schema.d.ts +191 -196
  173. package/dist/project/project.schema.d.ts.map +1 -1
  174. package/dist/project/project.schema.js +125 -205
  175. package/dist/saas-boilerplate.feature.d.ts +1 -6
  176. package/dist/saas-boilerplate.feature.d.ts.map +1 -1
  177. package/dist/saas-boilerplate.feature.js +87 -206
  178. package/dist/seeders/index.d.ts +4 -8
  179. package/dist/seeders/index.d.ts.map +1 -1
  180. package/dist/seeders/index.js +18 -16
  181. package/dist/settings/index.d.ts +6 -3
  182. package/dist/settings/index.d.ts.map +1 -0
  183. package/dist/settings/index.js +75 -3
  184. package/dist/settings/settings.entity.d.ts +23 -28
  185. package/dist/settings/settings.entity.d.ts.map +1 -1
  186. package/dist/settings/settings.entity.js +72 -75
  187. package/dist/settings/settings.enum.d.ts +1 -6
  188. package/dist/settings/settings.enum.d.ts.map +1 -1
  189. package/dist/settings/settings.enum.js +10 -19
  190. package/dist/shared/mock-data.d.ts +74 -77
  191. package/dist/shared/mock-data.d.ts.map +1 -1
  192. package/dist/shared/mock-data.js +102 -135
  193. package/dist/shared/overlay-types.d.ts +25 -28
  194. package/dist/shared/overlay-types.d.ts.map +1 -1
  195. package/dist/shared/overlay-types.js +1 -0
  196. package/dist/tests/operations.test-spec.d.ts +4 -9
  197. package/dist/tests/operations.test-spec.d.ts.map +1 -1
  198. package/dist/tests/operations.test-spec.js +108 -118
  199. package/dist/ui/SaasDashboard.d.ts +1 -6
  200. package/dist/ui/SaasDashboard.d.ts.map +1 -1
  201. package/dist/ui/SaasDashboard.js +977 -286
  202. package/dist/ui/SaasProjectList.d.ts +4 -11
  203. package/dist/ui/SaasProjectList.d.ts.map +1 -1
  204. package/dist/ui/SaasProjectList.js +159 -72
  205. package/dist/ui/SaasSettingsPanel.d.ts +1 -6
  206. package/dist/ui/SaasSettingsPanel.d.ts.map +1 -1
  207. package/dist/ui/SaasSettingsPanel.js +142 -134
  208. package/dist/ui/hooks/index.d.ts +3 -3
  209. package/dist/ui/hooks/index.d.ts.map +1 -0
  210. package/dist/ui/hooks/index.js +158 -4
  211. package/dist/ui/hooks/useProjectList.d.ts +26 -30
  212. package/dist/ui/hooks/useProjectList.d.ts.map +1 -1
  213. package/dist/ui/hooks/useProjectList.js +63 -71
  214. package/dist/ui/hooks/useProjectMutations.d.ts +20 -24
  215. package/dist/ui/hooks/useProjectMutations.d.ts.map +1 -1
  216. package/dist/ui/hooks/useProjectMutations.js +88 -142
  217. package/dist/ui/index.d.ts +8 -14
  218. package/dist/ui/index.d.ts.map +1 -0
  219. package/dist/ui/index.js +1809 -15
  220. package/dist/ui/modals/CreateProjectModal.d.ts +10 -19
  221. package/dist/ui/modals/CreateProjectModal.d.ts.map +1 -1
  222. package/dist/ui/modals/CreateProjectModal.js +150 -135
  223. package/dist/ui/modals/ProjectActionsModal.d.ts +20 -33
  224. package/dist/ui/modals/ProjectActionsModal.d.ts.map +1 -1
  225. package/dist/ui/modals/ProjectActionsModal.js +333 -289
  226. package/dist/ui/modals/index.d.ts +3 -3
  227. package/dist/ui/modals/index.d.ts.map +1 -0
  228. package/dist/ui/modals/index.js +487 -3
  229. package/dist/ui/overlays/demo-overlays.d.ts +10 -8
  230. package/dist/ui/overlays/demo-overlays.d.ts.map +1 -1
  231. package/dist/ui/overlays/demo-overlays.js +60 -68
  232. package/dist/ui/overlays/index.d.ts +2 -2
  233. package/dist/ui/overlays/index.d.ts.map +1 -0
  234. package/dist/ui/overlays/index.js +62 -3
  235. package/dist/ui/renderers/index.d.ts +3 -3
  236. package/dist/ui/renderers/index.d.ts.map +1 -0
  237. package/dist/ui/renderers/index.js +675 -3
  238. package/dist/ui/renderers/project-list.markdown.d.ts +15 -14
  239. package/dist/ui/renderers/project-list.markdown.d.ts.map +1 -1
  240. package/dist/ui/renderers/project-list.markdown.js +496 -146
  241. package/dist/ui/renderers/project-list.renderer.d.ts +6 -7
  242. package/dist/ui/renderers/project-list.renderer.d.ts.map +1 -1
  243. package/dist/ui/renderers/project-list.renderer.js +176 -15
  244. package/package.json +508 -98
  245. package/tsdown.config.js +1 -2
  246. package/.turbo/turbo-build$colon$bundle.log +0 -180
  247. package/dist/billing/billing.entity.js.map +0 -1
  248. package/dist/billing/billing.enum.js.map +0 -1
  249. package/dist/billing/billing.event.js.map +0 -1
  250. package/dist/billing/billing.handler.js.map +0 -1
  251. package/dist/billing/billing.operations.js.map +0 -1
  252. package/dist/billing/billing.presentation.js.map +0 -1
  253. package/dist/billing/billing.schema.js.map +0 -1
  254. package/dist/dashboard/dashboard.presentation.js.map +0 -1
  255. package/dist/docs/saas-boilerplate.docblock.js.map +0 -1
  256. package/dist/example.js.map +0 -1
  257. package/dist/handlers/saas.handlers.js.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/presentations/index.js.map +0 -1
  260. package/dist/project/project.entity.js.map +0 -1
  261. package/dist/project/project.enum.js.map +0 -1
  262. package/dist/project/project.event.js.map +0 -1
  263. package/dist/project/project.handler.js.map +0 -1
  264. package/dist/project/project.operations.js.map +0 -1
  265. package/dist/project/project.presentation.js.map +0 -1
  266. package/dist/project/project.schema.js.map +0 -1
  267. package/dist/saas-boilerplate.feature.js.map +0 -1
  268. package/dist/seeders/index.js.map +0 -1
  269. package/dist/settings/settings.entity.js.map +0 -1
  270. package/dist/settings/settings.enum.js.map +0 -1
  271. package/dist/shared/mock-data.js.map +0 -1
  272. package/dist/tests/operations.test-spec.js.map +0 -1
  273. package/dist/ui/SaasDashboard.js.map +0 -1
  274. package/dist/ui/SaasProjectList.js.map +0 -1
  275. package/dist/ui/SaasSettingsPanel.js.map +0 -1
  276. package/dist/ui/hooks/useProjectList.js.map +0 -1
  277. package/dist/ui/hooks/useProjectMutations.js.map +0 -1
  278. package/dist/ui/modals/CreateProjectModal.js.map +0 -1
  279. package/dist/ui/modals/ProjectActionsModal.js.map +0 -1
  280. package/dist/ui/overlays/demo-overlays.js.map +0 -1
  281. package/dist/ui/renderers/project-list.markdown.js.map +0 -1
  282. package/dist/ui/renderers/project-list.renderer.js.map +0 -1
  283. package/tsconfig.tsbuildinfo +0 -1
@@ -1,14 +1,7 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/ui/SaasProjectList.d.ts
4
1
  interface SaasProjectListProps {
5
- onProjectClick?: (projectId: string) => void;
6
- onCreateProject?: () => void;
2
+ onProjectClick?: (projectId: string) => void;
3
+ onCreateProject?: () => void;
7
4
  }
8
- declare function SaasProjectList({
9
- onProjectClick,
10
- onCreateProject
11
- }: SaasProjectListProps): react_jsx_runtime0.JSX.Element;
12
- //#endregion
13
- export { SaasProjectList };
5
+ export declare function SaasProjectList({ onProjectClick, onCreateProject, }: SaasProjectListProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
14
7
  //# sourceMappingURL=SaasProjectList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SaasProjectList.d.ts","names":[],"sources":["../../src/ui/SaasProjectList.tsx"],"mappings":";;;UAiBU,oBAAA;EACR,cAAA,IAAkB,SAAA;EAClB,eAAA;AAAA;AAAA,iBAkBc,eAAA,CAAA;EACd,cAAA;EACA;AAAA,GACC,oBAAA,GAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SaasProjectList.d.ts","sourceRoot":"","sources":["../../src/ui/SaasProjectList.tsx"],"names":[],"mappings":"AAiBA,UAAU,oBAAoB;IAC5B,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAiBD,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,eAAe,GAChB,EAAE,oBAAoB,2CAwEtB"}
@@ -1,76 +1,163 @@
1
- 'use client';
2
-
3
- import { useProjectList } from "./hooks/useProjectList.js";
4
- import { Button, EmptyState, EntityCard, ErrorState, LoaderBlock, StatCard, StatCardGroup, StatusChip } from "@contractspec/lib.design-system";
5
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ // @bun
2
+ // src/ui/hooks/useProjectList.ts
3
+ import { useCallback, useEffect, useMemo, useState } from "react";
4
+ import { useTemplateRuntime } from "@contractspec/lib.example-shared-ui";
5
+ function useProjectList(options = {}) {
6
+ const { handlers, projectId } = useTemplateRuntime();
7
+ const { saas } = handlers;
8
+ const [data, setData] = useState(null);
9
+ const [subscription, setSubscription] = useState(null);
10
+ const [loading, setLoading] = useState(true);
11
+ const [error, setError] = useState(null);
12
+ const [page, setPage] = useState(1);
13
+ const fetchData = useCallback(async () => {
14
+ setLoading(true);
15
+ setError(null);
16
+ try {
17
+ const [projectsResult, subscriptionResult] = await Promise.all([
18
+ saas.listProjects({
19
+ projectId,
20
+ status: options.status === "all" ? undefined : options.status,
21
+ search: options.search,
22
+ limit: options.limit ?? 20,
23
+ offset: (page - 1) * (options.limit ?? 20)
24
+ }),
25
+ saas.getSubscription({ projectId })
26
+ ]);
27
+ setData({
28
+ items: projectsResult.items,
29
+ total: projectsResult.total
30
+ });
31
+ setSubscription(subscriptionResult);
32
+ } catch (err) {
33
+ setError(err instanceof Error ? err : new Error("Unknown error"));
34
+ } finally {
35
+ setLoading(false);
36
+ }
37
+ }, [saas, projectId, options.status, options.search, options.limit, page]);
38
+ useEffect(() => {
39
+ fetchData();
40
+ }, [fetchData]);
41
+ const stats = useMemo(() => {
42
+ if (!data)
43
+ return null;
44
+ const items = data.items;
45
+ return {
46
+ total: data.total,
47
+ activeCount: items.filter((p) => p.status === "ACTIVE").length,
48
+ draftCount: items.filter((p) => p.status === "DRAFT").length,
49
+ projectLimit: 10,
50
+ usagePercent: Math.min(data.total / 10 * 100, 100)
51
+ };
52
+ }, [data]);
53
+ return {
54
+ data,
55
+ subscription,
56
+ loading,
57
+ error,
58
+ stats,
59
+ page,
60
+ refetch: fetchData,
61
+ nextPage: () => setPage((p) => p + 1),
62
+ prevPage: () => page > 1 && setPage((p) => p - 1)
63
+ };
64
+ }
6
65
 
7
- //#region src/ui/SaasProjectList.tsx
8
- /**
9
- * SaaS Project List - Standalone project list component
10
- */
66
+ // src/ui/SaasProjectList.tsx
67
+ import {
68
+ StatCard,
69
+ StatCardGroup,
70
+ StatusChip,
71
+ EntityCard,
72
+ EmptyState,
73
+ LoaderBlock,
74
+ ErrorState,
75
+ Button
76
+ } from "@contractspec/lib.design-system";
77
+ import { jsxDEV } from "react/jsx-dev-runtime";
78
+ "use client";
11
79
  function getStatusTone(status) {
12
- switch (status) {
13
- case "ACTIVE": return "success";
14
- case "DRAFT": return "neutral";
15
- case "ARCHIVED": return "danger";
16
- default: return "neutral";
17
- }
80
+ switch (status) {
81
+ case "ACTIVE":
82
+ return "success";
83
+ case "DRAFT":
84
+ return "neutral";
85
+ case "ARCHIVED":
86
+ return "danger";
87
+ default:
88
+ return "neutral";
89
+ }
18
90
  }
19
- function SaasProjectList({ onProjectClick, onCreateProject }) {
20
- const { data, loading, error, stats, refetch } = useProjectList();
21
- if (loading && !data) return /* @__PURE__ */ jsx(LoaderBlock, { label: "Loading projects..." });
22
- if (error) return /* @__PURE__ */ jsx(ErrorState, {
23
- title: "Failed to load projects",
24
- description: error.message,
25
- onRetry: refetch,
26
- retryLabel: "Retry"
27
- });
28
- if (!data?.items.length) return /* @__PURE__ */ jsx(EmptyState, {
29
- title: "No projects found",
30
- description: "Create your first project to get started.",
31
- primaryAction: onCreateProject ? /* @__PURE__ */ jsx(Button, {
32
- onPress: onCreateProject,
33
- children: "Create Project"
34
- }) : void 0
35
- });
36
- return /* @__PURE__ */ jsxs("div", {
37
- className: "space-y-6",
38
- children: [stats && /* @__PURE__ */ jsxs(StatCardGroup, { children: [
39
- /* @__PURE__ */ jsx(StatCard, {
40
- label: "Total Projects",
41
- value: stats.total.toString()
42
- }),
43
- /* @__PURE__ */ jsx(StatCard, {
44
- label: "Active",
45
- value: stats.activeCount.toString()
46
- }),
47
- /* @__PURE__ */ jsx(StatCard, {
48
- label: "Draft",
49
- value: stats.draftCount.toString()
50
- })
51
- ] }), /* @__PURE__ */ jsx("div", {
52
- className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
53
- children: data.items.map((project) => /* @__PURE__ */ jsx(EntityCard, {
54
- cardTitle: project.name,
55
- cardSubtitle: project.tier,
56
- meta: /* @__PURE__ */ jsx("p", {
57
- className: "text-muted-foreground text-sm",
58
- children: project.description
59
- }),
60
- chips: /* @__PURE__ */ jsx(StatusChip, {
61
- tone: getStatusTone(project.status),
62
- label: project.status
63
- }),
64
- footer: /* @__PURE__ */ jsx("span", {
65
- className: "text-muted-foreground text-xs",
66
- children: project.updatedAt.toLocaleDateString()
67
- }),
68
- onClick: onProjectClick ? () => onProjectClick(project.id) : void 0
69
- }, project.id))
70
- })]
71
- });
91
+ function SaasProjectList({
92
+ onProjectClick,
93
+ onCreateProject
94
+ }) {
95
+ const { data, loading, error, stats, refetch } = useProjectList();
96
+ if (loading && !data) {
97
+ return /* @__PURE__ */ jsxDEV(LoaderBlock, {
98
+ label: "Loading projects..."
99
+ }, undefined, false, undefined, this);
100
+ }
101
+ if (error) {
102
+ return /* @__PURE__ */ jsxDEV(ErrorState, {
103
+ title: "Failed to load projects",
104
+ description: error.message,
105
+ onRetry: refetch,
106
+ retryLabel: "Retry"
107
+ }, undefined, false, undefined, this);
108
+ }
109
+ if (!data?.items.length) {
110
+ return /* @__PURE__ */ jsxDEV(EmptyState, {
111
+ title: "No projects found",
112
+ description: "Create your first project to get started.",
113
+ primaryAction: onCreateProject ? /* @__PURE__ */ jsxDEV(Button, {
114
+ onPress: onCreateProject,
115
+ children: "Create Project"
116
+ }, undefined, false, undefined, this) : undefined
117
+ }, undefined, false, undefined, this);
118
+ }
119
+ return /* @__PURE__ */ jsxDEV("div", {
120
+ className: "space-y-6",
121
+ children: [
122
+ stats && /* @__PURE__ */ jsxDEV(StatCardGroup, {
123
+ children: [
124
+ /* @__PURE__ */ jsxDEV(StatCard, {
125
+ label: "Total Projects",
126
+ value: stats.total.toString()
127
+ }, undefined, false, undefined, this),
128
+ /* @__PURE__ */ jsxDEV(StatCard, {
129
+ label: "Active",
130
+ value: stats.activeCount.toString()
131
+ }, undefined, false, undefined, this),
132
+ /* @__PURE__ */ jsxDEV(StatCard, {
133
+ label: "Draft",
134
+ value: stats.draftCount.toString()
135
+ }, undefined, false, undefined, this)
136
+ ]
137
+ }, undefined, true, undefined, this),
138
+ /* @__PURE__ */ jsxDEV("div", {
139
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
140
+ children: data.items.map((project) => /* @__PURE__ */ jsxDEV(EntityCard, {
141
+ cardTitle: project.name,
142
+ cardSubtitle: project.tier,
143
+ meta: /* @__PURE__ */ jsxDEV("p", {
144
+ className: "text-muted-foreground text-sm",
145
+ children: project.description
146
+ }, undefined, false, undefined, this),
147
+ chips: /* @__PURE__ */ jsxDEV(StatusChip, {
148
+ tone: getStatusTone(project.status),
149
+ label: project.status
150
+ }, undefined, false, undefined, this),
151
+ footer: /* @__PURE__ */ jsxDEV("span", {
152
+ className: "text-muted-foreground text-xs",
153
+ children: project.updatedAt.toLocaleDateString()
154
+ }, undefined, false, undefined, this),
155
+ onClick: onProjectClick ? () => onProjectClick(project.id) : undefined
156
+ }, project.id, false, undefined, this))
157
+ }, undefined, false, undefined, this)
158
+ ]
159
+ }, undefined, true, undefined, this);
72
160
  }
73
-
74
- //#endregion
75
- export { SaasProjectList };
76
- //# sourceMappingURL=SaasProjectList.js.map
161
+ export {
162
+ SaasProjectList
163
+ };
@@ -1,7 +1,2 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/ui/SaasSettingsPanel.d.ts
4
- declare function SaasSettingsPanel(): react_jsx_runtime0.JSX.Element;
5
- //#endregion
6
- export { SaasSettingsPanel };
1
+ export declare function SaasSettingsPanel(): import("react/jsx-runtime").JSX.Element;
7
2
  //# sourceMappingURL=SaasSettingsPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SaasSettingsPanel.d.ts","names":[],"sources":["../../src/ui/SaasSettingsPanel.tsx"],"mappings":";;;iBAQgB,iBAAA,CAAA,GAAiB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SaasSettingsPanel.d.ts","sourceRoot":"","sources":["../../src/ui/SaasSettingsPanel.tsx"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,4CAuFhC"}
@@ -1,138 +1,146 @@
1
- 'use client';
2
-
1
+ // @bun
2
+ // src/ui/SaasSettingsPanel.tsx
3
3
  import { useState } from "react";
4
4
  import { Button } from "@contractspec/lib.design-system";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region src/ui/SaasSettingsPanel.tsx
8
- /**
9
- * SaaS Settings Panel - Organization and user settings
10
- */
5
+ import { jsxDEV } from "react/jsx-dev-runtime";
6
+ "use client";
11
7
  function SaasSettingsPanel() {
12
- const [orgName, setOrgName] = useState("Demo Organization");
13
- const [timezone, setTimezone] = useState("UTC");
14
- return /* @__PURE__ */ jsxs("div", {
15
- className: "space-y-6",
16
- children: [
17
- /* @__PURE__ */ jsxs("div", {
18
- className: "border-border bg-card rounded-xl border p-6",
19
- children: [
20
- /* @__PURE__ */ jsx("h3", {
21
- className: "mb-4 text-lg font-semibold",
22
- children: "Organization Settings"
23
- }),
24
- /* @__PURE__ */ jsxs("div", {
25
- className: "space-y-4",
26
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
27
- htmlFor: "setting-org-name",
28
- className: "block text-sm font-medium",
29
- children: "Organization Name"
30
- }), /* @__PURE__ */ jsx("input", {
31
- id: "setting-org-name",
32
- type: "text",
33
- value: orgName,
34
- onChange: (e) => setOrgName(e.target.value),
35
- className: "border-input bg-background mt-1 block w-full rounded-md border px-3 py-2"
36
- })] }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
37
- htmlFor: "setting-timezone",
38
- className: "block text-sm font-medium",
39
- children: "Default Timezone"
40
- }), /* @__PURE__ */ jsxs("select", {
41
- id: "setting-timezone",
42
- value: timezone,
43
- onChange: (e) => setTimezone(e.target.value),
44
- className: "border-input bg-background mt-1 block w-full rounded-md border px-3 py-2",
45
- children: [
46
- /* @__PURE__ */ jsx("option", {
47
- value: "UTC",
48
- children: "UTC"
49
- }),
50
- /* @__PURE__ */ jsx("option", {
51
- value: "America/New_York",
52
- children: "America/New_York"
53
- }),
54
- /* @__PURE__ */ jsx("option", {
55
- value: "Europe/London",
56
- children: "Europe/London"
57
- }),
58
- /* @__PURE__ */ jsx("option", {
59
- value: "Asia/Tokyo",
60
- children: "Asia/Tokyo"
61
- })
62
- ]
63
- })] })]
64
- }),
65
- /* @__PURE__ */ jsx("div", {
66
- className: "mt-6",
67
- children: /* @__PURE__ */ jsx(Button, {
68
- variant: "default",
69
- children: "Save Changes"
70
- })
71
- })
72
- ]
73
- }),
74
- /* @__PURE__ */ jsxs("div", {
75
- className: "border-border bg-card rounded-xl border p-6",
76
- children: [/* @__PURE__ */ jsx("h3", {
77
- className: "mb-4 text-lg font-semibold",
78
- children: "Notifications"
79
- }), /* @__PURE__ */ jsx("div", {
80
- className: "space-y-3",
81
- children: [
82
- {
83
- label: "Email notifications",
84
- defaultChecked: true
85
- },
86
- {
87
- label: "Usage alerts",
88
- defaultChecked: true
89
- },
90
- {
91
- label: "Weekly digest",
92
- defaultChecked: false
93
- }
94
- ].map((item) => /* @__PURE__ */ jsxs("label", {
95
- className: "flex items-center gap-3",
96
- children: [/* @__PURE__ */ jsx("input", {
97
- type: "checkbox",
98
- defaultChecked: item.defaultChecked,
99
- className: "border-input h-4 w-4 rounded"
100
- }), /* @__PURE__ */ jsx("span", {
101
- className: "text-sm",
102
- children: item.label
103
- })]
104
- }, item.label))
105
- })]
106
- }),
107
- /* @__PURE__ */ jsxs("div", {
108
- className: "rounded-xl border border-red-200 bg-red-50 p-6 dark:border-red-900 dark:bg-red-950/20",
109
- children: [
110
- /* @__PURE__ */ jsx("h3", {
111
- className: "mb-2 text-lg font-semibold text-red-700 dark:text-red-400",
112
- children: "Danger Zone"
113
- }),
114
- /* @__PURE__ */ jsx("p", {
115
- className: "mb-4 text-sm text-red-600 dark:text-red-300",
116
- children: "These actions are irreversible. Please proceed with caution."
117
- }),
118
- /* @__PURE__ */ jsxs("div", {
119
- className: "flex gap-3",
120
- children: [/* @__PURE__ */ jsx(Button, {
121
- variant: "secondary",
122
- size: "sm",
123
- children: "Export Data"
124
- }), /* @__PURE__ */ jsx(Button, {
125
- variant: "secondary",
126
- size: "sm",
127
- children: "Delete Organization"
128
- })]
129
- })
130
- ]
131
- })
132
- ]
133
- });
8
+ const [orgName, setOrgName] = useState("Demo Organization");
9
+ const [timezone, setTimezone] = useState("UTC");
10
+ return /* @__PURE__ */ jsxDEV("div", {
11
+ className: "space-y-6",
12
+ children: [
13
+ /* @__PURE__ */ jsxDEV("div", {
14
+ className: "border-border bg-card rounded-xl border p-6",
15
+ children: [
16
+ /* @__PURE__ */ jsxDEV("h3", {
17
+ className: "mb-4 text-lg font-semibold",
18
+ children: "Organization Settings"
19
+ }, undefined, false, undefined, this),
20
+ /* @__PURE__ */ jsxDEV("div", {
21
+ className: "space-y-4",
22
+ children: [
23
+ /* @__PURE__ */ jsxDEV("div", {
24
+ children: [
25
+ /* @__PURE__ */ jsxDEV("label", {
26
+ htmlFor: "setting-org-name",
27
+ className: "block text-sm font-medium",
28
+ children: "Organization Name"
29
+ }, undefined, false, undefined, this),
30
+ /* @__PURE__ */ jsxDEV("input", {
31
+ id: "setting-org-name",
32
+ type: "text",
33
+ value: orgName,
34
+ onChange: (e) => setOrgName(e.target.value),
35
+ className: "border-input bg-background mt-1 block w-full rounded-md border px-3 py-2"
36
+ }, undefined, false, undefined, this)
37
+ ]
38
+ }, undefined, true, undefined, this),
39
+ /* @__PURE__ */ jsxDEV("div", {
40
+ children: [
41
+ /* @__PURE__ */ jsxDEV("label", {
42
+ htmlFor: "setting-timezone",
43
+ className: "block text-sm font-medium",
44
+ children: "Default Timezone"
45
+ }, undefined, false, undefined, this),
46
+ /* @__PURE__ */ jsxDEV("select", {
47
+ id: "setting-timezone",
48
+ value: timezone,
49
+ onChange: (e) => setTimezone(e.target.value),
50
+ className: "border-input bg-background mt-1 block w-full rounded-md border px-3 py-2",
51
+ children: [
52
+ /* @__PURE__ */ jsxDEV("option", {
53
+ value: "UTC",
54
+ children: "UTC"
55
+ }, undefined, false, undefined, this),
56
+ /* @__PURE__ */ jsxDEV("option", {
57
+ value: "America/New_York",
58
+ children: "America/New_York"
59
+ }, undefined, false, undefined, this),
60
+ /* @__PURE__ */ jsxDEV("option", {
61
+ value: "Europe/London",
62
+ children: "Europe/London"
63
+ }, undefined, false, undefined, this),
64
+ /* @__PURE__ */ jsxDEV("option", {
65
+ value: "Asia/Tokyo",
66
+ children: "Asia/Tokyo"
67
+ }, undefined, false, undefined, this)
68
+ ]
69
+ }, undefined, true, undefined, this)
70
+ ]
71
+ }, undefined, true, undefined, this)
72
+ ]
73
+ }, undefined, true, undefined, this),
74
+ /* @__PURE__ */ jsxDEV("div", {
75
+ className: "mt-6",
76
+ children: /* @__PURE__ */ jsxDEV(Button, {
77
+ variant: "default",
78
+ children: "Save Changes"
79
+ }, undefined, false, undefined, this)
80
+ }, undefined, false, undefined, this)
81
+ ]
82
+ }, undefined, true, undefined, this),
83
+ /* @__PURE__ */ jsxDEV("div", {
84
+ className: "border-border bg-card rounded-xl border p-6",
85
+ children: [
86
+ /* @__PURE__ */ jsxDEV("h3", {
87
+ className: "mb-4 text-lg font-semibold",
88
+ children: "Notifications"
89
+ }, undefined, false, undefined, this),
90
+ /* @__PURE__ */ jsxDEV("div", {
91
+ className: "space-y-3",
92
+ children: [
93
+ { label: "Email notifications", defaultChecked: true },
94
+ { label: "Usage alerts", defaultChecked: true },
95
+ { label: "Weekly digest", defaultChecked: false }
96
+ ].map((item) => /* @__PURE__ */ jsxDEV("label", {
97
+ className: "flex items-center gap-3",
98
+ children: [
99
+ /* @__PURE__ */ jsxDEV("input", {
100
+ type: "checkbox",
101
+ defaultChecked: item.defaultChecked,
102
+ className: "border-input h-4 w-4 rounded"
103
+ }, undefined, false, undefined, this),
104
+ /* @__PURE__ */ jsxDEV("span", {
105
+ className: "text-sm",
106
+ children: item.label
107
+ }, undefined, false, undefined, this)
108
+ ]
109
+ }, item.label, true, undefined, this))
110
+ }, undefined, false, undefined, this)
111
+ ]
112
+ }, undefined, true, undefined, this),
113
+ /* @__PURE__ */ jsxDEV("div", {
114
+ className: "rounded-xl border border-red-200 bg-red-50 p-6 dark:border-red-900 dark:bg-red-950/20",
115
+ children: [
116
+ /* @__PURE__ */ jsxDEV("h3", {
117
+ className: "mb-2 text-lg font-semibold text-red-700 dark:text-red-400",
118
+ children: "Danger Zone"
119
+ }, undefined, false, undefined, this),
120
+ /* @__PURE__ */ jsxDEV("p", {
121
+ className: "mb-4 text-sm text-red-600 dark:text-red-300",
122
+ children: "These actions are irreversible. Please proceed with caution."
123
+ }, undefined, false, undefined, this),
124
+ /* @__PURE__ */ jsxDEV("div", {
125
+ className: "flex gap-3",
126
+ children: [
127
+ /* @__PURE__ */ jsxDEV(Button, {
128
+ variant: "secondary",
129
+ size: "sm",
130
+ children: "Export Data"
131
+ }, undefined, false, undefined, this),
132
+ /* @__PURE__ */ jsxDEV(Button, {
133
+ variant: "secondary",
134
+ size: "sm",
135
+ children: "Delete Organization"
136
+ }, undefined, false, undefined, this)
137
+ ]
138
+ }, undefined, true, undefined, this)
139
+ ]
140
+ }, undefined, true, undefined, this)
141
+ ]
142
+ }, undefined, true, undefined, this);
134
143
  }
135
-
136
- //#endregion
137
- export { SaasSettingsPanel };
138
- //# sourceMappingURL=SaasSettingsPanel.js.map
144
+ export {
145
+ SaasSettingsPanel
146
+ };
@@ -1,3 +1,3 @@
1
- import { UseProjectListOptions, useProjectList } from "./useProjectList.js";
2
- import { UseProjectMutationsOptions, useProjectMutations } from "./useProjectMutations.js";
3
- export { type UseProjectListOptions, type UseProjectMutationsOptions, useProjectList, useProjectMutations };
1
+ export { useProjectList, type UseProjectListOptions } from './useProjectList';
2
+ export { useProjectMutations, type UseProjectMutationsOptions, } from './useProjectMutations';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC"}