@svgrid/enterprise 2.5.3 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/dist/SvAlertRuleEditor.svelte.d.ts +13 -0
  2. package/dist/SvAlertsManager.svelte.d.ts +14 -0
  3. package/dist/SvAlertsPanel.svelte.d.ts +9 -0
  4. package/dist/SvAuthGate.svelte.d.ts +22 -0
  5. package/dist/SvBoard.svelte.d.ts +35 -0
  6. package/dist/SvExportMenu.svelte.d.ts +61 -0
  7. package/{src → dist}/SvExpressionEditor.svelte +4 -1
  8. package/dist/SvExpressionEditor.svelte.d.ts +12 -0
  9. package/dist/SvFileInput.svelte.d.ts +20 -0
  10. package/dist/SvGridAlerts.svelte.d.ts +77 -0
  11. package/dist/SvGridBoard.svelte.d.ts +30 -0
  12. package/{src → dist}/SvGridEditPanel.svelte +173 -28
  13. package/dist/SvGridEditPanel.svelte.d.ts +75 -0
  14. package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
  15. package/dist/SvGridScheduler.svelte.d.ts +30 -0
  16. package/dist/SvImportDialog.svelte.d.ts +88 -0
  17. package/dist/SvLookupInput.svelte.d.ts +21 -0
  18. package/dist/SvPivotDesigner.svelte.d.ts +176 -0
  19. package/dist/SvRecordDetail.svelte.d.ts +58 -0
  20. package/dist/SvSchedule.svelte.d.ts +29 -0
  21. package/dist/SvSchemaChart.svelte.d.ts +61 -0
  22. package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
  23. package/dist/alerts/alert-engine-attach.d.ts +79 -0
  24. package/dist/alerts/alert-engine-attach.js +106 -0
  25. package/dist/alerts/alert-engine.d.ts +42 -0
  26. package/dist/alerts/alert-engine.js +196 -0
  27. package/dist/alerts/alert-formats.d.ts +26 -0
  28. package/dist/alerts/alert-formats.js +58 -0
  29. package/dist/alerts/alert-observer.d.ts +54 -0
  30. package/dist/alerts/alert-observer.js +156 -0
  31. package/dist/alerts/alert-scheduler.d.ts +30 -0
  32. package/dist/alerts/alert-scheduler.js +54 -0
  33. package/dist/alerts/alert-storage.d.ts +31 -0
  34. package/dist/alerts/alert-storage.js +92 -0
  35. package/dist/alerts/alert-store.svelte.d.ts +24 -0
  36. package/dist/alerts/alert-store.svelte.js +69 -0
  37. package/dist/alerts/alert-types.d.ts +86 -0
  38. package/dist/alerts/alert-types.js +1 -0
  39. package/dist/alerts.d.ts +2 -0
  40. package/{src/alerts.ts → dist/alerts.js} +9 -9
  41. package/dist/board.d.ts +7 -0
  42. package/{src/board.ts → dist/board.js} +13 -14
  43. package/dist/cdn/svgrid-enterprise.svelte-external.js +3220 -2607
  44. package/dist/designer/assets/index-BfzoL904.css +1 -0
  45. package/dist/designer/assets/{index-CBYU-KNn.js → index-CKdwDseq.js} +139 -139
  46. package/dist/designer/assets/src-DCKhP5Xy.css +1 -0
  47. package/dist/designer/assets/{src-i309BeJb.js → src-DLsSdh3J.js} +213 -193
  48. package/dist/designer/index.html +4 -4
  49. package/dist/edit-panel.d.ts +105 -0
  50. package/dist/edit-panel.js +350 -0
  51. package/dist/export-conditional.d.ts +31 -0
  52. package/dist/export-conditional.js +65 -0
  53. package/dist/export-ooxml.d.ts +93 -0
  54. package/dist/export-ooxml.js +385 -0
  55. package/dist/export-pdf.d.ts +107 -0
  56. package/dist/export-pdf.js +144 -0
  57. package/dist/export-print.d.ts +55 -0
  58. package/dist/export-print.js +91 -0
  59. package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
  60. package/dist/export-serialize.js +11 -0
  61. package/dist/export-xls.d.ts +26 -0
  62. package/dist/export-xls.js +157 -0
  63. package/dist/export.d.ts +323 -0
  64. package/dist/export.js +1021 -0
  65. package/dist/expressions/evaluate.d.ts +17 -0
  66. package/dist/expressions/evaluate.js +214 -0
  67. package/dist/expressions/expression-columns.d.ts +61 -0
  68. package/dist/expressions/expression-columns.js +72 -0
  69. package/dist/expressions/expression-types.d.ts +125 -0
  70. package/dist/expressions/expression-types.js +1 -0
  71. package/dist/expressions/parse.d.ts +25 -0
  72. package/dist/expressions/parse.js +537 -0
  73. package/dist/import.d.ts +232 -0
  74. package/dist/import.js +846 -0
  75. package/dist/index.d.ts +66 -0
  76. package/dist/index.js +91 -0
  77. package/dist/install.d.ts +70 -0
  78. package/dist/install.js +61 -0
  79. package/dist/license-core.d.ts +37 -0
  80. package/dist/license-core.js +81 -0
  81. package/dist/license.d.ts +30 -0
  82. package/dist/license.js +139 -0
  83. package/dist/master-detail.d.ts +23 -0
  84. package/dist/master-detail.js +35 -0
  85. package/dist/node/studio.js +683 -13
  86. package/dist/pivot-chart.d.ts +28 -0
  87. package/dist/pivot-chart.js +71 -0
  88. package/dist/pivot-designer.d.ts +69 -0
  89. package/dist/pivot-designer.js +38 -0
  90. package/dist/pivot-enable.d.ts +6 -0
  91. package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
  92. package/dist/pivot.d.ts +111 -0
  93. package/dist/pivot.js +353 -0
  94. package/dist/print.d.ts +33 -0
  95. package/dist/print.js +61 -0
  96. package/dist/revoked.d.ts +1 -0
  97. package/{src/revoked.ts → dist/revoked.js} +5 -6
  98. package/dist/scheduler-assignments.d.ts +64 -0
  99. package/dist/scheduler-assignments.js +92 -0
  100. package/dist/scheduler-axis.d.ts +81 -0
  101. package/dist/scheduler-axis.js +180 -0
  102. package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
  103. package/dist/scheduler-booking.js +50 -0
  104. package/dist/scheduler-config.d.ts +177 -0
  105. package/dist/scheduler-config.js +1 -0
  106. package/dist/scheduler-dependencies.d.ts +89 -0
  107. package/dist/scheduler-dependencies.js +179 -0
  108. package/dist/scheduler-freebusy.d.ts +19 -0
  109. package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
  110. package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
  111. package/dist/scheduler-heatmap.js +41 -0
  112. package/dist/scheduler-resource-tree.d.ts +48 -0
  113. package/dist/scheduler-resource-tree.js +78 -0
  114. package/dist/scheduler-slots.d.ts +37 -0
  115. package/dist/scheduler-slots.js +80 -0
  116. package/dist/scheduler-summary.d.ts +41 -0
  117. package/dist/scheduler-summary.js +54 -0
  118. package/dist/scheduler.d.ts +7 -0
  119. package/{src/scheduler.ts → dist/scheduler.js} +13 -14
  120. package/dist/scheduling.d.ts +132 -0
  121. package/dist/scheduling.js +228 -0
  122. package/dist/schema-designer.d.ts +42 -0
  123. package/dist/schema-designer.js +117 -0
  124. package/dist/schema.d.ts +408 -0
  125. package/dist/schema.js +225 -0
  126. package/dist/smart-shim.d.ts +62 -0
  127. package/dist/smart-shim.js +34 -0
  128. package/dist/sources/aggregate.d.ts +43 -0
  129. package/dist/sources/aggregate.js +60 -0
  130. package/dist/sources/auth-supabase.d.ts +69 -0
  131. package/dist/sources/auth-supabase.js +39 -0
  132. package/dist/sources/dashboard.d.ts +65 -0
  133. package/dist/sources/dashboard.js +95 -0
  134. package/dist/sources/field-inference.d.ts +23 -0
  135. package/dist/sources/field-inference.js +52 -0
  136. package/dist/sources/filters.d.ts +35 -0
  137. package/dist/sources/filters.js +52 -0
  138. package/dist/sources/index.d.ts +18 -0
  139. package/dist/sources/index.js +18 -0
  140. package/dist/sources/introspect-supabase.d.ts +30 -0
  141. package/dist/sources/introspect-supabase.js +134 -0
  142. package/dist/sources/realtime-supabase.d.ts +37 -0
  143. package/dist/sources/realtime-supabase.js +52 -0
  144. package/dist/sources/relation-lookup.d.ts +50 -0
  145. package/dist/sources/relation-lookup.js +77 -0
  146. package/dist/sources/rest-adapters.d.ts +48 -0
  147. package/dist/sources/rest-adapters.js +85 -0
  148. package/dist/sources/rest.d.ts +38 -0
  149. package/dist/sources/rest.js +86 -0
  150. package/dist/sources/schema-from-columns.d.ts +37 -0
  151. package/dist/sources/schema-from-columns.js +48 -0
  152. package/dist/sources/supabase.d.ts +33 -0
  153. package/dist/sources/supabase.js +74 -0
  154. package/dist/sources/with-entity-rules.d.ts +25 -0
  155. package/dist/sources/with-entity-rules.js +47 -0
  156. package/dist/sources/with-relation-labels.d.ts +26 -0
  157. package/dist/sources/with-relation-labels.js +38 -0
  158. package/dist/staged-editing.d.ts +85 -0
  159. package/dist/staged-editing.js +0 -0
  160. package/dist/studio/bug-report.d.ts +61 -0
  161. package/dist/studio/bug-report.js +126 -0
  162. package/dist/studio/cli.d.ts +56 -0
  163. package/dist/studio/cli.js +70 -0
  164. package/dist/studio/copilot-core.d.ts +22 -0
  165. package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
  166. package/dist/studio/csv.d.ts +36 -0
  167. package/dist/studio/csv.js +173 -0
  168. package/dist/studio/db-connect-string.d.ts +45 -0
  169. package/dist/studio/db-connect-string.js +113 -0
  170. package/dist/studio/deploy-cli.d.ts +35 -0
  171. package/dist/studio/deploy-cli.js +81 -0
  172. package/dist/studio/emit-project.d.ts +77 -0
  173. package/dist/studio/emit-project.js +5463 -0
  174. package/dist/studio/emit-schema.d.ts +110 -0
  175. package/dist/studio/emit-schema.js +1128 -0
  176. package/dist/studio/index.d.ts +35 -0
  177. package/dist/studio/index.js +41 -0
  178. package/dist/studio/init-flow.d.ts +58 -0
  179. package/dist/studio/init-flow.js +451 -0
  180. package/dist/studio/introspect-db.d.ts +47 -0
  181. package/dist/studio/introspect-db.js +255 -0
  182. package/dist/studio/introspect-openapi.d.ts +19 -0
  183. package/dist/studio/introspect-openapi.js +244 -0
  184. package/dist/studio/introspect-prisma.d.ts +25 -0
  185. package/dist/studio/introspect-prisma.js +164 -0
  186. package/dist/studio/introspect.d.ts +35 -0
  187. package/dist/studio/introspect.js +306 -0
  188. package/dist/studio/project.d.ts +1448 -0
  189. package/dist/studio/project.js +2187 -0
  190. package/dist/studio/sample-data.d.ts +19 -0
  191. package/dist/studio/sample-data.js +207 -0
  192. package/dist/studio/samples/ats.d.ts +2 -0
  193. package/dist/studio/samples/ats.js +194 -0
  194. package/dist/studio/samples/clinic.d.ts +2 -0
  195. package/dist/studio/samples/clinic.js +171 -0
  196. package/dist/studio/samples/crm.d.ts +2 -0
  197. package/dist/studio/samples/crm.js +280 -0
  198. package/dist/studio/samples/datasets.d.ts +38 -0
  199. package/dist/studio/samples/datasets.js +296 -0
  200. package/dist/studio/samples/ecommerce.d.ts +2 -0
  201. package/dist/studio/samples/ecommerce.js +178 -0
  202. package/dist/studio/samples/events.d.ts +2 -0
  203. package/dist/studio/samples/events.js +192 -0
  204. package/dist/studio/samples/fleet.d.ts +2 -0
  205. package/dist/studio/samples/fleet.js +203 -0
  206. package/dist/studio/samples/gym.d.ts +2 -0
  207. package/dist/studio/samples/gym.js +205 -0
  208. package/dist/studio/samples/hr.d.ts +2 -0
  209. package/dist/studio/samples/hr.js +186 -0
  210. package/dist/studio/samples/index.d.ts +13 -0
  211. package/dist/studio/samples/index.js +44 -0
  212. package/dist/studio/samples/insurance.d.ts +2 -0
  213. package/dist/studio/samples/insurance.js +220 -0
  214. package/dist/studio/samples/inventory.d.ts +2 -0
  215. package/dist/studio/samples/inventory.js +204 -0
  216. package/dist/studio/samples/invoicing.d.ts +2 -0
  217. package/dist/studio/samples/invoicing.js +154 -0
  218. package/dist/studio/samples/library.d.ts +2 -0
  219. package/dist/studio/samples/library.js +171 -0
  220. package/dist/studio/samples/live-data.d.ts +5 -0
  221. package/dist/studio/samples/live-data.js +261 -0
  222. package/dist/studio/samples/projects.d.ts +2 -0
  223. package/dist/studio/samples/projects.js +203 -0
  224. package/dist/studio/samples/realestate.d.ts +2 -0
  225. package/dist/studio/samples/realestate.js +187 -0
  226. package/dist/studio/samples/restaurant.d.ts +2 -0
  227. package/dist/studio/samples/restaurant.js +180 -0
  228. package/dist/studio/samples/school.d.ts +2 -0
  229. package/dist/studio/samples/school.js +188 -0
  230. package/dist/studio/samples/shared.d.ts +142 -0
  231. package/dist/studio/samples/shared.js +164 -0
  232. package/dist/studio/samples/starter.d.ts +4 -0
  233. package/dist/studio/samples/starter.js +237 -0
  234. package/dist/studio/samples/subscriptions.d.ts +2 -0
  235. package/dist/studio/samples/subscriptions.js +175 -0
  236. package/dist/studio/samples/support.d.ts +2 -0
  237. package/dist/studio/samples/support.js +209 -0
  238. package/dist/studio/scaffold-app.d.ts +22 -0
  239. package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
  240. package/dist/studio/scaffold.d.ts +63 -0
  241. package/dist/studio/scaffold.js +346 -0
  242. package/dist/studio/screen-suites.d.ts +193 -0
  243. package/dist/studio/screen-suites.js +297 -0
  244. package/dist/studio/themes.d.ts +34 -0
  245. package/dist/studio/themes.js +41 -0
  246. package/dist/studio/ui-components.d.ts +89 -0
  247. package/dist/studio/ui-components.generated.d.ts +29 -0
  248. package/dist/studio/ui-components.generated.js +7319 -0
  249. package/dist/studio/ui-components.js +673 -0
  250. package/dist/studio/user-error.d.ts +23 -0
  251. package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
  252. package/dist/studio/verify.d.ts +34 -0
  253. package/dist/studio/verify.js +47 -0
  254. package/dist/sveltekit/in-memory.d.ts +14 -0
  255. package/dist/sveltekit/in-memory.js +113 -0
  256. package/dist/sveltekit/index.d.ts +6 -0
  257. package/dist/sveltekit/index.js +5 -0
  258. package/dist/sveltekit/query-plan.d.ts +44 -0
  259. package/dist/sveltekit/query-plan.js +76 -0
  260. package/dist/sveltekit/sql-source.d.ts +47 -0
  261. package/dist/sveltekit/sql-source.js +106 -0
  262. package/dist/sveltekit/sql.d.ts +48 -0
  263. package/dist/sveltekit/sql.js +73 -0
  264. package/dist/sveltekit/transport.d.ts +209 -0
  265. package/dist/sveltekit/transport.js +219 -0
  266. package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
  267. package/dist/sveltekit/types.js +1 -0
  268. package/dist/upgrade-prompt.d.ts +16 -0
  269. package/dist/upgrade-prompt.js +141 -0
  270. package/dist/version.d.ts +13 -0
  271. package/{src/version.ts → dist/version.js} +1 -1
  272. package/dist/watermark.d.ts +2 -0
  273. package/dist/watermark.js +146 -0
  274. package/package.json +28 -26
  275. package/dist/designer/assets/index-oYok52zd.css +0 -1
  276. package/dist/designer/assets/src-D-O2F805.css +0 -1
  277. package/src/SvBoard.dom.test.ts +0 -67
  278. package/src/SvGridAlerts.dom.test.ts +0 -113
  279. package/src/SvGridEditPanel.dom.test.ts +0 -320
  280. package/src/SvRecordDetail.dom.test.ts +0 -137
  281. package/src/SvSchedule.dom.test.ts +0 -57
  282. package/src/ai-export-pdf.dom.test.ts +0 -77
  283. package/src/ai-export-xlsx.dom.test.ts +0 -90
  284. package/src/ai-export.dom.test.ts +0 -114
  285. package/src/alerts/alert-engine-attach.ts +0 -165
  286. package/src/alerts/alert-engine.test.ts +0 -135
  287. package/src/alerts/alert-engine.ts +0 -260
  288. package/src/alerts/alert-formats.test.ts +0 -87
  289. package/src/alerts/alert-formats.ts +0 -77
  290. package/src/alerts/alert-observer.test.ts +0 -189
  291. package/src/alerts/alert-observer.ts +0 -208
  292. package/src/alerts/alert-scheduler.ts +0 -96
  293. package/src/alerts/alert-storage.test.ts +0 -54
  294. package/src/alerts/alert-storage.ts +0 -116
  295. package/src/alerts/alert-store.svelte.ts +0 -80
  296. package/src/alerts/alert-types.ts +0 -94
  297. package/src/board.dom.test.ts +0 -941
  298. package/src/edit-panel.test.ts +0 -322
  299. package/src/edit-panel.ts +0 -379
  300. package/src/export-conditional.test.ts +0 -60
  301. package/src/export-conditional.ts +0 -94
  302. package/src/export-ooxml.test.ts +0 -152
  303. package/src/export-ooxml.ts +0 -489
  304. package/src/export-pdf.test.ts +0 -138
  305. package/src/export-pdf.ts +0 -245
  306. package/src/export-print.test.ts +0 -66
  307. package/src/export-print.ts +0 -132
  308. package/src/export-serialize.test.ts +0 -56
  309. package/src/export-xls.ts +0 -199
  310. package/src/export-xlsx-roundtrip.test.ts +0 -120
  311. package/src/export-xlsx.test.ts +0 -150
  312. package/src/export.test.ts +0 -349
  313. package/src/export.ts +0 -1464
  314. package/src/expressions/evaluate.test.ts +0 -111
  315. package/src/expressions/evaluate.ts +0 -237
  316. package/src/expressions/expression-columns.ts +0 -133
  317. package/src/expressions/expression-types.ts +0 -84
  318. package/src/expressions/parse.test.ts +0 -106
  319. package/src/expressions/parse.ts +0 -610
  320. package/src/import-automap.test.ts +0 -131
  321. package/src/import-hardening.test.ts +0 -158
  322. package/src/import.test.ts +0 -415
  323. package/src/import.ts +0 -1044
  324. package/src/index.ts +0 -569
  325. package/src/install.ts +0 -154
  326. package/src/license-core.test.ts +0 -23
  327. package/src/license-core.ts +0 -107
  328. package/src/license-expiry.test.ts +0 -144
  329. package/src/license.ts +0 -157
  330. package/src/master-detail.test.ts +0 -61
  331. package/src/master-detail.ts +0 -42
  332. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
  333. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
  334. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
  335. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
  336. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
  337. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
  338. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
  339. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
  340. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
  341. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
  342. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
  343. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
  344. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
  345. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
  346. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
  347. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
  348. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
  349. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
  350. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
  351. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
  352. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
  353. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
  354. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
  355. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
  356. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
  357. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
  358. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
  359. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
  360. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
  361. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
  362. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
  363. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
  364. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
  365. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
  366. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
  367. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
  368. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
  369. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
  370. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
  371. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
  372. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
  373. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
  374. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
  375. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
  376. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
  377. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
  378. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
  379. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
  380. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
  381. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
  382. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
  383. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
  384. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
  385. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
  386. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
  387. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
  388. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
  389. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
  390. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
  391. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
  392. package/src/pivot-chart.test.ts +0 -86
  393. package/src/pivot-chart.ts +0 -112
  394. package/src/pivot-designer.ts +0 -101
  395. package/src/pivot.test.ts +0 -335
  396. package/src/pivot.ts +0 -578
  397. package/src/print.ts +0 -107
  398. package/src/scheduler-assignments.test.ts +0 -97
  399. package/src/scheduler-assignments.ts +0 -134
  400. package/src/scheduler-axis.test.ts +0 -108
  401. package/src/scheduler-axis.ts +0 -238
  402. package/src/scheduler-booking.test.ts +0 -57
  403. package/src/scheduler-config.ts +0 -179
  404. package/src/scheduler-dependencies.test.ts +0 -155
  405. package/src/scheduler-dependencies.ts +0 -223
  406. package/src/scheduler-freebusy.test.ts +0 -41
  407. package/src/scheduler-heatmap.test.ts +0 -39
  408. package/src/scheduler-resource-tree.test.ts +0 -84
  409. package/src/scheduler-resource-tree.ts +0 -107
  410. package/src/scheduler-slots.test.ts +0 -53
  411. package/src/scheduler-slots.ts +0 -94
  412. package/src/scheduler-summary.test.ts +0 -47
  413. package/src/scheduler-summary.ts +0 -81
  414. package/src/scheduling.test.ts +0 -194
  415. package/src/scheduling.ts +0 -293
  416. package/src/schema-designer.test.ts +0 -121
  417. package/src/schema-designer.ts +0 -142
  418. package/src/schema.test.ts +0 -268
  419. package/src/schema.ts +0 -562
  420. package/src/smart-shim.ts +0 -107
  421. package/src/sources/aggregate.test.ts +0 -79
  422. package/src/sources/aggregate.ts +0 -102
  423. package/src/sources/auth-supabase.test.ts +0 -80
  424. package/src/sources/auth-supabase.ts +0 -87
  425. package/src/sources/dashboard.kpi.test.ts +0 -50
  426. package/src/sources/dashboard.test.ts +0 -61
  427. package/src/sources/dashboard.ts +0 -136
  428. package/src/sources/field-inference.test.ts +0 -60
  429. package/src/sources/field-inference.ts +0 -63
  430. package/src/sources/filters.test.ts +0 -58
  431. package/src/sources/filters.ts +0 -70
  432. package/src/sources/index.ts +0 -67
  433. package/src/sources/introspect-supabase.test.ts +0 -112
  434. package/src/sources/introspect-supabase.ts +0 -139
  435. package/src/sources/realtime-supabase.test.ts +0 -93
  436. package/src/sources/realtime-supabase.ts +0 -99
  437. package/src/sources/relation-lookup.test.ts +0 -99
  438. package/src/sources/relation-lookup.ts +0 -128
  439. package/src/sources/rest-adapters.test.ts +0 -95
  440. package/src/sources/rest-adapters.ts +0 -120
  441. package/src/sources/rest.test.ts +0 -104
  442. package/src/sources/rest.ts +0 -129
  443. package/src/sources/schema-from-columns.test.ts +0 -106
  444. package/src/sources/schema-from-columns.ts +0 -88
  445. package/src/sources/supabase.test.ts +0 -110
  446. package/src/sources/supabase.ts +0 -99
  447. package/src/sources/with-entity-rules.test.ts +0 -104
  448. package/src/sources/with-entity-rules.ts +0 -78
  449. package/src/sources/with-relation-labels.test.ts +0 -75
  450. package/src/sources/with-relation-labels.ts +0 -73
  451. package/src/staged-editing.ts +0 -0
  452. package/src/studio/bug-report.test.ts +0 -101
  453. package/src/studio/bug-report.ts +0 -165
  454. package/src/studio/cli.test.ts +0 -187
  455. package/src/studio/cli.ts +0 -117
  456. package/src/studio/copilot-core.test.ts +0 -45
  457. package/src/studio/csv.test.ts +0 -90
  458. package/src/studio/csv.ts +0 -165
  459. package/src/studio/db-connect-string.test.ts +0 -94
  460. package/src/studio/db-connect-string.ts +0 -128
  461. package/src/studio/deploy-cli.test.ts +0 -56
  462. package/src/studio/deploy-cli.ts +0 -100
  463. package/src/studio/emit-project.test.ts +0 -3324
  464. package/src/studio/emit-project.ts +0 -5377
  465. package/src/studio/emit-schema.test.ts +0 -111
  466. package/src/studio/emit-schema.ts +0 -1181
  467. package/src/studio/index.ts +0 -380
  468. package/src/studio/init-flow.test.ts +0 -514
  469. package/src/studio/init-flow.ts +0 -556
  470. package/src/studio/introspect-db.test.ts +0 -186
  471. package/src/studio/introspect-db.ts +0 -312
  472. package/src/studio/introspect-openapi.test.ts +0 -84
  473. package/src/studio/introspect-openapi.ts +0 -252
  474. package/src/studio/introspect-prisma.test.ts +0 -99
  475. package/src/studio/introspect-prisma.ts +0 -175
  476. package/src/studio/introspect.test.ts +0 -172
  477. package/src/studio/introspect.ts +0 -310
  478. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
  479. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
  480. package/src/studio/pipeline.test.ts +0 -42
  481. package/src/studio/project-robust.test.ts +0 -157
  482. package/src/studio/project.test.ts +0 -929
  483. package/src/studio/project.ts +0 -2394
  484. package/src/studio/sample-data.test.ts +0 -58
  485. package/src/studio/sample-data.ts +0 -203
  486. package/src/studio/samples/ats.ts +0 -202
  487. package/src/studio/samples/clinic.ts +0 -179
  488. package/src/studio/samples/crm.ts +0 -291
  489. package/src/studio/samples/datasets.test.ts +0 -84
  490. package/src/studio/samples/datasets.ts +0 -340
  491. package/src/studio/samples/ecommerce.ts +0 -187
  492. package/src/studio/samples/events.ts +0 -201
  493. package/src/studio/samples/fleet.ts +0 -213
  494. package/src/studio/samples/gym.ts +0 -215
  495. package/src/studio/samples/hr.ts +0 -195
  496. package/src/studio/samples/index.ts +0 -55
  497. package/src/studio/samples/insurance.ts +0 -229
  498. package/src/studio/samples/inventory.ts +0 -213
  499. package/src/studio/samples/invoicing.ts +0 -162
  500. package/src/studio/samples/library.ts +0 -180
  501. package/src/studio/samples/live-data.test.ts +0 -99
  502. package/src/studio/samples/live-data.ts +0 -306
  503. package/src/studio/samples/projects.ts +0 -212
  504. package/src/studio/samples/realestate.ts +0 -196
  505. package/src/studio/samples/restaurant.ts +0 -189
  506. package/src/studio/samples/samples.test.ts +0 -304
  507. package/src/studio/samples/school.ts +0 -197
  508. package/src/studio/samples/seed-floor.test.ts +0 -25
  509. package/src/studio/samples/shared.ts +0 -237
  510. package/src/studio/samples/starter.ts +0 -251
  511. package/src/studio/samples/subscriptions.ts +0 -183
  512. package/src/studio/samples/support.ts +0 -216
  513. package/src/studio/scaffold-app.test.ts +0 -91
  514. package/src/studio/scaffold.test.ts +0 -192
  515. package/src/studio/scaffold.ts +0 -390
  516. package/src/studio/screen-suites.test.ts +0 -269
  517. package/src/studio/screen-suites.ts +0 -448
  518. package/src/studio/themes.ts +0 -62
  519. package/src/studio/ui-components-surface.test.ts +0 -185
  520. package/src/studio/ui-components.generated.ts +0 -7154
  521. package/src/studio/ui-components.ts +0 -742
  522. package/src/studio/verify.test.ts +0 -47
  523. package/src/studio/verify.ts +0 -79
  524. package/src/sveltekit/in-memory.test.ts +0 -104
  525. package/src/sveltekit/in-memory.ts +0 -129
  526. package/src/sveltekit/index.ts +0 -24
  527. package/src/sveltekit/query-plan.test.ts +0 -109
  528. package/src/sveltekit/query-plan.ts +0 -125
  529. package/src/sveltekit/sql-source.test.ts +0 -198
  530. package/src/sveltekit/sql-source.ts +0 -171
  531. package/src/sveltekit/sql.test.ts +0 -80
  532. package/src/sveltekit/sql.ts +0 -131
  533. package/src/sveltekit/transport-scope.test.ts +0 -125
  534. package/src/sveltekit/transport.test.ts +0 -201
  535. package/src/sveltekit/transport.ts +0 -373
  536. package/src/upgrade-prompt.test.ts +0 -71
  537. package/src/upgrade-prompt.ts +0 -162
  538. package/src/version.test.ts +0 -17
  539. package/src/watermark.test.ts +0 -97
  540. package/src/watermark.ts +0 -156
  541. /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
  542. /package/{src → dist}/SvAlertsManager.svelte +0 -0
  543. /package/{src → dist}/SvAlertsPanel.svelte +0 -0
  544. /package/{src → dist}/SvAuthGate.svelte +0 -0
  545. /package/{src → dist}/SvBoard.svelte +0 -0
  546. /package/{src → dist}/SvExportMenu.svelte +0 -0
  547. /package/{src → dist}/SvFileInput.svelte +0 -0
  548. /package/{src → dist}/SvGridAlerts.svelte +0 -0
  549. /package/{src → dist}/SvGridBoard.svelte +0 -0
  550. /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
  551. /package/{src → dist}/SvGridScheduler.svelte +0 -0
  552. /package/{src → dist}/SvImportDialog.svelte +0 -0
  553. /package/{src → dist}/SvLookupInput.svelte +0 -0
  554. /package/{src → dist}/SvPivotDesigner.svelte +0 -0
  555. /package/{src → dist}/SvRecordDetail.svelte +0 -0
  556. /package/{src → dist}/SvSchedule.svelte +0 -0
  557. /package/{src → dist}/SvSchemaChart.svelte +0 -0
  558. /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
  559. /package/{src → dist}/pdfmake-shims.d.ts +0 -0
  560. /package/{src → dist}/smart.export.d.ts +0 -0
  561. /package/{src → dist}/smart.export.js +0 -0
  562. /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
  563. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
  564. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
  565. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
  566. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
  567. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
  568. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
  569. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
  570. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
  571. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
  572. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
  573. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
  574. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
  575. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
  576. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
  577. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
  578. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
  579. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
  580. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
  581. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
  582. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
  583. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
  584. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
  585. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
  586. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
  587. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
  588. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
  589. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
  590. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
  591. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
  592. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
  593. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
  594. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
  595. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
  596. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
  597. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
  598. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
  599. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
  600. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
  601. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
  602. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
  603. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
  604. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
  605. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
  606. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
  607. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
  608. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
  609. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
  610. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
  611. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
  612. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
  613. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
  614. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
  615. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
  616. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
  617. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
  618. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
  619. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
  620. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
  621. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
  622. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
  623. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
  624. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
package/src/pivot.ts DELETED
@@ -1,578 +0,0 @@
1
- /**
2
- * Pivot table (@svgrid/enterprise).
3
- *
4
- * Turns a flat array of rows + a pivot config into:
5
- * - `rows`: a flat array of pivot rows (group, subtotal, leaf, grand
6
- * total) suitable for `<SvGrid data={rows} />`.
7
- * - `columns`: a nested-header column tree suitable for
8
- * `<SvGrid columns={columns} />` - one column per (col-axis path
9
- * × value-measure) plus the row-axis "Header" first column.
10
- *
11
- * No DOM, no rendering. The grid renders the result with its
12
- * `columns: ColumnDef[]` + `data: PivotRow[]` like any other dataset.
13
- *
14
- * Usage:
15
- *
16
- * ```ts
17
- * import { createPivotModel } from '@svgrid/enterprise'
18
- *
19
- * const pivot = createPivotModel(orders, {
20
- * rows: ['region', 'salesPerson'],
21
- * cols: ['quarter'],
22
- * values: [
23
- * { field: 'amount', agg: 'sum', label: 'Total', format: { type: 'currency', currency: 'USD' } },
24
- * { field: 'amount', agg: 'avg', label: 'Avg' },
25
- * ],
26
- * })
27
- *
28
- * // then:
29
- * <SvGrid data={pivot.rows} columns={pivot.columns} features={features} />
30
- * ```
31
- */
32
- import type { ColumnDef, CellFormatConfig, RowData, TableFeatures } from '@svgrid/grid'
33
-
34
- // ---------------------------------------------------------------- types
35
-
36
- export type PivotAggregatorId =
37
- | 'sum'
38
- | 'avg'
39
- | 'min'
40
- | 'max'
41
- | 'count'
42
- | 'countDistinct'
43
- | 'first'
44
- | 'last'
45
-
46
- export type PivotAggregator = (values: ReadonlyArray<unknown>) => unknown
47
-
48
- export type PivotValueConfig<TData> = {
49
- /** Row field whose values get aggregated. */
50
- field: keyof TData & string
51
- /** Built-in aggregator id, or a custom reducer. */
52
- agg: PivotAggregatorId | PivotAggregator
53
- /** Display name in the column header. Defaults to `${field} (${agg})`. */
54
- label?: string
55
- /** Optional cell formatter. */
56
- format?: CellFormatConfig
57
- }
58
-
59
- export type PivotConfig<TData> = {
60
- /** Outer-most first. Each entry becomes one level of row grouping. */
61
- rows: ReadonlyArray<keyof TData & string>
62
- /** Outer-most first. Each entry becomes one level of column grouping. */
63
- cols: ReadonlyArray<keyof TData & string>
64
- /** One or more measures aggregated under each column-axis leaf. */
65
- values: ReadonlyArray<PivotValueConfig<TData>>
66
- /** Grand-total row at the bottom. Default `true`. */
67
- grandTotalRow?: boolean
68
- /** Grand-total column on the right. Default `true`. */
69
- grandTotalCol?: boolean
70
- /** Subtotal rows between row groups. Default `true`. */
71
- rowSubtotals?: boolean
72
- /** Optional sort for column-axis values per dim level (defaults to alpha). */
73
- colSort?: (a: unknown, b: unknown, level: number) => number
74
- /** Optional sort for row-axis values per dim level (defaults to alpha). */
75
- rowSort?: (a: unknown, b: unknown, level: number) => number
76
- }
77
-
78
- export type PivotRowKind = 'group' | 'subtotal' | 'leaf' | 'grandTotal'
79
-
80
- /**
81
- * Shape of one entry in `result.rows`. The first-column label lives at
82
- * `__pivotLabel`; every value cell lives at the column id matching the
83
- * leaf column generated for its (col-path × measure).
84
- *
85
- * `__pivotParentId` is the `__pivotId` of the row's row-axis parent
86
- * (or `null` for top-level groups, the grand-total row, and the one
87
- * synthetic "All" row when no row dims are configured). Use it with
88
- * `filterCollapsedPivotRows` to hide leaves whose ancestor is
89
- * collapsed - that's how expandable pivots are built on top of the
90
- * model.
91
- *
92
- * `__pivotExpandable` is `true` for `group` rows that have at least
93
- * one descendant. A renderer uses this to decide whether to show a
94
- * chevron next to the label.
95
- */
96
- export type PivotRow = {
97
- __pivotId: string
98
- __pivotKind: PivotRowKind
99
- __pivotDepth: number
100
- __pivotLabel: string
101
- __pivotParentId: string | null
102
- __pivotExpandable: boolean
103
- /** Aggregated value cells - keyed by leaf column id. */
104
- [columnId: string]: unknown
105
- }
106
-
107
- export type PivotResult<TFeatures extends TableFeatures> = {
108
- rows: PivotRow[]
109
- columns: Array<ColumnDef<TFeatures, PivotRow>>
110
- }
111
-
112
- // -------------------------------------------------------- aggregators
113
-
114
- const numeric = (vs: ReadonlyArray<unknown>): number[] =>
115
- vs
116
- .map((v) => (typeof v === 'number' ? v : Number(v)))
117
- .filter((n): n is number => !Number.isNaN(n))
118
-
119
- const BUILT_IN_AGGS: Record<PivotAggregatorId, PivotAggregator> = {
120
- sum: (vs) => numeric(vs).reduce((a, b) => a + b, 0),
121
- avg: (vs) => {
122
- const ns = numeric(vs)
123
- return ns.length === 0 ? null : ns.reduce((a, b) => a + b, 0) / ns.length
124
- },
125
- min: (vs) => (numeric(vs).length === 0 ? null : Math.min(...numeric(vs))),
126
- max: (vs) => (numeric(vs).length === 0 ? null : Math.max(...numeric(vs))),
127
- count: (vs) => vs.length,
128
- countDistinct: (vs) => new Set(vs).size,
129
- first: (vs) => vs[0] ?? null,
130
- last: (vs) => vs[vs.length - 1] ?? null,
131
- }
132
-
133
- function resolveAgg(agg: PivotAggregatorId | PivotAggregator): PivotAggregator {
134
- if (typeof agg === 'function') return agg
135
- const fn = BUILT_IN_AGGS[agg]
136
- if (!fn) throw new Error(`pivot: unknown aggregator '${String(agg)}'`)
137
- return fn
138
- }
139
-
140
- // --------------------------------------------------- axis-tree helpers
141
-
142
- type AxisNode = {
143
- /** Dimension level (index into config.cols / config.rows). 0 at root. */
144
- level: number
145
- /** Dim value at this node (root has value `null`). */
146
- value: unknown
147
- /** Path of values from root to this node (excluding root). */
148
- path: ReadonlyArray<unknown>
149
- /** Stable string id for the path. */
150
- pathKey: string
151
- /** Direct children, keyed by stringified value. */
152
- children: Map<string, AxisNode>
153
- /** Rows reaching this node (leaf or otherwise). */
154
- rows: unknown[]
155
- }
156
-
157
- function defaultCompare(a: unknown, b: unknown): number {
158
- if (a === b) return 0
159
- if (a == null) return -1
160
- if (b == null) return 1
161
- if (typeof a === 'number' && typeof b === 'number') return a - b
162
- return String(a).localeCompare(String(b), undefined, { numeric: true })
163
- }
164
-
165
- function buildAxisTree<TData>(
166
- rows: ReadonlyArray<TData>,
167
- fields: ReadonlyArray<string>,
168
- sortBy: ((a: unknown, b: unknown, level: number) => number) | undefined,
169
- ): AxisNode {
170
- const root: AxisNode = {
171
- level: 0, value: null, path: [], pathKey: '__root',
172
- children: new Map(), rows: rows as unknown[],
173
- }
174
- for (const row of rows as ReadonlyArray<Record<string, unknown>>) {
175
- let node = root
176
- for (let i = 0; i < fields.length; i += 1) {
177
- const field = fields[i]!
178
- const value = row[field]
179
- const key = `${i}:${value === null ? '__null' : String(value)}`
180
- let child = node.children.get(key)
181
- if (!child) {
182
- child = {
183
- level: i + 1,
184
- value,
185
- path: [...node.path, value],
186
- pathKey: node.pathKey === '__root' ? key : `${node.pathKey}|${key}`,
187
- children: new Map(),
188
- rows: [],
189
- }
190
- node.children.set(key, child)
191
- }
192
- child.rows.push(row)
193
- node = child
194
- }
195
- }
196
- // Stable, predictable child order at every level.
197
- sortNode(root, sortBy)
198
- return root
199
- }
200
-
201
- function sortNode(
202
- node: AxisNode,
203
- sortBy: ((a: unknown, b: unknown, level: number) => number) | undefined,
204
- ): void {
205
- const entries = Array.from(node.children.entries())
206
- entries.sort(([, a], [, b]) => (sortBy ?? defaultCompare)(a.value, b.value, a.level - 1))
207
- node.children = new Map(entries)
208
- for (const child of node.children.values()) sortNode(child, sortBy)
209
- }
210
-
211
- // --------------------------------------------------- column id helpers
212
-
213
- /**
214
- * Generate stable leaf column ids by joining the column-axis path and the
215
- * measure index. The id is what appears as `data-col-id` and as the key
216
- * inside each pivot row. Kept short and deterministic.
217
- */
218
- function leafColumnId(colPath: ReadonlyArray<unknown>, measureIndex: number): string {
219
- const path = colPath.length === 0 ? 'all' : colPath.map((v) => safe(v)).join('__')
220
- return `pv__${path}__m${measureIndex}`
221
- }
222
-
223
- function safe(v: unknown): string {
224
- if (v === null || v === undefined) return 'null'
225
- return String(v).replace(/[^a-zA-Z0-9_-]/g, '_')
226
- }
227
-
228
- // --------------------------------------------------- column-tree build
229
-
230
- function buildColumnTree<TFeatures extends TableFeatures>(
231
- colRoot: AxisNode,
232
- values: ReadonlyArray<PivotValueConfig<unknown>>,
233
- config: PivotConfig<unknown>,
234
- rowHeaderLabel: string,
235
- ): Array<ColumnDef<TFeatures, PivotRow>> {
236
- // First column: the row-axis tree as a single column. The label per row
237
- // comes from `__pivotLabel`, with `__pivotDepth` driving the indent.
238
- const headerCol: ColumnDef<TFeatures, PivotRow> = {
239
- id: '__pivotRowHeader',
240
- header: rowHeaderLabel,
241
- fieldFn: (row) => row.__pivotLabel,
242
- width: 240,
243
- }
244
-
245
- function recurse(node: AxisNode): Array<ColumnDef<TFeatures, PivotRow>> {
246
- // If this is a column-axis leaf (no children), emit one value column
247
- // per measure.
248
- if (node.children.size === 0) {
249
- return values.map((value, i) => {
250
- const id = leafColumnId(node.path, i)
251
- const label = value.label ?? `${value.field} (${typeof value.agg === 'function' ? 'custom' : value.agg})`
252
- return {
253
- id,
254
- header: label,
255
- fieldFn: (row) => row[id],
256
- format: value.format,
257
- width: 130,
258
- } as ColumnDef<TFeatures, PivotRow>
259
- })
260
- }
261
- // Otherwise emit a header group with this node's value as the label
262
- // and recurse for its children.
263
- return Array.from(node.children.values()).map((child) => ({
264
- id: `pv_group_${child.pathKey}`,
265
- header: String(child.value ?? '(blank)'),
266
- columns: recurse(child),
267
- } as unknown as ColumnDef<TFeatures, PivotRow>))
268
- }
269
-
270
- const valueCols = colRoot.children.size === 0
271
- // No col dims at all: emit measures as flat columns under no group.
272
- ? recurse(colRoot)
273
- : recurse(colRoot)
274
-
275
- const grandTotalCol = config.grandTotalCol !== false
276
- if (!grandTotalCol) return [headerCol, ...valueCols]
277
-
278
- // Grand total column: one measure column per value config, with no
279
- // col-path filter.
280
- const totalCols: Array<ColumnDef<TFeatures, PivotRow>> = values.map((value, i) => {
281
- const id = leafColumnId(['__total'], i)
282
- const label = value.label ?? `${value.field} (${typeof value.agg === 'function' ? 'custom' : value.agg})`
283
- return {
284
- id,
285
- header: label,
286
- fieldFn: (row) => row[id],
287
- format: value.format,
288
- width: 140,
289
- } as ColumnDef<TFeatures, PivotRow>
290
- })
291
- const grandTotal: ColumnDef<TFeatures, PivotRow> = {
292
- id: 'pv_group__grand_total',
293
- header: 'Total',
294
- columns: totalCols,
295
- } as unknown as ColumnDef<TFeatures, PivotRow>
296
-
297
- return [headerCol, ...valueCols, grandTotal]
298
- }
299
-
300
- // --------------------------------------------------- row-axis materialise
301
-
302
- function collectColLeafPaths(node: AxisNode, into: Array<ReadonlyArray<unknown>>): void {
303
- if (node.children.size === 0) {
304
- into.push(node.path)
305
- return
306
- }
307
- for (const child of node.children.values()) collectColLeafPaths(child, into)
308
- }
309
-
310
- /**
311
- * For one source-row set (a row-axis node) compute the value at each
312
- * column-axis leaf for each measure. Returns a map keyed by column id.
313
- */
314
- function computeRowValues(
315
- sourceRows: ReadonlyArray<Record<string, unknown>>,
316
- colLeafPaths: ReadonlyArray<ReadonlyArray<unknown>>,
317
- colFields: ReadonlyArray<string>,
318
- values: ReadonlyArray<PivotValueConfig<unknown>>,
319
- includeGrandTotalCol: boolean,
320
- ): Record<string, unknown> {
321
- const result: Record<string, unknown> = {}
322
-
323
- // For each col-axis leaf path, filter the source rows to those matching
324
- // every dim value, then run each measure aggregator.
325
- for (const colPath of colLeafPaths) {
326
- const matched = colPath.length === 0
327
- ? sourceRows
328
- : sourceRows.filter((r) =>
329
- colPath.every((value, i) => r[colFields[i]!] === value),
330
- )
331
- for (let i = 0; i < values.length; i += 1) {
332
- const value = values[i]!
333
- const fn = resolveAgg(value.agg)
334
- const id = leafColumnId(colPath, i)
335
- result[id] = fn(matched.map((r) => r[value.field]))
336
- }
337
- }
338
-
339
- // Grand-total column: run each measure across the entire source set.
340
- if (includeGrandTotalCol) {
341
- for (let i = 0; i < values.length; i += 1) {
342
- const value = values[i]!
343
- const fn = resolveAgg(value.agg)
344
- const id = leafColumnId(['__total'], i)
345
- result[id] = fn(sourceRows.map((r) => r[value.field]))
346
- }
347
- }
348
-
349
- return result
350
- }
351
-
352
- /**
353
- * Build the same value-column keys as `computeRowValues`, but with every cell
354
- * `null`. Used for group HEADER rows when `rowSubtotals` is off: the row keeps
355
- * its place in the hierarchy (label + expand/collapse) yet shows no aggregate
356
- * numbers. Cells are `null` rather than absent so consumers can distinguish a
357
- * deliberately-blank subtotal from a missing column.
358
- */
359
- function blankRowValues(
360
- colLeafPaths: ReadonlyArray<ReadonlyArray<unknown>>,
361
- values: ReadonlyArray<PivotValueConfig<unknown>>,
362
- includeGrandTotalCol: boolean,
363
- ): Record<string, null> {
364
- const result: Record<string, null> = {}
365
- for (const colPath of colLeafPaths) {
366
- for (let i = 0; i < values.length; i += 1) result[leafColumnId(colPath, i)] = null
367
- }
368
- if (includeGrandTotalCol) {
369
- for (let i = 0; i < values.length; i += 1) result[leafColumnId(['__total'], i)] = null
370
- }
371
- return result
372
- }
373
-
374
- function walkRowTree(
375
- node: AxisNode,
376
- out: PivotRow[],
377
- colLeafPaths: ReadonlyArray<ReadonlyArray<unknown>>,
378
- colFields: ReadonlyArray<string>,
379
- values: ReadonlyArray<PivotValueConfig<unknown>>,
380
- config: PivotConfig<unknown>,
381
- rowFields: ReadonlyArray<string>,
382
- /**
383
- * The id of the row-axis ancestor that should be reported as
384
- * `__pivotParentId` on every row emitted under this subtree. `null`
385
- * at the top level.
386
- */
387
- parentId: string | null,
388
- ): void {
389
- const includeGrandTotalCol = config.grandTotalCol !== false
390
- const wantSubtotals = config.rowSubtotals !== false
391
-
392
- // The "leaf" case: this is a row-axis leaf - no further row dimensions.
393
- if (node.children.size === 0) {
394
- out.push({
395
- __pivotId: `row__${node.pathKey}`,
396
- __pivotKind: 'leaf',
397
- __pivotDepth: node.level,
398
- __pivotLabel: node.value === null ? '(All)' : String(node.value),
399
- __pivotParentId: parentId,
400
- __pivotExpandable: false,
401
- ...computeRowValues(
402
- node.rows as ReadonlyArray<Record<string, unknown>>,
403
- colLeafPaths,
404
- colFields,
405
- values,
406
- includeGrandTotalCol,
407
- ),
408
- })
409
- return
410
- }
411
-
412
- // Group node. Emit the group HEADER row whenever this node is a real group
413
- // (not the synthetic root, not the deepest level). The header is emitted
414
- // regardless of `rowSubtotals` so the grouping hierarchy and the
415
- // expand/collapse parent chain stay intact; the flag only controls whether
416
- // the header carries its aggregate (subtotal) values or renders as a
417
- // label-only row. This matches Excel / AG Grid, where hiding subtotals never
418
- // removes a grouping level from the row axis.
419
- const isRealGroup = node.level > 0 && node.level < rowFields.length
420
- let nextParentId: string | null = parentId
421
- if (isRealGroup) {
422
- const id = `group__${node.pathKey}`
423
- out.push({
424
- __pivotId: id,
425
- __pivotKind: 'group',
426
- __pivotDepth: node.level,
427
- __pivotLabel: String(node.value ?? '(All)'),
428
- __pivotParentId: parentId,
429
- __pivotExpandable: true,
430
- ...(wantSubtotals
431
- ? computeRowValues(
432
- node.rows as ReadonlyArray<Record<string, unknown>>,
433
- colLeafPaths,
434
- colFields,
435
- values,
436
- includeGrandTotalCol,
437
- )
438
- : blankRowValues(colLeafPaths, values, includeGrandTotalCol)),
439
- })
440
- // Children of this group point at this row as their parent so a
441
- // collapse hides the whole subtree, not just the immediate leaves.
442
- nextParentId = id
443
- }
444
-
445
- for (const child of node.children.values()) {
446
- walkRowTree(
447
- child, out, colLeafPaths, colFields, values, config, rowFields, nextParentId,
448
- )
449
- }
450
- }
451
-
452
- // ------------------------------------------------------------ public API
453
-
454
- export function createPivotModel<
455
- TFeatures extends TableFeatures,
456
- TData extends RowData,
457
- >(
458
- data: ReadonlyArray<TData>,
459
- config: PivotConfig<TData>,
460
- ): PivotResult<TFeatures> {
461
- if (config.values.length === 0) {
462
- throw new Error('pivot: at least one value config is required')
463
- }
464
-
465
- const rowFields = config.rows as ReadonlyArray<string>
466
- const colFields = config.cols as ReadonlyArray<string>
467
- const values = config.values as ReadonlyArray<PivotValueConfig<unknown>>
468
-
469
- // 1. axis trees
470
- const rowRoot = buildAxisTree(data, rowFields, config.rowSort)
471
- const colRoot = buildAxisTree(data, colFields, config.colSort)
472
-
473
- // 2. collect col-axis leaf paths (one per value column header chain)
474
- const colLeafPaths: Array<ReadonlyArray<unknown>> = []
475
- collectColLeafPaths(colRoot, colLeafPaths)
476
-
477
- // 3. flatten row-axis to pivot rows
478
- const rows: PivotRow[] = []
479
- if (rowFields.length === 0) {
480
- // No row dims: one synthetic "All" row.
481
- rows.push({
482
- __pivotId: 'row__all',
483
- __pivotKind: 'leaf',
484
- __pivotDepth: 0,
485
- __pivotLabel: '(All)',
486
- __pivotParentId: null,
487
- __pivotExpandable: false,
488
- ...computeRowValues(
489
- data as unknown as ReadonlyArray<Record<string, unknown>>,
490
- colLeafPaths,
491
- colFields,
492
- values,
493
- config.grandTotalCol !== false,
494
- ),
495
- })
496
- } else {
497
- walkRowTree(
498
- rowRoot, rows, colLeafPaths, colFields, values,
499
- config as PivotConfig<unknown>, rowFields, null,
500
- )
501
- }
502
-
503
- // 4. grand-total row at bottom
504
- if (config.grandTotalRow !== false) {
505
- rows.push({
506
- __pivotId: 'row__grand_total',
507
- __pivotKind: 'grandTotal',
508
- __pivotDepth: 0,
509
- __pivotLabel: 'Grand total',
510
- __pivotParentId: null,
511
- __pivotExpandable: false,
512
- ...computeRowValues(
513
- data as unknown as ReadonlyArray<Record<string, unknown>>,
514
- colLeafPaths,
515
- colFields,
516
- values,
517
- config.grandTotalCol !== false,
518
- ),
519
- })
520
- }
521
-
522
- // 5. column tree
523
- const columns = buildColumnTree<TFeatures>(
524
- colRoot,
525
- values,
526
- config as PivotConfig<unknown>,
527
- rowFields.length > 0 ? rowFields.join(' / ') : '',
528
- )
529
-
530
- return { rows, columns }
531
- }
532
-
533
- /**
534
- * Public registry of built-in aggregators. Useful for surfacing the
535
- * available options in a pivot designer UI.
536
- */
537
- export const pivotAggregators: Record<PivotAggregatorId, PivotAggregator> = { ...BUILT_IN_AGGS }
538
-
539
- /**
540
- * Filter a `result.rows` array down to only the rows the user should
541
- * see given the current expansion state. A row stays in the output if
542
- * its entire ancestor chain (via `__pivotParentId`) is in `expandedIds`.
543
- *
544
- * Pass `true` to bypass filtering (everything visible - the default
545
- * shape `createPivotModel` already returns). Pass an empty array /
546
- * empty Set to collapse every group to its subtotal row.
547
- *
548
- * The result is a new array; the input is not mutated.
549
- */
550
- export function filterCollapsedPivotRows(
551
- rows: ReadonlyArray<PivotRow>,
552
- expandedIds: ReadonlyArray<string> | Set<string> | true,
553
- ): PivotRow[] {
554
- if (expandedIds === true) return rows.slice()
555
- const expanded =
556
- expandedIds instanceof Set ? expandedIds : new Set(expandedIds)
557
- // Parent-of index so the ancestor walk is O(depth) instead of O(rows × depth).
558
- const parentOf = new Map<string, string | null>()
559
- for (const r of rows) parentOf.set(r.__pivotId, r.__pivotParentId)
560
-
561
- const out: PivotRow[] = []
562
- for (const row of rows) {
563
- // The grand-total row, top-level groups, and the (All) row are
564
- // always visible (their parent is null).
565
- if (row.__pivotParentId === null) {
566
- out.push(row)
567
- continue
568
- }
569
- let parentId: string | null = row.__pivotParentId
570
- let visible = true
571
- while (parentId !== null) {
572
- if (!expanded.has(parentId)) { visible = false; break }
573
- parentId = parentOf.get(parentId) ?? null
574
- }
575
- if (visible) out.push(row)
576
- }
577
- return out
578
- }
package/src/print.ts DELETED
@@ -1,107 +0,0 @@
1
- import type { RowData, TableFeatures, SvGridApi } from '@svgrid/grid'
2
- import { assertEnterpriseLicensed } from './license'
3
- import {
4
- buildLinkResolver,
5
- projectRows,
6
- resolveColumns,
7
- resolveRowSource,
8
- type ExportColumn,
9
- type ExportRowSource,
10
- } from './export'
11
- import { buildPrintDocument, type PrintDocOptions } from './export-print'
12
- import { buildConditionalResolver } from './export-conditional'
13
- import type { ConditionalFormat } from '@svgrid/grid/format'
14
-
15
- export type PrintOptions<TData> = {
16
- /** Title placed above the printed grid. Defaults to "Grid". */
17
- title?: string
18
- /** Smaller line under the title. */
19
- subtitle?: string
20
- /** Logo data URL, shown above the title. */
21
- logo?: string
22
- /** Columns to print. Defaults to the grid's own visible columns (with their
23
- * header labels + `format`, so values print formatted). */
24
- columns?: ReadonlyArray<ExportColumn<TData>>
25
- /** Rows to print. Defaults to the current view; accepts the same
26
- * `'displayed' | 'selected' | 'all'` shorthand as `exportData`. */
27
- rows?: ExportRowSource<TData>
28
- /** Write raw underlying values instead of the formatted display values. */
29
- rawValues?: boolean
30
- /** Print orientation. Browsers honor it via `@page { size }`. Default "portrait". */
31
- orientation?: 'portrait' | 'landscape'
32
- /** `@page` size keyword, e.g. 'A4' | 'Letter'. Combined with orientation. */
33
- pageSize?: string
34
- /** Page margin, e.g. '14mm'. Default '14mm'. */
35
- margin?: string
36
- /** Zebra-stripe rows. Default true. */
37
- zebra?: boolean
38
- /** Header row background color. */
39
- headerColor?: string
40
- /** Conditional formatting rules (same array as `<SvGrid conditionalFormats>`);
41
- * carried into the print view as cell background / color / bold + icons. */
42
- conditionalFormats?: ReadonlyArray<ConditionalFormat<TData>>
43
- }
44
-
45
- export async function printGrid<
46
- TFeatures extends TableFeatures,
47
- TData extends RowData,
48
- >(api: SvGridApi<TFeatures, TData>, opts?: PrintOptions<TData>): Promise<void> {
49
- assertEnterpriseLicensed('Print')
50
- if (typeof window === 'undefined') {
51
- throw new Error('@svgrid/enterprise: print requires a browser environment')
52
- }
53
- const sourceRows = resolveRowSource(api, opts?.rows)
54
- if (sourceRows.length === 0) {
55
- throw new Error('@svgrid/enterprise: nothing to print - the grid has no rows')
56
- }
57
- const cols = resolveColumns(api, { columns: opts?.columns }, sourceRows)
58
- const fields = cols.map((c) => c.field)
59
- // Formatted display values (or raw when asked) so the print matches the grid.
60
- const projected = await projectRows(sourceRows, cols, { rawValues: opts?.rawValues })
61
- const dataRows = projected.slice(1).map((r) => fields.map((f) => String(r[f] ?? '')))
62
- const columns = cols.map((c) => ({ header: c.header ?? c.field, align: c.align }))
63
-
64
- const docOpts: PrintDocOptions = {
65
- title: opts?.title ?? 'Grid',
66
- subtitle: opts?.subtitle,
67
- logo: opts?.logo,
68
- orientation: opts?.orientation ?? 'portrait',
69
- pageSize: opts?.pageSize,
70
- margin: opts?.margin,
71
- zebra: opts?.zebra,
72
- headerColor: opts?.headerColor,
73
- }
74
- const visual = buildConditionalResolver(cols, sourceRows, opts?.conditionalFormats)
75
- const link = buildLinkResolver(cols, sourceRows)
76
- const html = buildPrintDocument({
77
- columns,
78
- rows: dataRows,
79
- cellStyle: (r, c) => visual(r, c),
80
- cellLink: link,
81
- opts: docOpts,
82
- })
83
-
84
- const w = window.open('', '_blank', 'width=900,height=700')
85
- if (!w) {
86
- throw new Error(
87
- '@svgrid/enterprise: print() could not open a window - the browser blocked the popup',
88
- )
89
- }
90
- w.document.open()
91
- w.document.write(html)
92
- w.document.close()
93
- // Give the new window one tick to paint before invoking print.
94
- w.focus()
95
- w.addEventListener('load', () => {
96
- setTimeout(() => w.print(), 50)
97
- })
98
- // Some browsers fire 'load' before the listener attaches if the document was
99
- // already complete. Fall back: try a print after a short delay regardless.
100
- setTimeout(() => {
101
- try {
102
- w.print()
103
- } catch {
104
- // ignore - the listener path will have fired
105
- }
106
- }, 300)
107
- }