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