@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
@@ -1,208 +0,0 @@
1
- /**
2
- * alert-observer - the observation layer that turns data movement into engine
3
- * passes WITHOUT ever blocking the grid's render frame, and in O(changed) rather
4
- * than O(all rows).
5
- *
6
- * Two ways to feed it, both funnelling through the same coalescing scheduler so
7
- * at most one evaluation runs per frame, post-paint:
8
- *
9
- * - PUSH (`pushChanged`) - the consumer already knows which rows changed (a
10
- * streaming feed, a transaction, the flagship demo's own tick loop). We
11
- * evaluate ONLY those rows. Cost is O(rows that changed) at any dataset size.
12
- *
13
- * - SCAN (`scan`) - the zero-effort fallback for a plain `data = ...` where no
14
- * change signal exists. We index-diff the new array against the previous one
15
- * (Svelte 5 replaces changed rows immutably, so unchanged rows keep their
16
- * reference) and evaluate only the mismatches. Still O(all rows) to FIND the
17
- * changes, but deferred to after paint so it never lengthens the grid's frame.
18
- *
19
- * Cloning of previous row values is gated on `engine.needsPrev()`: for a rule set
20
- * that is purely `dataChange`/aggregate (the common case), we keep NO prev
21
- * snapshots at all - the biggest GC saver on large live feeds. Full-set passes
22
- * (aggregate scope, or a row-count change) run on the same deferred path.
23
- *
24
- * Pure TypeScript - no Svelte, no DOM. The `<SvGridAlerts>` overlay wires an
25
- * instance to a scheduler and an `onEvents` sink; `attachAlertEngine` wraps it
26
- * for non-Svelte hosts.
27
- */
28
- import type { AlertEngine } from './alert-engine'
29
- import type { AlertEvent, AlertRule } from './alert-types'
30
- import { createAlertScheduler, type AlertScheduler, type AlertSchedulerMode } from './alert-scheduler'
31
-
32
- export type AlertObserverOptions<TData> = {
33
- engine: AlertEngine<TData>
34
- getRowId: (row: TData) => string
35
- /** Fired events to route to side effects (toast/log/formats). Batched per run. */
36
- onEvents: (events: AlertEvent[]) => void
37
- /** Scheduling strategy (default `raf`), or a custom scheduler for tests. */
38
- schedule?: AlertSchedulerMode | AlertScheduler
39
- }
40
-
41
- export type AlertObserver<TData> = {
42
- /** Silent full seed - arms edges from the current set so pre-existing matches
43
- * do not fire. Call on mount and after a rule change (in push mode). */
44
- seed(rows: ReadonlyArray<TData>): void
45
- /** Queue changed rows for a deferred, O(changed) evaluation (push mode). */
46
- pushChanged(rows: ReadonlyArray<TData>): void
47
- /** Schedule a deferred index-diff scan of the latest full row set (watch mode). */
48
- scan(getRows: () => ReadonlyArray<TData>): void
49
- /** Swap the rule set; edge memory is reset and a fresh seed is required. */
50
- setRules(rules: AlertRule[]): void
51
- /** Run any pending evaluation immediately (e.g. before a snapshot/test). */
52
- flush(): void
53
- /** Stop: cancel pending work and release retained snapshots. */
54
- detach(): void
55
- }
56
-
57
- const clone = <TData>(r: TData): TData =>
58
- r && typeof r === 'object' ? ({ ...(r as Record<string, unknown>) } as TData) : r
59
-
60
- export function createAlertObserver<TData = Record<string, unknown>>(
61
- opts: AlertObserverOptions<TData>,
62
- ): AlertObserver<TData> {
63
- const { engine, getRowId, onEvents } = opts
64
- const scheduler: AlertScheduler =
65
- opts.schedule && typeof opts.schedule === 'object'
66
- ? opts.schedule
67
- : createAlertScheduler(opts.schedule ?? 'raf')
68
-
69
- // Carry-over between runs. Only populated when a rule actually needs it.
70
- let seeded = false
71
- let prevRows: ReadonlyArray<TData> = [] // last array seen by scan (reference diff)
72
- let prevSnapById = new Map<string, TData>() // cloned prev VALUES (only if needsPrev)
73
- let fullById: Map<string, TData> | null = null // full current set (only if needsFullSet)
74
-
75
- // Pending work, accumulated between scheduler runs.
76
- const pushQueue = new Map<string, TData>()
77
- let scanSource: (() => ReadonlyArray<TData>) | null = null
78
-
79
- function snapshotAll(rows: ReadonlyArray<TData>) {
80
- prevSnapById = new Map()
81
- for (const row of rows) prevSnapById.set(getRowId(row), clone(row))
82
- }
83
-
84
- function rebuildFullIndex(rows: ReadonlyArray<TData>) {
85
- fullById = new Map()
86
- for (const row of rows) fullById.set(getRowId(row), row)
87
- }
88
-
89
- function seedNow(rows: ReadonlyArray<TData>) {
90
- engine.reset()
91
- engine.evaluate(rows) // arm dataChange/aggregate edges; discard the events
92
- seeded = true
93
- prevRows = rows
94
- if (engine.needsPrev()) snapshotAll(rows)
95
- else prevSnapById = new Map()
96
- if (engine.needsFullSet()) rebuildFullIndex(rows)
97
- else fullById = null
98
- }
99
-
100
- function emit(events: AlertEvent[]) {
101
- if (events.length) onEvents(events)
102
- }
103
-
104
- /** PUSH run: evaluate exactly the queued rows (or the full set for aggregates). */
105
- function runPush() {
106
- const next = [...pushQueue.values()]
107
- pushQueue.clear()
108
- if (next.length === 0) return
109
- const needsPrev = engine.needsPrev()
110
-
111
- if (engine.needsFullSet()) {
112
- // Aggregates need every row; evaluate over the maintained full index.
113
- const rows = fullById ? [...fullById.values()] : next
114
- const prev = needsPrev ? [...prevSnapById.values()] : []
115
- const events = engine.evaluateTransition(prev, rows)
116
- if (needsPrev) snapshotAll(rows)
117
- emit(events)
118
- return
119
- }
120
-
121
- const prev = needsPrev ? next.map((r) => prevSnapById.get(getRowId(r)) ?? r) : []
122
- if (needsPrev) for (const r of next) prevSnapById.set(getRowId(r), clone(r))
123
- emit(engine.evaluateTransition(prev, next))
124
- }
125
-
126
- /** SCAN run: index-diff the latest full array and evaluate the mismatches. */
127
- function runScan(rows: ReadonlyArray<TData>) {
128
- if (!seeded) {
129
- seedNow(rows)
130
- return
131
- }
132
- const needsPrev = engine.needsPrev()
133
- const needsFull = engine.needsFullSet() || rows.length !== prevRows.length
134
-
135
- if (needsFull) {
136
- const prev = needsPrev ? [...prevSnapById.values()] : []
137
- const events = engine.evaluateTransition(prev, rows)
138
- prevRows = rows
139
- if (needsPrev) snapshotAll(rows)
140
- if (engine.needsFullSet()) rebuildFullIndex(rows)
141
- emit(events)
142
- return
143
- }
144
-
145
- // Fast path: index-aligned reference diff (unchanged rows keep their ref).
146
- const changedNext: TData[] = []
147
- const changedPrev: TData[] = []
148
- for (let i = 0; i < rows.length; i++) {
149
- if (rows[i] !== prevRows[i]) {
150
- const row = rows[i] as TData
151
- changedNext.push(row)
152
- if (needsPrev) changedPrev.push(prevSnapById.get(getRowId(row)) ?? row)
153
- }
154
- }
155
- prevRows = rows
156
- if (changedNext.length === 0) return
157
- if (needsPrev) for (const r of changedNext) prevSnapById.set(getRowId(r), clone(r))
158
- emit(engine.evaluateTransition(changedPrev, changedNext))
159
- }
160
-
161
- function run() {
162
- // A consumer drives one mode at a time; be defensive and honour whichever
163
- // has pending work (scan takes precedence as it carries the full set).
164
- if (scanSource) {
165
- const src = scanSource
166
- scanSource = null
167
- runScan(src())
168
- }
169
- if (pushQueue.size) runPush()
170
- }
171
-
172
- return {
173
- seed(rows) {
174
- // Seeding is a one-off; do it synchronously so edges are armed before the
175
- // first data event, then let subsequent evaluations defer.
176
- seedNow(rows)
177
- },
178
- pushChanged(rows) {
179
- if (fullById) for (const r of rows) fullById.set(getRowId(r), r)
180
- for (const r of rows) pushQueue.set(getRowId(r), r)
181
- if (!seeded) seeded = true // push implies the consumer is driving; edges arm lazily
182
- scheduler.schedule(run)
183
- },
184
- scan(getRows) {
185
- scanSource = getRows
186
- scheduler.schedule(run)
187
- },
188
- setRules(rules) {
189
- engine.setRules(rules)
190
- engine.reset()
191
- // Force a fresh silent seed before anything fires under the new rules.
192
- seeded = false
193
- prevSnapById = new Map()
194
- fullById = null
195
- pushQueue.clear()
196
- },
197
- flush() {
198
- scheduler.flush()
199
- },
200
- detach() {
201
- scheduler.cancel()
202
- prevSnapById = new Map()
203
- fullById = null
204
- pushQueue.clear()
205
- scanSource = null
206
- },
207
- }
208
- }
@@ -1,96 +0,0 @@
1
- /**
2
- * alert-scheduler - decouples WHEN alert evaluation runs from the reactive flush
3
- * that mutates the grid's data. The whole performance premise of the rewrite is
4
- * that alert work must never lengthen the frame that paints the grid: on a data
5
- * change we schedule one evaluation for AFTER paint (`requestAnimationFrame`) and
6
- * coalesce a burst of updates into a single run.
7
- *
8
- * Modes:
9
- * - `raf` (default) - run once on the next animation frame, post-paint.
10
- * - `idle` - run when the browser is idle (`requestIdleCallback`), best for
11
- * non-urgent watch scans; falls back to `raf` where unavailable.
12
- * - `sync` - run immediately (deterministic tests, or hosts with no rAF).
13
- *
14
- * The scheduler is intentionally tiny and dependency-free: it holds at most one
15
- * pending callback (the latest wins), so repeated `schedule()` calls within a
16
- * frame collapse to a single run. The observer accumulates the changed-row queue
17
- * itself, so "latest wins" loses no work.
18
- */
19
- export type AlertSchedulerMode = 'raf' | 'idle' | 'sync'
20
-
21
- export type AlertScheduler = {
22
- /** Queue `fn` to run once on the next tick (coalesced). */
23
- schedule(fn: () => void): void
24
- /** Run any pending callback now, synchronously. No-op if nothing is pending. */
25
- flush(): void
26
- /** Drop any pending callback without running it. */
27
- cancel(): void
28
- /** Whether a callback is currently queued. */
29
- readonly pending: boolean
30
- }
31
-
32
- type RafHost = {
33
- requestAnimationFrame?: (cb: () => void) => number
34
- cancelAnimationFrame?: (handle: number) => void
35
- requestIdleCallback?: (cb: () => void) => number
36
- cancelIdleCallback?: (handle: number) => void
37
- }
38
-
39
- const host: RafHost = typeof globalThis !== 'undefined' ? (globalThis as RafHost) : {}
40
-
41
- function raf(cb: () => void): () => void {
42
- if (typeof host.requestAnimationFrame === 'function') {
43
- const id = host.requestAnimationFrame(cb)
44
- return () => host.cancelAnimationFrame?.(id)
45
- }
46
- const id = setTimeout(cb, 16)
47
- return () => clearTimeout(id)
48
- }
49
-
50
- function idle(cb: () => void): () => void {
51
- if (typeof host.requestIdleCallback === 'function') {
52
- const id = host.requestIdleCallback(cb)
53
- return () => host.cancelIdleCallback?.(id)
54
- }
55
- return raf(cb)
56
- }
57
-
58
- export function createAlertScheduler(mode: AlertSchedulerMode = 'raf'): AlertScheduler {
59
- let pendingFn: (() => void) | null = null
60
- let cancelHandle: (() => void) | null = null
61
-
62
- const request = mode === 'idle' ? idle : raf
63
-
64
- const run = () => {
65
- cancelHandle = null
66
- const fn = pendingFn
67
- pendingFn = null
68
- fn?.()
69
- }
70
-
71
- return {
72
- schedule(fn) {
73
- if (mode === 'sync') {
74
- fn()
75
- return
76
- }
77
- // Latest wins - the observer keeps the accumulated queue, so replacing the
78
- // callback never drops queued rows; it just avoids double-running a frame.
79
- pendingFn = fn
80
- if (!cancelHandle) cancelHandle = request(run)
81
- },
82
- flush() {
83
- if (!pendingFn) return
84
- cancelHandle?.()
85
- run()
86
- },
87
- cancel() {
88
- cancelHandle?.()
89
- cancelHandle = null
90
- pendingFn = null
91
- },
92
- get pending() {
93
- return pendingFn != null
94
- },
95
- }
96
- }
@@ -1,54 +0,0 @@
1
- import { describe, expect, it } from 'vitest'
2
- import { createAlertRules, memoryAlertRules } from './alert-storage'
3
- import type { AlertRule } from './alert-types'
4
-
5
- const rule = (id: string, over: Partial<AlertRule> = {}): AlertRule => ({
6
- id,
7
- name: `Rule ${id}`,
8
- enabled: true,
9
- severity: 'info',
10
- scope: 'row',
11
- predicate: { kind: 'const', value: true },
12
- trigger: { type: 'dataChange' },
13
- actions: [{ kind: 'toast' }],
14
- createdAt: 0,
15
- ...over,
16
- })
17
-
18
- describe('createAlertRules CRUD', () => {
19
- it('saves, replaces, gets, removes and toggles', () => {
20
- const mgr = createAlertRules(memoryAlertRules())
21
- mgr.save(rule('a'))
22
- mgr.save(rule('b'))
23
- expect(mgr.list().map((r) => r.id)).toEqual(['a', 'b'])
24
-
25
- // Save with an existing id replaces in place.
26
- mgr.save(rule('a', { name: 'Renamed' }))
27
- expect(mgr.get('a')?.name).toBe('Renamed')
28
- expect(mgr.list()).toHaveLength(2)
29
-
30
- expect(mgr.toggle('a')).toBe(false)
31
- expect(mgr.get('a')?.enabled).toBe(false)
32
-
33
- expect(mgr.rename('b', 'Bee')).toBe(true)
34
- expect(mgr.get('b')?.name).toBe('Bee')
35
-
36
- expect(mgr.remove('a')).toBe(true)
37
- expect(mgr.remove('missing')).toBe(false)
38
- expect(mgr.list().map((r) => r.id)).toEqual(['b'])
39
- })
40
- })
41
-
42
- describe('export / import share', () => {
43
- it('round-trips a rule set through JSON', () => {
44
- const src = createAlertRules(memoryAlertRules())
45
- src.save(rule('a'))
46
- src.save(rule('b', { severity: 'error' }))
47
- const json = src.export()
48
-
49
- const dest = createAlertRules(memoryAlertRules())
50
- const imported = dest.import(json)
51
- expect(imported).toHaveLength(2)
52
- expect(dest.get('b')?.severity).toBe('error')
53
- })
54
- })
@@ -1,116 +0,0 @@
1
- /**
2
- * Alert-rule persistence + sharing. Mirrors the grid's `named-views` storage
3
- * shape: a pluggable `AlertRulesStorage` (in-memory or localStorage), wrapped by
4
- * a small CRUD manager. `export()` / `import()` make a rule set shareable as
5
- * JSON, so a team lead can hand round a set of alerts.
6
- */
7
- import type { AlertRule } from './alert-types'
8
-
9
- export type AlertRulesStorage = {
10
- read(): AlertRule[]
11
- write(rules: AlertRule[]): void
12
- }
13
-
14
- /** In-memory storage (default). State lives only as long as the manager. */
15
- export function memoryAlertRules(initial: AlertRule[] = []): AlertRulesStorage {
16
- let rules = [...initial]
17
- return {
18
- read: () => rules,
19
- write: (next) => {
20
- rules = next
21
- },
22
- }
23
- }
24
-
25
- /** localStorage-backed storage. Safe to construct under SSR (no-ops there). */
26
- export function localStorageAlertRules(key: string): AlertRulesStorage {
27
- const available = typeof localStorage !== 'undefined'
28
- return {
29
- read() {
30
- if (!available) return []
31
- try {
32
- const raw = localStorage.getItem(key)
33
- const parsed = raw ? JSON.parse(raw) : []
34
- return Array.isArray(parsed) ? (parsed as AlertRule[]) : []
35
- } catch {
36
- return []
37
- }
38
- },
39
- write(rules) {
40
- if (!available) return
41
- try {
42
- localStorage.setItem(key, JSON.stringify(rules))
43
- } catch {
44
- // quota / private-mode - persistence is best-effort
45
- }
46
- },
47
- }
48
- }
49
-
50
- export type AlertRulesManager = {
51
- list(): AlertRule[]
52
- get(id: string): AlertRule | undefined
53
- /** Insert or replace a rule (matched by id). Returns the saved rule. */
54
- save(rule: AlertRule): AlertRule
55
- remove(id: string): boolean
56
- rename(id: string, name: string): boolean
57
- /** Flip a rule's `enabled` flag. Returns the new value (or undefined). */
58
- toggle(id: string): boolean | undefined
59
- /** Serialise the whole rule set to shareable JSON. */
60
- export(): string
61
- /** Replace the rule set from JSON produced by `export()`. */
62
- import(json: string): AlertRule[]
63
- }
64
-
65
- /** CRUD manager over a storage adapter (defaults to in-memory). */
66
- export function createAlertRules(
67
- storage: AlertRulesStorage = memoryAlertRules(),
68
- ): AlertRulesManager {
69
- const load = () => storage.read()
70
- const commit = (rules: AlertRule[]) => storage.write(rules)
71
-
72
- return {
73
- list: () => load(),
74
- get: (id) => load().find((r) => r.id === id),
75
- save(rule) {
76
- const rules = load()
77
- const i = rules.findIndex((r) => r.id === rule.id)
78
- if (i >= 0) rules[i] = rule
79
- else rules.push(rule)
80
- commit(rules)
81
- return rule
82
- },
83
- remove(id) {
84
- const rules = load()
85
- const next = rules.filter((r) => r.id !== id)
86
- if (next.length === rules.length) return false
87
- commit(next)
88
- return true
89
- },
90
- rename(id, name) {
91
- const rules = load()
92
- const rule = rules.find((r) => r.id === id)
93
- if (!rule) return false
94
- rule.name = name
95
- commit(rules)
96
- return true
97
- },
98
- toggle(id) {
99
- const rules = load()
100
- const rule = rules.find((r) => r.id === id)
101
- if (!rule) return undefined
102
- rule.enabled = !rule.enabled
103
- commit(rules)
104
- return rule.enabled
105
- },
106
- export() {
107
- return JSON.stringify(load(), null, 2)
108
- },
109
- import(json) {
110
- const parsed = JSON.parse(json)
111
- const rules = Array.isArray(parsed) ? (parsed as AlertRule[]) : []
112
- commit(rules)
113
- return rules
114
- },
115
- }
116
- }
@@ -1,80 +0,0 @@
1
- /**
2
- * alert-store - the reactive log behind the alerts badge + panel. A singleton
3
- * queue of fired `AlertEvent`s (newest first) with an unacknowledged count,
4
- * mirroring the grid's `toast-store` shape. The observer pushes events here; the
5
- * badge reads `activeCount`; the panel lists, acknowledges, and clears them.
6
- *
7
- * Perf: a burst of events from one evaluation is written in ONE array update via
8
- * `pushMany` (not one reassignment per event), and `activeCount` is a maintained
9
- * counter - not an O(n) reduce recomputed on every render.
10
- */
11
- import type { AlertEvent } from './alert-types'
12
-
13
- const MAX = 500
14
-
15
- function createAlertStore() {
16
- let events = $state<AlertEvent[]>([])
17
- let active = $state(0)
18
- let seq = 0
19
-
20
- /** Recompute the unacknowledged counter after a trim/clear/ack. */
21
- function recount(list: ReadonlyArray<AlertEvent>): number {
22
- let n = 0
23
- for (const e of list) if (!e.acknowledged) n++
24
- return n
25
- }
26
-
27
- return {
28
- get events() {
29
- return events
30
- },
31
- /** Number of unacknowledged events (what the badge shows). */
32
- get activeCount() {
33
- return active
34
- },
35
- /** Append one event (kept for API compatibility; prefer `pushMany`). */
36
- push(event: AlertEvent) {
37
- this.pushMany([event])
38
- },
39
- /** Append a batch of events in a single reactive update (newest first). */
40
- pushMany(batch: ReadonlyArray<AlertEvent>) {
41
- if (batch.length === 0) return
42
- const tagged: AlertEvent[] = []
43
- let added = 0
44
- // Newest first: reverse so the last event in the batch ends up on top.
45
- for (let i = batch.length - 1; i >= 0; i--) {
46
- tagged.push({ ...batch[i]!, _id: ++seq } as AlertEvent & { _id: number })
47
- if (!batch[i]!.acknowledged) added++
48
- }
49
- let next = [...tagged, ...events]
50
- if (next.length > MAX) {
51
- next = next.slice(0, MAX)
52
- // A trim can drop unacknowledged events - recount to stay exact.
53
- active = recount(next)
54
- } else {
55
- active += added
56
- }
57
- events = next
58
- },
59
- acknowledge(index: number) {
60
- const next = events.slice()
61
- const cur = next[index]
62
- if (cur && !cur.acknowledged) {
63
- next[index] = { ...cur, acknowledged: true }
64
- active = Math.max(0, active - 1)
65
- events = next
66
- }
67
- },
68
- acknowledgeAll() {
69
- events = events.map((e) => (e.acknowledged ? e : { ...e, acknowledged: true }))
70
- active = 0
71
- },
72
- clear() {
73
- events = []
74
- active = 0
75
- },
76
- }
77
- }
78
-
79
- /** The shared alerts log. Read `.events` / `.activeCount` inside a component. */
80
- export const alertStore = createAlertStore()
@@ -1,94 +0,0 @@
1
- /**
2
- * Alert Rules engine - the model layer.
3
- *
4
- * An alert rule is a declarative "when this predicate holds (or this value
5
- * moves), do these things": raise a toast, paint a badge/highlight, flash the
6
- * cell, veto the edit, or log it. Rules are authored by end users at runtime,
7
- * persisted, and shareable - the AdapTable-style alerting surface, built on the
8
- * grid's own filter/conditional-format engines.
9
- *
10
- * Predicates and change tests come from the expression layer (`../expressions`).
11
- */
12
- import type { ChangeExpr, PredicateExpr } from '../expressions/expression-types'
13
- import type { Schedule } from '../scheduling'
14
-
15
- /** Maps onto the toast variants + conditional-format intent. */
16
- export type AlertSeverity = 'info' | 'success' | 'warning' | 'error'
17
-
18
- /** What the rule watches over. */
19
- export type AlertScope = 'row' | 'cell' | 'aggregate'
20
-
21
- /**
22
- * When a rule fires:
23
- * - `dataChange` - a row newly satisfies `predicate` after an edit/update.
24
- * - `relativeChange` - a value moved (delta / percent / crossed a threshold).
25
- * - `validation` - evaluated on edit; may veto the change (`preventEdit`).
26
- * - `scheduled` - re-checked on a cron/one-off schedule (reuses the enterprise
27
- * scheduler); surfaces rows currently matching `predicate`.
28
- */
29
- export type AlertTrigger =
30
- | { type: 'dataChange' }
31
- | { type: 'relativeChange'; expr: ChangeExpr }
32
- | { type: 'validation' }
33
- | { type: 'scheduled'; schedule: Schedule }
34
-
35
- /** A thing the rule does when it fires. */
36
- export type AlertActionKind =
37
- | 'toast'
38
- | 'badge'
39
- | 'cellFlash'
40
- | 'highlight'
41
- | 'preventEdit'
42
- | 'log'
43
-
44
- /** Visual styling for `badge` / `highlight` actions. */
45
- export type AlertActionStyle = {
46
- background?: string
47
- color?: string
48
- /** A short glyph/emoji shown as a badge. */
49
- icon?: string
50
- }
51
-
52
- export type AlertAction = {
53
- kind: AlertActionKind
54
- /**
55
- * Message template. Tokens: `{rule}`, `{severity}`, `{column}`, `{value}`,
56
- * and `{field}` / `{row.field}` for any row field.
57
- */
58
- message?: string
59
- style?: AlertActionStyle
60
- /** Columns the badge/highlight/flash targets (defaults to the rule's). */
61
- columns?: string[]
62
- }
63
-
64
- export type AlertRule = {
65
- id: string
66
- name: string
67
- enabled: boolean
68
- severity: AlertSeverity
69
- scope: AlertScope
70
- predicate: PredicateExpr
71
- trigger: AlertTrigger
72
- actions: AlertAction[]
73
- /** Columns in scope for cell-level styling (badge/highlight/flash). */
74
- columns?: string[]
75
- createdAt: number
76
- }
77
-
78
- /** A single firing of a rule. */
79
- export type AlertEvent = {
80
- ruleId: string
81
- ruleName: string
82
- severity: AlertSeverity
83
- scope: AlertScope
84
- triggerType: AlertTrigger['type']
85
- /** The row that matched (absent for aggregate-scope events). */
86
- rowId?: string
87
- /** The column that triggered/targets the event, when applicable. */
88
- columnId?: string
89
- value?: unknown
90
- message: string
91
- actions: AlertAction[]
92
- firedAt: number
93
- acknowledged?: boolean
94
- }