@svgrid/enterprise 2.5.3 → 2.6.1

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 (624) 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/{src → dist}/SvExpressionEditor.svelte +4 -1
  8. package/dist/SvExpressionEditor.svelte.d.ts +12 -0
  9. package/dist/SvFileInput.svelte.d.ts +20 -0
  10. package/dist/SvGridAlerts.svelte.d.ts +77 -0
  11. package/dist/SvGridBoard.svelte.d.ts +30 -0
  12. package/{src → dist}/SvGridEditPanel.svelte +173 -28
  13. package/dist/SvGridEditPanel.svelte.d.ts +75 -0
  14. package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
  15. package/dist/SvGridScheduler.svelte.d.ts +30 -0
  16. package/dist/SvImportDialog.svelte.d.ts +88 -0
  17. package/dist/SvLookupInput.svelte.d.ts +21 -0
  18. package/dist/SvPivotDesigner.svelte.d.ts +176 -0
  19. package/dist/SvRecordDetail.svelte.d.ts +58 -0
  20. package/dist/SvSchedule.svelte.d.ts +29 -0
  21. package/dist/SvSchemaChart.svelte.d.ts +61 -0
  22. package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
  23. package/dist/alerts/alert-engine-attach.d.ts +79 -0
  24. package/dist/alerts/alert-engine-attach.js +106 -0
  25. package/dist/alerts/alert-engine.d.ts +42 -0
  26. package/dist/alerts/alert-engine.js +196 -0
  27. package/dist/alerts/alert-formats.d.ts +26 -0
  28. package/dist/alerts/alert-formats.js +58 -0
  29. package/dist/alerts/alert-observer.d.ts +54 -0
  30. package/dist/alerts/alert-observer.js +156 -0
  31. package/dist/alerts/alert-scheduler.d.ts +30 -0
  32. package/dist/alerts/alert-scheduler.js +54 -0
  33. package/dist/alerts/alert-storage.d.ts +31 -0
  34. package/dist/alerts/alert-storage.js +92 -0
  35. package/dist/alerts/alert-store.svelte.d.ts +24 -0
  36. package/dist/alerts/alert-store.svelte.js +69 -0
  37. package/dist/alerts/alert-types.d.ts +86 -0
  38. package/dist/alerts/alert-types.js +1 -0
  39. package/dist/alerts.d.ts +2 -0
  40. package/{src/alerts.ts → dist/alerts.js} +9 -9
  41. package/dist/board.d.ts +7 -0
  42. package/{src/board.ts → dist/board.js} +13 -14
  43. package/dist/cdn/svgrid-enterprise.svelte-external.js +3220 -2607
  44. package/dist/designer/assets/index-BfzoL904.css +1 -0
  45. package/dist/designer/assets/{index-CBYU-KNn.js → index-CKdwDseq.js} +139 -139
  46. package/dist/designer/assets/src-DCKhP5Xy.css +1 -0
  47. package/dist/designer/assets/{src-i309BeJb.js → src-DLsSdh3J.js} +213 -193
  48. package/dist/designer/index.html +4 -4
  49. package/dist/edit-panel.d.ts +105 -0
  50. package/dist/edit-panel.js +350 -0
  51. package/dist/export-conditional.d.ts +31 -0
  52. package/dist/export-conditional.js +65 -0
  53. package/dist/export-ooxml.d.ts +93 -0
  54. package/dist/export-ooxml.js +385 -0
  55. package/dist/export-pdf.d.ts +107 -0
  56. package/dist/export-pdf.js +144 -0
  57. package/dist/export-print.d.ts +55 -0
  58. package/dist/export-print.js +91 -0
  59. package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
  60. package/dist/export-serialize.js +11 -0
  61. package/dist/export-xls.d.ts +26 -0
  62. package/dist/export-xls.js +157 -0
  63. package/dist/export.d.ts +323 -0
  64. package/dist/export.js +1021 -0
  65. package/dist/expressions/evaluate.d.ts +17 -0
  66. package/dist/expressions/evaluate.js +214 -0
  67. package/dist/expressions/expression-columns.d.ts +61 -0
  68. package/dist/expressions/expression-columns.js +72 -0
  69. package/dist/expressions/expression-types.d.ts +125 -0
  70. package/dist/expressions/expression-types.js +1 -0
  71. package/dist/expressions/parse.d.ts +25 -0
  72. package/dist/expressions/parse.js +537 -0
  73. package/dist/import.d.ts +232 -0
  74. package/dist/import.js +846 -0
  75. package/dist/index.d.ts +66 -0
  76. package/dist/index.js +91 -0
  77. package/dist/install.d.ts +70 -0
  78. package/dist/install.js +61 -0
  79. package/dist/license-core.d.ts +37 -0
  80. package/dist/license-core.js +81 -0
  81. package/dist/license.d.ts +30 -0
  82. package/dist/license.js +139 -0
  83. package/dist/master-detail.d.ts +23 -0
  84. package/dist/master-detail.js +35 -0
  85. package/dist/node/studio.js +683 -13
  86. package/dist/pivot-chart.d.ts +28 -0
  87. package/dist/pivot-chart.js +71 -0
  88. package/dist/pivot-designer.d.ts +69 -0
  89. package/dist/pivot-designer.js +38 -0
  90. package/dist/pivot-enable.d.ts +6 -0
  91. package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
  92. package/dist/pivot.d.ts +111 -0
  93. package/dist/pivot.js +353 -0
  94. package/dist/print.d.ts +33 -0
  95. package/dist/print.js +61 -0
  96. package/dist/revoked.d.ts +1 -0
  97. package/{src/revoked.ts → dist/revoked.js} +5 -6
  98. package/dist/scheduler-assignments.d.ts +64 -0
  99. package/dist/scheduler-assignments.js +92 -0
  100. package/dist/scheduler-axis.d.ts +81 -0
  101. package/dist/scheduler-axis.js +180 -0
  102. package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
  103. package/dist/scheduler-booking.js +50 -0
  104. package/dist/scheduler-config.d.ts +177 -0
  105. package/dist/scheduler-config.js +1 -0
  106. package/dist/scheduler-dependencies.d.ts +89 -0
  107. package/dist/scheduler-dependencies.js +179 -0
  108. package/dist/scheduler-freebusy.d.ts +19 -0
  109. package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
  110. package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
  111. package/dist/scheduler-heatmap.js +41 -0
  112. package/dist/scheduler-resource-tree.d.ts +48 -0
  113. package/dist/scheduler-resource-tree.js +78 -0
  114. package/dist/scheduler-slots.d.ts +37 -0
  115. package/dist/scheduler-slots.js +80 -0
  116. package/dist/scheduler-summary.d.ts +41 -0
  117. package/dist/scheduler-summary.js +54 -0
  118. package/dist/scheduler.d.ts +7 -0
  119. package/{src/scheduler.ts → dist/scheduler.js} +13 -14
  120. package/dist/scheduling.d.ts +132 -0
  121. package/dist/scheduling.js +228 -0
  122. package/dist/schema-designer.d.ts +42 -0
  123. package/dist/schema-designer.js +117 -0
  124. package/dist/schema.d.ts +408 -0
  125. package/dist/schema.js +225 -0
  126. package/dist/smart-shim.d.ts +62 -0
  127. package/dist/smart-shim.js +34 -0
  128. package/dist/sources/aggregate.d.ts +43 -0
  129. package/dist/sources/aggregate.js +60 -0
  130. package/dist/sources/auth-supabase.d.ts +69 -0
  131. package/dist/sources/auth-supabase.js +39 -0
  132. package/dist/sources/dashboard.d.ts +65 -0
  133. package/dist/sources/dashboard.js +95 -0
  134. package/dist/sources/field-inference.d.ts +23 -0
  135. package/dist/sources/field-inference.js +52 -0
  136. package/dist/sources/filters.d.ts +35 -0
  137. package/dist/sources/filters.js +52 -0
  138. package/dist/sources/index.d.ts +18 -0
  139. package/dist/sources/index.js +18 -0
  140. package/dist/sources/introspect-supabase.d.ts +30 -0
  141. package/dist/sources/introspect-supabase.js +134 -0
  142. package/dist/sources/realtime-supabase.d.ts +37 -0
  143. package/dist/sources/realtime-supabase.js +52 -0
  144. package/dist/sources/relation-lookup.d.ts +50 -0
  145. package/dist/sources/relation-lookup.js +77 -0
  146. package/dist/sources/rest-adapters.d.ts +48 -0
  147. package/dist/sources/rest-adapters.js +85 -0
  148. package/dist/sources/rest.d.ts +38 -0
  149. package/dist/sources/rest.js +86 -0
  150. package/dist/sources/schema-from-columns.d.ts +37 -0
  151. package/dist/sources/schema-from-columns.js +48 -0
  152. package/dist/sources/supabase.d.ts +33 -0
  153. package/dist/sources/supabase.js +74 -0
  154. package/dist/sources/with-entity-rules.d.ts +25 -0
  155. package/dist/sources/with-entity-rules.js +47 -0
  156. package/dist/sources/with-relation-labels.d.ts +26 -0
  157. package/dist/sources/with-relation-labels.js +38 -0
  158. package/dist/staged-editing.d.ts +85 -0
  159. package/dist/staged-editing.js +0 -0
  160. package/dist/studio/bug-report.d.ts +61 -0
  161. package/dist/studio/bug-report.js +126 -0
  162. package/dist/studio/cli.d.ts +56 -0
  163. package/dist/studio/cli.js +70 -0
  164. package/dist/studio/copilot-core.d.ts +22 -0
  165. package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
  166. package/dist/studio/csv.d.ts +36 -0
  167. package/dist/studio/csv.js +173 -0
  168. package/dist/studio/db-connect-string.d.ts +45 -0
  169. package/dist/studio/db-connect-string.js +113 -0
  170. package/dist/studio/deploy-cli.d.ts +35 -0
  171. package/dist/studio/deploy-cli.js +81 -0
  172. package/dist/studio/emit-project.d.ts +77 -0
  173. package/dist/studio/emit-project.js +5463 -0
  174. package/dist/studio/emit-schema.d.ts +110 -0
  175. package/dist/studio/emit-schema.js +1128 -0
  176. package/dist/studio/index.d.ts +35 -0
  177. package/dist/studio/index.js +41 -0
  178. package/dist/studio/init-flow.d.ts +58 -0
  179. package/dist/studio/init-flow.js +451 -0
  180. package/dist/studio/introspect-db.d.ts +47 -0
  181. package/dist/studio/introspect-db.js +255 -0
  182. package/dist/studio/introspect-openapi.d.ts +19 -0
  183. package/dist/studio/introspect-openapi.js +244 -0
  184. package/dist/studio/introspect-prisma.d.ts +25 -0
  185. package/dist/studio/introspect-prisma.js +164 -0
  186. package/dist/studio/introspect.d.ts +35 -0
  187. package/dist/studio/introspect.js +306 -0
  188. package/dist/studio/project.d.ts +1448 -0
  189. package/dist/studio/project.js +2187 -0
  190. package/dist/studio/sample-data.d.ts +19 -0
  191. package/dist/studio/sample-data.js +207 -0
  192. package/dist/studio/samples/ats.d.ts +2 -0
  193. package/dist/studio/samples/ats.js +194 -0
  194. package/dist/studio/samples/clinic.d.ts +2 -0
  195. package/dist/studio/samples/clinic.js +171 -0
  196. package/dist/studio/samples/crm.d.ts +2 -0
  197. package/dist/studio/samples/crm.js +280 -0
  198. package/dist/studio/samples/datasets.d.ts +38 -0
  199. package/dist/studio/samples/datasets.js +296 -0
  200. package/dist/studio/samples/ecommerce.d.ts +2 -0
  201. package/dist/studio/samples/ecommerce.js +178 -0
  202. package/dist/studio/samples/events.d.ts +2 -0
  203. package/dist/studio/samples/events.js +192 -0
  204. package/dist/studio/samples/fleet.d.ts +2 -0
  205. package/dist/studio/samples/fleet.js +203 -0
  206. package/dist/studio/samples/gym.d.ts +2 -0
  207. package/dist/studio/samples/gym.js +205 -0
  208. package/dist/studio/samples/hr.d.ts +2 -0
  209. package/dist/studio/samples/hr.js +186 -0
  210. package/dist/studio/samples/index.d.ts +13 -0
  211. package/dist/studio/samples/index.js +44 -0
  212. package/dist/studio/samples/insurance.d.ts +2 -0
  213. package/dist/studio/samples/insurance.js +220 -0
  214. package/dist/studio/samples/inventory.d.ts +2 -0
  215. package/dist/studio/samples/inventory.js +204 -0
  216. package/dist/studio/samples/invoicing.d.ts +2 -0
  217. package/dist/studio/samples/invoicing.js +154 -0
  218. package/dist/studio/samples/library.d.ts +2 -0
  219. package/dist/studio/samples/library.js +171 -0
  220. package/dist/studio/samples/live-data.d.ts +5 -0
  221. package/dist/studio/samples/live-data.js +261 -0
  222. package/dist/studio/samples/projects.d.ts +2 -0
  223. package/dist/studio/samples/projects.js +203 -0
  224. package/dist/studio/samples/realestate.d.ts +2 -0
  225. package/dist/studio/samples/realestate.js +187 -0
  226. package/dist/studio/samples/restaurant.d.ts +2 -0
  227. package/dist/studio/samples/restaurant.js +180 -0
  228. package/dist/studio/samples/school.d.ts +2 -0
  229. package/dist/studio/samples/school.js +188 -0
  230. package/dist/studio/samples/shared.d.ts +142 -0
  231. package/dist/studio/samples/shared.js +164 -0
  232. package/dist/studio/samples/starter.d.ts +4 -0
  233. package/dist/studio/samples/starter.js +237 -0
  234. package/dist/studio/samples/subscriptions.d.ts +2 -0
  235. package/dist/studio/samples/subscriptions.js +175 -0
  236. package/dist/studio/samples/support.d.ts +2 -0
  237. package/dist/studio/samples/support.js +209 -0
  238. package/dist/studio/scaffold-app.d.ts +22 -0
  239. package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
  240. package/dist/studio/scaffold.d.ts +63 -0
  241. package/dist/studio/scaffold.js +346 -0
  242. package/dist/studio/screen-suites.d.ts +193 -0
  243. package/dist/studio/screen-suites.js +297 -0
  244. package/dist/studio/themes.d.ts +34 -0
  245. package/dist/studio/themes.js +41 -0
  246. package/dist/studio/ui-components.d.ts +89 -0
  247. package/dist/studio/ui-components.generated.d.ts +29 -0
  248. package/dist/studio/ui-components.generated.js +7319 -0
  249. package/dist/studio/ui-components.js +673 -0
  250. package/dist/studio/user-error.d.ts +23 -0
  251. package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
  252. package/dist/studio/verify.d.ts +34 -0
  253. package/dist/studio/verify.js +47 -0
  254. package/dist/sveltekit/in-memory.d.ts +14 -0
  255. package/dist/sveltekit/in-memory.js +113 -0
  256. package/dist/sveltekit/index.d.ts +6 -0
  257. package/dist/sveltekit/index.js +5 -0
  258. package/dist/sveltekit/query-plan.d.ts +44 -0
  259. package/dist/sveltekit/query-plan.js +76 -0
  260. package/dist/sveltekit/sql-source.d.ts +47 -0
  261. package/dist/sveltekit/sql-source.js +106 -0
  262. package/dist/sveltekit/sql.d.ts +48 -0
  263. package/dist/sveltekit/sql.js +73 -0
  264. package/dist/sveltekit/transport.d.ts +209 -0
  265. package/dist/sveltekit/transport.js +219 -0
  266. package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
  267. package/dist/sveltekit/types.js +1 -0
  268. package/dist/upgrade-prompt.d.ts +16 -0
  269. package/dist/upgrade-prompt.js +141 -0
  270. package/dist/version.d.ts +13 -0
  271. package/{src/version.ts → dist/version.js} +1 -1
  272. package/dist/watermark.d.ts +2 -0
  273. package/dist/watermark.js +146 -0
  274. package/package.json +28 -26
  275. package/dist/designer/assets/index-oYok52zd.css +0 -1
  276. package/dist/designer/assets/src-D-O2F805.css +0 -1
  277. package/src/SvBoard.dom.test.ts +0 -67
  278. package/src/SvGridAlerts.dom.test.ts +0 -113
  279. package/src/SvGridEditPanel.dom.test.ts +0 -320
  280. package/src/SvRecordDetail.dom.test.ts +0 -137
  281. package/src/SvSchedule.dom.test.ts +0 -57
  282. package/src/ai-export-pdf.dom.test.ts +0 -77
  283. package/src/ai-export-xlsx.dom.test.ts +0 -90
  284. package/src/ai-export.dom.test.ts +0 -114
  285. package/src/alerts/alert-engine-attach.ts +0 -165
  286. package/src/alerts/alert-engine.test.ts +0 -135
  287. package/src/alerts/alert-engine.ts +0 -260
  288. package/src/alerts/alert-formats.test.ts +0 -87
  289. package/src/alerts/alert-formats.ts +0 -77
  290. package/src/alerts/alert-observer.test.ts +0 -189
  291. package/src/alerts/alert-observer.ts +0 -208
  292. package/src/alerts/alert-scheduler.ts +0 -96
  293. package/src/alerts/alert-storage.test.ts +0 -54
  294. package/src/alerts/alert-storage.ts +0 -116
  295. package/src/alerts/alert-store.svelte.ts +0 -80
  296. package/src/alerts/alert-types.ts +0 -94
  297. package/src/board.dom.test.ts +0 -941
  298. package/src/edit-panel.test.ts +0 -322
  299. package/src/edit-panel.ts +0 -379
  300. package/src/export-conditional.test.ts +0 -60
  301. package/src/export-conditional.ts +0 -94
  302. package/src/export-ooxml.test.ts +0 -152
  303. package/src/export-ooxml.ts +0 -489
  304. package/src/export-pdf.test.ts +0 -138
  305. package/src/export-pdf.ts +0 -245
  306. package/src/export-print.test.ts +0 -66
  307. package/src/export-print.ts +0 -132
  308. package/src/export-serialize.test.ts +0 -56
  309. package/src/export-xls.ts +0 -199
  310. package/src/export-xlsx-roundtrip.test.ts +0 -120
  311. package/src/export-xlsx.test.ts +0 -150
  312. package/src/export.test.ts +0 -349
  313. package/src/export.ts +0 -1464
  314. package/src/expressions/evaluate.test.ts +0 -111
  315. package/src/expressions/evaluate.ts +0 -237
  316. package/src/expressions/expression-columns.ts +0 -133
  317. package/src/expressions/expression-types.ts +0 -84
  318. package/src/expressions/parse.test.ts +0 -106
  319. package/src/expressions/parse.ts +0 -610
  320. package/src/import-automap.test.ts +0 -131
  321. package/src/import-hardening.test.ts +0 -158
  322. package/src/import.test.ts +0 -415
  323. package/src/import.ts +0 -1044
  324. package/src/index.ts +0 -569
  325. package/src/install.ts +0 -154
  326. package/src/license-core.test.ts +0 -23
  327. package/src/license-core.ts +0 -107
  328. package/src/license-expiry.test.ts +0 -144
  329. package/src/license.ts +0 -157
  330. package/src/master-detail.test.ts +0 -61
  331. package/src/master-detail.ts +0 -42
  332. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
  333. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
  334. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
  335. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
  336. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
  337. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
  338. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
  339. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
  340. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
  341. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
  342. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
  343. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
  344. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
  345. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
  346. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
  347. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
  348. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
  349. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
  350. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
  351. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
  352. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
  353. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
  354. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
  355. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
  356. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
  357. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
  358. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
  359. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
  360. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
  361. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
  362. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
  363. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
  364. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
  365. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
  366. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
  367. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
  368. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
  369. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
  370. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
  371. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
  372. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
  373. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
  374. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
  375. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
  376. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
  377. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
  378. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
  379. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
  380. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
  381. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
  382. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
  383. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
  384. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
  385. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
  386. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
  387. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
  388. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
  389. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
  390. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
  391. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
  392. package/src/pivot-chart.test.ts +0 -86
  393. package/src/pivot-chart.ts +0 -112
  394. package/src/pivot-designer.ts +0 -101
  395. package/src/pivot.test.ts +0 -335
  396. package/src/pivot.ts +0 -578
  397. package/src/print.ts +0 -107
  398. package/src/scheduler-assignments.test.ts +0 -97
  399. package/src/scheduler-assignments.ts +0 -134
  400. package/src/scheduler-axis.test.ts +0 -108
  401. package/src/scheduler-axis.ts +0 -238
  402. package/src/scheduler-booking.test.ts +0 -57
  403. package/src/scheduler-config.ts +0 -179
  404. package/src/scheduler-dependencies.test.ts +0 -155
  405. package/src/scheduler-dependencies.ts +0 -223
  406. package/src/scheduler-freebusy.test.ts +0 -41
  407. package/src/scheduler-heatmap.test.ts +0 -39
  408. package/src/scheduler-resource-tree.test.ts +0 -84
  409. package/src/scheduler-resource-tree.ts +0 -107
  410. package/src/scheduler-slots.test.ts +0 -53
  411. package/src/scheduler-slots.ts +0 -94
  412. package/src/scheduler-summary.test.ts +0 -47
  413. package/src/scheduler-summary.ts +0 -81
  414. package/src/scheduling.test.ts +0 -194
  415. package/src/scheduling.ts +0 -293
  416. package/src/schema-designer.test.ts +0 -121
  417. package/src/schema-designer.ts +0 -142
  418. package/src/schema.test.ts +0 -268
  419. package/src/schema.ts +0 -562
  420. package/src/smart-shim.ts +0 -107
  421. package/src/sources/aggregate.test.ts +0 -79
  422. package/src/sources/aggregate.ts +0 -102
  423. package/src/sources/auth-supabase.test.ts +0 -80
  424. package/src/sources/auth-supabase.ts +0 -87
  425. package/src/sources/dashboard.kpi.test.ts +0 -50
  426. package/src/sources/dashboard.test.ts +0 -61
  427. package/src/sources/dashboard.ts +0 -136
  428. package/src/sources/field-inference.test.ts +0 -60
  429. package/src/sources/field-inference.ts +0 -63
  430. package/src/sources/filters.test.ts +0 -58
  431. package/src/sources/filters.ts +0 -70
  432. package/src/sources/index.ts +0 -67
  433. package/src/sources/introspect-supabase.test.ts +0 -112
  434. package/src/sources/introspect-supabase.ts +0 -139
  435. package/src/sources/realtime-supabase.test.ts +0 -93
  436. package/src/sources/realtime-supabase.ts +0 -99
  437. package/src/sources/relation-lookup.test.ts +0 -99
  438. package/src/sources/relation-lookup.ts +0 -128
  439. package/src/sources/rest-adapters.test.ts +0 -95
  440. package/src/sources/rest-adapters.ts +0 -120
  441. package/src/sources/rest.test.ts +0 -104
  442. package/src/sources/rest.ts +0 -129
  443. package/src/sources/schema-from-columns.test.ts +0 -106
  444. package/src/sources/schema-from-columns.ts +0 -88
  445. package/src/sources/supabase.test.ts +0 -110
  446. package/src/sources/supabase.ts +0 -99
  447. package/src/sources/with-entity-rules.test.ts +0 -104
  448. package/src/sources/with-entity-rules.ts +0 -78
  449. package/src/sources/with-relation-labels.test.ts +0 -75
  450. package/src/sources/with-relation-labels.ts +0 -73
  451. package/src/staged-editing.ts +0 -0
  452. package/src/studio/bug-report.test.ts +0 -101
  453. package/src/studio/bug-report.ts +0 -165
  454. package/src/studio/cli.test.ts +0 -187
  455. package/src/studio/cli.ts +0 -117
  456. package/src/studio/copilot-core.test.ts +0 -45
  457. package/src/studio/csv.test.ts +0 -90
  458. package/src/studio/csv.ts +0 -165
  459. package/src/studio/db-connect-string.test.ts +0 -94
  460. package/src/studio/db-connect-string.ts +0 -128
  461. package/src/studio/deploy-cli.test.ts +0 -56
  462. package/src/studio/deploy-cli.ts +0 -100
  463. package/src/studio/emit-project.test.ts +0 -3324
  464. package/src/studio/emit-project.ts +0 -5377
  465. package/src/studio/emit-schema.test.ts +0 -111
  466. package/src/studio/emit-schema.ts +0 -1181
  467. package/src/studio/index.ts +0 -380
  468. package/src/studio/init-flow.test.ts +0 -514
  469. package/src/studio/init-flow.ts +0 -556
  470. package/src/studio/introspect-db.test.ts +0 -186
  471. package/src/studio/introspect-db.ts +0 -312
  472. package/src/studio/introspect-openapi.test.ts +0 -84
  473. package/src/studio/introspect-openapi.ts +0 -252
  474. package/src/studio/introspect-prisma.test.ts +0 -99
  475. package/src/studio/introspect-prisma.ts +0 -175
  476. package/src/studio/introspect.test.ts +0 -172
  477. package/src/studio/introspect.ts +0 -310
  478. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
  479. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
  480. package/src/studio/pipeline.test.ts +0 -42
  481. package/src/studio/project-robust.test.ts +0 -157
  482. package/src/studio/project.test.ts +0 -929
  483. package/src/studio/project.ts +0 -2394
  484. package/src/studio/sample-data.test.ts +0 -58
  485. package/src/studio/sample-data.ts +0 -203
  486. package/src/studio/samples/ats.ts +0 -202
  487. package/src/studio/samples/clinic.ts +0 -179
  488. package/src/studio/samples/crm.ts +0 -291
  489. package/src/studio/samples/datasets.test.ts +0 -84
  490. package/src/studio/samples/datasets.ts +0 -340
  491. package/src/studio/samples/ecommerce.ts +0 -187
  492. package/src/studio/samples/events.ts +0 -201
  493. package/src/studio/samples/fleet.ts +0 -213
  494. package/src/studio/samples/gym.ts +0 -215
  495. package/src/studio/samples/hr.ts +0 -195
  496. package/src/studio/samples/index.ts +0 -55
  497. package/src/studio/samples/insurance.ts +0 -229
  498. package/src/studio/samples/inventory.ts +0 -213
  499. package/src/studio/samples/invoicing.ts +0 -162
  500. package/src/studio/samples/library.ts +0 -180
  501. package/src/studio/samples/live-data.test.ts +0 -99
  502. package/src/studio/samples/live-data.ts +0 -306
  503. package/src/studio/samples/projects.ts +0 -212
  504. package/src/studio/samples/realestate.ts +0 -196
  505. package/src/studio/samples/restaurant.ts +0 -189
  506. package/src/studio/samples/samples.test.ts +0 -304
  507. package/src/studio/samples/school.ts +0 -197
  508. package/src/studio/samples/seed-floor.test.ts +0 -25
  509. package/src/studio/samples/shared.ts +0 -237
  510. package/src/studio/samples/starter.ts +0 -251
  511. package/src/studio/samples/subscriptions.ts +0 -183
  512. package/src/studio/samples/support.ts +0 -216
  513. package/src/studio/scaffold-app.test.ts +0 -91
  514. package/src/studio/scaffold.test.ts +0 -192
  515. package/src/studio/scaffold.ts +0 -390
  516. package/src/studio/screen-suites.test.ts +0 -269
  517. package/src/studio/screen-suites.ts +0 -448
  518. package/src/studio/themes.ts +0 -62
  519. package/src/studio/ui-components-surface.test.ts +0 -185
  520. package/src/studio/ui-components.generated.ts +0 -7154
  521. package/src/studio/ui-components.ts +0 -742
  522. package/src/studio/verify.test.ts +0 -47
  523. package/src/studio/verify.ts +0 -79
  524. package/src/sveltekit/in-memory.test.ts +0 -104
  525. package/src/sveltekit/in-memory.ts +0 -129
  526. package/src/sveltekit/index.ts +0 -24
  527. package/src/sveltekit/query-plan.test.ts +0 -109
  528. package/src/sveltekit/query-plan.ts +0 -125
  529. package/src/sveltekit/sql-source.test.ts +0 -198
  530. package/src/sveltekit/sql-source.ts +0 -171
  531. package/src/sveltekit/sql.test.ts +0 -80
  532. package/src/sveltekit/sql.ts +0 -131
  533. package/src/sveltekit/transport-scope.test.ts +0 -125
  534. package/src/sveltekit/transport.test.ts +0 -201
  535. package/src/sveltekit/transport.ts +0 -373
  536. package/src/upgrade-prompt.test.ts +0 -71
  537. package/src/upgrade-prompt.ts +0 -162
  538. package/src/version.test.ts +0 -17
  539. package/src/watermark.test.ts +0 -97
  540. package/src/watermark.ts +0 -156
  541. /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
  542. /package/{src → dist}/SvAlertsManager.svelte +0 -0
  543. /package/{src → dist}/SvAlertsPanel.svelte +0 -0
  544. /package/{src → dist}/SvAuthGate.svelte +0 -0
  545. /package/{src → dist}/SvBoard.svelte +0 -0
  546. /package/{src → dist}/SvExportMenu.svelte +0 -0
  547. /package/{src → dist}/SvFileInput.svelte +0 -0
  548. /package/{src → dist}/SvGridAlerts.svelte +0 -0
  549. /package/{src → dist}/SvGridBoard.svelte +0 -0
  550. /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
  551. /package/{src → dist}/SvGridScheduler.svelte +0 -0
  552. /package/{src → dist}/SvImportDialog.svelte +0 -0
  553. /package/{src → dist}/SvLookupInput.svelte +0 -0
  554. /package/{src → dist}/SvPivotDesigner.svelte +0 -0
  555. /package/{src → dist}/SvRecordDetail.svelte +0 -0
  556. /package/{src → dist}/SvSchedule.svelte +0 -0
  557. /package/{src → dist}/SvSchemaChart.svelte +0 -0
  558. /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
  559. /package/{src → dist}/pdfmake-shims.d.ts +0 -0
  560. /package/{src → dist}/smart.export.d.ts +0 -0
  561. /package/{src → dist}/smart.export.js +0 -0
  562. /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
  563. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
  564. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
  565. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
  566. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
  567. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
  568. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
  569. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
  570. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
  571. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
  572. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
  573. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
  574. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
  575. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
  576. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
  577. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
  578. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
  579. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
  580. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
  581. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
  582. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
  583. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
  584. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
  585. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
  586. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
  587. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
  588. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
  589. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
  590. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
  591. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
  592. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
  593. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
  594. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
  595. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
  596. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
  597. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
  598. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
  599. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
  600. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
  601. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
  602. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
  603. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
  604. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
  605. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
  606. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
  607. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
  608. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
  609. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
  610. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
  611. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
  612. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
  613. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
  614. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
  615. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
  616. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
  617. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
  618. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
  619. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
  620. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
  621. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
  622. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
  623. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
  624. /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
- }