@svgrid/enterprise 2.5.3 → 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 +1 -1
- package/dist/designer/assets/{index-CBYU-KNn.js → index-BF0UH638.js} +3 -3
- package/dist/designer/assets/{src-i309BeJb.js → src-BPJruwB9.js} +1 -1
- 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 -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}/SvExpressionEditor.svelte +0 -0
- /package/{src → dist}/SvFileInput.svelte +0 -0
- /package/{src → dist}/SvGridAlerts.svelte +0 -0
- /package/{src → dist}/SvGridBoard.svelte +0 -0
- /package/{src → dist}/SvGridEditPanel.svelte +0 -0
- /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
- /package/{src → dist}/SvGridScheduler.svelte +0 -0
- /package/{src → dist}/SvImportDialog.svelte +0 -0
- /package/{src → dist}/SvLookupInput.svelte +0 -0
- /package/{src → dist}/SvPivotDesigner.svelte +0 -0
- /package/{src → dist}/SvRecordDetail.svelte +0 -0
- /package/{src → dist}/SvSchedule.svelte +0 -0
- /package/{src → dist}/SvSchemaChart.svelte +0 -0
- /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
- /package/{src → dist}/pdfmake-shims.d.ts +0 -0
- /package/{src → dist}/smart.export.d.ts +0 -0
- /package/{src → dist}/smart.export.js +0 -0
- /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF export via our own pdfmake document definition, instead of the vendored
|
|
3
|
+
* Smart exporter's basic table dump. This gives real control over the page:
|
|
4
|
+
* size / orientation / margins, a repeated header row on every page, automatic
|
|
5
|
+
* "Page X of Y" + generated-date footer, per-column alignment and widths, an
|
|
6
|
+
* optional title / subtitle / logo, and theme colors (header fill + zebra).
|
|
7
|
+
*
|
|
8
|
+
* `buildPdfDocDefinition` is a PURE function (no pdfmake, no DOM) returning the
|
|
9
|
+
* docDefinition object, so it's fully unit-testable; `exportGrid` feeds the
|
|
10
|
+
* result to `pdfMake.createPdf(def).download(...)`.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Build a pdfmake docDefinition from resolved columns + formatted string rows.
|
|
14
|
+
* `now` is injected for a deterministic footer date in tests.
|
|
15
|
+
*/
|
|
16
|
+
export function buildPdfDocDefinition(params) {
|
|
17
|
+
const { columns } = params;
|
|
18
|
+
const o = params.opts ?? {};
|
|
19
|
+
const now = params.now ?? new Date(0);
|
|
20
|
+
const fontSize = o.fontSize ?? 8;
|
|
21
|
+
const headerColor = o.headerColor ?? '#334155';
|
|
22
|
+
const headerTextColor = o.headerTextColor ?? '#ffffff';
|
|
23
|
+
const zebra = o.zebra ?? true;
|
|
24
|
+
const zebraColor = o.zebraColor ?? '#f1f5f9';
|
|
25
|
+
const groupColor = o.groupColor ?? '#e2e8f0';
|
|
26
|
+
const groupTextColor = o.groupTextColor ?? '#0f172a';
|
|
27
|
+
const subtotalColor = o.subtotalColor ?? '#f8fafc';
|
|
28
|
+
const repeatHeader = o.repeatHeader ?? true;
|
|
29
|
+
const orientation = o.pageOrientation ??
|
|
30
|
+
(columns.length > (o.autoLandscapeThreshold ?? 8) ? 'landscape' : 'portrait');
|
|
31
|
+
const widths = Array.isArray(o.columnWidths)
|
|
32
|
+
? o.columnWidths
|
|
33
|
+
: columns.map(() => (o.columnWidths === 'auto' ? 'auto' : '*'));
|
|
34
|
+
// Header row.
|
|
35
|
+
const headerRow = columns.map((c) => ({
|
|
36
|
+
text: c.header,
|
|
37
|
+
bold: true,
|
|
38
|
+
alignment: c.align ?? 'left',
|
|
39
|
+
color: headerTextColor,
|
|
40
|
+
fillColor: headerColor,
|
|
41
|
+
}));
|
|
42
|
+
// Normalize to a structured body: `body` wins, else wrap flat `rows`.
|
|
43
|
+
const model = params.body ?? (params.rows ?? []).map((cells) => ({ kind: 'data', cells }));
|
|
44
|
+
// Track which body-row indices are plain data rows, so zebra striping only
|
|
45
|
+
// hits those (group / subtotal rows carry their own fill).
|
|
46
|
+
const dataCellStyle = params.dataCellStyle;
|
|
47
|
+
const dataCellLink = params.dataCellLink;
|
|
48
|
+
let dataOrdinal = 0;
|
|
49
|
+
const dataRowIdx = new Set();
|
|
50
|
+
const bodyCells = [headerRow];
|
|
51
|
+
model.forEach((row, i) => {
|
|
52
|
+
const bi = i + 1; // +1 for the header row
|
|
53
|
+
if (row.kind === 'group') {
|
|
54
|
+
const first = {
|
|
55
|
+
text: row.label,
|
|
56
|
+
bold: true,
|
|
57
|
+
color: groupTextColor,
|
|
58
|
+
fillColor: groupColor,
|
|
59
|
+
colSpan: columns.length,
|
|
60
|
+
margin: [(row.level ?? 0) * 12, 2, 0, 2],
|
|
61
|
+
};
|
|
62
|
+
const rest = Array.from({ length: Math.max(0, columns.length - 1) }, () => ({ text: '' }));
|
|
63
|
+
bodyCells.push([first, ...rest]);
|
|
64
|
+
}
|
|
65
|
+
else if (row.kind === 'subtotal') {
|
|
66
|
+
bodyCells.push(columns.map((c, ci) => ({
|
|
67
|
+
text: row.cells[ci] ?? '',
|
|
68
|
+
bold: true,
|
|
69
|
+
alignment: c.align ?? 'left',
|
|
70
|
+
fillColor: subtotalColor,
|
|
71
|
+
})));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
dataRowIdx.add(bi);
|
|
75
|
+
const ord = dataOrdinal++;
|
|
76
|
+
bodyCells.push(columns.map((c, ci) => {
|
|
77
|
+
const cell = { text: row.cells[ci] ?? '', alignment: c.align ?? 'left' };
|
|
78
|
+
const s = dataCellStyle?.(ord, ci);
|
|
79
|
+
if (s) {
|
|
80
|
+
if (s.fill)
|
|
81
|
+
cell.fillColor = s.fill;
|
|
82
|
+
if (s.color)
|
|
83
|
+
cell.color = s.color;
|
|
84
|
+
if (s.bold)
|
|
85
|
+
cell.bold = true;
|
|
86
|
+
}
|
|
87
|
+
const href = dataCellLink?.(ord, ci);
|
|
88
|
+
if (href) {
|
|
89
|
+
cell.link = href;
|
|
90
|
+
cell.decoration = 'underline';
|
|
91
|
+
if (!s?.color)
|
|
92
|
+
cell.color = '#2563eb';
|
|
93
|
+
}
|
|
94
|
+
return cell;
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const table = {
|
|
99
|
+
table: {
|
|
100
|
+
headerRows: repeatHeader ? 1 : 0,
|
|
101
|
+
dontBreakRows: true,
|
|
102
|
+
widths,
|
|
103
|
+
body: bodyCells,
|
|
104
|
+
},
|
|
105
|
+
layout: {
|
|
106
|
+
// Zebra fill: only plain data rows (group / subtotal have their own).
|
|
107
|
+
fillColor: (rowIndex) => zebra && rowIndex > 0 && rowIndex % 2 === 0 && dataRowIdx.has(rowIndex) ? zebraColor : null,
|
|
108
|
+
hLineWidth: () => 0.5,
|
|
109
|
+
vLineWidth: () => 0.5,
|
|
110
|
+
hLineColor: () => '#e2e8f0',
|
|
111
|
+
vLineColor: () => '#e2e8f0',
|
|
112
|
+
paddingTop: () => 3,
|
|
113
|
+
paddingBottom: () => 3,
|
|
114
|
+
paddingLeft: () => 5,
|
|
115
|
+
paddingRight: () => 5,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
const content = [];
|
|
119
|
+
if (o.logo)
|
|
120
|
+
content.push({ image: o.logo, width: o.logoWidth ?? 90, margin: [0, 0, 0, 8] });
|
|
121
|
+
if (o.title)
|
|
122
|
+
content.push({ text: o.title, fontSize: fontSize + 8, bold: true, margin: [0, 0, 0, 2] });
|
|
123
|
+
if (o.subtitle)
|
|
124
|
+
content.push({ text: o.subtitle, fontSize: fontSize + 1, color: '#64748b', margin: [0, 0, 0, 8] });
|
|
125
|
+
content.push(table);
|
|
126
|
+
const def = {
|
|
127
|
+
pageSize: o.pageSize ?? 'A4',
|
|
128
|
+
pageOrientation: orientation,
|
|
129
|
+
pageMargins: o.margins ?? [28, 34, 28, 34],
|
|
130
|
+
defaultStyle: { fontSize },
|
|
131
|
+
content,
|
|
132
|
+
};
|
|
133
|
+
if (o.showPageNumbers ?? true) {
|
|
134
|
+
const dateStr = now.toISOString().slice(0, 10);
|
|
135
|
+
def.footer = (currentPage, pageCount) => ({
|
|
136
|
+
margin: [28, 6, 28, 0],
|
|
137
|
+
columns: [
|
|
138
|
+
{ text: dateStr, alignment: 'left', fontSize: 7, color: '#94a3b8' },
|
|
139
|
+
{ text: `Page ${currentPage} of ${pageCount}`, alignment: 'right', fontSize: 7, color: '#94a3b8' },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return def;
|
|
144
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure HTML builder for the print view. `printGrid` opens this document in a
|
|
3
|
+
* new window and calls `window.print()`, so the user can print or "Save as
|
|
4
|
+
* PDF" using the browser's own engine (great font + CSS fidelity, CJK / RTL,
|
|
5
|
+
* zero dependency). Kept pure (no DOM) so it's unit-testable.
|
|
6
|
+
*
|
|
7
|
+
* The upgrades over a plain table dump: page size / orientation / margins via
|
|
8
|
+
* `@page`, a header row that repeats on every printed page
|
|
9
|
+
* (`display: table-header-group`), per-column alignment, zebra striping, and an
|
|
10
|
+
* optional title / subtitle / logo band. Browsers add their own page-number
|
|
11
|
+
* header/footer through the print dialog.
|
|
12
|
+
*/
|
|
13
|
+
export type PrintDocOptions = {
|
|
14
|
+
title?: string;
|
|
15
|
+
subtitle?: string;
|
|
16
|
+
/** Logo data URL, shown above the title. */
|
|
17
|
+
logo?: string;
|
|
18
|
+
/** Logo width in px. Default 120. */
|
|
19
|
+
logoWidth?: number;
|
|
20
|
+
orientation?: 'portrait' | 'landscape';
|
|
21
|
+
/** `@page size` keyword, e.g. 'A4' | 'Letter'. Combined with orientation. */
|
|
22
|
+
pageSize?: string;
|
|
23
|
+
/** `@page margin`, e.g. '14mm'. Default '14mm'. */
|
|
24
|
+
margin?: string;
|
|
25
|
+
/** Zebra-stripe rows. Default true. */
|
|
26
|
+
zebra?: boolean;
|
|
27
|
+
zebraColor?: string;
|
|
28
|
+
/** Header row background. Default '#f1f5f9'. */
|
|
29
|
+
headerColor?: string;
|
|
30
|
+
headerTextColor?: string;
|
|
31
|
+
/** Body font size in pt. Default 9. */
|
|
32
|
+
fontSize?: number;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Build a standalone, print-ready HTML document from resolved columns +
|
|
36
|
+
* pre-formatted string rows.
|
|
37
|
+
*/
|
|
38
|
+
export type PrintCellVisual = {
|
|
39
|
+
fill?: string;
|
|
40
|
+
color?: string;
|
|
41
|
+
bold?: boolean;
|
|
42
|
+
icon?: string;
|
|
43
|
+
};
|
|
44
|
+
export declare function buildPrintDocument(params: {
|
|
45
|
+
columns: ReadonlyArray<{
|
|
46
|
+
header: string;
|
|
47
|
+
align?: 'left' | 'center' | 'right';
|
|
48
|
+
}>;
|
|
49
|
+
rows: ReadonlyArray<ReadonlyArray<string>>;
|
|
50
|
+
/** Per-data-cell conditional-format visual. */
|
|
51
|
+
cellStyle?: (rowIdx: number, colIdx: number) => PrintCellVisual | undefined;
|
|
52
|
+
/** Per-data-cell hyperlink URL. */
|
|
53
|
+
cellLink?: (rowIdx: number, colIdx: number) => string | undefined;
|
|
54
|
+
opts?: PrintDocOptions;
|
|
55
|
+
}): string;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure HTML builder for the print view. `printGrid` opens this document in a
|
|
3
|
+
* new window and calls `window.print()`, so the user can print or "Save as
|
|
4
|
+
* PDF" using the browser's own engine (great font + CSS fidelity, CJK / RTL,
|
|
5
|
+
* zero dependency). Kept pure (no DOM) so it's unit-testable.
|
|
6
|
+
*
|
|
7
|
+
* The upgrades over a plain table dump: page size / orientation / margins via
|
|
8
|
+
* `@page`, a header row that repeats on every printed page
|
|
9
|
+
* (`display: table-header-group`), per-column alignment, zebra striping, and an
|
|
10
|
+
* optional title / subtitle / logo band. Browsers add their own page-number
|
|
11
|
+
* header/footer through the print dialog.
|
|
12
|
+
*/
|
|
13
|
+
const HTML_ESCAPE = {
|
|
14
|
+
'&': '&',
|
|
15
|
+
'<': '<',
|
|
16
|
+
'>': '>',
|
|
17
|
+
'"': '"',
|
|
18
|
+
"'": ''',
|
|
19
|
+
};
|
|
20
|
+
function esc(value) {
|
|
21
|
+
const s = value == null ? '' : String(value);
|
|
22
|
+
return s.replace(/[&<>"']/g, (c) => HTML_ESCAPE[c]);
|
|
23
|
+
}
|
|
24
|
+
export function buildPrintDocument(params) {
|
|
25
|
+
const { columns, rows } = params;
|
|
26
|
+
const cellStyle = params.cellStyle;
|
|
27
|
+
const cellLink = params.cellLink;
|
|
28
|
+
const o = params.opts ?? {};
|
|
29
|
+
const orientation = o.orientation ?? 'portrait';
|
|
30
|
+
const size = o.pageSize ? `${o.pageSize} ${orientation}` : orientation;
|
|
31
|
+
const margin = o.margin ?? '14mm';
|
|
32
|
+
const zebra = o.zebra ?? true;
|
|
33
|
+
const zebraColor = o.zebraColor ?? '#f6f8fa';
|
|
34
|
+
const headerColor = o.headerColor ?? '#f1f5f9';
|
|
35
|
+
const headerTextColor = o.headerTextColor ?? '#0f172a';
|
|
36
|
+
const fontSize = o.fontSize ?? 9;
|
|
37
|
+
const alignStyle = (a) => a && a !== 'left' ? ` style="text-align:${a}"` : '';
|
|
38
|
+
const thead = '<thead><tr>' +
|
|
39
|
+
columns.map((c) => `<th${alignStyle(c.align)}>${esc(c.header)}</th>`).join('') +
|
|
40
|
+
'</tr></thead>';
|
|
41
|
+
const cellHtml = (c, value, ri, ci) => {
|
|
42
|
+
const styles = [];
|
|
43
|
+
if (c.align && c.align !== 'left')
|
|
44
|
+
styles.push(`text-align:${c.align}`);
|
|
45
|
+
const cf = cellStyle?.(ri, ci);
|
|
46
|
+
if (cf?.fill)
|
|
47
|
+
styles.push(`background:${cf.fill}`);
|
|
48
|
+
if (cf?.color)
|
|
49
|
+
styles.push(`color:${cf.color}`);
|
|
50
|
+
if (cf?.bold)
|
|
51
|
+
styles.push('font-weight:700');
|
|
52
|
+
const style = styles.length ? ` style="${styles.join(';')}"` : '';
|
|
53
|
+
let text = cf?.icon ? `${esc(cf.icon)} ${esc(value)}` : esc(value);
|
|
54
|
+
const href = cellLink?.(ri, ci);
|
|
55
|
+
if (href)
|
|
56
|
+
text = `<a href="${esc(href)}">${text}</a>`;
|
|
57
|
+
return `<td${style}>${text}</td>`;
|
|
58
|
+
};
|
|
59
|
+
const tbody = '<tbody>' +
|
|
60
|
+
rows
|
|
61
|
+
.map((r, ri) => '<tr>' + columns.map((c, ci) => cellHtml(c, r[ci] ?? '', ri, ci)).join('') + '</tr>')
|
|
62
|
+
.join('') +
|
|
63
|
+
'</tbody>';
|
|
64
|
+
const band = [];
|
|
65
|
+
if (o.logo)
|
|
66
|
+
band.push(`<img class="logo" src="${esc(o.logo)}" alt="" />`);
|
|
67
|
+
if (o.title)
|
|
68
|
+
band.push(`<h1>${esc(o.title)}</h1>`);
|
|
69
|
+
if (o.subtitle)
|
|
70
|
+
band.push(`<p class="subtitle">${esc(o.subtitle)}</p>`);
|
|
71
|
+
return `<!DOCTYPE html>
|
|
72
|
+
<html><head><meta charset="utf-8"><title>${esc(o.title ?? 'Grid')}</title>
|
|
73
|
+
<style>
|
|
74
|
+
@page { size: ${size}; margin: ${margin}; }
|
|
75
|
+
@media print { body { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
|
|
76
|
+
body { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; color: #111; margin: 0; }
|
|
77
|
+
.logo { max-height: ${o.logoWidth ? '' : '48px'}; width: ${o.logoWidth ? `${o.logoWidth}px` : 'auto'}; display: block; margin-bottom: 8px; }
|
|
78
|
+
h1 { font-size: 16pt; margin: 0 0 2px 0; }
|
|
79
|
+
.subtitle { font-size: 10pt; color: #64748b; margin: 0 0 10px 0; }
|
|
80
|
+
table { border-collapse: collapse; width: 100%; font-size: ${fontSize}pt; }
|
|
81
|
+
thead { display: table-header-group; }
|
|
82
|
+
tr { break-inside: avoid; }
|
|
83
|
+
th, td { border: 1px solid #cbd5e1; padding: 4px 7px; text-align: left; }
|
|
84
|
+
th { background: ${headerColor}; color: ${headerTextColor}; font-weight: 700; }
|
|
85
|
+
${zebra ? `tbody tr:nth-child(even) { background: ${zebraColor}; }` : ''}
|
|
86
|
+
</style></head>
|
|
87
|
+
<body>
|
|
88
|
+
${band.join('\n ')}
|
|
89
|
+
<table>${thead}${tbody}</table>
|
|
90
|
+
</body></html>`;
|
|
91
|
+
}
|
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The text serializers + delivery helpers moved into the FREE grid package
|
|
3
|
-
* (CSV / TSV / JSON export + clipboard now ship in @svgrid/grid). Enterprise
|
|
4
|
-
* re-uses that one implementation for its richer paths (styled HTML, xls, the
|
|
5
|
-
* xlsx/pdf blob download) instead of maintaining a second copy.
|
|
6
|
-
*
|
|
7
|
-
* Kept as a thin re-export from the Svelte-free `@svgrid/grid/format` subpath
|
|
8
|
-
* so existing imports (and the test mocks that target this module path) keep
|
|
9
|
-
* working unchanged.
|
|
10
|
-
*/
|
|
11
|
-
export {
|
|
12
|
-
serializeDelimited,
|
|
13
|
-
serializeJson,
|
|
14
|
-
serializeHtml,
|
|
15
|
-
serializeMarkdown,
|
|
16
|
-
serializeXml,
|
|
17
|
-
downloadBlobFile,
|
|
18
|
-
downloadTextFile,
|
|
19
|
-
copyTextToClipboard,
|
|
20
|
-
type CsvOptions,
|
|
21
|
-
type SerializeOptions,
|
|
22
|
-
type SerializeProgress,
|
|
23
|
-
type ExportCellVisual,
|
|
24
|
-
} from '@svgrid/grid/format'
|
|
1
|
+
/**
|
|
2
|
+
* The text serializers + delivery helpers moved into the FREE grid package
|
|
3
|
+
* (CSV / TSV / JSON export + clipboard now ship in @svgrid/grid). Enterprise
|
|
4
|
+
* re-uses that one implementation for its richer paths (styled HTML, xls, the
|
|
5
|
+
* xlsx/pdf blob download) instead of maintaining a second copy.
|
|
6
|
+
*
|
|
7
|
+
* Kept as a thin re-export from the Svelte-free `@svgrid/grid/format` subpath
|
|
8
|
+
* so existing imports (and the test mocks that target this module path) keep
|
|
9
|
+
* working unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export { serializeDelimited, serializeJson, serializeHtml, serializeMarkdown, serializeXml, downloadBlobFile, downloadTextFile, copyTextToClipboard, type CsvOptions, type SerializeOptions, type SerializeProgress, type ExportCellVisual, } from '@svgrid/grid/format';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The text serializers + delivery helpers moved into the FREE grid package
|
|
3
|
+
* (CSV / TSV / JSON export + clipboard now ship in @svgrid/grid). Enterprise
|
|
4
|
+
* re-uses that one implementation for its richer paths (styled HTML, xls, the
|
|
5
|
+
* xlsx/pdf blob download) instead of maintaining a second copy.
|
|
6
|
+
*
|
|
7
|
+
* Kept as a thin re-export from the Svelte-free `@svgrid/grid/format` subpath
|
|
8
|
+
* so existing imports (and the test mocks that target this module path) keep
|
|
9
|
+
* working unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export { serializeDelimited, serializeJson, serializeHtml, serializeMarkdown, serializeXml, downloadBlobFile, downloadTextFile, copyTextToClipboard, } from '@svgrid/grid/format';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ExportColumn } from './export';
|
|
2
|
+
import type { RowData } from '@svgrid/grid';
|
|
3
|
+
import type { SerializeOptions } from './export-serialize';
|
|
4
|
+
/**
|
|
5
|
+
* Serialize rows to an Excel 2003 XML Spreadsheet (`.xls`) document string.
|
|
6
|
+
* Streams in chunks with `onProgress` + `AbortSignal`, matching the other
|
|
7
|
+
* native writers.
|
|
8
|
+
*/
|
|
9
|
+
export declare function serializeSpreadsheetML<TData extends RowData>(sheetName: string, cols: ReadonlyArray<ExportColumn<TData>>, rows: ReadonlyArray<TData>, opts?: SerializeOptions & {
|
|
10
|
+
rawValues?: boolean;
|
|
11
|
+
/** Freeze the header row. Default false. */
|
|
12
|
+
freezeHeader?: boolean;
|
|
13
|
+
/** Freeze this many leading columns. Default 0. */
|
|
14
|
+
freezeColumns?: number;
|
|
15
|
+
/** Per-column pixel widths (converted to points). */
|
|
16
|
+
widths?: ReadonlyArray<number>;
|
|
17
|
+
/** Per-cell conditional-format visual (fill / color / bold / icon). */
|
|
18
|
+
cellVisual?: (rowIdx: number, colIdx: number) => {
|
|
19
|
+
fill?: string;
|
|
20
|
+
color?: string;
|
|
21
|
+
bold?: boolean;
|
|
22
|
+
icon?: string;
|
|
23
|
+
} | undefined;
|
|
24
|
+
/** Write long integer IDs (>15 sig digits) as text so they survive. */
|
|
25
|
+
precisionSafe?: boolean;
|
|
26
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy `.xls` export via the Excel 2003 XML Spreadsheet format
|
|
3
|
+
* (SpreadsheetML, `urn:schemas-microsoft-com:office:spreadsheet`). This is the
|
|
4
|
+
* "old compatibility" path: it opens natively in Excel 97-2003 and every
|
|
5
|
+
* newer Excel / LibreOffice / Numbers as a REAL spreadsheet - typed numeric
|
|
6
|
+
* and date cells (so sums/sort still work) with number formats - and needs no
|
|
7
|
+
* peer dependency (unlike xlsx, which needs jszip).
|
|
8
|
+
*
|
|
9
|
+
* We generate typed cells from the column `format`: number / currency /
|
|
10
|
+
* percent become `ss:Type="Number"` with a NumberFormat style, dates become
|
|
11
|
+
* `ss:Type="DateTime"`, everything else is a formatted `String`. An
|
|
12
|
+
* `exportValue` hook still wins and is emitted as a String.
|
|
13
|
+
*/
|
|
14
|
+
import { formatValueForExport, toExcelNumFmt, valueForExcel } from '@svgrid/grid/format';
|
|
15
|
+
// Control chars illegal in XML 1.0 - strip so a stray \x00 can't corrupt the file.
|
|
16
|
+
// See export-ooxml.ts: XML 1.0 has no representation for these at all, so a
|
|
17
|
+
// control character has to be dropped before it reaches the file.
|
|
18
|
+
// eslint-disable-next-line no-control-regex
|
|
19
|
+
const INVALID_XML = /[\x00-\x08\x0B\x0C\x0E-\x1F]/g;
|
|
20
|
+
function xmlEscape(s) {
|
|
21
|
+
return s
|
|
22
|
+
.replace(INVALID_XML, '')
|
|
23
|
+
.replace(/&/g, '&')
|
|
24
|
+
.replace(/</g, '<')
|
|
25
|
+
.replace(/>/g, '>')
|
|
26
|
+
.replace(/"/g, '"');
|
|
27
|
+
}
|
|
28
|
+
/** SpreadsheetML wants ISO-8601 with no timezone for a DateTime cell. */
|
|
29
|
+
function toSpreadsheetDate(d) {
|
|
30
|
+
// yyyy-mm-ddThh:mm:ss.000
|
|
31
|
+
const p = (n, w = 2) => String(n).padStart(w, '0');
|
|
32
|
+
return (`${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}` +
|
|
33
|
+
`T${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}.000`);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Serialize rows to an Excel 2003 XML Spreadsheet (`.xls`) document string.
|
|
37
|
+
* Streams in chunks with `onProgress` + `AbortSignal`, matching the other
|
|
38
|
+
* native writers.
|
|
39
|
+
*/
|
|
40
|
+
export async function serializeSpreadsheetML(sheetName, cols, rows, opts = {}) {
|
|
41
|
+
const chunk = Math.max(1, opts.chunkRows ?? 5000);
|
|
42
|
+
const total = rows.length;
|
|
43
|
+
const rawValues = opts.rawValues === true;
|
|
44
|
+
const cellVisual = opts.cellVisual;
|
|
45
|
+
const precisionSafe = opts.precisionSafe === true;
|
|
46
|
+
const styleCache = new Map();
|
|
47
|
+
const styleDefs = [
|
|
48
|
+
'<Style ss:ID="sHeader"><Font ss:Bold="1"/><Interior ss:Color="#F2F2F2" ss:Pattern="Solid"/></Style>',
|
|
49
|
+
];
|
|
50
|
+
const cap = (a) => (a === 'right' ? 'Right' : a === 'center' ? 'Center' : 'Left');
|
|
51
|
+
const styleIdFor = (d) => {
|
|
52
|
+
const hasAlign = d.align && d.align !== 'left';
|
|
53
|
+
if (!d.numFmt && !d.fill && !d.color && !d.bold && !hasAlign)
|
|
54
|
+
return undefined;
|
|
55
|
+
const key = `${d.numFmt ?? ''}|${d.fill ?? ''}|${d.color ?? ''}|${d.bold ? 'b' : ''}|${d.align ?? ''}`;
|
|
56
|
+
const existing = styleCache.get(key);
|
|
57
|
+
if (existing)
|
|
58
|
+
return existing;
|
|
59
|
+
const id = `s${styleCache.size + 1}`;
|
|
60
|
+
// SpreadsheetML element order: Alignment, Font, Interior, NumberFormat.
|
|
61
|
+
const parts = [];
|
|
62
|
+
if (hasAlign)
|
|
63
|
+
parts.push(`<Alignment ss:Horizontal="${cap(d.align)}"/>`);
|
|
64
|
+
if (d.color || d.bold)
|
|
65
|
+
parts.push(`<Font${d.color ? ` ss:Color="${d.color}"` : ''}${d.bold ? ' ss:Bold="1"' : ''}/>`);
|
|
66
|
+
if (d.fill)
|
|
67
|
+
parts.push(`<Interior ss:Color="${d.fill}" ss:Pattern="Solid"/>`);
|
|
68
|
+
if (d.numFmt)
|
|
69
|
+
parts.push(`<NumberFormat ss:Format="${xmlEscape(d.numFmt)}"/>`);
|
|
70
|
+
styleDefs.push(`<Style ss:ID="${id}">${parts.join('')}</Style>`);
|
|
71
|
+
styleCache.set(key, id);
|
|
72
|
+
return id;
|
|
73
|
+
};
|
|
74
|
+
function cellFor(col, row, r, c) {
|
|
75
|
+
const href = col.link?.(row) || undefined;
|
|
76
|
+
const v = cellVisual?.(r, c);
|
|
77
|
+
const style = (numFmt) => styleIdFor({ numFmt, fill: v?.fill, color: v?.color, bold: v?.bold, align: col.align });
|
|
78
|
+
if (col.exportValue) {
|
|
79
|
+
const ev = col.exportValue(row);
|
|
80
|
+
const text = ev == null ? '' : String(ev);
|
|
81
|
+
return { type: 'String', value: v?.icon ? `${v.icon} ${text}` : text, styleId: style(), href };
|
|
82
|
+
}
|
|
83
|
+
const raw = row[col.field];
|
|
84
|
+
// An icon-set glyph forces a string cell (icon + formatted value).
|
|
85
|
+
if (v?.icon) {
|
|
86
|
+
const disp = rawValues ? String(raw ?? '') : formatValueForExport(raw, col.format);
|
|
87
|
+
return { type: 'String', value: `${v.icon} ${disp}`, styleId: style(), href };
|
|
88
|
+
}
|
|
89
|
+
const unsafe = (n) => precisionSafe && Math.abs(n) >= 1e15;
|
|
90
|
+
if (rawValues) {
|
|
91
|
+
const s = raw == null ? '' : String(raw);
|
|
92
|
+
const asNum = typeof raw === 'number' && Number.isFinite(raw) && !unsafe(raw);
|
|
93
|
+
return asNum
|
|
94
|
+
? { type: 'Number', value: s, styleId: style(), href }
|
|
95
|
+
: { type: 'String', value: s, styleId: style(), href };
|
|
96
|
+
}
|
|
97
|
+
const typed = valueForExcel(raw, col.format);
|
|
98
|
+
if (typed.ok) {
|
|
99
|
+
const numFmt = toExcelNumFmt(col.format);
|
|
100
|
+
if (typed.value instanceof Date) {
|
|
101
|
+
return { type: 'DateTime', value: toSpreadsheetDate(typed.value), styleId: style(numFmt), href };
|
|
102
|
+
}
|
|
103
|
+
if (unsafe(typed.value))
|
|
104
|
+
return { type: 'String', value: String(typed.value), styleId: style(), href };
|
|
105
|
+
return { type: 'Number', value: String(typed.value), styleId: style(numFmt), href };
|
|
106
|
+
}
|
|
107
|
+
return { type: 'String', value: formatValueForExport(raw, col.format), styleId: style(), href };
|
|
108
|
+
}
|
|
109
|
+
const cellXml = (c) => {
|
|
110
|
+
const style = c.styleId ? ` ss:StyleID="${c.styleId}"` : '';
|
|
111
|
+
const href = c.href ? ` ss:HRef="${xmlEscape(c.href)}"` : '';
|
|
112
|
+
return `<Cell${style}${href}><Data ss:Type="${c.type}">${xmlEscape(c.value)}</Data></Cell>`;
|
|
113
|
+
};
|
|
114
|
+
// <Column> width elements (SpreadsheetML width is in points; ~0.75pt/px).
|
|
115
|
+
const columnXml = opts.widths
|
|
116
|
+
? opts.widths.map((px) => `<Column ss:Width="${Math.round(px * 0.75)}"/>`).join('')
|
|
117
|
+
: '';
|
|
118
|
+
// Freeze panes: header row and/or leading columns.
|
|
119
|
+
const freezeCols = Math.max(0, Math.floor(opts.freezeColumns ?? 0));
|
|
120
|
+
const worksheetOptions = opts.freezeHeader || freezeCols > 0
|
|
121
|
+
? '<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">' +
|
|
122
|
+
'<FreezePanes/><FrozenNoSplit/>' +
|
|
123
|
+
(opts.freezeHeader ? '<SplitHorizontal>1</SplitHorizontal><TopRowBottomPane>1</TopRowBottomPane>' : '') +
|
|
124
|
+
(freezeCols > 0 ? `<SplitVertical>${freezeCols}</SplitVertical><LeftColumnRightPane>${freezeCols}</LeftColumnRightPane>` : '') +
|
|
125
|
+
'<ActivePane>2</ActivePane></WorksheetOptions>'
|
|
126
|
+
: '';
|
|
127
|
+
// Header row (bold style).
|
|
128
|
+
const headerCells = cols
|
|
129
|
+
.map((c) => `<Cell ss:StyleID="sHeader"><Data ss:Type="String">${xmlEscape(c.header ?? c.field)}</Data></Cell>`)
|
|
130
|
+
.join('');
|
|
131
|
+
const bodyRows = [`<Row>${headerCells}</Row>`];
|
|
132
|
+
for (let i = 0; i < total; i++) {
|
|
133
|
+
if (opts.signal?.aborted)
|
|
134
|
+
throw new DOMException('Export aborted', 'AbortError');
|
|
135
|
+
const row = rows[i];
|
|
136
|
+
const cells = cols.map((c, ci) => cellXml(cellFor(c, row, i, ci))).join('');
|
|
137
|
+
bodyRows.push(`<Row>${cells}</Row>`);
|
|
138
|
+
if (i > 0 && i % chunk === 0) {
|
|
139
|
+
opts.onProgress?.({ phase: 'serialize', ratio: i / total, row: i, total });
|
|
140
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
opts.onProgress?.({ phase: 'serialize', ratio: 1, row: total, total });
|
|
144
|
+
return ('<?xml version="1.0"?>\n' +
|
|
145
|
+
'<?mso-application progid="Excel.Sheet"?>\n' +
|
|
146
|
+
'<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"' +
|
|
147
|
+
' xmlns:o="urn:schemas-microsoft-com:office:office"' +
|
|
148
|
+
' xmlns:x="urn:schemas-microsoft-com:office:excel"' +
|
|
149
|
+
' xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"' +
|
|
150
|
+
' xmlns:html="http://www.w3.org/TR/REC-html40">' +
|
|
151
|
+
`<Styles>${styleDefs.join('')}</Styles>` +
|
|
152
|
+
`<Worksheet ss:Name="${xmlEscape(sheetName.slice(0, 31) || 'Sheet1')}">` +
|
|
153
|
+
`<Table>${columnXml}${bodyRows.join('')}</Table>` +
|
|
154
|
+
worksheetOptions +
|
|
155
|
+
'</Worksheet>' +
|
|
156
|
+
'</Workbook>');
|
|
157
|
+
}
|