@svgrid/enterprise 2.5.3 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/{src → dist}/SvExpressionEditor.svelte +4 -1
- 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/{src → dist}/SvGridEditPanel.svelte +173 -28
- package/dist/SvGridEditPanel.svelte.d.ts +75 -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 +3220 -2607
- package/dist/designer/assets/index-BfzoL904.css +1 -0
- package/dist/designer/assets/{index-CBYU-KNn.js → index-CKdwDseq.js} +139 -139
- package/dist/designer/assets/src-DCKhP5Xy.css +1 -0
- package/dist/designer/assets/{src-i309BeJb.js → src-DLsSdh3J.js} +213 -193
- package/dist/designer/index.html +4 -4
- 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 +683 -13
- 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 +408 -0
- package/dist/schema.js +225 -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 +5463 -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 +41 -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 +1448 -0
- package/dist/studio/project.js +2187 -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 +7319 -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 +28 -26
- package/dist/designer/assets/index-oYok52zd.css +0 -1
- package/dist/designer/assets/src-D-O2F805.css +0 -1
- 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 -144
- package/src/license.ts +0 -157
- 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}/SvFileInput.svelte +0 -0
- /package/{src → dist}/SvGridAlerts.svelte +0 -0
- /package/{src → dist}/SvGridBoard.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
|
@@ -89,6 +89,8 @@
|
|
|
89
89
|
* Fields not in any section render in a trailing default group. When set,
|
|
90
90
|
* `formFields` ordering is per-section. */
|
|
91
91
|
sections?: FormSection[]
|
|
92
|
+
/** Ask one section at a time (Back / Next). Defaults to the schema's `form.steps`. */
|
|
93
|
+
steps?: boolean
|
|
92
94
|
/** Dialog width for the modal / drawer presentations. Default 'md'. */
|
|
93
95
|
formSize?: 'sm' | 'md' | 'lg'
|
|
94
96
|
onSubmit: (payload: SubmitPayload) => void | Promise<void>
|
|
@@ -109,6 +111,7 @@
|
|
|
109
111
|
columns,
|
|
110
112
|
formFields,
|
|
111
113
|
sections,
|
|
114
|
+
steps,
|
|
112
115
|
formSize = 'md',
|
|
113
116
|
onSubmit,
|
|
114
117
|
onCancel,
|
|
@@ -144,22 +147,87 @@
|
|
|
144
147
|
|
|
145
148
|
// Grouped layout: each section's resolvable fields, plus a trailing group for
|
|
146
149
|
// anything not assigned to a section (so no field is ever silently dropped).
|
|
147
|
-
|
|
148
|
-
|
|
150
|
+
// Read straight off the layout, not off `fieldGroups` - the grouping needs to
|
|
151
|
+
// know whether we are stepping, so it cannot be what decides it.
|
|
152
|
+
const wantSteps = $derived(!!(steps ?? schema.form?.steps) && !!layoutSections?.length)
|
|
153
|
+
const fieldGroups = $derived.by((): Array<{ title?: string; description?: string; columns?: 1 | 2 | 3; collapsible?: boolean; key: string; fields: FormFieldDescriptor[] }> => {
|
|
154
|
+
if (!layoutSections || !layoutSections.length) return [{ key: '', fields }]
|
|
149
155
|
const assigned = new Set<string>()
|
|
150
|
-
const groups = layoutSections.map((s) => {
|
|
156
|
+
const groups = layoutSections.map((s, i) => {
|
|
151
157
|
const gf = s.fields.map((name) => fields.find((f) => f.field === name)).filter(Boolean) as FormFieldDescriptor[]
|
|
152
158
|
for (const f of gf) assigned.add(f.field)
|
|
153
159
|
// A section can be conditional in its own right, the same way a field is.
|
|
154
160
|
const shown = s.visibleWhen ? sectionVisible(s.visibleWhen, values) : true
|
|
155
|
-
return { title: s.title, description: s.description, columns: s.columns, fields: shown ? gf : [] }
|
|
161
|
+
return { title: s.title, description: s.description, columns: s.columns, collapsible: s.collapsible, key: `${i}`, fields: shown ? gf : [] }
|
|
156
162
|
})
|
|
157
163
|
const rest = fields.filter((f) => !assigned.has(f.field))
|
|
158
164
|
// A section whose fields are all hidden by a condition disappears with them,
|
|
159
165
|
// rather than leaving a heading over nothing.
|
|
160
166
|
const shown = groups.filter((g) => g.fields.length)
|
|
161
|
-
|
|
167
|
+
if (!rest.length) return shown
|
|
168
|
+
// Stepping, the leftovers join the last step rather than becoming a step of
|
|
169
|
+
// their own: an untitled "Step 4" holding whatever nobody placed is a
|
|
170
|
+
// mystery, and every step of a wizard should be deliberate.
|
|
171
|
+
if (wantSteps && shown.length) {
|
|
172
|
+
const last = shown[shown.length - 1]!
|
|
173
|
+
return [...shown.slice(0, -1), { ...last, fields: [...last.fields, ...rest] }]
|
|
174
|
+
}
|
|
175
|
+
return [...shown, { key: 'rest', fields: rest }]
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
// Which collapsible sections the user has folded away. Seeded from the
|
|
179
|
+
// layout's `collapsed`, then owned by the user for the life of the form.
|
|
180
|
+
let folded = $state<Record<string, boolean>>({})
|
|
181
|
+
$effect(() => {
|
|
182
|
+
const seed: Record<string, boolean> = {}
|
|
183
|
+
;(layoutSections ?? []).forEach((s, i) => { if (s.collapsible && s.collapsed) seed[`${i}`] = true })
|
|
184
|
+
folded = seed
|
|
162
185
|
})
|
|
186
|
+
/**
|
|
187
|
+
* A folded section is a display state, not a condition - its fields are still
|
|
188
|
+
* validated. So a section holding an error is forced open: a failed submit
|
|
189
|
+
* must never point at something the user cannot see.
|
|
190
|
+
*/
|
|
191
|
+
const groupHasError = (g: { fields: FormFieldDescriptor[] }) => g.fields.some((f) => shownErrors[f.field])
|
|
192
|
+
// Never folded while stepping: a step is already one group at a time, and a
|
|
193
|
+
// step you have to unfold before you can fill it in is just an extra click.
|
|
194
|
+
const isFolded = (g: { key: string; collapsible?: boolean; fields: FormFieldDescriptor[] }) =>
|
|
195
|
+
!stepped && !!g.collapsible && !!folded[g.key] && !groupHasError(g)
|
|
196
|
+
|
|
197
|
+
// --- Steps -----------------------------------------------------------------
|
|
198
|
+
// One section at a time. The groups are already the steps (a section hidden by
|
|
199
|
+
// its condition has been filtered out upstream, so the count follows the
|
|
200
|
+
// answers), which is why there is no second list to keep in sync.
|
|
201
|
+
const stepped = $derived(wantSteps && fieldGroups.length > 1)
|
|
202
|
+
let step = $state(0)
|
|
203
|
+
// Clamp rather than reset: answering something that hides a later section must
|
|
204
|
+
// not throw the user back to the beginning.
|
|
205
|
+
const stepIndex = $derived(stepped ? Math.min(step, fieldGroups.length - 1) : 0)
|
|
206
|
+
const visibleGroups = $derived(stepped ? [fieldGroups[stepIndex]!] : fieldGroups)
|
|
207
|
+
const isLastStep = $derived(stepIndex === fieldGroups.length - 1)
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Move to the next step, but only once this one is clean. Validating just the
|
|
211
|
+
* step you are on is the point of a wizard: errors surface where they were
|
|
212
|
+
* made instead of arriving in a heap at the end.
|
|
213
|
+
*/
|
|
214
|
+
async function nextStep() {
|
|
215
|
+
const group = fieldGroups[stepIndex]
|
|
216
|
+
if (!group) return
|
|
217
|
+
let bad = false
|
|
218
|
+
for (const f of group.fields) {
|
|
219
|
+
touched[f.field] = true
|
|
220
|
+
const message = await validateOne(schema, f.field, values)
|
|
221
|
+
if (message) { errors[f.field] = message; bad = true }
|
|
222
|
+
else delete errors[f.field]
|
|
223
|
+
}
|
|
224
|
+
if (bad) {
|
|
225
|
+
const first = group.fields.find((f) => errors[f.field])
|
|
226
|
+
if (first) focusField(first.field)
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
step = stepIndex + 1
|
|
230
|
+
}
|
|
163
231
|
|
|
164
232
|
// Options for the custom dropdown: prepend a blank "clear" option for
|
|
165
233
|
// non-required fields (parity with the native select's empty option).
|
|
@@ -184,6 +252,7 @@
|
|
|
184
252
|
errors = {}
|
|
185
253
|
touched = {}
|
|
186
254
|
submitAttempted = false
|
|
255
|
+
step = 0
|
|
187
256
|
submitError = null
|
|
188
257
|
confirmingDiscard = false
|
|
189
258
|
})
|
|
@@ -243,13 +312,22 @@
|
|
|
243
312
|
|
|
244
313
|
async function handleSubmit(event: SubmitEvent) {
|
|
245
314
|
event.preventDefault()
|
|
315
|
+
// Enter in a text field still submits a form even with no submit button on
|
|
316
|
+
// screen. Mid-wizard that would save a half-filled record, so it advances
|
|
317
|
+
// instead - the same thing Next does.
|
|
318
|
+
if (stepped && !isLastStep) { void nextStep(); return }
|
|
246
319
|
submitError = null
|
|
247
320
|
submitAttempted = true
|
|
248
321
|
const found = await validateAll(schema, values)
|
|
249
322
|
errors = found
|
|
250
323
|
if (Object.keys(found).length > 0) {
|
|
251
|
-
// Put the user on the first thing they need to fix
|
|
324
|
+
// Put the user on the first thing they need to fix - and, when stepping,
|
|
325
|
+
// on the step it is actually on, or the focus would land off-screen.
|
|
252
326
|
const first = fields.find((f) => found[f.field])
|
|
327
|
+
if (stepped && first) {
|
|
328
|
+
const at = fieldGroups.findIndex((g) => g.fields.some((f) => found[f.field]))
|
|
329
|
+
if (at >= 0) step = at
|
|
330
|
+
}
|
|
253
331
|
if (first) focusField(first.field)
|
|
254
332
|
return
|
|
255
333
|
}
|
|
@@ -482,12 +560,38 @@
|
|
|
482
560
|
</div>
|
|
483
561
|
{/if}
|
|
484
562
|
|
|
563
|
+
{#if stepped}
|
|
564
|
+
<!-- Where you are, and how much is left. Named steps beat "3 of 7": the
|
|
565
|
+
titles are already written, so use them. -->
|
|
566
|
+
<ol class="sv-ep__steps" aria-label="Form steps">
|
|
567
|
+
{#each fieldGroups as g, gi (gi)}
|
|
568
|
+
<li class="sv-ep__step" class:is-current={gi === stepIndex} class:is-done={gi < stepIndex} aria-current={gi === stepIndex ? 'step' : undefined}>
|
|
569
|
+
<span class="sv-ep__step-dot" aria-hidden="true">{gi < stepIndex ? '✓' : gi + 1}</span>
|
|
570
|
+
<span class="sv-ep__step-label">{g.title ?? `Step ${gi + 1}`}</span>
|
|
571
|
+
</li>
|
|
572
|
+
{/each}
|
|
573
|
+
</ol>
|
|
574
|
+
{/if}
|
|
575
|
+
|
|
485
576
|
{#if fieldGroups.length > 1 || fieldGroups[0]?.title}
|
|
486
|
-
{#each
|
|
577
|
+
{#each visibleGroups as g, gi (gi)}
|
|
578
|
+
{@const shut = isFolded(g)}
|
|
487
579
|
<div class="sv-ep__section">
|
|
488
|
-
{#if g.
|
|
489
|
-
|
|
490
|
-
|
|
580
|
+
{#if g.collapsible && g.title}
|
|
581
|
+
<!-- The heading becomes the control, so the whole row is the target
|
|
582
|
+
rather than a small chevron beside it. -->
|
|
583
|
+
<h4 class="sv-ep__section-title">
|
|
584
|
+
<button type="button" class="sv-ep__section-toggle" aria-expanded={!shut} aria-controls={`sv-eg-${gi}`} onclick={() => (folded[g.key] = !folded[g.key])}>
|
|
585
|
+
<span class="sv-ep__section-caret" class:is-shut={shut} aria-hidden="true"></span>
|
|
586
|
+
{g.title}
|
|
587
|
+
{#if shut}<span class="sv-ep__section-count">{g.fields.length}</span>{/if}
|
|
588
|
+
</button>
|
|
589
|
+
</h4>
|
|
590
|
+
{:else if g.title}
|
|
591
|
+
<h4 class="sv-ep__section-title">{g.title}</h4>
|
|
592
|
+
{/if}
|
|
593
|
+
{#if g.description && !shut}<p class="sv-ep__section-desc">{g.description}</p>{/if}
|
|
594
|
+
<div class="sv-ep__body" id={`sv-eg-${gi}`} hidden={shut} style="--sv-ep-cols: {g.columns ?? layoutColumns}">
|
|
491
595
|
{#each g.fields as f (f.field)}{@render fieldRow(f)}{/each}
|
|
492
596
|
</div>
|
|
493
597
|
</div>
|
|
@@ -509,9 +613,18 @@
|
|
|
509
613
|
{#if onCancel}
|
|
510
614
|
<button type="button" class="sv-ep__btn" onclick={close} disabled={submitting}>Cancel</button>
|
|
511
615
|
{/if}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
616
|
+
{#if stepped && stepIndex > 0}
|
|
617
|
+
<button type="button" class="sv-ep__btn" onclick={() => (step = stepIndex - 1)} disabled={submitting}>Back</button>
|
|
618
|
+
{/if}
|
|
619
|
+
{#if stepped && !isLastStep}
|
|
620
|
+
<!-- Not a submit button: Next validates this step only, and a stray
|
|
621
|
+
Enter in a text field must not save a half-filled record. -->
|
|
622
|
+
<button type="button" class="sv-ep__btn sv-ep__btn--primary" onclick={nextStep} disabled={submitting}>Next</button>
|
|
623
|
+
{:else}
|
|
624
|
+
<button type="submit" class="sv-ep__btn sv-ep__btn--primary" disabled={submitting}>
|
|
625
|
+
{submitting ? 'Saving…' : (submitLabel ?? (mode === 'create' ? 'Create' : 'Save'))}
|
|
626
|
+
</button>
|
|
627
|
+
{/if}
|
|
515
628
|
{/if}
|
|
516
629
|
</footer>
|
|
517
630
|
</form>
|
|
@@ -571,28 +684,28 @@
|
|
|
571
684
|
<!-- Boolean fields render as the suite's switch (nicer than a raw checkbox). -->
|
|
572
685
|
<SvSwitchButton id={`sv-ef-${f.field}`} ariaLabel={f.label} checked={!!values[f.field]} disabled={f.readonly} onChange={(v) => (values[f.field] = v)} />
|
|
573
686
|
{:else if f.editorType === 'number'}
|
|
574
|
-
<SvNumberInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toNumberValue(values[f.field])} min={f.min} max={f.max} step={f.step} precision={f.precision} prefix={f.prefix} suffix={f.suffix} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = fromNumberValue(v))} />
|
|
687
|
+
<SvNumberInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toNumberValue(values[f.field])} min={f.min} max={f.max} step={f.step} precision={f.precision} prefix={f.prefix} suffix={f.suffix} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = fromNumberValue(v))} />
|
|
575
688
|
{:else if f.editorType === 'color'}
|
|
576
|
-
<SvColorInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] || '#3b82f6'} disabled={f.readonly} invalid={!!err} onChange={(v) => (values[f.field] = v)} />
|
|
689
|
+
<SvColorInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] || '#3b82f6'} disabled={f.readonly} invalid={!!err} onChange={(v) => (values[f.field] = v)} />
|
|
577
690
|
{:else if f.editorType === 'password'}
|
|
578
|
-
<SvPasswordInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
691
|
+
<SvPasswordInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
579
692
|
{:else if f.editorType === 'rating' || f.editorType === 'slider'}
|
|
580
693
|
{@const rmin = f.min ?? 0}
|
|
581
694
|
{@const rmax = f.max ?? (f.editorType === 'rating' ? 5 : 100)}
|
|
582
|
-
<SvSlider id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toSliderValue(values[f.field], rmin)} min={rmin} max={rmax} step={1} ticks={f.editorType === 'rating' ? rmax - rmin + 1 : undefined} disabled={f.readonly} onChange={(v) => (values[f.field] = v)} />
|
|
695
|
+
<SvSlider block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toSliderValue(values[f.field], rmin)} min={rmin} max={rmax} step={1} ticks={f.editorType === 'rating' ? rmax - rmin + 1 : undefined} disabled={f.readonly} onChange={(v) => (values[f.field] = v)} />
|
|
583
696
|
{:else if f.editorType === 'phone'}
|
|
584
|
-
<SvPhoneInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
697
|
+
<SvPhoneInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
585
698
|
{:else if f.editorType === 'country'}
|
|
586
|
-
<SvCountryInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} disabled={f.readonly} invalid={!!err} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
699
|
+
<SvCountryInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} disabled={f.readonly} invalid={!!err} placeholder={f.placeholder} onChange={(v) => (values[f.field] = v)} />
|
|
587
700
|
{:else if f.editorType === 'mask'}
|
|
588
|
-
<SvMaskedInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} mask={f.mask ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(masked) => (values[f.field] = masked)} />
|
|
701
|
+
<SvMaskedInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? ''} mask={f.mask ?? ''} disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder} onChange={(masked) => (values[f.field] = masked)} />
|
|
589
702
|
{:else if f.editorType === 'date'}
|
|
590
|
-
<SvDateTimePicker id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} dropDownDisplayMode="calendar" formatString="yyyy-MM-dd" nullable disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder ?? 'yyyy-mm-dd'} onChange={(d) => (values[f.field] = toDateString(d))} />
|
|
703
|
+
<SvDateTimePicker block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} dropDownDisplayMode="calendar" formatString="yyyy-MM-dd" nullable disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder ?? 'yyyy-mm-dd'} onChange={(d) => (values[f.field] = toDateString(d))} />
|
|
591
704
|
{:else if f.editorType === 'datetime'}
|
|
592
|
-
<SvDateTimePicker id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} formatString="yyyy-MM-dd HH:mm" nullable disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder ?? 'yyyy-mm-dd hh:mm'} onChange={(d) => (values[f.field] = toDateTimeString(d))} />
|
|
705
|
+
<SvDateTimePicker block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={values[f.field] ?? null} formatString="yyyy-MM-dd HH:mm" nullable disabled={f.readonly} invalid={!!err} required={f.required && !f.readonly} placeholder={f.placeholder ?? 'yyyy-mm-dd hh:mm'} onChange={(d) => (values[f.field] = toDateTimeString(d))} />
|
|
593
706
|
{:else if f.editorType === 'chips'}
|
|
594
707
|
<!-- Multi-value entry: stores a string[]. (Previously a chips field fell back to a single-select.) -->
|
|
595
|
-
<SvTagsInput id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toTags(values[f.field])} disabled={f.readonly} invalid={!!err} placeholder={f.placeholder ?? 'Add…'} onChange={(tags) => (values[f.field] = tags)} />
|
|
708
|
+
<SvTagsInput block id={`sv-ef-${f.field}`} ariaLabel={f.label} value={toTags(values[f.field])} disabled={f.readonly} invalid={!!err} placeholder={f.placeholder ?? 'Add…'} onChange={(tags) => (values[f.field] = tags)} />
|
|
596
709
|
{:else if kind === 'select'}
|
|
597
710
|
{#if f.readonly}
|
|
598
711
|
<input id={`sv-ef-${f.field}`} aria-invalid={!!err} aria-describedby={describedBy} type="text" value={values[f.field] ?? ''} disabled />
|
|
@@ -674,7 +787,9 @@
|
|
|
674
787
|
{/if}
|
|
675
788
|
</div>
|
|
676
789
|
{:else}
|
|
677
|
-
|
|
790
|
+
<!-- The size class matters for inline too now: it fills its container by
|
|
791
|
+
default, and `formSize` is what narrows it. -->
|
|
792
|
+
<div class="sv-ep sv-ep--inline sv-ep--sz-{formSize}" role="dialog" aria-label={heading}>
|
|
678
793
|
{@render panelInner()}
|
|
679
794
|
</div>
|
|
680
795
|
{/if}
|
|
@@ -742,12 +857,16 @@
|
|
|
742
857
|
display: flex;
|
|
743
858
|
flex-direction: column;
|
|
744
859
|
}
|
|
860
|
+
/* Inline fills whatever it is placed in - a form block on a page is as wide as
|
|
861
|
+
the block, and a fixed cap here made a wide block look broken. Narrow it
|
|
862
|
+
with `formSize` when a full-width form is too much to read. */
|
|
745
863
|
.sv-ep--inline {
|
|
746
864
|
width: 100%;
|
|
747
|
-
max-width: 460px;
|
|
748
865
|
border: 1px solid var(--ep-border);
|
|
749
866
|
border-radius: var(--ep-radius);
|
|
750
867
|
}
|
|
868
|
+
.sv-ep--sz-sm.sv-ep--inline { max-width: 460px; }
|
|
869
|
+
.sv-ep--sz-lg.sv-ep--inline { max-width: 900px; }
|
|
751
870
|
|
|
752
871
|
.sv-ep__form {
|
|
753
872
|
display: flex;
|
|
@@ -849,8 +968,26 @@
|
|
|
849
968
|
/* Grouped layout: one scroll region holds the titled fieldsets. */
|
|
850
969
|
.sv-ep__section { display: flex; flex-direction: column; }
|
|
851
970
|
.sv-ep__section + .sv-ep__section { border-top: 1px solid var(--sg-border, #e6e8ec); }
|
|
852
|
-
|
|
853
|
-
|
|
971
|
+
/* A section heading is a heading, not a label: it reads at the same weight as
|
|
972
|
+
the dialog title, one size down. An all-caps micro-label got lost among the
|
|
973
|
+
field labels, which are themselves small and muted. */
|
|
974
|
+
.sv-ep__section-title { margin: 0; padding: 16px 18px 0; font-size: 13.5px; font-weight: 650; color: var(--ep-fg); }
|
|
975
|
+
.sv-ep__section-desc { margin: 3px 0 0; padding: 0 18px; font-size: 12px; line-height: 1.45; color: var(--sg-muted, #64748b); }
|
|
976
|
+
/* The step rail. Wraps rather than scrolls: a wizard with six steps in a
|
|
977
|
+
narrow drawer should read as two rows, not run off the edge. */
|
|
978
|
+
.sv-ep__steps { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 14px 18px 0; list-style: none; }
|
|
979
|
+
.sv-ep__step { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--sg-muted, #64748b); }
|
|
980
|
+
.sv-ep__step-dot { display: inline-flex; align-items: center; justify-content: center; width: 19px; height: 19px; border-radius: 50%; font-size: 10.5px; font-weight: 700; background: var(--sg-muted-bg, #eef2f7); color: var(--sg-muted, #64748b); }
|
|
981
|
+
.sv-ep__step.is-current { color: var(--ep-fg); font-weight: 600; }
|
|
982
|
+
.sv-ep__step.is-current .sv-ep__step-dot { background: var(--sg-accent, #4f46e5); color: var(--sg-on-accent, #fff); }
|
|
983
|
+
.sv-ep__step.is-done .sv-ep__step-dot { background: color-mix(in srgb, var(--sg-accent, #4f46e5) 18%, transparent); color: var(--sg-accent, #4f46e5); }
|
|
984
|
+
.sv-ep__section-toggle { display: flex; align-items: center; gap: 7px; width: 100%; padding: 0; font: inherit; text-align: left; border: 0; background: none; color: inherit; cursor: pointer; }
|
|
985
|
+
.sv-ep__section-caret { width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid currentColor; transition: transform 120ms ease; }
|
|
986
|
+
.sv-ep__section-caret.is-shut { transform: rotate(-90deg); }
|
|
987
|
+
/* How many fields are hidden in there - a folded group should not look empty. */
|
|
988
|
+
.sv-ep__section-count { display: inline-flex; align-items: center; justify-content: center; min-width: 17px; height: 17px; padding: 0 5px; border-radius: 9px; font-size: 10px; font-weight: 600; background: var(--sg-muted-bg, #eef2f7); color: var(--sg-muted, #64748b); }
|
|
989
|
+
/* The heading owns the gap above its fields, so the group reads as one thing. */
|
|
990
|
+
.sv-ep__section-title + .sv-ep__body, .sv-ep__section-desc + .sv-ep__body { padding-top: 10px; }
|
|
854
991
|
.sv-ep__discard { margin-right: auto; font-size: 12.5px; font-weight: 600; color: var(--ep-danger); }
|
|
855
992
|
.sv-ep__btn--danger { border-color: var(--ep-danger); background: var(--ep-danger); color: #fff; }
|
|
856
993
|
.sv-ep__section .sv-ep__body { flex: 0 0 auto; overflow: visible; }
|
|
@@ -866,11 +1003,19 @@
|
|
|
866
1003
|
.sv-ep-field label {
|
|
867
1004
|
font-size: 12px;
|
|
868
1005
|
font-weight: 550;
|
|
869
|
-
|
|
1006
|
+
/* The label names the thing you are about to type in, so it reads at full
|
|
1007
|
+
strength; muted text is for the hint underneath it. */
|
|
1008
|
+
color: var(--ep-fg);
|
|
1009
|
+
}
|
|
1010
|
+
.sv-ep-field--error label {
|
|
1011
|
+
color: var(--ep-danger);
|
|
870
1012
|
}
|
|
871
1013
|
.sv-ep-field__req {
|
|
872
1014
|
color: var(--ep-danger);
|
|
873
1015
|
}
|
|
1016
|
+
/* Controls fill their cell via the suite's own `block` prop - see the markup.
|
|
1017
|
+
The boolean switch deliberately does not: a full-width toggle is not what
|
|
1018
|
+
anybody means by a checkbox. */
|
|
874
1019
|
.sv-ep-field input,
|
|
875
1020
|
.sv-ep-field textarea {
|
|
876
1021
|
box-sizing: border-box;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
type EditRow = Record<string, unknown>;
|
|
2
|
+
import { type CellEditorOption } from '@svgrid/grid';
|
|
3
|
+
import { type EntitySchema, type FormSection } from './schema';
|
|
4
|
+
import { type EditMode } from './edit-panel';
|
|
5
|
+
import type { RelationLookup } from './sources/relation-lookup';
|
|
6
|
+
declare function $$render<TData extends EditRow>(): {
|
|
7
|
+
props: {
|
|
8
|
+
schema: EntitySchema<TData>;
|
|
9
|
+
row?: TData | null;
|
|
10
|
+
open?: boolean;
|
|
11
|
+
title?: string;
|
|
12
|
+
submitLabel?: string;
|
|
13
|
+
/** 'drawer' (right slide-over, default), 'modal' (centered popup), or 'inline'. */
|
|
14
|
+
presentation?: "inline" | "modal" | "drawer";
|
|
15
|
+
/**
|
|
16
|
+
* Lookup providers keyed by field name. A `relation` field with a lookup
|
|
17
|
+
* renders a searchable picker (search the related entity, store the key).
|
|
18
|
+
* Build them with `createRelationLookup`.
|
|
19
|
+
*/
|
|
20
|
+
lookups?: Record<string, RelationLookup>;
|
|
21
|
+
/** File/image upload handlers by field name (return the URL to store). */
|
|
22
|
+
uploads?: Record<string, (file: File) => Promise<string>>;
|
|
23
|
+
/**
|
|
24
|
+
* Dependent (cascading) options by field name - compute a field's choices
|
|
25
|
+
* from the current form values, e.g. City from Country. The field's value is
|
|
26
|
+
* cleared when it stops being a valid option.
|
|
27
|
+
*/
|
|
28
|
+
dependentOptions?: Record<string, (values: Partial<TData>) => ReadonlyArray<CellEditorOption>>;
|
|
29
|
+
/**
|
|
30
|
+
* Remember the floating modal's window layout (pin / size / maximized) in
|
|
31
|
+
* localStorage under this key, so it reopens where the user left it.
|
|
32
|
+
*/
|
|
33
|
+
persistKey?: string;
|
|
34
|
+
/** Form column count. Defaults to the schema's `form.columns`, else 2. A field
|
|
35
|
+
* with `span: 2` spans all columns. */
|
|
36
|
+
columns?: 1 | 2 | 3;
|
|
37
|
+
/** Restrict + order the form fields (by field name). Default: all schema fields. */
|
|
38
|
+
formFields?: string[];
|
|
39
|
+
/** Group fields into titled fieldsets, overriding the schema's `form.sections`.
|
|
40
|
+
* Fields not in any section render in a trailing default group. When set,
|
|
41
|
+
* `formFields` ordering is per-section. */
|
|
42
|
+
sections?: FormSection[];
|
|
43
|
+
/** Ask one section at a time (Back / Next). Defaults to the schema's `form.steps`. */
|
|
44
|
+
steps?: boolean;
|
|
45
|
+
/** Dialog width for the modal / drawer presentations. Default 'md'. */
|
|
46
|
+
formSize?: "sm" | "md" | "lg";
|
|
47
|
+
onSubmit: (payload: {
|
|
48
|
+
mode: EditMode;
|
|
49
|
+
id: string | null;
|
|
50
|
+
values: Partial<TData>;
|
|
51
|
+
}) => void | Promise<void>;
|
|
52
|
+
onCancel?: () => void;
|
|
53
|
+
};
|
|
54
|
+
exports: {};
|
|
55
|
+
bindings: "";
|
|
56
|
+
slots: {};
|
|
57
|
+
events: {};
|
|
58
|
+
};
|
|
59
|
+
declare class __sveltets_Render<TData extends EditRow> {
|
|
60
|
+
props(): ReturnType<typeof $$render<TData>>['props'];
|
|
61
|
+
events(): ReturnType<typeof $$render<TData>>['events'];
|
|
62
|
+
slots(): ReturnType<typeof $$render<TData>>['slots'];
|
|
63
|
+
bindings(): "";
|
|
64
|
+
exports(): {};
|
|
65
|
+
}
|
|
66
|
+
interface $$IsomorphicComponent {
|
|
67
|
+
new <TData extends EditRow>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TData>['props']>, ReturnType<__sveltets_Render<TData>['events']>, ReturnType<__sveltets_Render<TData>['slots']>> & {
|
|
68
|
+
$$bindings?: ReturnType<__sveltets_Render<TData>['bindings']>;
|
|
69
|
+
} & ReturnType<__sveltets_Render<TData>['exports']>;
|
|
70
|
+
<TData extends EditRow>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
|
|
71
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
72
|
+
}
|
|
73
|
+
declare const SvGridEditPanel: $$IsomorphicComponent;
|
|
74
|
+
type SvGridEditPanel<TData extends EditRow> = InstanceType<typeof SvGridEditPanel<TData>>;
|
|
75
|
+
export default SvGridEditPanel;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
type MdRow = Record<string, unknown>;
|
|
2
|
+
import { type EntitySchema } from './schema';
|
|
3
|
+
declare function $$render<TParent extends MdRow, TChild extends MdRow>(): {
|
|
4
|
+
props: {
|
|
5
|
+
/** The master entity. */
|
|
6
|
+
schema: EntitySchema<TParent>;
|
|
7
|
+
/** Master rows. */
|
|
8
|
+
data: ReadonlyArray<TParent>;
|
|
9
|
+
/** The detail entity, rendered in the nested grid. */
|
|
10
|
+
detailSchema: EntitySchema<TChild>;
|
|
11
|
+
/** Return the child rows for a given master row. */
|
|
12
|
+
getChildren: (parent: TParent) => ReadonlyArray<TChild>;
|
|
13
|
+
/** Height of the outer grid. Default 320. */
|
|
14
|
+
containerHeight?: number | string;
|
|
15
|
+
/** Height of each nested detail grid. Default 200. */
|
|
16
|
+
detailHeight?: number | string;
|
|
17
|
+
/** When set, a parent row click calls this (with the row id) to drill into a
|
|
18
|
+
* detail page, instead of expanding the inline child grid. */
|
|
19
|
+
onParentClick?: (id: string) => void;
|
|
20
|
+
/** Stretch columns to fill the width, like a standard grid. Default `true` so the
|
|
21
|
+
* master + detail cells match a plain `<SvGrid>` instead of using natural widths. */
|
|
22
|
+
fitColumns?: boolean;
|
|
23
|
+
/** Row height (px) - keep in sync with your other grids. Defaults to the grid's own 30. */
|
|
24
|
+
rowHeight?: number;
|
|
25
|
+
/** Zebra-stripe the rows (match a striped grid). */
|
|
26
|
+
zebraRows?: boolean;
|
|
27
|
+
};
|
|
28
|
+
exports: {};
|
|
29
|
+
bindings: "";
|
|
30
|
+
slots: {};
|
|
31
|
+
events: {};
|
|
32
|
+
};
|
|
33
|
+
declare class __sveltets_Render<TParent extends MdRow, TChild extends MdRow> {
|
|
34
|
+
props(): ReturnType<typeof $$render<TParent, TChild>>['props'];
|
|
35
|
+
events(): ReturnType<typeof $$render<TParent, TChild>>['events'];
|
|
36
|
+
slots(): ReturnType<typeof $$render<TParent, TChild>>['slots'];
|
|
37
|
+
bindings(): "";
|
|
38
|
+
exports(): {};
|
|
39
|
+
}
|
|
40
|
+
interface $$IsomorphicComponent {
|
|
41
|
+
new <TParent extends MdRow, TChild extends MdRow>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TParent, TChild>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TParent, TChild>['props']>, ReturnType<__sveltets_Render<TParent, TChild>['events']>, ReturnType<__sveltets_Render<TParent, TChild>['slots']>> & {
|
|
42
|
+
$$bindings?: ReturnType<__sveltets_Render<TParent, TChild>['bindings']>;
|
|
43
|
+
} & ReturnType<__sveltets_Render<TParent, TChild>['exports']>;
|
|
44
|
+
<TParent extends MdRow, TChild extends MdRow>(internal: unknown, props: ReturnType<__sveltets_Render<TParent, TChild>['props']> & {}): ReturnType<__sveltets_Render<TParent, TChild>['exports']>;
|
|
45
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
46
|
+
}
|
|
47
|
+
declare const SvGridMasterDetail: $$IsomorphicComponent;
|
|
48
|
+
type SvGridMasterDetail<TParent extends MdRow, TChild extends MdRow> = InstanceType<typeof SvGridMasterDetail<TParent, TChild>>;
|
|
49
|
+
export default SvGridMasterDetail;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ColumnDef, RowData, TableFeatures, SchedulerConfig } from "@svgrid/grid";
|
|
2
|
+
declare function $$render<TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData>(): {
|
|
3
|
+
props: {
|
|
4
|
+
data: ReadonlyArray<TData>;
|
|
5
|
+
columns: Array<ColumnDef<TFeatures, TData>>;
|
|
6
|
+
scheduler: SchedulerConfig<TFeatures, TData>;
|
|
7
|
+
getRowId?: (row: TData, index: number) => string;
|
|
8
|
+
};
|
|
9
|
+
exports: {};
|
|
10
|
+
bindings: "";
|
|
11
|
+
slots: {};
|
|
12
|
+
events: {};
|
|
13
|
+
};
|
|
14
|
+
declare class __sveltets_Render<TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData> {
|
|
15
|
+
props(): ReturnType<typeof $$render<TFeatures, TData>>['props'];
|
|
16
|
+
events(): ReturnType<typeof $$render<TFeatures, TData>>['events'];
|
|
17
|
+
slots(): ReturnType<typeof $$render<TFeatures, TData>>['slots'];
|
|
18
|
+
bindings(): "";
|
|
19
|
+
exports(): {};
|
|
20
|
+
}
|
|
21
|
+
interface $$IsomorphicComponent {
|
|
22
|
+
new <TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TFeatures, TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TFeatures, TData>['props']>, ReturnType<__sveltets_Render<TFeatures, TData>['events']>, ReturnType<__sveltets_Render<TFeatures, TData>['slots']>> & {
|
|
23
|
+
$$bindings?: ReturnType<__sveltets_Render<TFeatures, TData>['bindings']>;
|
|
24
|
+
} & ReturnType<__sveltets_Render<TFeatures, TData>['exports']>;
|
|
25
|
+
<TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData>(internal: unknown, props: ReturnType<__sveltets_Render<TFeatures, TData>['props']> & {}): ReturnType<__sveltets_Render<TFeatures, TData>['exports']>;
|
|
26
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
27
|
+
}
|
|
28
|
+
declare const SvGridScheduler: $$IsomorphicComponent;
|
|
29
|
+
type SvGridScheduler<TFeatures extends TableFeatures = TableFeatures, TData extends RowData = RowData> = InstanceType<typeof SvGridScheduler<TFeatures, TData>>;
|
|
30
|
+
export default SvGridScheduler;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvImportDialog - a drop-in, production-hardened "bring your data in"
|
|
3
|
+
* dialog for a licensed grid. The mirror image of SvExportMenu: where that
|
|
4
|
+
* sends the grid OUT, this pulls a file IN and lines it up with the grid's
|
|
5
|
+
* own columns.
|
|
6
|
+
*
|
|
7
|
+
* - drag-drop / browse / paste (Excel .xlsx, CSV, TSV, JSON),
|
|
8
|
+
* - grid-aware auto-mapping: source headers matched to your columns,
|
|
9
|
+
* - per-column mapping UI (retarget or skip any source column),
|
|
10
|
+
* - typed coercion driven by each column's `format` (currency/date/...),
|
|
11
|
+
* - a live, NON-BLOCKING preview with per-cell validation errors,
|
|
12
|
+
* - size / row guard-rails, cancel, and a full focus trap.
|
|
13
|
+
*
|
|
14
|
+
* The parse happens ONCE (readImportMatrix); re-mapping runs on a chunked,
|
|
15
|
+
* cancelable worker loop (mapImportMatrixAsync) so even a 100k-row file
|
|
16
|
+
* never freezes the tab. Styling uses the same overridable CSS vars as the
|
|
17
|
+
* rest of the suite.
|
|
18
|
+
*/
|
|
19
|
+
import type { RowData, TableFeatures } from '@svgrid/grid';
|
|
20
|
+
import type { EnterpriseGridApi } from './install';
|
|
21
|
+
import { type ImportResult, type ImportValidator } from './import';
|
|
22
|
+
declare function $$render<TFeatures extends TableFeatures, TData extends RowData>(): {
|
|
23
|
+
props: {
|
|
24
|
+
api: EnterpriseGridApi<TFeatures, TData> | null | undefined;
|
|
25
|
+
/** Trigger-button label. Default 'Import'. */
|
|
26
|
+
label?: string;
|
|
27
|
+
/** Dialog heading. Default 'Import data'. */
|
|
28
|
+
title?: string;
|
|
29
|
+
/** Where committed rows land (append mode). Default 'bottom'. */
|
|
30
|
+
commitAt?: "top" | "bottom" | number;
|
|
31
|
+
/** Create a grid column for any imported field the grid doesn't already
|
|
32
|
+
* have, so "Import as new field" actually shows up. Default true. */
|
|
33
|
+
createColumns?: boolean;
|
|
34
|
+
/** Offer an Append / Replace-all mode toggle. Replace clears the grid's
|
|
35
|
+
* existing rows first (and still creates any missing columns). Default true. */
|
|
36
|
+
allowReplace?: boolean;
|
|
37
|
+
/** Initial commit mode. Default 'append'. */
|
|
38
|
+
defaultMode?: "append" | "replace";
|
|
39
|
+
/** In Replace mode, offer a "Replace columns" checkbox that also REMOVES
|
|
40
|
+
* grid columns absent from the file, so the grid matches it exactly.
|
|
41
|
+
* Default true (the checkbox itself defaults to off). */
|
|
42
|
+
allowColumnPrune?: boolean;
|
|
43
|
+
/** Accept filter for the file picker. */
|
|
44
|
+
accept?: string;
|
|
45
|
+
/** Rows to show in the preview table. Default 8. */
|
|
46
|
+
previewRows?: number;
|
|
47
|
+
/** Block the import while any cell failed to coerce. Default false. */
|
|
48
|
+
strict?: boolean;
|
|
49
|
+
/** Optional per-row validator, surfaced in the preview like type errors. */
|
|
50
|
+
validator?: ImportValidator<TData>;
|
|
51
|
+
/** Reject a file larger than this many bytes. Default 25 MB. */
|
|
52
|
+
maxBytes?: number;
|
|
53
|
+
/** Cap on data rows. See `overLimit` for what happens past it. */
|
|
54
|
+
maxRows?: number;
|
|
55
|
+
/** Over `maxRows`: 'reject' (default) refuses the file; 'truncate' keeps
|
|
56
|
+
* the first `maxRows` and warns. */
|
|
57
|
+
overLimit?: "reject" | "truncate";
|
|
58
|
+
/** Cap the errors collected (memory guard). Default 500. */
|
|
59
|
+
maxErrors?: number;
|
|
60
|
+
/** Drop duplicate rows by this target field (keeps the last). */
|
|
61
|
+
dedupeBy?: keyof TData | (string & {});
|
|
62
|
+
/** Text encoding for CSV/TSV/JSON files. Default 'utf-8'. */
|
|
63
|
+
encoding?: string;
|
|
64
|
+
/** Called after rows are committed into the grid. */
|
|
65
|
+
onImported?: (result: ImportResult<TData>) => void;
|
|
66
|
+
};
|
|
67
|
+
exports: {};
|
|
68
|
+
bindings: "";
|
|
69
|
+
slots: {};
|
|
70
|
+
events: {};
|
|
71
|
+
};
|
|
72
|
+
declare class __sveltets_Render<TFeatures extends TableFeatures, TData extends RowData> {
|
|
73
|
+
props(): ReturnType<typeof $$render<TFeatures, TData>>['props'];
|
|
74
|
+
events(): ReturnType<typeof $$render<TFeatures, TData>>['events'];
|
|
75
|
+
slots(): ReturnType<typeof $$render<TFeatures, TData>>['slots'];
|
|
76
|
+
bindings(): "";
|
|
77
|
+
exports(): {};
|
|
78
|
+
}
|
|
79
|
+
interface $$IsomorphicComponent {
|
|
80
|
+
new <TFeatures extends TableFeatures, TData extends RowData>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TFeatures, TData>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TFeatures, TData>['props']>, ReturnType<__sveltets_Render<TFeatures, TData>['events']>, ReturnType<__sveltets_Render<TFeatures, TData>['slots']>> & {
|
|
81
|
+
$$bindings?: ReturnType<__sveltets_Render<TFeatures, TData>['bindings']>;
|
|
82
|
+
} & ReturnType<__sveltets_Render<TFeatures, TData>['exports']>;
|
|
83
|
+
<TFeatures extends TableFeatures, TData extends RowData>(internal: unknown, props: ReturnType<__sveltets_Render<TFeatures, TData>['props']> & {}): ReturnType<__sveltets_Render<TFeatures, TData>['exports']>;
|
|
84
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
85
|
+
}
|
|
86
|
+
declare const SvImportDialog: $$IsomorphicComponent;
|
|
87
|
+
type SvImportDialog<TFeatures extends TableFeatures, TData extends RowData> = InstanceType<typeof SvImportDialog<TFeatures, TData>>;
|
|
88
|
+
export default SvImportDialog;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SvLookupInput - a searchable single-select for a foreign-key ("lookup")
|
|
3
|
+
* field. It searches the related entity through a `RelationLookup`, shows human
|
|
4
|
+
* labels, and stores the selected key. Used by SvGridEditPanel for `relation`
|
|
5
|
+
* fields, and usable on its own.
|
|
6
|
+
*/
|
|
7
|
+
import type { RelationLookup } from './sources/relation-lookup';
|
|
8
|
+
type Props = {
|
|
9
|
+
value: unknown;
|
|
10
|
+
lookup: RelationLookup;
|
|
11
|
+
onSelect: (value: string) => void;
|
|
12
|
+
id?: string;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
required?: boolean;
|
|
16
|
+
/** Debounce for the search query, ms. Default 200. */
|
|
17
|
+
debounceMs?: number;
|
|
18
|
+
};
|
|
19
|
+
declare const SvLookupInput: import("svelte").Component<Props, {}, "">;
|
|
20
|
+
type SvLookupInput = ReturnType<typeof SvLookupInput>;
|
|
21
|
+
export default SvLookupInput;
|