@svgrid/enterprise 2.5.2 → 2.6.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 (620) hide show
  1. package/dist/SvAlertRuleEditor.svelte.d.ts +13 -0
  2. package/dist/SvAlertsManager.svelte.d.ts +14 -0
  3. package/dist/SvAlertsPanel.svelte.d.ts +9 -0
  4. package/dist/SvAuthGate.svelte.d.ts +22 -0
  5. package/dist/SvBoard.svelte.d.ts +35 -0
  6. package/dist/SvExportMenu.svelte.d.ts +61 -0
  7. package/dist/SvExpressionEditor.svelte.d.ts +12 -0
  8. package/dist/SvFileInput.svelte.d.ts +20 -0
  9. package/dist/SvGridAlerts.svelte.d.ts +77 -0
  10. package/dist/SvGridBoard.svelte.d.ts +30 -0
  11. package/dist/SvGridEditPanel.svelte.d.ts +73 -0
  12. package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
  13. package/dist/SvGridScheduler.svelte.d.ts +30 -0
  14. package/dist/SvImportDialog.svelte.d.ts +88 -0
  15. package/dist/SvLookupInput.svelte.d.ts +21 -0
  16. package/dist/SvPivotDesigner.svelte.d.ts +176 -0
  17. package/dist/SvRecordDetail.svelte.d.ts +58 -0
  18. package/dist/SvSchedule.svelte.d.ts +29 -0
  19. package/dist/SvSchemaChart.svelte.d.ts +61 -0
  20. package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
  21. package/dist/alerts/alert-engine-attach.d.ts +79 -0
  22. package/dist/alerts/alert-engine-attach.js +106 -0
  23. package/dist/alerts/alert-engine.d.ts +42 -0
  24. package/dist/alerts/alert-engine.js +196 -0
  25. package/dist/alerts/alert-formats.d.ts +26 -0
  26. package/dist/alerts/alert-formats.js +58 -0
  27. package/dist/alerts/alert-observer.d.ts +54 -0
  28. package/dist/alerts/alert-observer.js +156 -0
  29. package/dist/alerts/alert-scheduler.d.ts +30 -0
  30. package/dist/alerts/alert-scheduler.js +54 -0
  31. package/dist/alerts/alert-storage.d.ts +31 -0
  32. package/dist/alerts/alert-storage.js +92 -0
  33. package/dist/alerts/alert-store.svelte.d.ts +24 -0
  34. package/dist/alerts/alert-store.svelte.js +69 -0
  35. package/dist/alerts/alert-types.d.ts +86 -0
  36. package/dist/alerts/alert-types.js +1 -0
  37. package/dist/alerts.d.ts +2 -0
  38. package/{src/alerts.ts → dist/alerts.js} +9 -9
  39. package/dist/board.d.ts +7 -0
  40. package/{src/board.ts → dist/board.js} +13 -14
  41. package/dist/cdn/svgrid-enterprise.svelte-external.js +2987 -2981
  42. package/dist/designer/assets/{index-CM5xvaOy.js → index-BF0UH638.js} +3 -3
  43. package/dist/designer/assets/{src-D-ET9Mmo.js → src-BPJruwB9.js} +184 -184
  44. package/dist/designer/index.html +2 -2
  45. package/dist/edit-panel.d.ts +105 -0
  46. package/dist/edit-panel.js +350 -0
  47. package/dist/export-conditional.d.ts +31 -0
  48. package/dist/export-conditional.js +65 -0
  49. package/dist/export-ooxml.d.ts +93 -0
  50. package/dist/export-ooxml.js +385 -0
  51. package/dist/export-pdf.d.ts +107 -0
  52. package/dist/export-pdf.js +144 -0
  53. package/dist/export-print.d.ts +55 -0
  54. package/dist/export-print.js +91 -0
  55. package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
  56. package/dist/export-serialize.js +11 -0
  57. package/dist/export-xls.d.ts +26 -0
  58. package/dist/export-xls.js +157 -0
  59. package/dist/export.d.ts +323 -0
  60. package/dist/export.js +1021 -0
  61. package/dist/expressions/evaluate.d.ts +17 -0
  62. package/dist/expressions/evaluate.js +214 -0
  63. package/dist/expressions/expression-columns.d.ts +61 -0
  64. package/dist/expressions/expression-columns.js +72 -0
  65. package/dist/expressions/expression-types.d.ts +125 -0
  66. package/dist/expressions/expression-types.js +1 -0
  67. package/dist/expressions/parse.d.ts +25 -0
  68. package/dist/expressions/parse.js +537 -0
  69. package/dist/import.d.ts +232 -0
  70. package/dist/import.js +846 -0
  71. package/dist/index.d.ts +66 -0
  72. package/dist/index.js +91 -0
  73. package/dist/install.d.ts +70 -0
  74. package/dist/install.js +61 -0
  75. package/dist/license-core.d.ts +37 -0
  76. package/dist/license-core.js +81 -0
  77. package/dist/license.d.ts +30 -0
  78. package/dist/license.js +139 -0
  79. package/dist/master-detail.d.ts +23 -0
  80. package/dist/master-detail.js +35 -0
  81. package/dist/node/studio.js +1 -1
  82. package/dist/pivot-chart.d.ts +28 -0
  83. package/dist/pivot-chart.js +71 -0
  84. package/dist/pivot-designer.d.ts +69 -0
  85. package/dist/pivot-designer.js +38 -0
  86. package/dist/pivot-enable.d.ts +6 -0
  87. package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
  88. package/dist/pivot.d.ts +111 -0
  89. package/dist/pivot.js +353 -0
  90. package/dist/print.d.ts +33 -0
  91. package/dist/print.js +61 -0
  92. package/dist/revoked.d.ts +1 -0
  93. package/{src/revoked.ts → dist/revoked.js} +5 -6
  94. package/dist/scheduler-assignments.d.ts +64 -0
  95. package/dist/scheduler-assignments.js +92 -0
  96. package/dist/scheduler-axis.d.ts +81 -0
  97. package/dist/scheduler-axis.js +180 -0
  98. package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
  99. package/dist/scheduler-booking.js +50 -0
  100. package/dist/scheduler-config.d.ts +177 -0
  101. package/dist/scheduler-config.js +1 -0
  102. package/dist/scheduler-dependencies.d.ts +89 -0
  103. package/dist/scheduler-dependencies.js +179 -0
  104. package/dist/scheduler-freebusy.d.ts +19 -0
  105. package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
  106. package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
  107. package/dist/scheduler-heatmap.js +41 -0
  108. package/dist/scheduler-resource-tree.d.ts +48 -0
  109. package/dist/scheduler-resource-tree.js +78 -0
  110. package/dist/scheduler-slots.d.ts +37 -0
  111. package/dist/scheduler-slots.js +80 -0
  112. package/dist/scheduler-summary.d.ts +41 -0
  113. package/dist/scheduler-summary.js +54 -0
  114. package/dist/scheduler.d.ts +7 -0
  115. package/{src/scheduler.ts → dist/scheduler.js} +13 -14
  116. package/dist/scheduling.d.ts +132 -0
  117. package/dist/scheduling.js +228 -0
  118. package/dist/schema-designer.d.ts +42 -0
  119. package/dist/schema-designer.js +117 -0
  120. package/dist/schema.d.ts +369 -0
  121. package/dist/schema.js +216 -0
  122. package/dist/smart-shim.d.ts +62 -0
  123. package/dist/smart-shim.js +34 -0
  124. package/dist/sources/aggregate.d.ts +43 -0
  125. package/dist/sources/aggregate.js +60 -0
  126. package/dist/sources/auth-supabase.d.ts +69 -0
  127. package/dist/sources/auth-supabase.js +39 -0
  128. package/dist/sources/dashboard.d.ts +65 -0
  129. package/dist/sources/dashboard.js +95 -0
  130. package/dist/sources/field-inference.d.ts +23 -0
  131. package/dist/sources/field-inference.js +52 -0
  132. package/dist/sources/filters.d.ts +35 -0
  133. package/dist/sources/filters.js +52 -0
  134. package/dist/sources/index.d.ts +18 -0
  135. package/dist/sources/index.js +18 -0
  136. package/dist/sources/introspect-supabase.d.ts +30 -0
  137. package/dist/sources/introspect-supabase.js +134 -0
  138. package/dist/sources/realtime-supabase.d.ts +37 -0
  139. package/dist/sources/realtime-supabase.js +52 -0
  140. package/dist/sources/relation-lookup.d.ts +50 -0
  141. package/dist/sources/relation-lookup.js +77 -0
  142. package/dist/sources/rest-adapters.d.ts +48 -0
  143. package/dist/sources/rest-adapters.js +85 -0
  144. package/dist/sources/rest.d.ts +38 -0
  145. package/dist/sources/rest.js +86 -0
  146. package/dist/sources/schema-from-columns.d.ts +37 -0
  147. package/dist/sources/schema-from-columns.js +48 -0
  148. package/dist/sources/supabase.d.ts +33 -0
  149. package/dist/sources/supabase.js +74 -0
  150. package/dist/sources/with-entity-rules.d.ts +25 -0
  151. package/dist/sources/with-entity-rules.js +47 -0
  152. package/dist/sources/with-relation-labels.d.ts +26 -0
  153. package/dist/sources/with-relation-labels.js +38 -0
  154. package/dist/staged-editing.d.ts +85 -0
  155. package/dist/staged-editing.js +0 -0
  156. package/dist/studio/bug-report.d.ts +61 -0
  157. package/dist/studio/bug-report.js +126 -0
  158. package/dist/studio/cli.d.ts +56 -0
  159. package/dist/studio/cli.js +70 -0
  160. package/dist/studio/copilot-core.d.ts +22 -0
  161. package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
  162. package/dist/studio/csv.d.ts +36 -0
  163. package/dist/studio/csv.js +173 -0
  164. package/dist/studio/db-connect-string.d.ts +45 -0
  165. package/dist/studio/db-connect-string.js +113 -0
  166. package/dist/studio/deploy-cli.d.ts +35 -0
  167. package/dist/studio/deploy-cli.js +81 -0
  168. package/dist/studio/emit-project.d.ts +77 -0
  169. package/dist/studio/emit-project.js +5389 -0
  170. package/dist/studio/emit-schema.d.ts +110 -0
  171. package/dist/studio/emit-schema.js +1128 -0
  172. package/dist/studio/index.d.ts +35 -0
  173. package/dist/studio/index.js +38 -0
  174. package/dist/studio/init-flow.d.ts +58 -0
  175. package/dist/studio/init-flow.js +451 -0
  176. package/dist/studio/introspect-db.d.ts +47 -0
  177. package/dist/studio/introspect-db.js +255 -0
  178. package/dist/studio/introspect-openapi.d.ts +19 -0
  179. package/dist/studio/introspect-openapi.js +244 -0
  180. package/dist/studio/introspect-prisma.d.ts +25 -0
  181. package/dist/studio/introspect-prisma.js +164 -0
  182. package/dist/studio/introspect.d.ts +35 -0
  183. package/dist/studio/introspect.js +306 -0
  184. package/dist/studio/project.d.ts +1327 -0
  185. package/dist/studio/project.js +1798 -0
  186. package/dist/studio/sample-data.d.ts +19 -0
  187. package/dist/studio/sample-data.js +207 -0
  188. package/dist/studio/samples/ats.d.ts +2 -0
  189. package/dist/studio/samples/ats.js +194 -0
  190. package/dist/studio/samples/clinic.d.ts +2 -0
  191. package/dist/studio/samples/clinic.js +171 -0
  192. package/dist/studio/samples/crm.d.ts +2 -0
  193. package/dist/studio/samples/crm.js +280 -0
  194. package/dist/studio/samples/datasets.d.ts +38 -0
  195. package/dist/studio/samples/datasets.js +296 -0
  196. package/dist/studio/samples/ecommerce.d.ts +2 -0
  197. package/dist/studio/samples/ecommerce.js +178 -0
  198. package/dist/studio/samples/events.d.ts +2 -0
  199. package/dist/studio/samples/events.js +192 -0
  200. package/dist/studio/samples/fleet.d.ts +2 -0
  201. package/dist/studio/samples/fleet.js +203 -0
  202. package/dist/studio/samples/gym.d.ts +2 -0
  203. package/dist/studio/samples/gym.js +205 -0
  204. package/dist/studio/samples/hr.d.ts +2 -0
  205. package/dist/studio/samples/hr.js +186 -0
  206. package/dist/studio/samples/index.d.ts +13 -0
  207. package/dist/studio/samples/index.js +44 -0
  208. package/dist/studio/samples/insurance.d.ts +2 -0
  209. package/dist/studio/samples/insurance.js +220 -0
  210. package/dist/studio/samples/inventory.d.ts +2 -0
  211. package/dist/studio/samples/inventory.js +204 -0
  212. package/dist/studio/samples/invoicing.d.ts +2 -0
  213. package/dist/studio/samples/invoicing.js +154 -0
  214. package/dist/studio/samples/library.d.ts +2 -0
  215. package/dist/studio/samples/library.js +171 -0
  216. package/dist/studio/samples/live-data.d.ts +5 -0
  217. package/dist/studio/samples/live-data.js +261 -0
  218. package/dist/studio/samples/projects.d.ts +2 -0
  219. package/dist/studio/samples/projects.js +203 -0
  220. package/dist/studio/samples/realestate.d.ts +2 -0
  221. package/dist/studio/samples/realestate.js +187 -0
  222. package/dist/studio/samples/restaurant.d.ts +2 -0
  223. package/dist/studio/samples/restaurant.js +180 -0
  224. package/dist/studio/samples/school.d.ts +2 -0
  225. package/dist/studio/samples/school.js +188 -0
  226. package/dist/studio/samples/shared.d.ts +142 -0
  227. package/dist/studio/samples/shared.js +164 -0
  228. package/dist/studio/samples/starter.d.ts +4 -0
  229. package/dist/studio/samples/starter.js +237 -0
  230. package/dist/studio/samples/subscriptions.d.ts +2 -0
  231. package/dist/studio/samples/subscriptions.js +175 -0
  232. package/dist/studio/samples/support.d.ts +2 -0
  233. package/dist/studio/samples/support.js +209 -0
  234. package/dist/studio/scaffold-app.d.ts +22 -0
  235. package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
  236. package/dist/studio/scaffold.d.ts +63 -0
  237. package/dist/studio/scaffold.js +346 -0
  238. package/dist/studio/screen-suites.d.ts +193 -0
  239. package/dist/studio/screen-suites.js +297 -0
  240. package/dist/studio/themes.d.ts +34 -0
  241. package/dist/studio/themes.js +41 -0
  242. package/dist/studio/ui-components.d.ts +89 -0
  243. package/dist/studio/ui-components.generated.d.ts +29 -0
  244. package/dist/studio/ui-components.generated.js +7139 -0
  245. package/dist/studio/ui-components.js +673 -0
  246. package/dist/studio/user-error.d.ts +23 -0
  247. package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
  248. package/dist/studio/verify.d.ts +34 -0
  249. package/dist/studio/verify.js +47 -0
  250. package/dist/sveltekit/in-memory.d.ts +14 -0
  251. package/dist/sveltekit/in-memory.js +113 -0
  252. package/dist/sveltekit/index.d.ts +6 -0
  253. package/dist/sveltekit/index.js +5 -0
  254. package/dist/sveltekit/query-plan.d.ts +44 -0
  255. package/dist/sveltekit/query-plan.js +76 -0
  256. package/dist/sveltekit/sql-source.d.ts +47 -0
  257. package/dist/sveltekit/sql-source.js +106 -0
  258. package/dist/sveltekit/sql.d.ts +48 -0
  259. package/dist/sveltekit/sql.js +73 -0
  260. package/dist/sveltekit/transport.d.ts +209 -0
  261. package/dist/sveltekit/transport.js +219 -0
  262. package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
  263. package/dist/sveltekit/types.js +1 -0
  264. package/dist/upgrade-prompt.d.ts +16 -0
  265. package/dist/upgrade-prompt.js +141 -0
  266. package/dist/version.d.ts +13 -0
  267. package/{src/version.ts → dist/version.js} +1 -1
  268. package/dist/watermark.d.ts +2 -0
  269. package/dist/watermark.js +146 -0
  270. package/package.json +26 -24
  271. package/src/SvBoard.dom.test.ts +0 -67
  272. package/src/SvGridAlerts.dom.test.ts +0 -113
  273. package/src/SvGridEditPanel.dom.test.ts +0 -320
  274. package/src/SvRecordDetail.dom.test.ts +0 -137
  275. package/src/SvSchedule.dom.test.ts +0 -57
  276. package/src/ai-export-pdf.dom.test.ts +0 -77
  277. package/src/ai-export-xlsx.dom.test.ts +0 -90
  278. package/src/ai-export.dom.test.ts +0 -114
  279. package/src/alerts/alert-engine-attach.ts +0 -165
  280. package/src/alerts/alert-engine.test.ts +0 -135
  281. package/src/alerts/alert-engine.ts +0 -260
  282. package/src/alerts/alert-formats.test.ts +0 -87
  283. package/src/alerts/alert-formats.ts +0 -77
  284. package/src/alerts/alert-observer.test.ts +0 -189
  285. package/src/alerts/alert-observer.ts +0 -208
  286. package/src/alerts/alert-scheduler.ts +0 -96
  287. package/src/alerts/alert-storage.test.ts +0 -54
  288. package/src/alerts/alert-storage.ts +0 -116
  289. package/src/alerts/alert-store.svelte.ts +0 -80
  290. package/src/alerts/alert-types.ts +0 -94
  291. package/src/board.dom.test.ts +0 -941
  292. package/src/edit-panel.test.ts +0 -322
  293. package/src/edit-panel.ts +0 -379
  294. package/src/export-conditional.test.ts +0 -60
  295. package/src/export-conditional.ts +0 -94
  296. package/src/export-ooxml.test.ts +0 -152
  297. package/src/export-ooxml.ts +0 -489
  298. package/src/export-pdf.test.ts +0 -138
  299. package/src/export-pdf.ts +0 -245
  300. package/src/export-print.test.ts +0 -66
  301. package/src/export-print.ts +0 -132
  302. package/src/export-serialize.test.ts +0 -56
  303. package/src/export-xls.ts +0 -199
  304. package/src/export-xlsx-roundtrip.test.ts +0 -120
  305. package/src/export-xlsx.test.ts +0 -150
  306. package/src/export.test.ts +0 -349
  307. package/src/export.ts +0 -1464
  308. package/src/expressions/evaluate.test.ts +0 -111
  309. package/src/expressions/evaluate.ts +0 -237
  310. package/src/expressions/expression-columns.ts +0 -133
  311. package/src/expressions/expression-types.ts +0 -84
  312. package/src/expressions/parse.test.ts +0 -106
  313. package/src/expressions/parse.ts +0 -610
  314. package/src/import-automap.test.ts +0 -131
  315. package/src/import-hardening.test.ts +0 -158
  316. package/src/import.test.ts +0 -415
  317. package/src/import.ts +0 -1044
  318. package/src/index.ts +0 -569
  319. package/src/install.ts +0 -154
  320. package/src/license-core.test.ts +0 -23
  321. package/src/license-core.ts +0 -107
  322. package/src/license-expiry.test.ts +0 -127
  323. package/src/license.ts +0 -137
  324. package/src/master-detail.test.ts +0 -61
  325. package/src/master-detail.ts +0 -42
  326. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
  327. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
  328. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
  329. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
  330. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
  331. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
  332. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
  333. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
  334. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
  335. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
  336. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
  337. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
  338. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
  339. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
  340. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
  341. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
  342. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
  343. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
  344. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
  345. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
  346. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
  347. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
  348. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
  349. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
  350. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
  351. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
  352. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
  353. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
  354. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
  355. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
  356. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
  357. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
  358. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
  359. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
  360. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
  361. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
  362. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
  363. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
  364. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
  365. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
  366. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
  367. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
  368. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
  369. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
  370. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
  371. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
  372. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
  373. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
  374. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
  375. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
  376. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
  377. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
  378. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
  379. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
  380. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
  381. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
  382. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
  383. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
  384. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
  385. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
  386. package/src/pivot-chart.test.ts +0 -86
  387. package/src/pivot-chart.ts +0 -112
  388. package/src/pivot-designer.ts +0 -101
  389. package/src/pivot.test.ts +0 -335
  390. package/src/pivot.ts +0 -578
  391. package/src/print.ts +0 -107
  392. package/src/scheduler-assignments.test.ts +0 -97
  393. package/src/scheduler-assignments.ts +0 -134
  394. package/src/scheduler-axis.test.ts +0 -108
  395. package/src/scheduler-axis.ts +0 -238
  396. package/src/scheduler-booking.test.ts +0 -57
  397. package/src/scheduler-config.ts +0 -179
  398. package/src/scheduler-dependencies.test.ts +0 -155
  399. package/src/scheduler-dependencies.ts +0 -223
  400. package/src/scheduler-freebusy.test.ts +0 -41
  401. package/src/scheduler-heatmap.test.ts +0 -39
  402. package/src/scheduler-resource-tree.test.ts +0 -84
  403. package/src/scheduler-resource-tree.ts +0 -107
  404. package/src/scheduler-slots.test.ts +0 -53
  405. package/src/scheduler-slots.ts +0 -94
  406. package/src/scheduler-summary.test.ts +0 -47
  407. package/src/scheduler-summary.ts +0 -81
  408. package/src/scheduling.test.ts +0 -194
  409. package/src/scheduling.ts +0 -293
  410. package/src/schema-designer.test.ts +0 -121
  411. package/src/schema-designer.ts +0 -142
  412. package/src/schema.test.ts +0 -268
  413. package/src/schema.ts +0 -562
  414. package/src/smart-shim.ts +0 -107
  415. package/src/sources/aggregate.test.ts +0 -79
  416. package/src/sources/aggregate.ts +0 -102
  417. package/src/sources/auth-supabase.test.ts +0 -80
  418. package/src/sources/auth-supabase.ts +0 -87
  419. package/src/sources/dashboard.kpi.test.ts +0 -50
  420. package/src/sources/dashboard.test.ts +0 -61
  421. package/src/sources/dashboard.ts +0 -136
  422. package/src/sources/field-inference.test.ts +0 -60
  423. package/src/sources/field-inference.ts +0 -63
  424. package/src/sources/filters.test.ts +0 -58
  425. package/src/sources/filters.ts +0 -70
  426. package/src/sources/index.ts +0 -67
  427. package/src/sources/introspect-supabase.test.ts +0 -112
  428. package/src/sources/introspect-supabase.ts +0 -139
  429. package/src/sources/realtime-supabase.test.ts +0 -93
  430. package/src/sources/realtime-supabase.ts +0 -99
  431. package/src/sources/relation-lookup.test.ts +0 -99
  432. package/src/sources/relation-lookup.ts +0 -128
  433. package/src/sources/rest-adapters.test.ts +0 -95
  434. package/src/sources/rest-adapters.ts +0 -120
  435. package/src/sources/rest.test.ts +0 -104
  436. package/src/sources/rest.ts +0 -129
  437. package/src/sources/schema-from-columns.test.ts +0 -106
  438. package/src/sources/schema-from-columns.ts +0 -88
  439. package/src/sources/supabase.test.ts +0 -110
  440. package/src/sources/supabase.ts +0 -99
  441. package/src/sources/with-entity-rules.test.ts +0 -104
  442. package/src/sources/with-entity-rules.ts +0 -78
  443. package/src/sources/with-relation-labels.test.ts +0 -75
  444. package/src/sources/with-relation-labels.ts +0 -73
  445. package/src/staged-editing.ts +0 -0
  446. package/src/studio/bug-report.test.ts +0 -101
  447. package/src/studio/bug-report.ts +0 -165
  448. package/src/studio/cli.test.ts +0 -187
  449. package/src/studio/cli.ts +0 -117
  450. package/src/studio/copilot-core.test.ts +0 -45
  451. package/src/studio/csv.test.ts +0 -90
  452. package/src/studio/csv.ts +0 -165
  453. package/src/studio/db-connect-string.test.ts +0 -94
  454. package/src/studio/db-connect-string.ts +0 -128
  455. package/src/studio/deploy-cli.test.ts +0 -56
  456. package/src/studio/deploy-cli.ts +0 -100
  457. package/src/studio/emit-project.test.ts +0 -3324
  458. package/src/studio/emit-project.ts +0 -5377
  459. package/src/studio/emit-schema.test.ts +0 -111
  460. package/src/studio/emit-schema.ts +0 -1181
  461. package/src/studio/index.ts +0 -380
  462. package/src/studio/init-flow.test.ts +0 -514
  463. package/src/studio/init-flow.ts +0 -556
  464. package/src/studio/introspect-db.test.ts +0 -186
  465. package/src/studio/introspect-db.ts +0 -312
  466. package/src/studio/introspect-openapi.test.ts +0 -84
  467. package/src/studio/introspect-openapi.ts +0 -252
  468. package/src/studio/introspect-prisma.test.ts +0 -99
  469. package/src/studio/introspect-prisma.ts +0 -175
  470. package/src/studio/introspect.test.ts +0 -172
  471. package/src/studio/introspect.ts +0 -310
  472. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
  473. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
  474. package/src/studio/pipeline.test.ts +0 -42
  475. package/src/studio/project-robust.test.ts +0 -157
  476. package/src/studio/project.test.ts +0 -929
  477. package/src/studio/project.ts +0 -2394
  478. package/src/studio/sample-data.test.ts +0 -58
  479. package/src/studio/sample-data.ts +0 -203
  480. package/src/studio/samples/ats.ts +0 -202
  481. package/src/studio/samples/clinic.ts +0 -179
  482. package/src/studio/samples/crm.ts +0 -291
  483. package/src/studio/samples/datasets.test.ts +0 -84
  484. package/src/studio/samples/datasets.ts +0 -340
  485. package/src/studio/samples/ecommerce.ts +0 -187
  486. package/src/studio/samples/events.ts +0 -201
  487. package/src/studio/samples/fleet.ts +0 -213
  488. package/src/studio/samples/gym.ts +0 -215
  489. package/src/studio/samples/hr.ts +0 -195
  490. package/src/studio/samples/index.ts +0 -55
  491. package/src/studio/samples/insurance.ts +0 -229
  492. package/src/studio/samples/inventory.ts +0 -213
  493. package/src/studio/samples/invoicing.ts +0 -162
  494. package/src/studio/samples/library.ts +0 -180
  495. package/src/studio/samples/live-data.test.ts +0 -99
  496. package/src/studio/samples/live-data.ts +0 -306
  497. package/src/studio/samples/projects.ts +0 -212
  498. package/src/studio/samples/realestate.ts +0 -196
  499. package/src/studio/samples/restaurant.ts +0 -189
  500. package/src/studio/samples/samples.test.ts +0 -304
  501. package/src/studio/samples/school.ts +0 -197
  502. package/src/studio/samples/seed-floor.test.ts +0 -25
  503. package/src/studio/samples/shared.ts +0 -237
  504. package/src/studio/samples/starter.ts +0 -251
  505. package/src/studio/samples/subscriptions.ts +0 -183
  506. package/src/studio/samples/support.ts +0 -216
  507. package/src/studio/scaffold-app.test.ts +0 -91
  508. package/src/studio/scaffold.test.ts +0 -192
  509. package/src/studio/scaffold.ts +0 -390
  510. package/src/studio/screen-suites.test.ts +0 -269
  511. package/src/studio/screen-suites.ts +0 -448
  512. package/src/studio/themes.ts +0 -62
  513. package/src/studio/ui-components-surface.test.ts +0 -185
  514. package/src/studio/ui-components.generated.ts +0 -7154
  515. package/src/studio/ui-components.ts +0 -742
  516. package/src/studio/verify.test.ts +0 -47
  517. package/src/studio/verify.ts +0 -79
  518. package/src/sveltekit/in-memory.test.ts +0 -104
  519. package/src/sveltekit/in-memory.ts +0 -129
  520. package/src/sveltekit/index.ts +0 -24
  521. package/src/sveltekit/query-plan.test.ts +0 -109
  522. package/src/sveltekit/query-plan.ts +0 -125
  523. package/src/sveltekit/sql-source.test.ts +0 -198
  524. package/src/sveltekit/sql-source.ts +0 -171
  525. package/src/sveltekit/sql.test.ts +0 -80
  526. package/src/sveltekit/sql.ts +0 -131
  527. package/src/sveltekit/transport-scope.test.ts +0 -125
  528. package/src/sveltekit/transport.test.ts +0 -201
  529. package/src/sveltekit/transport.ts +0 -373
  530. package/src/upgrade-prompt.test.ts +0 -71
  531. package/src/upgrade-prompt.ts +0 -162
  532. package/src/version.test.ts +0 -17
  533. package/src/watermark.test.ts +0 -97
  534. package/src/watermark.ts +0 -156
  535. /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
  536. /package/{src → dist}/SvAlertsManager.svelte +0 -0
  537. /package/{src → dist}/SvAlertsPanel.svelte +0 -0
  538. /package/{src → dist}/SvAuthGate.svelte +0 -0
  539. /package/{src → dist}/SvBoard.svelte +0 -0
  540. /package/{src → dist}/SvExportMenu.svelte +0 -0
  541. /package/{src → dist}/SvExpressionEditor.svelte +0 -0
  542. /package/{src → dist}/SvFileInput.svelte +0 -0
  543. /package/{src → dist}/SvGridAlerts.svelte +0 -0
  544. /package/{src → dist}/SvGridBoard.svelte +0 -0
  545. /package/{src → dist}/SvGridEditPanel.svelte +0 -0
  546. /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
  547. /package/{src → dist}/SvGridScheduler.svelte +0 -0
  548. /package/{src → dist}/SvImportDialog.svelte +0 -0
  549. /package/{src → dist}/SvLookupInput.svelte +0 -0
  550. /package/{src → dist}/SvPivotDesigner.svelte +0 -0
  551. /package/{src → dist}/SvRecordDetail.svelte +0 -0
  552. /package/{src → dist}/SvSchedule.svelte +0 -0
  553. /package/{src → dist}/SvSchemaChart.svelte +0 -0
  554. /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
  555. /package/{src → dist}/pdfmake-shims.d.ts +0 -0
  556. /package/{src → dist}/smart.export.d.ts +0 -0
  557. /package/{src → dist}/smart.export.js +0 -0
  558. /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
  559. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
  560. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
  561. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
  562. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
  563. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
  564. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
  565. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
  566. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
  567. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
  568. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
  569. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
  570. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
  571. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
  572. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
  573. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
  574. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
  575. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
  576. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
  577. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
  578. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
  579. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
  580. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
  581. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
  582. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
  583. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
  584. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
  585. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
  586. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
  587. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
  588. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
  589. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
  590. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
  591. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
  592. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
  593. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
  594. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
  595. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
  596. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
  597. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
  598. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
  599. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
  600. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
  601. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
  602. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
  603. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
  604. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
  605. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
  606. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
  607. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
  608. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
  609. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
  610. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
  611. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
  612. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
  613. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
  614. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
  615. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
  616. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
  617. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
  618. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
  619. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
  620. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
@@ -0,0 +1,346 @@
1
+ /**
2
+ * scaffold - turn an `EntitySchema` into runnable SvelteKit files. The shared
3
+ * code-emit core: both the AI generator (MCP `scaffold_entity` tool) and the
4
+ * visual designer's "Generate code" action call this one function, so there is
5
+ * a single source of truth for what generated code looks like.
6
+ *
7
+ * Every generated file wraps its body in `svgrid:managed` markers. A future
8
+ * regeneration replaces only the managed region, so edits a user makes outside
9
+ * the markers survive - idempotent generation, the thing that makes a
10
+ * generator trustworthy enough to keep using.
11
+ *
12
+ * Pure string building. No filesystem, no Svelte. The `validate` (Standard
13
+ * Schema) functions on a field cannot be serialized to a literal, so they are
14
+ * omitted from the emitted schema with a note to re-add them by hand.
15
+ */
16
+ import { resolveIdField } from '../schema.js';
17
+ const DRIVERS = {
18
+ postgres: {
19
+ imports: `import pg from 'pg'`,
20
+ setup: `const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })`,
21
+ dialectArg: `\n dialect: { placeholders: '$', ilike: true },`,
22
+ execBody: `const result = await pool.query(text, params)\n return result.rows`,
23
+ },
24
+ mysql: {
25
+ imports: `import mysql from 'mysql2/promise'`,
26
+ setup: `const pool = mysql.createPool(process.env.DATABASE_URL ?? '')`,
27
+ dialectArg: ``,
28
+ execBody: `const [rows] = await pool.query(text, params)\n return rows as Record<string, unknown>[]`,
29
+ },
30
+ mssql: {
31
+ imports: `import mssql from 'mssql'`,
32
+ setup: `const poolPromise = mssql.connect(process.env.DATABASE_URL ?? '')`,
33
+ dialectArg: `\n dialect: { placeholders: '@' },`,
34
+ execBody: `const pool = await poolPromise\n const request = pool.request()\n params.forEach((p, i) => request.input('p' + (i + 1), p))\n const result = await request.query(text)\n return result.recordset as Record<string, unknown>[]`,
35
+ },
36
+ sqlite: {
37
+ imports: `import Database from 'better-sqlite3'`,
38
+ setup: `const db = new Database(process.env.DATABASE_URL ?? 'data.db')`,
39
+ dialectArg: ``,
40
+ execBody: `return db.prepare(text).all(...params) as Record<string, unknown>[]`,
41
+ },
42
+ };
43
+ /**
44
+ * Whether an in-place writer must SKIP this file to preserve the developer's
45
+ * code: a user-owned companion (a screen's `handlers.ts`) that already exists on
46
+ * disk. Such files carry no `svgrid:managed` markers, so `mergeManaged` would
47
+ * overwrite them wholesale - the write-once contract lives here instead, shared
48
+ * by every writer (CLI regenerate + the designer's bundle write). See
49
+ * HANDLERS-DESIGN.md.
50
+ */
51
+ export function skipUserOwned(file, existsOnDisk) {
52
+ return file.userOwned === true && existsOnDisk;
53
+ }
54
+ export const MANAGED_START = '// svgrid:managed:start';
55
+ export const MANAGED_END = '// svgrid:managed:end';
56
+ const MANAGED_NOTE = '// Regenerated by SvGrid Studio. Edits inside these markers are overwritten.';
57
+ function pascal(name) {
58
+ return name
59
+ .replace(/[_\-\s]+/g, ' ')
60
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
61
+ .split(' ')
62
+ .filter(Boolean)
63
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
64
+ .join('');
65
+ }
66
+ function camel(name) {
67
+ const p = pascal(name);
68
+ return p.charAt(0).toLowerCase() + p.slice(1);
69
+ }
70
+ function tsType(field) {
71
+ switch (field.type) {
72
+ case 'number':
73
+ return 'number';
74
+ case 'boolean':
75
+ return 'boolean';
76
+ default:
77
+ return 'string';
78
+ }
79
+ }
80
+ function fieldLiteral(field) {
81
+ const parts = [`field: ${JSON.stringify(field.field)}`, `type: ${JSON.stringify(field.type)}`];
82
+ if (field.label)
83
+ parts.push(`label: ${JSON.stringify(field.label)}`);
84
+ if (field.primaryKey)
85
+ parts.push('primaryKey: true');
86
+ if (field.readonly)
87
+ parts.push('readonly: true');
88
+ if (field.required)
89
+ parts.push('required: true');
90
+ if (field.hidden)
91
+ parts.push(`hidden: ${JSON.stringify(field.hidden)}`);
92
+ if (field.options)
93
+ parts.push(`options: ${JSON.stringify(field.options)}`);
94
+ if (field.relation)
95
+ parts.push(`relation: ${JSON.stringify(field.relation)}`);
96
+ return ` { ${parts.join(', ')} }`;
97
+ }
98
+ function schemaLiteral(schema, constName, rowType) {
99
+ const head = [` name: ${JSON.stringify(schema.name)}`];
100
+ if (schema.label)
101
+ head.push(` label: ${JSON.stringify(schema.label)}`);
102
+ if (schema.idField)
103
+ head.push(` idField: ${JSON.stringify(schema.idField)}`);
104
+ const fields = schema.fields.map(fieldLiteral).join(',\n');
105
+ return `export const ${constName}: EntitySchema<${rowType}> = {\n${head.join(',\n')},\n fields: [\n${fields}\n ],\n}`;
106
+ }
107
+ function managed(body) {
108
+ return `${MANAGED_START}\n${MANAGED_NOTE}\n${body}\n${MANAGED_END}`;
109
+ }
110
+ export function scaffold(schema, options = {}) {
111
+ const route = options.route ?? schema.name;
112
+ const apiRoute = options.apiRoute ?? `/api/${route}`;
113
+ const schemaImport = options.schemaImport ?? `$lib/${route}.schema`;
114
+ const constName = `${camel(schema.name)}Schema`;
115
+ const rowType = `${pascal(schema.name)}Row`;
116
+ const idField = resolveIdField(schema);
117
+ const label = schema.label ?? schema.name;
118
+ const rowFields = schema.fields
119
+ .map((f) => ` ${f.field}: ${tsType(f)}`)
120
+ .join('\n');
121
+ // 1. The schema module ($lib).
122
+ const schemaFile = {
123
+ path: `src/lib/${route}.schema.ts`,
124
+ description: 'Entity schema + row type. Re-add any Standard Schema `validate` functions here by hand.',
125
+ contents: `import type { EntitySchema } from '@svgrid/enterprise'
126
+
127
+ ${managed(`export type ${rowType} = {
128
+ ${rowFields}
129
+ }
130
+
131
+ ${schemaLiteral(schema, constName, rowType)}`)}
132
+ `,
133
+ };
134
+ // 2. The API route: SvelteKit +server.ts using the transport handlers.
135
+ const dataSource = options.dataSource ?? 'memory';
136
+ const driver = dataSource === 'supabase' ? DRIVERS.postgres : DRIVERS[dataSource];
137
+ let serverImport;
138
+ let serverBody;
139
+ let serverDescription;
140
+ if (driver) {
141
+ // Fully-connected route: driver + DATABASE_URL, no manual editing needed.
142
+ serverImport = `${driver.imports}
143
+ import { createKitHandlers, createSqlDataSource } from '@svgrid/enterprise'`;
144
+ serverBody = `${driver.setup}
145
+
146
+ const source = createSqlDataSource<${rowType}>({
147
+ schema: ${constName},
148
+ table: ${JSON.stringify(schema.name)},${driver.dialectArg}
149
+ execute: async (text, params) => {
150
+ ${driver.execBody}
151
+ },
152
+ })
153
+
154
+ export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
155
+ serverDescription = `API route connected to your ${dataSource} database via process.env.DATABASE_URL.`;
156
+ }
157
+ else if (dataSource === 'sql') {
158
+ serverImport = `import { createKitHandlers, createSqlDataSource } from '@svgrid/enterprise'`;
159
+ serverBody = `// Wire execute() to your SQL client: run \`text\` with \`params\`, return the rows.
160
+ // Works with Drizzle (db.execute), postgres.js, better-sqlite3, mysql2, ...
161
+ const source = createSqlDataSource<${rowType}>({
162
+ schema: ${constName},
163
+ table: ${JSON.stringify(schema.name)},
164
+ dialect: { placeholders: '$', ilike: true },
165
+ execute: async (text, params) => {
166
+ throw new Error('TODO: run the query with your database client and return the rows.')
167
+ },
168
+ })
169
+
170
+ export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
171
+ serverDescription = 'API route. Fill in execute() with your SQL client (Drizzle / postgres.js / ...).';
172
+ }
173
+ else {
174
+ serverImport = `import { createInMemoryDataSource, createKitHandlers } from '@svgrid/enterprise'`;
175
+ serverBody = `// Starts empty and in-memory so the screen runs immediately. Swap this for
176
+ // a database-backed source (scaffold with dataSource:"sql" or a dialect) when ready.
177
+ const source = createInMemoryDataSource<${rowType}>([], ${constName})
178
+
179
+ export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
180
+ serverDescription = 'API route using an in-memory source. Scaffold with a dialect for a real database.';
181
+ }
182
+ const serverFile = {
183
+ path: `src/routes${apiRoute}/+server.ts`,
184
+ description: serverDescription,
185
+ contents: `${serverImport}
186
+ import { ${constName}, type ${rowType} } from '${schemaImport}'
187
+
188
+ ${managed(serverBody)}
189
+ `,
190
+ };
191
+ // Relation (foreign-key) fields become searchable lookups in the edit form.
192
+ // Each lookup queries the related entity's API route, so scaffold those tables
193
+ // too (e.g. `npx @svgrid/studio add <relatedTable>`).
194
+ const relationFields = schema.fields.filter((f) => f.type === 'relation' && !!f.relation);
195
+ const hasLookups = relationFields.length > 0;
196
+ const lookupDecls = relationFields
197
+ .map((f) => {
198
+ const name = `${camel(f.field)}Lookup`;
199
+ const endpoint = JSON.stringify(`/api/${f.relation.entity}`);
200
+ return ` const ${name} = createRelationLookup<Record<string, unknown>>({
201
+ source: createKitDataSource({ endpoint: ${endpoint} }),
202
+ labelField: ${JSON.stringify(f.relation.labelField)},
203
+ })`;
204
+ })
205
+ .join('\n');
206
+ const lookupsMap = ` const lookups = { ${relationFields
207
+ .map((f) => `${JSON.stringify(f.field)}: ${camel(f.field)}Lookup`)
208
+ .join(', ')} }`;
209
+ const lookupsSection = hasLookups ? `\n\n${lookupDecls}\n${lookupsMap}` : '';
210
+ // 3. The page: a full data screen - search, server sort + paging,
211
+ // multi-select delete (optimistic), create/edit, loading/error/empty.
212
+ const pageBody = ` const source = createKitDataSource<${rowType}>({ endpoint: '${apiRoute}' })
213
+ const columns = schemaToColumns(${constName})${lookupsSection}
214
+
215
+ let state = $state<ServerState<${rowType}>>({
216
+ rows: [], total: 0, loading: false, saving: false, error: null,
217
+ pageIndex: 0, pageSize: 25, pageCount: 1, sortModel: [], filterModel: {},
218
+ })
219
+ const controller = createServerDataSource<${rowType}>(source, {
220
+ pageSize: 25,
221
+ optimistic: true,
222
+ getRowId: (r) => String(r.${idField}),
223
+ onChange: (s) => (state = s),
224
+ })
225
+ controller.refresh()
226
+
227
+ let selected = $state<${rowType}[]>([])
228
+ let editing = $state<${rowType} | null | undefined>(undefined) // undefined = closed, null = create
229
+
230
+ async function save({ mode, id, values }: { mode: 'create' | 'edit'; id: string | null; values: Partial<${rowType}> }) {
231
+ if (mode === 'create') {
232
+ await controller.createRow(values)
233
+ controller.setPage(state.pageCount - 1) // jump to the new row (appended at the end)
234
+ } else if (id) {
235
+ await controller.updateRow(id, values)
236
+ }
237
+ editing = undefined
238
+ }
239
+
240
+ async function removeSelected() {
241
+ for (const row of selected) await controller.deleteRow(String(row.${idField}))
242
+ selected = []
243
+ }`;
244
+ const pageFile = {
245
+ path: `src/routes/${route}/+page.svelte`,
246
+ description: 'The data screen: sort, filter, search, paging, multi-select delete, and create/edit - wired to the API route.',
247
+ contents: `<script lang="ts">
248
+ import { SvGrid, createServerDataSource } from '@svgrid/grid'
249
+ import {
250
+ SvGridEditPanel,
251
+ createKitDataSource,${hasLookups ? '\n createRelationLookup,' : ''}
252
+ schemaToColumns,
253
+ type ServerState,
254
+ } from '@svgrid/enterprise'
255
+ import { ${constName}, type ${rowType} } from '${schemaImport}'
256
+
257
+ ${managed(pageBody)}
258
+ </script>
259
+
260
+ <div class="page">
261
+ <header class="page__toolbar">
262
+ <h2 class="page__title">${label}</h2>
263
+ <div class="page__actions">
264
+ <button onclick={() => (editing = null)}>New</button>
265
+ <button disabled={selected.length === 0} onclick={removeSelected}>
266
+ Delete {selected.length > 0 ? '(' + selected.length + ')' : ''}
267
+ </button>
268
+ </div>
269
+ </header>
270
+
271
+ {#if state.error}<p class="page__error" role="alert">{state.error}</p>{/if}
272
+
273
+ <SvGrid
274
+ data={state.rows}
275
+ {columns}
276
+ loading={state.loading}
277
+ loadingOverlay
278
+ fitColumns
279
+ enableRowSummaries={false}
280
+ showRowSelection
281
+ enableCellSelection
282
+ sortable
283
+ externalSort
284
+ onSortingChange={(s) => controller.setSort(s)}
285
+ filterable
286
+ showGlobalFilter
287
+ externalFilter
288
+ onFiltersChange={(f) =>
289
+ controller.setFilter({
290
+ global: f.global || undefined,
291
+ columns: Object.fromEntries(
292
+ f.columns.map((c) => [c.id, { operator: c.operator, value: c.value, valueTo: c.valueTo, selectedValues: c.selectedValues }]),
293
+ ),
294
+ })}
295
+ onRowClick={(e) => (editing = e.row)}
296
+ onRowSelectionChange={(_sel, rows) => (selected = rows)}
297
+ showPagination
298
+ externalPagination
299
+ rowCount={state.total}
300
+ pageIndex={state.pageIndex}
301
+ pageSize={state.pageSize}
302
+ onPaginationChange={({ pageIndex, pageSize }) => {
303
+ if (pageSize !== state.pageSize) controller.setPageSize(pageSize)
304
+ else controller.setPage(pageIndex)
305
+ }}
306
+ emptyMessage="No ${label} yet"
307
+ containerHeight={480}
308
+ />
309
+
310
+ {#if editing !== undefined}
311
+ <SvGridEditPanel schema={${constName}} row={editing} ${hasLookups ? 'lookups={lookups} ' : ''}onSubmit={save} onCancel={() => (editing = undefined)} />
312
+ {/if}
313
+ </div>
314
+
315
+ <style>
316
+ .page { display: flex; flex-direction: column; gap: 12px; }
317
+ .page__toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
318
+ .page__title { margin: 0; font-size: 18px; font-weight: 600; }
319
+ .page__actions { display: flex; gap: 8px; }
320
+ .page__actions button { padding: 7px 12px; border: 1px solid #ccc; border-radius: 6px; background: #fff; cursor: pointer; }
321
+ .page__error { margin: 0; padding: 8px 12px; color: #b3261e; background: #fdecea; border-radius: 6px; }
322
+ </style>
323
+ `,
324
+ };
325
+ return { files: [schemaFile, serverFile, pageFile] };
326
+ }
327
+ /**
328
+ * Merge freshly-scaffolded files into existing file contents, replacing only
329
+ * each file's `svgrid:managed` region and preserving everything a user wrote
330
+ * outside it. When there's no existing content (or no markers in it), the new
331
+ * file is used whole. This is what makes regeneration safe.
332
+ */
333
+ export function mergeManaged(existing, generated) {
334
+ if (!existing)
335
+ return generated;
336
+ const startIdx = existing.indexOf(MANAGED_START);
337
+ const endIdx = existing.indexOf(MANAGED_END);
338
+ if (startIdx === -1 || endIdx === -1 || endIdx < startIdx)
339
+ return generated;
340
+ const genStart = generated.indexOf(MANAGED_START);
341
+ const genEnd = generated.indexOf(MANAGED_END);
342
+ if (genStart === -1 || genEnd === -1)
343
+ return generated;
344
+ const newRegion = generated.slice(genStart, genEnd + MANAGED_END.length);
345
+ return (existing.slice(0, startIdx) + newRegion + existing.slice(endIdx + MANAGED_END.length));
346
+ }
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Screen factories + the CRUD-suite generator.
3
+ *
4
+ * Two layers live here:
5
+ *
6
+ * 1. The composable screen factories (`listScreen` / `formScreen` / `detailScreen`
7
+ * / `dashScreen`) the curated sample apps are built from. They take explicit,
8
+ * hand-picked options - a sample app knows its own domain.
9
+ * 2. The CRUD suite (`crudSuiteScreens` / `addCrudSuite` / `crudAppFromSchemas`),
10
+ * which derives those options from a schema and produces a linked multi-screen
11
+ * app: a list, an edit form, a record detail page, and an optional overview
12
+ * dashboard, with drill-through and related-child tabs wired from the entity's
13
+ * relations. This is what the guided onboarding (designer wizard + `svgrid-studio
14
+ * init`) calls, so both hosts scaffold identical apps.
15
+ *
16
+ * Pure + node-safe (studio subtree): plain data built from the same immutable ops
17
+ * the designer uses, so results round-trip through parse/serialize and generate a
18
+ * runnable app with no special-casing.
19
+ */
20
+ import type { EntitySchema } from '../schema.js';
21
+ import type { ChartType } from '@svgrid/grid';
22
+ import { type BlockConfig, type DataSourceKind, type DetailRelated, type EntityDataSource, type FormatRule, type GridDensity, type GridEditing, type KpiFormat, type Presentation, type ProjectTheme, type Reduce, type RowAction, type RowLink, type Screen, type StudioProject } from './project.js';
23
+ /** Rich-grid options an enterprise screen layers onto the default grid: status
24
+ * pills / thresholds (formatRules), a totals row, row actions, row-click drill,
25
+ * and density. */
26
+ export type GridOpts = {
27
+ format?: FormatRule[];
28
+ rowActions?: RowAction[];
29
+ rowLink?: RowLink;
30
+ summaries?: boolean;
31
+ density?: GridDensity;
32
+ pageSize?: number;
33
+ /** How rows are edited: in-cell, via a popup form, or not at all (read-only
34
+ * lists that drill into a detail page). Defaults to the grid default (`'form'`). */
35
+ editing?: GridEditing;
36
+ /** Where the edit form opens when `editing` is `'form'`. */
37
+ formPresentation?: Presentation;
38
+ };
39
+ /** A dashboard tile: KPI card (with trend/target/format), chart, gauge, pivot,
40
+ * tree, a rich grid, or a tabbed group of display tiles. */
41
+ export type Tile = {
42
+ kpi: string;
43
+ measure?: string;
44
+ reduce: Reduce;
45
+ format?: KpiFormat;
46
+ trendField?: string;
47
+ trendReduce?: Reduce;
48
+ target?: number;
49
+ span?: 1 | 2 | 3;
50
+ } | {
51
+ chart: string;
52
+ measure?: string;
53
+ reduce?: Reduce;
54
+ type?: ChartType;
55
+ span?: 1 | 2 | 3;
56
+ } | {
57
+ gauge: string;
58
+ measure?: string;
59
+ reduce: Reduce;
60
+ min?: number;
61
+ max?: number;
62
+ unit?: string;
63
+ span?: 1 | 2 | 3;
64
+ } | {
65
+ pivot: {
66
+ rows: string[];
67
+ cols: string[];
68
+ measure?: string;
69
+ aggregate?: Reduce;
70
+ };
71
+ span?: 1 | 2 | 3;
72
+ } | {
73
+ tree: {
74
+ labelField: string;
75
+ parentField: string;
76
+ };
77
+ span?: 1 | 2 | 3;
78
+ } | ({
79
+ grid: true;
80
+ span?: 1 | 2 | 3;
81
+ } & GridOpts) | {
82
+ filter: string[];
83
+ span?: 1 | 2 | 3;
84
+ } | {
85
+ tabs: {
86
+ label: string;
87
+ tiles: Tile[];
88
+ }[];
89
+ span?: 1 | 2 | 3;
90
+ };
91
+ /** The default grid config with enterprise options merged on. */
92
+ export declare function gridConfig(entity: EntitySchema, opts: GridOpts): BlockConfig;
93
+ /** Compose a dashboard screen from explicit tiles (KPI cards + gauges + charts +
94
+ * pivots + trees + a rich grid). */
95
+ export declare function dashScreen(entity: EntitySchema, meta: {
96
+ id: string;
97
+ title: string;
98
+ order: number;
99
+ }, tiles: Tile[]): Screen;
100
+ /** FormatRule[] that color-code an enum field's cells by its option colors -
101
+ * turns a plain status column into enterprise status pills. */
102
+ export declare function statusPills(entity: EntitySchema, field: string): FormatRule[];
103
+ /** A list screen: an optional faceted filter panel + a rich grid (status pills,
104
+ * totals, row actions, drill-through). */
105
+ export declare function listScreen(entity: EntitySchema, meta: {
106
+ id: string;
107
+ title: string;
108
+ order: number;
109
+ }, opts?: {
110
+ filter?: string[];
111
+ grid?: GridOpts;
112
+ }): Screen;
113
+ /**
114
+ * A form-showcase screen: a grid to pick a row + an editable record panel that
115
+ * renders the full field form (phone / rating / tags / mask / slider editors)
116
+ * inline. Lets a user see and try the rich editors on load, not just on edit.
117
+ */
118
+ export declare function formScreen(entity: EntitySchema, meta: {
119
+ id: string;
120
+ title: string;
121
+ order: number;
122
+ }, fields?: string[], grid?: GridOpts, filter?: string[]): Screen;
123
+ /** A record detail-page screen: a full record view (header + status pill + metric
124
+ * tiles + tabbed Overview / related timelines) - the signature view for
125
+ * relation-heavy records (a customer / deal / patient / trip page). */
126
+ export declare function detailScreen(entity: EntitySchema, meta: {
127
+ id: string;
128
+ title: string;
129
+ order: number;
130
+ }, opts: {
131
+ titleField: string;
132
+ subtitleField?: string;
133
+ statusField?: string;
134
+ metricFields?: string[];
135
+ sections?: {
136
+ label: string;
137
+ fields: string[];
138
+ }[];
139
+ related?: DetailRelated[];
140
+ }): Screen;
141
+ /** The screens a CRUD suite can contain. */
142
+ export type CrudScreenKind = 'list' | 'form' | 'detail' | 'dashboard';
143
+ /** How the suite's rows are edited. `'inline'` edits in the grid, `'form'` opens
144
+ * a popup form (the grid default), `'detail'` makes a row click navigate to the
145
+ * generated detail page (and leaves the list read-only). */
146
+ export type CrudEditingMode = 'inline' | 'form' | 'detail';
147
+ export type CrudSuiteOptions = {
148
+ /** Which screens to generate. Default: `['list', 'form']`, plus `'detail'` when
149
+ * another entity relates to this one (there are children worth showing). */
150
+ screens?: CrudScreenKind[];
151
+ /** Row editing mode. Default `'form'`. */
152
+ editing?: CrudEditingMode;
153
+ /** Nav order of the suite's first screen; later screens follow it. Default 0. */
154
+ navOrder?: number;
155
+ /** Show a faceted filter panel on the list screen. Defaults to on when the
156
+ * entity has filter-friendly (enum / boolean / text) fields. */
157
+ filter?: boolean;
158
+ /** Ids and routes already in use. The suite picks non-colliding ones BEFORE it
159
+ * wires drill-through, so a rename can never orphan a `rowLink`. */
160
+ taken?: {
161
+ ids?: ReadonlySet<string>;
162
+ routes?: ReadonlySet<string>;
163
+ };
164
+ };
165
+ /**
166
+ * The screens for one entity: a list, an edit form, a record detail page, and/or
167
+ * an overview dashboard - already linked to each other. `entities` is the full
168
+ * schema set so relations resolve (drill-through targets + child collections).
169
+ */
170
+ export declare function crudSuiteScreens(entity: EntitySchema, entities: readonly EntitySchema[], opts?: CrudSuiteOptions): Screen[];
171
+ /** Append a full CRUD suite for an existing entity (immutable, like `addScreenFromTemplate`). */
172
+ export declare function addCrudSuite(project: StudioProject, entityName: string, opts?: CrudSuiteOptions): StudioProject;
173
+ export type CrudAppOptions = {
174
+ title?: string;
175
+ /** Default source kind for entities with no explicit binding in `sources`. */
176
+ dataSource?: DataSourceKind;
177
+ /** Per-entity source binding (a live SQL table, a REST endpoint, PGlite, ...). */
178
+ sources?: Record<string, EntityDataSource>;
179
+ /** Per-entity seed rows, merged into memory / PGlite bindings. */
180
+ seed?: Record<string, Record<string, unknown>[]>;
181
+ /** Per-entity suite overrides, keyed by entity name. */
182
+ perEntity?: Record<string, CrudSuiteOptions>;
183
+ /** Lead with an overview dashboard over the most-referenced entity. Default true. */
184
+ overviewDashboard?: boolean;
185
+ theme?: ProjectTheme;
186
+ };
187
+ /**
188
+ * A complete app from a set of schemas: an overview dashboard plus a CRUD suite
189
+ * per entity, bound to the given data sources. This is the guided-onboarding
190
+ * output - the designer wizard and `svgrid-studio init` both land here, so a
191
+ * database connected from either host scaffolds the same app.
192
+ */
193
+ export declare function crudAppFromSchemas(schemas: EntitySchema[], opts?: CrudAppOptions): StudioProject;