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