@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,81 @@
1
+ /**
2
+ * scheduler-axis - the pure core behind Scheduler Pro's *non-working-time
3
+ * collapse* and *continuous zoom*. No Svelte, no DOM.
4
+ *
5
+ * Instead of a single linear time<->pixel scale, the timeline axis becomes a
6
+ * PIECEWISE map: working spans keep a full pixel width (`pxPerMinute`), while
7
+ * non-working spans (nights / weekends) collapse to a thin fixed-width gap (or
8
+ * are omitted). {@link buildAxis} produces the ordered segments; {@link timeToX}
9
+ * / {@link xToTime} map across them. The renderer routes all event positioning
10
+ * and drag snapping through these so a collapsed axis stays consistent.
11
+ *
12
+ * Callers supply the range + working definition; this file never reads the clock.
13
+ */
14
+ export type AxisSegmentKind = 'working' | 'break' | 'collapsed';
15
+ /** One contiguous stretch of the axis with a resolved pixel width + offset. */
16
+ export type AxisSegment = {
17
+ start: Date;
18
+ end: Date;
19
+ /** Left offset in px from the axis origin. */
20
+ x: number;
21
+ /** Rendered width in px (collapsed gaps get a fixed small width). */
22
+ px: number;
23
+ kind: AxisSegmentKind;
24
+ };
25
+ export type Axis = {
26
+ start: Date;
27
+ end: Date;
28
+ segments: AxisSegment[];
29
+ totalPx: number;
30
+ };
31
+ export type BuildAxisOptions = {
32
+ /** Pixel width of one working minute. Default 0.5 (30px/hour). */
33
+ pxPerMinute?: number;
34
+ /** Business-hours window in hours, e.g. `{ start: 9, end: 17 }`. Omit = 24h working. */
35
+ businessHours?: {
36
+ start: number;
37
+ end: number;
38
+ };
39
+ /** Weekday numbers (0 = Sun .. 6 = Sat) treated as non-working days. */
40
+ nonWorkingDays?: ReadonlyArray<number>;
41
+ /** Collapse nights / breaks (time outside business hours) to a gap. */
42
+ collapseNonWorking?: boolean;
43
+ /** Collapse whole non-working days (weekends) to a gap. */
44
+ collapseWeekends?: boolean;
45
+ /** Width (px) of a collapsed gap marker. Default 12; 0 omits it entirely. */
46
+ collapsedGapPx?: number;
47
+ };
48
+ /**
49
+ * Build the piecewise axis over `[rangeStart, rangeEnd]`. Walks day by day,
50
+ * emitting `working` segments (full width) interleaved with `break` (outside
51
+ * business hours) and whole non-working-day segments. A non-working segment is
52
+ * rendered `collapsed` (fixed gap px) when the matching collapse flag is on, else
53
+ * kept at full width with kind `break`.
54
+ */
55
+ export declare function buildAxis(rangeStart: Date, rangeEnd: Date, opts?: BuildAxisOptions): Axis;
56
+ /** Map a time to an x offset (px) across the piecewise axis. Clamps to [0,totalPx]. */
57
+ export declare function timeToX(date: Date, axis: Axis): number;
58
+ /** Map an x offset (px) back to a time across the piecewise axis. */
59
+ export declare function xToTime(x: number, axis: Axis): Date;
60
+ export type ZoomMajorUnit = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
61
+ /** One zoom preset: tick size + pixel density + the coarser grouping unit. */
62
+ export type ZoomLevel = {
63
+ id: string;
64
+ label: string;
65
+ /** Minutes per minor tick. */
66
+ tickMinutes: number;
67
+ /** Pixel width of one minor tick. */
68
+ pxPerTick: number;
69
+ majorUnit: ZoomMajorUnit;
70
+ };
71
+ /** The built-in zoom ladder, most zoomed-in first (minute detail -> months). */
72
+ export declare const zoomPresets: ZoomLevel[];
73
+ /**
74
+ * Resolve `zoom` to a {@link ZoomLevel}. A `ZoomLevel` passes through; a number is
75
+ * an index into `ladder` (clamped). Returns the pixel density too via
76
+ * `pxPerMinute = pxPerTick / tickMinutes` (use it as `buildAxis`'s `pxPerMinute`).
77
+ */
78
+ export declare function resolveZoom(zoom: number | ZoomLevel, ladder?: ReadonlyArray<ZoomLevel>): {
79
+ level: ZoomLevel;
80
+ pxPerMinute: number;
81
+ };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * scheduler-axis - the pure core behind Scheduler Pro's *non-working-time
3
+ * collapse* and *continuous zoom*. No Svelte, no DOM.
4
+ *
5
+ * Instead of a single linear time<->pixel scale, the timeline axis becomes a
6
+ * PIECEWISE map: working spans keep a full pixel width (`pxPerMinute`), while
7
+ * non-working spans (nights / weekends) collapse to a thin fixed-width gap (or
8
+ * are omitted). {@link buildAxis} produces the ordered segments; {@link timeToX}
9
+ * / {@link xToTime} map across them. The renderer routes all event positioning
10
+ * and drag snapping through these so a collapsed axis stays consistent.
11
+ *
12
+ * Callers supply the range + working definition; this file never reads the clock.
13
+ */
14
+ const MS_MIN = 60000;
15
+ const MS_DAY = 86400000;
16
+ /** True when `weekday` is a non-working day. */
17
+ function isNonWorkingDay(weekday, days) {
18
+ return !!days && days.includes(weekday);
19
+ }
20
+ /**
21
+ * The working `[startMs, endMs)` intervals for the local day beginning at
22
+ * `dayStart`, from `businessHours` (or the whole day when omitted). Empty when the
23
+ * day is a non-working day.
24
+ */
25
+ function workingSpansForDay(dayStart, bh, nonWorkingDays) {
26
+ if (isNonWorkingDay(dayStart.getDay(), nonWorkingDays))
27
+ return [];
28
+ const base = dayStart.getTime();
29
+ if (!bh)
30
+ return [[base, base + MS_DAY]];
31
+ const s = base + bh.start * 60 * MS_MIN;
32
+ const e = base + bh.end * 60 * MS_MIN;
33
+ return e > s ? [[s, e]] : [];
34
+ }
35
+ /**
36
+ * Build the piecewise axis over `[rangeStart, rangeEnd]`. Walks day by day,
37
+ * emitting `working` segments (full width) interleaved with `break` (outside
38
+ * business hours) and whole non-working-day segments. A non-working segment is
39
+ * rendered `collapsed` (fixed gap px) when the matching collapse flag is on, else
40
+ * kept at full width with kind `break`.
41
+ */
42
+ export function buildAxis(rangeStart, rangeEnd, opts = {}) {
43
+ const pxPerMinute = opts.pxPerMinute ?? 0.5;
44
+ const gapPx = opts.collapsedGapPx ?? 12;
45
+ const pxOfMs = (ms) => (ms / MS_MIN) * pxPerMinute;
46
+ // Collect all working spans across the range, clipped to it.
47
+ const rangeS = rangeStart.getTime();
48
+ const rangeE = rangeEnd.getTime();
49
+ const working = [];
50
+ let day = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate());
51
+ // Guard: never loop forever; ranges are bounded (days count).
52
+ let guard = 0;
53
+ while (day.getTime() < rangeE && guard++ < 4000) {
54
+ for (const [s, e] of workingSpansForDay(day, opts.businessHours, opts.nonWorkingDays)) {
55
+ const cs = Math.max(s, rangeS);
56
+ const ce = Math.min(e, rangeE);
57
+ if (ce > cs)
58
+ working.push([cs, ce]);
59
+ }
60
+ day = new Date(day.getTime() + MS_DAY);
61
+ }
62
+ working.sort((a, b) => a[0] - b[0]);
63
+ const raw = [];
64
+ let cursor = rangeS;
65
+ const pushSegment = (s, e, kind) => {
66
+ if (e <= s)
67
+ return;
68
+ if (kind === 'working') {
69
+ raw.push({ start: s, end: e, px: pxOfMs(e - s), kind });
70
+ return;
71
+ }
72
+ // non-working: split into per-day pieces so a whole non-working DAY (weekend)
73
+ // collapses per `collapseWeekends` while a night / break collapses per
74
+ // `collapseNonWorking`. Consecutive collapsed pieces are merged below.
75
+ let a = s;
76
+ while (a < e) {
77
+ const d = new Date(a);
78
+ const dayStart = new Date(d.getFullYear(), d.getMonth(), d.getDate());
79
+ const b = Math.min(e, dayStart.getTime() + MS_DAY);
80
+ const wholeDayOff = isNonWorkingDay(dayStart.getDay(), opts.nonWorkingDays);
81
+ const collapse = wholeDayOff ? opts.collapseWeekends : opts.collapseNonWorking;
82
+ if (collapse)
83
+ raw.push({ start: a, end: b, px: gapPx > 0 ? gapPx : 0, kind: 'collapsed' });
84
+ else
85
+ raw.push({ start: a, end: b, px: pxOfMs(b - a), kind: 'break' });
86
+ a = b;
87
+ }
88
+ };
89
+ for (const [ws, we] of working) {
90
+ if (ws > cursor)
91
+ pushSegment(cursor, ws, 'break'); // non-working gap before this span
92
+ pushSegment(ws, we, 'working');
93
+ cursor = we;
94
+ }
95
+ if (cursor < rangeE)
96
+ pushSegment(cursor, rangeE, 'break'); // trailing non-working tail
97
+ // Coalesce consecutive collapsed pieces into one gap marker (a single collapsed
98
+ // stretch renders as one "gap" of `gapPx`, not one per calendar day), then
99
+ // assign cumulative x offsets.
100
+ const segments = [];
101
+ let x = 0;
102
+ for (const r of raw) {
103
+ const prev = segments[segments.length - 1];
104
+ if (r.kind === 'collapsed' && prev && prev.kind === 'collapsed') {
105
+ prev.end = new Date(r.end); // extend the existing gap; px stays fixed
106
+ continue;
107
+ }
108
+ segments.push({ start: new Date(r.start), end: new Date(r.end), x, px: r.px, kind: r.kind });
109
+ x += r.px;
110
+ }
111
+ return { start: rangeStart, end: rangeEnd, segments, totalPx: x };
112
+ }
113
+ /** Find the segment containing `t` (by time), or null when outside the axis. */
114
+ function segmentAt(axis, t) {
115
+ for (const seg of axis.segments) {
116
+ if (t >= seg.start.getTime() && t < seg.end.getTime())
117
+ return seg;
118
+ }
119
+ // Exact end-of-axis maps to the last segment's trailing edge.
120
+ const last = axis.segments[axis.segments.length - 1];
121
+ if (last && t === last.end.getTime())
122
+ return last;
123
+ return null;
124
+ }
125
+ /** Map a time to an x offset (px) across the piecewise axis. Clamps to [0,totalPx]. */
126
+ export function timeToX(date, axis) {
127
+ const t = date.getTime();
128
+ if (t <= axis.start.getTime())
129
+ return 0;
130
+ if (t >= axis.end.getTime())
131
+ return axis.totalPx;
132
+ const seg = segmentAt(axis, t);
133
+ if (!seg)
134
+ return 0;
135
+ const span = seg.end.getTime() - seg.start.getTime();
136
+ const frac = span > 0 ? (t - seg.start.getTime()) / span : 0;
137
+ return seg.x + frac * seg.px;
138
+ }
139
+ /** Map an x offset (px) back to a time across the piecewise axis. */
140
+ export function xToTime(x, axis) {
141
+ if (x <= 0)
142
+ return new Date(axis.start.getTime());
143
+ if (x >= axis.totalPx)
144
+ return new Date(axis.end.getTime());
145
+ for (const seg of axis.segments) {
146
+ if (x >= seg.x && x < seg.x + seg.px) {
147
+ const span = seg.end.getTime() - seg.start.getTime();
148
+ const frac = seg.px > 0 ? (x - seg.x) / seg.px : 0;
149
+ return new Date(seg.start.getTime() + frac * span);
150
+ }
151
+ }
152
+ return new Date(axis.end.getTime());
153
+ }
154
+ /** The built-in zoom ladder, most zoomed-in first (minute detail -> months). */
155
+ export const zoomPresets = [
156
+ { id: '5min', label: '5 min', tickMinutes: 5, pxPerTick: 24, majorUnit: 'hour' },
157
+ { id: '15min', label: '15 min', tickMinutes: 15, pxPerTick: 30, majorUnit: 'hour' },
158
+ { id: '30min', label: '30 min', tickMinutes: 30, pxPerTick: 40, majorUnit: 'day' },
159
+ { id: 'hour', label: 'Hourly', tickMinutes: 60, pxPerTick: 50, majorUnit: 'day' },
160
+ { id: '3hour', label: '3 hours', tickMinutes: 180, pxPerTick: 44, majorUnit: 'day' },
161
+ { id: 'day', label: 'Daily', tickMinutes: 1440, pxPerTick: 64, majorUnit: 'week' },
162
+ { id: 'week', label: 'Weekly', tickMinutes: 10080, pxPerTick: 80, majorUnit: 'month' },
163
+ { id: 'month', label: 'Monthly', tickMinutes: 43200, pxPerTick: 72, majorUnit: 'quarter' },
164
+ ];
165
+ /**
166
+ * Resolve `zoom` to a {@link ZoomLevel}. A `ZoomLevel` passes through; a number is
167
+ * an index into `ladder` (clamped). Returns the pixel density too via
168
+ * `pxPerMinute = pxPerTick / tickMinutes` (use it as `buildAxis`'s `pxPerMinute`).
169
+ */
170
+ export function resolveZoom(zoom, ladder = zoomPresets) {
171
+ let level;
172
+ if (typeof zoom === 'number') {
173
+ const i = Math.max(0, Math.min(ladder.length - 1, Math.round(zoom)));
174
+ level = ladder[i];
175
+ }
176
+ else {
177
+ level = zoom;
178
+ }
179
+ return { level, pxPerMinute: level.pxPerTick / level.tickMinutes };
180
+ }
@@ -4,19 +4,17 @@
4
4
  * no DOM; the renderer folds these into its `bookingBlocked` guard. Callers supply
5
5
  * "now" (never `Date.now()` here) so the rules stay deterministic + unit-testable.
6
6
  */
7
-
8
- const MS_MIN = 60_000
9
-
10
7
  /** A booked interval on a resource, keyed for exclusion, carrying optional data
11
8
  * (e.g. a location) so a per-neighbour gap function can read it. */
12
- export type BusyEvent<T = unknown> = { start: Date; end: Date; key: string; data?: T }
13
-
9
+ export type BusyEvent<T = unknown> = {
10
+ start: Date;
11
+ end: Date;
12
+ key: string;
13
+ data?: T;
14
+ };
14
15
  /** Minutes of gap required before/after, either a flat number or a function of the
15
16
  * neighbouring booking (used for travel time between locations). */
16
- export type GapMin<T = unknown> = number | ((neighbour: BusyEvent<T>) => number)
17
-
18
- const gapOf = <T>(g: GapMin<T>, ev: BusyEvent<T>): number => (typeof g === 'function' ? g(ev) : g)
19
-
17
+ export type GapMin<T = unknown> = number | ((neighbour: BusyEvent<T>) => number);
20
18
  /**
21
19
  * True when placing `[start, end]` keeps at least the required gap from every other
22
20
  * booking in `events` (same resource): `gapBefore` minutes clear of the previous
@@ -24,40 +22,9 @@ const gapOf = <T>(g: GapMin<T>, ev: BusyEvent<T>): number => (typeof g === 'func
24
22
  * overlap always fails. `gapBefore` / `gapAfter` may be functions of the neighbour
25
23
  * for travel time. `excludeKey` skips the booking being moved.
26
24
  */
27
- export function respectsBuffer<T = unknown>(
28
- start: Date,
29
- end: Date,
30
- events: ReadonlyArray<BusyEvent<T>>,
31
- gapBefore: GapMin<T>,
32
- gapAfter: GapMin<T>,
33
- excludeKey?: string,
34
- ): boolean {
35
- const s = start.getTime()
36
- const e = end.getTime()
37
- for (const ev of events) {
38
- if (ev.key === excludeKey) continue
39
- const es = ev.start.getTime()
40
- const ee = ev.end.getTime()
41
- if (s < ee && e > es) return false // direct overlap
42
- if (ee <= s) {
43
- if (s - ee < gapOf(gapBefore, ev) * MS_MIN) return false
44
- } else if (es >= e) {
45
- if (es - e < gapOf(gapAfter, ev) * MS_MIN) return false
46
- }
47
- }
48
- return true
49
- }
50
-
25
+ export declare function respectsBuffer<T = unknown>(start: Date, end: Date, events: ReadonlyArray<BusyEvent<T>>, gapBefore: GapMin<T>, gapAfter: GapMin<T>, excludeKey?: string): boolean;
51
26
  /** True when the booking's duration is within `[minMin, maxMin]` (either bound may
52
27
  * be undefined = unbounded). */
53
- export function withinDurationBounds(start: Date, end: Date, minMin?: number, maxMin?: number): boolean {
54
- const dur = (end.getTime() - start.getTime()) / MS_MIN
55
- if (minMin != null && dur < minMin - 1e-9) return false
56
- if (maxMin != null && dur > maxMin + 1e-9) return false
57
- return true
58
- }
59
-
28
+ export declare function withinDurationBounds(start: Date, end: Date, minMin?: number, maxMin?: number): boolean;
60
29
  /** True when the booking starts at least `leadMin` minutes after `now` (min notice). */
61
- export function afterLead(start: Date, now: Date, leadMin: number): boolean {
62
- return start.getTime() >= now.getTime() + leadMin * MS_MIN
63
- }
30
+ export declare function afterLead(start: Date, now: Date, leadMin: number): boolean;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * scheduler-booking - pure booking-rule helpers for Scheduler Pro: buffers /
3
+ * travel time between bookings, minimum lead time, and duration bounds. No Svelte,
4
+ * no DOM; the renderer folds these into its `bookingBlocked` guard. Callers supply
5
+ * "now" (never `Date.now()` here) so the rules stay deterministic + unit-testable.
6
+ */
7
+ const MS_MIN = 60000;
8
+ const gapOf = (g, ev) => (typeof g === 'function' ? g(ev) : g);
9
+ /**
10
+ * True when placing `[start, end]` keeps at least the required gap from every other
11
+ * booking in `events` (same resource): `gapBefore` minutes clear of the previous
12
+ * booking's end and `gapAfter` minutes clear of the next booking's start. A direct
13
+ * overlap always fails. `gapBefore` / `gapAfter` may be functions of the neighbour
14
+ * for travel time. `excludeKey` skips the booking being moved.
15
+ */
16
+ export function respectsBuffer(start, end, events, gapBefore, gapAfter, excludeKey) {
17
+ const s = start.getTime();
18
+ const e = end.getTime();
19
+ for (const ev of events) {
20
+ if (ev.key === excludeKey)
21
+ continue;
22
+ const es = ev.start.getTime();
23
+ const ee = ev.end.getTime();
24
+ if (s < ee && e > es)
25
+ return false; // direct overlap
26
+ if (ee <= s) {
27
+ if (s - ee < gapOf(gapBefore, ev) * MS_MIN)
28
+ return false;
29
+ }
30
+ else if (es >= e) {
31
+ if (es - e < gapOf(gapAfter, ev) * MS_MIN)
32
+ return false;
33
+ }
34
+ }
35
+ return true;
36
+ }
37
+ /** True when the booking's duration is within `[minMin, maxMin]` (either bound may
38
+ * be undefined = unbounded). */
39
+ export function withinDurationBounds(start, end, minMin, maxMin) {
40
+ const dur = (end.getTime() - start.getTime()) / MS_MIN;
41
+ if (minMin != null && dur < minMin - 1e-9)
42
+ return false;
43
+ if (maxMin != null && dur > maxMin + 1e-9)
44
+ return false;
45
+ return true;
46
+ }
47
+ /** True when the booking starts at least `leadMin` minutes after `now` (min notice). */
48
+ export function afterLead(start, now, leadMin) {
49
+ return start.getTime() >= now.getTime() + leadMin * MS_MIN;
50
+ }
@@ -0,0 +1,177 @@
1
+ /**
2
+ * SchedulerProConfig - the Enterprise ("Scheduler Pro") superset of the free grid
3
+ * {@link SchedulerConfig}. The base scheduler prop + its config type ship in
4
+ * `@svgrid/grid`; the Pro renderer (SvGridScheduler) reads these extra fields at
5
+ * runtime (the renderer is registered untyped, so nothing in the free grid needs
6
+ * to know about them). Consumers using Pro features type their config as
7
+ * `SchedulerProConfig` - it is structurally assignable to the `scheduler` prop.
8
+ *
9
+ * All three feature waves live here:
10
+ * - Wave A: event dependencies + auto-reschedule
11
+ * - Wave B: multi-assignment + resource histogram + column summary
12
+ * - Wave C: non-working-time collapse + continuous zoom
13
+ */
14
+ import type { SchedulerConfig, SchedulerResource, TableFeatures, RowData } from '@svgrid/grid';
15
+ import type { SchedulerDependency } from './scheduler-dependencies';
16
+ import type { SchedulerAssignment } from './scheduler-assignments';
17
+ import type { ColumnReducer } from './scheduler-summary';
18
+ import type { ZoomLevel } from './scheduler-axis';
19
+ import type { SchedulerResourceGroup } from './scheduler-resource-tree';
20
+ export type SchedulerProConfig<TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData> = SchedulerConfig<TFeatures, TData> & {
21
+ /**
22
+ * Event dependency links (predecessor -> successor). `from` / `to` are row ids
23
+ * (the grid's `getRowId`). Draw arrows between linked events and, with
24
+ * `autoReschedule`, push successors forward when a predecessor moves.
25
+ */
26
+ dependencies?: ReadonlyArray<SchedulerDependency>;
27
+ /**
28
+ * Per-row field holding this row's dependency links (as `SchedulerDependency[]`
29
+ * or a `to`-key list). An alternative to the flat `dependencies` list.
30
+ */
31
+ dependencyField?: keyof TData & string;
32
+ /**
33
+ * Cascade successors forward on move / resize to keep every link legal.
34
+ * Defaults to `true` when any dependency is present.
35
+ */
36
+ autoReschedule?: boolean;
37
+ /** When cascading, skip non-working intervals (business hours / shifts). */
38
+ dependencyRespectWorkingTime?: boolean;
39
+ /** Fired with the cascaded shifts after a move / resize (never mutates rows). */
40
+ onDependenciesChange?: (moves: Array<{
41
+ id: string;
42
+ start: Date;
43
+ end: Date;
44
+ }>) => void;
45
+ /** Fired when the user draws a new link (drag from one event edge onto another). */
46
+ onDependencyAdd?: (dep: SchedulerDependency) => void;
47
+ /** Fired when the user removes a link (arrow context menu). */
48
+ onDependencyRemove?: (id: string) => void;
49
+ /**
50
+ * Group the timeline's resource rows into a collapsible tree. `resourceGroups`
51
+ * defines the group nodes (nest via `parentId`); `resourceGroupOf` maps each
52
+ * resource to its group id. Resources with no / unknown group trail ungrouped.
53
+ */
54
+ resourceGroups?: ReadonlyArray<SchedulerResourceGroup>;
55
+ resourceGroupOf?: (resource: SchedulerResource) => string | undefined;
56
+ /** Allow collapsing group headers (default true when `resourceGroups` is set). */
57
+ collapsibleGroups?: boolean;
58
+ /** localStorage key to persist which groups are collapsed. */
59
+ groupPersistKey?: string;
60
+ /**
61
+ * Restrict which events may be placed on which resources (provider matching,
62
+ * room type, technician skills). Return `false` and a drag / resize / create
63
+ * onto that resource is rejected + a "Not eligible" flash. The most flexible
64
+ * form; takes precedence over the declarative `requiresField` shortcut.
65
+ */
66
+ eligible?: (event: TData, resource: SchedulerResource) => boolean;
67
+ /**
68
+ * Declarative shortcut: a per-event field holding the required skill tag(s).
69
+ * An event is eligible for a resource only if the resource's skills (via
70
+ * `resourceSkillsOf`, or a `skills` array on the resource) include every tag.
71
+ */
72
+ requiresField?: keyof TData & string;
73
+ /** Where a resource's skill tags come from (default: a `skills` array on it). */
74
+ resourceSkillsOf?: (resource: SchedulerResource) => ReadonlyArray<string> | undefined;
75
+ /** Required clear minutes before / after each booking on a resource (a flat
76
+ * number, or a function of the event). A move / create that breaks it is rejected. */
77
+ bufferBeforeMin?: number | ((event: TData) => number);
78
+ bufferAfterMin?: number | ((event: TData) => number);
79
+ /** Minimum notice: a booking must start at least this many minutes after "now". */
80
+ minLeadMin?: number;
81
+ /** Min / max booking duration in minutes. */
82
+ minDurationMin?: number;
83
+ maxDurationMin?: number;
84
+ /** Travel time (minutes) required between two consecutive bookings on the same
85
+ * resource - widens the buffer by the trip between their locations. */
86
+ travelTimeOf?: (from: TData, to: TData) => number;
87
+ /**
88
+ * Show the open, bookable slots of a fixed duration per resource in the Day
89
+ * timeline - the free time left after existing bookings, buffers and lead time.
90
+ * Clicking a slot books it (via `onSlotPick`, else `onEventAdd`).
91
+ */
92
+ bookable?: {
93
+ durationMin: number;
94
+ stepMin?: number;
95
+ };
96
+ /** Fired when a bookable slot is clicked. Falls back to `onEventAdd`. */
97
+ onSlotPick?: (start: Date, end: Date, resourceId?: string) => void;
98
+ /**
99
+ * Overlay several calendars, each colour-coded and toggleable from a legend.
100
+ * Events map to a calendar via `calendarField`; a calendar's colour becomes the
101
+ * event's default (unless `colorField` overrides), and hiding a calendar filters
102
+ * its events out of every view.
103
+ */
104
+ calendars?: ReadonlyArray<{
105
+ id: string;
106
+ title: string;
107
+ color?: string;
108
+ hidden?: boolean;
109
+ }>;
110
+ calendarField?: keyof TData & string;
111
+ /**
112
+ * External busy intervals to shade on a resource's timeline row - times it is
113
+ * unavailable that aren't events in this scheduler (its own calendar). Combine
114
+ * with the exported `commonFree` helper to find a meeting time across attendees.
115
+ */
116
+ freeBusyOf?: (resource: SchedulerResource) => ReadonlyArray<{
117
+ start: Date;
118
+ end: Date;
119
+ }>;
120
+ /**
121
+ * Many-to-many event <-> resource assignments. When set, one event can appear
122
+ * under several resources; drives the timeline / resource-column bucketing
123
+ * instead of the single `resourceField`.
124
+ */
125
+ assignments?: ReadonlyArray<SchedulerAssignment>;
126
+ /** Per-row field holding an array of resource ids (alt to the flat `assignments`). */
127
+ assignmentField?: keyof TData & string;
128
+ /**
129
+ * Show a per-resource utilization histogram band (timeline views). `true` uses
130
+ * defaults; the object form sets a capacity field + band height (px).
131
+ */
132
+ resourceHistogram?: boolean | {
133
+ capacityField?: keyof SchedulerResource & string;
134
+ height?: number;
135
+ };
136
+ /**
137
+ * Tint each resource row's BACKGROUND by load per time-bucket (a utilization
138
+ * heatmap) - distinct from the histogram bar strip. `true` uses defaults; the
139
+ * object form sets the capacity field (over that = a hot / red cell).
140
+ */
141
+ utilizationHeatmap?: boolean | {
142
+ capacityField?: keyof SchedulerResource & string;
143
+ };
144
+ /**
145
+ * A per-time-column summary strip (counts / sums / a custom reducer) aligned to
146
+ * the axis. `false` (default) hides it.
147
+ */
148
+ columnSummary?: false | {
149
+ reducer: ColumnReducer<TData>;
150
+ label?: string;
151
+ position?: 'top' | 'bottom';
152
+ };
153
+ /** Fired when an event is dragged from one resource column to another (reassign). */
154
+ onAssignmentChange?: (change: {
155
+ eventId: string;
156
+ from?: string;
157
+ to?: string;
158
+ }) => void;
159
+ /** Compress non-working hours out of the time axis (nights collapse to a gap). */
160
+ collapseNonWorking?: boolean;
161
+ /** Compress `nonWorkingDays` (e.g. weekends) out of the timeline axis. */
162
+ collapseWeekends?: boolean;
163
+ /** Width (px) of a collapsed-gap marker. Default 12; `0` omits it entirely. */
164
+ collapsedGapPx?: number;
165
+ /**
166
+ * Minimum width (px) of one timeline minor tick (a day in Week / Month). Widens
167
+ * the timeline - and scrolls it horizontally - so narrow, sub-day events (e.g.
168
+ * hour-scale shifts) have room for their label. Overrides the per-view default.
169
+ */
170
+ timelineTickMinWidth?: number;
171
+ /** Continuous zoom preset - supersedes `slotSizes` when set (minute .. year). */
172
+ zoom?: number | ZoomLevel;
173
+ /** Custom zoom-preset ladder (replaces the built-in one). */
174
+ zoomLevels?: ReadonlyArray<ZoomLevel>;
175
+ /** Fired when the zoom level changes (slider / wheel). */
176
+ onZoomChange?: (level: ZoomLevel) => void;
177
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,89 @@
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
+ /** The four dependency kinds. `FS` (finish-to-start) is the default. */
19
+ export type DependencyType = 'FS' | 'SS' | 'FF' | 'SF';
20
+ /** A link from a predecessor event (`from`) to a successor (`to`). Keys are row
21
+ * keys (the scheduler's `getRowId`). `lag` is minutes; negative = a lead. */
22
+ export type SchedulerDependency = {
23
+ id: string;
24
+ from: string;
25
+ to: string;
26
+ type?: DependencyType;
27
+ lag?: number;
28
+ };
29
+ /** The resolved [start, end) of one event, keyed by row key in a time map. */
30
+ export type EventTimes = {
31
+ start: Date;
32
+ end: Date;
33
+ };
34
+ /** Indexed view of a dependency set: successors by predecessor, predecessors by
35
+ * successor, and lookup by id. Built once, reused by cascade / violations. */
36
+ export type DependencyGraph = {
37
+ deps: SchedulerDependency[];
38
+ /** predecessor key -> outgoing links */
39
+ succ: Map<string, SchedulerDependency[]>;
40
+ /** successor key -> incoming links */
41
+ pred: Map<string, SchedulerDependency[]>;
42
+ byId: Map<string, SchedulerDependency>;
43
+ /** every key that appears as a `from` or `to`. */
44
+ nodes: Set<string>;
45
+ };
46
+ /** Build the adjacency indexes for `deps`. */
47
+ export declare function buildDependencyGraph(deps: ReadonlyArray<SchedulerDependency>): DependencyGraph;
48
+ /**
49
+ * Kahn topological order of the graph's nodes. Returns `{ order, cyclicIds }`:
50
+ * `order` is a safe processing order for the acyclic part (predecessors before
51
+ * successors); `cyclicIds` are the ids of links that could not be ordered because
52
+ * they take part in a cycle (cascade ignores them so it can never loop).
53
+ */
54
+ export declare function topoOrder(graph: DependencyGraph): {
55
+ order: string[];
56
+ cyclicIds: Set<string>;
57
+ };
58
+ /** True when `deps` contain a cycle. */
59
+ export declare function hasCycle(deps: ReadonlyArray<SchedulerDependency>): boolean;
60
+ /**
61
+ * The earliest legal start for the successor of `dep`, given the predecessor's
62
+ * resolved times and the successor's own `durationMs` (kept constant). Encodes the
63
+ * FS / SS / FF / SF semantics plus `lag` (minutes).
64
+ */
65
+ export declare function requiredStart(predTimes: EventTimes, dep: SchedulerDependency, successorDurationMs: number): Date;
66
+ /** Options for {@link cascade}. */
67
+ export type CascadeOptions = {
68
+ /**
69
+ * Optional working-time snap: given a proposed start, return the next start that
70
+ * begins inside working time (the renderer supplies this from the scheduler's
71
+ * shifts / business hours; omit for calendar-time scheduling).
72
+ */
73
+ snapForward?: (start: Date) => Date;
74
+ };
75
+ /**
76
+ * Forward-cascade successors so every dependency is satisfied. `times` maps row
77
+ * key -> current [start,end] (the just-moved predecessor already carries its NEW
78
+ * time). Processing runs in topological order, so multi-hop chains and diamonds
79
+ * (two paths into one successor) resolve to the latest required start in a single
80
+ * pass. Each shifted event keeps its duration. Returns ONLY the events whose times
81
+ * changed (never the untouched ones, never the moved predecessor itself unless a
82
+ * link also forces it). Cyclic links are ignored.
83
+ */
84
+ export declare function cascade(times: ReadonlyMap<string, EventTimes>, deps: ReadonlyArray<SchedulerDependency>, opts?: CascadeOptions): Map<string, EventTimes>;
85
+ /**
86
+ * The dependencies currently unsatisfied by `times` (successor starts too early
87
+ * for the link). Used to paint violation-state arrows. Cyclic links are skipped.
88
+ */
89
+ export declare function violations(times: ReadonlyMap<string, EventTimes>, deps: ReadonlyArray<SchedulerDependency>): SchedulerDependency[];