@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
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntitySchema - the single declarative model that both the grid columns and
|
|
3
|
+
* the (commercial) edit panel / server adapters / Studio generator read from.
|
|
4
|
+
*
|
|
5
|
+
* The grid already has `ColumnDef` for *rendering* a table. An EntitySchema is
|
|
6
|
+
* one level up: it describes an *entity* (a table row's fields, their types,
|
|
7
|
+
* validation, keys, and relations) so the same definition can drive:
|
|
8
|
+
*
|
|
9
|
+
* - the grid (via `schemaToColumns`)
|
|
10
|
+
* - the edit panel (via `schemaToFormFields`)
|
|
11
|
+
* - server adapters (Drizzle / Supabase, later phases)
|
|
12
|
+
* - the Studio generator (introspect a data source -> EntitySchema -> code)
|
|
13
|
+
*
|
|
14
|
+
* It deliberately reuses the grid's own vocabulary - `CellDataType`,
|
|
15
|
+
* `CellEditorType`, `CellEditorOption`, `ColumnDef` - so a schema is a
|
|
16
|
+
* *superset* of what a column needs, never a parallel model. Anything the
|
|
17
|
+
* grid can already express is reachable through the per-field `column`
|
|
18
|
+
* escape hatch.
|
|
19
|
+
*
|
|
20
|
+
* Validation is typed against the Standard Schema spec (standardschema.dev),
|
|
21
|
+
* so Zod / Valibot / ArkType all satisfy `EntityField.validate` with zero
|
|
22
|
+
* hard dependency here - the same BYO approach as `setAIProvider()`.
|
|
23
|
+
*/
|
|
24
|
+
import type { CellDataType, CellEditorOption, CellEditorType, ColumnDef, RowData, TableFeatures } from '@svgrid/grid';
|
|
25
|
+
import type { PredicateExpr } from './expressions/expression-types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Minimal structural copy of the Standard Schema v1 interface
|
|
28
|
+
* (https://standardschema.dev). We type against the shape rather than
|
|
29
|
+
* depend on `@standard-schema/spec` so consumers can bring Zod, Valibot,
|
|
30
|
+
* ArkType, or a hand-rolled validator interchangeably.
|
|
31
|
+
*/
|
|
32
|
+
export interface StandardSchemaV1<Input = unknown, Output = Input> {
|
|
33
|
+
readonly '~standard': {
|
|
34
|
+
readonly version: 1;
|
|
35
|
+
readonly vendor: string;
|
|
36
|
+
readonly validate: (value: unknown) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>;
|
|
37
|
+
readonly types?: {
|
|
38
|
+
readonly input: Input;
|
|
39
|
+
readonly output: Output;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export type StandardSchemaResult<Output> = {
|
|
44
|
+
readonly value: Output;
|
|
45
|
+
readonly issues?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
readonly issues: ReadonlyArray<{
|
|
48
|
+
readonly message: string;
|
|
49
|
+
readonly path?: ReadonlyArray<PropertyKey | {
|
|
50
|
+
key: PropertyKey;
|
|
51
|
+
}>;
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* High-level field type. A superset of the grid's `CellDataType`: the first
|
|
56
|
+
* five map 1:1 onto it, and `datetime` / `enum` / `relation` / `json` extend
|
|
57
|
+
* it for entity concerns the grid's render-only type never needed.
|
|
58
|
+
*/
|
|
59
|
+
export type EntityFieldType = CellDataType | 'datetime' | 'enum' | 'relation' | 'json';
|
|
60
|
+
/**
|
|
61
|
+
* The control a form field renders as. A superset of the grid's `CellEditorType`:
|
|
62
|
+
* the grid cell editors (which double as form controls) plus a few form-only rich
|
|
63
|
+
* inputs from the editor suite - `phone` (SvPhoneInput), `country` (SvCountryInput),
|
|
64
|
+
* `mask` (SvMaskedInput), `slider` (SvSlider). Grid columns map the form-only kinds
|
|
65
|
+
* back to a safe cell editor (see `schemaToColumns`).
|
|
66
|
+
*/
|
|
67
|
+
export type StudioEditorType = CellEditorType | 'phone' | 'country' | 'mask' | 'slider';
|
|
68
|
+
/** Describe one field of an entity. Keys off the row property `field`. */
|
|
69
|
+
export type EntityField<TData extends RowData = RowData> = {
|
|
70
|
+
/** Property key on the row. Becomes `ColumnDef.field`. */
|
|
71
|
+
field: string & keyof TData;
|
|
72
|
+
/**
|
|
73
|
+
* Actual database column, when it differs from `field` (e.g. a Drizzle
|
|
74
|
+
* `createdAt: timestamp('created_at')` maps `field: 'createdAt'` to
|
|
75
|
+
* `dbColumn: 'created_at'`). SQL adapters read/write this column and alias it
|
|
76
|
+
* back to `field`; everything else keys on `field`. Defaults to `field`.
|
|
77
|
+
*/
|
|
78
|
+
dbColumn?: string;
|
|
79
|
+
/** High-level type. Drives grid `cellDataType`, the form control, and adapter coercion. */
|
|
80
|
+
type: EntityFieldType;
|
|
81
|
+
/** Human label. Defaults to a title-cased `field`. Used for the column header and the form label. */
|
|
82
|
+
label?: string;
|
|
83
|
+
/** Part of the primary key. Set on exactly one field, or use `EntitySchema.idField`. */
|
|
84
|
+
primaryKey?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Server-owned / not user-editable (e.g. `id`, `createdAt`). Shown in the
|
|
87
|
+
* grid, read-only in the edit panel, and omitted from create payloads.
|
|
88
|
+
*/
|
|
89
|
+
readonly?: boolean;
|
|
90
|
+
/** Required on create / update. Enforced by the edit panel and generated server validators. */
|
|
91
|
+
required?: boolean;
|
|
92
|
+
/** Built-in validation, enforced by the edit panel with no external library. */
|
|
93
|
+
min?: number;
|
|
94
|
+
max?: number;
|
|
95
|
+
minLength?: number;
|
|
96
|
+
maxLength?: number;
|
|
97
|
+
/** Regex source string a text value must match. */
|
|
98
|
+
pattern?: string;
|
|
99
|
+
/** Convenience format check for text fields. */
|
|
100
|
+
format?: 'email' | 'url';
|
|
101
|
+
/**
|
|
102
|
+
* Hide the field. `true` hides it everywhere; the object form hides it from
|
|
103
|
+
* just the grid or just the form (e.g. a password shown in the form, never
|
|
104
|
+
* the grid).
|
|
105
|
+
*/
|
|
106
|
+
hidden?: boolean | {
|
|
107
|
+
grid?: boolean;
|
|
108
|
+
form?: boolean;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Value-driven behaviour: each condition is re-evaluated against the form's
|
|
112
|
+
* current values as the user types, so a field can appear, lock, or become
|
|
113
|
+
* required in response to another answer (e.g. show "Other reason" only when
|
|
114
|
+
* `reason` is `other`).
|
|
115
|
+
*
|
|
116
|
+
* Conditions are data (`PredicateExpr`), not functions, so they survive a
|
|
117
|
+
* round-trip through `studio.config.json` and can be built in a UI. Build them
|
|
118
|
+
* by hand, with `parsePredicate('status = "active"')`, or in
|
|
119
|
+
* `SvExpressionEditor`.
|
|
120
|
+
*
|
|
121
|
+
* A field hidden by `visible` is skipped by validation and left out of the
|
|
122
|
+
* submitted payload, so an invisible field can never block a save or write a
|
|
123
|
+
* stale value. `required` here replaces the static `required` flag rather than
|
|
124
|
+
* adding to it.
|
|
125
|
+
*/
|
|
126
|
+
when?: {
|
|
127
|
+
visible?: PredicateExpr;
|
|
128
|
+
disabled?: PredicateExpr;
|
|
129
|
+
required?: PredicateExpr;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Options for `type: 'enum'`. Reuses the grid's `CellEditorOption`
|
|
133
|
+
* (`{ value, label, color? }`) so grid and form render identically.
|
|
134
|
+
*/
|
|
135
|
+
options?: ReadonlyArray<CellEditorOption>;
|
|
136
|
+
/** For `type: 'relation'`: the related entity, the local FK, and which related field to display. */
|
|
137
|
+
relation?: {
|
|
138
|
+
/** Name of the related `EntitySchema`. */
|
|
139
|
+
entity: string;
|
|
140
|
+
/** Local column storing the related id. Defaults to `field`. */
|
|
141
|
+
foreignKey?: string;
|
|
142
|
+
/** Field on the related entity to show to the user. */
|
|
143
|
+
labelField: string;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Render a file / image upload control in the edit form. The stored value is a
|
|
147
|
+
* URL (or a data URL for the built-in fallback). Provide an upload handler via
|
|
148
|
+
* `SvGridEditPanel`'s `uploads` prop to push to storage and store the URL.
|
|
149
|
+
*/
|
|
150
|
+
upload?: {
|
|
151
|
+
/** `accept` attribute, e.g. `'image/*'` or `'.pdf,.csv'`. */
|
|
152
|
+
accept?: string;
|
|
153
|
+
/** Show an image preview + thumbnail. */
|
|
154
|
+
image?: boolean;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Standard Schema validator (Zod / Valibot / ArkType / ...). Run by the edit
|
|
158
|
+
* panel and reusable verbatim server-side, so a rule is written once.
|
|
159
|
+
*/
|
|
160
|
+
validate?: StandardSchemaV1;
|
|
161
|
+
/** Default applied when the edit panel creates a new row. */
|
|
162
|
+
defaultValue?: unknown;
|
|
163
|
+
/**
|
|
164
|
+
* Derived, non-stored field: its value is computed from the row (e.g. a line
|
|
165
|
+
* total `qty * price` or a full name). Computed fields are display-only -
|
|
166
|
+
* read-only in the grid + form, never sent in a create/update payload. Use
|
|
167
|
+
* `withEntityRules(source, schema)` (or `applyComputed`) to materialize the
|
|
168
|
+
* value onto rows so the grid can sort/filter it within the fetched page.
|
|
169
|
+
*/
|
|
170
|
+
computed?: (row: TData) => unknown;
|
|
171
|
+
/**
|
|
172
|
+
* No-code computed source: a formula over other fields (e.g. `qty * price`,
|
|
173
|
+
* `first + ' ' + last`). The Studio generator compiles it into `computed`;
|
|
174
|
+
* bare field names resolve to `row.<field>`. Ignored when `computed` is set.
|
|
175
|
+
*/
|
|
176
|
+
formula?: string;
|
|
177
|
+
/** Merge extra `ColumnDef` props onto the derived grid column (width, align, `cell`, `format`, ...). Escape hatch. */
|
|
178
|
+
column?: Partial<ColumnDef<TableFeatures, TData>>;
|
|
179
|
+
/** Override the derived form control. Escape hatch. */
|
|
180
|
+
input?: {
|
|
181
|
+
editorType?: StudioEditorType;
|
|
182
|
+
placeholder?: string;
|
|
183
|
+
/** Columns spanned in the form's 2-col grid. Defaults to 1. */
|
|
184
|
+
span?: 1 | 2;
|
|
185
|
+
help?: string;
|
|
186
|
+
/** Mask pattern for the `mask` editor (e.g. `'(999) 000-0000'`). */
|
|
187
|
+
mask?: string;
|
|
188
|
+
/** Number/slider step increment (SvNumberInput / SvSlider). */
|
|
189
|
+
step?: number;
|
|
190
|
+
/** Number decimal places (SvNumberInput). */
|
|
191
|
+
precision?: number;
|
|
192
|
+
/** Number affix, e.g. `'$'` prefix or `'%'` suffix (SvNumberInput). */
|
|
193
|
+
prefix?: string;
|
|
194
|
+
suffix?: string;
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Business-logic hooks run at the mutation boundary by `withEntityRules`. Before
|
|
199
|
+
* hooks may transform the payload (return a new value) or throw to reject; the
|
|
200
|
+
* `validate` hook does cross-field form validation (return a `{ field: message }`
|
|
201
|
+
* map of errors, or `null`/`{}` when valid) and is also run by the edit panel.
|
|
202
|
+
*/
|
|
203
|
+
export type EntityHooks<TData extends RowData = RowData> = {
|
|
204
|
+
/** Transform / validate a create payload. Return the payload to use, or throw. */
|
|
205
|
+
beforeCreate?: (values: Partial<TData>) => Partial<TData> | Promise<Partial<TData>>;
|
|
206
|
+
/** Transform / validate an update payload. Return the payload to use, or throw. */
|
|
207
|
+
beforeUpdate?: (id: string, values: Partial<TData>) => Partial<TData> | Promise<Partial<TData>>;
|
|
208
|
+
/** Side effect after a row is created. */
|
|
209
|
+
afterCreate?: (row: TData) => void | Promise<void>;
|
|
210
|
+
/** Side effect after a row is updated. */
|
|
211
|
+
afterUpdate?: (row: TData) => void | Promise<void>;
|
|
212
|
+
/** Veto a delete by throwing. */
|
|
213
|
+
beforeDelete?: (id: string) => void | Promise<void>;
|
|
214
|
+
/** Side effect after a row is deleted. */
|
|
215
|
+
afterDelete?: (id: string) => void | Promise<void>;
|
|
216
|
+
/** Cross-field form validation. Return errors keyed by field, or null when valid. */
|
|
217
|
+
validate?: (values: Partial<TData>) => Record<string, string> | null | Promise<Record<string, string> | null>;
|
|
218
|
+
};
|
|
219
|
+
/** A complete entity: its fields plus how to identify a row. */
|
|
220
|
+
export type EntitySchema<TData extends RowData = RowData> = {
|
|
221
|
+
/** Stable machine name / table name, e.g. `'customers'`. */
|
|
222
|
+
name: string;
|
|
223
|
+
/** Singular display label, e.g. `'Customer'`. Defaults to a title-cased `name`. */
|
|
224
|
+
label?: string;
|
|
225
|
+
fields: ReadonlyArray<EntityField<TData>>;
|
|
226
|
+
/** Primary-key field. Optional when exactly one field sets `primaryKey`. */
|
|
227
|
+
idField?: string & keyof TData;
|
|
228
|
+
/** Business-logic hooks run at the mutation boundary (see `withEntityRules`). */
|
|
229
|
+
hooks?: EntityHooks<TData>;
|
|
230
|
+
/**
|
|
231
|
+
* No-code cross-field validation rules (authored in the Studio designer). The
|
|
232
|
+
* generator compiles them into `hooks.validate`. Each rule asserts a condition;
|
|
233
|
+
* when it fails, `message` is attached to `field`.
|
|
234
|
+
*/
|
|
235
|
+
validations?: ValidationRuleSpec[];
|
|
236
|
+
/**
|
|
237
|
+
* How the create / edit form is arranged: column count and titled sections.
|
|
238
|
+
* Part of the schema so a built form ships with the entity rather than living
|
|
239
|
+
* in whichever component happens to render it.
|
|
240
|
+
*/
|
|
241
|
+
form?: FormLayout;
|
|
242
|
+
};
|
|
243
|
+
/** The comparison a {@link ValidationRuleSpec} asserts must hold. */
|
|
244
|
+
export type ValidationOp = 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'required' | 'maxLen' | 'minLen';
|
|
245
|
+
/** One no-code validation rule: assert `field <op> value`, else show `message`.
|
|
246
|
+
* `compareTo` (another field name) asserts a cross-field comparison instead of `value`. */
|
|
247
|
+
export type ValidationRuleSpec = {
|
|
248
|
+
field: string;
|
|
249
|
+
op: ValidationOp;
|
|
250
|
+
value?: string | number;
|
|
251
|
+
/** Compare against another field's value (cross-field) instead of `value`. */
|
|
252
|
+
compareTo?: string;
|
|
253
|
+
message: string;
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* A titled group of fields in the form.
|
|
257
|
+
*
|
|
258
|
+
* `fields` names them in the order they should appear, so a section is both the
|
|
259
|
+
* grouping and the ordering. A field left out of every section still renders, in
|
|
260
|
+
* a trailing untitled group - a form never silently drops one.
|
|
261
|
+
*/
|
|
262
|
+
export type FormSection = {
|
|
263
|
+
title?: string;
|
|
264
|
+
/** A line under the heading, for what the group is for or how to fill it in. */
|
|
265
|
+
description?: string;
|
|
266
|
+
/** Column count for this section only. Defaults to the form's. */
|
|
267
|
+
columns?: 1 | 2 | 3;
|
|
268
|
+
fields: string[];
|
|
269
|
+
/** Show the section only while this holds - see `EntityField.when`. */
|
|
270
|
+
visibleWhen?: PredicateExpr;
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* How the entity's form is laid out. Lives on the schema rather than on the
|
|
274
|
+
* component so a form that has been *built* travels with the entity: it
|
|
275
|
+
* round-trips through `studio.config.json`, generates into an app, and renders
|
|
276
|
+
* the same on the client panel and the server-rendered form.
|
|
277
|
+
*
|
|
278
|
+
* `SvGridEditPanel`'s `columns` / `sections` props still win when passed, for a
|
|
279
|
+
* one-off arrangement of an otherwise shared schema.
|
|
280
|
+
*/
|
|
281
|
+
export type FormLayout = {
|
|
282
|
+
columns?: 1 | 2 | 3;
|
|
283
|
+
sections?: FormSection[];
|
|
284
|
+
};
|
|
285
|
+
/** Normalized descriptor the edit panel renders from (one per visible-in-form field). */
|
|
286
|
+
export type FormFieldDescriptor = {
|
|
287
|
+
field: string;
|
|
288
|
+
label: string;
|
|
289
|
+
editorType: StudioEditorType;
|
|
290
|
+
type: EntityFieldType;
|
|
291
|
+
required: boolean;
|
|
292
|
+
readonly: boolean;
|
|
293
|
+
/** Mask pattern for the `mask` editor. */
|
|
294
|
+
mask?: string;
|
|
295
|
+
/** Number editor options (step / decimals / affixes). */
|
|
296
|
+
step?: number;
|
|
297
|
+
precision?: number;
|
|
298
|
+
prefix?: string;
|
|
299
|
+
suffix?: string;
|
|
300
|
+
min?: number;
|
|
301
|
+
max?: number;
|
|
302
|
+
minLength?: number;
|
|
303
|
+
maxLength?: number;
|
|
304
|
+
pattern?: string;
|
|
305
|
+
format?: 'email' | 'url';
|
|
306
|
+
options?: ReadonlyArray<CellEditorOption>;
|
|
307
|
+
relation?: EntityField['relation'];
|
|
308
|
+
upload?: EntityField['upload'];
|
|
309
|
+
validate?: StandardSchemaV1;
|
|
310
|
+
defaultValue?: unknown;
|
|
311
|
+
placeholder?: string;
|
|
312
|
+
help?: string;
|
|
313
|
+
span: 1 | 2;
|
|
314
|
+
/** Derived value function, when the field is computed (rendered read-only, live). */
|
|
315
|
+
computed?: (row: RowData) => unknown;
|
|
316
|
+
/** Value-driven visible / disabled / required conditions. See `EntityField.when`. */
|
|
317
|
+
when?: EntityField['when'];
|
|
318
|
+
};
|
|
319
|
+
/** `first_name` / `firstName` / `first-name` -> `First Name`. */
|
|
320
|
+
export declare function titleCase(field: string): string;
|
|
321
|
+
/**
|
|
322
|
+
* Resolve the primary-key field id. Precedence: explicit `schema.idField`,
|
|
323
|
+
* then the single field flagged `primaryKey`, then a field literally named
|
|
324
|
+
* `id`. Throws if none resolves, since every downstream consumer (grid
|
|
325
|
+
* `getRowId`, edit panel, adapters) needs a stable key.
|
|
326
|
+
*/
|
|
327
|
+
export declare function resolveIdField<TData extends RowData>(schema: EntitySchema<TData>): string;
|
|
328
|
+
/**
|
|
329
|
+
* Derive grid columns from a schema. Read-only fields become non-editable
|
|
330
|
+
* columns; `enum` carries its options through as `editorOptions`. The
|
|
331
|
+
* per-field `column` escape hatch is merged last, so any explicit grid prop
|
|
332
|
+
* wins over the derived defaults.
|
|
333
|
+
*/
|
|
334
|
+
export declare function schemaToColumns<TData extends RowData>(schema: EntitySchema<TData>): Array<ColumnDef<TableFeatures, TData>>;
|
|
335
|
+
/**
|
|
336
|
+
* Derive normalized form-field descriptors for the edit panel. Fields hidden
|
|
337
|
+
* from the form are dropped; the primary key is forced read-only (you never
|
|
338
|
+
* edit an id). The form control is the per-field `input.editorType` override,
|
|
339
|
+
* else the type's grid editor default.
|
|
340
|
+
*/
|
|
341
|
+
export declare function schemaToFormFields<TData extends RowData>(schema: EntitySchema<TData>): FormFieldDescriptor[];
|
|
342
|
+
/**
|
|
343
|
+
* Run a field's Standard Schema validator against a value. Returns `null`
|
|
344
|
+
* when valid (or when the field has no validator), else the first issue
|
|
345
|
+
* message. Async validators (some Standard Schema vendors) are awaited.
|
|
346
|
+
*/
|
|
347
|
+
export declare function validateField(field: Pick<EntityField, 'validate'>, value: unknown): Promise<string | null>;
|
|
348
|
+
/**
|
|
349
|
+
* Materialize every `computed` field's value onto a copy of the row, so the
|
|
350
|
+
* grid / export see a real value to render, sort, and filter. Each computed
|
|
351
|
+
* field is evaluated against the original (stored) row, so computed fields
|
|
352
|
+
* cannot depend on one another. Returns the row unchanged when there are none.
|
|
353
|
+
*/
|
|
354
|
+
export declare function applyComputed<TData extends RowData>(schema: EntitySchema<TData>, row: TData): TData;
|
|
355
|
+
/**
|
|
356
|
+
* Run the schema-level cross-field `hooks.validate`. Returns a `{ field:
|
|
357
|
+
* message }` map (empty when valid or when no validate hook is set). Used by
|
|
358
|
+
* both the edit panel (form errors) and `withEntityRules` (write guard).
|
|
359
|
+
*/
|
|
360
|
+
export declare function validateEntity<TData extends RowData>(schema: EntitySchema<TData>, values: Partial<TData>): Promise<Record<string, string>>;
|
|
361
|
+
/** Pick the best human-facing column of a schema: a name/title/label field, else the first text field, else the id. */
|
|
362
|
+
export declare function pickLabelField<TData extends RowData>(schema: EntitySchema<TData>): string;
|
|
363
|
+
/**
|
|
364
|
+
* Resolve each `relation` field's `labelField` against the actual related
|
|
365
|
+
* schema. When you introspect several tables, foreign keys only know the related
|
|
366
|
+
* table name - this fills in a good display field (name / title / ...) from the
|
|
367
|
+
* related schema. Returns new schemas; inputs are untouched.
|
|
368
|
+
*/
|
|
369
|
+
export declare function linkRelationLabels<TData extends RowData>(schemas: EntitySchema<TData>[]): EntitySchema<TData>[];
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// --- derivation ------------------------------------------------------------
|
|
2
|
+
/** `first_name` / `firstName` / `first-name` -> `First Name`. */
|
|
3
|
+
export function titleCase(field) {
|
|
4
|
+
return field
|
|
5
|
+
.replace(/[_-]+/g, ' ')
|
|
6
|
+
.replace(/([a-z\d])([A-Z])/g, '$1 $2')
|
|
7
|
+
.replace(/\s+/g, ' ')
|
|
8
|
+
.trim()
|
|
9
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the primary-key field id. Precedence: explicit `schema.idField`,
|
|
13
|
+
* then the single field flagged `primaryKey`, then a field literally named
|
|
14
|
+
* `id`. Throws if none resolves, since every downstream consumer (grid
|
|
15
|
+
* `getRowId`, edit panel, adapters) needs a stable key.
|
|
16
|
+
*/
|
|
17
|
+
export function resolveIdField(schema) {
|
|
18
|
+
if (schema.idField)
|
|
19
|
+
return schema.idField;
|
|
20
|
+
const flagged = schema.fields.filter((f) => f.primaryKey);
|
|
21
|
+
if (flagged.length === 1)
|
|
22
|
+
return flagged[0].field;
|
|
23
|
+
if (flagged.length > 1) {
|
|
24
|
+
throw new Error(`EntitySchema "${schema.name}": multiple fields set primaryKey (${flagged
|
|
25
|
+
.map((f) => f.field)
|
|
26
|
+
.join(', ')}). Set exactly one, or use idField for a composite key.`);
|
|
27
|
+
}
|
|
28
|
+
const byName = schema.fields.find((f) => f.field === 'id');
|
|
29
|
+
if (byName)
|
|
30
|
+
return byName.field;
|
|
31
|
+
throw new Error(`EntitySchema "${schema.name}": no primary key. Set idField, flag a field primaryKey, or name a field "id".`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Map a form control (StudioEditorType) to a valid grid cell editor. The form-only
|
|
35
|
+
* editors have no in-cell equivalent, so they degrade: `slider` -> `number`,
|
|
36
|
+
* `phone`/`country`/`mask` -> `text`. Returns undefined when no override is set.
|
|
37
|
+
*/
|
|
38
|
+
function gridEditorType(t) {
|
|
39
|
+
if (!t)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (t === 'slider')
|
|
42
|
+
return 'number';
|
|
43
|
+
if (t === 'phone' || t === 'country' || t === 'mask')
|
|
44
|
+
return 'text';
|
|
45
|
+
return t;
|
|
46
|
+
}
|
|
47
|
+
/** Grid render defaults per entity type: which `cellDataType` + `editorType` a field maps to. */
|
|
48
|
+
function gridTypeFor(type) {
|
|
49
|
+
switch (type) {
|
|
50
|
+
case 'number':
|
|
51
|
+
return { cellDataType: 'number', editorType: 'number' };
|
|
52
|
+
case 'boolean':
|
|
53
|
+
return { cellDataType: 'boolean', editorType: 'checkbox' };
|
|
54
|
+
case 'date':
|
|
55
|
+
return { cellDataType: 'date', editorType: 'date' };
|
|
56
|
+
case 'dateString':
|
|
57
|
+
return { cellDataType: 'dateString', editorType: 'date' };
|
|
58
|
+
case 'datetime':
|
|
59
|
+
return { editorType: 'datetime' };
|
|
60
|
+
case 'enum':
|
|
61
|
+
return { editorType: 'select' };
|
|
62
|
+
case 'relation':
|
|
63
|
+
return { editorType: 'select' };
|
|
64
|
+
case 'json':
|
|
65
|
+
return { editorType: 'textarea' };
|
|
66
|
+
case 'text':
|
|
67
|
+
default:
|
|
68
|
+
return { cellDataType: 'text', editorType: 'text' };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function hiddenFor(field, surface) {
|
|
72
|
+
if (field.hidden === true)
|
|
73
|
+
return true;
|
|
74
|
+
if (field.hidden && typeof field.hidden === 'object')
|
|
75
|
+
return field.hidden[surface] === true;
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Derive grid columns from a schema. Read-only fields become non-editable
|
|
80
|
+
* columns; `enum` carries its options through as `editorOptions`. The
|
|
81
|
+
* per-field `column` escape hatch is merged last, so any explicit grid prop
|
|
82
|
+
* wins over the derived defaults.
|
|
83
|
+
*/
|
|
84
|
+
export function schemaToColumns(schema) {
|
|
85
|
+
return schema.fields
|
|
86
|
+
.filter((f) => !hiddenFor(f, 'grid'))
|
|
87
|
+
.map((f) => {
|
|
88
|
+
const { cellDataType, editorType } = gridTypeFor(f.type);
|
|
89
|
+
// A number field whose label carries a "$" is money: format it as currency.
|
|
90
|
+
const isMoney = f.type === 'number' && /\$/.test(f.label ?? '');
|
|
91
|
+
const col = {
|
|
92
|
+
field: f.field,
|
|
93
|
+
header: f.label ?? titleCase(f.field),
|
|
94
|
+
editable: !f.readonly && !f.computed,
|
|
95
|
+
...(cellDataType ? { cellDataType } : {}),
|
|
96
|
+
...(gridEditorType(f.input?.editorType) ?? editorType ? { editorType: (gridEditorType(f.input?.editorType) ?? editorType) } : {}),
|
|
97
|
+
...(f.options ? { editorOptions: f.options } : {}),
|
|
98
|
+
...(isMoney ? { format: { type: 'currency', currency: 'USD', options: { maximumFractionDigits: 0 } } } : {}),
|
|
99
|
+
// A computed field derives its cell value via the grid's value accessor,
|
|
100
|
+
// so it renders, sorts, and filters client-side with no materialization.
|
|
101
|
+
...(f.computed ? { fieldFn: f.computed } : {}),
|
|
102
|
+
...(f.column ?? {}),
|
|
103
|
+
};
|
|
104
|
+
return col;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Derive normalized form-field descriptors for the edit panel. Fields hidden
|
|
109
|
+
* from the form are dropped; the primary key is forced read-only (you never
|
|
110
|
+
* edit an id). The form control is the per-field `input.editorType` override,
|
|
111
|
+
* else the type's grid editor default.
|
|
112
|
+
*/
|
|
113
|
+
export function schemaToFormFields(schema) {
|
|
114
|
+
const idField = resolveIdField(schema);
|
|
115
|
+
return schema.fields
|
|
116
|
+
.filter((f) => !hiddenFor(f, 'form'))
|
|
117
|
+
.map((f) => {
|
|
118
|
+
const { editorType } = gridTypeFor(f.type);
|
|
119
|
+
const isId = f.field === idField;
|
|
120
|
+
return {
|
|
121
|
+
field: f.field,
|
|
122
|
+
label: f.label ?? titleCase(f.field),
|
|
123
|
+
editorType: f.input?.editorType ?? editorType,
|
|
124
|
+
type: f.type,
|
|
125
|
+
required: !!f.required && !isId,
|
|
126
|
+
readonly: !!f.readonly || isId || !!f.computed,
|
|
127
|
+
mask: f.input?.mask,
|
|
128
|
+
step: f.input?.step,
|
|
129
|
+
precision: f.input?.precision,
|
|
130
|
+
prefix: f.input?.prefix,
|
|
131
|
+
suffix: f.input?.suffix,
|
|
132
|
+
min: f.min,
|
|
133
|
+
max: f.max,
|
|
134
|
+
minLength: f.minLength,
|
|
135
|
+
maxLength: f.maxLength,
|
|
136
|
+
pattern: f.pattern,
|
|
137
|
+
format: f.format,
|
|
138
|
+
options: f.options,
|
|
139
|
+
relation: f.relation,
|
|
140
|
+
upload: f.upload,
|
|
141
|
+
validate: f.validate,
|
|
142
|
+
defaultValue: f.defaultValue,
|
|
143
|
+
placeholder: f.input?.placeholder,
|
|
144
|
+
help: f.input?.help,
|
|
145
|
+
span: f.input?.span ?? (f.type === 'json' ? 2 : 1),
|
|
146
|
+
computed: f.computed,
|
|
147
|
+
when: f.when,
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Run a field's Standard Schema validator against a value. Returns `null`
|
|
153
|
+
* when valid (or when the field has no validator), else the first issue
|
|
154
|
+
* message. Async validators (some Standard Schema vendors) are awaited.
|
|
155
|
+
*/
|
|
156
|
+
export async function validateField(field, value) {
|
|
157
|
+
if (!field.validate)
|
|
158
|
+
return null;
|
|
159
|
+
const result = await field.validate['~standard'].validate(value);
|
|
160
|
+
const first = 'issues' in result ? result.issues?.[0] : undefined;
|
|
161
|
+
return first ? first.message : null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Materialize every `computed` field's value onto a copy of the row, so the
|
|
165
|
+
* grid / export see a real value to render, sort, and filter. Each computed
|
|
166
|
+
* field is evaluated against the original (stored) row, so computed fields
|
|
167
|
+
* cannot depend on one another. Returns the row unchanged when there are none.
|
|
168
|
+
*/
|
|
169
|
+
export function applyComputed(schema, row) {
|
|
170
|
+
const computed = schema.fields.filter((f) => f.computed);
|
|
171
|
+
if (computed.length === 0)
|
|
172
|
+
return row;
|
|
173
|
+
const out = { ...row };
|
|
174
|
+
for (const f of computed)
|
|
175
|
+
out[f.field] = f.computed(row);
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Run the schema-level cross-field `hooks.validate`. Returns a `{ field:
|
|
180
|
+
* message }` map (empty when valid or when no validate hook is set). Used by
|
|
181
|
+
* both the edit panel (form errors) and `withEntityRules` (write guard).
|
|
182
|
+
*/
|
|
183
|
+
export async function validateEntity(schema, values) {
|
|
184
|
+
if (!schema.hooks?.validate)
|
|
185
|
+
return {};
|
|
186
|
+
return (await schema.hooks.validate(values)) ?? {};
|
|
187
|
+
}
|
|
188
|
+
/** Pick the best human-facing column of a schema: a name/title/label field, else the first text field, else the id. */
|
|
189
|
+
export function pickLabelField(schema) {
|
|
190
|
+
const byName = schema.fields.find((f) => /^(name|title|label)$/i.test(f.field));
|
|
191
|
+
if (byName)
|
|
192
|
+
return byName.field;
|
|
193
|
+
const idField = schema.idField ?? schema.fields.find((f) => f.primaryKey)?.field;
|
|
194
|
+
const text = schema.fields.find((f) => f.type === 'text' && f.field !== idField);
|
|
195
|
+
return text?.field ?? idField ?? schema.fields[0].field;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Resolve each `relation` field's `labelField` against the actual related
|
|
199
|
+
* schema. When you introspect several tables, foreign keys only know the related
|
|
200
|
+
* table name - this fills in a good display field (name / title / ...) from the
|
|
201
|
+
* related schema. Returns new schemas; inputs are untouched.
|
|
202
|
+
*/
|
|
203
|
+
export function linkRelationLabels(schemas) {
|
|
204
|
+
const byName = new Map(schemas.map((s) => [s.name, s]));
|
|
205
|
+
return schemas.map((schema) => ({
|
|
206
|
+
...schema,
|
|
207
|
+
fields: schema.fields.map((f) => {
|
|
208
|
+
if (f.type !== 'relation' || !f.relation)
|
|
209
|
+
return f;
|
|
210
|
+
const related = byName.get(f.relation.entity);
|
|
211
|
+
if (!related)
|
|
212
|
+
return f;
|
|
213
|
+
return { ...f, relation: { ...f.relation, labelField: pickLabelField(related) } };
|
|
214
|
+
}),
|
|
215
|
+
}));
|
|
216
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
type SmartGlobal = {
|
|
2
|
+
Utilities: {
|
|
3
|
+
Assign(name: string, cls: unknown): void;
|
|
4
|
+
Core: {
|
|
5
|
+
toDash(input: string): string;
|
|
6
|
+
};
|
|
7
|
+
DataExporter?: new (options: Record<string, unknown>, groupBy?: ReadonlyArray<string>, filterBy?: Record<string, unknown>, conditionalFormatting?: unknown) => SmartDataExporterInstance;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Shape of the image object Smart's xlsx writer expects from
|
|
13
|
+
* `addImageToCell(...).image`. `base64` may be a full data URL; the
|
|
14
|
+
* exporter strips the prefix.
|
|
15
|
+
*/
|
|
16
|
+
export type SmartImageDescriptor = {
|
|
17
|
+
id: string;
|
|
18
|
+
base64: string;
|
|
19
|
+
imageType: string;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
export type SmartDataExporterInstance = {
|
|
24
|
+
/**
|
|
25
|
+
* Smart looks for these on the INSTANCE (not the constructor opts) at
|
|
26
|
+
* exportData() time. The wrapper sets them after `new DataExporter(...)`.
|
|
27
|
+
*/
|
|
28
|
+
headerContent?: Array<{
|
|
29
|
+
cells: Record<string, unknown>;
|
|
30
|
+
style?: Record<string, unknown>;
|
|
31
|
+
}>;
|
|
32
|
+
footerContent?: Array<{
|
|
33
|
+
cells: Record<string, unknown>;
|
|
34
|
+
style?: Record<string, unknown>;
|
|
35
|
+
}>;
|
|
36
|
+
addImageToCell?: (rowIndex: number, dataField: string, value: unknown, rawValue: unknown, row: Record<string, unknown>, arrIndex: number) => {
|
|
37
|
+
image: SmartImageDescriptor;
|
|
38
|
+
value?: unknown;
|
|
39
|
+
} | null;
|
|
40
|
+
spreadsheets?: ReadonlyArray<{
|
|
41
|
+
label: string;
|
|
42
|
+
dataSource: ReadonlyArray<Record<string, unknown>>;
|
|
43
|
+
/** `format` is an optional Smart/Excel number-format token consumed by
|
|
44
|
+
* the xlsx writer's `getXLSXFormat` to keep a column's cells typed. */
|
|
45
|
+
columns: ReadonlyArray<{
|
|
46
|
+
dataField: string;
|
|
47
|
+
label: string;
|
|
48
|
+
format?: string;
|
|
49
|
+
width?: number;
|
|
50
|
+
}>;
|
|
51
|
+
dataFields: ReadonlyArray<string>;
|
|
52
|
+
style?: unknown;
|
|
53
|
+
}>;
|
|
54
|
+
exportData(data: ReadonlyArray<Record<string, unknown>>, format: string, filename?: string, callback?: (result: unknown) => void): unknown;
|
|
55
|
+
};
|
|
56
|
+
declare global {
|
|
57
|
+
interface Window {
|
|
58
|
+
Smart?: SmartGlobal;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export declare function installSmartShim(): void;
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Minimal globalThis.Smart shim so the vendored smart.export.js IIFE can
|
|
2
|
+
// register Smart.Utilities.DataExporter without dragging in the rest of the
|
|
3
|
+
// Smart UI runtime. DataExporter calls into Smart.Utilities.{Assign, Core.toDash}
|
|
4
|
+
// at registration; the other namespaces (DateTime, NumberRenderer, Draw,
|
|
5
|
+
// BigNumber, Complex) are guarded by `if (!Smart.Utilities.X) return e;` paths
|
|
6
|
+
// inside the exporter and degrade gracefully when missing.
|
|
7
|
+
//
|
|
8
|
+
// We export a function instead of relying on import-side-effects so callers
|
|
9
|
+
// can deterministically install the shim before the smart.export.js module
|
|
10
|
+
// runs its IIFE.
|
|
11
|
+
let installed = false;
|
|
12
|
+
export function installSmartShim() {
|
|
13
|
+
if (installed)
|
|
14
|
+
return;
|
|
15
|
+
if (typeof window === 'undefined') {
|
|
16
|
+
throw new Error('@svgrid/enterprise: installSmartShim() requires a browser environment');
|
|
17
|
+
}
|
|
18
|
+
const existing = window.Smart;
|
|
19
|
+
const shim = existing ?? ({ Utilities: {} });
|
|
20
|
+
shim.Utilities = shim.Utilities ?? {};
|
|
21
|
+
if (typeof shim.Utilities.Assign !== 'function') {
|
|
22
|
+
shim.Utilities.Assign = (name, cls) => {
|
|
23
|
+
;
|
|
24
|
+
shim.Utilities[name] = cls;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (!shim.Utilities.Core || typeof shim.Utilities.Core.toDash !== 'function') {
|
|
28
|
+
shim.Utilities.Core = {
|
|
29
|
+
toDash: (s) => s.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase()),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
window.Smart = shim;
|
|
33
|
+
installed = true;
|
|
34
|
+
}
|