@svgrid/enterprise 2.5.2 → 2.6.0
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.
- package/dist/SvAlertRuleEditor.svelte.d.ts +13 -0
- package/dist/SvAlertsManager.svelte.d.ts +14 -0
- package/dist/SvAlertsPanel.svelte.d.ts +9 -0
- package/dist/SvAuthGate.svelte.d.ts +22 -0
- package/dist/SvBoard.svelte.d.ts +35 -0
- package/dist/SvExportMenu.svelte.d.ts +61 -0
- package/dist/SvExpressionEditor.svelte.d.ts +12 -0
- package/dist/SvFileInput.svelte.d.ts +20 -0
- package/dist/SvGridAlerts.svelte.d.ts +77 -0
- package/dist/SvGridBoard.svelte.d.ts +30 -0
- package/dist/SvGridEditPanel.svelte.d.ts +73 -0
- package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
- package/dist/SvGridScheduler.svelte.d.ts +30 -0
- package/dist/SvImportDialog.svelte.d.ts +88 -0
- package/dist/SvLookupInput.svelte.d.ts +21 -0
- package/dist/SvPivotDesigner.svelte.d.ts +176 -0
- package/dist/SvRecordDetail.svelte.d.ts +58 -0
- package/dist/SvSchedule.svelte.d.ts +29 -0
- package/dist/SvSchemaChart.svelte.d.ts +61 -0
- package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
- package/dist/alerts/alert-engine-attach.d.ts +79 -0
- package/dist/alerts/alert-engine-attach.js +106 -0
- package/dist/alerts/alert-engine.d.ts +42 -0
- package/dist/alerts/alert-engine.js +196 -0
- package/dist/alerts/alert-formats.d.ts +26 -0
- package/dist/alerts/alert-formats.js +58 -0
- package/dist/alerts/alert-observer.d.ts +54 -0
- package/dist/alerts/alert-observer.js +156 -0
- package/dist/alerts/alert-scheduler.d.ts +30 -0
- package/dist/alerts/alert-scheduler.js +54 -0
- package/dist/alerts/alert-storage.d.ts +31 -0
- package/dist/alerts/alert-storage.js +92 -0
- package/dist/alerts/alert-store.svelte.d.ts +24 -0
- package/dist/alerts/alert-store.svelte.js +69 -0
- package/dist/alerts/alert-types.d.ts +86 -0
- package/dist/alerts/alert-types.js +1 -0
- package/dist/alerts.d.ts +2 -0
- package/{src/alerts.ts → dist/alerts.js} +9 -9
- package/dist/board.d.ts +7 -0
- package/{src/board.ts → dist/board.js} +13 -14
- package/dist/cdn/svgrid-enterprise.svelte-external.js +2987 -2981
- package/dist/designer/assets/{index-CM5xvaOy.js → index-BF0UH638.js} +3 -3
- package/dist/designer/assets/{src-D-ET9Mmo.js → src-BPJruwB9.js} +184 -184
- package/dist/designer/index.html +2 -2
- package/dist/edit-panel.d.ts +105 -0
- package/dist/edit-panel.js +350 -0
- package/dist/export-conditional.d.ts +31 -0
- package/dist/export-conditional.js +65 -0
- package/dist/export-ooxml.d.ts +93 -0
- package/dist/export-ooxml.js +385 -0
- package/dist/export-pdf.d.ts +107 -0
- package/dist/export-pdf.js +144 -0
- package/dist/export-print.d.ts +55 -0
- package/dist/export-print.js +91 -0
- package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
- package/dist/export-serialize.js +11 -0
- package/dist/export-xls.d.ts +26 -0
- package/dist/export-xls.js +157 -0
- package/dist/export.d.ts +323 -0
- package/dist/export.js +1021 -0
- package/dist/expressions/evaluate.d.ts +17 -0
- package/dist/expressions/evaluate.js +214 -0
- package/dist/expressions/expression-columns.d.ts +61 -0
- package/dist/expressions/expression-columns.js +72 -0
- package/dist/expressions/expression-types.d.ts +125 -0
- package/dist/expressions/expression-types.js +1 -0
- package/dist/expressions/parse.d.ts +25 -0
- package/dist/expressions/parse.js +537 -0
- package/dist/import.d.ts +232 -0
- package/dist/import.js +846 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +91 -0
- package/dist/install.d.ts +70 -0
- package/dist/install.js +61 -0
- package/dist/license-core.d.ts +37 -0
- package/dist/license-core.js +81 -0
- package/dist/license.d.ts +30 -0
- package/dist/license.js +139 -0
- package/dist/master-detail.d.ts +23 -0
- package/dist/master-detail.js +35 -0
- package/dist/node/studio.js +1 -1
- package/dist/pivot-chart.d.ts +28 -0
- package/dist/pivot-chart.js +71 -0
- package/dist/pivot-designer.d.ts +69 -0
- package/dist/pivot-designer.js +38 -0
- package/dist/pivot-enable.d.ts +6 -0
- package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
- package/dist/pivot.d.ts +111 -0
- package/dist/pivot.js +353 -0
- package/dist/print.d.ts +33 -0
- package/dist/print.js +61 -0
- package/dist/revoked.d.ts +1 -0
- package/{src/revoked.ts → dist/revoked.js} +5 -6
- package/dist/scheduler-assignments.d.ts +64 -0
- package/dist/scheduler-assignments.js +92 -0
- package/dist/scheduler-axis.d.ts +81 -0
- package/dist/scheduler-axis.js +180 -0
- package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
- package/dist/scheduler-booking.js +50 -0
- package/dist/scheduler-config.d.ts +177 -0
- package/dist/scheduler-config.js +1 -0
- package/dist/scheduler-dependencies.d.ts +89 -0
- package/dist/scheduler-dependencies.js +179 -0
- package/dist/scheduler-freebusy.d.ts +19 -0
- package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
- package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
- package/dist/scheduler-heatmap.js +41 -0
- package/dist/scheduler-resource-tree.d.ts +48 -0
- package/dist/scheduler-resource-tree.js +78 -0
- package/dist/scheduler-slots.d.ts +37 -0
- package/dist/scheduler-slots.js +80 -0
- package/dist/scheduler-summary.d.ts +41 -0
- package/dist/scheduler-summary.js +54 -0
- package/dist/scheduler.d.ts +7 -0
- package/{src/scheduler.ts → dist/scheduler.js} +13 -14
- package/dist/scheduling.d.ts +132 -0
- package/dist/scheduling.js +228 -0
- package/dist/schema-designer.d.ts +42 -0
- package/dist/schema-designer.js +117 -0
- package/dist/schema.d.ts +369 -0
- package/dist/schema.js +216 -0
- package/dist/smart-shim.d.ts +62 -0
- package/dist/smart-shim.js +34 -0
- package/dist/sources/aggregate.d.ts +43 -0
- package/dist/sources/aggregate.js +60 -0
- package/dist/sources/auth-supabase.d.ts +69 -0
- package/dist/sources/auth-supabase.js +39 -0
- package/dist/sources/dashboard.d.ts +65 -0
- package/dist/sources/dashboard.js +95 -0
- package/dist/sources/field-inference.d.ts +23 -0
- package/dist/sources/field-inference.js +52 -0
- package/dist/sources/filters.d.ts +35 -0
- package/dist/sources/filters.js +52 -0
- package/dist/sources/index.d.ts +18 -0
- package/dist/sources/index.js +18 -0
- package/dist/sources/introspect-supabase.d.ts +30 -0
- package/dist/sources/introspect-supabase.js +134 -0
- package/dist/sources/realtime-supabase.d.ts +37 -0
- package/dist/sources/realtime-supabase.js +52 -0
- package/dist/sources/relation-lookup.d.ts +50 -0
- package/dist/sources/relation-lookup.js +77 -0
- package/dist/sources/rest-adapters.d.ts +48 -0
- package/dist/sources/rest-adapters.js +85 -0
- package/dist/sources/rest.d.ts +38 -0
- package/dist/sources/rest.js +86 -0
- package/dist/sources/schema-from-columns.d.ts +37 -0
- package/dist/sources/schema-from-columns.js +48 -0
- package/dist/sources/supabase.d.ts +33 -0
- package/dist/sources/supabase.js +74 -0
- package/dist/sources/with-entity-rules.d.ts +25 -0
- package/dist/sources/with-entity-rules.js +47 -0
- package/dist/sources/with-relation-labels.d.ts +26 -0
- package/dist/sources/with-relation-labels.js +38 -0
- package/dist/staged-editing.d.ts +85 -0
- package/dist/staged-editing.js +0 -0
- package/dist/studio/bug-report.d.ts +61 -0
- package/dist/studio/bug-report.js +126 -0
- package/dist/studio/cli.d.ts +56 -0
- package/dist/studio/cli.js +70 -0
- package/dist/studio/copilot-core.d.ts +22 -0
- package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
- package/dist/studio/csv.d.ts +36 -0
- package/dist/studio/csv.js +173 -0
- package/dist/studio/db-connect-string.d.ts +45 -0
- package/dist/studio/db-connect-string.js +113 -0
- package/dist/studio/deploy-cli.d.ts +35 -0
- package/dist/studio/deploy-cli.js +81 -0
- package/dist/studio/emit-project.d.ts +77 -0
- package/dist/studio/emit-project.js +5389 -0
- package/dist/studio/emit-schema.d.ts +110 -0
- package/dist/studio/emit-schema.js +1128 -0
- package/dist/studio/index.d.ts +35 -0
- package/dist/studio/index.js +38 -0
- package/dist/studio/init-flow.d.ts +58 -0
- package/dist/studio/init-flow.js +451 -0
- package/dist/studio/introspect-db.d.ts +47 -0
- package/dist/studio/introspect-db.js +255 -0
- package/dist/studio/introspect-openapi.d.ts +19 -0
- package/dist/studio/introspect-openapi.js +244 -0
- package/dist/studio/introspect-prisma.d.ts +25 -0
- package/dist/studio/introspect-prisma.js +164 -0
- package/dist/studio/introspect.d.ts +35 -0
- package/dist/studio/introspect.js +306 -0
- package/dist/studio/project.d.ts +1327 -0
- package/dist/studio/project.js +1798 -0
- package/dist/studio/sample-data.d.ts +19 -0
- package/dist/studio/sample-data.js +207 -0
- package/dist/studio/samples/ats.d.ts +2 -0
- package/dist/studio/samples/ats.js +194 -0
- package/dist/studio/samples/clinic.d.ts +2 -0
- package/dist/studio/samples/clinic.js +171 -0
- package/dist/studio/samples/crm.d.ts +2 -0
- package/dist/studio/samples/crm.js +280 -0
- package/dist/studio/samples/datasets.d.ts +38 -0
- package/dist/studio/samples/datasets.js +296 -0
- package/dist/studio/samples/ecommerce.d.ts +2 -0
- package/dist/studio/samples/ecommerce.js +178 -0
- package/dist/studio/samples/events.d.ts +2 -0
- package/dist/studio/samples/events.js +192 -0
- package/dist/studio/samples/fleet.d.ts +2 -0
- package/dist/studio/samples/fleet.js +203 -0
- package/dist/studio/samples/gym.d.ts +2 -0
- package/dist/studio/samples/gym.js +205 -0
- package/dist/studio/samples/hr.d.ts +2 -0
- package/dist/studio/samples/hr.js +186 -0
- package/dist/studio/samples/index.d.ts +13 -0
- package/dist/studio/samples/index.js +44 -0
- package/dist/studio/samples/insurance.d.ts +2 -0
- package/dist/studio/samples/insurance.js +220 -0
- package/dist/studio/samples/inventory.d.ts +2 -0
- package/dist/studio/samples/inventory.js +204 -0
- package/dist/studio/samples/invoicing.d.ts +2 -0
- package/dist/studio/samples/invoicing.js +154 -0
- package/dist/studio/samples/library.d.ts +2 -0
- package/dist/studio/samples/library.js +171 -0
- package/dist/studio/samples/live-data.d.ts +5 -0
- package/dist/studio/samples/live-data.js +261 -0
- package/dist/studio/samples/projects.d.ts +2 -0
- package/dist/studio/samples/projects.js +203 -0
- package/dist/studio/samples/realestate.d.ts +2 -0
- package/dist/studio/samples/realestate.js +187 -0
- package/dist/studio/samples/restaurant.d.ts +2 -0
- package/dist/studio/samples/restaurant.js +180 -0
- package/dist/studio/samples/school.d.ts +2 -0
- package/dist/studio/samples/school.js +188 -0
- package/dist/studio/samples/shared.d.ts +142 -0
- package/dist/studio/samples/shared.js +164 -0
- package/dist/studio/samples/starter.d.ts +4 -0
- package/dist/studio/samples/starter.js +237 -0
- package/dist/studio/samples/subscriptions.d.ts +2 -0
- package/dist/studio/samples/subscriptions.js +175 -0
- package/dist/studio/samples/support.d.ts +2 -0
- package/dist/studio/samples/support.js +209 -0
- package/dist/studio/scaffold-app.d.ts +22 -0
- package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
- package/dist/studio/scaffold.d.ts +63 -0
- package/dist/studio/scaffold.js +346 -0
- package/dist/studio/screen-suites.d.ts +193 -0
- package/dist/studio/screen-suites.js +297 -0
- package/dist/studio/themes.d.ts +34 -0
- package/dist/studio/themes.js +41 -0
- package/dist/studio/ui-components.d.ts +89 -0
- package/dist/studio/ui-components.generated.d.ts +29 -0
- package/dist/studio/ui-components.generated.js +7139 -0
- package/dist/studio/ui-components.js +673 -0
- package/dist/studio/user-error.d.ts +23 -0
- package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
- package/dist/studio/verify.d.ts +34 -0
- package/dist/studio/verify.js +47 -0
- package/dist/sveltekit/in-memory.d.ts +14 -0
- package/dist/sveltekit/in-memory.js +113 -0
- package/dist/sveltekit/index.d.ts +6 -0
- package/dist/sveltekit/index.js +5 -0
- package/dist/sveltekit/query-plan.d.ts +44 -0
- package/dist/sveltekit/query-plan.js +76 -0
- package/dist/sveltekit/sql-source.d.ts +47 -0
- package/dist/sveltekit/sql-source.js +106 -0
- package/dist/sveltekit/sql.d.ts +48 -0
- package/dist/sveltekit/sql.js +73 -0
- package/dist/sveltekit/transport.d.ts +209 -0
- package/dist/sveltekit/transport.js +219 -0
- package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
- package/dist/sveltekit/types.js +1 -0
- package/dist/upgrade-prompt.d.ts +16 -0
- package/dist/upgrade-prompt.js +141 -0
- package/dist/version.d.ts +13 -0
- package/{src/version.ts → dist/version.js} +1 -1
- package/dist/watermark.d.ts +2 -0
- package/dist/watermark.js +146 -0
- package/package.json +26 -24
- package/src/SvBoard.dom.test.ts +0 -67
- package/src/SvGridAlerts.dom.test.ts +0 -113
- package/src/SvGridEditPanel.dom.test.ts +0 -320
- package/src/SvRecordDetail.dom.test.ts +0 -137
- package/src/SvSchedule.dom.test.ts +0 -57
- package/src/ai-export-pdf.dom.test.ts +0 -77
- package/src/ai-export-xlsx.dom.test.ts +0 -90
- package/src/ai-export.dom.test.ts +0 -114
- package/src/alerts/alert-engine-attach.ts +0 -165
- package/src/alerts/alert-engine.test.ts +0 -135
- package/src/alerts/alert-engine.ts +0 -260
- package/src/alerts/alert-formats.test.ts +0 -87
- package/src/alerts/alert-formats.ts +0 -77
- package/src/alerts/alert-observer.test.ts +0 -189
- package/src/alerts/alert-observer.ts +0 -208
- package/src/alerts/alert-scheduler.ts +0 -96
- package/src/alerts/alert-storage.test.ts +0 -54
- package/src/alerts/alert-storage.ts +0 -116
- package/src/alerts/alert-store.svelte.ts +0 -80
- package/src/alerts/alert-types.ts +0 -94
- package/src/board.dom.test.ts +0 -941
- package/src/edit-panel.test.ts +0 -322
- package/src/edit-panel.ts +0 -379
- package/src/export-conditional.test.ts +0 -60
- package/src/export-conditional.ts +0 -94
- package/src/export-ooxml.test.ts +0 -152
- package/src/export-ooxml.ts +0 -489
- package/src/export-pdf.test.ts +0 -138
- package/src/export-pdf.ts +0 -245
- package/src/export-print.test.ts +0 -66
- package/src/export-print.ts +0 -132
- package/src/export-serialize.test.ts +0 -56
- package/src/export-xls.ts +0 -199
- package/src/export-xlsx-roundtrip.test.ts +0 -120
- package/src/export-xlsx.test.ts +0 -150
- package/src/export.test.ts +0 -349
- package/src/export.ts +0 -1464
- package/src/expressions/evaluate.test.ts +0 -111
- package/src/expressions/evaluate.ts +0 -237
- package/src/expressions/expression-columns.ts +0 -133
- package/src/expressions/expression-types.ts +0 -84
- package/src/expressions/parse.test.ts +0 -106
- package/src/expressions/parse.ts +0 -610
- package/src/import-automap.test.ts +0 -131
- package/src/import-hardening.test.ts +0 -158
- package/src/import.test.ts +0 -415
- package/src/import.ts +0 -1044
- package/src/index.ts +0 -569
- package/src/install.ts +0 -154
- package/src/license-core.test.ts +0 -23
- package/src/license-core.ts +0 -107
- package/src/license-expiry.test.ts +0 -127
- package/src/license.ts +0 -137
- package/src/master-detail.test.ts +0 -61
- package/src/master-detail.ts +0 -42
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
- package/src/pivot-chart.test.ts +0 -86
- package/src/pivot-chart.ts +0 -112
- package/src/pivot-designer.ts +0 -101
- package/src/pivot.test.ts +0 -335
- package/src/pivot.ts +0 -578
- package/src/print.ts +0 -107
- package/src/scheduler-assignments.test.ts +0 -97
- package/src/scheduler-assignments.ts +0 -134
- package/src/scheduler-axis.test.ts +0 -108
- package/src/scheduler-axis.ts +0 -238
- package/src/scheduler-booking.test.ts +0 -57
- package/src/scheduler-config.ts +0 -179
- package/src/scheduler-dependencies.test.ts +0 -155
- package/src/scheduler-dependencies.ts +0 -223
- package/src/scheduler-freebusy.test.ts +0 -41
- package/src/scheduler-heatmap.test.ts +0 -39
- package/src/scheduler-resource-tree.test.ts +0 -84
- package/src/scheduler-resource-tree.ts +0 -107
- package/src/scheduler-slots.test.ts +0 -53
- package/src/scheduler-slots.ts +0 -94
- package/src/scheduler-summary.test.ts +0 -47
- package/src/scheduler-summary.ts +0 -81
- package/src/scheduling.test.ts +0 -194
- package/src/scheduling.ts +0 -293
- package/src/schema-designer.test.ts +0 -121
- package/src/schema-designer.ts +0 -142
- package/src/schema.test.ts +0 -268
- package/src/schema.ts +0 -562
- package/src/smart-shim.ts +0 -107
- package/src/sources/aggregate.test.ts +0 -79
- package/src/sources/aggregate.ts +0 -102
- package/src/sources/auth-supabase.test.ts +0 -80
- package/src/sources/auth-supabase.ts +0 -87
- package/src/sources/dashboard.kpi.test.ts +0 -50
- package/src/sources/dashboard.test.ts +0 -61
- package/src/sources/dashboard.ts +0 -136
- package/src/sources/field-inference.test.ts +0 -60
- package/src/sources/field-inference.ts +0 -63
- package/src/sources/filters.test.ts +0 -58
- package/src/sources/filters.ts +0 -70
- package/src/sources/index.ts +0 -67
- package/src/sources/introspect-supabase.test.ts +0 -112
- package/src/sources/introspect-supabase.ts +0 -139
- package/src/sources/realtime-supabase.test.ts +0 -93
- package/src/sources/realtime-supabase.ts +0 -99
- package/src/sources/relation-lookup.test.ts +0 -99
- package/src/sources/relation-lookup.ts +0 -128
- package/src/sources/rest-adapters.test.ts +0 -95
- package/src/sources/rest-adapters.ts +0 -120
- package/src/sources/rest.test.ts +0 -104
- package/src/sources/rest.ts +0 -129
- package/src/sources/schema-from-columns.test.ts +0 -106
- package/src/sources/schema-from-columns.ts +0 -88
- package/src/sources/supabase.test.ts +0 -110
- package/src/sources/supabase.ts +0 -99
- package/src/sources/with-entity-rules.test.ts +0 -104
- package/src/sources/with-entity-rules.ts +0 -78
- package/src/sources/with-relation-labels.test.ts +0 -75
- package/src/sources/with-relation-labels.ts +0 -73
- package/src/staged-editing.ts +0 -0
- package/src/studio/bug-report.test.ts +0 -101
- package/src/studio/bug-report.ts +0 -165
- package/src/studio/cli.test.ts +0 -187
- package/src/studio/cli.ts +0 -117
- package/src/studio/copilot-core.test.ts +0 -45
- package/src/studio/csv.test.ts +0 -90
- package/src/studio/csv.ts +0 -165
- package/src/studio/db-connect-string.test.ts +0 -94
- package/src/studio/db-connect-string.ts +0 -128
- package/src/studio/deploy-cli.test.ts +0 -56
- package/src/studio/deploy-cli.ts +0 -100
- package/src/studio/emit-project.test.ts +0 -3324
- package/src/studio/emit-project.ts +0 -5377
- package/src/studio/emit-schema.test.ts +0 -111
- package/src/studio/emit-schema.ts +0 -1181
- package/src/studio/index.ts +0 -380
- package/src/studio/init-flow.test.ts +0 -514
- package/src/studio/init-flow.ts +0 -556
- package/src/studio/introspect-db.test.ts +0 -186
- package/src/studio/introspect-db.ts +0 -312
- package/src/studio/introspect-openapi.test.ts +0 -84
- package/src/studio/introspect-openapi.ts +0 -252
- package/src/studio/introspect-prisma.test.ts +0 -99
- package/src/studio/introspect-prisma.ts +0 -175
- package/src/studio/introspect.test.ts +0 -172
- package/src/studio/introspect.ts +0 -310
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
- package/src/studio/pipeline.test.ts +0 -42
- package/src/studio/project-robust.test.ts +0 -157
- package/src/studio/project.test.ts +0 -929
- package/src/studio/project.ts +0 -2394
- package/src/studio/sample-data.test.ts +0 -58
- package/src/studio/sample-data.ts +0 -203
- package/src/studio/samples/ats.ts +0 -202
- package/src/studio/samples/clinic.ts +0 -179
- package/src/studio/samples/crm.ts +0 -291
- package/src/studio/samples/datasets.test.ts +0 -84
- package/src/studio/samples/datasets.ts +0 -340
- package/src/studio/samples/ecommerce.ts +0 -187
- package/src/studio/samples/events.ts +0 -201
- package/src/studio/samples/fleet.ts +0 -213
- package/src/studio/samples/gym.ts +0 -215
- package/src/studio/samples/hr.ts +0 -195
- package/src/studio/samples/index.ts +0 -55
- package/src/studio/samples/insurance.ts +0 -229
- package/src/studio/samples/inventory.ts +0 -213
- package/src/studio/samples/invoicing.ts +0 -162
- package/src/studio/samples/library.ts +0 -180
- package/src/studio/samples/live-data.test.ts +0 -99
- package/src/studio/samples/live-data.ts +0 -306
- package/src/studio/samples/projects.ts +0 -212
- package/src/studio/samples/realestate.ts +0 -196
- package/src/studio/samples/restaurant.ts +0 -189
- package/src/studio/samples/samples.test.ts +0 -304
- package/src/studio/samples/school.ts +0 -197
- package/src/studio/samples/seed-floor.test.ts +0 -25
- package/src/studio/samples/shared.ts +0 -237
- package/src/studio/samples/starter.ts +0 -251
- package/src/studio/samples/subscriptions.ts +0 -183
- package/src/studio/samples/support.ts +0 -216
- package/src/studio/scaffold-app.test.ts +0 -91
- package/src/studio/scaffold.test.ts +0 -192
- package/src/studio/scaffold.ts +0 -390
- package/src/studio/screen-suites.test.ts +0 -269
- package/src/studio/screen-suites.ts +0 -448
- package/src/studio/themes.ts +0 -62
- package/src/studio/ui-components-surface.test.ts +0 -185
- package/src/studio/ui-components.generated.ts +0 -7154
- package/src/studio/ui-components.ts +0 -742
- package/src/studio/verify.test.ts +0 -47
- package/src/studio/verify.ts +0 -79
- package/src/sveltekit/in-memory.test.ts +0 -104
- package/src/sveltekit/in-memory.ts +0 -129
- package/src/sveltekit/index.ts +0 -24
- package/src/sveltekit/query-plan.test.ts +0 -109
- package/src/sveltekit/query-plan.ts +0 -125
- package/src/sveltekit/sql-source.test.ts +0 -198
- package/src/sveltekit/sql-source.ts +0 -171
- package/src/sveltekit/sql.test.ts +0 -80
- package/src/sveltekit/sql.ts +0 -131
- package/src/sveltekit/transport-scope.test.ts +0 -125
- package/src/sveltekit/transport.test.ts +0 -201
- package/src/sveltekit/transport.ts +0 -373
- package/src/upgrade-prompt.test.ts +0 -71
- package/src/upgrade-prompt.ts +0 -162
- package/src/version.test.ts +0 -17
- package/src/watermark.test.ts +0 -97
- package/src/watermark.ts +0 -156
- /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
- /package/{src → dist}/SvAlertsManager.svelte +0 -0
- /package/{src → dist}/SvAlertsPanel.svelte +0 -0
- /package/{src → dist}/SvAuthGate.svelte +0 -0
- /package/{src → dist}/SvBoard.svelte +0 -0
- /package/{src → dist}/SvExportMenu.svelte +0 -0
- /package/{src → dist}/SvExpressionEditor.svelte +0 -0
- /package/{src → dist}/SvFileInput.svelte +0 -0
- /package/{src → dist}/SvGridAlerts.svelte +0 -0
- /package/{src → dist}/SvGridBoard.svelte +0 -0
- /package/{src → dist}/SvGridEditPanel.svelte +0 -0
- /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
- /package/{src → dist}/SvGridScheduler.svelte +0 -0
- /package/{src → dist}/SvImportDialog.svelte +0 -0
- /package/{src → dist}/SvLookupInput.svelte +0 -0
- /package/{src → dist}/SvPivotDesigner.svelte +0 -0
- /package/{src → dist}/SvRecordDetail.svelte +0 -0
- /package/{src → dist}/SvSchedule.svelte +0 -0
- /package/{src → dist}/SvSchemaChart.svelte +0 -0
- /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
- /package/{src → dist}/pdfmake-shims.d.ts +0 -0
- /package/{src → dist}/smart.export.d.ts +0 -0
- /package/{src → dist}/smart.export.js +0 -0
- /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scaffold - turn an `EntitySchema` into runnable SvelteKit files. The shared
|
|
3
|
+
* code-emit core: both the AI generator (MCP `scaffold_entity` tool) and the
|
|
4
|
+
* visual designer's "Generate code" action call this one function, so there is
|
|
5
|
+
* a single source of truth for what generated code looks like.
|
|
6
|
+
*
|
|
7
|
+
* Every generated file wraps its body in `svgrid:managed` markers. A future
|
|
8
|
+
* regeneration replaces only the managed region, so edits a user makes outside
|
|
9
|
+
* the markers survive - idempotent generation, the thing that makes a
|
|
10
|
+
* generator trustworthy enough to keep using.
|
|
11
|
+
*
|
|
12
|
+
* Pure string building. No filesystem, no Svelte. The `validate` (Standard
|
|
13
|
+
* Schema) functions on a field cannot be serialized to a literal, so they are
|
|
14
|
+
* omitted from the emitted schema with a note to re-add them by hand.
|
|
15
|
+
*/
|
|
16
|
+
import { resolveIdField } from '../schema.js';
|
|
17
|
+
const DRIVERS = {
|
|
18
|
+
postgres: {
|
|
19
|
+
imports: `import pg from 'pg'`,
|
|
20
|
+
setup: `const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })`,
|
|
21
|
+
dialectArg: `\n dialect: { placeholders: '$', ilike: true },`,
|
|
22
|
+
execBody: `const result = await pool.query(text, params)\n return result.rows`,
|
|
23
|
+
},
|
|
24
|
+
mysql: {
|
|
25
|
+
imports: `import mysql from 'mysql2/promise'`,
|
|
26
|
+
setup: `const pool = mysql.createPool(process.env.DATABASE_URL ?? '')`,
|
|
27
|
+
dialectArg: ``,
|
|
28
|
+
execBody: `const [rows] = await pool.query(text, params)\n return rows as Record<string, unknown>[]`,
|
|
29
|
+
},
|
|
30
|
+
mssql: {
|
|
31
|
+
imports: `import mssql from 'mssql'`,
|
|
32
|
+
setup: `const poolPromise = mssql.connect(process.env.DATABASE_URL ?? '')`,
|
|
33
|
+
dialectArg: `\n dialect: { placeholders: '@' },`,
|
|
34
|
+
execBody: `const pool = await poolPromise\n const request = pool.request()\n params.forEach((p, i) => request.input('p' + (i + 1), p))\n const result = await request.query(text)\n return result.recordset as Record<string, unknown>[]`,
|
|
35
|
+
},
|
|
36
|
+
sqlite: {
|
|
37
|
+
imports: `import Database from 'better-sqlite3'`,
|
|
38
|
+
setup: `const db = new Database(process.env.DATABASE_URL ?? 'data.db')`,
|
|
39
|
+
dialectArg: ``,
|
|
40
|
+
execBody: `return db.prepare(text).all(...params) as Record<string, unknown>[]`,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Whether an in-place writer must SKIP this file to preserve the developer's
|
|
45
|
+
* code: a user-owned companion (a screen's `handlers.ts`) that already exists on
|
|
46
|
+
* disk. Such files carry no `svgrid:managed` markers, so `mergeManaged` would
|
|
47
|
+
* overwrite them wholesale - the write-once contract lives here instead, shared
|
|
48
|
+
* by every writer (CLI regenerate + the designer's bundle write). See
|
|
49
|
+
* HANDLERS-DESIGN.md.
|
|
50
|
+
*/
|
|
51
|
+
export function skipUserOwned(file, existsOnDisk) {
|
|
52
|
+
return file.userOwned === true && existsOnDisk;
|
|
53
|
+
}
|
|
54
|
+
export const MANAGED_START = '// svgrid:managed:start';
|
|
55
|
+
export const MANAGED_END = '// svgrid:managed:end';
|
|
56
|
+
const MANAGED_NOTE = '// Regenerated by SvGrid Studio. Edits inside these markers are overwritten.';
|
|
57
|
+
function pascal(name) {
|
|
58
|
+
return name
|
|
59
|
+
.replace(/[_\-\s]+/g, ' ')
|
|
60
|
+
.replace(/([a-z\d])([A-Z])/g, '$1 $2')
|
|
61
|
+
.split(' ')
|
|
62
|
+
.filter(Boolean)
|
|
63
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
64
|
+
.join('');
|
|
65
|
+
}
|
|
66
|
+
function camel(name) {
|
|
67
|
+
const p = pascal(name);
|
|
68
|
+
return p.charAt(0).toLowerCase() + p.slice(1);
|
|
69
|
+
}
|
|
70
|
+
function tsType(field) {
|
|
71
|
+
switch (field.type) {
|
|
72
|
+
case 'number':
|
|
73
|
+
return 'number';
|
|
74
|
+
case 'boolean':
|
|
75
|
+
return 'boolean';
|
|
76
|
+
default:
|
|
77
|
+
return 'string';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function fieldLiteral(field) {
|
|
81
|
+
const parts = [`field: ${JSON.stringify(field.field)}`, `type: ${JSON.stringify(field.type)}`];
|
|
82
|
+
if (field.label)
|
|
83
|
+
parts.push(`label: ${JSON.stringify(field.label)}`);
|
|
84
|
+
if (field.primaryKey)
|
|
85
|
+
parts.push('primaryKey: true');
|
|
86
|
+
if (field.readonly)
|
|
87
|
+
parts.push('readonly: true');
|
|
88
|
+
if (field.required)
|
|
89
|
+
parts.push('required: true');
|
|
90
|
+
if (field.hidden)
|
|
91
|
+
parts.push(`hidden: ${JSON.stringify(field.hidden)}`);
|
|
92
|
+
if (field.options)
|
|
93
|
+
parts.push(`options: ${JSON.stringify(field.options)}`);
|
|
94
|
+
if (field.relation)
|
|
95
|
+
parts.push(`relation: ${JSON.stringify(field.relation)}`);
|
|
96
|
+
return ` { ${parts.join(', ')} }`;
|
|
97
|
+
}
|
|
98
|
+
function schemaLiteral(schema, constName, rowType) {
|
|
99
|
+
const head = [` name: ${JSON.stringify(schema.name)}`];
|
|
100
|
+
if (schema.label)
|
|
101
|
+
head.push(` label: ${JSON.stringify(schema.label)}`);
|
|
102
|
+
if (schema.idField)
|
|
103
|
+
head.push(` idField: ${JSON.stringify(schema.idField)}`);
|
|
104
|
+
const fields = schema.fields.map(fieldLiteral).join(',\n');
|
|
105
|
+
return `export const ${constName}: EntitySchema<${rowType}> = {\n${head.join(',\n')},\n fields: [\n${fields}\n ],\n}`;
|
|
106
|
+
}
|
|
107
|
+
function managed(body) {
|
|
108
|
+
return `${MANAGED_START}\n${MANAGED_NOTE}\n${body}\n${MANAGED_END}`;
|
|
109
|
+
}
|
|
110
|
+
export function scaffold(schema, options = {}) {
|
|
111
|
+
const route = options.route ?? schema.name;
|
|
112
|
+
const apiRoute = options.apiRoute ?? `/api/${route}`;
|
|
113
|
+
const schemaImport = options.schemaImport ?? `$lib/${route}.schema`;
|
|
114
|
+
const constName = `${camel(schema.name)}Schema`;
|
|
115
|
+
const rowType = `${pascal(schema.name)}Row`;
|
|
116
|
+
const idField = resolveIdField(schema);
|
|
117
|
+
const label = schema.label ?? schema.name;
|
|
118
|
+
const rowFields = schema.fields
|
|
119
|
+
.map((f) => ` ${f.field}: ${tsType(f)}`)
|
|
120
|
+
.join('\n');
|
|
121
|
+
// 1. The schema module ($lib).
|
|
122
|
+
const schemaFile = {
|
|
123
|
+
path: `src/lib/${route}.schema.ts`,
|
|
124
|
+
description: 'Entity schema + row type. Re-add any Standard Schema `validate` functions here by hand.',
|
|
125
|
+
contents: `import type { EntitySchema } from '@svgrid/enterprise'
|
|
126
|
+
|
|
127
|
+
${managed(`export type ${rowType} = {
|
|
128
|
+
${rowFields}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
${schemaLiteral(schema, constName, rowType)}`)}
|
|
132
|
+
`,
|
|
133
|
+
};
|
|
134
|
+
// 2. The API route: SvelteKit +server.ts using the transport handlers.
|
|
135
|
+
const dataSource = options.dataSource ?? 'memory';
|
|
136
|
+
const driver = dataSource === 'supabase' ? DRIVERS.postgres : DRIVERS[dataSource];
|
|
137
|
+
let serverImport;
|
|
138
|
+
let serverBody;
|
|
139
|
+
let serverDescription;
|
|
140
|
+
if (driver) {
|
|
141
|
+
// Fully-connected route: driver + DATABASE_URL, no manual editing needed.
|
|
142
|
+
serverImport = `${driver.imports}
|
|
143
|
+
import { createKitHandlers, createSqlDataSource } from '@svgrid/enterprise'`;
|
|
144
|
+
serverBody = `${driver.setup}
|
|
145
|
+
|
|
146
|
+
const source = createSqlDataSource<${rowType}>({
|
|
147
|
+
schema: ${constName},
|
|
148
|
+
table: ${JSON.stringify(schema.name)},${driver.dialectArg}
|
|
149
|
+
execute: async (text, params) => {
|
|
150
|
+
${driver.execBody}
|
|
151
|
+
},
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
|
|
155
|
+
serverDescription = `API route connected to your ${dataSource} database via process.env.DATABASE_URL.`;
|
|
156
|
+
}
|
|
157
|
+
else if (dataSource === 'sql') {
|
|
158
|
+
serverImport = `import { createKitHandlers, createSqlDataSource } from '@svgrid/enterprise'`;
|
|
159
|
+
serverBody = `// Wire execute() to your SQL client: run \`text\` with \`params\`, return the rows.
|
|
160
|
+
// Works with Drizzle (db.execute), postgres.js, better-sqlite3, mysql2, ...
|
|
161
|
+
const source = createSqlDataSource<${rowType}>({
|
|
162
|
+
schema: ${constName},
|
|
163
|
+
table: ${JSON.stringify(schema.name)},
|
|
164
|
+
dialect: { placeholders: '$', ilike: true },
|
|
165
|
+
execute: async (text, params) => {
|
|
166
|
+
throw new Error('TODO: run the query with your database client and return the rows.')
|
|
167
|
+
},
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
|
|
171
|
+
serverDescription = 'API route. Fill in execute() with your SQL client (Drizzle / postgres.js / ...).';
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
serverImport = `import { createInMemoryDataSource, createKitHandlers } from '@svgrid/enterprise'`;
|
|
175
|
+
serverBody = `// Starts empty and in-memory so the screen runs immediately. Swap this for
|
|
176
|
+
// a database-backed source (scaffold with dataSource:"sql" or a dialect) when ready.
|
|
177
|
+
const source = createInMemoryDataSource<${rowType}>([], ${constName})
|
|
178
|
+
|
|
179
|
+
export const { POST } = createKitHandlers({ schema: ${constName}, source })`;
|
|
180
|
+
serverDescription = 'API route using an in-memory source. Scaffold with a dialect for a real database.';
|
|
181
|
+
}
|
|
182
|
+
const serverFile = {
|
|
183
|
+
path: `src/routes${apiRoute}/+server.ts`,
|
|
184
|
+
description: serverDescription,
|
|
185
|
+
contents: `${serverImport}
|
|
186
|
+
import { ${constName}, type ${rowType} } from '${schemaImport}'
|
|
187
|
+
|
|
188
|
+
${managed(serverBody)}
|
|
189
|
+
`,
|
|
190
|
+
};
|
|
191
|
+
// Relation (foreign-key) fields become searchable lookups in the edit form.
|
|
192
|
+
// Each lookup queries the related entity's API route, so scaffold those tables
|
|
193
|
+
// too (e.g. `npx @svgrid/studio add <relatedTable>`).
|
|
194
|
+
const relationFields = schema.fields.filter((f) => f.type === 'relation' && !!f.relation);
|
|
195
|
+
const hasLookups = relationFields.length > 0;
|
|
196
|
+
const lookupDecls = relationFields
|
|
197
|
+
.map((f) => {
|
|
198
|
+
const name = `${camel(f.field)}Lookup`;
|
|
199
|
+
const endpoint = JSON.stringify(`/api/${f.relation.entity}`);
|
|
200
|
+
return ` const ${name} = createRelationLookup<Record<string, unknown>>({
|
|
201
|
+
source: createKitDataSource({ endpoint: ${endpoint} }),
|
|
202
|
+
labelField: ${JSON.stringify(f.relation.labelField)},
|
|
203
|
+
})`;
|
|
204
|
+
})
|
|
205
|
+
.join('\n');
|
|
206
|
+
const lookupsMap = ` const lookups = { ${relationFields
|
|
207
|
+
.map((f) => `${JSON.stringify(f.field)}: ${camel(f.field)}Lookup`)
|
|
208
|
+
.join(', ')} }`;
|
|
209
|
+
const lookupsSection = hasLookups ? `\n\n${lookupDecls}\n${lookupsMap}` : '';
|
|
210
|
+
// 3. The page: a full data screen - search, server sort + paging,
|
|
211
|
+
// multi-select delete (optimistic), create/edit, loading/error/empty.
|
|
212
|
+
const pageBody = ` const source = createKitDataSource<${rowType}>({ endpoint: '${apiRoute}' })
|
|
213
|
+
const columns = schemaToColumns(${constName})${lookupsSection}
|
|
214
|
+
|
|
215
|
+
let state = $state<ServerState<${rowType}>>({
|
|
216
|
+
rows: [], total: 0, loading: false, saving: false, error: null,
|
|
217
|
+
pageIndex: 0, pageSize: 25, pageCount: 1, sortModel: [], filterModel: {},
|
|
218
|
+
})
|
|
219
|
+
const controller = createServerDataSource<${rowType}>(source, {
|
|
220
|
+
pageSize: 25,
|
|
221
|
+
optimistic: true,
|
|
222
|
+
getRowId: (r) => String(r.${idField}),
|
|
223
|
+
onChange: (s) => (state = s),
|
|
224
|
+
})
|
|
225
|
+
controller.refresh()
|
|
226
|
+
|
|
227
|
+
let selected = $state<${rowType}[]>([])
|
|
228
|
+
let editing = $state<${rowType} | null | undefined>(undefined) // undefined = closed, null = create
|
|
229
|
+
|
|
230
|
+
async function save({ mode, id, values }: { mode: 'create' | 'edit'; id: string | null; values: Partial<${rowType}> }) {
|
|
231
|
+
if (mode === 'create') {
|
|
232
|
+
await controller.createRow(values)
|
|
233
|
+
controller.setPage(state.pageCount - 1) // jump to the new row (appended at the end)
|
|
234
|
+
} else if (id) {
|
|
235
|
+
await controller.updateRow(id, values)
|
|
236
|
+
}
|
|
237
|
+
editing = undefined
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
async function removeSelected() {
|
|
241
|
+
for (const row of selected) await controller.deleteRow(String(row.${idField}))
|
|
242
|
+
selected = []
|
|
243
|
+
}`;
|
|
244
|
+
const pageFile = {
|
|
245
|
+
path: `src/routes/${route}/+page.svelte`,
|
|
246
|
+
description: 'The data screen: sort, filter, search, paging, multi-select delete, and create/edit - wired to the API route.',
|
|
247
|
+
contents: `<script lang="ts">
|
|
248
|
+
import { SvGrid, createServerDataSource } from '@svgrid/grid'
|
|
249
|
+
import {
|
|
250
|
+
SvGridEditPanel,
|
|
251
|
+
createKitDataSource,${hasLookups ? '\n createRelationLookup,' : ''}
|
|
252
|
+
schemaToColumns,
|
|
253
|
+
type ServerState,
|
|
254
|
+
} from '@svgrid/enterprise'
|
|
255
|
+
import { ${constName}, type ${rowType} } from '${schemaImport}'
|
|
256
|
+
|
|
257
|
+
${managed(pageBody)}
|
|
258
|
+
</script>
|
|
259
|
+
|
|
260
|
+
<div class="page">
|
|
261
|
+
<header class="page__toolbar">
|
|
262
|
+
<h2 class="page__title">${label}</h2>
|
|
263
|
+
<div class="page__actions">
|
|
264
|
+
<button onclick={() => (editing = null)}>New</button>
|
|
265
|
+
<button disabled={selected.length === 0} onclick={removeSelected}>
|
|
266
|
+
Delete {selected.length > 0 ? '(' + selected.length + ')' : ''}
|
|
267
|
+
</button>
|
|
268
|
+
</div>
|
|
269
|
+
</header>
|
|
270
|
+
|
|
271
|
+
{#if state.error}<p class="page__error" role="alert">{state.error}</p>{/if}
|
|
272
|
+
|
|
273
|
+
<SvGrid
|
|
274
|
+
data={state.rows}
|
|
275
|
+
{columns}
|
|
276
|
+
loading={state.loading}
|
|
277
|
+
loadingOverlay
|
|
278
|
+
fitColumns
|
|
279
|
+
enableRowSummaries={false}
|
|
280
|
+
showRowSelection
|
|
281
|
+
enableCellSelection
|
|
282
|
+
sortable
|
|
283
|
+
externalSort
|
|
284
|
+
onSortingChange={(s) => controller.setSort(s)}
|
|
285
|
+
filterable
|
|
286
|
+
showGlobalFilter
|
|
287
|
+
externalFilter
|
|
288
|
+
onFiltersChange={(f) =>
|
|
289
|
+
controller.setFilter({
|
|
290
|
+
global: f.global || undefined,
|
|
291
|
+
columns: Object.fromEntries(
|
|
292
|
+
f.columns.map((c) => [c.id, { operator: c.operator, value: c.value, valueTo: c.valueTo, selectedValues: c.selectedValues }]),
|
|
293
|
+
),
|
|
294
|
+
})}
|
|
295
|
+
onRowClick={(e) => (editing = e.row)}
|
|
296
|
+
onRowSelectionChange={(_sel, rows) => (selected = rows)}
|
|
297
|
+
showPagination
|
|
298
|
+
externalPagination
|
|
299
|
+
rowCount={state.total}
|
|
300
|
+
pageIndex={state.pageIndex}
|
|
301
|
+
pageSize={state.pageSize}
|
|
302
|
+
onPaginationChange={({ pageIndex, pageSize }) => {
|
|
303
|
+
if (pageSize !== state.pageSize) controller.setPageSize(pageSize)
|
|
304
|
+
else controller.setPage(pageIndex)
|
|
305
|
+
}}
|
|
306
|
+
emptyMessage="No ${label} yet"
|
|
307
|
+
containerHeight={480}
|
|
308
|
+
/>
|
|
309
|
+
|
|
310
|
+
{#if editing !== undefined}
|
|
311
|
+
<SvGridEditPanel schema={${constName}} row={editing} ${hasLookups ? 'lookups={lookups} ' : ''}onSubmit={save} onCancel={() => (editing = undefined)} />
|
|
312
|
+
{/if}
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<style>
|
|
316
|
+
.page { display: flex; flex-direction: column; gap: 12px; }
|
|
317
|
+
.page__toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
318
|
+
.page__title { margin: 0; font-size: 18px; font-weight: 600; }
|
|
319
|
+
.page__actions { display: flex; gap: 8px; }
|
|
320
|
+
.page__actions button { padding: 7px 12px; border: 1px solid #ccc; border-radius: 6px; background: #fff; cursor: pointer; }
|
|
321
|
+
.page__error { margin: 0; padding: 8px 12px; color: #b3261e; background: #fdecea; border-radius: 6px; }
|
|
322
|
+
</style>
|
|
323
|
+
`,
|
|
324
|
+
};
|
|
325
|
+
return { files: [schemaFile, serverFile, pageFile] };
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Merge freshly-scaffolded files into existing file contents, replacing only
|
|
329
|
+
* each file's `svgrid:managed` region and preserving everything a user wrote
|
|
330
|
+
* outside it. When there's no existing content (or no markers in it), the new
|
|
331
|
+
* file is used whole. This is what makes regeneration safe.
|
|
332
|
+
*/
|
|
333
|
+
export function mergeManaged(existing, generated) {
|
|
334
|
+
if (!existing)
|
|
335
|
+
return generated;
|
|
336
|
+
const startIdx = existing.indexOf(MANAGED_START);
|
|
337
|
+
const endIdx = existing.indexOf(MANAGED_END);
|
|
338
|
+
if (startIdx === -1 || endIdx === -1 || endIdx < startIdx)
|
|
339
|
+
return generated;
|
|
340
|
+
const genStart = generated.indexOf(MANAGED_START);
|
|
341
|
+
const genEnd = generated.indexOf(MANAGED_END);
|
|
342
|
+
if (genStart === -1 || genEnd === -1)
|
|
343
|
+
return generated;
|
|
344
|
+
const newRegion = generated.slice(genStart, genEnd + MANAGED_END.length);
|
|
345
|
+
return (existing.slice(0, startIdx) + newRegion + existing.slice(endIdx + MANAGED_END.length));
|
|
346
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen factories + the CRUD-suite generator.
|
|
3
|
+
*
|
|
4
|
+
* Two layers live here:
|
|
5
|
+
*
|
|
6
|
+
* 1. The composable screen factories (`listScreen` / `formScreen` / `detailScreen`
|
|
7
|
+
* / `dashScreen`) the curated sample apps are built from. They take explicit,
|
|
8
|
+
* hand-picked options - a sample app knows its own domain.
|
|
9
|
+
* 2. The CRUD suite (`crudSuiteScreens` / `addCrudSuite` / `crudAppFromSchemas`),
|
|
10
|
+
* which derives those options from a schema and produces a linked multi-screen
|
|
11
|
+
* app: a list, an edit form, a record detail page, and an optional overview
|
|
12
|
+
* dashboard, with drill-through and related-child tabs wired from the entity's
|
|
13
|
+
* relations. This is what the guided onboarding (designer wizard + `svgrid-studio
|
|
14
|
+
* init`) calls, so both hosts scaffold identical apps.
|
|
15
|
+
*
|
|
16
|
+
* Pure + node-safe (studio subtree): plain data built from the same immutable ops
|
|
17
|
+
* the designer uses, so results round-trip through parse/serialize and generate a
|
|
18
|
+
* runnable app with no special-casing.
|
|
19
|
+
*/
|
|
20
|
+
import type { EntitySchema } from '../schema.js';
|
|
21
|
+
import type { ChartType } from '@svgrid/grid';
|
|
22
|
+
import { type BlockConfig, type DataSourceKind, type DetailRelated, type EntityDataSource, type FormatRule, type GridDensity, type GridEditing, type KpiFormat, type Presentation, type ProjectTheme, type Reduce, type RowAction, type RowLink, type Screen, type StudioProject } from './project.js';
|
|
23
|
+
/** Rich-grid options an enterprise screen layers onto the default grid: status
|
|
24
|
+
* pills / thresholds (formatRules), a totals row, row actions, row-click drill,
|
|
25
|
+
* and density. */
|
|
26
|
+
export type GridOpts = {
|
|
27
|
+
format?: FormatRule[];
|
|
28
|
+
rowActions?: RowAction[];
|
|
29
|
+
rowLink?: RowLink;
|
|
30
|
+
summaries?: boolean;
|
|
31
|
+
density?: GridDensity;
|
|
32
|
+
pageSize?: number;
|
|
33
|
+
/** How rows are edited: in-cell, via a popup form, or not at all (read-only
|
|
34
|
+
* lists that drill into a detail page). Defaults to the grid default (`'form'`). */
|
|
35
|
+
editing?: GridEditing;
|
|
36
|
+
/** Where the edit form opens when `editing` is `'form'`. */
|
|
37
|
+
formPresentation?: Presentation;
|
|
38
|
+
};
|
|
39
|
+
/** A dashboard tile: KPI card (with trend/target/format), chart, gauge, pivot,
|
|
40
|
+
* tree, a rich grid, or a tabbed group of display tiles. */
|
|
41
|
+
export type Tile = {
|
|
42
|
+
kpi: string;
|
|
43
|
+
measure?: string;
|
|
44
|
+
reduce: Reduce;
|
|
45
|
+
format?: KpiFormat;
|
|
46
|
+
trendField?: string;
|
|
47
|
+
trendReduce?: Reduce;
|
|
48
|
+
target?: number;
|
|
49
|
+
span?: 1 | 2 | 3;
|
|
50
|
+
} | {
|
|
51
|
+
chart: string;
|
|
52
|
+
measure?: string;
|
|
53
|
+
reduce?: Reduce;
|
|
54
|
+
type?: ChartType;
|
|
55
|
+
span?: 1 | 2 | 3;
|
|
56
|
+
} | {
|
|
57
|
+
gauge: string;
|
|
58
|
+
measure?: string;
|
|
59
|
+
reduce: Reduce;
|
|
60
|
+
min?: number;
|
|
61
|
+
max?: number;
|
|
62
|
+
unit?: string;
|
|
63
|
+
span?: 1 | 2 | 3;
|
|
64
|
+
} | {
|
|
65
|
+
pivot: {
|
|
66
|
+
rows: string[];
|
|
67
|
+
cols: string[];
|
|
68
|
+
measure?: string;
|
|
69
|
+
aggregate?: Reduce;
|
|
70
|
+
};
|
|
71
|
+
span?: 1 | 2 | 3;
|
|
72
|
+
} | {
|
|
73
|
+
tree: {
|
|
74
|
+
labelField: string;
|
|
75
|
+
parentField: string;
|
|
76
|
+
};
|
|
77
|
+
span?: 1 | 2 | 3;
|
|
78
|
+
} | ({
|
|
79
|
+
grid: true;
|
|
80
|
+
span?: 1 | 2 | 3;
|
|
81
|
+
} & GridOpts) | {
|
|
82
|
+
filter: string[];
|
|
83
|
+
span?: 1 | 2 | 3;
|
|
84
|
+
} | {
|
|
85
|
+
tabs: {
|
|
86
|
+
label: string;
|
|
87
|
+
tiles: Tile[];
|
|
88
|
+
}[];
|
|
89
|
+
span?: 1 | 2 | 3;
|
|
90
|
+
};
|
|
91
|
+
/** The default grid config with enterprise options merged on. */
|
|
92
|
+
export declare function gridConfig(entity: EntitySchema, opts: GridOpts): BlockConfig;
|
|
93
|
+
/** Compose a dashboard screen from explicit tiles (KPI cards + gauges + charts +
|
|
94
|
+
* pivots + trees + a rich grid). */
|
|
95
|
+
export declare function dashScreen(entity: EntitySchema, meta: {
|
|
96
|
+
id: string;
|
|
97
|
+
title: string;
|
|
98
|
+
order: number;
|
|
99
|
+
}, tiles: Tile[]): Screen;
|
|
100
|
+
/** FormatRule[] that color-code an enum field's cells by its option colors -
|
|
101
|
+
* turns a plain status column into enterprise status pills. */
|
|
102
|
+
export declare function statusPills(entity: EntitySchema, field: string): FormatRule[];
|
|
103
|
+
/** A list screen: an optional faceted filter panel + a rich grid (status pills,
|
|
104
|
+
* totals, row actions, drill-through). */
|
|
105
|
+
export declare function listScreen(entity: EntitySchema, meta: {
|
|
106
|
+
id: string;
|
|
107
|
+
title: string;
|
|
108
|
+
order: number;
|
|
109
|
+
}, opts?: {
|
|
110
|
+
filter?: string[];
|
|
111
|
+
grid?: GridOpts;
|
|
112
|
+
}): Screen;
|
|
113
|
+
/**
|
|
114
|
+
* A form-showcase screen: a grid to pick a row + an editable record panel that
|
|
115
|
+
* renders the full field form (phone / rating / tags / mask / slider editors)
|
|
116
|
+
* inline. Lets a user see and try the rich editors on load, not just on edit.
|
|
117
|
+
*/
|
|
118
|
+
export declare function formScreen(entity: EntitySchema, meta: {
|
|
119
|
+
id: string;
|
|
120
|
+
title: string;
|
|
121
|
+
order: number;
|
|
122
|
+
}, fields?: string[], grid?: GridOpts, filter?: string[]): Screen;
|
|
123
|
+
/** A record detail-page screen: a full record view (header + status pill + metric
|
|
124
|
+
* tiles + tabbed Overview / related timelines) - the signature view for
|
|
125
|
+
* relation-heavy records (a customer / deal / patient / trip page). */
|
|
126
|
+
export declare function detailScreen(entity: EntitySchema, meta: {
|
|
127
|
+
id: string;
|
|
128
|
+
title: string;
|
|
129
|
+
order: number;
|
|
130
|
+
}, opts: {
|
|
131
|
+
titleField: string;
|
|
132
|
+
subtitleField?: string;
|
|
133
|
+
statusField?: string;
|
|
134
|
+
metricFields?: string[];
|
|
135
|
+
sections?: {
|
|
136
|
+
label: string;
|
|
137
|
+
fields: string[];
|
|
138
|
+
}[];
|
|
139
|
+
related?: DetailRelated[];
|
|
140
|
+
}): Screen;
|
|
141
|
+
/** The screens a CRUD suite can contain. */
|
|
142
|
+
export type CrudScreenKind = 'list' | 'form' | 'detail' | 'dashboard';
|
|
143
|
+
/** How the suite's rows are edited. `'inline'` edits in the grid, `'form'` opens
|
|
144
|
+
* a popup form (the grid default), `'detail'` makes a row click navigate to the
|
|
145
|
+
* generated detail page (and leaves the list read-only). */
|
|
146
|
+
export type CrudEditingMode = 'inline' | 'form' | 'detail';
|
|
147
|
+
export type CrudSuiteOptions = {
|
|
148
|
+
/** Which screens to generate. Default: `['list', 'form']`, plus `'detail'` when
|
|
149
|
+
* another entity relates to this one (there are children worth showing). */
|
|
150
|
+
screens?: CrudScreenKind[];
|
|
151
|
+
/** Row editing mode. Default `'form'`. */
|
|
152
|
+
editing?: CrudEditingMode;
|
|
153
|
+
/** Nav order of the suite's first screen; later screens follow it. Default 0. */
|
|
154
|
+
navOrder?: number;
|
|
155
|
+
/** Show a faceted filter panel on the list screen. Defaults to on when the
|
|
156
|
+
* entity has filter-friendly (enum / boolean / text) fields. */
|
|
157
|
+
filter?: boolean;
|
|
158
|
+
/** Ids and routes already in use. The suite picks non-colliding ones BEFORE it
|
|
159
|
+
* wires drill-through, so a rename can never orphan a `rowLink`. */
|
|
160
|
+
taken?: {
|
|
161
|
+
ids?: ReadonlySet<string>;
|
|
162
|
+
routes?: ReadonlySet<string>;
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* The screens for one entity: a list, an edit form, a record detail page, and/or
|
|
167
|
+
* an overview dashboard - already linked to each other. `entities` is the full
|
|
168
|
+
* schema set so relations resolve (drill-through targets + child collections).
|
|
169
|
+
*/
|
|
170
|
+
export declare function crudSuiteScreens(entity: EntitySchema, entities: readonly EntitySchema[], opts?: CrudSuiteOptions): Screen[];
|
|
171
|
+
/** Append a full CRUD suite for an existing entity (immutable, like `addScreenFromTemplate`). */
|
|
172
|
+
export declare function addCrudSuite(project: StudioProject, entityName: string, opts?: CrudSuiteOptions): StudioProject;
|
|
173
|
+
export type CrudAppOptions = {
|
|
174
|
+
title?: string;
|
|
175
|
+
/** Default source kind for entities with no explicit binding in `sources`. */
|
|
176
|
+
dataSource?: DataSourceKind;
|
|
177
|
+
/** Per-entity source binding (a live SQL table, a REST endpoint, PGlite, ...). */
|
|
178
|
+
sources?: Record<string, EntityDataSource>;
|
|
179
|
+
/** Per-entity seed rows, merged into memory / PGlite bindings. */
|
|
180
|
+
seed?: Record<string, Record<string, unknown>[]>;
|
|
181
|
+
/** Per-entity suite overrides, keyed by entity name. */
|
|
182
|
+
perEntity?: Record<string, CrudSuiteOptions>;
|
|
183
|
+
/** Lead with an overview dashboard over the most-referenced entity. Default true. */
|
|
184
|
+
overviewDashboard?: boolean;
|
|
185
|
+
theme?: ProjectTheme;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* A complete app from a set of schemas: an overview dashboard plus a CRUD suite
|
|
189
|
+
* per entity, bound to the given data sources. This is the guided-onboarding
|
|
190
|
+
* output - the designer wizard and `svgrid-studio init` both land here, so a
|
|
191
|
+
* database connected from either host scaffolds the same app.
|
|
192
|
+
*/
|
|
193
|
+
export declare function crudAppFromSchemas(schemas: EntitySchema[], opts?: CrudAppOptions): StudioProject;
|