@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,48 @@
1
+ import { refineField } from './field-inference.js';
2
+ /** Assemble an EntitySchema from discovered columns. */
3
+ export function buildEntitySchema(table, columns) {
4
+ if (!columns.length)
5
+ throw new Error(`buildEntitySchema: "${table}" has no columns`);
6
+ // Primary key: first flagged pk, else a column literally named "id", else the
7
+ // first column (so update/delete always have a key to target).
8
+ const explicitPk = columns.find((c) => c.primaryKey)?.name;
9
+ const idField = explicitPk ?? columns.find((c) => /^id$/i.test(c.name))?.name ?? columns[0].name;
10
+ const fields = columns.map((c) => {
11
+ const isPk = c.name === idField;
12
+ // A foreign-key column (that isn't the PK) becomes a relation field, so the
13
+ // form renders a lookup and master-detail can be inferred.
14
+ if (c.references && !isPk) {
15
+ const rel = { field: c.name, type: 'relation' };
16
+ rel.relation = {
17
+ entity: c.references.table,
18
+ foreignKey: c.name,
19
+ labelField: c.references.labelField ?? 'name',
20
+ };
21
+ if (c.dbColumn)
22
+ rel.dbColumn = c.dbColumn;
23
+ if (c.required)
24
+ rel.required = true;
25
+ return rel;
26
+ }
27
+ const type = c.enumValues?.length ? 'enum' : (c.type ?? 'text');
28
+ const f = { field: c.name, type };
29
+ if (c.dbColumn)
30
+ f.dbColumn = c.dbColumn;
31
+ if (isPk) {
32
+ f.primaryKey = true;
33
+ f.readonly = true;
34
+ }
35
+ else if (c.required) {
36
+ f.required = true;
37
+ }
38
+ if (type === 'enum' && c.enumValues?.length) {
39
+ f.options = c.enumValues.map((v) => ({ value: v, label: v }));
40
+ }
41
+ // Infer a rich editor from the column name/type (phone / email / rating / ...).
42
+ return refineField(f);
43
+ });
44
+ return { name: table, label: table, idField, fields };
45
+ }
46
+ // Schema-level relation helpers live in ../schema (studio consumes them under
47
+ // node16 resolution); re-exported here so introspection consumers get one entry.
48
+ export { pickLabelField, linkRelationLabels } from '../schema.js';
@@ -0,0 +1,33 @@
1
+ /**
2
+ * createSupabaseDataSource - a browser-ready `ServerDataSource` over a Supabase
3
+ * table, using the `supabase-js` client (PostgREST). You bring the client (so
4
+ * there's no dependency here and Row-Level Security + auth apply per request);
5
+ * this maps the grid's sort / filter / page / CRUD onto the query builder.
6
+ *
7
+ * import { createClient } from '@supabase/supabase-js'
8
+ * const client = createClient(url, anonKey)
9
+ * const source = createSupabaseDataSource({ client, table: 'customers', schema })
10
+ *
11
+ * Global search covers the schema's text + enum columns by default; override
12
+ * with `searchColumns`. The primary key comes from the schema (`idField`) and is
13
+ * stripped from inserts (it's database-generated).
14
+ */
15
+ import type { RowData } from '@svgrid/grid';
16
+ import { type EntitySchema } from '../schema';
17
+ import type { WritableDataSource } from '../sveltekit/types';
18
+ /** The slice of a `supabase-js` client this adapter needs. */
19
+ export type SupabaseClientLike = {
20
+ from(table: string): any;
21
+ };
22
+ export type SupabaseDataSourceConfig<TData extends RowData> = {
23
+ client: SupabaseClientLike;
24
+ /** Table (or view) name. */
25
+ table: string;
26
+ schema: EntitySchema<TData>;
27
+ /**
28
+ * Columns the global search box matches (OR of ILIKEs). Defaults to the
29
+ * schema's text + enum fields.
30
+ */
31
+ searchColumns?: string[];
32
+ };
33
+ export declare function createSupabaseDataSource<TData extends RowData>(config: SupabaseDataSourceConfig<TData>): WritableDataSource<TData>;
@@ -0,0 +1,74 @@
1
+ import { resolveIdField } from '../schema';
2
+ import { nudgeEnterprise } from '../license';
3
+ import { normalizeFilters } from './filters';
4
+ const sanitize = (term) => term.replace(/[%,()]/g, '');
5
+ export function createSupabaseDataSource(config) {
6
+ nudgeEnterprise('Studio'); // soft-gate; never blocks
7
+ const { client, table, schema } = config;
8
+ const idField = resolveIdField(schema);
9
+ const searchColumns = config.searchColumns ??
10
+ schema.fields.filter((f) => f.type === 'text' || f.type === 'enum').map((f) => String(f.field));
11
+ return {
12
+ async getRows(request) {
13
+ let q = client.from(table).select('*', { count: 'exact' });
14
+ const { predicates, search } = normalizeFilters(request.filterModel);
15
+ for (const p of predicates) {
16
+ switch (p.op) {
17
+ case 'in':
18
+ q = q.in(p.column, p.values);
19
+ break;
20
+ case 'contains':
21
+ q = q.ilike(p.column, `%${p.value}%`);
22
+ break;
23
+ case 'startsWith':
24
+ q = q.ilike(p.column, `${p.value}%`);
25
+ break;
26
+ case 'eq':
27
+ q = q.eq(p.column, p.value);
28
+ break;
29
+ case 'gt':
30
+ q = q.gt(p.column, p.value);
31
+ break;
32
+ case 'lt':
33
+ q = q.lt(p.column, p.value);
34
+ break;
35
+ case 'between':
36
+ q = q.gte(p.column, p.value).lte(p.column, p.valueTo);
37
+ break;
38
+ case 'isNull':
39
+ q = q.is(p.column, null);
40
+ break;
41
+ }
42
+ }
43
+ if (search && searchColumns.length) {
44
+ const term = sanitize(search);
45
+ q = q.or(searchColumns.map((c) => `${c}.ilike.%${term}%`).join(','));
46
+ }
47
+ for (const s of request.sortModel)
48
+ q = q.order(s.id, { ascending: !s.desc });
49
+ const { data, count, error } = await q.range(request.startRow, request.endRow - 1);
50
+ if (error)
51
+ throw new Error(error.message);
52
+ return { rows: (data ?? []), rowCount: count ?? 0 };
53
+ },
54
+ async createRow(input) {
55
+ const rest = { ...input };
56
+ delete rest[idField]; // primary key is database-generated
57
+ const { data, error } = await client.from(table).insert(rest).select().single();
58
+ if (error)
59
+ throw new Error(error.message);
60
+ return (data ?? input);
61
+ },
62
+ async updateRow(id, patch) {
63
+ const { data, error } = await client.from(table).update(patch).eq(idField, id).select().single();
64
+ if (error)
65
+ throw new Error(error.message);
66
+ return (data ?? { ...patch, [idField]: id });
67
+ },
68
+ async deleteRow(id) {
69
+ const { error } = await client.from(table).delete().eq(idField, id);
70
+ if (error)
71
+ throw new Error(error.message);
72
+ },
73
+ };
74
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * withEntityRules - apply an `EntitySchema`'s computed fields and lifecycle
3
+ * hooks to any `ServerDataSource`, at the mutation boundary. It's a transparent
4
+ * wrapper: pass the result to `createServerDataSource` (or straight to the grid)
5
+ * and every read row gets its computed fields materialized, while writes run the
6
+ * schema's before/after hooks and cross-field validation.
7
+ *
8
+ * const source = withEntityRules(createSqlDataSource(...), orderSchema)
9
+ *
10
+ * - `getRows` -> each row through `applyComputed` (grid can sort/filter the
11
+ * computed value within the fetched page).
12
+ * - `createRow` -> `hooks.validate` + `hooks.beforeCreate` (may transform the
13
+ * payload or throw), then `applyComputed` on the returned row,
14
+ * then `hooks.afterCreate`.
15
+ * - `updateRow` -> the same with `beforeUpdate` / `afterUpdate`.
16
+ * - `deleteRow` -> `hooks.beforeDelete` (throw to veto) then `hooks.afterDelete`.
17
+ *
18
+ * Optional write methods stay optional, and any extra source capabilities
19
+ * (`getAggregate`, `rows()`) pass through untouched. Returning `applyComputed`
20
+ * rows from every method keeps the controller's optimistic reconciliation
21
+ * correct (a source must return the same row shape from all methods).
22
+ */
23
+ import type { RowData, ServerDataSource } from '@svgrid/grid';
24
+ import { type EntitySchema } from '../schema';
25
+ export declare function withEntityRules<TData extends RowData, S extends ServerDataSource<TData>>(source: S, schema: EntitySchema<TData>): S;
@@ -0,0 +1,47 @@
1
+ import { applyComputed, validateEntity } from '../schema';
2
+ function firstError(errors) {
3
+ return Object.values(errors)[0] ?? 'Validation failed';
4
+ }
5
+ export function withEntityRules(source, schema) {
6
+ const hooks = schema.hooks ?? {};
7
+ const compute = (row) => applyComputed(schema, row);
8
+ const wrapped = {
9
+ async getRows(request) {
10
+ const res = await source.getRows(request);
11
+ return { ...res, rows: res.rows.map(compute) };
12
+ },
13
+ };
14
+ if (source.createRow) {
15
+ const create = source.createRow.bind(source);
16
+ wrapped.createRow = async (input) => {
17
+ const errors = await validateEntity(schema, input);
18
+ if (Object.keys(errors).length)
19
+ throw new Error(firstError(errors));
20
+ const payload = hooks.beforeCreate ? await hooks.beforeCreate(input) : input;
21
+ const row = compute(await create(payload));
22
+ await hooks.afterCreate?.(row);
23
+ return row;
24
+ };
25
+ }
26
+ if (source.updateRow) {
27
+ const update = source.updateRow.bind(source);
28
+ wrapped.updateRow = async (id, patch) => {
29
+ const errors = await validateEntity(schema, patch);
30
+ if (Object.keys(errors).length)
31
+ throw new Error(firstError(errors));
32
+ const payload = hooks.beforeUpdate ? await hooks.beforeUpdate(id, patch) : patch;
33
+ const row = compute(await update(id, payload));
34
+ await hooks.afterUpdate?.(row);
35
+ return row;
36
+ };
37
+ }
38
+ if (source.deleteRow) {
39
+ const del = source.deleteRow.bind(source);
40
+ wrapped.deleteRow = async (id) => {
41
+ await hooks.beforeDelete?.(id);
42
+ await del(id);
43
+ await hooks.afterDelete?.(id);
44
+ };
45
+ }
46
+ return { ...source, ...wrapped };
47
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * withRelationLabels - decorate a source's rows with the human label of each
3
+ * foreign key, so the grid can show "Acme Inc" instead of the raw id `42`. It
4
+ * resolves labels through a `RelationLookup` (the same cached resolver the edit
5
+ * form's picker uses), so a value is fetched at most once and stays fresh.
6
+ *
7
+ * const postsSource = withRelationLabels(rawPostsSource, [
8
+ * { fk: 'authorId', lookup: authorLookup, as: 'author' },
9
+ * ])
10
+ *
11
+ * Pair it with a schema where the FK field is `hidden: { grid: true }` and a
12
+ * read-only display column (`author`) shows the label. Because every method
13
+ * returns the decorated row shape, the controller's optimistic updates stay
14
+ * correct.
15
+ */
16
+ import type { RowData, ServerDataSource } from '@svgrid/grid';
17
+ import type { RelationLookup } from './relation-lookup';
18
+ export type RelationLabelConfig = {
19
+ /** Local foreign-key field to resolve. */
20
+ fk: string;
21
+ /** Resolver for the related entity (see `createRelationLookup`). */
22
+ lookup: RelationLookup;
23
+ /** Field to write the resolved label onto. */
24
+ as: string;
25
+ };
26
+ export declare function withRelationLabels<TData extends RowData, S extends ServerDataSource<TData>>(source: S, relations: RelationLabelConfig[]): S;
@@ -0,0 +1,38 @@
1
+ export function withRelationLabels(source, relations) {
2
+ if (relations.length === 0)
3
+ return source;
4
+ /** Decorate one row (used by create/update returns). */
5
+ const decorate = async (row) => {
6
+ const copy = { ...row };
7
+ await Promise.all(relations.map(async (r) => {
8
+ copy[r.as] = (await r.lookup.labelFor(row[r.fk])) ?? '';
9
+ }));
10
+ return copy;
11
+ };
12
+ const wrapped = {
13
+ async getRows(request) {
14
+ const res = await source.getRows(request);
15
+ // Batch: one lookup query per relation for the whole page (no N+1).
16
+ const maps = await Promise.all(relations.map((r) => r.lookup.labelsFor(res.rows.map((row) => row[r.fk]))));
17
+ const rows = res.rows.map((row) => {
18
+ const copy = { ...row };
19
+ relations.forEach((r, i) => {
20
+ copy[r.as] = maps[i].get(String(row[r.fk])) ?? '';
21
+ });
22
+ return copy;
23
+ });
24
+ return { ...res, rows };
25
+ },
26
+ };
27
+ if (source.createRow) {
28
+ const fn = source.createRow.bind(source);
29
+ wrapped.createRow = async (input) => decorate(await fn(input));
30
+ }
31
+ if (source.updateRow) {
32
+ const fn = source.updateRow.bind(source);
33
+ wrapped.updateRow = async (id, patch) => decorate(await fn(id, patch));
34
+ }
35
+ if (source.deleteRow)
36
+ wrapped.deleteRow = source.deleteRow.bind(source);
37
+ return { ...source, ...wrapped };
38
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Staged editing - batch / draft mode for the grid.
3
+ *
4
+ * Without staged editing, every `onCellValueChange` writes immediately
5
+ * into the source data. Staged editing buffers writes into a draft
6
+ * shadow so the user can:
7
+ *
8
+ * - Review every change before it lands
9
+ * - Discard the whole batch
10
+ * - Commit atomically (one server roundtrip; one undo step)
11
+ *
12
+ * Stays out of the headless engine - lives in `@svgrid/enterprise` as a small
13
+ * stateful wrapper your `onCellValueChange` handler delegates to.
14
+ *
15
+ * Usage:
16
+ * ```ts
17
+ * const stage = createStagedEditing<Order>()
18
+ *
19
+ * <SvGrid {data} {columns} features={features}
20
+ * onCellValueChange={(e) => stage.record(e)}
21
+ * />
22
+ *
23
+ * stage.changes() // → Change[]
24
+ * stage.commit(rows => /* push to server, set data = mutated rows *\/)
25
+ * stage.revert() // → applies inverse writes back into the grid
26
+ * ```
27
+ */
28
+ import type { RowData } from '@svgrid/grid';
29
+ export type StagedChange<TData extends RowData> = {
30
+ /** Stable row id (the grid's row.id - or your getRowId result). */
31
+ rowId: string;
32
+ /** Source-array index at the time the change was recorded. */
33
+ rowIndex: number;
34
+ /** Field name on the row object. */
35
+ columnId: string;
36
+ /** Original value, BEFORE any staged edit. Stable across re-edits. */
37
+ original: unknown;
38
+ /** Most recent staged value. */
39
+ staged: unknown;
40
+ /** Timestamp the change was first staged (ms since epoch). */
41
+ recordedAt: number;
42
+ /** The whole row object as it was BEFORE the first edit. Useful for
43
+ * optimistic locking / row-level commits. */
44
+ originalRow?: TData;
45
+ };
46
+ export type StagedEditingEvent = {
47
+ rowIndex: number;
48
+ columnId: string;
49
+ oldValue: unknown;
50
+ newValue: unknown;
51
+ row: unknown;
52
+ };
53
+ export type StagedEditingApi<TData extends RowData> = {
54
+ /** Feed a grid `onCellValueChange` event into the staging buffer. */
55
+ record(e: StagedEditingEvent): void;
56
+ /** Snapshot of every pending change, ordered by first edit. */
57
+ changes(): StagedChange<TData>[];
58
+ /** True when at least one cell is staged. */
59
+ isDirty(): boolean;
60
+ /** Count of distinct (row, column) pairs currently staged. */
61
+ size(): number;
62
+ /** Cells changed grouped by row id - one entry per touched row. */
63
+ changesByRow(): Array<{
64
+ rowId: string;
65
+ rowIndex: number;
66
+ cells: StagedChange<TData>[];
67
+ }>;
68
+ /**
69
+ * Hand every staged change to `commitFn`. When `commitFn` resolves
70
+ * truthy / void, the staging buffer is cleared. Throw / reject from
71
+ * `commitFn` to keep the buffer (so the user can retry).
72
+ */
73
+ commit(commitFn: (changes: StagedChange<TData>[]) => Promise<void> | void): Promise<void>;
74
+ /**
75
+ * Roll back every staged cell. Each call to `applyRevert` is passed
76
+ * (rowIndex, columnId, originalValue) - typically wired to
77
+ * `api.setCellValue(rowIndex, columnId, originalValue)`.
78
+ */
79
+ revert(applyRevert: (rowIndex: number, columnId: string, originalValue: unknown) => void): void;
80
+ /** Drop a single staged cell (without applying it). */
81
+ drop(rowId: string, columnId: string): void;
82
+ /** Wipe the buffer without applying anything. */
83
+ clear(): void;
84
+ };
85
+ export declare function createStagedEditing<TData extends RowData = RowData>(): StagedEditingApi<TData>;
Binary file
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Studio bug-report core (pure + node-safe, usable from the CLI and the
3
+ * designer). Two pieces:
4
+ *
5
+ * - `sanitizeStudioProject` - strip credentials + seed DATA from a project so
6
+ * a bug report never leaks a user's database or rows. It keeps the SCHEMA,
7
+ * screens, and block structure (what actually reproduces a Studio bug) and
8
+ * returns a plain-language list of what was removed, so the user sees it.
9
+ * - `buildStudioBugReport` - assemble a markdown report + a prefilled GitHub
10
+ * "new issue" URL. The URL carries a short summary (GitHub caps the prefill
11
+ * ~8 KB); the full sanitized report goes in `markdown` for the caller to
12
+ * copy to the clipboard / write to a file and paste in.
13
+ *
14
+ * The caller supplies `env` (version / node / os) so this stays free of any
15
+ * process or DOM access and is trivially testable.
16
+ */
17
+ import type { StudioProject } from './project.js';
18
+ export type SanitizeResult = {
19
+ project: StudioProject;
20
+ redactions: string[];
21
+ };
22
+ /**
23
+ * Return a copy of the project safe to attach to a bug report: credentials and
24
+ * seeded rows removed, schema + screens + blocks intact. Also returns a list of
25
+ * exactly what was stripped, for transparency.
26
+ */
27
+ export declare function sanitizeStudioProject(project: StudioProject): SanitizeResult;
28
+ export type StudioEnv = {
29
+ studioVersion?: string;
30
+ node?: string;
31
+ os?: string;
32
+ };
33
+ export type BugReportInput = {
34
+ /** The current project model (studio.config.json). Sanitized before use. */
35
+ project?: StudioProject;
36
+ /** The error that triggered the report (on a crash), if any. */
37
+ error?: Error | {
38
+ message: string;
39
+ stack?: string;
40
+ } | string;
41
+ /** What the user was doing (e.g. "generating the app", "editing the CRM board"). */
42
+ action?: string;
43
+ env?: StudioEnv;
44
+ /** `owner/repo` the issue targets (default the public SvGrid repo). */
45
+ repo?: string;
46
+ };
47
+ export type BugReport = {
48
+ title: string;
49
+ /** Full markdown report - copy to clipboard / write to a file and paste in. */
50
+ markdown: string;
51
+ /** Prefilled GitHub "new issue" URL. */
52
+ issueUrl: string;
53
+ redactions: string[];
54
+ /** True when the report was too big for the URL, so `markdown` must be pasted. */
55
+ truncated: boolean;
56
+ };
57
+ /**
58
+ * Build a shareable bug report from the current Studio state. The project is
59
+ * sanitized first; secrets never reach the markdown or the URL.
60
+ */
61
+ export declare function buildStudioBugReport(input: BugReportInput): BugReport;
@@ -0,0 +1,126 @@
1
+ const REDACTED = '<redacted>';
2
+ const DEFAULT_REPO = 'sv-grid/sv-grid';
3
+ /** Keep the prefilled issue URL comfortably under browser / GitHub limits. */
4
+ const MAX_URL = 7500;
5
+ /** Param names that carry secrets (substring, case-insensitive). */
6
+ const SECRET_NAME_RE = /(key|token|secret|auth|password|pass|bearer|credential)/i;
7
+ /** Redact one entity's data source; push a human note for anything removed. */
8
+ function sanitizeSource(entity, src, redactions) {
9
+ if (src.kind === 'memory') {
10
+ const { seed, ...rest } = src;
11
+ if (seed?.length)
12
+ redactions.push(`${entity}: ${seed.length} in-memory seed row(s) omitted`);
13
+ return rest;
14
+ }
15
+ if (src.kind === 'pglite') {
16
+ const { seed, ...rest } = src;
17
+ if (seed?.length)
18
+ redactions.push(`${entity}: ${seed.length} local-database seed row(s) omitted`);
19
+ return rest;
20
+ }
21
+ if (src.kind === 'supabase') {
22
+ const out = { ...src };
23
+ if (out.url) {
24
+ out.url = REDACTED;
25
+ redactions.push(`${entity}: Supabase URL redacted`);
26
+ }
27
+ if (out.key) {
28
+ out.key = REDACTED;
29
+ redactions.push(`${entity}: Supabase key redacted`);
30
+ }
31
+ return out;
32
+ }
33
+ if (src.kind === 'rest') {
34
+ const params = src.params.map((p) => {
35
+ // Header params and secret-named params carry auth; drop their values.
36
+ if (p.value && (p.location === 'header' || SECRET_NAME_RE.test(p.name))) {
37
+ redactions.push(`${entity}: REST ${p.location} param "${p.name}" value redacted`);
38
+ return { ...p, value: REDACTED };
39
+ }
40
+ return p;
41
+ });
42
+ let baseUrl = src.baseUrl;
43
+ if (/[?&](key|token|apikey|secret|auth|password)=/i.test(baseUrl)) {
44
+ baseUrl = baseUrl.replace(/([?&](?:key|token|apikey|secret|auth|password)=)[^&]*/gi, `$1${REDACTED}`);
45
+ redactions.push(`${entity}: credentials in REST baseUrl redacted`);
46
+ }
47
+ return { ...src, baseUrl, params };
48
+ }
49
+ // sql: the connection string lives in the host env, not the model - nothing to strip.
50
+ return src;
51
+ }
52
+ /**
53
+ * Return a copy of the project safe to attach to a bug report: credentials and
54
+ * seeded rows removed, schema + screens + blocks intact. Also returns a list of
55
+ * exactly what was stripped, for transparency.
56
+ */
57
+ export function sanitizeStudioProject(project) {
58
+ const redactions = [];
59
+ if (!project.dataSources)
60
+ return { project, redactions };
61
+ const nextSources = {};
62
+ for (const [name, src] of Object.entries(project.dataSources)) {
63
+ nextSources[name] = sanitizeSource(name, src, redactions);
64
+ }
65
+ return { project: { ...project, dataSources: nextSources }, redactions };
66
+ }
67
+ function normalizeError(e) {
68
+ if (!e)
69
+ return undefined;
70
+ if (typeof e === 'string')
71
+ return { message: e };
72
+ return { message: e.message, stack: 'stack' in e ? e.stack : undefined };
73
+ }
74
+ function newIssueUrl(repo, title, body) {
75
+ const q = new URLSearchParams({ title, body, labels: 'studio,bug' });
76
+ return `https://github.com/${repo}/issues/new?${q.toString()}`;
77
+ }
78
+ function envLines(env) {
79
+ return [
80
+ `- Studio: ${env.studioVersion ?? 'unknown'}`,
81
+ `- Node: ${env.node ?? 'unknown'}`,
82
+ `- OS: ${env.os ?? 'unknown'}`,
83
+ ];
84
+ }
85
+ function renderSummary(env, err, action, redactions) {
86
+ const lines = ['### Environment', ...envLines(env), ''];
87
+ if (action)
88
+ lines.push('### What I was doing', action, '');
89
+ if (err)
90
+ lines.push('### Error', '```', err.message, '```', '');
91
+ lines.push(`_${redactions.length} item(s) redacted (credentials + seed data)._`);
92
+ return lines.join('\n');
93
+ }
94
+ /**
95
+ * Build a shareable bug report from the current Studio state. The project is
96
+ * sanitized first; secrets never reach the markdown or the URL.
97
+ */
98
+ export function buildStudioBugReport(input) {
99
+ const env = input.env ?? {};
100
+ const err = normalizeError(input.error);
101
+ const { project, redactions } = input.project
102
+ ? sanitizeStudioProject(input.project)
103
+ : { project: undefined, redactions: [] };
104
+ const firstLine = (err?.message ?? 'Bug report').split('\n')[0].trim().slice(0, 100);
105
+ const title = `[Studio] ${firstLine}`;
106
+ const md = ['## SvGrid Studio bug report', '', '### Environment', ...envLines(env), ''];
107
+ if (input.action)
108
+ md.push('### What I was doing', input.action, '');
109
+ if (err)
110
+ md.push('### Error', '```', err.message, ...(err.stack ? ['', err.stack] : []), '```', '');
111
+ if (project)
112
+ md.push('### Project', `${project.entities?.length ?? 0} entities, ${project.screens?.length ?? 0} screens.`, '');
113
+ md.push('### Redactions', redactions.length ? redactions.map((r) => `- ${r}`).join('\n') : '- none', '');
114
+ if (project)
115
+ md.push('### Sanitized studio.config.json', '```json', JSON.stringify(project, null, 2), '```');
116
+ const markdown = md.join('\n');
117
+ const repo = input.repo ?? DEFAULT_REPO;
118
+ let issueUrl = newIssueUrl(repo, title, markdown);
119
+ let truncated = false;
120
+ if (issueUrl.length > MAX_URL) {
121
+ truncated = true;
122
+ const body = `${renderSummary(env, err, input.action, redactions)}\n\n> The full sanitized report was copied to your clipboard - paste it below.`;
123
+ issueUrl = newIssueUrl(repo, title, body);
124
+ }
125
+ return { title, markdown, issueUrl, redactions, truncated };
126
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * runStudioAdd - the one-command pipeline behind `@svgrid/studio add`: read a
3
+ * schema, introspect it, scaffold the files, merge-write them (preserving user
4
+ * edits outside managed regions), and verify the output compiles. This is the
5
+ * whole "CRUD screen in seconds" flow.
6
+ *
7
+ * Filesystem access is injected (`StudioIO`), so the orchestration is pure and
8
+ * unit-testable; the actual CLI bin supplies node:fs. No process/fs imports
9
+ * here, so it also runs in the browser (e.g. the designer's future
10
+ * write-to-project action).
11
+ */
12
+ import type { EntitySchema } from '../schema.js';
13
+ import { type ScaffoldOptions } from './scaffold.js';
14
+ import { type ScaffoldAppOptions } from './scaffold-app.js';
15
+ import { type VerifyResult } from './verify.js';
16
+ export type StudioIO = {
17
+ /** Read a file; resolve to null when it doesn't exist. */
18
+ readFile: (path: string) => Promise<string | null>;
19
+ /** Write a file, creating parent directories as needed. */
20
+ writeFile: (path: string, contents: string) => Promise<void>;
21
+ };
22
+ export type AddOptions = ScaffoldOptions & {
23
+ /** Path to a Drizzle schema file to introspect. */
24
+ from?: string;
25
+ /** Which table in the Drizzle file to use (defaults to the first). */
26
+ table?: string;
27
+ /** Sample JSON rows to infer from, as an alternative to `from`. */
28
+ rows?: Array<Record<string, unknown>>;
29
+ /** Entity name (required with `rows`, ignored with `from`). */
30
+ name?: string;
31
+ /** A ready EntitySchema, bypassing introspection. */
32
+ schema?: EntitySchema;
33
+ };
34
+ export type AddResult = {
35
+ schema: EntitySchema;
36
+ /** Paths written, in order. */
37
+ written: string[];
38
+ verify: VerifyResult;
39
+ };
40
+ /** Resolve an EntitySchema from whichever input was provided. */
41
+ export declare function resolveSchema(options: AddOptions, io: StudioIO): Promise<EntitySchema>;
42
+ /**
43
+ * Resolve **every** entity from a Drizzle or Prisma schema file (the `--all
44
+ * --from` path), linked so foreign keys become working relation lookups.
45
+ */
46
+ export declare function resolveSchemas(from: string, io: StudioIO): Promise<EntitySchema[]>;
47
+ export declare function runStudioAdd(options: AddOptions, io: StudioIO): Promise<AddResult>;
48
+ export type AddAppResult = {
49
+ written: string[];
50
+ verify: VerifyResult;
51
+ };
52
+ /**
53
+ * Scaffold a whole multi-entity app - every entity's screen plus a nav layout
54
+ * and home page - and merge-write it. The `--all` path behind `svgrid-studio`.
55
+ */
56
+ export declare function runStudioAddApp(schemas: EntitySchema[], options: ScaffoldAppOptions, io: StudioIO): Promise<AddAppResult>;