@svgrid/enterprise 3.0.2 → 3.0.3
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/LICENSE +94 -24
- package/README.md +36 -4
- package/dist/SvAdvancedFilter.svelte +1 -1
- package/dist/SvAlertsManager.svelte +2 -1
- package/dist/SvBoard.svelte +2 -1
- package/dist/SvExportMenu.svelte +4 -1
- package/dist/SvExportMenu.svelte.d.ts +0 -13
- package/dist/SvExpressionEditor.svelte +3 -3
- package/dist/SvFormulaBar.svelte +94 -20
- package/dist/SvFormulaBar.svelte.d.ts +7 -0
- package/dist/SvGridAlerts.svelte +49 -9
- package/dist/SvGridBoard.svelte +13 -8
- package/dist/SvGridBulkEditDrawer.svelte +26 -2
- package/dist/SvGridEditPanel.svelte +3 -0
- package/dist/SvGridScheduler.svelte +69 -40
- package/dist/SvGridSelectionBar.svelte +10 -3
- package/dist/SvPivotDesigner.svelte +198 -40
- package/dist/SvPivotDesigner.svelte.d.ts +27 -20
- package/dist/SvSheet.svelte +4043 -243
- package/dist/SvSheet.svelte.d.ts +76 -3
- package/dist/SvSheetChartSetup.svelte +151 -0
- package/dist/SvSheetChartSetup.svelte.d.ts +18 -0
- package/dist/SvSheetComment.svelte +216 -31
- package/dist/SvSheetComment.svelte.d.ts +11 -11
- package/dist/SvSheetConditionalFormat.svelte +28 -31
- package/dist/SvSheetDataValidation.svelte +66 -42
- package/dist/SvSheetEditRanges.svelte +217 -0
- package/dist/SvSheetEditRanges.svelte.d.ts +15 -0
- package/dist/SvSheetErrors.svelte +125 -0
- package/dist/SvSheetErrors.svelte.d.ts +20 -0
- package/dist/SvSheetEvaluate.svelte +133 -0
- package/dist/SvSheetEvaluate.svelte.d.ts +15 -0
- package/dist/SvSheetFilterMenu.svelte +137 -34
- package/dist/SvSheetFilterMenu.svelte.d.ts +5 -0
- package/dist/SvSheetFindReplace.svelte +19 -19
- package/dist/SvSheetFormatCells.svelte +125 -81
- package/dist/SvSheetGoalSeek.svelte +17 -16
- package/dist/SvSheetInsertFunction.svelte +15 -13
- package/dist/SvSheetIteration.svelte +81 -0
- package/dist/SvSheetIteration.svelte.d.ts +10 -0
- package/dist/SvSheetLink.svelte +99 -0
- package/dist/SvSheetLink.svelte.d.ts +17 -0
- package/dist/SvSheetListPicker.svelte +4 -2
- package/dist/SvSheetListPicker.svelte.d.ts +0 -6
- package/dist/SvSheetManageRules.svelte +20 -18
- package/dist/SvSheetNameManager.svelte +17 -15
- package/dist/SvSheetPageSetup.svelte +159 -0
- package/dist/SvSheetPageSetup.svelte.d.ts +13 -0
- package/dist/SvSheetPasteSpecial.svelte +22 -20
- package/dist/SvSheetPivot.svelte +220 -0
- package/dist/SvSheetPivot.svelte.d.ts +21 -0
- package/dist/SvSheetProtectSheet.svelte +81 -0
- package/dist/SvSheetProtectSheet.svelte.d.ts +11 -0
- package/dist/SvSheetRemoveDuplicates.svelte +13 -10
- package/dist/SvSheetRibbon.svelte +104 -51
- package/dist/SvSheetSizeDialog.svelte +4 -2
- package/dist/SvSheetSort.svelte +218 -0
- package/dist/SvSheetSort.svelte.d.ts +28 -0
- package/dist/SvSheetSparklines.svelte +135 -0
- package/dist/SvSheetSparklines.svelte.d.ts +14 -0
- package/dist/SvSheetTable.svelte +160 -0
- package/dist/SvSheetTable.svelte.d.ts +24 -0
- package/dist/SvSheetTabs.svelte +161 -31
- package/dist/SvSheetTabs.svelte.d.ts +22 -8
- package/dist/SvSheetTextToColumns.svelte +20 -20
- package/dist/SvSheetValidationAlert.svelte +8 -6
- package/dist/advanced-filter-enable.js +1 -1
- package/dist/alerts/alert-engine.d.ts +6 -0
- package/dist/alerts/alert-engine.js +21 -4
- package/dist/alerts/alert-formats.js +2 -0
- package/dist/alerts/alert-types.d.ts +1 -1
- package/dist/alerts.d.ts +1 -1
- package/dist/alerts.js +2 -2
- package/dist/board.js +2 -2
- package/dist/bulk-edit.d.ts +3 -1
- package/dist/bulk-edit.js +1 -1
- package/dist/cdn/svgrid-enterprise.svelte-external.js +39827 -16429
- package/dist/designer/assets/GridMenus-8gTNssgV.js +8 -0
- package/dist/designer/assets/{SvChartMenu-D9hEeHar.js → SvChartMenu-BDoeqGz6.js} +1 -1
- package/dist/designer/assets/{SvDateTimePicker-DARvKUL2.js → SvDateTimePicker-DCPg7WGN.js} +1 -1
- package/dist/designer/assets/SvGridCellEditor-DMoWJjEI.js +4 -0
- package/dist/designer/assets/{SvGridChart-B8j1SSy3.js → SvGridChart-Cy1ATrWh.js} +2 -2
- package/dist/designer/assets/SvGridChartBuilder-eQ3mn0L9.js +1 -0
- package/dist/designer/assets/{SvGridChartPanel-pT6ITc2P.js → SvGridChartPanel-CATdVc9X.js} +3 -3
- package/dist/designer/assets/{SvGridChartView-bg281UA1.js → SvGridChartView-CmsZtCED.js} +1 -1
- package/dist/designer/assets/SvGridDropdown-Cjz0H-fI.js +1 -0
- package/dist/designer/assets/{SvTabs-UFCMTHXS.js → SvTabs-2mHC6oaz.js} +1 -1
- package/dist/designer/assets/cell-formatting-BbubJTVz.js +1 -0
- package/dist/designer/assets/{chart-cIPUsbM5.js → chart-Cn7MnNqA.js} +1 -1
- package/dist/designer/assets/{chart-panel-messages-DtTxpBUU.js → chart-panel-messages-Dz7PTIqT.js} +1 -1
- package/dist/designer/assets/{chart-summary-Czu_5epb.js → chart-summary-BD1qYB2R.js} +1 -1
- package/dist/designer/assets/{chart-trend-D5I5VEe8.js → chart-trend-B8xr5LuD.js} +1 -1
- package/dist/designer/assets/{dismissable-BO547MH9.js → dismissable-ChWRPkoa.js} +1 -1
- package/dist/designer/assets/{export-format-D-eP4b2l.js → export-format-DGckmgKr.js} +1 -1
- package/dist/designer/assets/{focus-trap-CAreAhlU.js → focus-trap-V2-6Fy9I.js} +1 -1
- package/dist/designer/assets/{index-DwU7CAMm.js → index-D5bVbuzI.js} +317 -315
- package/dist/designer/assets/index-_JVFxt02.css +1 -0
- package/dist/designer/assets/row-resize-BInFWCpr.js +1 -0
- package/dist/designer/assets/server-block-cache-CXJKkJpy.js +1 -0
- package/dist/designer/assets/src-DUQ4xE3x.js +58 -0
- package/dist/designer/assets/validate-C3B8QKsM.js +1 -0
- package/dist/designer/index.html +17 -16
- package/dist/export-pdf.d.ts +75 -0
- package/dist/export-pdf.js +216 -15
- package/dist/export.js +10 -2
- package/dist/gantt/SvGridGantt.svelte +2890 -0
- package/dist/gantt/SvGridGantt.svelte.d.ts +30 -0
- package/dist/gantt/gantt-config.d.ts +73 -0
- package/dist/gantt/gantt-config.js +1 -0
- package/dist/gantt/gantt-critical-path.d.ts +67 -0
- package/dist/gantt/gantt-critical-path.js +207 -0
- package/dist/gantt/gantt-model.d.ts +257 -0
- package/dist/gantt/gantt-model.js +651 -0
- package/dist/gantt/gantt-resources.d.ts +59 -0
- package/dist/gantt/gantt-resources.js +71 -0
- package/dist/gantt/gantt.d.ts +7 -0
- package/dist/gantt/gantt.js +36 -0
- package/dist/gantt/index.d.ts +15 -0
- package/dist/gantt/index.js +22 -0
- package/dist/gantt/timeline-arrows.d.ts +102 -0
- package/dist/gantt/timeline-arrows.js +181 -0
- package/dist/import.d.ts +2 -2
- package/dist/import.js +1 -1
- package/dist/index.d.ts +34 -7
- package/dist/index.js +44 -7
- package/dist/install.js +8 -1
- package/dist/license-core.d.ts +17 -1
- package/dist/license-core.js +16 -5
- package/dist/license.d.ts +18 -2
- package/dist/license.js +71 -6
- package/dist/node/studio.js +140 -8
- package/dist/pivot-enable.js +2 -2
- package/dist/scheduler-dependencies.d.ts +35 -0
- package/dist/scheduler-dependencies.js +36 -1
- package/dist/scheduler.js +2 -2
- package/dist/selection-bar.js +2 -2
- package/dist/server/SvGroupCell.svelte +213 -0
- package/dist/server/SvGroupCell.svelte.d.ts +62 -0
- package/dist/server/SvRowGroupPanel.svelte +322 -0
- package/dist/server/SvRowGroupPanel.svelte.d.ts +37 -0
- package/dist/server/enable.d.ts +17 -0
- package/dist/server/enable.js +49 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.js +24 -0
- package/dist/server/messages.d.ts +45 -0
- package/dist/server/messages.js +35 -0
- package/dist/server/server-group-model.d.ts +104 -0
- package/dist/server/server-group-model.js +272 -0
- package/dist/server/server-pivot.d.ts +46 -0
- package/dist/server/server-pivot.js +57 -0
- package/dist/server/server-row-model.d.ts +547 -0
- package/dist/server/server-row-model.js +1551 -0
- package/dist/server/server-selection.d.ts +99 -0
- package/dist/server/server-selection.js +215 -0
- package/dist/server/svgrid-adapter.d.ts +155 -0
- package/dist/server/svgrid-adapter.js +202 -0
- package/dist/sheet/ast.d.ts +45 -1
- package/dist/sheet/ast.js +14 -0
- package/dist/sheet/auto-filter.d.ts +58 -4
- package/dist/sheet/auto-filter.js +159 -11
- package/dist/sheet/autocomplete.d.ts +9 -0
- package/dist/sheet/autocomplete.js +90 -4
- package/dist/sheet/cell-images.d.ts +39 -0
- package/dist/sheet/cell-images.js +90 -0
- package/dist/sheet/cell-types.d.ts +58 -0
- package/dist/sheet/cell-types.js +96 -0
- package/dist/sheet/coerce.d.ts +40 -0
- package/dist/sheet/coerce.js +170 -3
- package/dist/sheet/comments.d.ts +43 -9
- package/dist/sheet/comments.js +85 -27
- package/dist/sheet/conditional-formats.d.ts +29 -6
- package/dist/sheet/conditional-formats.js +37 -12
- package/dist/sheet/csv.d.ts +32 -0
- package/dist/sheet/csv.js +158 -0
- package/dist/sheet/culture.d.ts +87 -0
- package/dist/sheet/culture.js +247 -0
- package/dist/sheet/delta.d.ts +102 -0
- package/dist/sheet/delta.js +203 -0
- package/dist/sheet/deps.d.ts +45 -1
- package/dist/sheet/deps.js +77 -2
- package/dist/sheet/document.d.ts +106 -4
- package/dist/sheet/document.js +204 -3
- package/dist/sheet/engine.d.ts +67 -0
- package/dist/sheet/engine.js +19 -0
- package/dist/sheet/entry.d.ts +8 -4
- package/dist/sheet/entry.js +171 -21
- package/dist/sheet/error-check.d.ts +49 -0
- package/dist/sheet/error-check.js +83 -0
- package/dist/sheet/evaluate-steps.d.ts +48 -0
- package/dist/sheet/evaluate-steps.js +196 -0
- package/dist/sheet/evaluate.d.ts +67 -0
- package/dist/sheet/evaluate.js +725 -13
- package/dist/sheet/filter-files.d.ts +37 -0
- package/dist/sheet/filter-files.js +465 -0
- package/dist/sheet/format-store.d.ts +15 -0
- package/dist/sheet/format-store.js +11 -1
- package/dist/sheet/from-rows.d.ts +14 -0
- package/dist/sheet/from-rows.js +50 -0
- package/dist/sheet/function-catalog.d.ts +1 -1
- package/dist/sheet/function-catalog.js +296 -5
- package/dist/sheet/functions.js +363 -91
- package/dist/sheet/index.d.ts +35 -8
- package/dist/sheet/index.js +35 -8
- package/dist/sheet/links.d.ts +57 -0
- package/dist/sheet/links.js +174 -0
- package/dist/sheet/messages.d.ts +778 -0
- package/dist/sheet/messages.js +806 -0
- package/dist/sheet/number-format.d.ts +52 -5
- package/dist/sheet/number-format.js +465 -68
- package/dist/sheet/objects.d.ts +106 -0
- package/dist/sheet/objects.js +149 -0
- package/dist/sheet/ods-document.d.ts +44 -0
- package/dist/sheet/ods-document.js +1275 -0
- package/dist/sheet/open-file.d.ts +26 -0
- package/dist/sheet/open-file.js +56 -0
- package/dist/sheet/outline.d.ts +82 -0
- package/dist/sheet/outline.js +228 -0
- package/dist/sheet/packs/array.d.ts +16 -0
- package/dist/sheet/packs/array.js +172 -0
- package/dist/sheet/packs/database.d.ts +42 -0
- package/dist/sheet/packs/database.js +142 -0
- package/dist/sheet/packs/engineering.d.ts +2 -0
- package/dist/sheet/packs/engineering.js +296 -0
- package/dist/sheet/packs/financial.d.ts +5 -0
- package/dist/sheet/packs/financial.js +220 -0
- package/dist/sheet/packs/math-stats.d.ts +2 -0
- package/dist/sheet/packs/math-stats.js +372 -0
- package/dist/sheet/packs/special.d.ts +44 -0
- package/dist/sheet/packs/special.js +187 -0
- package/dist/sheet/packs/stats-dist.d.ts +2 -0
- package/dist/sheet/packs/stats-dist.js +785 -0
- package/dist/sheet/packs/text-date.d.ts +2 -0
- package/dist/sheet/packs/text-date.js +332 -0
- package/dist/sheet/packs/trig.d.ts +2 -0
- package/dist/sheet/packs/trig.js +73 -0
- package/dist/sheet/page-setup.d.ts +73 -0
- package/dist/sheet/page-setup.js +73 -0
- package/dist/sheet/parse.js +42 -10
- package/dist/sheet/paste-special.d.ts +22 -0
- package/dist/sheet/paste-special.js +14 -5
- package/dist/sheet/pivot-range.d.ts +160 -0
- package/dist/sheet/pivot-range.js +333 -0
- package/dist/sheet/presence.d.ts +73 -0
- package/dist/sheet/presence.js +79 -0
- package/dist/sheet/print.d.ts +104 -0
- package/dist/sheet/print.js +169 -0
- package/dist/sheet/protection.d.ts +55 -1
- package/dist/sheet/protection.js +55 -2
- package/dist/sheet/rects.d.ts +1 -1
- package/dist/sheet/refs.d.ts +48 -0
- package/dist/sheet/refs.js +155 -8
- package/dist/sheet/ribbon-icons.d.ts +1 -1
- package/dist/sheet/ribbon-icons.js +186 -0
- package/dist/sheet/ribbon.d.ts +1 -1
- package/dist/sheet/ribbon.js +324 -23
- package/dist/sheet/sheet-kinds.d.ts +74 -0
- package/dist/sheet/sheet-kinds.js +91 -0
- package/dist/sheet/shortcuts.d.ts +13 -3
- package/dist/sheet/shortcuts.js +63 -12
- package/dist/sheet/sort.d.ts +51 -0
- package/dist/sheet/sort.js +107 -0
- package/dist/sheet/sparklines.d.ts +111 -0
- package/dist/sheet/sparklines.js +204 -0
- package/dist/sheet/table-styles.d.ts +74 -0
- package/dist/sheet/table-styles.js +152 -0
- package/dist/sheet/tables.d.ts +19 -0
- package/dist/sheet/tables.js +31 -0
- package/dist/sheet/tokenize.d.ts +18 -1
- package/dist/sheet/tokenize.js +60 -9
- package/dist/sheet/validation.d.ts +16 -0
- package/dist/sheet/validation.js +37 -0
- package/dist/sheet/workbook.d.ts +148 -3
- package/dist/sheet/workbook.js +742 -31
- package/dist/sheet/xls-cfb.d.ts +32 -0
- package/dist/sheet/xls-cfb.js +290 -0
- package/dist/sheet/xls-document.d.ts +10 -0
- package/dist/sheet/xls-document.js +1243 -0
- package/dist/sheet/xls-formula.d.ts +40 -0
- package/dist/sheet/xls-formula.js +569 -0
- package/dist/sheet/xlsx-document.d.ts +108 -0
- package/dist/sheet/xlsx-document.js +1849 -0
- package/dist/sheet/xlsx-drawing.d.ts +99 -0
- package/dist/sheet/xlsx-drawing.js +420 -0
- package/dist/sheet-enable.js +6 -7
- package/dist/sheet-text.d.ts +7 -0
- package/dist/sheet-text.js +29 -0
- package/dist/sources/auth-supabase.js +2 -2
- package/dist/sources/realtime-supabase.js +2 -2
- package/dist/sources/rest.d.ts +6 -2
- package/dist/sources/rest.js +42 -7
- package/dist/sources/supabase.d.ts +10 -1
- package/dist/sources/supabase.js +73 -40
- package/dist/studio/emit-project.js +14 -1
- package/dist/studio/index.js +1 -1
- package/dist/studio/project.d.ts +11 -2
- package/dist/studio/project.js +5 -2
- package/dist/studio/ui-components.generated.js +107 -2
- package/dist/sveltekit/in-memory.d.ts +2 -2
- package/dist/sveltekit/in-memory.js +125 -4
- package/dist/sveltekit/index.d.ts +1 -1
- package/dist/sveltekit/index.js +1 -1
- package/dist/sveltekit/query-plan.d.ts +50 -4
- package/dist/sveltekit/query-plan.js +25 -3
- package/dist/sveltekit/sql-source.d.ts +6 -0
- package/dist/sveltekit/sql-source.js +34 -6
- package/dist/sveltekit/sql.d.ts +31 -0
- package/dist/sveltekit/sql.js +135 -25
- package/dist/sveltekit/transport.d.ts +10 -2
- package/dist/sveltekit/transport.js +30 -6
- package/dist/upgrade-prompt.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/watermark.js +35 -2
- package/dist/wc/GridMenus-By9vPuq0.js +1088 -0
- package/dist/wc/SvChartMenu-CQNrQGT2.js +308 -0
- package/dist/wc/SvDateRangeInput-DR6m7bSM.js +199 -0
- package/dist/wc/SvDateTimePicker-D-vRnaMo.js +771 -0
- package/dist/wc/SvField-B_kurx_P.js +149 -0
- package/dist/wc/SvGrid.helpers-BdVDtjUm.js +135 -0
- package/dist/wc/SvGridCellEditor-Bnf1Kr5C.js +560 -0
- package/dist/wc/SvGridChart-BqUJh2pG.js +3572 -0
- package/dist/wc/SvGridChartBuilder-CGycC5cn.js +988 -0
- package/dist/wc/SvGridChartPanel-CRnizsHD.js +1746 -0
- package/dist/wc/SvGridChartView-D1pa_xMy.js +47 -0
- package/dist/wc/SvGridDropdown-45WsObLL.js +259 -0
- package/dist/wc/SvModal-DrfOYYyX.js +189 -0
- package/dist/wc/cell-formatting-CBfgahv1.js +86 -0
- package/dist/wc/chart-6OXlybVT.js +4341 -0
- package/dist/wc/chart-export-CeSADGfi.js +135 -0
- package/dist/wc/chart-export-pdf-BGko7MER.js +104 -0
- package/dist/wc/chart-summary-2m3ia1-n.js +137 -0
- package/dist/wc/chart-trend-CQOQtTMl.js +50 -0
- package/dist/wc/chart-validate-CD6ptiwg.js +180 -0
- package/dist/wc/client-DQIzjDBG.js +3064 -0
- package/dist/wc/column-resize-DUPgynvc.js +101 -0
- package/dist/wc/date-format-DS-z_h9v.js +1130 -0
- package/dist/wc/dismissable-CQ6XFXsk.js +45 -0
- package/dist/wc/editor-contract-peBDxir_.js +22 -0
- package/dist/wc/editor-registry-DxGKqcvx.js +24 -0
- package/dist/wc/focus-trap-Dbb2tJxb.js +65 -0
- package/dist/wc/list-option-DrRyivWp.js +82 -0
- package/dist/wc/popover-WsGlvtQv.js +69 -0
- package/dist/wc/positioning-BiKLfu1E.js +112 -0
- package/dist/wc/react.d.ts +41 -0
- package/dist/wc/react.js +90 -0
- package/dist/wc/rolldown-runtime-Dy4uBu1J.js +11 -0
- package/dist/wc/row-drag-touch-CycRR65n.js +93 -0
- package/dist/wc/row-resize-limG_N1z.js +111 -0
- package/dist/wc/sv-sheet-element.d.ts +97 -0
- package/dist/wc/sv-sheet-element.js +44213 -0
- package/dist/wc/svelte-virtualizer.svelte-CXtQy2TQ.js +530 -0
- package/dist/wc/validate-BqDthkNr.js +88 -0
- package/dist/wc/vue.d.ts +31 -0
- package/dist/wc/vue.js +75 -0
- package/package.json +30 -5
- package/dist/designer/assets/GridMenus-BlsvL_aU.js +0 -8
- package/dist/designer/assets/SvGridCellEditor-C7uQXYds.js +0 -4
- package/dist/designer/assets/SvGridChartBuilder-kvyIU_Rl.js +0 -1
- package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +0 -1
- package/dist/designer/assets/cell-formatting-wr5wm7US.js +0 -1
- package/dist/designer/assets/index-CMFgAoVV.css +0 -1
- package/dist/designer/assets/row-resize-DLktcqUK.js +0 -1
- package/dist/designer/assets/src-EdI3Xqds.js +0 -58
- package/dist/designer/assets/validate-h-aslRV9.js +0 -1
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* const source = createKitDataSource({ endpoint: '/api/customers' })
|
|
24
24
|
* const controller = createServerDataSource(source, { onChange: ... })
|
|
25
25
|
*/
|
|
26
|
-
import type { RowData, ServerDataSource, ServerRequest } from '@svgrid/grid';
|
|
26
|
+
import type { RowData, ServerDataSource, ServerFilterModel, ServerRequest, ServerSelectionRule } from '@svgrid/grid';
|
|
27
27
|
import type { EntitySchema } from '../schema.js';
|
|
28
28
|
import type { WritableDataSource } from './types.js';
|
|
29
29
|
/** Wire protocol: the single JSON body shape the client POSTs and the server dispatches on. */
|
|
@@ -43,6 +43,14 @@ export type KitMessage<TData> = {
|
|
|
43
43
|
kind: 'mutate';
|
|
44
44
|
op: 'delete';
|
|
45
45
|
id: string;
|
|
46
|
+
}
|
|
47
|
+
/** A bulk edit by rule: every row the filter and the selection name. */
|
|
48
|
+
| {
|
|
49
|
+
kind: 'mutate';
|
|
50
|
+
op: 'updateWhere';
|
|
51
|
+
filterModel: ServerFilterModel;
|
|
52
|
+
patch: Partial<TData>;
|
|
53
|
+
selection: ServerSelectionRule;
|
|
46
54
|
};
|
|
47
55
|
type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
48
56
|
export type KitDataSourceOptions = {
|
|
@@ -54,7 +62,7 @@ export type KitDataSourceOptions = {
|
|
|
54
62
|
*/
|
|
55
63
|
fetch?: FetchLike;
|
|
56
64
|
};
|
|
57
|
-
export declare function createKitDataSource<TData extends RowData>(options: KitDataSourceOptions): WritableDataSource<TData
|
|
65
|
+
export declare function createKitDataSource<TData extends RowData>(options: KitDataSourceOptions): WritableDataSource<TData> & Required<Pick<ServerDataSource<TData>, 'updateWhere'>>;
|
|
58
66
|
/** The CRUD action a Kit message maps to (`query` -> `read`). */
|
|
59
67
|
export type KitAction = 'read' | 'create' | 'update' | 'delete';
|
|
60
68
|
/** Context passed to the `authorize` guard before every op. */
|
|
@@ -7,11 +7,12 @@ function jsonResponse(data, status = 200) {
|
|
|
7
7
|
}
|
|
8
8
|
export function createKitDataSource(options) {
|
|
9
9
|
const doFetch = options.fetch ?? ((i, init) => fetch(i, init));
|
|
10
|
-
async function post(body) {
|
|
10
|
+
async function post(body, signal) {
|
|
11
11
|
const res = await doFetch(options.endpoint, {
|
|
12
12
|
method: 'POST',
|
|
13
13
|
headers: { 'content-type': 'application/json' },
|
|
14
14
|
body: JSON.stringify(body),
|
|
15
|
+
...(signal ? { signal } : {}),
|
|
15
16
|
});
|
|
16
17
|
if (!res.ok) {
|
|
17
18
|
const detail = await res.text().catch(() => '');
|
|
@@ -20,13 +21,15 @@ export function createKitDataSource(options) {
|
|
|
20
21
|
return (await res.json());
|
|
21
22
|
}
|
|
22
23
|
return {
|
|
23
|
-
|
|
24
|
+
// The abort signal rides on the fetch, not in the body.
|
|
25
|
+
getRows: ({ signal, ...request }) => post({ kind: 'query', request }, signal),
|
|
24
26
|
createRow: (input) => post({ kind: 'mutate', op: 'create', input }),
|
|
25
27
|
updateRow: (id, patch) => post({ kind: 'mutate', op: 'update', id, patch }),
|
|
26
28
|
deleteRow: (id) => post({ kind: 'mutate', op: 'delete', id }).then(() => undefined),
|
|
29
|
+
updateWhere: (filterModel, patch, selection) => post({ kind: 'mutate', op: 'updateWhere', filterModel, patch, selection }).then((r) => r.count),
|
|
27
30
|
};
|
|
28
31
|
}
|
|
29
|
-
const actionOf = (msg) => msg.kind === 'query' ? 'read' : msg.op;
|
|
32
|
+
const actionOf = (msg) => msg.kind === 'query' ? 'read' : msg.op === 'updateWhere' ? 'update' : msg.op;
|
|
30
33
|
export function createKitHandlers(options) {
|
|
31
34
|
const { source, authorize, validate, audit, hooks, scope } = options;
|
|
32
35
|
const idField = options.schema.idField ?? options.schema.fields.find((f) => f.primaryKey)?.field ?? 'id';
|
|
@@ -66,18 +69,18 @@ export function createKitHandlers(options) {
|
|
|
66
69
|
return jsonResponse({ error: 'forbidden' }, 403);
|
|
67
70
|
}
|
|
68
71
|
// Validate create / update payloads BEFORE the source. 422 on field errors.
|
|
69
|
-
if (validate && msg.kind === 'mutate' &&
|
|
72
|
+
if (validate && msg.kind === 'mutate' && msg.op !== 'delete') {
|
|
70
73
|
const values = (msg.op === 'create' ? msg.input : msg.patch);
|
|
71
74
|
let errors;
|
|
72
75
|
if (validate === true) {
|
|
73
76
|
const all = await validateAll(options.schema, values);
|
|
74
77
|
// On update, only the supplied fields are validated (a patch omits the rest).
|
|
75
|
-
errors = msg.op
|
|
78
|
+
errors = msg.op !== 'create'
|
|
76
79
|
? Object.fromEntries(Object.keys(values).filter((k) => all[k]).map((k) => [k, all[k]]))
|
|
77
80
|
: all;
|
|
78
81
|
}
|
|
79
82
|
else {
|
|
80
|
-
errors = await validate({ action: msg.op, values, event: { request, locals: event?.locals } });
|
|
83
|
+
errors = await validate({ action: msg.op === 'create' ? 'create' : 'update', values, event: { request, locals: event?.locals } });
|
|
81
84
|
}
|
|
82
85
|
if (errors && Object.keys(errors).length) {
|
|
83
86
|
return jsonResponse({ error: 'validation failed', fieldErrors: errors }, 422);
|
|
@@ -191,6 +194,27 @@ export function createKitHandlers(options) {
|
|
|
191
194
|
await fireAudit({ action: 'update', id: msg.id, values: patch, result: row, event: evt });
|
|
192
195
|
return jsonResponse(row);
|
|
193
196
|
}
|
|
197
|
+
if (msg.op === 'updateWhere') {
|
|
198
|
+
if (!source.updateWhere)
|
|
199
|
+
return jsonResponse({ error: 'updateWhere not supported' }, 405);
|
|
200
|
+
// The scope narrows the rule the same way it narrows a query, and
|
|
201
|
+
// the patch cannot move rows out of it.
|
|
202
|
+
let filterModel = msg.filterModel;
|
|
203
|
+
let patch = msg.patch;
|
|
204
|
+
if (activeScope) {
|
|
205
|
+
filterModel = {
|
|
206
|
+
...filterModel,
|
|
207
|
+
columns: {
|
|
208
|
+
...(filterModel.columns ?? {}),
|
|
209
|
+
[activeScope.field]: { operator: 'equals', value: String(activeScope.value) },
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
patch = { ...patch, [activeScope.field]: activeScope.value };
|
|
213
|
+
}
|
|
214
|
+
const count = await source.updateWhere(filterModel, patch, msg.selection);
|
|
215
|
+
await fireAudit({ action: 'update', id: null, values: patch, event: evt });
|
|
216
|
+
return jsonResponse({ count });
|
|
217
|
+
}
|
|
194
218
|
if (msg.op === 'delete') {
|
|
195
219
|
if (!source.deleteRow)
|
|
196
220
|
return jsonResponse({ error: 'delete not supported' }, 405);
|
package/dist/upgrade-prompt.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Human-readable labels for the Pro surfaces that gate behind a license. */
|
|
2
|
-
export type EnterpriseFeatureLabel = 'Export' | 'Import' | 'Print' | 'AI assistant' | 'Pivot' | 'Studio';
|
|
2
|
+
export type EnterpriseFeatureLabel = 'Export' | 'Import' | 'Print' | 'AI assistant' | 'Pivot' | 'Server-side row model' | 'Spreadsheet' | 'Studio';
|
|
3
3
|
/**
|
|
4
4
|
* Show the contextual upgrade prompt for `feature`. No-ops if one has already
|
|
5
5
|
* been shown this session, a card is already up, or we're on the server. Safe
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/dist/watermark.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Evaluation UX for unlicensed @svgrid/enterprise use. Shows a small clickable
|
|
2
2
|
// "www.svgrid.com" watermark in the bottom-right corner of every SvGrid on
|
|
3
3
|
// the page, which fades out after 5 seconds, and emits a one-time console
|
|
4
4
|
// nudge. Hard errors (revoked / bad-prefix keys) still throw via license.ts -
|
|
@@ -70,7 +70,32 @@ function attachToAllGrids() {
|
|
|
70
70
|
document
|
|
71
71
|
.querySelectorAll(`[${WATERMARK_ATTR}="fixed"]`)
|
|
72
72
|
.forEach((el) => el.remove());
|
|
73
|
-
|
|
73
|
+
const hosts = new Set();
|
|
74
|
+
grids.forEach((grid) => {
|
|
75
|
+
const host = watermarkHost(grid);
|
|
76
|
+
if (host)
|
|
77
|
+
hosts.add(host);
|
|
78
|
+
});
|
|
79
|
+
hosts.forEach(attachWatermarkTo);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Where the watermark for a matched grid actually hangs.
|
|
83
|
+
*
|
|
84
|
+
* The selector above matches the grid's root container AND the `role="grid"`
|
|
85
|
+
* element inside it, which is the TABLE. A link is not a legal child of a
|
|
86
|
+
* table, and `role="grid"` allows only rows under it, so appending there is
|
|
87
|
+
* invalid HTML and an axe `aria-required-children` violation on every
|
|
88
|
+
* unlicensed grid. So: the grid's own root when the match sits inside one,
|
|
89
|
+
* otherwise the nearest ancestor outside the table's content model.
|
|
90
|
+
*/
|
|
91
|
+
function watermarkHost(grid) {
|
|
92
|
+
const root = grid.closest('.sv-grid-root');
|
|
93
|
+
if (root)
|
|
94
|
+
return root;
|
|
95
|
+
let host = grid;
|
|
96
|
+
while (host && /^(TABLE|THEAD|TBODY|TFOOT|TR|COLGROUP)$/.test(host.tagName))
|
|
97
|
+
host = host.parentElement;
|
|
98
|
+
return host;
|
|
74
99
|
}
|
|
75
100
|
function attachWatermarkTo(grid) {
|
|
76
101
|
// Show the watermark once per grid. The marker survives the fade-out so the
|
|
@@ -118,6 +143,14 @@ function scheduleFadeOut(el) {
|
|
|
118
143
|
return;
|
|
119
144
|
}
|
|
120
145
|
window.setTimeout(() => {
|
|
146
|
+
// Five seconds is a long time in a teardown. The environment can go
|
|
147
|
+
// away between these two timers - a jsdom test finishing, a page
|
|
148
|
+
// unloading - and reaching for `window` then throws where the guard
|
|
149
|
+
// above was put precisely to avoid it. Same check, second chance.
|
|
150
|
+
if (typeof window === 'undefined') {
|
|
151
|
+
el.remove();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
121
154
|
el.style.opacity = '0';
|
|
122
155
|
window.setTimeout(() => el.remove(), FADE_MS);
|
|
123
156
|
}, VISIBLE_MS);
|