@svgrid/enterprise 2.5.3 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/dist/SvAlertRuleEditor.svelte.d.ts +13 -0
  2. package/dist/SvAlertsManager.svelte.d.ts +14 -0
  3. package/dist/SvAlertsPanel.svelte.d.ts +9 -0
  4. package/dist/SvAuthGate.svelte.d.ts +22 -0
  5. package/dist/SvBoard.svelte.d.ts +35 -0
  6. package/dist/SvExportMenu.svelte.d.ts +61 -0
  7. package/{src → dist}/SvExpressionEditor.svelte +4 -1
  8. package/dist/SvExpressionEditor.svelte.d.ts +12 -0
  9. package/dist/SvFileInput.svelte.d.ts +20 -0
  10. package/dist/SvGridAlerts.svelte.d.ts +77 -0
  11. package/dist/SvGridBoard.svelte.d.ts +30 -0
  12. package/{src → dist}/SvGridEditPanel.svelte +173 -28
  13. package/dist/SvGridEditPanel.svelte.d.ts +75 -0
  14. package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
  15. package/dist/SvGridScheduler.svelte.d.ts +30 -0
  16. package/dist/SvImportDialog.svelte.d.ts +88 -0
  17. package/dist/SvLookupInput.svelte.d.ts +21 -0
  18. package/dist/SvPivotDesigner.svelte.d.ts +176 -0
  19. package/dist/SvRecordDetail.svelte.d.ts +58 -0
  20. package/dist/SvSchedule.svelte.d.ts +29 -0
  21. package/dist/SvSchemaChart.svelte.d.ts +61 -0
  22. package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
  23. package/dist/alerts/alert-engine-attach.d.ts +79 -0
  24. package/dist/alerts/alert-engine-attach.js +106 -0
  25. package/dist/alerts/alert-engine.d.ts +42 -0
  26. package/dist/alerts/alert-engine.js +196 -0
  27. package/dist/alerts/alert-formats.d.ts +26 -0
  28. package/dist/alerts/alert-formats.js +58 -0
  29. package/dist/alerts/alert-observer.d.ts +54 -0
  30. package/dist/alerts/alert-observer.js +156 -0
  31. package/dist/alerts/alert-scheduler.d.ts +30 -0
  32. package/dist/alerts/alert-scheduler.js +54 -0
  33. package/dist/alerts/alert-storage.d.ts +31 -0
  34. package/dist/alerts/alert-storage.js +92 -0
  35. package/dist/alerts/alert-store.svelte.d.ts +24 -0
  36. package/dist/alerts/alert-store.svelte.js +69 -0
  37. package/dist/alerts/alert-types.d.ts +86 -0
  38. package/dist/alerts/alert-types.js +1 -0
  39. package/dist/alerts.d.ts +2 -0
  40. package/{src/alerts.ts → dist/alerts.js} +9 -9
  41. package/dist/board.d.ts +7 -0
  42. package/{src/board.ts → dist/board.js} +13 -14
  43. package/dist/cdn/svgrid-enterprise.svelte-external.js +3220 -2607
  44. package/dist/designer/assets/index-BfzoL904.css +1 -0
  45. package/dist/designer/assets/{index-CBYU-KNn.js → index-CKdwDseq.js} +139 -139
  46. package/dist/designer/assets/src-DCKhP5Xy.css +1 -0
  47. package/dist/designer/assets/{src-i309BeJb.js → src-DLsSdh3J.js} +213 -193
  48. package/dist/designer/index.html +4 -4
  49. package/dist/edit-panel.d.ts +105 -0
  50. package/dist/edit-panel.js +350 -0
  51. package/dist/export-conditional.d.ts +31 -0
  52. package/dist/export-conditional.js +65 -0
  53. package/dist/export-ooxml.d.ts +93 -0
  54. package/dist/export-ooxml.js +385 -0
  55. package/dist/export-pdf.d.ts +107 -0
  56. package/dist/export-pdf.js +144 -0
  57. package/dist/export-print.d.ts +55 -0
  58. package/dist/export-print.js +91 -0
  59. package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
  60. package/dist/export-serialize.js +11 -0
  61. package/dist/export-xls.d.ts +26 -0
  62. package/dist/export-xls.js +157 -0
  63. package/dist/export.d.ts +323 -0
  64. package/dist/export.js +1021 -0
  65. package/dist/expressions/evaluate.d.ts +17 -0
  66. package/dist/expressions/evaluate.js +214 -0
  67. package/dist/expressions/expression-columns.d.ts +61 -0
  68. package/dist/expressions/expression-columns.js +72 -0
  69. package/dist/expressions/expression-types.d.ts +125 -0
  70. package/dist/expressions/expression-types.js +1 -0
  71. package/dist/expressions/parse.d.ts +25 -0
  72. package/dist/expressions/parse.js +537 -0
  73. package/dist/import.d.ts +232 -0
  74. package/dist/import.js +846 -0
  75. package/dist/index.d.ts +66 -0
  76. package/dist/index.js +91 -0
  77. package/dist/install.d.ts +70 -0
  78. package/dist/install.js +61 -0
  79. package/dist/license-core.d.ts +37 -0
  80. package/dist/license-core.js +81 -0
  81. package/dist/license.d.ts +30 -0
  82. package/dist/license.js +139 -0
  83. package/dist/master-detail.d.ts +23 -0
  84. package/dist/master-detail.js +35 -0
  85. package/dist/node/studio.js +683 -13
  86. package/dist/pivot-chart.d.ts +28 -0
  87. package/dist/pivot-chart.js +71 -0
  88. package/dist/pivot-designer.d.ts +69 -0
  89. package/dist/pivot-designer.js +38 -0
  90. package/dist/pivot-enable.d.ts +6 -0
  91. package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
  92. package/dist/pivot.d.ts +111 -0
  93. package/dist/pivot.js +353 -0
  94. package/dist/print.d.ts +33 -0
  95. package/dist/print.js +61 -0
  96. package/dist/revoked.d.ts +1 -0
  97. package/{src/revoked.ts → dist/revoked.js} +5 -6
  98. package/dist/scheduler-assignments.d.ts +64 -0
  99. package/dist/scheduler-assignments.js +92 -0
  100. package/dist/scheduler-axis.d.ts +81 -0
  101. package/dist/scheduler-axis.js +180 -0
  102. package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
  103. package/dist/scheduler-booking.js +50 -0
  104. package/dist/scheduler-config.d.ts +177 -0
  105. package/dist/scheduler-config.js +1 -0
  106. package/dist/scheduler-dependencies.d.ts +89 -0
  107. package/dist/scheduler-dependencies.js +179 -0
  108. package/dist/scheduler-freebusy.d.ts +19 -0
  109. package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
  110. package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
  111. package/dist/scheduler-heatmap.js +41 -0
  112. package/dist/scheduler-resource-tree.d.ts +48 -0
  113. package/dist/scheduler-resource-tree.js +78 -0
  114. package/dist/scheduler-slots.d.ts +37 -0
  115. package/dist/scheduler-slots.js +80 -0
  116. package/dist/scheduler-summary.d.ts +41 -0
  117. package/dist/scheduler-summary.js +54 -0
  118. package/dist/scheduler.d.ts +7 -0
  119. package/{src/scheduler.ts → dist/scheduler.js} +13 -14
  120. package/dist/scheduling.d.ts +132 -0
  121. package/dist/scheduling.js +228 -0
  122. package/dist/schema-designer.d.ts +42 -0
  123. package/dist/schema-designer.js +117 -0
  124. package/dist/schema.d.ts +408 -0
  125. package/dist/schema.js +225 -0
  126. package/dist/smart-shim.d.ts +62 -0
  127. package/dist/smart-shim.js +34 -0
  128. package/dist/sources/aggregate.d.ts +43 -0
  129. package/dist/sources/aggregate.js +60 -0
  130. package/dist/sources/auth-supabase.d.ts +69 -0
  131. package/dist/sources/auth-supabase.js +39 -0
  132. package/dist/sources/dashboard.d.ts +65 -0
  133. package/dist/sources/dashboard.js +95 -0
  134. package/dist/sources/field-inference.d.ts +23 -0
  135. package/dist/sources/field-inference.js +52 -0
  136. package/dist/sources/filters.d.ts +35 -0
  137. package/dist/sources/filters.js +52 -0
  138. package/dist/sources/index.d.ts +18 -0
  139. package/dist/sources/index.js +18 -0
  140. package/dist/sources/introspect-supabase.d.ts +30 -0
  141. package/dist/sources/introspect-supabase.js +134 -0
  142. package/dist/sources/realtime-supabase.d.ts +37 -0
  143. package/dist/sources/realtime-supabase.js +52 -0
  144. package/dist/sources/relation-lookup.d.ts +50 -0
  145. package/dist/sources/relation-lookup.js +77 -0
  146. package/dist/sources/rest-adapters.d.ts +48 -0
  147. package/dist/sources/rest-adapters.js +85 -0
  148. package/dist/sources/rest.d.ts +38 -0
  149. package/dist/sources/rest.js +86 -0
  150. package/dist/sources/schema-from-columns.d.ts +37 -0
  151. package/dist/sources/schema-from-columns.js +48 -0
  152. package/dist/sources/supabase.d.ts +33 -0
  153. package/dist/sources/supabase.js +74 -0
  154. package/dist/sources/with-entity-rules.d.ts +25 -0
  155. package/dist/sources/with-entity-rules.js +47 -0
  156. package/dist/sources/with-relation-labels.d.ts +26 -0
  157. package/dist/sources/with-relation-labels.js +38 -0
  158. package/dist/staged-editing.d.ts +85 -0
  159. package/dist/staged-editing.js +0 -0
  160. package/dist/studio/bug-report.d.ts +61 -0
  161. package/dist/studio/bug-report.js +126 -0
  162. package/dist/studio/cli.d.ts +56 -0
  163. package/dist/studio/cli.js +70 -0
  164. package/dist/studio/copilot-core.d.ts +22 -0
  165. package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
  166. package/dist/studio/csv.d.ts +36 -0
  167. package/dist/studio/csv.js +173 -0
  168. package/dist/studio/db-connect-string.d.ts +45 -0
  169. package/dist/studio/db-connect-string.js +113 -0
  170. package/dist/studio/deploy-cli.d.ts +35 -0
  171. package/dist/studio/deploy-cli.js +81 -0
  172. package/dist/studio/emit-project.d.ts +77 -0
  173. package/dist/studio/emit-project.js +5463 -0
  174. package/dist/studio/emit-schema.d.ts +110 -0
  175. package/dist/studio/emit-schema.js +1128 -0
  176. package/dist/studio/index.d.ts +35 -0
  177. package/dist/studio/index.js +41 -0
  178. package/dist/studio/init-flow.d.ts +58 -0
  179. package/dist/studio/init-flow.js +451 -0
  180. package/dist/studio/introspect-db.d.ts +47 -0
  181. package/dist/studio/introspect-db.js +255 -0
  182. package/dist/studio/introspect-openapi.d.ts +19 -0
  183. package/dist/studio/introspect-openapi.js +244 -0
  184. package/dist/studio/introspect-prisma.d.ts +25 -0
  185. package/dist/studio/introspect-prisma.js +164 -0
  186. package/dist/studio/introspect.d.ts +35 -0
  187. package/dist/studio/introspect.js +306 -0
  188. package/dist/studio/project.d.ts +1448 -0
  189. package/dist/studio/project.js +2187 -0
  190. package/dist/studio/sample-data.d.ts +19 -0
  191. package/dist/studio/sample-data.js +207 -0
  192. package/dist/studio/samples/ats.d.ts +2 -0
  193. package/dist/studio/samples/ats.js +194 -0
  194. package/dist/studio/samples/clinic.d.ts +2 -0
  195. package/dist/studio/samples/clinic.js +171 -0
  196. package/dist/studio/samples/crm.d.ts +2 -0
  197. package/dist/studio/samples/crm.js +280 -0
  198. package/dist/studio/samples/datasets.d.ts +38 -0
  199. package/dist/studio/samples/datasets.js +296 -0
  200. package/dist/studio/samples/ecommerce.d.ts +2 -0
  201. package/dist/studio/samples/ecommerce.js +178 -0
  202. package/dist/studio/samples/events.d.ts +2 -0
  203. package/dist/studio/samples/events.js +192 -0
  204. package/dist/studio/samples/fleet.d.ts +2 -0
  205. package/dist/studio/samples/fleet.js +203 -0
  206. package/dist/studio/samples/gym.d.ts +2 -0
  207. package/dist/studio/samples/gym.js +205 -0
  208. package/dist/studio/samples/hr.d.ts +2 -0
  209. package/dist/studio/samples/hr.js +186 -0
  210. package/dist/studio/samples/index.d.ts +13 -0
  211. package/dist/studio/samples/index.js +44 -0
  212. package/dist/studio/samples/insurance.d.ts +2 -0
  213. package/dist/studio/samples/insurance.js +220 -0
  214. package/dist/studio/samples/inventory.d.ts +2 -0
  215. package/dist/studio/samples/inventory.js +204 -0
  216. package/dist/studio/samples/invoicing.d.ts +2 -0
  217. package/dist/studio/samples/invoicing.js +154 -0
  218. package/dist/studio/samples/library.d.ts +2 -0
  219. package/dist/studio/samples/library.js +171 -0
  220. package/dist/studio/samples/live-data.d.ts +5 -0
  221. package/dist/studio/samples/live-data.js +261 -0
  222. package/dist/studio/samples/projects.d.ts +2 -0
  223. package/dist/studio/samples/projects.js +203 -0
  224. package/dist/studio/samples/realestate.d.ts +2 -0
  225. package/dist/studio/samples/realestate.js +187 -0
  226. package/dist/studio/samples/restaurant.d.ts +2 -0
  227. package/dist/studio/samples/restaurant.js +180 -0
  228. package/dist/studio/samples/school.d.ts +2 -0
  229. package/dist/studio/samples/school.js +188 -0
  230. package/dist/studio/samples/shared.d.ts +142 -0
  231. package/dist/studio/samples/shared.js +164 -0
  232. package/dist/studio/samples/starter.d.ts +4 -0
  233. package/dist/studio/samples/starter.js +237 -0
  234. package/dist/studio/samples/subscriptions.d.ts +2 -0
  235. package/dist/studio/samples/subscriptions.js +175 -0
  236. package/dist/studio/samples/support.d.ts +2 -0
  237. package/dist/studio/samples/support.js +209 -0
  238. package/dist/studio/scaffold-app.d.ts +22 -0
  239. package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
  240. package/dist/studio/scaffold.d.ts +63 -0
  241. package/dist/studio/scaffold.js +346 -0
  242. package/dist/studio/screen-suites.d.ts +193 -0
  243. package/dist/studio/screen-suites.js +297 -0
  244. package/dist/studio/themes.d.ts +34 -0
  245. package/dist/studio/themes.js +41 -0
  246. package/dist/studio/ui-components.d.ts +89 -0
  247. package/dist/studio/ui-components.generated.d.ts +29 -0
  248. package/dist/studio/ui-components.generated.js +7319 -0
  249. package/dist/studio/ui-components.js +673 -0
  250. package/dist/studio/user-error.d.ts +23 -0
  251. package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
  252. package/dist/studio/verify.d.ts +34 -0
  253. package/dist/studio/verify.js +47 -0
  254. package/dist/sveltekit/in-memory.d.ts +14 -0
  255. package/dist/sveltekit/in-memory.js +113 -0
  256. package/dist/sveltekit/index.d.ts +6 -0
  257. package/dist/sveltekit/index.js +5 -0
  258. package/dist/sveltekit/query-plan.d.ts +44 -0
  259. package/dist/sveltekit/query-plan.js +76 -0
  260. package/dist/sveltekit/sql-source.d.ts +47 -0
  261. package/dist/sveltekit/sql-source.js +106 -0
  262. package/dist/sveltekit/sql.d.ts +48 -0
  263. package/dist/sveltekit/sql.js +73 -0
  264. package/dist/sveltekit/transport.d.ts +209 -0
  265. package/dist/sveltekit/transport.js +219 -0
  266. package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
  267. package/dist/sveltekit/types.js +1 -0
  268. package/dist/upgrade-prompt.d.ts +16 -0
  269. package/dist/upgrade-prompt.js +141 -0
  270. package/dist/version.d.ts +13 -0
  271. package/{src/version.ts → dist/version.js} +1 -1
  272. package/dist/watermark.d.ts +2 -0
  273. package/dist/watermark.js +146 -0
  274. package/package.json +28 -26
  275. package/dist/designer/assets/index-oYok52zd.css +0 -1
  276. package/dist/designer/assets/src-D-O2F805.css +0 -1
  277. package/src/SvBoard.dom.test.ts +0 -67
  278. package/src/SvGridAlerts.dom.test.ts +0 -113
  279. package/src/SvGridEditPanel.dom.test.ts +0 -320
  280. package/src/SvRecordDetail.dom.test.ts +0 -137
  281. package/src/SvSchedule.dom.test.ts +0 -57
  282. package/src/ai-export-pdf.dom.test.ts +0 -77
  283. package/src/ai-export-xlsx.dom.test.ts +0 -90
  284. package/src/ai-export.dom.test.ts +0 -114
  285. package/src/alerts/alert-engine-attach.ts +0 -165
  286. package/src/alerts/alert-engine.test.ts +0 -135
  287. package/src/alerts/alert-engine.ts +0 -260
  288. package/src/alerts/alert-formats.test.ts +0 -87
  289. package/src/alerts/alert-formats.ts +0 -77
  290. package/src/alerts/alert-observer.test.ts +0 -189
  291. package/src/alerts/alert-observer.ts +0 -208
  292. package/src/alerts/alert-scheduler.ts +0 -96
  293. package/src/alerts/alert-storage.test.ts +0 -54
  294. package/src/alerts/alert-storage.ts +0 -116
  295. package/src/alerts/alert-store.svelte.ts +0 -80
  296. package/src/alerts/alert-types.ts +0 -94
  297. package/src/board.dom.test.ts +0 -941
  298. package/src/edit-panel.test.ts +0 -322
  299. package/src/edit-panel.ts +0 -379
  300. package/src/export-conditional.test.ts +0 -60
  301. package/src/export-conditional.ts +0 -94
  302. package/src/export-ooxml.test.ts +0 -152
  303. package/src/export-ooxml.ts +0 -489
  304. package/src/export-pdf.test.ts +0 -138
  305. package/src/export-pdf.ts +0 -245
  306. package/src/export-print.test.ts +0 -66
  307. package/src/export-print.ts +0 -132
  308. package/src/export-serialize.test.ts +0 -56
  309. package/src/export-xls.ts +0 -199
  310. package/src/export-xlsx-roundtrip.test.ts +0 -120
  311. package/src/export-xlsx.test.ts +0 -150
  312. package/src/export.test.ts +0 -349
  313. package/src/export.ts +0 -1464
  314. package/src/expressions/evaluate.test.ts +0 -111
  315. package/src/expressions/evaluate.ts +0 -237
  316. package/src/expressions/expression-columns.ts +0 -133
  317. package/src/expressions/expression-types.ts +0 -84
  318. package/src/expressions/parse.test.ts +0 -106
  319. package/src/expressions/parse.ts +0 -610
  320. package/src/import-automap.test.ts +0 -131
  321. package/src/import-hardening.test.ts +0 -158
  322. package/src/import.test.ts +0 -415
  323. package/src/import.ts +0 -1044
  324. package/src/index.ts +0 -569
  325. package/src/install.ts +0 -154
  326. package/src/license-core.test.ts +0 -23
  327. package/src/license-core.ts +0 -107
  328. package/src/license-expiry.test.ts +0 -144
  329. package/src/license.ts +0 -157
  330. package/src/master-detail.test.ts +0 -61
  331. package/src/master-detail.ts +0 -42
  332. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
  333. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
  334. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
  335. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
  336. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
  337. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
  338. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
  339. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
  340. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
  341. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
  342. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
  343. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
  344. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
  345. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
  346. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
  347. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
  348. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
  349. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
  350. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
  351. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
  352. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
  353. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
  354. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
  355. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
  356. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
  357. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
  358. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
  359. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
  360. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
  361. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
  362. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
  363. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
  364. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
  365. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
  366. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
  367. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
  368. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
  369. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
  370. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
  371. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
  372. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
  373. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
  374. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
  375. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
  376. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
  377. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
  378. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
  379. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
  380. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
  381. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
  382. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
  383. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
  384. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
  385. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
  386. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
  387. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
  388. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
  389. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
  390. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
  391. package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
  392. package/src/pivot-chart.test.ts +0 -86
  393. package/src/pivot-chart.ts +0 -112
  394. package/src/pivot-designer.ts +0 -101
  395. package/src/pivot.test.ts +0 -335
  396. package/src/pivot.ts +0 -578
  397. package/src/print.ts +0 -107
  398. package/src/scheduler-assignments.test.ts +0 -97
  399. package/src/scheduler-assignments.ts +0 -134
  400. package/src/scheduler-axis.test.ts +0 -108
  401. package/src/scheduler-axis.ts +0 -238
  402. package/src/scheduler-booking.test.ts +0 -57
  403. package/src/scheduler-config.ts +0 -179
  404. package/src/scheduler-dependencies.test.ts +0 -155
  405. package/src/scheduler-dependencies.ts +0 -223
  406. package/src/scheduler-freebusy.test.ts +0 -41
  407. package/src/scheduler-heatmap.test.ts +0 -39
  408. package/src/scheduler-resource-tree.test.ts +0 -84
  409. package/src/scheduler-resource-tree.ts +0 -107
  410. package/src/scheduler-slots.test.ts +0 -53
  411. package/src/scheduler-slots.ts +0 -94
  412. package/src/scheduler-summary.test.ts +0 -47
  413. package/src/scheduler-summary.ts +0 -81
  414. package/src/scheduling.test.ts +0 -194
  415. package/src/scheduling.ts +0 -293
  416. package/src/schema-designer.test.ts +0 -121
  417. package/src/schema-designer.ts +0 -142
  418. package/src/schema.test.ts +0 -268
  419. package/src/schema.ts +0 -562
  420. package/src/smart-shim.ts +0 -107
  421. package/src/sources/aggregate.test.ts +0 -79
  422. package/src/sources/aggregate.ts +0 -102
  423. package/src/sources/auth-supabase.test.ts +0 -80
  424. package/src/sources/auth-supabase.ts +0 -87
  425. package/src/sources/dashboard.kpi.test.ts +0 -50
  426. package/src/sources/dashboard.test.ts +0 -61
  427. package/src/sources/dashboard.ts +0 -136
  428. package/src/sources/field-inference.test.ts +0 -60
  429. package/src/sources/field-inference.ts +0 -63
  430. package/src/sources/filters.test.ts +0 -58
  431. package/src/sources/filters.ts +0 -70
  432. package/src/sources/index.ts +0 -67
  433. package/src/sources/introspect-supabase.test.ts +0 -112
  434. package/src/sources/introspect-supabase.ts +0 -139
  435. package/src/sources/realtime-supabase.test.ts +0 -93
  436. package/src/sources/realtime-supabase.ts +0 -99
  437. package/src/sources/relation-lookup.test.ts +0 -99
  438. package/src/sources/relation-lookup.ts +0 -128
  439. package/src/sources/rest-adapters.test.ts +0 -95
  440. package/src/sources/rest-adapters.ts +0 -120
  441. package/src/sources/rest.test.ts +0 -104
  442. package/src/sources/rest.ts +0 -129
  443. package/src/sources/schema-from-columns.test.ts +0 -106
  444. package/src/sources/schema-from-columns.ts +0 -88
  445. package/src/sources/supabase.test.ts +0 -110
  446. package/src/sources/supabase.ts +0 -99
  447. package/src/sources/with-entity-rules.test.ts +0 -104
  448. package/src/sources/with-entity-rules.ts +0 -78
  449. package/src/sources/with-relation-labels.test.ts +0 -75
  450. package/src/sources/with-relation-labels.ts +0 -73
  451. package/src/staged-editing.ts +0 -0
  452. package/src/studio/bug-report.test.ts +0 -101
  453. package/src/studio/bug-report.ts +0 -165
  454. package/src/studio/cli.test.ts +0 -187
  455. package/src/studio/cli.ts +0 -117
  456. package/src/studio/copilot-core.test.ts +0 -45
  457. package/src/studio/csv.test.ts +0 -90
  458. package/src/studio/csv.ts +0 -165
  459. package/src/studio/db-connect-string.test.ts +0 -94
  460. package/src/studio/db-connect-string.ts +0 -128
  461. package/src/studio/deploy-cli.test.ts +0 -56
  462. package/src/studio/deploy-cli.ts +0 -100
  463. package/src/studio/emit-project.test.ts +0 -3324
  464. package/src/studio/emit-project.ts +0 -5377
  465. package/src/studio/emit-schema.test.ts +0 -111
  466. package/src/studio/emit-schema.ts +0 -1181
  467. package/src/studio/index.ts +0 -380
  468. package/src/studio/init-flow.test.ts +0 -514
  469. package/src/studio/init-flow.ts +0 -556
  470. package/src/studio/introspect-db.test.ts +0 -186
  471. package/src/studio/introspect-db.ts +0 -312
  472. package/src/studio/introspect-openapi.test.ts +0 -84
  473. package/src/studio/introspect-openapi.ts +0 -252
  474. package/src/studio/introspect-prisma.test.ts +0 -99
  475. package/src/studio/introspect-prisma.ts +0 -175
  476. package/src/studio/introspect.test.ts +0 -172
  477. package/src/studio/introspect.ts +0 -310
  478. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
  479. package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
  480. package/src/studio/pipeline.test.ts +0 -42
  481. package/src/studio/project-robust.test.ts +0 -157
  482. package/src/studio/project.test.ts +0 -929
  483. package/src/studio/project.ts +0 -2394
  484. package/src/studio/sample-data.test.ts +0 -58
  485. package/src/studio/sample-data.ts +0 -203
  486. package/src/studio/samples/ats.ts +0 -202
  487. package/src/studio/samples/clinic.ts +0 -179
  488. package/src/studio/samples/crm.ts +0 -291
  489. package/src/studio/samples/datasets.test.ts +0 -84
  490. package/src/studio/samples/datasets.ts +0 -340
  491. package/src/studio/samples/ecommerce.ts +0 -187
  492. package/src/studio/samples/events.ts +0 -201
  493. package/src/studio/samples/fleet.ts +0 -213
  494. package/src/studio/samples/gym.ts +0 -215
  495. package/src/studio/samples/hr.ts +0 -195
  496. package/src/studio/samples/index.ts +0 -55
  497. package/src/studio/samples/insurance.ts +0 -229
  498. package/src/studio/samples/inventory.ts +0 -213
  499. package/src/studio/samples/invoicing.ts +0 -162
  500. package/src/studio/samples/library.ts +0 -180
  501. package/src/studio/samples/live-data.test.ts +0 -99
  502. package/src/studio/samples/live-data.ts +0 -306
  503. package/src/studio/samples/projects.ts +0 -212
  504. package/src/studio/samples/realestate.ts +0 -196
  505. package/src/studio/samples/restaurant.ts +0 -189
  506. package/src/studio/samples/samples.test.ts +0 -304
  507. package/src/studio/samples/school.ts +0 -197
  508. package/src/studio/samples/seed-floor.test.ts +0 -25
  509. package/src/studio/samples/shared.ts +0 -237
  510. package/src/studio/samples/starter.ts +0 -251
  511. package/src/studio/samples/subscriptions.ts +0 -183
  512. package/src/studio/samples/support.ts +0 -216
  513. package/src/studio/scaffold-app.test.ts +0 -91
  514. package/src/studio/scaffold.test.ts +0 -192
  515. package/src/studio/scaffold.ts +0 -390
  516. package/src/studio/screen-suites.test.ts +0 -269
  517. package/src/studio/screen-suites.ts +0 -448
  518. package/src/studio/themes.ts +0 -62
  519. package/src/studio/ui-components-surface.test.ts +0 -185
  520. package/src/studio/ui-components.generated.ts +0 -7154
  521. package/src/studio/ui-components.ts +0 -742
  522. package/src/studio/verify.test.ts +0 -47
  523. package/src/studio/verify.ts +0 -79
  524. package/src/sveltekit/in-memory.test.ts +0 -104
  525. package/src/sveltekit/in-memory.ts +0 -129
  526. package/src/sveltekit/index.ts +0 -24
  527. package/src/sveltekit/query-plan.test.ts +0 -109
  528. package/src/sveltekit/query-plan.ts +0 -125
  529. package/src/sveltekit/sql-source.test.ts +0 -198
  530. package/src/sveltekit/sql-source.ts +0 -171
  531. package/src/sveltekit/sql.test.ts +0 -80
  532. package/src/sveltekit/sql.ts +0 -131
  533. package/src/sveltekit/transport-scope.test.ts +0 -125
  534. package/src/sveltekit/transport.test.ts +0 -201
  535. package/src/sveltekit/transport.ts +0 -373
  536. package/src/upgrade-prompt.test.ts +0 -71
  537. package/src/upgrade-prompt.ts +0 -162
  538. package/src/version.test.ts +0 -17
  539. package/src/watermark.test.ts +0 -97
  540. package/src/watermark.ts +0 -156
  541. /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
  542. /package/{src → dist}/SvAlertsManager.svelte +0 -0
  543. /package/{src → dist}/SvAlertsPanel.svelte +0 -0
  544. /package/{src → dist}/SvAuthGate.svelte +0 -0
  545. /package/{src → dist}/SvBoard.svelte +0 -0
  546. /package/{src → dist}/SvExportMenu.svelte +0 -0
  547. /package/{src → dist}/SvFileInput.svelte +0 -0
  548. /package/{src → dist}/SvGridAlerts.svelte +0 -0
  549. /package/{src → dist}/SvGridBoard.svelte +0 -0
  550. /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
  551. /package/{src → dist}/SvGridScheduler.svelte +0 -0
  552. /package/{src → dist}/SvImportDialog.svelte +0 -0
  553. /package/{src → dist}/SvLookupInput.svelte +0 -0
  554. /package/{src → dist}/SvPivotDesigner.svelte +0 -0
  555. /package/{src → dist}/SvRecordDetail.svelte +0 -0
  556. /package/{src → dist}/SvSchedule.svelte +0 -0
  557. /package/{src → dist}/SvSchemaChart.svelte +0 -0
  558. /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
  559. /package/{src → dist}/pdfmake-shims.d.ts +0 -0
  560. /package/{src → dist}/smart.export.d.ts +0 -0
  561. /package/{src → dist}/smart.export.js +0 -0
  562. /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
  563. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
  564. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
  565. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
  566. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
  567. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
  568. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
  569. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
  570. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
  571. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
  572. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
  573. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
  574. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
  575. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
  576. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
  577. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
  578. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
  579. /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
  580. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
  581. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
  582. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
  583. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
  584. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
  585. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
  586. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
  587. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
  588. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
  589. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
  590. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
  591. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
  592. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
  593. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
  594. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
  595. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
  596. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
  597. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
  598. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
  599. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
  600. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
  601. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
  602. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
  603. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
  604. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
  605. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
  606. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
  607. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
  608. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
  609. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
  610. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
  611. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
  612. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
  613. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
  614. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
  615. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
  616. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
  617. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
  618. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
  619. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
  620. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
  621. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
  622. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
  623. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
  624. /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * scheduler-dependencies - the pure, framework-free core behind the Scheduler Pro
3
+ * *event dependencies* feature (predecessor / successor links + auto-reschedule).
4
+ * No Svelte, no DOM: just graph + date math over the native `Date`, so every rule
5
+ * here is unit-tested directly (mirrors scheduler-model.ts in @svgrid/grid).
6
+ *
7
+ * A dependency links a predecessor event to a successor with one of the four
8
+ * classic types (FS / SS / FF / SF) and an optional `lag` (minutes; negative = a
9
+ * lead). When a predecessor moves or resizes, {@link cascade} pushes successors
10
+ * forward just enough to keep every link legal, preserving each event's duration.
11
+ * Cascading never pulls an event earlier - it only resolves violations forward,
12
+ * the standard auto-schedule behaviour.
13
+ *
14
+ * Deliberately avoids the arg-less `new Date()` / `Date.now()` - callers pass the
15
+ * current event times in; working-time skipping is injected as a `snapForward`
16
+ * hook so this file needs no knowledge of shifts / business hours.
17
+ */
18
+ const MS_MIN = 60000;
19
+ /** Sub-second slack so exact-touching links (successor.start == pred.end) are legal. */
20
+ const EPS_MS = 1000;
21
+ /** Build the adjacency indexes for `deps`. */
22
+ export function buildDependencyGraph(deps) {
23
+ const succ = new Map();
24
+ const pred = new Map();
25
+ const byId = new Map();
26
+ const nodes = new Set();
27
+ const list = [];
28
+ for (const d of deps) {
29
+ if (!d || !d.from || !d.to || d.from === d.to)
30
+ continue; // ignore malformed / self links
31
+ list.push(d);
32
+ byId.set(d.id, d);
33
+ nodes.add(d.from);
34
+ nodes.add(d.to);
35
+ (succ.get(d.from) ?? succ.set(d.from, []).get(d.from)).push(d);
36
+ (pred.get(d.to) ?? pred.set(d.to, []).get(d.to)).push(d);
37
+ }
38
+ return { deps: list, succ, pred, byId, nodes };
39
+ }
40
+ /**
41
+ * Kahn topological order of the graph's nodes. Returns `{ order, cyclicIds }`:
42
+ * `order` is a safe processing order for the acyclic part (predecessors before
43
+ * successors); `cyclicIds` are the ids of links that could not be ordered because
44
+ * they take part in a cycle (cascade ignores them so it can never loop).
45
+ */
46
+ export function topoOrder(graph) {
47
+ const indeg = new Map();
48
+ for (const n of graph.nodes)
49
+ indeg.set(n, 0);
50
+ for (const d of graph.deps)
51
+ indeg.set(d.to, (indeg.get(d.to) ?? 0) + 1);
52
+ const queue = [];
53
+ for (const [n, deg] of indeg)
54
+ if (deg === 0)
55
+ queue.push(n);
56
+ // Stable: process in insertion order for deterministic output.
57
+ const order = [];
58
+ const settled = new Set();
59
+ while (queue.length) {
60
+ const n = queue.shift();
61
+ order.push(n);
62
+ settled.add(n);
63
+ for (const d of graph.succ.get(n) ?? []) {
64
+ const deg = (indeg.get(d.to) ?? 0) - 1;
65
+ indeg.set(d.to, deg);
66
+ if (deg === 0)
67
+ queue.push(d.to);
68
+ }
69
+ }
70
+ // Any node not settled sits inside (or downstream of) a cycle; links whose
71
+ // successor never settled are the cyclic ones.
72
+ const cyclicIds = new Set();
73
+ for (const d of graph.deps)
74
+ if (!settled.has(d.to))
75
+ cyclicIds.add(d.id);
76
+ return { order, cyclicIds };
77
+ }
78
+ /** True when `deps` contain a cycle. */
79
+ export function hasCycle(deps) {
80
+ return topoOrder(buildDependencyGraph(deps)).cyclicIds.size > 0;
81
+ }
82
+ /**
83
+ * The earliest legal start for the successor of `dep`, given the predecessor's
84
+ * resolved times and the successor's own `durationMs` (kept constant). Encodes the
85
+ * FS / SS / FF / SF semantics plus `lag` (minutes).
86
+ */
87
+ export function requiredStart(predTimes, dep, successorDurationMs) {
88
+ const lagMs = (dep.lag ?? 0) * MS_MIN;
89
+ const type = dep.type ?? 'FS';
90
+ let t;
91
+ switch (type) {
92
+ case 'FS':
93
+ t = predTimes.end.getTime() + lagMs;
94
+ break;
95
+ case 'SS':
96
+ t = predTimes.start.getTime() + lagMs;
97
+ break;
98
+ case 'FF':
99
+ t = predTimes.end.getTime() + lagMs - successorDurationMs;
100
+ break;
101
+ case 'SF':
102
+ t = predTimes.start.getTime() + lagMs - successorDurationMs;
103
+ break;
104
+ }
105
+ return new Date(t);
106
+ }
107
+ /**
108
+ * Forward-cascade successors so every dependency is satisfied. `times` maps row
109
+ * key -> current [start,end] (the just-moved predecessor already carries its NEW
110
+ * time). Processing runs in topological order, so multi-hop chains and diamonds
111
+ * (two paths into one successor) resolve to the latest required start in a single
112
+ * pass. Each shifted event keeps its duration. Returns ONLY the events whose times
113
+ * changed (never the untouched ones, never the moved predecessor itself unless a
114
+ * link also forces it). Cyclic links are ignored.
115
+ */
116
+ export function cascade(times, deps, opts = {}) {
117
+ const graph = buildDependencyGraph(deps);
118
+ const { order, cyclicIds } = topoOrder(graph);
119
+ // Working copy we mutate as we walk downstream.
120
+ const cur = new Map();
121
+ for (const [k, v] of times)
122
+ cur.set(k, { start: v.start, end: v.end });
123
+ const changed = new Map();
124
+ for (const key of order) {
125
+ const links = graph.pred.get(key);
126
+ if (!links || !links.length)
127
+ continue;
128
+ const self = cur.get(key);
129
+ if (!self)
130
+ continue;
131
+ const durationMs = self.end.getTime() - self.start.getTime();
132
+ let minStartMs = self.start.getTime();
133
+ for (const dep of links) {
134
+ if (cyclicIds.has(dep.id))
135
+ continue;
136
+ const pred = cur.get(dep.from);
137
+ if (!pred)
138
+ continue;
139
+ const req = requiredStart(pred, dep, durationMs).getTime();
140
+ if (req > minStartMs)
141
+ minStartMs = req;
142
+ }
143
+ if (minStartMs <= self.start.getTime())
144
+ continue; // already legal - never pull earlier
145
+ let newStart = new Date(minStartMs);
146
+ if (opts.snapForward)
147
+ newStart = opts.snapForward(newStart);
148
+ const newEnd = new Date(newStart.getTime() + durationMs);
149
+ const next = { start: newStart, end: newEnd };
150
+ cur.set(key, next);
151
+ changed.set(key, next);
152
+ }
153
+ return changed;
154
+ }
155
+ /**
156
+ * The dependencies currently unsatisfied by `times` (successor starts too early
157
+ * for the link). Used to paint violation-state arrows. Cyclic links are skipped.
158
+ */
159
+ export function violations(times, deps) {
160
+ const graph = buildDependencyGraph(deps);
161
+ const { cyclicIds } = topoOrder(graph);
162
+ const out = [];
163
+ for (const dep of graph.deps) {
164
+ if (cyclicIds.has(dep.id))
165
+ continue;
166
+ const pred = times.get(dep.from);
167
+ const succ = times.get(dep.to);
168
+ if (!pred || !succ)
169
+ continue;
170
+ const durationMs = succ.end.getTime() - succ.start.getTime();
171
+ const req = requiredStart(pred, dep, durationMs).getTime();
172
+ // A link on end (FF / SF) constrains the successor's end; compare that edge.
173
+ const type = dep.type ?? 'FS';
174
+ const actual = type === 'FF' || type === 'SF' ? succ.end.getTime() - durationMs : succ.start.getTime();
175
+ if (actual + EPS_MS < req)
176
+ out.push(dep);
177
+ }
178
+ return out;
179
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * scheduler-freebusy - the pure core behind Scheduler Pro's *free/busy* and
3
+ * *cross-attendee find-a-time*. No Svelte, no DOM. Merges each attendee's busy
4
+ * intervals and finds the windows when EVERYONE is free (long enough for a meeting).
5
+ * Deterministic - the caller supplies all dates. Reuses the interval algebra from
6
+ * scheduler-slots (`mergeIntervals` / `subtractIntervals`).
7
+ */
8
+ import { type Interval } from './scheduler-slots';
9
+ export type { Interval };
10
+ /** Union of a set of busy intervals into a sorted, disjoint list (an alias of the
11
+ * slots merge, named for the free/busy domain). */
12
+ export declare function mergeBusy(intervals: ReadonlyArray<Interval>): Interval[];
13
+ /**
14
+ * The windows within `[dayStart, dayEnd]` when EVERY attendee is free, each at
15
+ * least `durationMin` long. `busyByPerson` is one busy list per attendee; a person
16
+ * with no entry is treated as fully free. The result is the complement of the union
17
+ * of all busy time, filtered to windows that can fit the meeting.
18
+ */
19
+ export declare function commonFree(busyByPerson: ReadonlyArray<ReadonlyArray<Interval>>, dayStart: Date, dayEnd: Date, durationMin: number): Interval[];
@@ -5,32 +5,22 @@
5
5
  * Deterministic - the caller supplies all dates. Reuses the interval algebra from
6
6
  * scheduler-slots (`mergeIntervals` / `subtractIntervals`).
7
7
  */
8
- import { mergeIntervals, subtractIntervals, type Interval } from './scheduler-slots'
9
-
10
- export type { Interval }
11
-
12
- const MS_MIN = 60_000
13
-
8
+ import { mergeIntervals, subtractIntervals } from './scheduler-slots';
9
+ const MS_MIN = 60000;
14
10
  /** Union of a set of busy intervals into a sorted, disjoint list (an alias of the
15
11
  * slots merge, named for the free/busy domain). */
16
- export function mergeBusy(intervals: ReadonlyArray<Interval>): Interval[] {
17
- return mergeIntervals(intervals)
12
+ export function mergeBusy(intervals) {
13
+ return mergeIntervals(intervals);
18
14
  }
19
-
20
15
  /**
21
16
  * The windows within `[dayStart, dayEnd]` when EVERY attendee is free, each at
22
17
  * least `durationMin` long. `busyByPerson` is one busy list per attendee; a person
23
18
  * with no entry is treated as fully free. The result is the complement of the union
24
19
  * of all busy time, filtered to windows that can fit the meeting.
25
20
  */
26
- export function commonFree(
27
- busyByPerson: ReadonlyArray<ReadonlyArray<Interval>>,
28
- dayStart: Date,
29
- dayEnd: Date,
30
- durationMin: number,
31
- ): Interval[] {
32
- const allBusy = mergeIntervals(busyByPerson.flat())
33
- const free = subtractIntervals({ start: dayStart, end: dayEnd }, allBusy)
34
- const minMs = Math.max(0, durationMin) * MS_MIN
35
- return free.filter((f) => f.end.getTime() - f.start.getTime() >= minMs)
21
+ export function commonFree(busyByPerson, dayStart, dayEnd, durationMin) {
22
+ const allBusy = mergeIntervals(busyByPerson.flat());
23
+ const free = subtractIntervals({ start: dayStart, end: dayEnd }, allBusy);
24
+ const minMs = Math.max(0, durationMin) * MS_MIN;
25
+ return free.filter((f) => f.end.getTime() - f.start.getTime() >= minMs);
36
26
  }
@@ -8,17 +8,15 @@
8
8
  * intensity (0..1) + an over-capacity flag per cell; it then paints the cell with
9
9
  * a theme colour at that intensity.
10
10
  */
11
-
12
11
  /** One background cell: its axis geometry + normalized load intensity. */
13
12
  export type HeatCell = {
14
- leftPct: number
15
- widthPct: number
16
- /** 0..1, load scaled against `peak` (clamped). */
17
- intensity: number
18
- /** True when the raw load exceeds capacity. */
19
- over: boolean
20
- }
21
-
13
+ leftPct: number;
14
+ widthPct: number;
15
+ /** 0..1, load scaled against `peak` (clamped). */
16
+ intensity: number;
17
+ /** True when the raw load exceeds capacity. */
18
+ over: boolean;
19
+ };
22
20
  /**
23
21
  * Build the per-tick heat cells for one resource row. `ticks` supply the axis
24
22
  * geometry, `loads` the load in each tick (same length/order), `capacity` the
@@ -26,30 +24,9 @@ export type HeatCell = {
26
24
  * (usually a global peak so rows are comparable). Zero-load ticks are still
27
25
  * emitted (intensity 0) so the caller can decide whether to paint them.
28
26
  */
29
- export function heatCells(
30
- ticks: ReadonlyArray<{ leftPct: number; widthPct: number }>,
31
- loads: ReadonlyArray<number>,
32
- capacity: number,
33
- peak: number,
34
- ): HeatCell[] {
35
- const scale = Math.max(peak, capacity, 1)
36
- const out: HeatCell[] = []
37
- for (let i = 0; i < ticks.length; i++) {
38
- const t = ticks[i]!
39
- const load = loads[i] ?? 0
40
- out.push({
41
- leftPct: t.leftPct,
42
- widthPct: t.widthPct,
43
- intensity: Math.max(0, Math.min(1, load / scale)),
44
- over: load > capacity + 1e-9,
45
- })
46
- }
47
- return out
48
- }
49
-
27
+ export declare function heatCells(ticks: ReadonlyArray<{
28
+ leftPct: number;
29
+ widthPct: number;
30
+ }>, loads: ReadonlyArray<number>, capacity: number, peak: number): HeatCell[];
50
31
  /** The peak load across a set of per-resource load rows (for a shared scale). */
51
- export function heatPeak(loadRows: ReadonlyArray<ReadonlyArray<number>>, floor = 1): number {
52
- let peak = floor
53
- for (const row of loadRows) for (const v of row) if (v > peak) peak = v
54
- return peak
55
- }
32
+ export declare function heatPeak(loadRows: ReadonlyArray<ReadonlyArray<number>>, floor?: number): number;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * scheduler-heatmap - the pure core behind Scheduler Pro's *utilization heatmap*.
3
+ * No Svelte, no DOM. Distinct from the histogram (a bar strip): the heatmap tints
4
+ * a resource row's BACKGROUND per time-bucket by how loaded that resource is.
5
+ *
6
+ * The renderer computes each bucket's load (with `resourceLoad` / `overlapCount`
7
+ * from the assignment / model helpers) and passes it here to get a normalized
8
+ * intensity (0..1) + an over-capacity flag per cell; it then paints the cell with
9
+ * a theme colour at that intensity.
10
+ */
11
+ /**
12
+ * Build the per-tick heat cells for one resource row. `ticks` supply the axis
13
+ * geometry, `loads` the load in each tick (same length/order), `capacity` the
14
+ * resource's capacity (over that = `over`), and `peak` the normalization scale
15
+ * (usually a global peak so rows are comparable). Zero-load ticks are still
16
+ * emitted (intensity 0) so the caller can decide whether to paint them.
17
+ */
18
+ export function heatCells(ticks, loads, capacity, peak) {
19
+ const scale = Math.max(peak, capacity, 1);
20
+ const out = [];
21
+ for (let i = 0; i < ticks.length; i++) {
22
+ const t = ticks[i];
23
+ const load = loads[i] ?? 0;
24
+ out.push({
25
+ leftPct: t.leftPct,
26
+ widthPct: t.widthPct,
27
+ intensity: Math.max(0, Math.min(1, load / scale)),
28
+ over: load > capacity + 1e-9,
29
+ });
30
+ }
31
+ return out;
32
+ }
33
+ /** The peak load across a set of per-resource load rows (for a shared scale). */
34
+ export function heatPeak(loadRows, floor = 1) {
35
+ let peak = floor;
36
+ for (const row of loadRows)
37
+ for (const v of row)
38
+ if (v > peak)
39
+ peak = v;
40
+ return peak;
41
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * scheduler-resource-tree - the pure core behind Scheduler Pro *grouped / tree
3
+ * resources*. No Svelte, no DOM. Resources are flat in the base grid; this builds
4
+ * a hierarchy of collapsible GROUP header rows (departments -> teams -> people)
5
+ * interleaved with the resource rows, so the timeline gutter can render a tree.
6
+ *
7
+ * Groups nest via `parentId`; each resource is mapped to a group by a `groupOf`
8
+ * accessor. Resources whose group is unknown / unset fall into a trailing
9
+ * "ungrouped" section (rendered without a header). Collapsing a group drops its
10
+ * whole subtree from the output (the header stays).
11
+ */
12
+ /** A group node in the resource tree. `parentId` nests it under another group. */
13
+ export type SchedulerResourceGroup = {
14
+ id: string;
15
+ title: string;
16
+ parentId?: string;
17
+ color?: string;
18
+ };
19
+ /** One rendered row: a group header, or a leaf resource. */
20
+ export type ResourceRow<R = unknown> = {
21
+ kind: 'group' | 'resource';
22
+ id: string;
23
+ title: string;
24
+ /** Indent depth (0 = top level). */
25
+ depth: number;
26
+ color?: string;
27
+ /** Present for `kind: 'resource'`. */
28
+ resource?: R;
29
+ /** Present for `kind: 'group'`: whether it is collapsed. */
30
+ collapsed?: boolean;
31
+ /** Present for `kind: 'group'`: every leaf resource id in its subtree (for roll-ups). */
32
+ childResourceIds?: string[];
33
+ };
34
+ type MinResource = {
35
+ id: string;
36
+ title?: string;
37
+ color?: string;
38
+ };
39
+ /**
40
+ * Build the ordered tree rows. `groups` define the hierarchy; `groupOf(resource)`
41
+ * returns the group id a resource belongs to (or undefined = ungrouped). `collapsed`
42
+ * is the set of collapsed group ids. Order: for each group, its child groups
43
+ * (recursively) then its direct resources; ungrouped resources trail at the end.
44
+ */
45
+ export declare function buildResourceRows<R extends MinResource>(resources: ReadonlyArray<R>, groups: ReadonlyArray<SchedulerResourceGroup>, groupOf: (r: R) => string | undefined, collapsed?: ReadonlySet<string>): ResourceRow<R>[];
46
+ /** The leaf resource ids actually visible (resource rows only) in tree order. */
47
+ export declare function visibleResourceIds<R extends MinResource>(rows: ReadonlyArray<ResourceRow<R>>): string[];
48
+ export {};
@@ -0,0 +1,78 @@
1
+ /**
2
+ * scheduler-resource-tree - the pure core behind Scheduler Pro *grouped / tree
3
+ * resources*. No Svelte, no DOM. Resources are flat in the base grid; this builds
4
+ * a hierarchy of collapsible GROUP header rows (departments -> teams -> people)
5
+ * interleaved with the resource rows, so the timeline gutter can render a tree.
6
+ *
7
+ * Groups nest via `parentId`; each resource is mapped to a group by a `groupOf`
8
+ * accessor. Resources whose group is unknown / unset fall into a trailing
9
+ * "ungrouped" section (rendered without a header). Collapsing a group drops its
10
+ * whole subtree from the output (the header stays).
11
+ */
12
+ /**
13
+ * Build the ordered tree rows. `groups` define the hierarchy; `groupOf(resource)`
14
+ * returns the group id a resource belongs to (or undefined = ungrouped). `collapsed`
15
+ * is the set of collapsed group ids. Order: for each group, its child groups
16
+ * (recursively) then its direct resources; ungrouped resources trail at the end.
17
+ */
18
+ export function buildResourceRows(resources, groups, groupOf, collapsed = new Set()) {
19
+ const groupById = new Map();
20
+ for (const g of groups)
21
+ if (g && g.id)
22
+ groupById.set(g.id, g);
23
+ // parentId -> child groups (root groups keyed under '' ). A parentId that is not
24
+ // a known group is treated as a root.
25
+ const childGroups = new Map();
26
+ for (const g of groupById.values()) {
27
+ const p = g.parentId && groupById.has(g.parentId) ? g.parentId : '';
28
+ (childGroups.get(p) ?? childGroups.set(p, []).get(p)).push(g);
29
+ }
30
+ // group id -> resources ('' = ungrouped / unknown group).
31
+ const resByGroup = new Map();
32
+ for (const r of resources) {
33
+ const gid = groupOf(r);
34
+ const key = gid && groupById.has(gid) ? gid : '';
35
+ (resByGroup.get(key) ?? resByGroup.set(key, []).get(key)).push(r);
36
+ }
37
+ // Every leaf resource id under a group's subtree (recursive), for roll-ups.
38
+ const leafSeen = new Set();
39
+ const leafIds = (gid) => {
40
+ if (leafSeen.has(gid))
41
+ return []; // cycle guard
42
+ leafSeen.add(gid);
43
+ const ids = [];
44
+ for (const r of resByGroup.get(gid) ?? [])
45
+ ids.push(r.id);
46
+ for (const cg of childGroups.get(gid) ?? [])
47
+ ids.push(...leafIds(cg.id));
48
+ leafSeen.delete(gid);
49
+ return ids;
50
+ };
51
+ const out = [];
52
+ const walked = new Set();
53
+ const walk = (g, depth) => {
54
+ if (walked.has(g.id))
55
+ return; // cycle guard
56
+ walked.add(g.id);
57
+ const isCollapsed = collapsed.has(g.id);
58
+ out.push({ kind: 'group', id: g.id, title: g.title, depth, color: g.color, collapsed: isCollapsed, childResourceIds: leafIds(g.id) });
59
+ if (isCollapsed)
60
+ return;
61
+ for (const cg of childGroups.get(g.id) ?? [])
62
+ walk(cg, depth + 1);
63
+ for (const r of resByGroup.get(g.id) ?? []) {
64
+ out.push({ kind: 'resource', id: r.id, title: r.title ?? r.id, depth: depth + 1, color: r.color, resource: r });
65
+ }
66
+ };
67
+ for (const g of childGroups.get('') ?? [])
68
+ walk(g, 0);
69
+ // Ungrouped resources trail at the end (no header).
70
+ for (const r of resByGroup.get('') ?? []) {
71
+ out.push({ kind: 'resource', id: r.id, title: r.title ?? r.id, depth: 0, color: r.color, resource: r });
72
+ }
73
+ return out;
74
+ }
75
+ /** The leaf resource ids actually visible (resource rows only) in tree order. */
76
+ export function visibleResourceIds(rows) {
77
+ return rows.filter((r) => r.kind === 'resource').map((r) => r.id);
78
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * scheduler-slots - the pure core behind Scheduler Pro's *bookable slots /
3
+ * find-a-time* (Calendly-style). No Svelte, no DOM. Given a resource's working
4
+ * windows and its busy intervals, it produces the open, bookable slots of a fixed
5
+ * duration - subtracting busy time (widened by buffers) and anything before a
6
+ * minimum start (now + lead). Deterministic: the caller supplies all dates.
7
+ */
8
+ export type Interval = {
9
+ start: Date;
10
+ end: Date;
11
+ };
12
+ export type Slot = {
13
+ start: Date;
14
+ end: Date;
15
+ };
16
+ /** Merge overlapping / touching intervals into a sorted, disjoint list. */
17
+ export declare function mergeIntervals(intervals: ReadonlyArray<Interval>): Interval[];
18
+ /** The parts of `[base]` not covered by any of the (merged) `occupied` intervals. */
19
+ export declare function subtractIntervals(base: Interval, occupied: ReadonlyArray<Interval>): Interval[];
20
+ export type SlotOptions = {
21
+ working: ReadonlyArray<Interval>;
22
+ busy: ReadonlyArray<Interval>;
23
+ durationMin: number;
24
+ /** Slot start granularity (minutes). Default = `durationMin` (back-to-back slots). */
25
+ stepMin?: number;
26
+ /** Clear minutes required before / after a busy booking (widens what it blocks). */
27
+ bufferBeforeMin?: number;
28
+ bufferAfterMin?: number;
29
+ /** Earliest allowed slot start (e.g. now + lead time). Slots before it are dropped. */
30
+ minStart?: Date;
31
+ };
32
+ /**
33
+ * The bookable slots. For each working window, subtract busy time (each busy
34
+ * interval widened by the buffers) and anything before `minStart`, then step
35
+ * through the remaining free space emitting `durationMin` slots every `stepMin`.
36
+ */
37
+ export declare function availableSlots(opts: SlotOptions): Slot[];
@@ -0,0 +1,80 @@
1
+ /**
2
+ * scheduler-slots - the pure core behind Scheduler Pro's *bookable slots /
3
+ * find-a-time* (Calendly-style). No Svelte, no DOM. Given a resource's working
4
+ * windows and its busy intervals, it produces the open, bookable slots of a fixed
5
+ * duration - subtracting busy time (widened by buffers) and anything before a
6
+ * minimum start (now + lead). Deterministic: the caller supplies all dates.
7
+ */
8
+ const MS_MIN = 60000;
9
+ /** Merge overlapping / touching intervals into a sorted, disjoint list. */
10
+ export function mergeIntervals(intervals) {
11
+ const sorted = [...intervals]
12
+ .filter((i) => i.end.getTime() > i.start.getTime())
13
+ .sort((a, b) => a.start.getTime() - b.start.getTime());
14
+ const out = [];
15
+ for (const iv of sorted) {
16
+ const last = out[out.length - 1];
17
+ if (last && iv.start.getTime() <= last.end.getTime()) {
18
+ if (iv.end.getTime() > last.end.getTime())
19
+ last.end = iv.end;
20
+ }
21
+ else
22
+ out.push({ start: iv.start, end: iv.end });
23
+ }
24
+ return out;
25
+ }
26
+ /** The parts of `[base]` not covered by any of the (merged) `occupied` intervals. */
27
+ export function subtractIntervals(base, occupied) {
28
+ const occ = mergeIntervals(occupied);
29
+ const out = [];
30
+ let cursor = base.start.getTime();
31
+ const end = base.end.getTime();
32
+ for (const o of occ) {
33
+ const os = o.start.getTime();
34
+ const oe = o.end.getTime();
35
+ if (oe <= cursor || os >= end)
36
+ continue; // outside base
37
+ if (os > cursor)
38
+ out.push({ start: new Date(cursor), end: new Date(Math.min(os, end)) });
39
+ cursor = Math.max(cursor, oe);
40
+ if (cursor >= end)
41
+ break;
42
+ }
43
+ if (cursor < end)
44
+ out.push({ start: new Date(cursor), end: new Date(end) });
45
+ return out;
46
+ }
47
+ /**
48
+ * The bookable slots. For each working window, subtract busy time (each busy
49
+ * interval widened by the buffers) and anything before `minStart`, then step
50
+ * through the remaining free space emitting `durationMin` slots every `stepMin`.
51
+ */
52
+ export function availableSlots(opts) {
53
+ const durMs = Math.max(1, opts.durationMin) * MS_MIN;
54
+ const stepMs = Math.max(1, opts.stepMin ?? opts.durationMin) * MS_MIN;
55
+ const bufB = (opts.bufferBeforeMin ?? 0) * MS_MIN;
56
+ const bufA = (opts.bufferAfterMin ?? 0) * MS_MIN;
57
+ const floor = opts.minStart ? opts.minStart.getTime() : -Infinity;
58
+ const occupied = opts.busy.map((b) => ({
59
+ start: new Date(b.start.getTime() - bufB),
60
+ end: new Date(b.end.getTime() + bufA),
61
+ }));
62
+ const out = [];
63
+ for (const w of mergeIntervals(opts.working)) {
64
+ // Clip the window to `minStart` before subtracting busy.
65
+ const wStart = Math.max(w.start.getTime(), floor);
66
+ if (wStart >= w.end.getTime())
67
+ continue;
68
+ const free = subtractIntervals({ start: new Date(wStart), end: w.end }, occupied);
69
+ for (const gap of free) {
70
+ let s = gap.start.getTime();
71
+ const gEnd = gap.end.getTime();
72
+ let guard = 0;
73
+ while (s + durMs <= gEnd && guard++ < 5000) {
74
+ out.push({ start: new Date(s), end: new Date(s + durMs) });
75
+ s += stepMs;
76
+ }
77
+ }
78
+ }
79
+ return out;
80
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * scheduler-summary - the pure core behind Scheduler Pro's *per-time-column
3
+ * summary* strip (counts / sums / a custom roll-up aligned to the timeline axis).
4
+ * No Svelte, no DOM. Each event is clipped to the column it falls in before the
5
+ * reducer runs, so duration-based reducers (busy minutes) are per-column.
6
+ */
7
+ /** One event clipped to a column: its row plus the clipped [start, end). */
8
+ export type SummaryItem<TData> = {
9
+ row: TData;
10
+ start: Date;
11
+ end: Date;
12
+ };
13
+ /**
14
+ * How a column's overlapping events roll up to one cell value:
15
+ * - `'count'` - number of events touching the column
16
+ * - `{ sum }` - sum of a numeric row field over those events
17
+ * - function - custom, receives the column-clipped items
18
+ */
19
+ export type ColumnReducer<TData> = 'count' | {
20
+ sum: keyof TData & string;
21
+ } | ((items: SummaryItem<TData>[]) => string | number);
22
+ export type SummaryOptions<E, TData> = {
23
+ startOf: (e: E) => Date;
24
+ endOf: (e: E) => Date;
25
+ rowOf: (e: E) => TData;
26
+ };
27
+ /**
28
+ * One summary value per column. For each column, collect the events overlapping
29
+ * it, clip each to the column bounds, then apply `reducer`. Empty columns yield
30
+ * `0` for `count` / `sum` and `reducer([])` for the function form.
31
+ */
32
+ export declare function columnSummaries<E, TData>(events: ReadonlyArray<E>, columns: ReadonlyArray<{
33
+ start: Date;
34
+ end: Date;
35
+ }>, reducer: ColumnReducer<TData>, opts: SummaryOptions<E, TData>): Array<string | number>;
36
+ /** Built-in reducer: sum a numeric row field. */
37
+ export declare function sumReducer<TData>(field: keyof TData & string): ColumnReducer<TData>;
38
+ /** Built-in reducer: count events. */
39
+ export declare const countReducer: "count";
40
+ /** Built-in reducer: total column-clipped busy minutes across the column's events. */
41
+ export declare function busyMinutesReducer<TData>(): (items: SummaryItem<TData>[]) => number;