@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
package/dist/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export { setLicenseKey, clearLicenseKey, getLicenseKey, isLicenseKeySet, hasValidLicense, assertEnterpriseLicensed, nudgeEnterprise, checkLicenseKey,
|
|
2
2
|
// Trial expiry. The built-in card already appears on its own once a trial
|
|
3
3
|
// lapses; these are for hosts that would rather render their own banner.
|
|
4
|
-
isLicenseExpired, getLicenseExpiry,
|
|
4
|
+
isLicenseExpired, getLicenseExpiry,
|
|
5
|
+
// Editions. `licenseCovers` is the one most apps want: hide a Suite-only
|
|
6
|
+
// entry point rather than let it nudge.
|
|
7
|
+
licenseCovers, getLicenseEdition, nudgeEnterpriseFor, editionCovers, } from './license.js';
|
|
5
8
|
export { parseLicenseExpiry } from './license-core.js';
|
|
6
9
|
export { exportGrid, copyExportToClipboard, } from './export.js';
|
|
7
10
|
export { default as SvExportMenu } from './SvExportMenu.svelte';
|
|
@@ -17,6 +20,12 @@ export { enableSchedulerView, SvGridScheduler } from './scheduler.js';
|
|
|
17
20
|
// Kanban board view (Pro). `enableBoardView()` registers the renderer so
|
|
18
21
|
// `<SvGrid board={...}>` shows lanes of cards. Config types live in @svgrid/grid.
|
|
19
22
|
export { enableBoardView, SvGridBoard } from './board.js';
|
|
23
|
+
// Gantt view (Pro). `enableGanttView()` registers the renderer so
|
|
24
|
+
// `<SvGrid gantt={...}>` shows a task table beside a time chart. The `gantt`
|
|
25
|
+
// prop and its config types live in @svgrid/grid; the layout model, the
|
|
26
|
+
// planning helpers and the renderer are here. Also its own entry point,
|
|
27
|
+
// `@svgrid/enterprise/gantt`.
|
|
28
|
+
export * from './gantt/index.js';
|
|
20
29
|
// Bulk-action bar over the row selection (Pro). `enableSelectionBar()` registers
|
|
21
30
|
// the renderer so `<SvGrid selectionBar={...}>` floats a bar over the grid while
|
|
22
31
|
// rows are selected. The prop + its config types live in @svgrid/grid.
|
|
@@ -30,16 +39,21 @@ export { default as SvGridBulkEditDrawer } from './SvGridBulkEditDrawer.svelte';
|
|
|
30
39
|
export { enablePivot } from './pivot-enable.js';
|
|
31
40
|
export { enableSheet } from './sheet-enable.js';
|
|
32
41
|
export { createTableRegistry, isValidTableName, resolveTableRange, columnIndexOf, rowCountOf, } from './sheet/tables.js';
|
|
42
|
+
export { TABLE_STYLES, DEFAULT_TABLE_STYLE, NO_TABLE_STYLE, findTableStyle, tableStyleColours, tableStyleLabel, } from './sheet/table-styles.js';
|
|
33
43
|
export { goalSeek, goalSeekCell, } from './sheet/goal-seek.js';
|
|
44
|
+
export { evaluationSteps, printNode, printValue, } from './sheet/evaluate-steps.js';
|
|
45
|
+
export { checkSheet, describeFinding, ERROR_MEANINGS, } from './sheet/error-check.js';
|
|
46
|
+
export { imageCall, isDrawableImageSource } from './sheet/cell-images.js';
|
|
47
|
+
export { livePresence, presenceOnSheet, presenceAnchor, presenceColour, presenceInitials, PRESENCE_COLOURS, } from './sheet/presence.js';
|
|
34
48
|
export { default as SvSheetTabs } from './SvSheetTabs.svelte';
|
|
35
|
-
export { createWorkbook, isValidSheetName, } from './sheet/workbook.js';
|
|
49
|
+
export { createWorkbook, isValidSheetName, cleanIteration, DEFAULT_ITERATION, } from './sheet/workbook.js';
|
|
36
50
|
export { setWorkbook, getWorkbook } from './sheet/shortcuts.js';
|
|
37
51
|
export { createSheetDocument, } from './sheet/document.js';
|
|
38
52
|
export { shiftRect, shiftRects, subtractRect, rectContains, rectsIntersect, remapNotes, lineShift } from './sheet/rects.js';
|
|
39
|
-
export { isLocked, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE } from './sheet/protection.js';
|
|
40
|
-
export { commentAt, withComment, listComments, nextComment } from './sheet/comments.js';
|
|
53
|
+
export { isLocked, cellLocked, inEditRange, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE, PROTECTION_PERMISSIONS, defaultProtection, copyProtection, newEditRangeId, parseRangeText, rangeText, } from './sheet/protection.js';
|
|
54
|
+
export { commentAt, withComment, withThread, threadAt, threadOf, threadText, notesOf, isThreaded, listComments, nextComment, } from './sheet/comments.js';
|
|
41
55
|
export { ruleAt, rulesIn, checkEntry, listChoices, shiftValidation, removeValidation, describeRule, dateValue, validationId, DEFAULT_ALERT_MESSAGE, OPERATOR_LABELS, } from './sheet/validation.js';
|
|
42
|
-
export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, } from './sheet/conditional-formats.js';
|
|
56
|
+
export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, DATA_BAR_NEGATIVE_COLOR, } from './sheet/conditional-formats.js';
|
|
43
57
|
export { mergePlan, unmergePlan, mergeDropsValues, mergesIn, mergeAt as sheetMergeAt, isCoveredCell, selectionMerged, toGridMerges, sortBlockedByMerges, reorderMerges, normalRect, } from './sheet/merges.js';
|
|
44
58
|
export { distinctValues, hiddenRowsFor, passesFilter, isFiltering, withColumnFilter, valuesFilter, shiftAutoFilter, describeFilter, } from './sheet/auto-filter.js';
|
|
45
59
|
export { splitText, textToColumns, guessDelimiter, findDuplicates, removeDuplicates, } from './sheet/transforms.js';
|
|
@@ -67,15 +81,34 @@ export { default as SvSheetNameManager } from './SvSheetNameManager.svelte';
|
|
|
67
81
|
export { default as SvSheetGoalSeek } from './SvSheetGoalSeek.svelte';
|
|
68
82
|
export { default as SvSheetTextToColumns } from './SvSheetTextToColumns.svelte';
|
|
69
83
|
export { default as SvSheetRemoveDuplicates } from './SvSheetRemoveDuplicates.svelte';
|
|
84
|
+
export { default as SvSheetSort } from './SvSheetSort.svelte';
|
|
85
|
+
export { sortOrder, guessHeaderRow } from './sheet/sort.js';
|
|
86
|
+
export { documentToXlsxParts, documentFromXlsxParts, documentToXlsx, documentFromXlsx } from './sheet/xlsx-document.js';
|
|
87
|
+
export { csvText, csvRows, guessCsvSeparator, sheetStateFromCsv } from './sheet/csv.js';
|
|
88
|
+
export { sheetStateFromOds, documentFromOds, documentToOds, documentToOdsParts, formulaFromOdf, formulaToOdf } from './sheet/ods-document.js';
|
|
89
|
+
export { sheetStateFromXls, documentFromXls, documentToXls, isXlsFile } from './sheet/xls-document.js';
|
|
90
|
+
export { formulaFromRpn, rpnFromFormula } from './sheet/xls-formula.js';
|
|
91
|
+
export { documentFromFile, readSpreadsheetFile } from './sheet/open-file.js';
|
|
92
|
+
export { defaultPageSetup, copyPageSetup, marginPresetOf, shiftPageSetup, marginsCss, MARGIN_PRESETS, PAPER_SIZES, } from './sheet/page-setup.js';
|
|
93
|
+
export { sheetPrintHtml, printAreas } from './sheet/print.js';
|
|
94
|
+
export { sheetCellsFromRows, cellTextOf } from './sheet/from-rows.js';
|
|
95
|
+
export { builtinEngine } from './sheet/engine.js';
|
|
96
|
+
export { chartSpecOf, chartFromRange, shiftObject, shiftObjects, objectAt, copyObject, objectId, SHEET_CHART_TYPES, } from './sheet/objects.js';
|
|
97
|
+
export { sparklineSeries, sparklineAt, sparklineScale, sparklinesFromRange, clearSparklines, shiftSparkline, shiftSparklines, copySparkline, sparklineId, isColumnLocation, SPARKLINE_TYPES, } from './sheet/sparklines.js';
|
|
98
|
+
export { pivotFields, pivotFieldValues, pivotRecords, filteredRecords, pivotBlock, pivotLayout, pivotDrill, pivotFromRange, pivotWrittenRect, flattenPivotColumns, ALL_VALUES, shiftPivot, shiftPivots, copyPivot, pivotId, SHEET_PIVOT_AGGS, } from './sheet/pivot-range.js';
|
|
99
|
+
export { createDeltaStream, applySheetDelta, partsOfReasons, } from './sheet/delta.js';
|
|
100
|
+
export { linkAt, setLink, removeLink, listLinks, shiftLinks, copyLinks, parseLinkTarget, isSafeLinkTarget, linkTitle, } from './sheet/links.js';
|
|
70
101
|
export { functionCatalog, FUNCTION_GROUPS } from './sheet/function-catalog.js';
|
|
71
102
|
export { parseEntry, completeEntry } from './sheet/entry.js';
|
|
72
103
|
export { cycleReference } from './sheet/edit-keys.js';
|
|
73
104
|
export { RIBBON_TABS, ribbonItems, withDecimals, applyBorders, } from './sheet/ribbon.js';
|
|
74
105
|
export { RIBBON_ICONS, RIBBON_ICON_NAMES } from './sheet/ribbon-icons.js';
|
|
75
106
|
export { THEME_COLOURS, STANDARD_COLOURS, ALL_COLOURS, tint } from './sheet/palette.js';
|
|
107
|
+
export { defaultSheetMessages, defaultSheetTextMessages, defaultDialogMessages, ribbonMessageDefaults, resolveSheetMessages, formatMessage, } from './sheet/messages.js';
|
|
108
|
+
export { provideSheetText, useSheetText } from './sheet-text.js';
|
|
76
109
|
export { default as SvRibbonIcon } from './SvRibbonIcon.svelte';
|
|
77
110
|
export { move, selectRegion, selectLine, applyFormat, toggleFormat, preset, autoSum, structural, switchSheet, gridOf, } from './sheet/shortcuts.js';
|
|
78
|
-
export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, } from './sheet/number-format.js';
|
|
111
|
+
export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, FORMAT_CATEGORY_PATTERNS, SPECIAL_FORMATS, formatCategory, accountingPattern, accountingParts, } from './sheet/number-format.js';
|
|
79
112
|
export { createFormatStore, entryToStyle, borderShadows, } from './sheet/format-store.js';
|
|
80
113
|
export { createNames, isValidName, } from './sheet/names.js';
|
|
81
114
|
export { suggestFunctions, applySuggestion, signatureAt, partialAt, SIGNATURES, } from './sheet/autocomplete.js';
|
|
@@ -87,6 +120,7 @@ export { setFormatTarget, getFormatTarget, setFormatDialogHandler, } from './she
|
|
|
87
120
|
export { parseFormula, parse as parseFormulaTokens } from './sheet/parse.js';
|
|
88
121
|
export { tokenize as tokenizeFormula } from './sheet/tokenize.js';
|
|
89
122
|
export { evaluate as evaluateFormula, formatValue as formatCellValue, } from './sheet/evaluate.js';
|
|
123
|
+
export { ARRAY_FUNCTIONS } from './sheet/packs/array.js';
|
|
90
124
|
export { FUNCTIONS as SHEET_FUNCTIONS, withCustomFunctions, } from './sheet/functions.js';
|
|
91
125
|
export { translateFormula, fixupReferences, renameSheetReferences, formatFormula, referenceSpans, REFERENCE_COLOURS, } from './sheet/refs.js';
|
|
92
126
|
export { createDependencyGraph as createSheetDependencyGraph, precedentsOf, cellKey, parseCellKey, } from './sheet/deps.js';
|
|
@@ -114,7 +148,10 @@ export { dismissUnlicensedNudge } from './watermark.js';
|
|
|
114
148
|
export { showUpgradePrompt, dismissUpgradePrompt, } from './upgrade-prompt.js';
|
|
115
149
|
export { createPivotModel, pivotAggregators, filterCollapsedPivotRows, } from './pivot.js';
|
|
116
150
|
export { titleCase, resolveIdField, schemaToColumns, schemaToFormFields, isFieldHidden, validateField, applyComputed, validateEntity, } from './schema.js';
|
|
117
|
-
export { planQuery, coerce, createInMemoryDataSource, createKitDataSource, createKitHandlers, createSqlDataSource, planToSql, } from './sveltekit/index.js';
|
|
151
|
+
export { planQuery, coerce, createInMemoryDataSource, createKitDataSource, createKitHandlers, createSqlDataSource, planToSql, BUILTIN_AGGREGATORS, } from './sveltekit/index.js';
|
|
152
|
+
// Server-Side Row Model: lazy server-side grouping and tree data over the
|
|
153
|
+
// free grid's datasource contract. Also available as '@svgrid/enterprise/server'.
|
|
154
|
+
export { createServerRowModel, serverRowModelRows, serverRowModelNav, serverGroupText, defaultServerGroupMessages, resolveServerGroupMessages, GRAND_TOTAL_ROW_ID, GROUP_TOTAL_ROW_ID_PREFIX, createServerSelectionModel, buildPivotResultColumns, adaptCallbackDatasource, toCallbackDatasource, fromCallbackRequest, toCallbackRequest, fromCallbackFilterModel, toCallbackFilterModel, fromCallbackSelectionState, toCallbackSelectionState, isCallbackSelectionState, createServerGroupModel, serverGroupRows, serverGroupNav, enableServerRowModel, SvGroupCell, SvRowGroupPanel, } from './server/index.js';
|
|
118
155
|
export { createSupabaseDataSource, createRestDataSource, offsetLimitAdapter, dummyJsonAdapter, jsonServerAdapter, introspectSupabaseTable, listSupabaseTables, createSupabaseRealtime, createRelationLookup, createSupabaseAuth, aggregateRows, chartFieldsFromSchema, normalizeFilters, buildEntitySchema, pickLabelField, linkRelationLabels, withEntityRules, withRelationLabels, reduceValue, kpiSeries, sparklinePoints, seriesDelta, formatKpiValue, dashboardFromSchema, } from './sources/index.js';
|
|
119
156
|
export { buildInitialValues, controlKind, editMode, evalValidationRules, fieldState, sectionVisible, hasFieldConditions, rowId, stripHiddenValues, toSubmitValues, validateAll, visibleFormFields, } from './edit-panel.js';
|
|
120
157
|
export { default as SvGridEditPanel } from './SvGridEditPanel.svelte';
|
package/dist/install.js
CHANGED
|
@@ -9,10 +9,12 @@ import { aiFilter, aiSmartFill, aiSummarize, aiClassify, aiExport, aiFindAnomali
|
|
|
9
9
|
import { createPivotModel, } from './pivot.js';
|
|
10
10
|
import { enableSchedulerView } from './scheduler.js';
|
|
11
11
|
import { enableBoardView } from './board.js';
|
|
12
|
+
import { enableGanttView } from './gantt/gantt.js';
|
|
12
13
|
import { enableSelectionBar } from './selection-bar.js';
|
|
13
14
|
import { enableAdvancedFilter } from './advanced-filter-enable.js';
|
|
14
15
|
import { enablePivot } from './pivot-enable.js';
|
|
15
16
|
import { enableSheet } from './sheet-enable.js';
|
|
17
|
+
import { enableServerRowModel } from './server/enable.js';
|
|
16
18
|
/**
|
|
17
19
|
* Augment a SvGridApi instance with Pro methods (`exportData`, `print`,
|
|
18
20
|
* `ai.*`). Mutates and returns the same object so existing references
|
|
@@ -44,6 +46,8 @@ export function installEnterprise(api) {
|
|
|
44
46
|
enableSchedulerView();
|
|
45
47
|
// Register the Kanban board view (no-op without the `board` prop).
|
|
46
48
|
enableBoardView();
|
|
49
|
+
// Register the Gantt view (no-op without the `gantt` prop).
|
|
50
|
+
enableGanttView();
|
|
47
51
|
enableSelectionBar();
|
|
48
52
|
// Register the export engine so built-in AI exports (aiExport) can write the
|
|
49
53
|
// enterprise formats (xlsx / pdf / ...); free grids without it get the plan only.
|
|
@@ -54,6 +58,9 @@ export function installEnterprise(api) {
|
|
|
54
58
|
// grid interprets a key itself only when nothing claims it, so a free grid
|
|
55
59
|
// is unaffected.
|
|
56
60
|
enableSheet();
|
|
61
|
+
// Raise the unlicensed nudge for the server-side row model. No registry to fill -
|
|
62
|
+
// the model hands the grid ordinary rows - so this only nudges when unlicensed.
|
|
63
|
+
enableServerRowModel();
|
|
57
64
|
pro.pivot = {
|
|
58
65
|
build: (config) => createPivotModel(pro.getData(), config),
|
|
59
66
|
buildFrom: (data, config) =>
|
|
@@ -62,7 +69,7 @@ export function installEnterprise(api) {
|
|
|
62
69
|
// the caller-side generic enforces.
|
|
63
70
|
createPivotModel(data, config),
|
|
64
71
|
};
|
|
65
|
-
// Surface the
|
|
72
|
+
// Surface the unlicensed state at install time so the watermark appears
|
|
66
73
|
// alongside the grid, not just after the user clicks Export.
|
|
67
74
|
if (!isLicenseKeySet())
|
|
68
75
|
emitUnlicensedNudge();
|
package/dist/license-core.d.ts
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
export declare const VALID_PREFIX = "SVENTERPRISE-";
|
|
2
|
+
/**
|
|
3
|
+
* What an order bought. `grid` is the enterprise grid on its own; `suite` adds
|
|
4
|
+
* the spreadsheet and the Studio. Keys issued before editions existed carry no
|
|
5
|
+
* edition segment and read as `suite`, so nothing an existing customer already
|
|
6
|
+
* ships changes when this lands.
|
|
7
|
+
*/
|
|
8
|
+
export type LicenseEdition = 'grid' | 'suite';
|
|
9
|
+
/** The three things an edition can gate. */
|
|
10
|
+
export type LicensedProduct = 'grid' | 'spreadsheet' | 'studio';
|
|
11
|
+
/** Does `edition` cover `product`? Pure, and the only place the answer lives. */
|
|
12
|
+
export declare function editionCovers(edition: LicenseEdition, product: LicensedProduct): boolean;
|
|
2
13
|
export type LicenseStatus = 'unset' | 'invalid' | 'revoked' | 'dev' | 'eval' | 'licensed';
|
|
3
14
|
export type LicenseInfo = {
|
|
4
15
|
status: LicenseStatus;
|
|
5
16
|
/** True when the key permits use (dev / eval / licensed). */
|
|
6
17
|
valid: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* What the key covers. Always `suite` for dev and eval keys, so a trial sees
|
|
20
|
+
* everything, and for any key that names no edition.
|
|
21
|
+
*/
|
|
22
|
+
edition: LicenseEdition;
|
|
7
23
|
/** Expiry encoded in the key, when it carries one. Undefined otherwise. */
|
|
8
24
|
expiresAt?: Date;
|
|
9
25
|
/**
|
|
10
26
|
* True once `expiresAt` has passed. Deliberately does NOT clear `valid`:
|
|
11
27
|
* an expired trial keeps working and the callers nudge instead. Turning a
|
|
12
28
|
* lapsed key into a hard stop would break a running app on a date boundary,
|
|
13
|
-
* which is exactly what
|
|
29
|
+
* which is exactly what the evaluation model exists to avoid.
|
|
14
30
|
*/
|
|
15
31
|
expired?: boolean;
|
|
16
32
|
};
|
package/dist/license-core.js
CHANGED
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
// "what a valid key is," so the two contexts can never drift.
|
|
5
5
|
//
|
|
6
6
|
// This is deliberately NOT crypto (see license.ts). It classifies a key string;
|
|
7
|
-
// callers decide what to do with the result. The Studio
|
|
7
|
+
// callers decide what to do with the result. The Studio never blocks:
|
|
8
8
|
// unlicensed use still works, it just nudges.
|
|
9
9
|
import { REVOKED_KEYS } from './revoked.js';
|
|
10
10
|
export const VALID_PREFIX = 'SVENTERPRISE-';
|
|
11
|
+
/** Does `edition` cover `product`? Pure, and the only place the answer lives. */
|
|
12
|
+
export function editionCovers(edition, product) {
|
|
13
|
+
return edition === 'suite' || product === 'grid';
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* Pull the expiry out of a key.
|
|
13
17
|
*
|
|
@@ -62,12 +66,15 @@ export function parseLicenseExpiry(key) {
|
|
|
62
66
|
/** Classify a license key string. Pure and side-effect-free.
|
|
63
67
|
* `now` is injectable so expiry behaviour is testable without faking clocks. */
|
|
64
68
|
export function checkLicenseKey(key, now = new Date()) {
|
|
69
|
+
// An unusable key reports `suite` rather than a narrower edition on purpose:
|
|
70
|
+
// callers branch on `valid` first, and an edition on a rejected key would
|
|
71
|
+
// read as though something had been granted.
|
|
65
72
|
if (key == null || key === '')
|
|
66
|
-
return { status: 'unset', valid: false };
|
|
73
|
+
return { status: 'unset', valid: false, edition: 'suite' };
|
|
67
74
|
if (!key.startsWith(VALID_PREFIX))
|
|
68
|
-
return { status: 'invalid', valid: false };
|
|
75
|
+
return { status: 'invalid', valid: false, edition: 'suite' };
|
|
69
76
|
if (REVOKED_KEYS.has(key))
|
|
70
|
-
return { status: 'revoked', valid: false };
|
|
77
|
+
return { status: 'revoked', valid: false, edition: 'suite' };
|
|
71
78
|
const expiresAt = parseLicenseExpiry(key) ?? undefined;
|
|
72
79
|
// Left undefined rather than false when the key encodes no date, so callers
|
|
73
80
|
// can tell "not expired" apart from "no expiry to check".
|
|
@@ -77,5 +84,9 @@ export function checkLicenseKey(key, now = new Date()) {
|
|
|
77
84
|
: key.startsWith('SVENTERPRISE-EVAL')
|
|
78
85
|
? 'eval'
|
|
79
86
|
: 'licensed';
|
|
80
|
-
|
|
87
|
+
// Only a paid key can be narrowed: a trial evaluates the whole product, and
|
|
88
|
+
// `SVENTERPRISE-GRID` is an edition marker rather than a kind, so it lands in
|
|
89
|
+
// the same segment DEV and EVAL use.
|
|
90
|
+
const edition = status === 'licensed' && key.startsWith(`${VALID_PREFIX}GRID-`) ? 'grid' : 'suite';
|
|
91
|
+
return { status, valid: true, edition, expiresAt, expired };
|
|
81
92
|
}
|
package/dist/license.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type LicenseInfo, type LicensedProduct } from './license-core.js';
|
|
1
2
|
import { type EnterpriseFeatureLabel } from './upgrade-prompt.js';
|
|
2
|
-
export { checkLicenseKey, type LicenseInfo, type LicenseStatus } from './license-core.js';
|
|
3
|
+
export { checkLicenseKey, editionCovers, type LicenseInfo, type LicenseStatus, type LicenseEdition, type LicensedProduct, } from './license-core.js';
|
|
3
4
|
export { dismissUnlicensedNudge } from './watermark.js';
|
|
4
5
|
export declare function setLicenseKey(key: string): void;
|
|
5
6
|
export declare function clearLicenseKey(): void;
|
|
@@ -21,11 +22,26 @@ export declare function isLicenseExpired(): boolean;
|
|
|
21
22
|
/** When the current key lapses, or null if it encodes no expiry. */
|
|
22
23
|
export declare function getLicenseExpiry(): Date | null;
|
|
23
24
|
/**
|
|
24
|
-
*
|
|
25
|
+
* Gate a Pro surface: if the current key isn't valid, nudge (watermark +
|
|
25
26
|
* one-time console log + a moment-of-intent upgrade card naming `feature`) and
|
|
26
27
|
* return. NEVER throws and NEVER blocks - the feature always runs. This is the
|
|
27
28
|
* gate the Studio uses, and it's safe to call on the server (the nudges no-op
|
|
28
29
|
* without a DOM). Idempotent/self-throttling, so call it freely at chokepoints.
|
|
29
30
|
*/
|
|
30
31
|
export declare function nudgeEnterprise(feature?: EnterpriseFeatureLabel): void;
|
|
32
|
+
/**
|
|
33
|
+
* True when the current key covers `product`. Use it to hide a Suite-only entry
|
|
34
|
+
* point in your own UI instead of letting it nudge. An unlicensed app returns
|
|
35
|
+
* false for everything, which keeps "no key" and "wrong edition" on the same
|
|
36
|
+
* side of the branch for UI purposes.
|
|
37
|
+
*/
|
|
38
|
+
export declare function licenseCovers(product: LicensedProduct): boolean;
|
|
39
|
+
/** The edition the current key names, or null when no usable key is set. */
|
|
40
|
+
export declare function getLicenseEdition(): LicenseInfo['edition'] | null;
|
|
41
|
+
/**
|
|
42
|
+
* Gate a surface that an edition can exclude. Same contract as
|
|
43
|
+
* {@link nudgeEnterprise} - never throws, never blocks, safe on the server -
|
|
44
|
+
* but it also nudges a valid key that simply does not reach this product.
|
|
45
|
+
*/
|
|
46
|
+
export declare function nudgeEnterpriseFor(product: LicensedProduct, feature?: EnterpriseFeatureLabel): void;
|
|
31
47
|
export declare function assertEnterpriseLicensed(feature?: EnterpriseFeatureLabel): void;
|
package/dist/license.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// currentKey state -> result
|
|
8
8
|
// ────────────────────────────────────────────────────────────────────
|
|
9
|
-
// null (no key set) ->
|
|
9
|
+
// null (no key set) -> evaluation: watermark + console.log,
|
|
10
10
|
// feature still runs
|
|
11
11
|
// does not start with "SVENTERPRISE-" -> throws (programmer error)
|
|
12
12
|
// in REVOKED_KEYS -> throws (revoked / leaked / expired)
|
|
@@ -15,13 +15,18 @@
|
|
|
15
15
|
// an EXPIRED dev/eval key -> still works, but stops looking
|
|
16
16
|
// licensed: watermark + a one-time
|
|
17
17
|
// console notice naming the expiry date
|
|
18
|
-
// + the upgrade card.
|
|
18
|
+
// + the upgrade card. Never blocks,
|
|
19
19
|
// so a trial ending cannot break a build.
|
|
20
20
|
// any other "SVENTERPRISE-..." -> works silently (paid production)
|
|
21
|
-
|
|
21
|
+
//
|
|
22
|
+
// Editions cut across that matrix. A paid key names GRID or SUITE (and a key
|
|
23
|
+
// issued before editions existed reads as SUITE). `nudgeEnterpriseFor` is the
|
|
24
|
+
// gate for a surface a GRID key does not reach: same never-blocks contract, with
|
|
25
|
+
// its own console notice saying which edition covers it.
|
|
26
|
+
import { checkLicenseKey, editionCovers, VALID_PREFIX, } from './license-core.js';
|
|
22
27
|
import { emitUnlicensedNudge } from './watermark.js';
|
|
23
28
|
import { showUpgradePrompt } from './upgrade-prompt.js';
|
|
24
|
-
export { checkLicenseKey } from './license-core.js';
|
|
29
|
+
export { checkLicenseKey, editionCovers, } from './license-core.js';
|
|
25
30
|
// The nudge the key silences, on the same subpath as the key: an app that only
|
|
26
31
|
// wants to set its licence imports `@svgrid/enterprise/license` and never
|
|
27
32
|
// pulls the component barrel (the package has no `sideEffects` flag, so a
|
|
@@ -30,6 +35,9 @@ export { dismissUnlicensedNudge } from './watermark.js';
|
|
|
30
35
|
let currentKey = null;
|
|
31
36
|
let noticedDev = false;
|
|
32
37
|
let noticedExpired = false;
|
|
38
|
+
/** One notice per product, not per call site: reaching four Studio seams on a
|
|
39
|
+
* Grid key is one licensing fact, not four. */
|
|
40
|
+
const noticedEdition = new Set();
|
|
33
41
|
/** One-time console notice for a trial that has run out. Separate from the
|
|
34
42
|
* dev/eval notice: that one says "not for production", this one says the
|
|
35
43
|
* evaluation is over and names the date, which is the actionable part. */
|
|
@@ -50,11 +58,13 @@ export function setLicenseKey(key) {
|
|
|
50
58
|
currentKey = key;
|
|
51
59
|
noticedDev = false;
|
|
52
60
|
noticedExpired = false;
|
|
61
|
+
noticedEdition.clear();
|
|
53
62
|
}
|
|
54
63
|
export function clearLicenseKey() {
|
|
55
64
|
currentKey = null;
|
|
56
65
|
noticedDev = false;
|
|
57
66
|
noticedExpired = false;
|
|
67
|
+
noticedEdition.clear();
|
|
58
68
|
}
|
|
59
69
|
export function getLicenseKey() {
|
|
60
70
|
return currentKey;
|
|
@@ -84,7 +94,7 @@ export function getLicenseExpiry() {
|
|
|
84
94
|
return checkLicenseKey(currentKey).expiresAt ?? null;
|
|
85
95
|
}
|
|
86
96
|
/**
|
|
87
|
-
*
|
|
97
|
+
* Gate a Pro surface: if the current key isn't valid, nudge (watermark +
|
|
88
98
|
* one-time console log + a moment-of-intent upgrade card naming `feature`) and
|
|
89
99
|
* return. NEVER throws and NEVER blocks - the feature always runs. This is the
|
|
90
100
|
* gate the Studio uses, and it's safe to call on the server (the nudges no-op
|
|
@@ -105,11 +115,66 @@ export function nudgeEnterprise(feature) {
|
|
|
105
115
|
noticeExpired(info);
|
|
106
116
|
showUpgradePrompt(feature, { expired: lapsedTrial });
|
|
107
117
|
}
|
|
118
|
+
/** Human name for a product, for the console notice. */
|
|
119
|
+
const PRODUCT_LABEL = {
|
|
120
|
+
grid: 'the enterprise grid',
|
|
121
|
+
spreadsheet: 'the spreadsheet',
|
|
122
|
+
studio: 'the Studio',
|
|
123
|
+
};
|
|
124
|
+
/** One-time console notice for a feature the current edition does not cover.
|
|
125
|
+
* Distinct from the unlicensed nudge: the key is real and paid, it just does
|
|
126
|
+
* not reach this far, so the actionable part is which edition to move to. */
|
|
127
|
+
function noticeEdition(product) {
|
|
128
|
+
if (noticedEdition.has(product))
|
|
129
|
+
return;
|
|
130
|
+
noticedEdition.add(product);
|
|
131
|
+
// eslint-disable-next-line no-console
|
|
132
|
+
console.info(`@svgrid/enterprise: your Grid license does not cover ${PRODUCT_LABEL[product]}. ` +
|
|
133
|
+
'Everything still works, but the watermark and upgrade notice stay until the ' +
|
|
134
|
+
'license is upgraded to Suite. Contact sales@jqwidgets.com or see ' +
|
|
135
|
+
'https://svgrid.com/pricing');
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* True when the current key covers `product`. Use it to hide a Suite-only entry
|
|
139
|
+
* point in your own UI instead of letting it nudge. An unlicensed app returns
|
|
140
|
+
* false for everything, which keeps "no key" and "wrong edition" on the same
|
|
141
|
+
* side of the branch for UI purposes.
|
|
142
|
+
*/
|
|
143
|
+
export function licenseCovers(product) {
|
|
144
|
+
const info = checkLicenseKey(currentKey);
|
|
145
|
+
return info.valid && editionCovers(info.edition, product);
|
|
146
|
+
}
|
|
147
|
+
/** The edition the current key names, or null when no usable key is set. */
|
|
148
|
+
export function getLicenseEdition() {
|
|
149
|
+
const info = checkLicenseKey(currentKey);
|
|
150
|
+
return info.valid ? info.edition : null;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Gate a surface that an edition can exclude. Same contract as
|
|
154
|
+
* {@link nudgeEnterprise} - never throws, never blocks, safe on the server -
|
|
155
|
+
* but it also nudges a valid key that simply does not reach this product.
|
|
156
|
+
*/
|
|
157
|
+
export function nudgeEnterpriseFor(product, feature) {
|
|
158
|
+
const info = checkLicenseKey(currentKey);
|
|
159
|
+
const covered = info.valid && editionCovers(info.edition, product);
|
|
160
|
+
if (covered && !info.expired)
|
|
161
|
+
return;
|
|
162
|
+
// A key that is valid, unexpired and merely out of edition is a different
|
|
163
|
+
// message from an unlicensed or lapsed one, so it gets its own notice. The
|
|
164
|
+
// watermark and the card are the same either way.
|
|
165
|
+
const outOfEdition = info.valid && info.expired !== true && !covered;
|
|
166
|
+
emitUnlicensedNudge();
|
|
167
|
+
if (outOfEdition)
|
|
168
|
+
noticeEdition(product);
|
|
169
|
+
else if (info.valid && info.expired === true)
|
|
170
|
+
noticeExpired(info);
|
|
171
|
+
showUpgradePrompt(feature, { expired: info.valid && info.expired === true });
|
|
172
|
+
}
|
|
108
173
|
export function assertEnterpriseLicensed(feature) {
|
|
109
174
|
const info = checkLicenseKey(currentKey);
|
|
110
175
|
switch (info.status) {
|
|
111
176
|
case 'unset':
|
|
112
|
-
//
|
|
177
|
+
// Evaluation: the feature still runs, but the user gets a watermark +
|
|
113
178
|
// a one-time console.log nudge directing them to pricing, plus a
|
|
114
179
|
// contextual moment-of-intent upgrade card naming the feature they
|
|
115
180
|
// just reached for.
|