@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,369 @@
1
+ /**
2
+ * EntitySchema - the single declarative model that both the grid columns and
3
+ * the (commercial) edit panel / server adapters / Studio generator read from.
4
+ *
5
+ * The grid already has `ColumnDef` for *rendering* a table. An EntitySchema is
6
+ * one level up: it describes an *entity* (a table row's fields, their types,
7
+ * validation, keys, and relations) so the same definition can drive:
8
+ *
9
+ * - the grid (via `schemaToColumns`)
10
+ * - the edit panel (via `schemaToFormFields`)
11
+ * - server adapters (Drizzle / Supabase, later phases)
12
+ * - the Studio generator (introspect a data source -> EntitySchema -> code)
13
+ *
14
+ * It deliberately reuses the grid's own vocabulary - `CellDataType`,
15
+ * `CellEditorType`, `CellEditorOption`, `ColumnDef` - so a schema is a
16
+ * *superset* of what a column needs, never a parallel model. Anything the
17
+ * grid can already express is reachable through the per-field `column`
18
+ * escape hatch.
19
+ *
20
+ * Validation is typed against the Standard Schema spec (standardschema.dev),
21
+ * so Zod / Valibot / ArkType all satisfy `EntityField.validate` with zero
22
+ * hard dependency here - the same BYO approach as `setAIProvider()`.
23
+ */
24
+ import type { CellDataType, CellEditorOption, CellEditorType, ColumnDef, RowData, TableFeatures } from '@svgrid/grid';
25
+ import type { PredicateExpr } from './expressions/expression-types.js';
26
+ /**
27
+ * Minimal structural copy of the Standard Schema v1 interface
28
+ * (https://standardschema.dev). We type against the shape rather than
29
+ * depend on `@standard-schema/spec` so consumers can bring Zod, Valibot,
30
+ * ArkType, or a hand-rolled validator interchangeably.
31
+ */
32
+ export interface StandardSchemaV1<Input = unknown, Output = Input> {
33
+ readonly '~standard': {
34
+ readonly version: 1;
35
+ readonly vendor: string;
36
+ readonly validate: (value: unknown) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>;
37
+ readonly types?: {
38
+ readonly input: Input;
39
+ readonly output: Output;
40
+ };
41
+ };
42
+ }
43
+ export type StandardSchemaResult<Output> = {
44
+ readonly value: Output;
45
+ readonly issues?: undefined;
46
+ } | {
47
+ readonly issues: ReadonlyArray<{
48
+ readonly message: string;
49
+ readonly path?: ReadonlyArray<PropertyKey | {
50
+ key: PropertyKey;
51
+ }>;
52
+ }>;
53
+ };
54
+ /**
55
+ * High-level field type. A superset of the grid's `CellDataType`: the first
56
+ * five map 1:1 onto it, and `datetime` / `enum` / `relation` / `json` extend
57
+ * it for entity concerns the grid's render-only type never needed.
58
+ */
59
+ export type EntityFieldType = CellDataType | 'datetime' | 'enum' | 'relation' | 'json';
60
+ /**
61
+ * The control a form field renders as. A superset of the grid's `CellEditorType`:
62
+ * the grid cell editors (which double as form controls) plus a few form-only rich
63
+ * inputs from the editor suite - `phone` (SvPhoneInput), `country` (SvCountryInput),
64
+ * `mask` (SvMaskedInput), `slider` (SvSlider). Grid columns map the form-only kinds
65
+ * back to a safe cell editor (see `schemaToColumns`).
66
+ */
67
+ export type StudioEditorType = CellEditorType | 'phone' | 'country' | 'mask' | 'slider';
68
+ /** Describe one field of an entity. Keys off the row property `field`. */
69
+ export type EntityField<TData extends RowData = RowData> = {
70
+ /** Property key on the row. Becomes `ColumnDef.field`. */
71
+ field: string & keyof TData;
72
+ /**
73
+ * Actual database column, when it differs from `field` (e.g. a Drizzle
74
+ * `createdAt: timestamp('created_at')` maps `field: 'createdAt'` to
75
+ * `dbColumn: 'created_at'`). SQL adapters read/write this column and alias it
76
+ * back to `field`; everything else keys on `field`. Defaults to `field`.
77
+ */
78
+ dbColumn?: string;
79
+ /** High-level type. Drives grid `cellDataType`, the form control, and adapter coercion. */
80
+ type: EntityFieldType;
81
+ /** Human label. Defaults to a title-cased `field`. Used for the column header and the form label. */
82
+ label?: string;
83
+ /** Part of the primary key. Set on exactly one field, or use `EntitySchema.idField`. */
84
+ primaryKey?: boolean;
85
+ /**
86
+ * Server-owned / not user-editable (e.g. `id`, `createdAt`). Shown in the
87
+ * grid, read-only in the edit panel, and omitted from create payloads.
88
+ */
89
+ readonly?: boolean;
90
+ /** Required on create / update. Enforced by the edit panel and generated server validators. */
91
+ required?: boolean;
92
+ /** Built-in validation, enforced by the edit panel with no external library. */
93
+ min?: number;
94
+ max?: number;
95
+ minLength?: number;
96
+ maxLength?: number;
97
+ /** Regex source string a text value must match. */
98
+ pattern?: string;
99
+ /** Convenience format check for text fields. */
100
+ format?: 'email' | 'url';
101
+ /**
102
+ * Hide the field. `true` hides it everywhere; the object form hides it from
103
+ * just the grid or just the form (e.g. a password shown in the form, never
104
+ * the grid).
105
+ */
106
+ hidden?: boolean | {
107
+ grid?: boolean;
108
+ form?: boolean;
109
+ };
110
+ /**
111
+ * Value-driven behaviour: each condition is re-evaluated against the form's
112
+ * current values as the user types, so a field can appear, lock, or become
113
+ * required in response to another answer (e.g. show "Other reason" only when
114
+ * `reason` is `other`).
115
+ *
116
+ * Conditions are data (`PredicateExpr`), not functions, so they survive a
117
+ * round-trip through `studio.config.json` and can be built in a UI. Build them
118
+ * by hand, with `parsePredicate('status = "active"')`, or in
119
+ * `SvExpressionEditor`.
120
+ *
121
+ * A field hidden by `visible` is skipped by validation and left out of the
122
+ * submitted payload, so an invisible field can never block a save or write a
123
+ * stale value. `required` here replaces the static `required` flag rather than
124
+ * adding to it.
125
+ */
126
+ when?: {
127
+ visible?: PredicateExpr;
128
+ disabled?: PredicateExpr;
129
+ required?: PredicateExpr;
130
+ };
131
+ /**
132
+ * Options for `type: 'enum'`. Reuses the grid's `CellEditorOption`
133
+ * (`{ value, label, color? }`) so grid and form render identically.
134
+ */
135
+ options?: ReadonlyArray<CellEditorOption>;
136
+ /** For `type: 'relation'`: the related entity, the local FK, and which related field to display. */
137
+ relation?: {
138
+ /** Name of the related `EntitySchema`. */
139
+ entity: string;
140
+ /** Local column storing the related id. Defaults to `field`. */
141
+ foreignKey?: string;
142
+ /** Field on the related entity to show to the user. */
143
+ labelField: string;
144
+ };
145
+ /**
146
+ * Render a file / image upload control in the edit form. The stored value is a
147
+ * URL (or a data URL for the built-in fallback). Provide an upload handler via
148
+ * `SvGridEditPanel`'s `uploads` prop to push to storage and store the URL.
149
+ */
150
+ upload?: {
151
+ /** `accept` attribute, e.g. `'image/*'` or `'.pdf,.csv'`. */
152
+ accept?: string;
153
+ /** Show an image preview + thumbnail. */
154
+ image?: boolean;
155
+ };
156
+ /**
157
+ * Standard Schema validator (Zod / Valibot / ArkType / ...). Run by the edit
158
+ * panel and reusable verbatim server-side, so a rule is written once.
159
+ */
160
+ validate?: StandardSchemaV1;
161
+ /** Default applied when the edit panel creates a new row. */
162
+ defaultValue?: unknown;
163
+ /**
164
+ * Derived, non-stored field: its value is computed from the row (e.g. a line
165
+ * total `qty * price` or a full name). Computed fields are display-only -
166
+ * read-only in the grid + form, never sent in a create/update payload. Use
167
+ * `withEntityRules(source, schema)` (or `applyComputed`) to materialize the
168
+ * value onto rows so the grid can sort/filter it within the fetched page.
169
+ */
170
+ computed?: (row: TData) => unknown;
171
+ /**
172
+ * No-code computed source: a formula over other fields (e.g. `qty * price`,
173
+ * `first + ' ' + last`). The Studio generator compiles it into `computed`;
174
+ * bare field names resolve to `row.<field>`. Ignored when `computed` is set.
175
+ */
176
+ formula?: string;
177
+ /** Merge extra `ColumnDef` props onto the derived grid column (width, align, `cell`, `format`, ...). Escape hatch. */
178
+ column?: Partial<ColumnDef<TableFeatures, TData>>;
179
+ /** Override the derived form control. Escape hatch. */
180
+ input?: {
181
+ editorType?: StudioEditorType;
182
+ placeholder?: string;
183
+ /** Columns spanned in the form's 2-col grid. Defaults to 1. */
184
+ span?: 1 | 2;
185
+ help?: string;
186
+ /** Mask pattern for the `mask` editor (e.g. `'(999) 000-0000'`). */
187
+ mask?: string;
188
+ /** Number/slider step increment (SvNumberInput / SvSlider). */
189
+ step?: number;
190
+ /** Number decimal places (SvNumberInput). */
191
+ precision?: number;
192
+ /** Number affix, e.g. `'$'` prefix or `'%'` suffix (SvNumberInput). */
193
+ prefix?: string;
194
+ suffix?: string;
195
+ };
196
+ };
197
+ /**
198
+ * Business-logic hooks run at the mutation boundary by `withEntityRules`. Before
199
+ * hooks may transform the payload (return a new value) or throw to reject; the
200
+ * `validate` hook does cross-field form validation (return a `{ field: message }`
201
+ * map of errors, or `null`/`{}` when valid) and is also run by the edit panel.
202
+ */
203
+ export type EntityHooks<TData extends RowData = RowData> = {
204
+ /** Transform / validate a create payload. Return the payload to use, or throw. */
205
+ beforeCreate?: (values: Partial<TData>) => Partial<TData> | Promise<Partial<TData>>;
206
+ /** Transform / validate an update payload. Return the payload to use, or throw. */
207
+ beforeUpdate?: (id: string, values: Partial<TData>) => Partial<TData> | Promise<Partial<TData>>;
208
+ /** Side effect after a row is created. */
209
+ afterCreate?: (row: TData) => void | Promise<void>;
210
+ /** Side effect after a row is updated. */
211
+ afterUpdate?: (row: TData) => void | Promise<void>;
212
+ /** Veto a delete by throwing. */
213
+ beforeDelete?: (id: string) => void | Promise<void>;
214
+ /** Side effect after a row is deleted. */
215
+ afterDelete?: (id: string) => void | Promise<void>;
216
+ /** Cross-field form validation. Return errors keyed by field, or null when valid. */
217
+ validate?: (values: Partial<TData>) => Record<string, string> | null | Promise<Record<string, string> | null>;
218
+ };
219
+ /** A complete entity: its fields plus how to identify a row. */
220
+ export type EntitySchema<TData extends RowData = RowData> = {
221
+ /** Stable machine name / table name, e.g. `'customers'`. */
222
+ name: string;
223
+ /** Singular display label, e.g. `'Customer'`. Defaults to a title-cased `name`. */
224
+ label?: string;
225
+ fields: ReadonlyArray<EntityField<TData>>;
226
+ /** Primary-key field. Optional when exactly one field sets `primaryKey`. */
227
+ idField?: string & keyof TData;
228
+ /** Business-logic hooks run at the mutation boundary (see `withEntityRules`). */
229
+ hooks?: EntityHooks<TData>;
230
+ /**
231
+ * No-code cross-field validation rules (authored in the Studio designer). The
232
+ * generator compiles them into `hooks.validate`. Each rule asserts a condition;
233
+ * when it fails, `message` is attached to `field`.
234
+ */
235
+ validations?: ValidationRuleSpec[];
236
+ /**
237
+ * How the create / edit form is arranged: column count and titled sections.
238
+ * Part of the schema so a built form ships with the entity rather than living
239
+ * in whichever component happens to render it.
240
+ */
241
+ form?: FormLayout;
242
+ };
243
+ /** The comparison a {@link ValidationRuleSpec} asserts must hold. */
244
+ export type ValidationOp = 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'required' | 'maxLen' | 'minLen';
245
+ /** One no-code validation rule: assert `field <op> value`, else show `message`.
246
+ * `compareTo` (another field name) asserts a cross-field comparison instead of `value`. */
247
+ export type ValidationRuleSpec = {
248
+ field: string;
249
+ op: ValidationOp;
250
+ value?: string | number;
251
+ /** Compare against another field's value (cross-field) instead of `value`. */
252
+ compareTo?: string;
253
+ message: string;
254
+ };
255
+ /**
256
+ * A titled group of fields in the form.
257
+ *
258
+ * `fields` names them in the order they should appear, so a section is both the
259
+ * grouping and the ordering. A field left out of every section still renders, in
260
+ * a trailing untitled group - a form never silently drops one.
261
+ */
262
+ export type FormSection = {
263
+ title?: string;
264
+ /** A line under the heading, for what the group is for or how to fill it in. */
265
+ description?: string;
266
+ /** Column count for this section only. Defaults to the form's. */
267
+ columns?: 1 | 2 | 3;
268
+ fields: string[];
269
+ /** Show the section only while this holds - see `EntityField.when`. */
270
+ visibleWhen?: PredicateExpr;
271
+ };
272
+ /**
273
+ * How the entity's form is laid out. Lives on the schema rather than on the
274
+ * component so a form that has been *built* travels with the entity: it
275
+ * round-trips through `studio.config.json`, generates into an app, and renders
276
+ * the same on the client panel and the server-rendered form.
277
+ *
278
+ * `SvGridEditPanel`'s `columns` / `sections` props still win when passed, for a
279
+ * one-off arrangement of an otherwise shared schema.
280
+ */
281
+ export type FormLayout = {
282
+ columns?: 1 | 2 | 3;
283
+ sections?: FormSection[];
284
+ };
285
+ /** Normalized descriptor the edit panel renders from (one per visible-in-form field). */
286
+ export type FormFieldDescriptor = {
287
+ field: string;
288
+ label: string;
289
+ editorType: StudioEditorType;
290
+ type: EntityFieldType;
291
+ required: boolean;
292
+ readonly: boolean;
293
+ /** Mask pattern for the `mask` editor. */
294
+ mask?: string;
295
+ /** Number editor options (step / decimals / affixes). */
296
+ step?: number;
297
+ precision?: number;
298
+ prefix?: string;
299
+ suffix?: string;
300
+ min?: number;
301
+ max?: number;
302
+ minLength?: number;
303
+ maxLength?: number;
304
+ pattern?: string;
305
+ format?: 'email' | 'url';
306
+ options?: ReadonlyArray<CellEditorOption>;
307
+ relation?: EntityField['relation'];
308
+ upload?: EntityField['upload'];
309
+ validate?: StandardSchemaV1;
310
+ defaultValue?: unknown;
311
+ placeholder?: string;
312
+ help?: string;
313
+ span: 1 | 2;
314
+ /** Derived value function, when the field is computed (rendered read-only, live). */
315
+ computed?: (row: RowData) => unknown;
316
+ /** Value-driven visible / disabled / required conditions. See `EntityField.when`. */
317
+ when?: EntityField['when'];
318
+ };
319
+ /** `first_name` / `firstName` / `first-name` -> `First Name`. */
320
+ export declare function titleCase(field: string): string;
321
+ /**
322
+ * Resolve the primary-key field id. Precedence: explicit `schema.idField`,
323
+ * then the single field flagged `primaryKey`, then a field literally named
324
+ * `id`. Throws if none resolves, since every downstream consumer (grid
325
+ * `getRowId`, edit panel, adapters) needs a stable key.
326
+ */
327
+ export declare function resolveIdField<TData extends RowData>(schema: EntitySchema<TData>): string;
328
+ /**
329
+ * Derive grid columns from a schema. Read-only fields become non-editable
330
+ * columns; `enum` carries its options through as `editorOptions`. The
331
+ * per-field `column` escape hatch is merged last, so any explicit grid prop
332
+ * wins over the derived defaults.
333
+ */
334
+ export declare function schemaToColumns<TData extends RowData>(schema: EntitySchema<TData>): Array<ColumnDef<TableFeatures, TData>>;
335
+ /**
336
+ * Derive normalized form-field descriptors for the edit panel. Fields hidden
337
+ * from the form are dropped; the primary key is forced read-only (you never
338
+ * edit an id). The form control is the per-field `input.editorType` override,
339
+ * else the type's grid editor default.
340
+ */
341
+ export declare function schemaToFormFields<TData extends RowData>(schema: EntitySchema<TData>): FormFieldDescriptor[];
342
+ /**
343
+ * Run a field's Standard Schema validator against a value. Returns `null`
344
+ * when valid (or when the field has no validator), else the first issue
345
+ * message. Async validators (some Standard Schema vendors) are awaited.
346
+ */
347
+ export declare function validateField(field: Pick<EntityField, 'validate'>, value: unknown): Promise<string | null>;
348
+ /**
349
+ * Materialize every `computed` field's value onto a copy of the row, so the
350
+ * grid / export see a real value to render, sort, and filter. Each computed
351
+ * field is evaluated against the original (stored) row, so computed fields
352
+ * cannot depend on one another. Returns the row unchanged when there are none.
353
+ */
354
+ export declare function applyComputed<TData extends RowData>(schema: EntitySchema<TData>, row: TData): TData;
355
+ /**
356
+ * Run the schema-level cross-field `hooks.validate`. Returns a `{ field:
357
+ * message }` map (empty when valid or when no validate hook is set). Used by
358
+ * both the edit panel (form errors) and `withEntityRules` (write guard).
359
+ */
360
+ export declare function validateEntity<TData extends RowData>(schema: EntitySchema<TData>, values: Partial<TData>): Promise<Record<string, string>>;
361
+ /** Pick the best human-facing column of a schema: a name/title/label field, else the first text field, else the id. */
362
+ export declare function pickLabelField<TData extends RowData>(schema: EntitySchema<TData>): string;
363
+ /**
364
+ * Resolve each `relation` field's `labelField` against the actual related
365
+ * schema. When you introspect several tables, foreign keys only know the related
366
+ * table name - this fills in a good display field (name / title / ...) from the
367
+ * related schema. Returns new schemas; inputs are untouched.
368
+ */
369
+ export declare function linkRelationLabels<TData extends RowData>(schemas: EntitySchema<TData>[]): EntitySchema<TData>[];
package/dist/schema.js ADDED
@@ -0,0 +1,216 @@
1
+ // --- derivation ------------------------------------------------------------
2
+ /** `first_name` / `firstName` / `first-name` -> `First Name`. */
3
+ export function titleCase(field) {
4
+ return field
5
+ .replace(/[_-]+/g, ' ')
6
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
7
+ .replace(/\s+/g, ' ')
8
+ .trim()
9
+ .replace(/\b\w/g, (c) => c.toUpperCase());
10
+ }
11
+ /**
12
+ * Resolve the primary-key field id. Precedence: explicit `schema.idField`,
13
+ * then the single field flagged `primaryKey`, then a field literally named
14
+ * `id`. Throws if none resolves, since every downstream consumer (grid
15
+ * `getRowId`, edit panel, adapters) needs a stable key.
16
+ */
17
+ export function resolveIdField(schema) {
18
+ if (schema.idField)
19
+ return schema.idField;
20
+ const flagged = schema.fields.filter((f) => f.primaryKey);
21
+ if (flagged.length === 1)
22
+ return flagged[0].field;
23
+ if (flagged.length > 1) {
24
+ throw new Error(`EntitySchema "${schema.name}": multiple fields set primaryKey (${flagged
25
+ .map((f) => f.field)
26
+ .join(', ')}). Set exactly one, or use idField for a composite key.`);
27
+ }
28
+ const byName = schema.fields.find((f) => f.field === 'id');
29
+ if (byName)
30
+ return byName.field;
31
+ throw new Error(`EntitySchema "${schema.name}": no primary key. Set idField, flag a field primaryKey, or name a field "id".`);
32
+ }
33
+ /**
34
+ * Map a form control (StudioEditorType) to a valid grid cell editor. The form-only
35
+ * editors have no in-cell equivalent, so they degrade: `slider` -> `number`,
36
+ * `phone`/`country`/`mask` -> `text`. Returns undefined when no override is set.
37
+ */
38
+ function gridEditorType(t) {
39
+ if (!t)
40
+ return undefined;
41
+ if (t === 'slider')
42
+ return 'number';
43
+ if (t === 'phone' || t === 'country' || t === 'mask')
44
+ return 'text';
45
+ return t;
46
+ }
47
+ /** Grid render defaults per entity type: which `cellDataType` + `editorType` a field maps to. */
48
+ function gridTypeFor(type) {
49
+ switch (type) {
50
+ case 'number':
51
+ return { cellDataType: 'number', editorType: 'number' };
52
+ case 'boolean':
53
+ return { cellDataType: 'boolean', editorType: 'checkbox' };
54
+ case 'date':
55
+ return { cellDataType: 'date', editorType: 'date' };
56
+ case 'dateString':
57
+ return { cellDataType: 'dateString', editorType: 'date' };
58
+ case 'datetime':
59
+ return { editorType: 'datetime' };
60
+ case 'enum':
61
+ return { editorType: 'select' };
62
+ case 'relation':
63
+ return { editorType: 'select' };
64
+ case 'json':
65
+ return { editorType: 'textarea' };
66
+ case 'text':
67
+ default:
68
+ return { cellDataType: 'text', editorType: 'text' };
69
+ }
70
+ }
71
+ function hiddenFor(field, surface) {
72
+ if (field.hidden === true)
73
+ return true;
74
+ if (field.hidden && typeof field.hidden === 'object')
75
+ return field.hidden[surface] === true;
76
+ return false;
77
+ }
78
+ /**
79
+ * Derive grid columns from a schema. Read-only fields become non-editable
80
+ * columns; `enum` carries its options through as `editorOptions`. The
81
+ * per-field `column` escape hatch is merged last, so any explicit grid prop
82
+ * wins over the derived defaults.
83
+ */
84
+ export function schemaToColumns(schema) {
85
+ return schema.fields
86
+ .filter((f) => !hiddenFor(f, 'grid'))
87
+ .map((f) => {
88
+ const { cellDataType, editorType } = gridTypeFor(f.type);
89
+ // A number field whose label carries a "$" is money: format it as currency.
90
+ const isMoney = f.type === 'number' && /\$/.test(f.label ?? '');
91
+ const col = {
92
+ field: f.field,
93
+ header: f.label ?? titleCase(f.field),
94
+ editable: !f.readonly && !f.computed,
95
+ ...(cellDataType ? { cellDataType } : {}),
96
+ ...(gridEditorType(f.input?.editorType) ?? editorType ? { editorType: (gridEditorType(f.input?.editorType) ?? editorType) } : {}),
97
+ ...(f.options ? { editorOptions: f.options } : {}),
98
+ ...(isMoney ? { format: { type: 'currency', currency: 'USD', options: { maximumFractionDigits: 0 } } } : {}),
99
+ // A computed field derives its cell value via the grid's value accessor,
100
+ // so it renders, sorts, and filters client-side with no materialization.
101
+ ...(f.computed ? { fieldFn: f.computed } : {}),
102
+ ...(f.column ?? {}),
103
+ };
104
+ return col;
105
+ });
106
+ }
107
+ /**
108
+ * Derive normalized form-field descriptors for the edit panel. Fields hidden
109
+ * from the form are dropped; the primary key is forced read-only (you never
110
+ * edit an id). The form control is the per-field `input.editorType` override,
111
+ * else the type's grid editor default.
112
+ */
113
+ export function schemaToFormFields(schema) {
114
+ const idField = resolveIdField(schema);
115
+ return schema.fields
116
+ .filter((f) => !hiddenFor(f, 'form'))
117
+ .map((f) => {
118
+ const { editorType } = gridTypeFor(f.type);
119
+ const isId = f.field === idField;
120
+ return {
121
+ field: f.field,
122
+ label: f.label ?? titleCase(f.field),
123
+ editorType: f.input?.editorType ?? editorType,
124
+ type: f.type,
125
+ required: !!f.required && !isId,
126
+ readonly: !!f.readonly || isId || !!f.computed,
127
+ mask: f.input?.mask,
128
+ step: f.input?.step,
129
+ precision: f.input?.precision,
130
+ prefix: f.input?.prefix,
131
+ suffix: f.input?.suffix,
132
+ min: f.min,
133
+ max: f.max,
134
+ minLength: f.minLength,
135
+ maxLength: f.maxLength,
136
+ pattern: f.pattern,
137
+ format: f.format,
138
+ options: f.options,
139
+ relation: f.relation,
140
+ upload: f.upload,
141
+ validate: f.validate,
142
+ defaultValue: f.defaultValue,
143
+ placeholder: f.input?.placeholder,
144
+ help: f.input?.help,
145
+ span: f.input?.span ?? (f.type === 'json' ? 2 : 1),
146
+ computed: f.computed,
147
+ when: f.when,
148
+ };
149
+ });
150
+ }
151
+ /**
152
+ * Run a field's Standard Schema validator against a value. Returns `null`
153
+ * when valid (or when the field has no validator), else the first issue
154
+ * message. Async validators (some Standard Schema vendors) are awaited.
155
+ */
156
+ export async function validateField(field, value) {
157
+ if (!field.validate)
158
+ return null;
159
+ const result = await field.validate['~standard'].validate(value);
160
+ const first = 'issues' in result ? result.issues?.[0] : undefined;
161
+ return first ? first.message : null;
162
+ }
163
+ /**
164
+ * Materialize every `computed` field's value onto a copy of the row, so the
165
+ * grid / export see a real value to render, sort, and filter. Each computed
166
+ * field is evaluated against the original (stored) row, so computed fields
167
+ * cannot depend on one another. Returns the row unchanged when there are none.
168
+ */
169
+ export function applyComputed(schema, row) {
170
+ const computed = schema.fields.filter((f) => f.computed);
171
+ if (computed.length === 0)
172
+ return row;
173
+ const out = { ...row };
174
+ for (const f of computed)
175
+ out[f.field] = f.computed(row);
176
+ return out;
177
+ }
178
+ /**
179
+ * Run the schema-level cross-field `hooks.validate`. Returns a `{ field:
180
+ * message }` map (empty when valid or when no validate hook is set). Used by
181
+ * both the edit panel (form errors) and `withEntityRules` (write guard).
182
+ */
183
+ export async function validateEntity(schema, values) {
184
+ if (!schema.hooks?.validate)
185
+ return {};
186
+ return (await schema.hooks.validate(values)) ?? {};
187
+ }
188
+ /** Pick the best human-facing column of a schema: a name/title/label field, else the first text field, else the id. */
189
+ export function pickLabelField(schema) {
190
+ const byName = schema.fields.find((f) => /^(name|title|label)$/i.test(f.field));
191
+ if (byName)
192
+ return byName.field;
193
+ const idField = schema.idField ?? schema.fields.find((f) => f.primaryKey)?.field;
194
+ const text = schema.fields.find((f) => f.type === 'text' && f.field !== idField);
195
+ return text?.field ?? idField ?? schema.fields[0].field;
196
+ }
197
+ /**
198
+ * Resolve each `relation` field's `labelField` against the actual related
199
+ * schema. When you introspect several tables, foreign keys only know the related
200
+ * table name - this fills in a good display field (name / title / ...) from the
201
+ * related schema. Returns new schemas; inputs are untouched.
202
+ */
203
+ export function linkRelationLabels(schemas) {
204
+ const byName = new Map(schemas.map((s) => [s.name, s]));
205
+ return schemas.map((schema) => ({
206
+ ...schema,
207
+ fields: schema.fields.map((f) => {
208
+ if (f.type !== 'relation' || !f.relation)
209
+ return f;
210
+ const related = byName.get(f.relation.entity);
211
+ if (!related)
212
+ return f;
213
+ return { ...f, relation: { ...f.relation, labelField: pickLabelField(related) } };
214
+ }),
215
+ }));
216
+ }
@@ -0,0 +1,62 @@
1
+ type SmartGlobal = {
2
+ Utilities: {
3
+ Assign(name: string, cls: unknown): void;
4
+ Core: {
5
+ toDash(input: string): string;
6
+ };
7
+ DataExporter?: new (options: Record<string, unknown>, groupBy?: ReadonlyArray<string>, filterBy?: Record<string, unknown>, conditionalFormatting?: unknown) => SmartDataExporterInstance;
8
+ [key: string]: unknown;
9
+ };
10
+ };
11
+ /**
12
+ * Shape of the image object Smart's xlsx writer expects from
13
+ * `addImageToCell(...).image`. `base64` may be a full data URL; the
14
+ * exporter strips the prefix.
15
+ */
16
+ export type SmartImageDescriptor = {
17
+ id: string;
18
+ base64: string;
19
+ imageType: string;
20
+ width: number;
21
+ height: number;
22
+ };
23
+ export type SmartDataExporterInstance = {
24
+ /**
25
+ * Smart looks for these on the INSTANCE (not the constructor opts) at
26
+ * exportData() time. The wrapper sets them after `new DataExporter(...)`.
27
+ */
28
+ headerContent?: Array<{
29
+ cells: Record<string, unknown>;
30
+ style?: Record<string, unknown>;
31
+ }>;
32
+ footerContent?: Array<{
33
+ cells: Record<string, unknown>;
34
+ style?: Record<string, unknown>;
35
+ }>;
36
+ addImageToCell?: (rowIndex: number, dataField: string, value: unknown, rawValue: unknown, row: Record<string, unknown>, arrIndex: number) => {
37
+ image: SmartImageDescriptor;
38
+ value?: unknown;
39
+ } | null;
40
+ spreadsheets?: ReadonlyArray<{
41
+ label: string;
42
+ dataSource: ReadonlyArray<Record<string, unknown>>;
43
+ /** `format` is an optional Smart/Excel number-format token consumed by
44
+ * the xlsx writer's `getXLSXFormat` to keep a column's cells typed. */
45
+ columns: ReadonlyArray<{
46
+ dataField: string;
47
+ label: string;
48
+ format?: string;
49
+ width?: number;
50
+ }>;
51
+ dataFields: ReadonlyArray<string>;
52
+ style?: unknown;
53
+ }>;
54
+ exportData(data: ReadonlyArray<Record<string, unknown>>, format: string, filename?: string, callback?: (result: unknown) => void): unknown;
55
+ };
56
+ declare global {
57
+ interface Window {
58
+ Smart?: SmartGlobal;
59
+ }
60
+ }
61
+ export declare function installSmartShim(): void;
62
+ export {};
@@ -0,0 +1,34 @@
1
+ // Minimal globalThis.Smart shim so the vendored smart.export.js IIFE can
2
+ // register Smart.Utilities.DataExporter without dragging in the rest of the
3
+ // Smart UI runtime. DataExporter calls into Smart.Utilities.{Assign, Core.toDash}
4
+ // at registration; the other namespaces (DateTime, NumberRenderer, Draw,
5
+ // BigNumber, Complex) are guarded by `if (!Smart.Utilities.X) return e;` paths
6
+ // inside the exporter and degrade gracefully when missing.
7
+ //
8
+ // We export a function instead of relying on import-side-effects so callers
9
+ // can deterministically install the shim before the smart.export.js module
10
+ // runs its IIFE.
11
+ let installed = false;
12
+ export function installSmartShim() {
13
+ if (installed)
14
+ return;
15
+ if (typeof window === 'undefined') {
16
+ throw new Error('@svgrid/enterprise: installSmartShim() requires a browser environment');
17
+ }
18
+ const existing = window.Smart;
19
+ const shim = existing ?? ({ Utilities: {} });
20
+ shim.Utilities = shim.Utilities ?? {};
21
+ if (typeof shim.Utilities.Assign !== 'function') {
22
+ shim.Utilities.Assign = (name, cls) => {
23
+ ;
24
+ shim.Utilities[name] = cls;
25
+ };
26
+ }
27
+ if (!shim.Utilities.Core || typeof shim.Utilities.Core.toDash !== 'function') {
28
+ shim.Utilities.Core = {
29
+ toDash: (s) => s.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase()),
30
+ };
31
+ }
32
+ window.Smart = shim;
33
+ installed = true;
34
+ }