@svgrid/enterprise 3.0.0 → 3.0.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/README.md +95 -95
- package/dist/ExpressionEditorHarness.svelte.d.ts +2 -2
- package/dist/SvAdvancedFilter.svelte.d.ts +2 -2
- package/dist/SvAlertRuleEditor.svelte.d.ts +2 -2
- package/dist/SvAlertsManager.svelte.d.ts +3 -3
- package/dist/SvAlertsPanel.svelte.d.ts +1 -1
- package/dist/SvAuthGate.svelte +115 -115
- package/dist/SvAuthGate.svelte.d.ts +1 -1
- package/dist/SvBoard.svelte.d.ts +1 -1
- package/dist/SvExportMenu.svelte +553 -553
- package/dist/SvExportMenu.svelte.d.ts +2 -2
- package/dist/SvExpressionEditor.svelte.d.ts +2 -2
- package/dist/SvFileInput.svelte +113 -113
- package/dist/SvGridAlerts.svelte.d.ts +2 -2
- package/dist/SvGridBoard.svelte +2358 -2358
- package/dist/SvGridBulkEditDrawer.svelte.d.ts +1 -1
- package/dist/SvGridEditPanel.svelte +1157 -1157
- package/dist/SvGridEditPanel.svelte.d.ts +3 -3
- package/dist/SvGridMasterDetail.svelte +116 -116
- package/dist/SvGridMasterDetail.svelte.d.ts +1 -1
- package/dist/SvGridScheduler.svelte +5358 -5358
- package/dist/SvImportDialog.svelte +1020 -1020
- package/dist/SvImportDialog.svelte.d.ts +2 -2
- package/dist/SvLookupInput.svelte +180 -180
- package/dist/SvLookupInput.svelte.d.ts +1 -1
- package/dist/SvPivotDesigner.svelte +1990 -1990
- package/dist/SvPivotDesigner.svelte.d.ts +2 -2
- package/dist/SvRecordDetail.svelte.d.ts +1 -1
- package/dist/SvSchedule.svelte.d.ts +1 -1
- package/dist/SvSchemaChart.svelte +234 -234
- package/dist/SvSchemaChart.svelte.d.ts +2 -2
- package/dist/SvSchemaDashboard.svelte +130 -130
- package/dist/SvSchemaDashboard.svelte.d.ts +3 -3
- package/dist/advanced-filter/expr-columns-from-grid.d.ts +1 -1
- package/dist/advanced-filter-enable.js +3 -3
- package/dist/alerts/alert-engine-attach.d.ts +2 -2
- package/dist/alerts/alert-engine-attach.js +3 -3
- package/dist/alerts/alert-engine.d.ts +1 -1
- package/dist/alerts/alert-engine.js +2 -2
- package/dist/alerts/alert-formats.d.ts +1 -1
- package/dist/alerts/alert-formats.js +1 -1
- package/dist/alerts/alert-observer.d.ts +3 -3
- package/dist/alerts/alert-observer.js +1 -1
- package/dist/alerts/alert-storage.d.ts +1 -1
- package/dist/alerts/alert-store.svelte.d.ts +1 -1
- package/dist/alerts/alert-types.d.ts +2 -2
- package/dist/alerts.js +2 -2
- package/dist/board.js +2 -2
- package/dist/cdn/svgrid-enterprise.svelte-external.js +1161 -1144
- package/dist/designer/assets/GridMenus-B1JtIN21.js +8 -0
- package/dist/designer/assets/SvDateRangeInput-C0iCCZ8o.css +1 -0
- package/dist/designer/assets/{SvDateRangeInput-CVn-yqrQ.js → SvDateRangeInput-CjO7nn_x.js} +1 -1
- package/dist/designer/assets/SvDateTimePicker-ByBD_ov6.js +1 -0
- package/dist/designer/assets/SvDateTimePicker-DPv09DIT.css +1 -0
- package/dist/designer/assets/SvField-YDLipR6O.css +1 -0
- package/dist/designer/assets/{SvField-BsqiA5me.js → SvField-cj1PFNgZ.js} +1 -1
- package/dist/designer/assets/{preload-helper-CG0n22O7.js → SvGrid.helpers-BgT-gnCo.js} +1 -1
- package/dist/designer/assets/SvGridCellEditor-0W1L2hJ1.js +2 -0
- package/dist/designer/assets/SvGridChart-DBOR4xcz.js +2 -0
- package/dist/designer/assets/SvGridChart-fkMWeh1J.css +1 -0
- package/dist/designer/assets/SvGridChartPanel-symrhNnR.js +11 -0
- package/dist/designer/assets/SvGridChartView-BmRxq6mU.js +1 -0
- package/dist/designer/assets/SvGridChartView-DUc-1RUf.css +1 -0
- package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +1 -0
- package/dist/designer/assets/SvGridDropdown-CcidB3rm.css +1 -0
- package/dist/designer/assets/SvListBox-1oUF6Iav.js +110 -0
- package/dist/designer/assets/SvListBox-BXfyqy4a.css +1 -0
- package/dist/designer/assets/cell-formatting-wr5wm7US.js +1 -0
- package/dist/designer/assets/chart-DXFganU8.js +1 -0
- package/dist/designer/assets/date-format-DGagAqRc.css +1 -0
- package/dist/designer/assets/{date-format-4DJvNtG2.js → date-format-onlYDsrY.js} +1 -1
- package/dist/designer/assets/export-format-D-eP4b2l.js +6 -0
- package/dist/designer/assets/{index-zUBix-JQ.js → index-C_a9Cj8Y.js} +2984 -141
- package/dist/designer/assets/index-k2stW6L8.css +1 -0
- package/dist/designer/assets/preload-helper-HclGiUj8.js +1 -0
- package/dist/designer/assets/src-D9p27OGC.js +58 -0
- package/dist/designer/index.html +22 -22
- package/dist/export-conditional.d.ts +1 -1
- package/dist/export-print.js +19 -19
- package/dist/export-xls.d.ts +2 -2
- package/dist/export.d.ts +2 -2
- package/dist/export.js +7 -7
- package/dist/expressions/builder-tree.d.ts +2 -2
- package/dist/expressions/builder-tree.js +1 -1
- package/dist/expressions/compile.d.ts +1 -1
- package/dist/import.js +1 -1
- package/dist/index.d.ts +53 -53
- package/dist/index.js +50 -50
- package/dist/install.d.ts +4 -4
- package/dist/install.js +11 -11
- package/dist/license.d.ts +3 -2
- package/dist/license.js +9 -4
- package/dist/node/studio.js +123 -114
- package/dist/pivot-chart.d.ts +1 -1
- package/dist/pivot-designer.d.ts +1 -1
- package/dist/pivot-enable.js +3 -3
- package/dist/print.d.ts +1 -1
- package/dist/print.js +4 -4
- package/dist/scheduler-config.d.ts +5 -5
- package/dist/scheduler-freebusy.d.ts +1 -1
- package/dist/scheduler-freebusy.js +1 -1
- package/dist/scheduler.js +2 -2
- package/dist/schema-designer.d.ts +1 -1
- package/dist/schema-designer.js +2 -2
- package/dist/selection-bar.js +2 -2
- package/dist/sources/aggregate.d.ts +1 -1
- package/dist/sources/auth-supabase.js +1 -1
- package/dist/sources/dashboard.d.ts +2 -2
- package/dist/sources/dashboard.js +1 -1
- package/dist/sources/index.d.ts +13 -13
- package/dist/sources/index.js +13 -13
- package/dist/sources/realtime-supabase.js +1 -1
- package/dist/sources/relation-lookup.d.ts +1 -1
- package/dist/sources/relation-lookup.js +1 -1
- package/dist/sources/rest-adapters.d.ts +1 -1
- package/dist/sources/rest-adapters.js +1 -1
- package/dist/sources/rest.d.ts +2 -2
- package/dist/sources/rest.js +3 -3
- package/dist/sources/supabase.d.ts +2 -2
- package/dist/sources/supabase.js +3 -3
- package/dist/sources/with-entity-rules.d.ts +1 -1
- package/dist/sources/with-entity-rules.js +1 -1
- package/dist/sources/with-relation-labels.d.ts +1 -1
- package/dist/studio/emit-project.js +2161 -2127
- package/dist/studio/emit-schema.js +369 -369
- package/dist/studio/index.d.ts +1 -1
- package/dist/studio/index.js +1 -1
- package/dist/studio/introspect-db.js +45 -45
- package/dist/studio/project.d.ts +10 -0
- package/dist/studio/samples/crm.js +6 -6
- package/dist/studio/samples/fleet.js +7 -7
- package/dist/studio/samples/insurance.js +9 -9
- package/dist/studio/samples/inventory.js +12 -12
- package/dist/studio/samples/projects.js +5 -5
- package/dist/studio/samples/support.js +8 -8
- package/dist/studio/scaffold-app.js +104 -104
- package/dist/studio/scaffold.js +151 -151
- package/dist/studio/ui-components.d.ts +7 -0
- package/dist/studio/ui-components.js +35 -0
- package/dist/sveltekit/in-memory.d.ts +3 -3
- package/dist/sveltekit/in-memory.js +4 -4
- package/dist/sveltekit/index.d.ts +6 -6
- package/dist/sveltekit/index.js +5 -5
- package/dist/sveltekit/query-plan.d.ts +1 -1
- package/dist/sveltekit/sql-source.d.ts +4 -4
- package/dist/sveltekit/sql-source.js +4 -4
- package/dist/sveltekit/sql.d.ts +1 -1
- package/dist/sveltekit/transport.d.ts +2 -2
- package/dist/sveltekit/transport.js +1 -1
- package/dist/upgrade-prompt.js +25 -25
- package/package.json +6 -3
- package/dist/designer/assets/GridMenus-Cgilexpk.js +0 -8
- package/dist/designer/assets/SvDateRangeInput-BV5OXYQ2.css +0 -1
- package/dist/designer/assets/SvDateTimePicker-BdioTrJQ.js +0 -1
- package/dist/designer/assets/SvDateTimePicker-CY8TK4BT.css +0 -1
- package/dist/designer/assets/SvField-BF-9TJSd.css +0 -1
- package/dist/designer/assets/SvGridCellEditor-dLY7_kk9.js +0 -2
- package/dist/designer/assets/SvGridChart-BEDNTdc5.js +0 -2
- package/dist/designer/assets/SvGridChart-Vu4Nvjiv.css +0 -1
- package/dist/designer/assets/SvGridChartPanel-x3lzSxuf.js +0 -10
- package/dist/designer/assets/SvGridChartView-CAKhPELi.js +0 -1
- package/dist/designer/assets/SvGridChartView-DX9HfkBR.css +0 -1
- package/dist/designer/assets/SvGridDropdown-CAYG7Y-O.js +0 -1
- package/dist/designer/assets/SvGridDropdown-Crwb2P3Q.css +0 -1
- package/dist/designer/assets/SvListBox-CVYQcLX9.js +0 -1
- package/dist/designer/assets/SvListBox-DgN8kvjt.css +0 -1
- package/dist/designer/assets/chart-DHEgt4lN.js +0 -1
- package/dist/designer/assets/date-format-Dzy4mTGh.css +0 -1
- package/dist/designer/assets/export-format-DwjuTfrQ.js +0 -6
- package/dist/designer/assets/index-Cp7fDJ3b.css +0 -1
- package/dist/designer/assets/js-scroller.svelte-Bhxqb3-c.js +0 -110
- package/dist/designer/assets/src-B7DNcoQK.css +0 -1
- package/dist/designer/assets/src-BoYyigAC.js +0 -2896
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -3875
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -21
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -1938
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -205
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -18
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -264
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -697
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -4938
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -495
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -190
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -8
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -1
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -138
- package/dist/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -1
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { RowData, TableFeatures } from '@svgrid/grid';
|
|
15
15
|
import type { ConditionalFormat } from '@svgrid/grid/format';
|
|
16
|
-
import type { EnterpriseGridApi } from './install';
|
|
17
|
-
import type { ExportFormat, ExportRowSource } from './export';
|
|
16
|
+
import type { EnterpriseGridApi } from './install.js';
|
|
17
|
+
import type { ExportFormat, ExportRowSource } from './export.js';
|
|
18
18
|
declare function $$render<TFeatures extends TableFeatures, TData extends RowData>(): {
|
|
19
19
|
props: {
|
|
20
20
|
api: EnterpriseGridApi<TFeatures, TData> | null | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ExprColumn } from './expressions/expression-columns';
|
|
2
|
-
import type { PredicateExpr } from './expressions/expression-types';
|
|
1
|
+
import { type ExprColumn } from './expressions/expression-columns.js';
|
|
2
|
+
import type { PredicateExpr } from './expressions/expression-types.js';
|
|
3
3
|
type Props = {
|
|
4
4
|
columns: ReadonlyArray<ExprColumn>;
|
|
5
5
|
value?: PredicateExpr;
|
package/dist/SvFileInput.svelte
CHANGED
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* SvFileInput - a file / image upload control for the edit form. Picks a file,
|
|
4
|
-
* shows an image preview (when `image`), and stores a URL. With an `upload`
|
|
5
|
-
* handler it pushes to your storage and stores the returned URL; without one it
|
|
6
|
-
* falls back to an inline data URL (great for demos / small assets). Used by
|
|
7
|
-
* SvGridEditPanel for fields with an `upload` config.
|
|
8
|
-
*/
|
|
9
|
-
type Props = {
|
|
10
|
-
value: unknown
|
|
11
|
-
onChange: (url: string) => void
|
|
12
|
-
id?: string
|
|
13
|
-
accept?: string
|
|
14
|
-
image?: boolean
|
|
15
|
-
disabled?: boolean
|
|
16
|
-
/** Push the file to storage and resolve with the URL to store. */
|
|
17
|
-
upload?: (file: File) => Promise<string>
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
let { value, onChange, id, accept, image = false, disabled = false, upload }: Props = $props()
|
|
21
|
-
|
|
22
|
-
let loading = $state(false)
|
|
23
|
-
let error = $state<string | null>(null)
|
|
24
|
-
let name = $state('')
|
|
25
|
-
let inputEl: HTMLInputElement | undefined = $state()
|
|
26
|
-
|
|
27
|
-
const url = $derived(typeof value === 'string' ? value : '')
|
|
28
|
-
|
|
29
|
-
function readAsDataUrl(file: File): Promise<string> {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
const reader = new FileReader()
|
|
32
|
-
reader.onload = () => resolve(String(reader.result))
|
|
33
|
-
reader.onerror = () => reject(new Error('Could not read the file'))
|
|
34
|
-
reader.readAsDataURL(file)
|
|
35
|
-
})
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async function onPick(e: Event) {
|
|
39
|
-
const file = (e.currentTarget as HTMLInputElement).files?.[0]
|
|
40
|
-
if (!file) return
|
|
41
|
-
name = file.name
|
|
42
|
-
error = null
|
|
43
|
-
loading = true
|
|
44
|
-
try {
|
|
45
|
-
onChange(upload ? await upload(file) : await readAsDataUrl(file))
|
|
46
|
-
} catch (err) {
|
|
47
|
-
error = err instanceof Error ? err.message : 'Upload failed'
|
|
48
|
-
} finally {
|
|
49
|
-
loading = false
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function clear() {
|
|
54
|
-
onChange('')
|
|
55
|
-
name = ''
|
|
56
|
-
if (inputEl) inputEl.value = ''
|
|
57
|
-
}
|
|
58
|
-
</script>
|
|
59
|
-
|
|
60
|
-
<div class="sv-file">
|
|
61
|
-
{#if image && url}
|
|
62
|
-
<img class="sv-file__preview" src={url} alt="preview" />
|
|
63
|
-
{/if}
|
|
64
|
-
|
|
65
|
-
<div class="sv-file__row">
|
|
66
|
-
<button
|
|
67
|
-
type="button"
|
|
68
|
-
class="sv-file__btn"
|
|
69
|
-
{disabled}
|
|
70
|
-
onclick={() => inputEl?.click()}
|
|
71
|
-
>{loading ? 'Uploading…' : url ? 'Replace' : 'Choose file'}</button>
|
|
72
|
-
|
|
73
|
-
{#if url && !image}
|
|
74
|
-
<span class="sv-file__name" title={name || url}>{name || 'Uploaded file'}</span>
|
|
75
|
-
{/if}
|
|
76
|
-
{#if url && !disabled}
|
|
77
|
-
<button type="button" class="sv-file__clear" aria-label="Remove" title="Remove" onclick={clear}>×</button>
|
|
78
|
-
{/if}
|
|
79
|
-
|
|
80
|
-
<input
|
|
81
|
-
{id}
|
|
82
|
-
bind:this={inputEl}
|
|
83
|
-
class="sv-file__input"
|
|
84
|
-
type="file"
|
|
85
|
-
{accept}
|
|
86
|
-
{disabled}
|
|
87
|
-
onchange={onPick}
|
|
88
|
-
/>
|
|
89
|
-
</div>
|
|
90
|
-
|
|
91
|
-
{#if error}<p class="sv-file__err">{error}</p>{/if}
|
|
92
|
-
</div>
|
|
93
|
-
|
|
94
|
-
<style>
|
|
95
|
-
.sv-file { display: flex; flex-direction: column; gap: 8px; }
|
|
96
|
-
.sv-file__row { display: flex; align-items: center; gap: 8px; }
|
|
97
|
-
.sv-file__input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
|
98
|
-
.sv-file__preview {
|
|
99
|
-
width: 64px; height: 64px; object-fit: cover; border-radius: 8px;
|
|
100
|
-
border: 1px solid var(--sg-border, #ddd); background: var(--sg-header-bg, #f6f6f6);
|
|
101
|
-
}
|
|
102
|
-
.sv-file__btn {
|
|
103
|
-
padding: 7px 12px; border: 1px solid var(--sg-border, #ccc); border-radius: 6px;
|
|
104
|
-
background: var(--sg-bg, #fff); color: var(--sg-fg, inherit); cursor: pointer; font: inherit;
|
|
105
|
-
}
|
|
106
|
-
.sv-file__btn:disabled { opacity: 0.6; cursor: default; }
|
|
107
|
-
.sv-file__name { font-size: 12px; color: var(--sg-muted, #666); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
|
|
108
|
-
.sv-file__clear {
|
|
109
|
-
border: none; background: none; cursor: pointer; font-size: 16px; line-height: 1;
|
|
110
|
-
color: var(--sg-muted, #888); padding: 2px 4px;
|
|
111
|
-
}
|
|
112
|
-
.sv-file__err { margin: 0; font-size: 12px; color: #dc2626; }
|
|
113
|
-
</style>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* SvFileInput - a file / image upload control for the edit form. Picks a file,
|
|
4
|
+
* shows an image preview (when `image`), and stores a URL. With an `upload`
|
|
5
|
+
* handler it pushes to your storage and stores the returned URL; without one it
|
|
6
|
+
* falls back to an inline data URL (great for demos / small assets). Used by
|
|
7
|
+
* SvGridEditPanel for fields with an `upload` config.
|
|
8
|
+
*/
|
|
9
|
+
type Props = {
|
|
10
|
+
value: unknown
|
|
11
|
+
onChange: (url: string) => void
|
|
12
|
+
id?: string
|
|
13
|
+
accept?: string
|
|
14
|
+
image?: boolean
|
|
15
|
+
disabled?: boolean
|
|
16
|
+
/** Push the file to storage and resolve with the URL to store. */
|
|
17
|
+
upload?: (file: File) => Promise<string>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let { value, onChange, id, accept, image = false, disabled = false, upload }: Props = $props()
|
|
21
|
+
|
|
22
|
+
let loading = $state(false)
|
|
23
|
+
let error = $state<string | null>(null)
|
|
24
|
+
let name = $state('')
|
|
25
|
+
let inputEl: HTMLInputElement | undefined = $state()
|
|
26
|
+
|
|
27
|
+
const url = $derived(typeof value === 'string' ? value : '')
|
|
28
|
+
|
|
29
|
+
function readAsDataUrl(file: File): Promise<string> {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const reader = new FileReader()
|
|
32
|
+
reader.onload = () => resolve(String(reader.result))
|
|
33
|
+
reader.onerror = () => reject(new Error('Could not read the file'))
|
|
34
|
+
reader.readAsDataURL(file)
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function onPick(e: Event) {
|
|
39
|
+
const file = (e.currentTarget as HTMLInputElement).files?.[0]
|
|
40
|
+
if (!file) return
|
|
41
|
+
name = file.name
|
|
42
|
+
error = null
|
|
43
|
+
loading = true
|
|
44
|
+
try {
|
|
45
|
+
onChange(upload ? await upload(file) : await readAsDataUrl(file))
|
|
46
|
+
} catch (err) {
|
|
47
|
+
error = err instanceof Error ? err.message : 'Upload failed'
|
|
48
|
+
} finally {
|
|
49
|
+
loading = false
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function clear() {
|
|
54
|
+
onChange('')
|
|
55
|
+
name = ''
|
|
56
|
+
if (inputEl) inputEl.value = ''
|
|
57
|
+
}
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<div class="sv-file">
|
|
61
|
+
{#if image && url}
|
|
62
|
+
<img class="sv-file__preview" src={url} alt="preview" />
|
|
63
|
+
{/if}
|
|
64
|
+
|
|
65
|
+
<div class="sv-file__row">
|
|
66
|
+
<button
|
|
67
|
+
type="button"
|
|
68
|
+
class="sv-file__btn"
|
|
69
|
+
{disabled}
|
|
70
|
+
onclick={() => inputEl?.click()}
|
|
71
|
+
>{loading ? 'Uploading…' : url ? 'Replace' : 'Choose file'}</button>
|
|
72
|
+
|
|
73
|
+
{#if url && !image}
|
|
74
|
+
<span class="sv-file__name" title={name || url}>{name || 'Uploaded file'}</span>
|
|
75
|
+
{/if}
|
|
76
|
+
{#if url && !disabled}
|
|
77
|
+
<button type="button" class="sv-file__clear" aria-label="Remove" title="Remove" onclick={clear}>×</button>
|
|
78
|
+
{/if}
|
|
79
|
+
|
|
80
|
+
<input
|
|
81
|
+
{id}
|
|
82
|
+
bind:this={inputEl}
|
|
83
|
+
class="sv-file__input"
|
|
84
|
+
type="file"
|
|
85
|
+
{accept}
|
|
86
|
+
{disabled}
|
|
87
|
+
onchange={onPick}
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
{#if error}<p class="sv-file__err">{error}</p>{/if}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<style>
|
|
95
|
+
.sv-file { display: flex; flex-direction: column; gap: 8px; }
|
|
96
|
+
.sv-file__row { display: flex; align-items: center; gap: 8px; }
|
|
97
|
+
.sv-file__input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
|
98
|
+
.sv-file__preview {
|
|
99
|
+
width: 64px; height: 64px; object-fit: cover; border-radius: 8px;
|
|
100
|
+
border: 1px solid var(--sg-border, #ddd); background: var(--sg-header-bg, #f6f6f6);
|
|
101
|
+
}
|
|
102
|
+
.sv-file__btn {
|
|
103
|
+
padding: 7px 12px; border: 1px solid var(--sg-border, #ccc); border-radius: 6px;
|
|
104
|
+
background: var(--sg-bg, #fff); color: var(--sg-fg, inherit); cursor: pointer; font: inherit;
|
|
105
|
+
}
|
|
106
|
+
.sv-file__btn:disabled { opacity: 0.6; cursor: default; }
|
|
107
|
+
.sv-file__name { font-size: 12px; color: var(--sg-muted, #666); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
|
|
108
|
+
.sv-file__clear {
|
|
109
|
+
border: none; background: none; cursor: pointer; font-size: 16px; line-height: 1;
|
|
110
|
+
color: var(--sg-muted, #888); padding: 2px 4px;
|
|
111
|
+
}
|
|
112
|
+
.sv-file__err { margin: 0; font-size: 12px; color: #dc2626; }
|
|
113
|
+
</style>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ConditionalFormat } from '@svgrid/grid/format';
|
|
2
|
-
import type { ExprColumn } from './expressions/expression-columns';
|
|
3
|
-
import type { AlertEvent, AlertRule } from './alerts/alert-types';
|
|
2
|
+
import type { ExprColumn } from './expressions/expression-columns.js';
|
|
3
|
+
import type { AlertEvent, AlertRule } from './alerts/alert-types.js';
|
|
4
4
|
declare function $$render<TRow extends Record<string, unknown>>(): {
|
|
5
5
|
props: {
|
|
6
6
|
/** The same rows bound to the grid. In watch mode, observed for changes. */
|