@tulip-systems/create-app 0.12.3 → 0.13.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 (190) hide show
  1. package/dist/index.mjs +2866 -2949
  2. package/dist/index.mjs.map +1 -1
  3. package/dist/templates/basic/package.json +37 -38
  4. package/dist/templates/basic/src/app/layout.tsx +20 -10
  5. package/dist/templates/code/package.json +81 -71
  6. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-black-italic.otf +0 -0
  7. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-black.otf +0 -0
  8. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-bold-italic.otf +0 -0
  9. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-bold.otf +0 -0
  10. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-extra-light-italic.otf +0 -0
  11. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-extra-light.otf +0 -0
  12. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-light-italic.otf +0 -0
  13. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-light.otf +0 -0
  14. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-medium-italic.otf +0 -0
  15. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-medium.otf +0 -0
  16. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-regular-italic.otf +0 -0
  17. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-regular.otf +0 -0
  18. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-thin-italic.otf +0 -0
  19. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-thin.otf +0 -0
  20. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-ultra-thin-italic.otf +0 -0
  21. package/dist/templates/code/public/fonts/neue-haas-grotesk/neue-haas-grotesk-ultra-thin.otf +0 -0
  22. package/dist/templates/code/public/images/preview/hero-home.webp +0 -0
  23. package/dist/templates/code/public/sw.js +35 -0
  24. package/dist/templates/code/src/app/admin/contacts/_components/grid.tsx +1 -1
  25. package/dist/templates/code/src/app/admin/customers/_config/columns-data.tsx +1 -1
  26. package/dist/templates/code/src/app/admin/employees/_config/columns-data.tsx +1 -1
  27. package/dist/templates/code/src/app/admin/history/[id]/layout.tsx +33 -0
  28. package/dist/templates/code/src/app/admin/history/[id]/loading.tsx +11 -0
  29. package/dist/templates/code/src/app/admin/history/[id]/page.tsx +30 -0
  30. package/dist/templates/code/src/app/admin/history/_components/diff.client.tsx +377 -0
  31. package/dist/templates/code/src/app/admin/history/_components/field-comparison.tsx +153 -0
  32. package/dist/templates/code/src/app/admin/history/_components/tables.tsx +47 -0
  33. package/dist/templates/code/src/app/admin/history/_components/toolbars.tsx +54 -0
  34. package/dist/templates/code/src/app/admin/history/_config/columns-data.tsx +61 -0
  35. package/dist/templates/code/src/app/admin/history/_config/filters.ts +46 -0
  36. package/dist/templates/code/src/app/admin/history/_config/sorting.ts +30 -0
  37. package/dist/templates/code/src/app/admin/history/_lib/helpers.ts +98 -0
  38. package/dist/templates/code/src/app/admin/history/_lib/router.ts +100 -0
  39. package/dist/templates/code/src/app/admin/history/_lib/schema.ts +45 -0
  40. package/dist/templates/code/src/app/admin/history/_lib/service.server.ts +30 -0
  41. package/dist/templates/code/src/app/admin/history/_lib/validators.ts +118 -0
  42. package/dist/templates/code/src/app/admin/initiatives/_config/columns-data.tsx +1 -1
  43. package/dist/templates/code/src/app/admin/notifications/_components/command-toggle-push.tsx +115 -0
  44. package/dist/templates/code/src/app/admin/notifications/_components/tables.tsx +37 -0
  45. package/dist/templates/code/src/app/admin/notifications/_components/toolbars.tsx +21 -0
  46. package/dist/templates/code/src/app/admin/notifications/_config/columns-data.tsx +64 -0
  47. package/dist/templates/code/src/app/admin/notifications/_config/commands.tsx +40 -0
  48. package/dist/templates/code/src/app/admin/notifications/_lib/listeners.server.ts +69 -0
  49. package/dist/templates/code/src/app/admin/notifications/_lib/push.server.ts +80 -0
  50. package/dist/templates/code/src/app/admin/notifications/_lib/router.ts +82 -0
  51. package/dist/templates/code/src/app/admin/notifications/_lib/schema.ts +49 -0
  52. package/dist/templates/code/src/app/admin/notifications/_lib/validators.ts +19 -0
  53. package/dist/templates/code/src/app/admin/notifications/layout.tsx +17 -0
  54. package/dist/templates/code/src/app/admin/notifications/loading.tsx +9 -0
  55. package/dist/templates/code/src/app/admin/notifications/page.tsx +28 -0
  56. package/dist/templates/code/src/app/admin/projects/[id]/(default)/page.tsx +1 -1
  57. package/dist/templates/code/src/app/admin/projects/[id]/timeline/page.tsx +1 -1
  58. package/dist/templates/code/src/app/admin/projects/_config/columns-data.tsx +1 -1
  59. package/dist/templates/code/src/app/admin/projects/_lib/events.ts +64 -0
  60. package/dist/templates/code/src/app/admin/projects/_lib/listeners.server.ts +82 -0
  61. package/dist/templates/code/src/app/admin/projects/_lib/router.ts +145 -20
  62. package/dist/templates/code/src/app/admin/projects/timeline/page.tsx +1 -1
  63. package/dist/templates/code/src/app/admin/prospects/_config/columns-data.tsx +1 -1
  64. package/dist/templates/code/src/app/admin/queue/_components/create-command.tsx +97 -0
  65. package/dist/templates/code/src/app/admin/queue/_components/tables.tsx +37 -0
  66. package/dist/templates/code/src/app/admin/queue/_components/toolbars.tsx +16 -0
  67. package/dist/templates/code/src/app/admin/queue/_config/columns-data.tsx +44 -0
  68. package/dist/templates/code/src/app/admin/queue/_config/commands.tsx +39 -0
  69. package/dist/templates/code/src/app/admin/queue/_lib/queue.ts +27 -0
  70. package/dist/templates/code/src/app/admin/queue/_lib/router.ts +33 -0
  71. package/dist/templates/code/src/app/admin/queue/_lib/schema.ts +12 -0
  72. package/dist/templates/code/src/app/admin/queue/_lib/validators.ts +15 -0
  73. package/dist/templates/code/src/app/admin/quotations/(list)/layout.tsx +24 -0
  74. package/dist/templates/code/src/app/admin/quotations/(list)/page.tsx +23 -0
  75. package/dist/templates/code/src/app/admin/quotations/[id]/(dashboard)/layout.tsx +40 -0
  76. package/dist/templates/code/src/app/admin/quotations/[id]/(dashboard)/page.tsx +56 -0
  77. package/dist/templates/code/src/app/admin/quotations/[id]/preview/page.tsx +17 -0
  78. package/dist/templates/code/src/app/admin/quotations/_blocks/commands.tsx +24 -0
  79. package/dist/templates/code/src/app/admin/quotations/_blocks/hero/config.ts +14 -0
  80. package/dist/templates/code/src/app/admin/quotations/_blocks/hero/create.tsx +152 -0
  81. package/dist/templates/code/src/app/admin/quotations/_blocks/hero/inline.tsx +90 -0
  82. package/dist/templates/code/src/app/admin/quotations/_blocks/hero/preview.tsx +90 -0
  83. package/dist/templates/code/src/app/admin/quotations/_blocks/registry.ts +13 -0
  84. package/dist/templates/code/src/app/admin/quotations/_blocks/render.tsx +190 -0
  85. package/dist/templates/code/src/app/admin/quotations/_blocks/styles.ts +24 -0
  86. package/dist/templates/code/src/app/admin/quotations/_blocks/summary/config.ts +13 -0
  87. package/dist/templates/code/src/app/admin/quotations/_blocks/summary/create.tsx +175 -0
  88. package/dist/templates/code/src/app/admin/quotations/_blocks/summary/inline.tsx +93 -0
  89. package/dist/templates/code/src/app/admin/quotations/_blocks/summary/preview.tsx +25 -0
  90. package/dist/templates/code/src/app/admin/quotations/_blocks/totals/config.ts +18 -0
  91. package/dist/templates/code/src/app/admin/quotations/_blocks/totals/create.tsx +177 -0
  92. package/dist/templates/code/src/app/admin/quotations/_blocks/totals/inline.tsx +96 -0
  93. package/dist/templates/code/src/app/admin/quotations/_blocks/totals/preview.tsx +32 -0
  94. package/dist/templates/code/src/app/admin/quotations/_components/create-command.tsx +97 -0
  95. package/dist/templates/code/src/app/admin/quotations/_components/tables.tsx +68 -0
  96. package/dist/templates/code/src/app/admin/quotations/_components/toolbars.tsx +18 -0
  97. package/dist/templates/code/src/app/admin/quotations/_config/columns-data.tsx +35 -0
  98. package/dist/templates/code/src/app/admin/quotations/_config/commands.tsx +71 -0
  99. package/dist/templates/code/src/app/admin/quotations/_config/filters.ts +22 -0
  100. package/dist/templates/code/src/app/admin/quotations/_config/sorting.ts +23 -0
  101. package/dist/templates/code/src/app/admin/quotations/_lib/router.ts +260 -0
  102. package/dist/templates/code/src/app/admin/quotations/_lib/schema.ts +42 -0
  103. package/dist/templates/code/src/app/admin/quotations/_lib/validators.ts +20 -0
  104. package/dist/templates/code/src/app/admin/settings/history/layout.tsx +6 -0
  105. package/dist/templates/code/src/app/admin/settings/history/loading.tsx +5 -0
  106. package/dist/templates/code/src/app/admin/settings/history/page.tsx +13 -0
  107. package/dist/templates/code/src/app/admin/settings/layout.tsx +11 -0
  108. package/dist/templates/code/src/app/admin/settings/queue/loading.tsx +9 -0
  109. package/dist/templates/code/src/app/admin/settings/queue/page.tsx +21 -0
  110. package/dist/templates/code/src/app/admin/tasks/_components/domains-tabs-grid.tsx +1 -1
  111. package/dist/templates/code/src/app/admin/tasks/_config/columns-data.tsx +1 -1
  112. package/dist/templates/code/src/app/admin/tasks/_config/columns-inline.tsx +1 -1
  113. package/dist/templates/code/src/app/admin/tasks/_lib/events.ts +40 -0
  114. package/dist/templates/code/src/app/admin/tasks/_lib/listeners.server.ts +46 -0
  115. package/dist/templates/code/src/app/admin/tasks/_lib/router.ts +222 -90
  116. package/dist/templates/code/src/app/admin/time/_config/columns-data.tsx +1 -1
  117. package/dist/templates/code/src/app/admin/time/_config/columns-inline.tsx +1 -1
  118. package/dist/templates/code/src/app/api/[transport]/route.ts +31 -21
  119. package/dist/templates/code/src/app/api/queue/dispatch/route.ts +4 -0
  120. package/dist/templates/code/src/app/auth/forget-password/page.tsx +1 -1
  121. package/dist/templates/code/src/app/auth/layout.tsx +1 -1
  122. package/dist/templates/code/src/app/auth/reset-password/page.tsx +1 -1
  123. package/dist/templates/code/src/app/layout.tsx +25 -13
  124. package/dist/templates/code/src/env.ts +12 -0
  125. package/dist/templates/code/src/lib/config/paths.tsx +16 -0
  126. package/dist/templates/code/src/lib/utils/fonts.ts +102 -0
  127. package/dist/templates/code/src/server/auth/constants.ts +1 -1
  128. package/dist/templates/code/src/server/auth/init.ts +12 -5
  129. package/dist/templates/code/src/server/auth/permissions.ts +7 -0
  130. package/dist/templates/code/src/server/auth/schema.ts +100 -1
  131. package/dist/templates/code/src/server/db/schema.ts +4 -0
  132. package/dist/templates/code/src/server/events/handlers.ts +17 -0
  133. package/dist/templates/code/src/server/events/init.ts +18 -0
  134. package/dist/templates/code/src/server/events/listeners.ts +17 -0
  135. package/dist/templates/code/src/server/queue/handlers.ts +5 -0
  136. package/dist/templates/code/src/server/queue/init.ts +16 -0
  137. package/dist/templates/code/src/server/router/router.ts +23 -0
  138. package/dist/templates/spark/package.json +64 -65
  139. package/dist/templates/spark/src/app/admin/assignments/[id]/(default)/@dashboard/page.tsx +1 -1
  140. package/dist/templates/spark/src/app/admin/assignments/_config/columns-data.tsx +1 -1
  141. package/dist/templates/spark/src/app/admin/companies/_config/columns-data.tsx +1 -1
  142. package/dist/templates/spark/src/app/admin/contacts/_components/grid.tsx +1 -1
  143. package/dist/templates/spark/src/app/admin/customers/_config/columns-data.tsx +1 -1
  144. package/dist/templates/spark/src/app/admin/drive/_config/columns-data.tsx +1 -1
  145. package/dist/templates/spark/src/app/admin/emails/_components/send-email.tsx +1 -1
  146. package/dist/templates/spark/src/app/admin/emails/_config/columns-data.tsx +1 -1
  147. package/dist/templates/spark/src/app/admin/employees/_config/columns-data.tsx +1 -1
  148. package/dist/templates/spark/src/app/admin/executions/[id]/@dashboard/page.tsx +1 -1
  149. package/dist/templates/spark/src/app/admin/executions/_config/columns-data.tsx +1 -1
  150. package/dist/templates/spark/src/app/admin/products/[id]/(preview)/page.tsx +1 -1
  151. package/dist/templates/spark/src/app/admin/products/_config/columns-data.tsx +1 -1
  152. package/dist/templates/spark/src/app/admin/projects/[id]/(dashboard)/page.tsx +1 -1
  153. package/dist/templates/spark/src/app/admin/projects/[id]/messages/page.tsx +1 -1
  154. package/dist/templates/spark/src/app/admin/projects/[id]/statistics/page.tsx +1 -1
  155. package/dist/templates/spark/src/app/admin/projects/_config/columns-data.tsx +1 -1
  156. package/dist/templates/spark/src/app/admin/purchase-order-items/_config/columns-data.tsx +1 -1
  157. package/dist/templates/spark/src/app/admin/purchase-order-items/_config/columns-inline.tsx +1 -1
  158. package/dist/templates/spark/src/app/admin/purchase-order-items/_config/commands.tsx +1 -1
  159. package/dist/templates/spark/src/app/admin/purchase-orders/[id]/(default)/@dashboard/page.tsx +1 -1
  160. package/dist/templates/spark/src/app/admin/purchase-orders/_config/columns-data.tsx +1 -1
  161. package/dist/templates/spark/src/app/admin/quotation-items/_config/commands.tsx +1 -1
  162. package/dist/templates/spark/src/app/admin/quotations/[id]/(default)/@dashboard/page.tsx +1 -1
  163. package/dist/templates/spark/src/app/admin/quotations/_config/columns-data.tsx +1 -1
  164. package/dist/templates/spark/src/app/admin/run-tasks/_config/columns-data.tsx +1 -1
  165. package/dist/templates/spark/src/app/admin/runs/[id]/@dashboard/page.tsx +1 -1
  166. package/dist/templates/spark/src/app/admin/runs/_config/columns-data.tsx +1 -1
  167. package/dist/templates/spark/src/app/admin/sales-invoices/[id]/@dashboard/page.tsx +1 -1
  168. package/dist/templates/spark/src/app/admin/sales-invoices/_config/columns-data.tsx +1 -1
  169. package/dist/templates/spark/src/app/admin/sales-order-executions/_config/columns-data.tsx +1 -1
  170. package/dist/templates/spark/src/app/admin/sales-order-executions/_config/columns-inline.tsx +1 -1
  171. package/dist/templates/spark/src/app/admin/sales-order-executions/_config/commands.tsx +1 -1
  172. package/dist/templates/spark/src/app/admin/sales-order-items/_config/commands.tsx +1 -1
  173. package/dist/templates/spark/src/app/admin/sales-orders/[id]/(default)/@dashboard/page.tsx +1 -1
  174. package/dist/templates/spark/src/app/admin/sales-orders/[id]/(default)/layout.tsx +1 -1
  175. package/dist/templates/spark/src/app/admin/sales-orders/_config/columns-data.tsx +1 -1
  176. package/dist/templates/spark/src/app/admin/schedule/_components/schedule-card.tsx +1 -1
  177. package/dist/templates/spark/src/app/admin/schedule/_components/schedule-month-view.tsx +1 -1
  178. package/dist/templates/spark/src/app/admin/suppliers/_config/columns-data.tsx +1 -1
  179. package/dist/templates/spark/src/app/admin/tasks/_components/subproject-selector.tsx +1 -1
  180. package/dist/templates/spark/src/app/admin/tasks/_config/columns-data.tsx +1 -1
  181. package/dist/templates/spark/src/app/admin/tasks/_config/columns-inline.tsx +1 -1
  182. package/dist/templates/spark/src/app/admin/tasks/_config/commands.tsx +1 -1
  183. package/dist/templates/spark/src/app/admin/technical-sheets/[id]/page.tsx +1 -1
  184. package/dist/templates/spark/src/app/admin/technical-sheets/_config/columns-data.tsx +1 -1
  185. package/dist/templates/spark/src/app/admin/technical-sheets/_config/commands.tsx +1 -1
  186. package/dist/templates/spark/src/app/admin/templates/_config/columns-data.tsx +1 -1
  187. package/dist/templates/spark/src/app/auth/layout.tsx +1 -1
  188. package/dist/templates/spark/src/app/layout.tsx +25 -10
  189. package/dist/templates/spark/src/server/auth/init.ts +1 -0
  190. package/package.json +6 -6
@@ -0,0 +1,18 @@
1
+ import "server-cli-only";
2
+
3
+ import { queueEventAdapter } from "@tulip-systems/events/queue";
4
+ import { EventBus } from "@tulip-systems/events/server";
5
+ import { queue } from "@/server/queue/init";
6
+ import { eventDispatchTask } from "./handlers";
7
+ import { appEventListeners } from "./listeners";
8
+
9
+ /**
10
+ * Initializes the event bus for the application.
11
+ */
12
+ export const events = EventBus.init({
13
+ listeners: appEventListeners,
14
+ adapter: queueEventAdapter({
15
+ queue,
16
+ task: eventDispatchTask,
17
+ }),
18
+ });
@@ -0,0 +1,17 @@
1
+ import "server-cli-only";
2
+
3
+ import { createEventListeners } from "@tulip-systems/events";
4
+ import { notificationEventListeners } from "@/app/admin/notifications/_lib/listeners.server";
5
+ import { projectHistoryEventListeners } from "@/app/admin/projects/_lib/listeners.server";
6
+ import { taskHistoryEventListeners } from "@/app/admin/tasks/_lib/listeners.server";
7
+
8
+ /**
9
+ * Event listeners
10
+ */
11
+ export const appEventListeners = createEventListeners({
12
+ notifications: notificationEventListeners,
13
+ history: {
14
+ ...projectHistoryEventListeners,
15
+ ...taskHistoryEventListeners,
16
+ },
17
+ });
@@ -0,0 +1,5 @@
1
+ import { createQueueHandlers } from "@tulip-systems/queue";
2
+ import { queueLogTaskHandler } from "@/app/admin/queue/_lib/queue";
3
+ import { eventDispatchTaskHandler } from "@/server/events/handlers";
4
+
5
+ export const queueHandlers = createQueueHandlers([queueLogTaskHandler, eventDispatchTaskHandler]);
@@ -0,0 +1,16 @@
1
+ import { url } from "@tulip-systems/core";
2
+ import { qstashAdapter } from "@tulip-systems/queue/qstash";
3
+ import { Queue } from "@tulip-systems/queue/server";
4
+ import { env } from "@/env";
5
+
6
+ export const queue = Queue.init({
7
+ adapter: qstashAdapter({
8
+ baseUrl: env.QSTASH_URL,
9
+ token: env.QSTASH_TOKEN,
10
+ endpoint: url("/api/queue/dispatch"),
11
+ currentSigningKey: env.QSTASH_CURRENT_SIGNING_KEY,
12
+ nextSigningKey: env.QSTASH_NEXT_SIGNING_KEY,
13
+ label: "tulip-demo-code",
14
+ devMode: env.QSTASH_DEV,
15
+ }),
16
+ });
@@ -1,6 +1,9 @@
1
1
  import { type InferRouterInputs, type InferRouterOutputs, lazy } from "@orpc/server";
2
2
 
3
3
  export const appRouter = {
4
+ history: lazy(() =>
5
+ import("@/app/admin/history/_lib/router").then((module) => ({ default: module.historyRouter })),
6
+ ),
4
7
  assistant: lazy(() =>
5
8
  import("@/app/admin/assistant/_lib/router").then((module) => ({
6
9
  default: module.assistantRouter,
@@ -41,6 +44,16 @@ export const appRouter = {
41
44
  default: module.projectsRouter,
42
45
  })),
43
46
  ),
47
+ notifications: lazy(() =>
48
+ import("@/app/admin/notifications/_lib/router").then((module) => ({
49
+ default: module.notificationsRouter,
50
+ })),
51
+ ),
52
+ queue: lazy(() =>
53
+ import("@/app/admin/queue/_lib/router").then((module) => ({
54
+ default: module.queueRouter,
55
+ })),
56
+ ),
44
57
  timeEntries: lazy(() =>
45
58
  import("@/app/admin/time/_lib/router").then((module) => ({
46
59
  default: module.timeEntriesRouter,
@@ -66,6 +79,16 @@ export const appRouter = {
66
79
  default: module.prospectsRouter,
67
80
  })),
68
81
  ),
82
+ quotations: lazy(() =>
83
+ import("@/app/admin/quotations/_lib/router").then((module) => ({
84
+ default: module.quotationsRouter,
85
+ })),
86
+ ),
87
+ quotationBlocks: lazy(() =>
88
+ import("@/app/admin/quotations/_lib/router").then((module) => ({
89
+ default: module.quotationBlocksRouter,
90
+ })),
91
+ ),
69
92
  };
70
93
 
71
94
  // export type definition of API
@@ -21,94 +21,93 @@
21
21
  "dependencies": {
22
22
  "@aws-sdk/client-s3": "^3.1106.0",
23
23
  "@aws-sdk/s3-request-presigner": "^3.1106.0",
24
- "@better-auth/passkey": "^1.6.26",
24
+ "@better-auth/passkey": "catalog:",
25
25
  "@dnd-kit/collision": "^0.5.0",
26
26
  "@dnd-kit/helpers": "^0.5.0",
27
27
  "@dnd-kit/react": "^0.5.0",
28
- "@hookform/resolvers": "^5.7.1",
29
- "@orpc/client": "^1.14.15",
30
- "@orpc/server": "^1.14.15",
31
- "@orpc/tanstack-query": "^1.14.15",
28
+ "@hookform/resolvers": "catalog:",
29
+ "@orpc/client": "catalog:",
30
+ "@orpc/server": "catalog:",
31
+ "@orpc/tanstack-query": "catalog:",
32
32
  "@react-pdf/renderer": "^4.5.1",
33
33
  "@t3-oss/env-nextjs": "^0.13.11",
34
- "@tailwindcss/typography": "^0.5.20",
35
- "@tanstack/db": "^0.6.17",
36
- "@tanstack/react-query": "^5.101.4",
34
+ "@tailwindcss/typography": "catalog:",
35
+ "@tanstack/db": "^0.9.2",
36
+ "@tanstack/react-query": "catalog:",
37
37
  "@tanstack/react-table": "^8.21.3",
38
- "@tiptap/core": "^3.29.2",
39
- "@tiptap/extension-blockquote": "^3.29.2",
40
- "@tiptap/extension-bold": "^3.29.2",
41
- "@tiptap/extension-document": "^3.29.2",
42
- "@tiptap/extension-hard-break": "^3.29.2",
43
- "@tiptap/extension-heading": "^3.29.2",
44
- "@tiptap/extension-highlight": "^3.29.2",
45
- "@tiptap/extension-horizontal-rule": "^3.29.2",
46
- "@tiptap/extension-italic": "^3.29.2",
47
- "@tiptap/extension-link": "^3.29.2",
48
- "@tiptap/extension-list": "^3.29.2",
49
- "@tiptap/extension-paragraph": "^3.29.2",
50
- "@tiptap/extension-strike": "^3.29.2",
51
- "@tiptap/extension-text": "^3.29.2",
52
- "@tiptap/extension-text-style": "^3.29.2",
53
- "@tiptap/extension-underline": "^3.29.2",
54
- "@tiptap/extensions": "^3.29.2",
55
- "@tulip-systems/app": "0.12.3",
56
- "@tulip-systems/auth": "0.12.3",
57
- "@tulip-systems/commands": "0.12.3",
58
- "@tulip-systems/core": "0.12.3",
59
- "@tulip-systems/data-tables": "0.12.3",
60
- "@tulip-systems/drive": "0.12.3",
61
- "@tulip-systems/drive-local": "0.12.3",
62
- "@tulip-systems/editor": "0.12.3",
63
- "@tulip-systems/editor-storage": "0.12.3",
64
- "@tulip-systems/inline": "0.12.3",
65
- "@tulip-systems/query": "0.12.3",
66
- "@tulip-systems/storage": "0.12.3",
67
- "@tulip-systems/ui": "0.12.3",
38
+ "@tiptap/core": "catalog:",
39
+ "@tiptap/extension-blockquote": "catalog:",
40
+ "@tiptap/extension-bold": "catalog:",
41
+ "@tiptap/extension-document": "catalog:",
42
+ "@tiptap/extension-hard-break": "catalog:",
43
+ "@tiptap/extension-heading": "catalog:",
44
+ "@tiptap/extension-highlight": "catalog:",
45
+ "@tiptap/extension-horizontal-rule": "catalog:",
46
+ "@tiptap/extension-italic": "catalog:",
47
+ "@tiptap/extension-link": "catalog:",
48
+ "@tiptap/extension-list": "catalog:",
49
+ "@tiptap/extension-paragraph": "catalog:",
50
+ "@tiptap/extension-strike": "catalog:",
51
+ "@tiptap/extension-text": "catalog:",
52
+ "@tiptap/extension-text-style": "catalog:",
53
+ "@tiptap/extension-underline": "catalog:",
54
+ "@tiptap/extensions": "catalog:",
55
+ "@tulip-systems/app": "0.13.0",
56
+ "@tulip-systems/auth": "0.13.0",
57
+ "@tulip-systems/commands": "0.13.0",
58
+ "@tulip-systems/core": "0.13.0",
59
+ "@tulip-systems/data-tables": "0.13.0",
60
+ "@tulip-systems/drive": "0.13.0",
61
+ "@tulip-systems/drive-local": "0.13.0",
62
+ "@tulip-systems/editor": "0.13.0",
63
+ "@tulip-systems/editor-storage": "0.13.0",
64
+ "@tulip-systems/inline": "0.13.0",
65
+ "@tulip-systems/query": "0.13.0",
66
+ "@tulip-systems/storage": "0.13.0",
67
+ "@tulip-systems/ui": "0.13.0",
68
68
  "@vercel/functions": "^3.9.0",
69
69
  "@zip.js/zip.js": "^2.8.34",
70
- "better-auth": "^1.6.26",
71
- "class-variance-authority": "^0.7.1",
70
+ "better-auth": "catalog:",
71
+ "class-variance-authority": "catalog:",
72
72
  "client-only": "^0.0.1",
73
- "date-fns": "^4.4.0",
73
+ "date-fns": "catalog:",
74
74
  "decimal.js": "^10.6.0",
75
- "drizzle-orm": "^0.45.2",
75
+ "drizzle-orm": "catalog:",
76
76
  "drizzle-seed": "^0.3.1",
77
- "drizzle-zod": "^0.8.3",
78
- "lucide-react": "^1.30.0",
79
- "motion": "^13.0.0",
80
- "next": "16.3.0",
81
- "nuqs": "2.9.5",
77
+ "drizzle-zod": "catalog:",
78
+ "lucide-react": "catalog:",
79
+ "motion": "catalog:",
80
+ "next": "catalog:",
81
+ "nuqs": "catalog:",
82
82
  "pdf-lib": "^1.17.1",
83
- "pg": "8.22.0",
84
- "postgres": "^3.4.9",
85
- "react": "19.2.8",
86
- "react-dom": "19.2.8",
87
- "react-hook-form": "^7.84.0",
83
+ "pg": "catalog:",
84
+ "react": "catalog:",
85
+ "react-dom": "catalog:",
86
+ "react-hook-form": "catalog:",
88
87
  "react-pdf-tailwind": "^3.0.0",
89
- "recharts": "3.10.1",
88
+ "recharts": "catalog:",
90
89
  "resend": "^6.18.1",
91
90
  "sanitize-filename": "^1.6.4",
92
91
  "sharp": "^0.35.3",
93
92
  "server-only": "^0.0.1",
94
93
  "uuid": "^14.0.1",
95
94
  "xlsx": "^0.18.5",
96
- "zod": "^4.4.3"
95
+ "zod": "catalog:"
97
96
  },
98
97
  "devDependencies": {
99
98
  "@faker-js/faker": "^10.5.0",
100
- "@tailwindcss/postcss": "^4.3.3",
101
- "@types/node": "^26.2.0",
102
- "@types/pg": "^8.21.0",
103
- "@types/react": "19.2.17",
104
- "@types/react-dom": "19.2.4",
99
+ "@tailwindcss/postcss": "catalog:",
100
+ "@types/node": "catalog:",
101
+ "@types/pg": "catalog:",
102
+ "@types/react": "catalog:",
103
+ "@types/react-dom": "catalog:",
105
104
  "baseline-browser-mapping": "^2.11.12",
106
- "dotenv-cli": "^11.0.0",
107
- "drizzle-kit": "^0.31.10",
108
- "postcss": "^8.5.26",
105
+ "dotenv-cli": "catalog:",
106
+ "drizzle-kit": "catalog:",
107
+ "postcss": "catalog:",
109
108
  "server-cli-only": "^0.3.2",
110
- "tailwindcss": "^4.3.3",
111
- "tsx": "^4.23.11",
112
- "typescript": "5.9.3"
109
+ "tailwindcss": "catalog:",
110
+ "tsx": "catalog:",
111
+ "typescript": "catalog:"
113
112
  }
114
113
  }
@@ -3,6 +3,7 @@
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { Allowed } from "@tulip-systems/auth/permissions/client";
5
5
  import { formatDate, formatDuration } from "@tulip-systems/core";
6
+ import { Link } from "@tulip-systems/core/navigation";
6
7
  import { EditorContent, EditorMenuBubble } from "@tulip-systems/editor/client";
7
8
  import {
8
9
  InlineComboboxDropdown,
@@ -16,7 +17,6 @@ import {
16
17
  import { buttonVariants } from "@tulip-systems/ui/button";
17
18
  import { DataList, DataListItem, DataListTitle, DataListValue } from "@tulip-systems/ui/data-list";
18
19
  import { DataStackLayout, DataStackRow } from "@tulip-systems/ui/data-stack";
19
- import Link from "next/link";
20
20
  import { notFound } from "next/navigation";
21
21
  import { Suspense, use } from "react";
22
22
  import { z } from "zod";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatDate, formatDuration } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { generateClientHref } from "../../clients/_lib/helpers";
8
8
  import { calculateTotalDuration } from "../../registrations/_lib/helpers";
9
9
  import type { AssignmentTableData } from "../_components/tables";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatPhone } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { formatAddress } from "../../addresses/_lib/helpers";
8
8
  import type { CompanyTableData } from "../_components/tables";
9
9
 
@@ -7,11 +7,11 @@ import {
7
7
  DropdownCommandMenu,
8
8
  } from "@tulip-systems/commands/client";
9
9
  import { formatPhone } from "@tulip-systems/core";
10
+ import { Link } from "@tulip-systems/core/navigation";
10
11
  import { Card, CardContent, CardHeader, CardTitle } from "@tulip-systems/ui/card";
11
12
  import { cn } from "@tulip-systems/ui/cn";
12
13
  import { EmptyPage, EmptyPageTitle } from "@tulip-systems/ui/empty";
13
14
  import { Briefcase, Mail, Phone } from "lucide-react";
14
- import Link from "next/link";
15
15
  import type { ComponentProps } from "react";
16
16
  import { contactDeleteCommand, contactUpdateCommand } from "../_config/commands";
17
17
  import type { Contact } from "../_lib/validators";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatPhone } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { formatAddress } from "../../addresses/_lib/helpers";
8
8
  import type { CustomerTableData } from "../_components/tables";
9
9
 
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import type { Row } from "@tanstack/react-table";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell, TableTextCell } from "@tulip-systems/data-tables/client";
6
7
  import { useDriveNavigation } from "@tulip-systems/drive/client";
@@ -13,7 +14,6 @@ import {
13
14
  import { findStatus } from "@tulip-systems/ui/status";
14
15
  import { Tooltip, TooltipContent, TooltipTrigger } from "@tulip-systems/ui/tooltip";
15
16
  import { FolderIcon } from "lucide-react";
16
- import Link from "next/link";
17
17
  import { nodeSubtypeConfig, nodeSubtypeVariants } from "./types";
18
18
 
19
19
  export type DriveColumn = LocalDriveNodeWithAsset;
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { type DefaultError, type MutationOptions, useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { useAction } from "@tulip-systems/core/client";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { LocalDriveViewLoading } from "@tulip-systems/drive-local/client";
6
7
  import { EditorContent, EditorMenuFixed } from "@tulip-systems/editor/client";
7
8
  import {
@@ -26,7 +27,6 @@ import { ScrollArea } from "@tulip-systems/ui/scroll-area";
26
27
  import { Skeleton } from "@tulip-systems/ui/skeleton";
27
28
  import { Toggle } from "@tulip-systems/ui/toggle";
28
29
  import { FileIcon } from "lucide-react";
29
- import Link from "next/link";
30
30
  import { notFound, useRouter } from "next/navigation";
31
31
  import { createContext, type PropsWithChildren, Suspense, use, useState } from "react";
32
32
  import { z } from "zod";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatDateTime } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { Fragment } from "react";
8
8
  import type { Client } from "../../clients/_lib/validators";
9
9
  import type { Email } from "../_lib/validators";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
 
3
+ import { Link } from "@tulip-systems/core/navigation";
3
4
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
4
5
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
5
- import Link from "next/link";
6
6
  import type { Role } from "@/server/auth/permissions";
7
7
  import type { EmployeeTableData } from "../_components/tables";
8
8
  import { EmployeeRoleField } from "./roles";
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { formatDuration } from "@tulip-systems/core";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { EditorContent, EditorMenuBubble } from "@tulip-systems/editor/client";
6
7
  import {
7
8
  InlineDateInputField,
@@ -16,7 +17,6 @@ import {
16
17
  import { DataList, DataListItem, DataListTitle, DataListValue } from "@tulip-systems/ui/data-list";
17
18
  import { DataStackLayout, DataStackRow } from "@tulip-systems/ui/data-stack";
18
19
  import { format, isValid } from "date-fns";
19
- import Link from "next/link";
20
20
  import { notFound } from "next/navigation";
21
21
  import { use } from "react";
22
22
  import { z } from "zod";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatDate } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { Suspense } from "react";
8
8
  import { generateClientHref } from "../../clients/_lib/helpers";
9
9
  import { EmployeeAvatars, EmployeeAvatarsLoading } from "../../employees/_components/avatars";
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useSuspenseQueries } from "@tanstack/react-query";
4
4
  import { Allowed } from "@tulip-systems/auth/permissions/client";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { getLocalDriveFileUrl } from "@tulip-systems/drive-local";
6
7
  import { Editor, EditorContent } from "@tulip-systems/editor/client";
7
8
  import {
@@ -12,7 +13,6 @@ import {
12
13
  } from "@tulip-systems/ui/accordion";
13
14
  import { Badge } from "@tulip-systems/ui/badge";
14
15
  import { Separator } from "@tulip-systems/ui/separator";
15
- import Link from "next/link";
16
16
  import { notFound } from "next/navigation";
17
17
  import { use } from "react";
18
18
  import { richTextEditorPreset } from "@/lib/config/editor";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { ProductImageCard } from "../_components/image-card";
8
8
  import type { ProductTableData } from "../_components/tables";
9
9
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { Allowed } from "@tulip-systems/auth/permissions/client";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { EditorContent, EditorMenuBubble } from "@tulip-systems/editor/client";
6
7
  import {
7
8
  InlineComboboxDropdown,
@@ -19,7 +20,6 @@ import {
19
20
  import { buttonVariants } from "@tulip-systems/ui/button";
20
21
  import { DataStackLayout, DataStackRow } from "@tulip-systems/ui/data-stack";
21
22
  import { format, isValid, parse } from "date-fns";
22
- import Link from "next/link";
23
23
  import { notFound } from "next/navigation";
24
24
  import { use } from "react";
25
25
  import { z } from "zod";
@@ -3,6 +3,7 @@
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { Allowed } from "@tulip-systems/auth/permissions/client";
5
5
  import { formatDate } from "@tulip-systems/core";
6
+ import { Link } from "@tulip-systems/core/navigation";
6
7
  import { Editor, EditorContent } from "@tulip-systems/editor/client";
7
8
  import { offsetPagination } from "@tulip-systems/query";
8
9
  import { useFilters, usePagination } from "@tulip-systems/query/client";
@@ -16,7 +17,6 @@ import {
16
17
  PaginationNext,
17
18
  PaginationPrevious,
18
19
  } from "@tulip-systems/ui/pagination";
19
- import Link from "next/link";
20
20
  import { use, useDeferredValue, useMemo } from "react";
21
21
  import { runsFilters } from "@/app/admin/runs/_config/filters";
22
22
  import { richTextEditorPreset } from "@/lib/config/editor";
@@ -3,12 +3,12 @@
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { Allowed } from "@tulip-systems/auth/permissions/client";
5
5
  import { formatCurrency, formatDate, formatDuration } from "@tulip-systems/core";
6
+ import { Link } from "@tulip-systems/core/navigation";
6
7
  import { Card, CardHeader, CardTitle } from "@tulip-systems/ui/card";
7
8
  import { cn } from "@tulip-systems/ui/cn";
8
9
  import { Progress } from "@tulip-systems/ui/progress";
9
10
  import { differenceInCalendarDays } from "date-fns";
10
11
  import { EuroIcon, TimerIcon } from "lucide-react";
11
- import Link from "next/link";
12
12
  import { notFound } from "next/navigation";
13
13
  import { use } from "react";
14
14
  import { generateClientHref } from "@/app/admin/clients/_lib/helpers";
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency, formatDate } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import {
6
7
  createTableSelectCell,
@@ -9,7 +10,6 @@ import {
9
10
  TableStatusCell,
10
11
  TableTextCell,
11
12
  } from "@tulip-systems/data-tables/client";
12
- import Link from "next/link";
13
13
  import { generateClientHref } from "../../clients/_lib/helpers";
14
14
  import type { Client } from "../../clients/_lib/validators";
15
15
  import type { Project } from "../_lib/validators";
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import {
6
7
  createTableDragHandleCell,
7
8
  createTableSelectCell,
8
9
  } from "@tulip-systems/data-tables/client";
9
- import Link from "next/link";
10
10
  import { ProductImageCard } from "../../products/_components/image-card";
11
11
  import type { Product, ProductImage } from "../../products/_lib/validators";
12
12
  import type { PurchaseOrderItem } from "../_lib/validators";
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import {
6
7
  createTableDragHandleCell,
@@ -14,7 +15,6 @@ import {
14
15
  InlineTableCell,
15
16
  InlineTableCellError,
16
17
  } from "@tulip-systems/inline/client";
17
- import Link from "next/link";
18
18
  import { z } from "zod";
19
19
  import { ProductImageCard } from "@/app/admin/products/_components/image-card";
20
20
  import { orpc } from "@/server/router/client";
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { commandBuilder, ensureArray } from "@tulip-systems/commands";
4
4
  import { CommandEmpty, CommandLabel, DeleteCommand } from "@tulip-systems/commands/client";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { toast } from "@tulip-systems/ui/sonner";
6
7
  import { ImportIcon } from "lucide-react";
7
- import Link from "next/link";
8
8
  import { orpc } from "@/server/router/client";
9
9
 
10
10
  export const purchaseOrderItemImportProductsCommand = commandBuilder
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useSuspenseQueries, useSuspenseQuery } from "@tanstack/react-query";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { EditorContent, EditorMenuBubble } from "@tulip-systems/editor/client";
5
6
  import {
6
7
  InlineComboboxDropdown,
@@ -11,7 +12,6 @@ import {
11
12
  } from "@tulip-systems/inline/client";
12
13
  import { buttonVariants } from "@tulip-systems/ui/button";
13
14
  import { DataStackLayout, DataStackRow } from "@tulip-systems/ui/data-stack";
14
- import Link from "next/link";
15
15
  import { notFound } from "next/navigation";
16
16
  import { use } from "react";
17
17
  import { z } from "zod";
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency, formatDate, formatDateTime } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
7
  import { Editor, EditorContent } from "@tulip-systems/editor/client";
7
- import Link from "next/link";
8
8
  import { Fragment } from "react";
9
9
  import { richTextEditorPreset } from "@/lib/config/editor";
10
10
  import { EmailStatusField } from "../../emails/_config/status";
@@ -7,10 +7,10 @@ import {
7
7
  CommandLabel,
8
8
  DeleteCommand,
9
9
  } from "@tulip-systems/commands/client";
10
+ import { Link } from "@tulip-systems/core/navigation";
10
11
  import { convertHTMLToEditorContent } from "@tulip-systems/editor";
11
12
  import { toast } from "@tulip-systems/ui/sonner";
12
13
  import { Grid3X3Icon, SheetIcon, TagsIcon } from "lucide-react";
13
- import Link from "next/link";
14
14
  import { Icons } from "@/components/icons";
15
15
  import { orpc } from "@/server/router/client";
16
16
  import {
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { formatDate } from "@tulip-systems/core";
5
+ import { Link } from "@tulip-systems/core/navigation";
5
6
  import { EditorContent, EditorMenuBubble } from "@tulip-systems/editor/client";
6
7
  import {
7
8
  InlineComboboxDropdown,
@@ -18,7 +19,6 @@ import { buttonVariants } from "@tulip-systems/ui/button";
18
19
  import { DataList, DataListItem, DataListTitle, DataListValue } from "@tulip-systems/ui/data-list";
19
20
  import { DataStackLayout, DataStackRow } from "@tulip-systems/ui/data-stack";
20
21
  import { format, isValid, parse } from "date-fns";
21
- import Link from "next/link";
22
22
  import { notFound } from "next/navigation";
23
23
  import { use } from "react";
24
24
  import { z } from "zod";
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import { formatCurrency, formatDate, formatDateTime } from "@tulip-systems/core";
4
+ import { Link } from "@tulip-systems/core/navigation";
4
5
  import { TableCell, type TableColumnDef, TableColumnHeader } from "@tulip-systems/data-tables";
5
6
  import { createTableSelectCell } from "@tulip-systems/data-tables/client";
6
- import Link from "next/link";
7
7
  import { Fragment } from "react";
8
8
  import { calculateNetAmount } from "@/lib/helpers/calculate";
9
9
  import { generateClientHref } from "../../clients/_lib/helpers";