@svgrid/grid 3.0.0 → 3.0.2
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/CHANGELOG.md +116 -88
- package/README.md +199 -199
- package/dist/FlexRender.svelte +96 -96
- package/dist/GridFooter.svelte +190 -181
- package/dist/GridFooter.svelte.d.ts +8 -0
- package/dist/GridMenus.svelte +18 -10
- package/dist/GridMenus.svelte.d.ts +2 -1
- package/dist/SvAutoComplete.svelte +169 -169
- package/dist/SvAvatar.svelte +75 -75
- package/dist/SvCalendar.svelte +503 -503
- package/dist/SvCarousel.svelte +141 -141
- package/dist/SvCheckBox.svelte +102 -102
- package/dist/SvCircularProgress.svelte +109 -109
- package/dist/SvColorInput.svelte +181 -181
- package/dist/SvComboBox.svelte +279 -279
- package/dist/SvContextMenu.svelte +116 -116
- package/dist/SvCountryInput.svelte +163 -163
- package/dist/SvDrawer.svelte +254 -254
- package/dist/SvDropDownList.svelte +378 -378
- package/dist/SvDurationInput.svelte +126 -126
- package/dist/SvField.svelte +293 -293
- package/dist/SvForm.svelte +437 -437
- package/dist/SvGrid.controller.svelte.d.ts +17 -0
- package/dist/SvGrid.controller.svelte.js +128 -14
- package/dist/SvGrid.css +79 -10
- package/dist/SvGrid.svelte +191 -186
- package/dist/SvGrid.types.d.ts +42 -1
- package/dist/SvGridCellEditor.svelte +748 -744
- package/dist/SvGridChart.svelte +2246 -1716
- package/dist/SvGridChart.svelte.d.ts +63 -1
- package/dist/SvGridChartPanel.svelte +633 -485
- package/dist/SvGridChartView.svelte +79 -70
- package/dist/SvGridChartView.svelte.d.ts +7 -0
- package/dist/SvGridDropdown.svelte +728 -728
- package/dist/SvGridSelect.svelte +270 -270
- package/dist/SvGroupCell.svelte +141 -116
- package/dist/SvGroupCell.svelte.d.ts +8 -0
- package/dist/SvListBox.svelte +334 -334
- package/dist/SvMaskedInput.svelte +122 -122
- package/dist/SvMenu.svelte +124 -124
- package/dist/SvMenuList.svelte +146 -146
- package/dist/SvMultiSelect.svelte +293 -293
- package/dist/SvNumberInput.svelte +172 -172
- package/dist/SvOtpInput.svelte +158 -158
- package/dist/SvPasswordInput.svelte +151 -151
- package/dist/SvPhoneInput.svelte +133 -133
- package/dist/SvPopover.svelte +197 -197
- package/dist/SvProgress.svelte +116 -116
- package/dist/SvRadioGroup.svelte +107 -107
- package/dist/SvRating.svelte +112 -112
- package/dist/SvResult.svelte +73 -73
- package/dist/SvRichText.svelte +211 -211
- package/dist/SvRowGroupPanel.svelte +186 -170
- package/dist/SvRowGroupPanel.svelte.d.ts +8 -0
- package/dist/SvScrollArea.svelte +61 -61
- package/dist/SvSlider.svelte +203 -203
- package/dist/SvSwitchButton.svelte +108 -108
- package/dist/SvTagsInput.svelte +115 -115
- package/dist/SvTextInput.svelte +147 -147
- package/dist/SvTimePicker.svelte +245 -245
- package/dist/SvToaster.svelte +159 -159
- package/dist/SvToggleButton.svelte +85 -85
- package/dist/SvTooltip.svelte +161 -161
- package/dist/SvTour.svelte +208 -208
- package/dist/SvTree.svelte +444 -444
- package/dist/SvTreeSelect.svelte +239 -239
- package/dist/ai.d.ts +11 -2
- package/dist/ai.js +51 -7
- package/dist/cdn/GridMenus-DyFA-QxA.js +602 -0
- package/dist/cdn/GridMenus-M2XP9t0_.js +603 -0
- package/dist/cdn/{SvDateRangeInput-DflbiP7N.js → SvDateRangeInput-CaOuMs8O.js} +1 -1
- package/dist/cdn/{SvDateRangeInput-Bh0A0JkF.js → SvDateRangeInput-DMLKmGEc.js} +1 -1
- package/dist/cdn/{SvDateTimePicker-Bivn8dAP.js → SvDateTimePicker-CCbDZNZB.js} +1 -1
- package/dist/cdn/{SvDateTimePicker-BWwpfB_o.js → SvDateTimePicker-sonaH0oh.js} +1 -1
- package/dist/cdn/{SvGridCellEditor-Ba7rY3eu.js → SvGridCellEditor-BWnTi2N7.js} +2 -2
- package/dist/cdn/{SvGridCellEditor-AXL8cHGO.js → SvGridCellEditor-CjEJMJKc.js} +2 -2
- package/dist/cdn/SvGridChart-DAb9RbRs.js +1480 -0
- package/dist/cdn/SvGridChart-Yl-IXZFO.js +1481 -0
- package/dist/cdn/SvGridChartPanel-DayQpDsR.js +834 -0
- package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +810 -0
- package/dist/cdn/{SvGridChartView-eSPuJE6g.js → SvGridChartView-CxfakxR0.js} +5 -3
- package/dist/cdn/{SvGridChartView-SmPW10dI.js → SvGridChartView-Dm_YEx9L.js} +5 -3
- package/dist/cdn/{SvGridDropdown-B1ZcLpgs.js → SvGridDropdown-D0VdjeR8.js} +1 -1
- package/dist/cdn/{SvGridDropdown-CtdbHcIS.js → SvGridDropdown-D13MtJ2j.js} +1 -1
- package/dist/cdn/cell-formatting-C2Hf5gqd.js +86 -0
- package/dist/cdn/chart-CKJRCPOk.js +1652 -0
- package/dist/cdn/{date-format-DZT7T1wf.js → date-format-BNii4zeD.js} +2 -2
- package/dist/cdn/{date-format-CcP1tafP.js → date-format-BnnHlqGw.js} +2 -2
- package/dist/cdn/{export-format-Cv1Dll6k.js → export-format-CUDLy2yn.js} +84 -168
- package/dist/cdn/{src-B_YS5AOc.js → src-BJ2opd0j.js} +3642 -3450
- package/dist/cdn/{src-DYXXpuSk.js → src-DNbz94Ct.js} +8649 -8457
- package/dist/cdn/svgrid.js +16 -15
- package/dist/cdn/svgrid.svelte-external.js +16 -15
- package/dist/cell-formatting.d.ts +7 -0
- package/dist/cell-formatting.js +7 -1
- package/dist/chart-export.d.ts +23 -2
- package/dist/chart-export.js +88 -14
- package/dist/chart.d.ts +410 -18
- package/dist/chart.js +824 -24
- package/dist/editing.js +22 -13
- package/dist/grid-icons.d.ts +49 -0
- package/dist/grid-icons.js +86 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/package.json +1 -1
- package/src/FlexRender.svelte +96 -96
- package/src/GridFooter.svelte +190 -181
- package/src/GridMenus.svelte +18 -10
- package/src/SvAutoComplete.svelte +169 -169
- package/src/SvAvatar.svelte +75 -75
- package/src/SvCalendar.svelte +503 -503
- package/src/SvCalendar.test.ts +226 -226
- package/src/SvCarousel.svelte +141 -141
- package/src/SvCheckBox.svelte +102 -102
- package/src/SvCircularProgress.svelte +109 -109
- package/src/SvColorInput.svelte +181 -181
- package/src/SvComboBox.svelte +279 -279
- package/src/SvContextMenu.svelte +116 -116
- package/src/SvCountryInput.svelte +163 -163
- package/src/SvDrawer.svelte +254 -254
- package/src/SvDropDownList.svelte +378 -378
- package/src/SvDurationInput.svelte +126 -126
- package/src/SvField.svelte +293 -293
- package/src/SvForm.svelte +437 -437
- package/src/SvForm.test.ts +411 -411
- package/src/SvGrid.controller.svelte.ts +146 -13
- package/src/SvGrid.css +79 -10
- package/src/SvGrid.svelte +191 -186
- package/src/SvGrid.types.ts +2133 -2092
- package/src/SvGridCellEditor.svelte +748 -744
- package/src/SvGridChart.svelte +2246 -1716
- package/src/SvGridChart.test.ts +243 -1
- package/src/SvGridChartPanel.svelte +633 -485
- package/src/SvGridChartView.svelte +79 -70
- package/src/SvGridDropdown.svelte +728 -728
- package/src/SvGridSelect.svelte +270 -270
- package/src/SvGroupCell.svelte +141 -116
- package/src/SvListBox.svelte +334 -334
- package/src/SvMaskedInput.svelte +122 -122
- package/src/SvMenu.svelte +124 -124
- package/src/SvMenu.test.ts +97 -97
- package/src/SvMenuList.svelte +146 -146
- package/src/SvMultiSelect.svelte +293 -293
- package/src/SvNumberInput.svelte +172 -172
- package/src/SvOtpInput.svelte +158 -158
- package/src/SvPasswordInput.svelte +151 -151
- package/src/SvPhoneInput.svelte +133 -133
- package/src/SvPopover.svelte +197 -197
- package/src/SvProgress.svelte +116 -116
- package/src/SvRadioGroup.svelte +107 -107
- package/src/SvRating.svelte +112 -112
- package/src/SvResult.svelte +73 -73
- package/src/SvRichText.svelte +211 -211
- package/src/SvRowGroupPanel.svelte +186 -170
- package/src/SvScrollArea.svelte +61 -61
- package/src/SvSlider.svelte +203 -203
- package/src/SvSwitchButton.svelte +108 -108
- package/src/SvTagsInput.svelte +115 -115
- package/src/SvTextInput.svelte +147 -147
- package/src/SvTimePicker.svelte +245 -245
- package/src/SvToaster.svelte +159 -159
- package/src/SvToaster.test.ts +95 -95
- package/src/SvToggleButton.svelte +85 -85
- package/src/SvTooltip.svelte +161 -161
- package/src/SvTour.svelte +208 -208
- package/src/SvTree.svelte +444 -444
- package/src/SvTreeSelect.svelte +239 -239
- package/src/a11y/dismissable.test.ts +119 -119
- package/src/a11y/dismissable.ts +114 -114
- package/src/a11y.contract.test.ts +49 -49
- package/src/a11y.test.ts +59 -59
- package/src/a11y.ts +61 -61
- package/src/ai.test.ts +561 -502
- package/src/ai.ts +1472 -1419
- package/src/build-api.coverage.test.ts +633 -633
- package/src/build-api.ts +846 -846
- package/src/builtin-editors.grid.test.ts +83 -83
- package/src/cell-formatting.ts +177 -171
- package/src/cell-render.test.ts +513 -513
- package/src/cell-render.ts +496 -496
- package/src/cell-values.ts +148 -148
- package/src/chart-export.test.ts +112 -0
- package/src/chart-export.ts +270 -202
- package/src/chart-view.svelte.ts +36 -36
- package/src/chart.test.ts +830 -1
- package/src/chart.ts +3342 -2321
- package/src/collaboration.test.ts +104 -104
- package/src/collaboration.ts +167 -167
- package/src/column-groups.ts +78 -78
- package/src/core.performance.test.ts +30 -30
- package/src/core.ts +1865 -1865
- package/src/createAutocomplete.svelte.ts +132 -132
- package/src/createCombobox.svelte.ts +191 -191
- package/src/createCountryInput.svelte.ts +157 -157
- package/src/createDropdownList.svelte.ts +168 -168
- package/src/createForm.svelte.ts +386 -386
- package/src/createGrid.svelte.ts +42 -42
- package/src/createGrid.test.ts +10 -10
- package/src/createGridState.svelte.ts +17 -17
- package/src/createListbox.svelte.ts +250 -250
- package/src/createMenu.svelte.ts +224 -224
- package/src/createPopoverSelect.svelte.ts +213 -213
- package/src/createSlider.svelte.ts +191 -191
- package/src/createTooltip.svelte.ts +144 -144
- package/src/createTree.svelte.ts +322 -322
- package/src/datetime/date-core.ts +206 -206
- package/src/datetime/date-restrict.ts +61 -61
- package/src/datetime/timezone.ts +135 -135
- package/src/dock-manager-model.ts +596 -596
- package/src/dock-model.ts +374 -374
- package/src/editing.test.ts +974 -974
- package/src/editing.ts +618 -609
- package/src/editor-contract.ts +171 -171
- package/src/editor-registry.grid.test.ts +144 -144
- package/src/editor-registry.ts +122 -122
- package/src/export-data-api.test.ts +126 -126
- package/src/export-format.test.ts +107 -107
- package/src/export-format.ts +601 -601
- package/src/filter-operators.ts +160 -160
- package/src/filtering/excel-filters.ts +325 -325
- package/src/flex-render.ts +3 -3
- package/src/form-field.ts +127 -127
- package/src/grid-icons.test.ts +46 -0
- package/src/grid-icons.ts +184 -0
- package/src/group-display.test.ts +167 -167
- package/src/group-display.ts +200 -200
- package/src/headless.ts +87 -87
- package/src/icon-overrides.grid.test.ts +188 -0
- package/src/icon-seam.test.ts +100 -0
- package/src/index.ts +19 -0
- package/src/js-scroller.svelte.ts +173 -173
- package/src/keyboard-handlers.ts +270 -270
- package/src/keyboard.test.ts +59 -59
- package/src/keyboard.ts +97 -97
- package/src/list-nav.test.ts +49 -49
- package/src/list-nav.ts +29 -29
- package/src/list-option.test.ts +56 -56
- package/src/list-option.ts +179 -179
- package/src/menus.ts +597 -597
- package/src/merge-objects.ts +48 -48
- package/src/overlays.test.ts +90 -90
- package/src/positioning.ts +268 -268
- package/src/render-component.ts +28 -28
- package/src/row-drag.test.ts +401 -401
- package/src/row-drag.ts +419 -419
- package/src/row-resize.test.ts +524 -524
- package/src/row-resize.ts +228 -228
- package/src/scheduler-ical.ts +181 -181
- package/src/scheduler-model.test.ts +562 -562
- package/src/scheduler-model.ts +873 -873
- package/src/selection.test.ts +885 -885
- package/src/server-data-source.test.ts +383 -383
- package/src/server-data-source.ts +469 -469
- package/src/sparkline.test.ts +68 -68
- package/src/sparkline.ts +169 -169
- package/src/spreadsheet.test.ts +488 -488
- package/src/spreadsheet.ts +312 -312
- package/src/static-functions.ts +11 -11
- package/src/subscribe.ts +38 -38
- package/src/summaries.ts +113 -113
- package/src/svgrid-wrapper.types.ts +563 -563
- package/src/svgrid.async-editor-options.test.ts +273 -273
- package/src/svgrid.auto-row-height.test.ts +204 -204
- package/src/svgrid.behavior.test.ts +910 -910
- package/src/svgrid.charting.test.ts +654 -534
- package/src/svgrid.comments-autocomplete.test.ts +127 -127
- package/src/svgrid.context-menu.test.ts +147 -147
- package/src/svgrid.features.test.ts +157 -157
- package/src/svgrid.filter-depth.test.ts +163 -163
- package/src/svgrid.filter-menu-listbox.svelte.test.ts +382 -377
- package/src/svgrid.filter-menu-scroll.test.ts +112 -112
- package/src/svgrid.grand-total.test.ts +188 -188
- package/src/svgrid.group-display-mode.test.ts +171 -171
- package/src/svgrid.group-footers.test.ts +121 -121
- package/src/svgrid.group-pagination.test.ts +153 -153
- package/src/svgrid.new-features.wrapper.test.ts +251 -251
- package/src/svgrid.tree-data.test.ts +186 -186
- package/src/svgrid.wrapper.test.ts +63 -63
- package/src/svgriddropdown.async-panel.svelte.test.ts +195 -195
- package/src/test-setup.ts +62 -62
- package/src/themes/index.ts +288 -288
- package/src/toast-store.svelte.ts +250 -250
- package/src/toast-store.test.ts +147 -147
- package/src/tree-row-model.test.ts +168 -168
- package/src/ui-buttons.test.ts +144 -144
- package/src/ui-inputs.test.ts +118 -118
- package/src/ui-localization.test.ts +113 -113
- package/src/ui-range.test.ts +70 -70
- package/src/ui-selection.test.ts +155 -155
- package/src/ui-tier1.test.ts +142 -142
- package/src/virtual.test.ts +88 -88
- package/src/virtualization/column-virtualizer.test.ts +27 -27
- package/src/virtualization/column-virtualizer.ts +30 -30
- package/src/virtualization/svelte-virtualizer.svelte.ts +26 -26
- package/src/virtualization/types.ts +30 -30
- package/src/virtualization/virtualizer.test.ts +47 -47
- package/src/virtualization/virtualizer.ts +322 -322
- package/dist/cdn/GridMenus-DMihUtma.js +0 -600
- package/dist/cdn/GridMenus-nmNDj1a3.js +0 -601
- package/dist/cdn/SvGridChart-Bs2GIR2Q.js +0 -1202
- package/dist/cdn/SvGridChart-CwhFz7GV.js +0 -1203
- package/dist/cdn/SvGridChartPanel-1WXuStzM.js +0 -561
- package/dist/cdn/SvGridChartPanel-e5_nqNP9.js +0 -585
- package/dist/cdn/chart-i4XcXyHJ.js +0 -1214
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { $ as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
import {
|
|
12
|
-
import { t as
|
|
13
|
-
import { t as
|
|
14
|
-
export { Mi as ALL_FILTER_OPERATORS, ot as COUNTRIES, pt as COUNTRY_BY_CODE, Ls as DEFAULT_PALETTE, Ue as FOCUSABLE_SELECTOR, Xt as FlexRender, hs as PANEL_THEME_VARS, Dt as PHONE_NATIONAL_LENGTHS, Z as RANGE_OPERATOR_IDS, Gr as SET_OPERATOR_IDS, dr as STRENGTH_LABELS, Ja as SvAccordion, Er as SvAlert, so as SvAnchor, Ir as SvAspectRatio, Ce as SvAutoComplete, Aa as SvAvatar, Nr as SvAvatarGroup, Pi as SvBadge, Ba as SvBlockquote, Pe as SvBreadcrumb, qi as SvButton, Pn as SvButtonGroup, Yo as SvCalendar, Br as SvCard, zn as SvCarousel, Q as SvChart, Q as SvGridChart, $ as SvChartPanel, $ as SvGridChartPanel, Bi as SvCheckBox, yr as SvChip, It as SvCircularProgress, Ai as SvCode, Qt as SvCollapsible, aa as SvColorInput, sn as SvComboBox, d as SvCommand, pe as SvContextMenu, it as SvCountryInput, Ts as SvDateRangeInput, ws as SvDateTimePicker, Di as SvDivider, ya as SvDockLayout, mt as SvDockManager, R as SvDrawer, xn as SvDropDownList, tr as SvDurationInput, La as SvEmptyState, qo as SvField, w as SvFileUpload, Je as SvForm, vt as SvGauge, hi as SvGrid, gs as SvGridDropdown, dt as SvGridSelect, P as SvGroup, Jr as SvGroupCell, be as SvHoverCard, Xr as SvKbd, Ur as SvList, ge as SvListBox, V as SvLoadingOverlay, Jn as SvMark, Fn as SvMaskedInput, vn as SvMenu, Ve as SvMenuList, rn as SvMenubar, Za as SvModal, go as SvMultiSelect, T as SvNavPane, Hn as SvNumberInput, hr as SvOtpInput, Mn as SvPagination, On as SvPasswordInput, Le as SvPhoneInput, dn as SvPopconfirm, ae as SvPopover, po as SvProgress, Oa as SvRadioGroup, jr as SvRating, ir as SvRepeatButton, J as SvResult, kt as SvRichCell, ni as SvRichText, Oi as SvRowGroupPanel, oi as SvScrollArea, gi as SvSegmented, Gt as SvSimpleGrid, ta as SvSkeleton, _i as SvSlider, ar as SvSparkline, _t as SvSpinner, Kt as SvSplitter, qa as SvStack, Sa as SvStat, na as SvStepper, ma as SvSwitchButton, H as SvTabs, mn as SvTagsInput, eo as SvText, Mt as SvTextArea, m as SvTextInput, Cs as SvTimePicker, Ji as SvTimeline, cr as SvTitle, $r as SvToaster, ai as SvToggleButton, nn as SvTooltip, Tn as SvTour, Y as SvTree, le as SvTreeSelect, Zi as SvVisuallyHidden, Xn as VALUELESS_OPERATOR_IDS, Uo as addDays, ls as addMonths, Ot as addPaneToMain, zo as addYears, jt as agendaGroups, ki as aiChart, Yr as aiClassify, Hr as aiExport, qn as aiFilter, za as aiFindAnomalies, oo as aiSmartFill, sr as aiSummarize, fe as allManagerIds, Ne as allManagerPaneIds, gr as allPaneIds, ps as anchoredRect, me as announce, _r as applyExcelFilter, di as applyGroupAggregate, W as applyMask, Hi as applyRowPredicate, ja as attachAutoSavedView, et as autoHideLeaf, Ht as autoHidePaneToSide, yo as autoHideWindow, G as autoUpdate, Vi as avatarColorHue, ha as avatarInitials, Ae as branchValues, j as bringToFront, or as broadcastChannelTransport, Bn as buildAutoGroupColumns, Ms as buildChart, Fs as buildLinePath, no as buildSparkline, Us as chartSpecToCsv, Vs as chartToPngBlob, zs as chartToSvgString, Oo as clampDate, qr as clearToasts, Ee as closeWindow, l as coerceExportDate, at as columnFilteringFeature, ft as columnGroupingFeature, Ks as columnResize, Ti as compileExcelFilter, Ar as computeColumnGroupMeta, In as computeColumnStat, Es as computeOverlay, xt as computePosition, kn as contrastText, i as copyTextToClipboard, $t as createAccordion, Vt as createAutocomplete, Dn as createButtonGroup, Ho as createCalendar, Rt as createCarousel, Zn as createCheckbox, Qa as createCollaboration, L as createColorInput, xi as createColumnVirtualizer, Cn as createCombobox, ce as createCommand, Et as createCoreRowModel, fi as createCountryInput, Ss as createDateTimePicker, ys as createDismissableLayer, ln as createDropdownList, ue as createExpandedRowModel, pi as createFileUpload, je as createFilteredRowModel, ia as createFocusTrap, li as createForm, xa as createGauge, vi as createGrid, U as createGridState, Qe as createGroupedRowModel, Ut as createHyperFormulaSheet, ve as createListbox, ie as createMaskedInput, vo as createMenu, br as createNamedViews, C as createNumberInput, on as createOverlay, Bt as createPaginatedRowModel, D as createPagination, ro as createPasswordInput, tn as createPhoneInput, A as createPopoverSelect, b as createRadioGroup, Kr as createRating, ao as createServerDataSource, Vr as createServerGroupModel, vr as createSlider, _o as createSortedRowModel, F as createSplitter, ho as createStepper, S as createSvGrid, S as createTable, yt as createSvGridState, We as createSvelteVirtualizer, Ua as createSwitch, Qr as createTabs, $e as createTagsInput, vs as createTimePicker, uo as createToggle, Se as createTooltip, Ei as createTree, k as createTreeRowModel, ze as createTypeaheadBuffer, ba as createVirtualizer, p as daysForView, O as debounce, cs as decadeRange, un as dedupeManagerNodeIds, Eo as defaultEditorProps, He as defaultGridMessages, Vo as describeRecurrence, $a as disableAiCharting, Qn as dismissToast, _s as dismissableDepth, wi as dockGroup, Pa as dockInto, Cr as dockLeafToEdge, _n as dockManagerClosePane, _ as dockManagerResizeGroup, Wr as dockNormalize, Lr as dockPane, wn as dockPaneOnto, ye as dockPaneToEmptyMain, lr as dockSetActive, to as dockSetSizes, Qi as dockTabs, qe as dockWindowOnto, s as downloadBlobFile, Hs as downloadChartCsv, Ws as downloadChartPng, Bs as downloadChartSvg, t as downloadTextFile, jo as editorAria, Mo as editorErrorId, No as editorHintId, Go as emptySelection, Wt as enableAiCharting, gn as enabledIndices, Dr as eventsOnDay, ss as expandRecurrence, Ns as exponentialMovingAverage, st as fileMatchesAccept, hn as filterFns, Tt as filterGridRows, Ln as filterOptions, ca as findLeafById, Ze as findNodePath, ji as findTabsWithPane, de as flagEmoji, we as flattenTreeData, zt as flattenVisible, Be as floatPane, Is as formatChartValue, as as formatDate, Wi as formatDuration, Un as formatNeedsStats, re as formatNumericWithConfig, a as formatValueForExport, Nt as formatsNeedingStats, ct as fromICS, K as fromZonedLocal, ke as fuzzyMatch, Xe as fuzzyScore, N as getAIProvider, Fe as getAdvancedFilterEngine, lt as getBoardView, So as getCellEditor, y as getChartView, B as getExportProvider, Ie as getFocusable, Ca as getGridCellA11yProps, Fi as getGridCellDomId, la as getGridHeaderA11yProps, ei as getGridRootA11yProps, $n as getGridRowA11yProps, rr as getKeyboardIntent, Ki as getNextActiveCell, xe as getPivotEngine, mo as getSchedulerView, Oe as getSelectionBarView, An as groupOptions, Ka as hasAIProvider, Nn as hasAdvancedFilterEngine, Ct as hasBoardView, wo as hasCellEditor, ci as hasChartView, wa as hasConflict, Wn as hasGroups, an as hasPivotEngine, E as hasSchedulerView, Ye as hasSelectionBarView, Da as hiddenLeavesForCollapse, Ta as htmlToText, zi as inferCellDataType, At as insertGroupFooters, z as instantFromWallClock, is as isDisabledDay, rt as isEmptyValue, Wo as isImportant, bt as isMaskComplete, Ko as isMultiSelectMode, Ci as isOtpComplete, Qo as isOutOfRange, Ha as isRangeOperator, os as isRestricted, Bo as isSameDay, ns as isSelected, lo as isSetOperator, Pt as isTypeaheadKey, ur as isValuelessOperator, Ao as isoWeek, Fa as joinInTokens, Ii as layoutDayEvents, h as lerpColor, Ds as linearTrend, Pr as localStorageViews, Rn as locatePane, bn as lockScroll, us as matchesRecurrence, Yi as memoryViews, Zt as mockAIProvider, ko as monthMatrix, ua as monthWeekSegments, Zr as movePane, Ia as moveTreeNode, jn as moveWindow, ti as navigateAnchor, Ro as nextEditorId, g as nextTypeaheadIndex, As as niceLogScale, Rs as niceScale, ts as normalizeCalendarValue, ga as normalizeEditorOptions, wr as normalizeForFilter, Xa as normalizeHex, ht as normalizeTimeZone, xs as onScrollOutside, Na as otpCells, er as overlapCount, Ui as overlapsBands, f as paginateGroupedRows, pn as paginationRange, es as parseDate, va as parseDuration, pr as parseEditorValue, bi as parsePlacement, bs as parseTimeValue, Jt as passwordStrength, Wa as pauseToast, Me as phoneDigitsValid, Os as pickContrastText, Gn as pinAutoHidden, ms as popIn, fs as portalToBody, c as projectGridRows, $o as rangeDays, _a as rangeForView, En as registerAdvancedFilterEngine, se as registerBoardView, Or as registerBuiltinEditors, xo as registerCellEditor, nt as registerChartView, gt as registerExportProvider, yn as registerPivotEngine, fn as registerSchedulerView, Lt as registerSelectionBarView, bo as registeredCellEditorTypes, Yn as removeLeaf, Va as removePane, I as renderComponent, Li as renderMarkdown, Ya as renderSnippet, co as reorderPane, Ft as reorderTab, kr as resizeWindow, Mr as resolveCellFormat, pa as resolveColumnTypes, ee as resolveDatePattern, Co as resolveEditorProps, mr as resolveEvents, ra as resolveGridMessages, ds as resolveMessages, fo as resumeToast, ka as rgba, ii as rowDropZone, cn as rowExpandingFeature, Sn as rowPaginationFeature, Gs as rowResize, _e as rowSelectionFeature, Ge as rowSortingFeature, ks as rowsToChartSpec, St as rruleToRule, oe as ruleToRRule, ut as rules, wt as runRules, Ps as sampleGradient, da as sanitizeHtml, Sr as sanitizeOtp, he as scrollLockDepth, x as scrollToIndex, Jo as selectDate, te as serializeDelimited, n as serializeHtml, u as serializeJson, e as serializeMarkdown, ne as serializeXml, Kn as serverGroupNav, Ra as serverGroupRows, q as setAIProvider, Ea as setAutoHideSize, Ri as setManagerActive, fa as setWindowMinimized, js as simpleMovingAverage, Io as snapMinute, oa as sortFns, Tr as sortTreeNodes, M as spansToMerges, Rr as splitInTokens, Ga as spreadsheetLayout, Zo as startOfDay, Do as startOfMonth, Xo as startOfWeek, en as subscribeGrid, X as subscribeSvGrid, ri as surfaceOfTabs, Re as tableFeatures, Si as timelineAxis, Ma as timelineGeom, xr as timelineRows, Po as toDate, o as toExcelNumFmt, Vn as toGroupArray, De as toICS, Ke as toSelectedArray, sa as toSelectedSet, qt as toSparklineValues, mi as toZonedLocal, fr as toast, io as toastStore, nr as toggleMaximizeLeaf, Gi as toggleWindowMaximized, rs as tokenizeMask, $i as trailingInToken, zr as treeCheckState, ea as treeContains, Ni as treeDescendantIds, yi as unmask, To as unregisterCellEditor, Yt as updateToast, r as valueForExcel, ui as virtualRange, Fo as weekdayOrder, Lo as withTime, Fr as withinWorking, Xi as workingIntervals, Te as wrapMove, v as zoneAbbr, si as zoneOffsetMs, tt as zoneParts };
|
|
1
|
+
import { i as ee, t as te } from "./cell-formatting-C2Hf5gqd.js";
|
|
2
|
+
import { $ as ne, $a as re, $i as ie, $n as e, $o as t, $r as n, $t as r, A as i, Aa as a, Ai as o, An as s, Ao as c, Ar as l, At as u, B as d, Ba as f, Bi as p, Bn as m, Bo as h, Br as g, Bt as _, C as v, Ca as y, Ci as b, Cn as x, Co as S, Cr as C, Ct as w, D as T, Da as E, Di as D, Dn as O, Do as k, Dr as A, Dt as j, E as M, Ea as N, Ei as P, En as F, Eo as I, Er as L, Et as R, F as z, Fa as B, Fi as V, Fn as H, Fo as U, Fr as W, Ft as G, G as K, Ga as q, Gi as J, Gn as Y, Go as ae, Gr as oe, Gt as se, H as ce, Ha as le, Hi as ue, Hn as de, Ho as fe, Hr as pe, Ht as me, I as he, Ia as ge, Ii as _e, In as ve, Io as ye, Ir as be, It as xe, J as Se, Ja as Ce, Ji as we, Jn as Te, Jo as Ee, Jr as De, Jt as Oe, K as ke, Ka as Ae, Ki as je, Kn as Me, Ko as Ne, Kr as Pe, Kt as Fe, L as Ie, La as Le, Li as Re, Ln as ze, Lo as Be, Lr as Ve, Lt as He, M as Ue, Ma as We, Mi as Ge, Mn as Ke, Mo as X, Mr as qe, Mt as Je, N as Ye, Na as Xe, Ni as Ze, Nn as Qe, No as $e, Nr as et, Nt as tt, O as nt, Oa as rt, Oi as it, On as at, Oo as ot, Or as st, Ot as ct, P as lt, Pa as ut, Pi as dt, Pn as ft, Po as pt, Pr as mt, Pt as ht, Q as gt, Qa as _t, Qi as vt, Qn as yt, Qo as bt, Qr as xt, Qt as St, R as Ct, Ra as wt, Ri as Tt, Rn as Et, Ro as Dt, Rr as Ot, Rt as kt, S as At, Sa as jt, Si as Mt, Sn as Nt, So as Pt, Sr as Ft, St as It, T as Lt, Ta as Rt, Ti as zt, Tn as Bt, To as Vt, Tr as Ht, Tt as Ut, U as Wt, Ua as Gt, Ui as Kt, Un as qt, Uo as Jt, Ur as Yt, Ut as Xt, V as Zt, Va as Qt, Vi as $t, Vn as en, Vo as tn, Vr as nn, Vt as rn, W as an, Wa as on, Wi as sn, Wn as cn, Wo as ln, Wr as un, Wt as dn, X as fn, Xa as pn, Xi as mn, Xn as hn, Xo as gn, Xr as _n, Xt as vn, Y as yn, Ya as bn, Yi as xn, Yn as Sn, Yo as Cn, Yr as wn, Yt as Tn, Z as En, Za as Dn, Zi as On, Zn as kn, Zo as An, Zr as jn, Zt as Mn, _ as Nn, _a as Pn, _i as Fn, _n as In, _o as Ln, _r as Rn, _t as zn, a as Bn, aa as Vn, ai as Hn, an as Un, ao as Wn, ar as Gn, at as Kn, b as qn, ba as Jn, bi as Yn, bn as Xn, bo as Zn, br as Qn, bt as $n, c as er, ca as tr, ci as nr, cn as rr, co as ir, cr as ar, ct as or, d as sr, da as cr, di as lr, dn as ur, do as dr, dr as fr, dt as pr, ea as mr, ei as hr, en as gr, eo as _r, er as vr, es as yr, et as br, f as xr, fa as Sr, fi as Cr, fn as wr, fo as Tr, fr as Er, ft as Dr, g as Or, ga as kr, gi as Ar, gn as jr, go as Mr, gr as Nr, gt as Pr, h as Fr, ha as Ir, hi as Lr, hn as Rr, ho as zr, hr as Br, ht as Vr, i as Hr, ia as Ur, ii as Wr, in as Gr, io as Kr, ir as qr, it as Jr, j as Yr, ja as Xr, ji as Zr, jn as Qr, jo as $r, jr as ei, jt as ti, k as Z, ka as ni, ki as ri, kn as ii, ko as ai, kr as oi, kt as si, l as ci, la as li, li as ui, ln as di, lo as fi, lr as pi, lt as mi, m as hi, ma as gi, mi as _i, mn as vi, mo as yi, mr as bi, mt as xi, n as Si, na as Ci, ni as wi, nn as Ti, no as Ei, nr as Di, ns as Oi, nt as ki, o as Ai, oa as ji, oi as Mi, on as Ni, oo as Pi, or as Fi, ot as Ii, p as Li, pa as Ri, pi as zi, pn as Bi, po as Vi, pr as Hi, pt as Ui, q as Wi, qa as Gi, qi as Ki, qn as qi, qo as Ji, qr as Yi, qt as Xi, r as Zi, ra as Qi, ri as $i, rn as ea, ro as ta, rr as na, rs as ra, rt as ia, s as aa, sa as oa, si as sa, sn as ca, so as la, sr as ua, st as da, t as fa, ta as pa, ti as ma, tn as ha, to as ga, tr as _a, ts as va, tt as ya, u as ba, ua as xa, ui as Sa, un as Ca, uo as wa, ur as Ta, ut as Ea, v as Da, va as Oa, vi as ka, vn as Aa, vo as ja, vr as Ma, vt as Na, w as Pa, wa as Fa, wi as Ia, wn as La, wo as Ra, wr as za, wt as Ba, x as Va, xa as Ha, xi as Ua, xn as Wa, xo as Ga, xr as Ka, xt as qa, y as Ja, ya as Ya, yi as Xa, yn as Za, yo as Qa, yr as $a, yt as eo, z as to, za as no, zi as ro, zn as io, zo as ao, zr as oo, zt as so } from "./src-DNbz94Ct.js";
|
|
3
|
+
import { c as co, d as lo, f as uo, i as fo, l as po, m as mo, n as ho, o as go, p as _o, r as vo, s as yo, t as bo, u as xo } from "./export-format-CUDLy2yn.js";
|
|
4
|
+
import { a as So, i as Co, n as wo, o as To, r as Eo, s as Do, t as Oo } from "./editor-registry-BhgE3S84.js";
|
|
5
|
+
import { A as ko, C as Ao, D as jo, E as Mo, F as No, I as Po, L as Fo, M as Io, N as Lo, O as Ro, P as zo, R as Bo, S as Vo, T as Ho, _ as Uo, a as Wo, b as Go, c as Ko, d as qo, f as Jo, g as Yo, h as Xo, i as Zo, j as Qo, k as $o, l as es, m as ts, n as ns, o as rs, p as is, r as as, s as os, t as ss, u as cs, v as ls, w as us, x as ds, y as fs, z as ps } from "./date-format-BnnHlqGw.js";
|
|
6
|
+
import { i as ms, n as hs, r as gs, t as _s } from "./popover-P-9P2YYn.js";
|
|
7
|
+
import { t as vs } from "./SvGridDropdown-D0VdjeR8.js";
|
|
8
|
+
import { a as ys, c as bs, i as xs, l as Ss, o as Cs, r as ws, s as Ts, t as Es } from "./SvDateTimePicker-CCbDZNZB.js";
|
|
9
|
+
import { t as Ds } from "./SvDateRangeInput-DMLKmGEc.js";
|
|
10
|
+
import { _ as Os, a as ks, b as As, c as js, d as Ms, f as Ns, g as Ps, h as Fs, i as Is, l as Ls, m as Rs, n as zs, p as Bs, r as Vs, s as Hs, t as Us, u as Ws, v as Gs, y as Ks } from "./chart-CKJRCPOk.js";
|
|
11
|
+
import { t as Q } from "./SvGridChart-Yl-IXZFO.js";
|
|
12
|
+
import { a as qs, c as Js, i as Ys, l as Xs, o as Zs, r as Qs, s as $s, t as $ } from "./SvGridChartPanel-aqf8n-vJ.js";
|
|
13
|
+
import { t as ec } from "./row-resize-BRcimkUT.js";
|
|
14
|
+
import { t as tc } from "./column-resize-DsfNXMom.js";
|
|
15
|
+
export { Mr as ALL_FILTER_OPERATORS, qe as COUNTRIES, et as COUNTRY_BY_CODE, Us as DEFAULT_PALETTE, je as FOCUSABLE_SELECTOR, Lt as FlexRender, yi as GRID_ICON_GLYPHS, zr as GRID_ICON_NAMES, _s as PANEL_THEME_VARS, mt as PHONE_NATIONAL_LENGTHS, Ln as RANGE_OPERATOR_IDS, ja as SET_OPERATOR_IDS, Qn as STRENGTH_LABELS, La as SvAccordion, pr as SvAlert, Xa as SvAnchor, Cr as SvAspectRatio, de as SvAutoComplete, ya as SvAvatar, br as SvAvatarGroup, xi as SvBadge, ka as SvBlockquote, Se as SvBreadcrumb, Fi as SvButton, xn as SvButtonGroup, Zo as SvCalendar, Dr as SvCard, En as SvCarousel, Q as SvChart, Q as SvGridChart, $ as SvChartPanel, $ as SvGridChartPanel, Di as SvCheckBox, or as SvChip, Ct as SvCircularProgress, _i as SvCode, zt as SvCollapsible, qi as SvColorInput, qt as SvComboBox, ne as SvCommand, K as SvContextMenu, Ke as SvCountryInput, Ds as SvDateRangeInput, Es as SvDateTimePicker, mi as SvDivider, ca as SvDockLayout, tt as SvDockManager, w as SvDrawer, cn as SvDropDownList, Hn as SvDurationInput, Ea as SvEmptyState, Yo as SvField, u as SvFileUpload, Ie as SvForm, at as SvGauge, ni as SvGrid, vs as SvGridDropdown, Qe as SvGridSelect, b as SvGroup, Fr as SvGroupCell, ce as SvHoverCard, Lr as SvKbd, Ar as SvList, Y as SvListBox, D as SvLoadingOverlay, Fn as SvMark, Sn as SvMaskedInput, an as SvMenu, ke as SvMenuList, Wt as SvMenubar, Ba as SvModal, io as SvMultiSelect, d as SvNavPane, kn as SvNumberInput, nr as SvOtpInput, yn as SvPagination, hn as SvPasswordInput, Te as SvPhoneInput, Zt as SvPopconfirm, R as SvPopover, to as SvProgress, _a as SvRadioGroup, vr as SvRating, Gn as SvRepeatButton, P as SvResult, gt as SvRichCell, Wr as SvRichText, hi as SvRowGroupPanel, Jr as SvScrollArea, ri as SvSegmented, Mt as SvSimpleGrid, Ui as SvSkeleton, ii as SvSlider, Kn as SvSparkline, it as SvSpinner, Nt as SvSplitter, Ia as SvStack, da as SvStat, Wi as SvStepper, na as SvSwitchButton, O as SvTabs, en as SvTagsInput, Ua as SvText, yt as SvTextArea, e as SvTextInput, Ts as SvTimePicker, Ii as SvTimeline, Yn as SvTitle, Vr as SvToaster, qr as SvToggleButton, Ut as SvTooltip, fn as SvTour, F as SvTree, H as SvTreeSelect, zi as SvVisuallyHidden, Qa as VALUELESS_OPERATOR_IDS, Go as addDays, ds as addMonths, ht as addPaneToMain, Vo as addYears, vt as agendaGroups, gi as aiChart, Ir as aiClassify, kr as aiExport, Pn as aiFilter, Oa as aiFindAnomalies, Ya as aiSmartFill, Jn as aiSummarize, G as allManagerIds, xe as allManagerPaneIds, rr as allPaneIds, hs as anchoredRect, q as announce, ir as applyExcelFilter, $e as applyGroupAggregate, A as applyMask, Ai as applyRowPredicate, ba as attachAutoSavedView, He as autoHideLeaf, kt as autoHidePaneToSide, so as autoHideWindow, j as autoUpdate, ki as avatarColorHue, ia as avatarInitials, zs as boxStats, ve as branchValues, _ as bringToFront, qn as broadcastChannelTransport, Dn as buildAutoGroupColumns, Vs as buildChart, Is as buildLinePath, S as buildSparkline, Qs as chartCsvExportable, ks as chartScales, Ys as chartSpecToCsv, qs as chartToPngBlob, Zs as chartToSvgString, Ao as clampDate, Pr as clearToasts, me as closeWindow, bo as coerceExportDate, pt as columnFilteringFeature, U as columnGroupingFeature, tc as columnResize, fi as compileExcelFilter, _r as computeColumnGroupMeta, An as computeColumnStat, Hs as computeOverlay, ct as computePosition, bt as contrastText, ho as copyTextToClipboard, Bt as createAccordion, Ot as createAutocomplete, mn as createButtonGroup, Wo as createCalendar, Tt as createCarousel, Rn as createCheckbox, Va as createCollaboration, C as createColorInput, ci as createColumnVirtualizer, un as createCombobox, V as createCommand, ye as createCoreRowModel, ei as createCountryInput, ws as createDateTimePicker, xs as createDismissableLayer, Yt as createDropdownList, Be as createExpandedRowModel, ti as createFileUpload, Dt as createFilteredRowModel, Ki as createFocusTrap, Zr as createForm, ua as createGauge, $r as createGrid, ai as createGridState, ao as createGroupedRowModel, At as createHyperFormulaSheet, oe as createListbox, L as createMaskedInput, oo as createMenu, sr as createNamedViews, l as createNumberInput, Kt as createOverlay, h as createPaginatedRowModel, p as createPagination, Ka as createPasswordInput, Ht as createPhoneInput, g as createPopoverSelect, o as createRadioGroup, Nr as createRating, Ja as createServerDataSource, Or as createServerGroupModel, ar as createSlider, tn as createSortedRowModel, x as createSplitter, ro as createStepper, X as createSvGrid, X as createTable, c as createSvGridState, Me as createSvelteVirtualizer, Ma as createSwitch, Br as createTabs, Ve as createTagsInput, bs as createTimePicker, $a as createToggle, ue as createTooltip, pi as createTree, fe as createTreeRowModel, De as createTypeaheadBuffer, la as createVirtualizer, ie as daysForView, m as debounce, us as decadeRange, Xt as dedupeManagerNodeIds, Oo as defaultEditorProps, Ae as defaultGridMessages, Uo as describeRecurrence, Ha as disableAiCharting, zn as dismissToast, ys as dismissableDepth, di as dockGroup, Ca as dockInto, ur as dockLeafToEdge, rn as dockManagerClosePane, r as dockManagerResizeGroup, jr as dockNormalize, wr as dockPane, dn as dockPaneOnto, se as dockPaneToEmptyMain, Xn as dockSetActive, Wa as dockSetSizes, Bi as dockTabs, Fe as dockWindowOnto, vo as downloadBlobFile, $s as downloadChartCsv, Js as downloadChartPng, Xs as downloadChartSvg, fo as downloadTextFile, No as editorAria, Po as editorErrorId, Fo as editorHintId, qo as emptySelection, jt as enableAiCharting, nn as enabledIndices, mr as eventsOnDay, ls as expandRecurrence, js as exponentialMovingAverage, Je as fileMatchesAccept, Jt as filterFns, ft as filterGridRows, wn as filterOptions, Xi as findLeafById, ze as findNodePath, vi as findTabsWithPane, W as flagEmoji, ln as flattenTreeData, Et as flattenVisible, Oe as floatPane, Ls as formatChartValue, ss as formatDate, Mi as formatDuration, t as formatNeedsStats, te as formatNumericWithConfig, go as formatValueForExport, yr as formatsNeedingStats, Ye as fromICS, M as fromZonedLocal, _e as fuzzyMatch, Re as fuzzyScore, y as getAIProvider, Ce as getAdvancedFilterEngine, Xe as getBoardView, wo as getCellEditor, a as getChartView, E as getExportProvider, we as getFocusable, fa as getGridCellA11yProps, Si as getGridCellDomId, Zi as getGridHeaderA11yProps, Hr as getGridRootA11yProps, Bn as getGridRowA11yProps, Wn as getKeyboardIntent, Pi as getNextActiveCell, le as getPivotEngine, no as getSchedulerView, ge as getSelectionBarView, _n as groupOptions, Fa as hasAIProvider, bn as hasAdvancedFilterEngine, ut as hasBoardView, Eo as hasCellEditor, Xr as hasChartView, pa as hasConflict, jn as hasGroups, Gt as hasPivotEngine, f as hasSchedulerView, Le as hasSelectionBarView, ga as hiddenLeavesForCollapse, ma as htmlToText, Ei as inferCellDataType, _t as insertGroupFooters, T as instantFromWallClock, os as isDisabledDay, Ge as isEmptyValue, Ko as isImportant, st as isMaskComplete, Jo as isMultiSelectMode, ui as isOtpComplete, es as isOutOfRange, Zn as isRangeOperator, cs as isRestricted, Ho as isSameDay, is as isSelected, Ga as isSetOperator, xt as isTypeaheadKey, Pt as isValuelessOperator, Mo as isoWeek, wa as joinInTokens, Ci as layoutDayEvents, va as lerpColor, Ws as linearTrend, xr as localStorageViews, Tn as locatePane, sn as lockScroll, fs as matchesRecurrence, Li as memoryViews, Rt as mockAIProvider, jo as monthMatrix, Qi as monthWeekSegments, Rr as movePane, Ta as moveTreeNode, vn as moveWindow, Ur as navigateAnchor, Bo as nextEditorId, n as nextTypeaheadIndex, Ms as niceLogScale, Ns as niceScale, rs as normalizeCalendarValue, aa as normalizeEditorOptions, dr as normalizeForFilter, za as normalizeHex, nt as normalizeTimeZone, Cs as onScrollOutside, Bs as ordinalDateTicks, Sa as otpCells, Vn as overlapCount, ji as overlapsBands, re as paginateGroupedRows, $t as paginationRange, ns as parseDate, sa as parseDuration, er as parseEditorValue, si as parsePlacement, Ss as parseTimeValue, Ft as passwordStrength, Na as pauseToast, be as phoneDigitsValid, Rs as pickContrastText, Mn as pinAutoHidden, gs as popIn, ms as portalToBody, yo as projectGridRows, ts as rangeDays, oa as rangeForView, pn as registerAdvancedFilterEngine, B as registerBoardView, hr as registerBuiltinEditors, Co as registerCellEditor, We as registerChartView, rt as registerExportProvider, on as registerPivotEngine, Qt as registerSchedulerView, wt as registerSelectionBarView, So as registeredCellEditorTypes, In as removeLeaf, Aa as removePane, Vt as renderComponent, wi as renderMarkdown, I as renderSnippet, Za as reorderPane, St as reorderTab, gr as resizeWindow, Oi as resolveCellFormat, ta as resolveColumnTypes, ee as resolveDatePattern, To as resolveEditorProps, tr as resolveEvents, Gi as resolveGridMessages, ps as resolveMessages, eo as resumeToast, ra as rgba, Kr as rowDropZone, ae as rowExpandingFeature, Ne as rowPaginationFeature, ec as rowResize, Ji as rowSelectionFeature, Ee as rowSortingFeature, Fs as rowsToBoxSpec, Ps as rowsToChartSpec, Os as rowsToDirectSpec, lt as rruleToRule, z as ruleToRRule, Ze as rules, dt as runRules, Gs as sampleGradient, $i as sanitizeHtml, lr as sanitizeOtp, J as scrollLockDepth, s as scrollToIndex, Xo as selectDate, co as serializeDelimited, po as serializeHtml, xo as serializeJson, lo as serializeMarkdown, uo as serializeXml, Nn as serverGroupNav, Da as serverGroupRows, N as setAIProvider, ha as setAutoHideSize, Ti as setManagerActive, ea as setWindowMinimized, Ks as simpleMovingAverage, As as sliceChartWindow, Ro as snapMinute, Cn as sortFns, fr as sortTreeNodes, v as spansToMerges, Tr as splitInTokens, Pa as spreadsheetLayout, $o as startOfDay, ko as startOfMonth, Qo as startOfWeek, k as subscribeGrid, ot as subscribeSvGrid, Gr as surfaceOfTabs, gn as tableFeatures, li as timelineAxis, xa as timelineGeom, cr as timelineRows, Io as toDate, _o as toExcelNumFmt, On as toGroupArray, he as toICS, Pe as toSelectedArray, Yi as toSelectedSet, Ra as toSparklineValues, Z as toZonedLocal, $n as toast, qa as toastStore, Un as toggleMaximizeLeaf, Ni as toggleWindowMaximized, as as tokenizeMask, Vi as trailingInToken, Er as treeCheckState, Hi as treeContains, bi as treeDescendantIds, oi as unmask, Do as unregisterCellEditor, It as updateToast, mo as valueForExcel, Qr as virtualRange, Lo as weekdayOrder, zo as withTime, Sr as withinWorking, Ri as workingIntervals, pe as wrapMove, i as zoneAbbr, Yr as zoneOffsetMs, Ue as zoneParts };
|
|
15
16
|
|
|
16
|
-
;(function(){try{if(typeof document==='undefined')return;var s=document.createElement('style');s.setAttribute('data-svgrid','');s.textContent=".sv-grid-root{font-family:var(--sg-font,inherit);position:relative}.sv-grid-root[data-selbar]{--sg-selbar-reserve:68px}.sv-grid-root[data-selbar^=upsell]{--sg-selbar-reserve:116px}.sv-grid-root[data-selbar$=bottom] .sv-grid-container{padding-bottom:var(--sg-selbar-reserve)}.sv-grid-root[data-selbar$=top] .sv-grid-container{padding-top:var(--sg-selbar-reserve)}.sv-grid-sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.sv-grid-loading-overlay{z-index:18;pointer-events:auto;background:color-mix(in srgb, var(--sg-bg,#fff) 35%, transparent);position:absolute;inset:0}.sv-grid-loading-bar{background:color-mix(in srgb, var(--sg-accent,#2563eb) 18%, transparent);height:3px;position:absolute;top:0;left:0;right:0;overflow:hidden}.sv-grid-loading-bar:before{content:\"\";background:var(--sg-accent,#2563eb);width:40%;animation:1.1s ease-in-out infinite sv-grid-loading-slide;position:absolute;inset:0}@keyframes sv-grid-loading-slide{0%{transform:translate(-100%)}to{transform:translate(350%)}}.sv-grid-skeleton{top:var(--sg-thead-h,40px);padding:0;position:absolute;left:0;right:0;overflow:hidden}.sv-grid-skeleton-row{height:var(--sg-pinned-row-h,36px);border-bottom:1px solid var(--sg-border,#e2e8f0);align-items:center;display:flex}.sv-grid-skeleton-cell{box-sizing:border-box;flex-shrink:0;padding:0 12px}.sv-grid-skeleton-bar{background:linear-gradient(90deg, color-mix(in srgb, var(--sg-muted,#94a3b8) 18%, transparent) 25%, color-mix(in srgb, var(--sg-muted,#94a3b8) 32%, transparent) 50%, color-mix(in srgb, var(--sg-muted,#94a3b8) 18%, transparent) 75%);background-size:200% 100%;border-radius:4px;width:70%;height:10px;animation:1.3s linear infinite sv-grid-shimmer;display:block}@keyframes sv-grid-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sv-grid-toolbar{align-items:center;gap:8px;padding:6px 2px;display:flex}.sv-grid-toolbar-btn{border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);cursor:pointer;align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;font-weight:600;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.sv-grid-toolbar-btn:hover{border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-toolbar-btn.is-active{background:var(--sg-accent,#2563eb);border-color:var(--sg-accent,#2563eb);color:#fff}.sv-grid-advf-chip{border:1px solid color-mix(in srgb, var(--sg-accent,#2563eb) 35%, transparent);background:color-mix(in srgb, var(--sg-accent,#2563eb) 12%, transparent);color:var(--sg-accent,#2563eb);border-radius:999px;align-items:center;gap:6px;padding:5px 6px 5px 11px;font-size:12.5px;font-weight:600;display:inline-flex}.sv-grid-advf-clear{width:18px;height:18px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;font-size:11px;transition:background-color .12s;display:inline-flex}.sv-grid-advf-clear:hover{background:color-mix(in srgb, var(--sg-accent,#2563eb) 25%, transparent)}.sv-grid-tool-panel{z-index:901;background:var(--sg-bg,#fff);border-left:1px solid var(--sg-border,#e2e8f0);flex-direction:column;width:250px;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-8px 0 24px #0000001f}.sv-grid-tool-panel-head{text-transform:uppercase;letter-spacing:.05em;color:var(--sg-muted,#64748b);border-bottom:1px solid var(--sg-border,#e2e8f0);justify-content:space-between;align-items:center;padding:8px 12px;font-size:12px;font-weight:700;display:flex}.sv-grid-tool-panel-close{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;font-size:14px}.sv-grid-tool-panel-list{flex:1;margin:0;padding:6px;list-style:none;overflow-y:auto}.sv-grid-tool-panel-item{border-radius:5px;justify-content:space-between;align-items:center;gap:6px;padding:3px 6px;display:flex}.sv-grid-tool-panel-item:hover{background:var(--sg-row-hover-bg,#94a3b81a)}.sv-grid-tool-panel-vis{min-width:0;color:var(--sg-fg,#0f172a);cursor:pointer;flex:1;align-items:center;gap:8px;font-size:13px;display:flex}.sv-grid-tool-panel-vis input{accent-color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-tool-panel-actions{flex-shrink:0;gap:2px;display:inline-flex}.sv-grid-tool-panel-btn{width:22px;height:22px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:4px;font-size:13px}.sv-grid-tool-panel-btn:hover:not(:disabled){background:var(--sg-row-hover-bg,#94a3b82e);color:var(--sg-fg,#0f172a)}.sv-grid-tool-panel-btn.is-active{color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-btn:disabled{opacity:.35;cursor:default}.sv-grid-tool-panel-tabs{border-bottom:1px solid var(--sg-border,#e2e8f0);gap:2px;padding:6px 6px 0;display:flex}.sv-grid-tool-panel-tab{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:6px 8px;font-size:12px;font-weight:600}.sv-grid-tool-panel-tab:hover{color:var(--sg-fg,#0f172a)}.sv-grid-tool-panel-tab.is-active{color:var(--sg-accent,#2563eb);border-bottom-color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-filters{flex-direction:column;flex:1;gap:8px;padding:6px;display:flex;overflow-y:auto}.sv-grid-tp-filter{border:1px solid var(--sg-border,#e2e8f0);border-radius:6px;flex-direction:column;gap:4px;padding:6px;display:flex}.sv-grid-tp-filter.is-filtered{border-color:var(--sg-accent,#2563eb)}.sv-grid-tp-filter-head{justify-content:space-between;align-items:center;display:flex}.sv-grid-tp-filter-name{color:var(--sg-fg,#0f172a);font-size:12px;font-weight:600}.sv-grid-tp-filter-clear{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:11px}.sv-grid-tp-filter-clear:hover{color:var(--sg-accent,#2563eb)}.sv-grid-tp-filter-op,.sv-grid-tp-filter-input{box-sizing:border-box;border:1px solid var(--sg-border,#e2e8f0);background:var(--sg-bg,#fff);width:100%;color:var(--sg-fg,#0f172a);border-radius:5px;padding:4px 6px;font-size:12px}.sv-grid-root-fill{flex-direction:column;height:100%;min-height:0;display:flex}.sv-grid-root-fill>.sv-grid-shell{flex:1 1 0;min-height:0;height:auto!important}.sv-grid-shell{border-bottom:1px solid var(--sg-border,#cbd5e1);position:relative}.sv-grid-table{table-layout:fixed;border-collapse:separate;border-spacing:0}.sv-grid-table:focus{outline:none}.sv-grid-column,.sv-grid-cell{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);-webkit-user-select:none;user-select:none;border-right:1px solid var(--sg-border,#e2e8f0);border-bottom:1px solid var(--sg-border,#e2e8f0);overflow:hidden}.sv-grid-table tr>:last-child.sv-grid-column,.sv-grid-table tr>:last-child.sv-grid-cell{border-right:0}.sv-grid-table:not(.sv-grid-no-row-hover) tbody tr:hover>.sv-grid-cell:not([data-selected-range=true]){background-color:var(--sg-row-hover-bg,#eef2ff)}.sv-grid-cell-active,.sv-grid-cell-has-fill-handle{position:relative}.sv-grid-cell-has-fill-handle{overflow:visible}.sv-grid-detail-row{height:auto!important}.sv-grid-detail-cell{text-overflow:clip;white-space:normal;background:var(--sg-bg,#fff);-webkit-user-select:text;user-select:text;height:auto;padding:0;overflow:visible}.sv-grid-cell[data-pinned=left],.sv-grid-column[data-pinned=left]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));box-shadow:inset -1px 0 0 var(--sg-pinned-divider,var(--sg-border,#cbd5e1)), 8px 0 12px -6px var(--sg-pinned-shadow-color,#0f172a38)}.sv-grid-cell[data-pinned=right],.sv-grid-column[data-pinned=right]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));box-shadow:inset 1px 0 0 var(--sg-pinned-divider,var(--sg-border,#cbd5e1)), -8px 0 12px -6px var(--sg-pinned-shadow-color,#0f172a38)}.sv-grid-head .sv-grid-column[data-pinned=left],.sv-grid-head .sv-grid-column[data-pinned=right]{background:var(--sg-pinned-header-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 86%, var(--sg-accent,#2563eb) 14%));font-weight:600}.sv-grid-row-alt>.sv-grid-cell{background:var(--sg-row-alt-bg,#f8fafc)}.sv-grid-row-alt>.sv-grid-cell[data-pinned]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-row-selected>.sv-grid-cell[data-pinned]{background:linear-gradient(color-mix(in srgb, var(--sg-selection-bg,#dbeafe) 65%, transparent), color-mix(in srgb, var(--sg-selection-bg,#dbeafe) 65%, transparent)), var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-table:not(.sv-grid-no-row-hover) .sv-grid-row:hover>.sv-grid-cell[data-pinned]:not([data-selected-range=true]){background:linear-gradient(color-mix(in srgb, var(--sg-row-hover-bg,#eef2ff) 55%, transparent), color-mix(in srgb, var(--sg-row-hover-bg,#eef2ff) 55%, transparent)), var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-column{position:relative}.sv-grid-cell[data-align=left],.sv-grid-column[data-align=left]{padding-left:var(--sg-cell-px,7px)}.sv-grid-cell[data-align=right]{text-align:right;padding-right:var(--sg-cell-px,7px)}.sv-grid-cell[data-align=center]{text-align:center}.sv-grid-column[data-align=right]{padding-right:var(--sg-cell-px,7px)}.sv-grid-column[data-align=right] .sv-grid-header-sort{justify-content:flex-end}.sv-grid-has-vscroll:not(.sv-grid-has-hscroll) .sv-grid-table tr>:last-child.sv-grid-cell[data-align=right],.sv-grid-has-vscroll:not(.sv-grid-has-hscroll) .sv-grid-table tr>:last-child.sv-grid-column[data-align=right]{padding-right:calc(var(--sg-cell-px,7px) + 16px)}.sv-grid-container.sv-grid-has-vscroll.sv-grid-has-hscroll{padding-right:16px}.sv-grid-column[data-align=center] .sv-grid-header-sort{justify-content:center}.sv-grid-resize-handle{cursor:col-resize;-webkit-user-select:none;user-select:none;z-index:2;width:5px;height:100%;transition:background-color .1s;position:absolute;top:0;right:0}.sv-grid-resize-handle:after{content:\"\";background:var(--sg-fg,#0f172a);opacity:0;border-radius:1px;width:2px;margin:auto 2px;transition:background-color .1s,opacity .1s;position:absolute;inset:0}.sv-grid-column:hover .sv-grid-resize-handle:after{opacity:.3}.sv-grid-column:hover .sv-grid-resize-handle:hover:after,.sv-grid-resize-handle.is-resizing:after{background:var(--sg-accent,#2563eb);opacity:1}.sv-grid-row-resize-handle{transition:background-color .1s}.sv-grid-row-resize-handle:hover,.sv-grid-row-resize-handle.is-resizing{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 30%, transparent)}.sv-grid-head{z-index:35;background:var(--sg-header-bg,#f5f7fb);position:sticky;top:0}.sv-grid-head .sv-grid-column{background:var(--sg-header-bg,#f5f7fb);color:var(--sg-header-label-color,var(--sg-header-fg,var(--sg-fg,#0f172a)));font-weight:var(--sg-header-weight,600);font-size:var(--sg-header-size,inherit);text-transform:var(--sg-header-transform,none);letter-spacing:var(--sg-header-tracking,normal);border-bottom-color:var(--sg-header-border,var(--sg-border,#e2e8f0))}.sv-grid-column[draggable=true]{cursor:grab}.sv-grid-column[draggable=true]:active{cursor:grabbing}.sv-grid-column.is-dragging{opacity:.55}.sv-grid-column.is-drag-target-before,.sv-grid-column.is-drag-target-after{position:relative}.sv-grid-column.is-drag-target-before:before,.sv-grid-column.is-drag-target-after:after{content:\"\";pointer-events:none;z-index:7;background:linear-gradient(#6366f1,#8b5cf6);border-radius:2px;width:3px;animation:.7s ease-in-out infinite alternate sg-drop-pulse;position:absolute;top:4px;bottom:4px;box-shadow:0 0 6px #6366f1}.sv-grid-column.is-drag-target-before:before{left:-2px}.sv-grid-column.is-drag-target-after:after{right:-2px}@keyframes sg-drop-pulse{0%{opacity:.55}to{opacity:1}}.sv-grid-row-draggable{cursor:grab}.sv-grid-row-draggable:active{cursor:grabbing}.sv-grid-row-drag-active .sv-grid-row-draggable{-webkit-user-select:none;user-select:none}.sv-grid-row-draggable .sv-grid-row-number-cell{padding-left:14px;position:relative}.sv-grid-row-draggable .sv-grid-row-number-cell:before{content:\"⠇\";color:var(--sg-muted,#94a3b8);opacity:.4;pointer-events:none;font-size:13px;line-height:1;transition:opacity .12s;position:absolute;top:50%;left:3px;transform:translateY(-50%)}.sv-grid-row-draggable:hover .sv-grid-row-number-cell:before{opacity:1}.sv-grid-row-dropzone-over{outline:2px dashed var(--sg-accent,#6366f1);outline-offset:-2px;background:color-mix(in srgb, var(--sg-accent,#6366f1) 10%, transparent)}.sv-grid-row-drop-before>td{box-shadow:inset 0 2px 0 0 var(--sg-accent,#6366f1)}.sv-grid-row-drop-after>td{box-shadow:inset 0 -2px 0 0 var(--sg-accent,#6366f1)}.sv-grid-pinned-row td{z-index:4;background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));border-bottom:1px solid var(--sg-pinned-border,color-mix(in oklab, var(--sg-accent,#2563eb) 24%, transparent));font-weight:600;position:sticky}.sv-grid-pinned-row-top td{top:var(--sg-thead-h,36px)}.sv-grid-pinned-row-bottom td{border-top:1px solid var(--sg-pinned-border,color-mix(in oklab, var(--sg-accent,#2563eb) 24%, transparent));bottom:0}.sv-grid-pinned-row-top[data-pinned-index=\"1\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px))}.sv-grid-pinned-row-top[data-pinned-index=\"2\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px) * 2)}.sv-grid-pinned-row-top[data-pinned-index=\"3\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px) * 3)}.sv-grid-pinned-row-bottom[data-pinned-index=\"1\"] td{bottom:var(--sg-pinned-row-h,32px)}.sv-grid-pinned-row-bottom[data-pinned-index=\"2\"] td{bottom:calc(var(--sg-pinned-row-h,32px) * 2)}.sv-grid-pinned-row-bottom[data-pinned-index=\"3\"] td{bottom:calc(var(--sg-pinned-row-h,32px) * 3)}.sv-grid-pinned-row td[data-pinned]{z-index:5}.sv-grid-group-header-row{background:var(--sg-header-bg,#eef2f8)}.sv-grid-group-header-cell{box-sizing:border-box;border-bottom:1px solid var(--sg-border,#d8dee9);border-right:1px solid var(--sg-border,#e2e8f0);text-align:center;color:var(--sg-header-fg,#475569);text-transform:uppercase;letter-spacing:.04em;padding:4px 8px;font-size:11.5px;font-weight:700}.sv-grid-group-header-placeholder{background:0 0;border-right-color:#0000}.sv-grid-group-header-label{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline-block;overflow:hidden}.sv-grid-group-toggle{max-width:100%;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:5px;padding:2px 6px;display:inline-flex}.sv-grid-group-toggle:hover{background:color-mix(in srgb, var(--sg-accent,#2563eb) 12%, transparent);color:var(--sg-accent,#2563eb)}.sv-grid-group-caret{flex-shrink:0;transition:transform .14s}.sv-grid-group-toggle.is-collapsed .sv-grid-group-caret{transform:rotate(-90deg)}.sv-grid-foot{z-index:6;background:var(--sg-header-bg,#f5f7fb);position:sticky;bottom:0}.sv-grid-container.sv-grid-narrow{-webkit-overflow-scrolling:touch;scroll-behavior:auto}.sv-grid-container{scrollbar-width:auto;-ms-overflow-style:auto;overscroll-behavior:contain;overflow-anchor:none;scroll-padding-top:var(--sg-thead-h,36px)}.sv-grid-container.sv-grid-container-custom-scrollbars{scrollbar-width:none;-ms-overflow-style:none}.sv-grid-container.sv-grid-container-custom-scrollbars::-webkit-scrollbar{display:none}.sv-grid-scrollbar{z-index:40;position:absolute}.sv-grid-scrollbar-vertical{top:0;width:16px;height:calc(100% - 16px);inset-inline-end:0}.sv-grid-scrollbar-corner{top:0;background:var(--sg-header-bg,#f5f7fb);border-bottom:1px solid var(--sg-header-border,#0f172a14);z-index:41;pointer-events:none;width:16px;position:absolute;inset-inline-end:0}.sv-grid-scrollbar-corner-br{inset-inline-end:0;background:var(--sg-header-bg,#eef2f8);z-index:42;pointer-events:none;width:16px;height:16px;position:absolute;bottom:0;box-shadow:inset 0 0 0 1px #0f172a0d}.sv-grid-scrollbar-horizontal{inset-inline-start:0;width:calc(100% - 16px);height:16px;bottom:0}.sv-grid-selection-column,.sv-grid-selection-cell{text-align:center;z-index:4;padding-inline:6px;position:sticky}.sv-grid-row-number-column,.sv-grid-row-number-cell{text-align:right;z-index:4;background:var(--sg-header-bg,#f5f7fb);color:var(--sg-muted,#64748b);font-variant-numeric:tabular-nums;padding-inline:8px;position:sticky;left:0}.sv-grid-row-number-head{color:inherit}.sv-grid-filter-row-control{box-sizing:border-box;padding:5px var(--sg-filter-cell-px,var(--sg-cell-px,7px));flex-direction:row;align-items:center;gap:4px;display:flex}.sv-grid-filter-row-control>.sv-field{flex:3 1 0;min-width:0}.sv-grid-filter-operator{box-sizing:border-box;flex:2 1 0;min-width:0}.sv-grid-filter-value{box-sizing:border-box;flex:3 1 0;min-width:0}.sv-grid-filter-value.sv-grid-filter-value-invalid,.sv-grid-tp-filter-input.sv-grid-filter-value-invalid{box-shadow:0 0 0 1px color-mix(in srgb, var(--sg-danger,#dc2626) 45%, transparent);border-color:var(--sg-danger,#dc2626)!important}.sv-grid-filter-chips{box-sizing:border-box;border:1px solid var(--sg-input-border,#8794a8);background:var(--sg-input-bg,#fff);border-radius:4px;flex-wrap:nowrap;flex:3 1 0;align-items:center;gap:3px;min-width:0;padding:2px 4px;display:flex;overflow:hidden}.sv-grid-filter-chip .sv-grid-filter-chip-label{max-width:84px}.sv-grid-filter-chip-more{cursor:pointer;font:inherit;color:var(--sg-text,inherit);border:0;flex:none;font-size:11px;line-height:16px}.sv-grid-filter-chip-more:hover{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 26%, transparent)}.sv-grid-filter-chips:focus-within{border-color:var(--sg-accent,#0b63f3);box-shadow:0 0 0 1px color-mix(in srgb, var(--sg-accent,#0b63f3) 45%, transparent)}.sv-grid-filter-chip{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 16%, transparent);max-width:120px;color:var(--sg-text,inherit);border-radius:3px;align-items:center;gap:2px;padding:0 2px 0 6px;font-size:11px;line-height:16px;display:inline-flex}.sv-grid-filter-chip-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-filter-chip-x{width:14px;height:14px;color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;padding:0;font-size:13px;line-height:1;display:inline-flex}.sv-grid-filter-chip-x:hover{opacity:1;background:color-mix(in srgb, var(--sg-accent,#0b63f3) 28%, transparent)}.sv-grid-filter-chips .sv-grid-filter-chip-input{background:0 0;outline:none;flex:14px;min-width:14px;padding:0 2px;box-shadow:none!important;border:0!important}.sv-grid-filter-value.sv-grid-filter-value-pulse{animation:.7s ease-out sv-grid-filter-pulse}@keyframes sv-grid-filter-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--sg-accent,#0b63f3) 55%, transparent)}70%{box-shadow:0 0 0 6px color-mix(in srgb, var(--sg-accent,#0b63f3) 0%, transparent)}to{box-shadow:0 0 0 0 color-mix(in srgb, var(--sg-accent,#0b63f3) 0%, transparent)}}.sv-grid-checkbox{border:1px solid var(--sg-input-border,#8794a8);background:var(--sg-input-bg,#fff);width:16px;height:16px;color:var(--sg-accent,#0b63f3);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:0;transition:border-color .12s,background-color .12s;display:inline-flex;position:relative}.sv-grid-fr-editor{box-sizing:border-box;width:100%}select.sv-grid-fr-editor{height:100%;min-height:26px}.sv-grid-fr-checkbox{width:16px;height:16px;accent-color:var(--sg-accent,#3b82f6);cursor:pointer}.sv-grid-cell-editor-color{cursor:pointer;background:0 0;border:0;width:100%;height:100%;padding:2px}.sv-grid-cell-editor-color::-webkit-color-swatch-wrapper{padding:0}.sv-grid-cell-editor-color::-webkit-color-swatch{border:0;border-radius:4px}.sv-grid-cell-editor-color::-moz-color-swatch{border:0;border-radius:4px}.sv-grid-rating-editor{align-items:center;gap:1px;height:100%;display:inline-flex}.sv-grid-rating-star{cursor:pointer;color:var(--sg-rating-empty,#cbd5e1);background:0 0;border:0;padding:0 1px;font-size:18px;line-height:1;transition:color 80ms,transform 80ms}.sv-grid-rating-star-on{color:var(--sg-rating-on,#f59e0b)}.sv-grid-rating-star:hover{color:var(--sg-rating-hover,#fbbf24);transform:scale(1.12)}.sv-grid-rating-clear{color:var(--sg-muted,#94a3b8);cursor:pointer;background:0 0;border:0;margin-left:4px;font-size:14px}.sv-grid-rating-clear:hover{color:var(--sg-fg,#0f172a)}.sv-grid-checkbox[aria-checked=true],.sv-grid-checkbox[aria-checked=mixed]{border-color:var(--sg-accent,#2563eb);background:var(--sg-accent,#2563eb);color:var(--sg-on-accent,#fff)}.sv-grid-checkbox[aria-checked=true]:after{content:\"\";border-bottom:2px solid;border-right:2px solid;flex:none;width:5px;height:9px;transform:rotate(40deg)translate(-1px,-1px)}.sv-grid-checkbox[aria-checked=mixed]:after{content:\"\";background:currentColor;border-radius:1px;flex:none;width:8px;height:2px}.sv-grid-checkbox:focus-visible{outline:2px solid var(--sg-accent,#0b63f3);outline-offset:1px}.sv-grid-checkbox-readonly{cursor:default;pointer-events:none}@keyframes sv-grid-cell-flash-kf{0%{background-color:var(--sg-cell-flash,color-mix(in oklab, var(--sg-accent,#3b82f6) 42%, transparent))}to{background-color:#0000}}.sv-grid-cell-flash{animation:.7s ease-out sv-grid-cell-flash-kf}@media (prefers-reduced-motion:reduce){.sv-grid-cell-flash{animation:none}}.sv-grid-cell-active,.sv-grid-cell-editing{z-index:20;box-shadow:inset 0 0 0 2px var(--sg-accent,#0b63f3);outline:none;position:relative;overflow:visible}.sv-grid-cell.sv-grid-cell-editing:after{content:\"\";border:2px solid var(--sg-accent,#0b63f3);pointer-events:none;position:absolute;inset:-1px}.sv-grid-cell.sv-grid-cell-editing{box-shadow:none}.sv-grid-cell.sv-grid-cell-editing .sv-grid-cell-editor:focus,.sv-grid-cell.sv-grid-cell-editing .sv-grid-dropdown-trigger:focus,.sv-grid-cell.sv-grid-cell-editing .sv-dtp__field:focus-within,.sv-grid-cell.sv-grid-cell-editing .sv-grid-checkbox:focus-visible{box-shadow:none;outline:none}.sv-grid-cell-note-corner{background:linear-gradient(45deg, transparent 50%, var(--sg-note-corner,#f59e0b) 50%);cursor:help;z-index:6;width:12px;height:12px;position:absolute;top:0;right:0}.sv-grid-cell-note-corner:before{content:\"\";position:absolute;inset:-3px -3px 0 0}.sv-grid-fill-handle{background:var(--sg-accent,#0b63f3);border:1px solid var(--sg-bg,#fff);box-sizing:border-box;cursor:crosshair;z-index:15;touch-action:none;width:9px;height:9px;position:absolute;bottom:0;right:0}.sv-grid-fill-handle:hover{transform-origin:100% 100%;transform:scale(1.3)}.sv-grid-selection-bar-upsell{z-index:45;max-width:calc(100% - 24px);position:absolute;left:50%;transform:translate(-50%)}.sv-grid-selection-bar-upsell[data-position=bottom]{bottom:16px}.sv-grid-selection-bar-upsell[data-position=top]{top:16px}.sv-grid-root[data-move-grab=true],.sv-grid-root[data-move-grab=true] .sv-grid-cell{cursor:move!important}.sv-grid-root[data-move-grab=true] .sv-grid-fill-handle{cursor:crosshair!important}.sv-grid-cell[data-fill-top=true],.sv-grid-cell[data-fill-bottom=true],.sv-grid-cell[data-fill-left=true],.sv-grid-cell[data-fill-right=true]{--sv-fill-top:none;--sv-fill-bottom:none;--sv-fill-left:none;--sv-fill-right:none;--sv-fill-color:var(--sg-fill-marquee,var(--sg-accent,#2563eb))}.sv-grid-cell[data-fill-top=true]{--sv-fill-top:repeating-linear-gradient(to right, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-bottom=true]{--sv-fill-bottom:repeating-linear-gradient(to right, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-left=true]{--sv-fill-left:repeating-linear-gradient(to bottom, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-right=true]{--sv-fill-right:repeating-linear-gradient(to bottom, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-table .sv-grid-cell[data-fill-top=true],.sv-grid-table .sv-grid-cell[data-fill-bottom=true],.sv-grid-table .sv-grid-cell[data-fill-left=true],.sv-grid-table .sv-grid-cell[data-fill-right=true]{background-image:var(--sv-fill-top), var(--sv-fill-bottom), var(--sv-fill-left), var(--sv-fill-right);background-position:0 0,0 100%,0 0,100% 0;background-repeat:no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}.sv-grid-cell-editing{padding:0}.sv-grid-cell[data-selected-range=true]{background:var(--sg-selection-bg,#eef4ff);--sv-range-top:0 0 0 transparent;--sv-range-bottom:0 0 0 transparent;--sv-range-left:0 0 0 transparent;--sv-range-right:0 0 0 transparent;box-shadow:var(--sv-range-top), var(--sv-range-bottom), var(--sv-range-left), var(--sv-range-right)}.sv-grid-cell[data-range-top=true]{--sv-range-top:inset 0 2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-bottom=true]{--sv-range-bottom:inset 0 -2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-left=true]{--sv-range-left:inset 2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-right=true]{--sv-range-right:inset -2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-top=true],.sv-grid-cell[data-range-bottom=true],.sv-grid-cell[data-range-left=true],.sv-grid-cell[data-range-right=true],.sv-grid-cell.sv-merge-edge-right,.sv-grid-cell.sv-merge-edge-bottom{z-index:3;position:relative}.sv-grid-cell.sv-merge-edge-right{box-shadow:inset -2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell.sv-merge-edge-bottom{box-shadow:inset 0 -2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell.sv-merge-in-range{background:var(--sg-selection-bg,#eef4ff)}.sv-grid-cell-editor{background:var(--sg-input-bg,#fff);box-sizing:border-box;width:100%;height:100%;font:inherit;color:inherit;border:0;outline:none;padding:0 8px;position:absolute;inset:0}.sv-grid-column-filter,.sv-grid-filter-value,.sv-grid-global-filter input,.sv-grid-menu-search,.sv-grid-menu-condition-value{background:var(--sg-input-bg,#fff);color:var(--sg-fg,#0f172a);border:1px solid var(--sg-input-border,#cbd5e1);box-sizing:border-box;font:inherit;border-radius:5px;padding:0 8px}.sv-grid-column-filter{width:100%;height:28px;font-size:.8125rem}.sv-grid-global-filter{color:var(--sg-muted,#64748b);align-items:center;gap:8px;margin-bottom:8px;font-size:.8125rem;font-weight:550;display:inline-flex}.sv-grid-global-filter input{min-width:220px;height:30px;font-size:.8125rem}.sv-grid-column-filter::placeholder,.sv-grid-filter-value::placeholder,.sv-grid-menu-search::placeholder,.sv-grid-global-filter input::placeholder,.sv-grid-cell-editor::placeholder{color:var(--sg-muted,#64748b);opacity:.7}.sv-grid-global-filter input:focus,.sv-grid-filter-value:focus,.sv-grid-column-filter:focus,.sv-grid-menu-search:focus,.sv-grid-menu-condition-value:focus,.sv-grid-menu-operator:focus,.sv-grid-cell-editor:focus{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent);outline:none}.sv-grid-cell-editor-number,.sv-grid-cell-editor-date,.sv-grid-cell-editor-datetime{width:100%;height:100%}.sv-grid-cell.sv-grid-cell-editing .sv-dtp{width:auto;display:block;position:absolute;inset:0}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__field{height:100%;box-shadow:none;border:0;border-radius:0;padding-inline:0}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__input{font:inherit}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__clear,.sv-grid-cell.sv-grid-cell-editing .sv-dtp__toggle,.sv-grid-filter-row-control>.sv-field .sv-dtp__toggle{width:20px;height:20px}.sv-grid-filter-row-control>.sv-field .sv-dtp__toggle{flex:0 auto;min-width:0}.sv-grid-filter-row-control>.sv-field .sv-dtp__clear{display:none}.sv-grid-filter-row-control>.sv-field .sv-dri__field{gap:3px;padding-inline:4px 2px}.sv-grid-filter-row-control>.sv-field .sv-dri__clear{flex:0 auto;width:20px;min-width:0;height:20px}.sv-grid-cell-editor-list{appearance:auto;width:100%;height:100%;font:inherit;color:inherit;background:var(--sg-input-bg,#fff);box-sizing:border-box;border:0;padding:0 6px}.sv-grid-cell-editor-list[multiple]{z-index:5;border:1px solid var(--sg-accent,#0b63f3);background:var(--sg-input-bg,#fff);height:auto;min-height:100%;max-height:220px;padding:4px;position:absolute;top:0;left:0;right:0;box-shadow:0 8px 24px #0f172a2e}.sv-grid-cell-editor-chips{background:var(--sg-header-bg,var(--sg-bg,#fff));min-height:calc(100% + 2px);color:var(--sg-fg,#0f172a);box-sizing:border-box;z-index:1000;border:1px solid var(--sg-accent,#2563eb);border-radius:var(--sg-radius,6px);align-items:flex-start;padding:4px 6px;display:flex;position:absolute;top:-1px;left:-1px;right:-1px;overflow:visible;box-shadow:0 12px 28px #00000073}.sv-grid-cell-editing:has(.sv-grid-cell-editor-chips){outline:none}.sv-grid-chips-row{flex-wrap:wrap;align-items:center;gap:4px;width:100%;display:flex}.sv-grid-chip-input{min-width:60px;font:inherit;color:inherit;background:0 0;border:0;outline:none;flex:80px;padding:2px 4px}.sv-grid-chip-picker{min-width:80px;font:inherit;color:inherit;background:var(--sg-bg,#fff);border:1px solid #0f172a26;border-radius:4px;flex:100px;padding:2px 4px}.sv-grid-chip-commit{text-transform:uppercase;letter-spacing:.04em;color:#fff;background:var(--sg-accent,#0b63f3);cursor:pointer;border:0;border-radius:4px;padding:3px 8px;font-size:11px}.sv-grid-chip-commit:hover{filter:brightness(1.1)}.sv-grid-chips-display{vertical-align:middle;flex-wrap:nowrap;align-items:center;gap:4px;max-width:100%;display:inline-flex}.sv-grid-sparkline{vertical-align:middle;display:inline-block;overflow:visible}.sv-grid-cf-bg{z-index:0;pointer-events:none;position:absolute;inset:0}.sv-grid-cf-bar{z-index:0;opacity:.85;pointer-events:none;border-radius:0 2px 2px 0;position:absolute;top:0;bottom:0;left:0}.sv-grid-cell-cf{position:relative}.sv-grid-cell-invalid{box-shadow:inset 0 0 0 1px var(--sg-invalid-border,#ef444473);color:var(--sg-invalid-fg,#b91c1c);background-color:var(--sg-invalid-bg,#ef444424)!important}.sv-grid-cell-invalid.sv-grid-cell-active{box-shadow:inset 0 0 0 2px var(--sg-invalid-border,#ef4444b3)}.sv-grid-status-bar{color:var(--sg-fg);background:var(--sg-header-bg,#f1f5f9);border:1px solid var(--sg-border,#e2e8f0);border-top:0;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:18px;padding:6px 14px;font-size:12px;display:flex}.sv-grid-status-item{font-variant-numeric:tabular-nums;font-weight:600}.sv-grid-status-label{color:var(--sg-muted,#64748b);margin-right:5px;font-weight:400}.sv-grid-cf-content{z-index:1;position:relative}.sv-grid-cf-icon{margin-right:5px;font-size:.95em}.sv-grid-chip{background:color-mix(in srgb, var(--sg-accent,#2563eb) 18%, transparent);color:var(--sg-fg,inherit);border:1px solid color-mix(in srgb, var(--sg-accent,#2563eb) 35%, transparent);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:.85em;line-height:1.4;display:inline-flex}.sv-grid-chip-removable{padding-right:2px}.sv-grid-chip-remove{background:color-mix(in srgb, var(--sg-fg,#0f172a) 18%, transparent);width:16px;height:16px;color:inherit;cursor:pointer;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.sv-grid-chip-remove:hover{color:#fff;background:#dc2626b3}.sv-grid-icon{flex:none;width:1em;height:1em;display:block}.sv-grid-header-cell{width:100%;min-width:0;min-height:var(--sg-header-min-height,auto);align-items:center;gap:2px;display:flex}.sv-grid-header-sort{min-width:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;align-items:center;gap:4px;padding:2px;display:flex}.sv-grid-header-custom{text-align:left;cursor:pointer;outline:none;flex:auto;align-items:center;gap:4px;min-width:0;padding:2px;display:flex}.sv-grid-header-label{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.sv-grid-header-icon{color:var(--sg-muted,#5b6b85);flex:none;font-size:13px;display:inline-flex}.sv-grid-header-icon-hint{opacity:0;transition:opacity .12s}.sv-grid-column:hover .sv-grid-header-icon-hint{opacity:.4}.sv-grid-header-icon-flag{color:var(--sg-accent,#0b63f3)}.sv-grid-col-menu-btn{width:0;height:22px;color:var(--sg-muted,#5b6b85);cursor:pointer;opacity:0;pointer-events:none;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:15px;transition:width .14s,opacity .14s,background-color .12s;display:inline-flex;overflow:hidden}.sv-grid-column:hover .sv-grid-col-menu-btn,.sv-grid-col-menu-btn.is-open,.sv-grid-col-menu-btn:focus-visible,.sv-grid-col-filter-btn.is-active{opacity:1;pointer-events:auto;width:22px}.sv-grid-col-menu-btn:hover,.sv-grid-col-menu-btn.is-open{background:var(--sg-row-hover-bg,#e2e8f3)}.sv-grid-filter-operator-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);height:24px;color:var(--sg-fg,#334155);cursor:pointer;border-radius:4px;flex:none;align-items:center;gap:2px;padding:0 4px;font-size:13px;display:inline-flex}.sv-grid-filter-operator-btn.is-open{border-color:var(--sg-accent,#0b63f3)}.sv-grid-caret{color:var(--sg-muted,#94a3b8);font-size:9px;display:inline-flex}.sv-grid-menu-backdrop{z-index:900;background:0 0;position:fixed;inset:0}.sv-grid-menu{z-index:901;overscroll-behavior:contain;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#d6dee9);max-height:calc(100vh - 24px);color:var(--sg-fg,#1f2937);border-radius:8px;padding:4px;font-size:13px;position:fixed;overflow:auto;box-shadow:0 12px 28px #0f172a2e}.sv-grid-column-menu{width:260px}.sv-grid-menu-tabs{border-bottom:1px solid var(--sg-border,#e2e8f0);gap:2px;margin:-2px -2px 4px;padding:2px 2px 0;display:flex}.sv-grid-menu-tab{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:6px;font-size:12px;font-weight:600}.sv-grid-menu-tab:hover{color:var(--sg-fg,#0f172a)}.sv-grid-menu-tab.is-active{color:var(--sg-accent,#2563eb);border-bottom-color:var(--sg-accent,#2563eb)}.sv-grid-operator-menu{width:184px}.sv-grid-context-menu{min-width:180px}.sv-grid-comment-editor{width:240px;padding:8px}.sv-grid-comment-textarea{resize:vertical;border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);width:100%;min-height:60px;color:var(--sg-fg,#0f172a);font:inherit;border-radius:4px;outline:none;padding:6px 8px;font-size:13px}.sv-grid-comment-textarea:focus{border-color:var(--sg-accent,#6366f1)}.sv-grid-comment-actions{align-items:center;gap:6px;margin-top:8px;display:flex}.sv-grid-comment-spacer{flex:auto}.sv-grid-comment-actions button{border:1px solid var(--sg-border,#cbd5e1);background:var(--sg-bg,#fff);color:var(--sg-fg,#1f2937);font:inherit;cursor:pointer;border-radius:4px;padding:4px 10px;font-size:12px}.sv-grid-comment-save{border-color:var(--sg-accent,#6366f1)!important;background:var(--sg-accent,#6366f1)!important;color:#fff!important}.sv-grid-comment-remove{color:var(--sg-danger,#dc2626)!important}.sv-grid-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:7px 10px;display:flex}.sv-grid-menu-item:hover{background:var(--sg-row-hover-bg,#eef2f8)}.sv-grid-menu.sv-grid-in-suggest{min-width:140px;max-width:260px;padding:0;font-size:12px;overflow:visible}.sv-grid-menu-item[aria-checked=true]{background:var(--sg-selection-bg,#eaf2ff);color:var(--sg-accent,#0b63f3)}.sv-grid-menu-sep{background:var(--sg-border,#e6ebf2);height:1px;margin:4px 6px}.sv-grid-menu-filter{padding:4px 6px 6px}.sv-grid-menu-filter-head{color:var(--sg-muted,#475569);align-items:center;gap:6px;padding:2px 0 6px;font-weight:600;display:flex}.sv-grid-menu-head-note{color:var(--sg-muted,#64748b);opacity:.85;margin-inline-start:auto;font-size:.85em;font-weight:500}.sv-grid-menu-search{box-sizing:border-box;border:1px solid var(--sg-input-border,#cbd5e1);width:100%;height:28px;font:inherit;border-radius:5px;margin-bottom:6px;padding:0 8px}.sv-grid-menu-filter-row{gap:4px;margin-bottom:6px;display:flex}.sv-grid-menu-operator-group{gap:2px;margin-bottom:6px;display:flex}.sv-grid-menu-operator-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);height:28px;color:var(--sg-fg,#475569);cursor:pointer;border-radius:4px;flex:1 1 0;justify-content:center;align-items:center;padding:0;transition:background-color .1s,color .1s,border-color .1s;display:inline-flex}.sv-grid-menu-operator-btn:hover{background:var(--sg-row-hover-bg,#eef2f8)}.sv-grid-menu-operator-btn.is-active{background:var(--sg-accent,#0b63f3);border-color:var(--sg-accent,#0b63f3);color:#fff}.sv-grid-menu-condition-value{box-sizing:border-box;border:1px solid var(--sg-input-border,#cbd5e1);min-width:0;height:28px;font:inherit;border-radius:5px;flex:1 1 0;padding:0 8px}.sv-grid-menu-add-cond{color:var(--sg-accent,#3b82f6);border:1px dashed var(--sg-border,#cbd5e1);cursor:pointer;background:0 0;border-radius:5px;align-self:flex-start;margin-top:2px;padding:3px 8px;font-size:11.5px;font-weight:600}.sv-grid-menu-add-cond:hover{background:color-mix(in oklab, var(--sg-accent,#3b82f6) 8%, transparent);border-style:solid}.sv-grid-menu-join{align-items:center;gap:2px;margin:2px 0;display:inline-flex}.sv-grid-menu-join button{color:var(--sg-muted,#64748b);border:1px solid var(--sg-border,#cbd5e1);cursor:pointer;background:0 0;padding:2px 10px;font-size:11px;font-weight:700}.sv-grid-menu-join button:first-child{border-radius:5px 0 0 5px}.sv-grid-menu-join button:nth-child(2){border-left:0;border-radius:0}.sv-grid-menu-join button.is-on{background:var(--sg-accent,#3b82f6);color:#fff;border-color:var(--sg-accent,#3b82f6)}.sv-grid-menu-join-x{margin-left:auto;font-size:14px;line-height:1;border-radius:5px!important;padding:2px 7px!important}.sv-grid-menu .sv-listbox{overscroll-behavior:contain}.sv-grid-facet{cursor:pointer;align-items:center;gap:8px;padding:4px 8px;display:flex}.sv-grid-facet:hover{background:var(--sg-row-hover-bg,#f4f6fa)}.sv-grid-facet-all{padding-inline-start:3px;font-weight:600}.sv-grid-facet input{flex:none}.sv-grid-facet-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-facet-empty,.sv-grid-facet-note{color:var(--sg-muted,#94a3b8);padding:6px 8px;font-size:12px}.sv-grid-menu-actions{justify-content:flex-end;gap:6px;padding-top:8px;display:flex}.sv-grid-menu-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);color:var(--sg-fg,#334155);font:inherit;cursor:pointer;border-radius:5px;padding:5px 10px}.sv-grid-menu-btn-primary{background:var(--sg-accent,#0b63f3);border-color:var(--sg-accent,#0b63f3);color:#fff}.sv-grid-menu-item:disabled,.sv-grid-menu-btn:disabled{opacity:.4;cursor:default}.sv-grid-menu-item:disabled:hover{background:0 0}.sv-grid-group-row>.sv-grid-cell{background:var(--sg-header-bg,#eef2f8);cursor:pointer;font-weight:600}.sv-grid-row-selected>.sv-grid-cell{background:var(--sg-selection-bg,#eaf2ff)}.sv-grid-group-footer-row>.sv-grid-cell{background:var(--sg-header-bg,#eef2f8);border-top:1px solid var(--sg-border,#d7dce5);font-weight:600}.sv-grid-row-auto-height>.sv-grid-cell{white-space:normal;overflow-wrap:anywhere;text-overflow:clip;vertical-align:top;padding-top:6px;padding-bottom:6px;overflow:visible}.sv-grid-grand-total-row>.sv-grid-cell{border-top:3px double var(--sg-border,#d7dce5);font-weight:700}.sv-grid-tree-indent{flex:none;display:inline-block}.sv-grid-tree-toggle{width:14px;height:14px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;margin-right:3px;padding:0;font-size:10px;line-height:1;display:inline-flex}.sv-grid-tree-toggle:hover{background:var(--sg-header-bg,#eef2f8);color:var(--sg-fg,#0f172a)}.sv-grid-tree-toggle .sv-grid-icon,.sv-grid-group-toggle .sv-grid-icon{width:12px;height:12px;transition:transform .15s}.sv-grid-tree-toggle[aria-expanded=true] .sv-grid-icon,.sv-grid-group-toggle[aria-expanded=true] .sv-grid-icon{transform:rotate(90deg)}.sv-grid-tree-toggle:focus-visible{outline:2px solid var(--sg-accent,#2563eb);outline-offset:1px}.sv-grid-autogroup-label{color:var(--sg-fg,#0f172a);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.sv-grid-tree-spacer{flex:none;width:14px;margin-right:3px;display:inline-block}.sv-grid-group-cell{padding:0 12px}.sv-grid-group-content{align-items:center;gap:6px;display:inline-flex}.sv-grid-group-toggle{color:var(--sg-fg,#334155);cursor:pointer;background:0 0;border:0;padding:0 4px 0 0;font-size:11px;line-height:1}.sv-grid-group-count{color:var(--sg-muted,#64748b);margin-left:6px;font-size:12px;font-weight:400}.sv-grid-group-agg{color:var(--sg-fg);white-space:nowrap;margin-left:10px;font-size:12px;font-weight:600}.sv-grid-group-agg-label{color:var(--sg-muted,#64748b);margin-right:4px;font-weight:400}.sv-grid-group-agg-label:after{content:\":\"}.sv-grid-group-child-indent{width:18px;display:inline-block}.sv-grid-tooltip{z-index:10000;color:#f1f5f9;border-radius:var(--sg-radius,6px);pointer-events:none;white-space:pre-wrap;word-wrap:break-word;background:#0f172a;max-width:280px;padding:8px 10px;font-size:12px;line-height:1.45;position:fixed;box-shadow:0 8px 24px #0f172a47}[data-theme=dark] .sv-grid-tooltip{color:#0f172a;background:#f1f5f9}.sv-grid-cell-editor-textarea{border:1px solid var(--sg-accent,#6366f1);background:var(--sg-bg,#fff);width:100%;min-height:80px;color:var(--sg-fg,#0f172a);resize:vertical;box-shadow:0 0 0 2px var(--sg-focus-ring,#6366f166);border-radius:4px;outline:none;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1.4}.sv-grid-autocomplete{width:100%;position:relative}.sv-grid-autocomplete-list{z-index:30;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#d6dee9);border-radius:var(--sg-radius,6px);max-height:220px;margin-top:2px;padding:4px;position:absolute;top:100%;left:0;right:0;overflow:auto;box-shadow:0 12px 28px #0f172a2e}.sv-grid-autocomplete-option{text-align:left;width:100%;color:var(--sg-fg,#1f2937);font:inherit;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:4px;padding:5px 8px;font-size:13px;display:block;overflow:hidden}.sv-grid-autocomplete-option:hover,.sv-grid-autocomplete-option[aria-selected=true]{background:var(--sg-row-hover-bg,#6366f11a)}.sv-grid-find{z-index:60;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);border:1px solid var(--sg-border,#cbd5e1);border-radius:8px;align-items:center;gap:4px;min-width:280px;padding:6px 8px;display:inline-flex;position:absolute;top:8px;right:8px;box-shadow:0 10px 25px #0f172a2e}.sv-grid-find-icon{width:14px;height:14px;color:var(--sg-muted,#94a3b8);flex:none;margin-left:2px}.sv-grid-find-input{min-width:0;color:inherit;background:0 0;border:0;outline:none;flex:1;padding:2px 6px;font-size:13px}.sv-grid-find-input::placeholder{color:var(--sg-muted,#94a3b8)}.sv-grid-find-count{color:var(--sg-muted,#64748b);font-variant-numeric:tabular-nums;white-space:nowrap;padding:0 4px;font-size:11px}.sv-grid-find-step,.sv-grid-find-close{width:22px;height:22px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;display:inline-flex}.sv-grid-find-step:hover:not(:disabled),.sv-grid-find-close:hover{background:var(--sg-row-hover-bg,#94a3b81f);color:var(--sg-fg,#0f172a)}.sv-grid-find-step:disabled{opacity:.3;cursor:default}.sv-grid-pagination{border:1px solid var(--sg-border,#e2e8f0);border-radius:0 0 var(--sg-radius,6px) var(--sg-radius,6px);background:var(--sg-header-bg,#f1f5f9);color:var(--sg-fg,#0f172a);border-top:0;justify-content:flex-end;align-items:center;gap:24px;margin-top:0;padding:12px 16px;font-size:13px;display:flex}.sv-grid-pagination-top{border-top:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px) var(--sg-radius,6px) 0 0;border-bottom:0}.sv-grid-pagination-pagesize{color:var(--sg-muted,#64748b);align-items:center;gap:8px;display:inline-flex}.sv-grid-pagination-pagesize-dd{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);border-radius:5px;min-width:62px;height:28px;position:relative}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown{height:100%;color:var(--sg-fg,#0f172a);background:0 0;border-radius:5px;font-size:13px;position:absolute;inset:0}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-trigger{width:100%;height:100%;min-height:28px;color:var(--sg-fg,#0f172a);font:inherit;text-align:start;cursor:pointer;box-sizing:border-box;background:0 0;border:0;border-radius:5px;outline:none;align-items:center;gap:6px;padding:0 8px;font-size:13px;display:flex}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-label{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-caret{opacity:.7;flex:none;font-size:10px;line-height:1}.sv-grid-pagination-pagesize-dd:focus-within{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent)}.sv-grid-pagination-range{color:var(--sg-fg,#0f172a)}.sv-grid-pagination-nav{align-items:center;gap:4px;display:inline-flex}.sv-grid-pagination-btn{width:28px;height:28px;color:var(--sg-fg,#0f172a);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;padding:0;font-size:16px;transition:background-color .1s,color .1s;display:inline-flex}.sv-grid-pagination-btn:hover:not(:disabled){background:var(--sg-input-bg,#fff);color:var(--sg-accent,#2563eb)}.sv-grid-pagination-btn:disabled{color:var(--sg-muted,#64748b);opacity:.4;cursor:default}.sv-grid-pagination-label{color:var(--sg-fg,#0f172a);margin:0 8px}.sv-grid-no-scroll .sv-grid-scrollbar-corner,.sv-grid-no-scroll .sv-grid-scrollbar{display:none}.sv-grid-scrollbar-corner,.sv-grid-scrollbar-corner-br{border-bottom-color:var(--sg-border,#e2e8f0)}.sv-grid-menu-operator-select{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);width:100%;height:28px;color:var(--sg-fg,#0f172a);font:inherit;cursor:pointer;appearance:none;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 12px) 12px,calc(100% - 8px) 12px;background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-radius:5px;margin-bottom:6px;padding:0 22px 0 8px;font-size:13px}.sv-grid-menu-operator-select:focus{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 40%, transparent);outline:none}.sv-grid-menu-operator-btn.is-active{color:var(--sg-on-accent,#fff)}.sv-grid-filter-menu{width:260px}.sv-grid-choose-columns-menu{width:240px}.sv-grid-facet input[type=checkbox]{accent-color:var(--sg-accent,#2563eb);cursor:pointer;width:14px;height:14px}.sv-grid-menu-item-chevron{opacity:.55;margin-left:auto;transform:rotate(-90deg)}.sv-grid-menu-item.is-open .sv-grid-menu-item-chevron{opacity:1}.sv-grid-menu-search{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20 20l-4.5-4.5'/%3E%3C/svg%3E\");background-position:8px;background-repeat:no-repeat;background-size:14px 14px;padding-left:28px}.sv-grid-menu-filter>*+*{margin-top:6px}.sv-grid-col-filter-btn.is-active{color:var(--sg-accent,#2563eb)}.sv-grid-row-number-column,.sv-grid-row-number-cell{border-right-color:var(--sg-header-bg,#f1f5f9)}.sv-grid-group-row>.sv-grid-cell{color:var(--sg-header-fg,#0f172a)}.sv-grid-filter-operator-btn{opacity:.85}.sv-grid-filter-operator-btn:hover{opacity:1;border-color:var(--sg-accent,#2563eb)}.sv-grid-filter-operator-btn.is-open{opacity:1}.sv-grid-board-search{border:1px solid var(--sg-border,#e4e7ec);border-radius:var(--sg-radius,8px);background:var(--sg-bg,#fff);color:color-mix(in srgb, var(--sg-fg,#101828) 55%, transparent);align-items:center;gap:6px;max-width:280px;margin-bottom:8px;padding:5px 9px;display:flex}.sv-grid-board-search:focus-within{border-color:var(--sg-accent,#3b82f6)}.sv-grid-board-search input{font:inherit;color:var(--sg-fg,#101828);background:0 0;border:0;outline:none;flex:auto;font-size:.82rem}.sv-grid-scheduler-upsell{text-align:left;border:1px dashed var(--sg-border,#e4e7ec);border-radius:var(--sg-radius,8px);background:color-mix(in srgb, var(--sg-fg,#1f2937) 5%, transparent);height:100%;color:color-mix(in srgb, var(--sg-fg,#101828) 70%, transparent);flex-direction:column;justify-content:center;align-items:flex-start;gap:6px;padding:24px;display:flex}.sv-grid-scheduler-upsell strong{font-size:.95rem}.sv-grid-scheduler-upsell p{max-width:42ch;margin:0;font-size:.85rem}.sv-grid-upsell-license{opacity:.85;font-size:.8rem}.sv-grid-upsell-license a{color:inherit;text-underline-offset:2px;text-decoration:underline}.sv-grid-scheduler-upsell code{background:color-mix(in srgb, var(--sg-fg,#101828) 8%, transparent);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82em}.sv-grid-chart-toggle svg{flex:none}.sv-grid-chart-panel{z-index:900;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);flex-direction:column;display:flex;position:absolute}.sv-grid-chart-panel.is-bottom{border-top:1px solid var(--sg-border,#e2e8f0);bottom:0;left:0;right:0;box-shadow:0 -8px 24px #0000001f}.sv-grid-chart-panel.is-right{border-left:1px solid var(--sg-border,#e2e8f0);top:0;bottom:0;right:0;box-shadow:-8px 0 24px #0000001f}.sv-grid-chart-panel.is-floating{border:1px solid var(--sg-border,#e2e8f0);border-radius:calc(var(--sg-radius,6px) + 2px);inset:auto;overflow:hidden;box-shadow:0 12px 40px #00000047}.sv-grid-chart-resizer{z-index:1;touch-action:none;background:0 0;position:absolute}.sv-grid-chart-panel.is-bottom>.sv-grid-chart-resizer{cursor:ns-resize;height:7px;top:-3px;left:0;right:0}.sv-grid-chart-panel.is-right>.sv-grid-chart-resizer{cursor:ew-resize;width:7px;top:0;bottom:0;left:-3px}.sv-grid-chart-resizer:hover,.sv-grid-chart-resizer.is-dragging{background:color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent)}.sv-grid-chart-float-resizer{cursor:nwse-resize;touch-action:none;background:linear-gradient(135deg, transparent 50%, color-mix(in srgb, var(--sg-muted,#64748b) 55%, transparent) 50%);border-bottom-right-radius:calc(var(--sg-radius,6px) + 2px);width:16px;height:16px;position:absolute;bottom:0;right:0}.sv-grid-chart-panel-head{border-bottom:1px solid var(--sg-border,#e2e8f0);background:var(--sg-header-bg,#f8fafc);flex-direction:column;align-items:stretch;gap:8px;padding:8px 12px 10px;display:flex}.sv-grid-chart-drawer-title{align-items:center;gap:7px;display:flex}.sv-grid-chart-drawer-title.is-drag-handle{cursor:move;-webkit-user-select:none;user-select:none}.sv-grid-chart-title-icon{color:var(--sg-accent,#2563eb);flex:none}.sv-grid-chart-title{letter-spacing:.01em;color:var(--sg-fg,#0f172a);font-size:13px;font-weight:700}.sv-grid-chart-drawer-title .sv-grid-chart-actions{margin-left:auto}.sv-grid-chart-actions{align-items:center;gap:6px;display:inline-flex}.sv-grid-chart-controls{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.sv-grid-chart-controls:empty{display:none}.sv-grid-chart-ctl{color:var(--sg-muted,#64748b);flex-direction:column;gap:2px;font-size:11px;font-weight:600;display:flex}.sv-grid-chart-ctl select{font:inherit;color:var(--sg-fg,#0f172a);background:var(--sg-input-bg,var(--sg-bg,#fff));border:1px solid var(--sg-input-border,var(--sg-border,#e2e8f0));border-radius:var(--sg-radius,6px);padding:4px 8px;font-size:12.5px;font-weight:400}.sv-grid-chart-toggle{color:var(--sg-muted,#64748b);cursor:pointer;white-space:nowrap;align-items:center;gap:5px;font-size:12px;font-weight:600;display:inline-flex}.sv-grid-chart-btn{font:inherit;border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);cursor:pointer;padding:5px 10px;font-size:12px;font-weight:550}.sv-grid-chart-btn:hover:not(:disabled){border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-chart-btn:disabled{opacity:.5;cursor:default}.sv-grid-chart-icon-btn{border-radius:var(--sg-radius,6px);width:24px;height:24px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.sv-grid-chart-icon-btn:hover{border-color:var(--sg-border,#e2e8f0);color:var(--sg-accent,#2563eb);background:var(--sg-bg,#fff)}.sv-grid-chart-close{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:18px;line-height:1}.sv-grid-chart-close:hover{color:var(--sg-fg,#0f172a)}.sv-grid-chart-panel-body{flex:1;justify-content:center;align-items:stretch;min-height:0;padding:4px 10px 8px;display:flex;overflow:hidden}.sv-grid-chart-panel-body>.sv-grid-chart{justify-content:center;width:100%}.sv-grid-chart-empty{color:var(--sg-muted,#64748b);text-align:center;max-width:42ch;margin:0;font-size:13px}.sv-grid-chart-export{display:inline-flex;position:relative}.sv-grid-chart-export-menu{z-index:5;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);flex-direction:column;min-width:150px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #0000002e}.sv-grid-chart-export-menu button{font:inherit;text-align:left;border-radius:calc(var(--sg-radius,6px) - 2px);color:var(--sg-fg,#0f172a);cursor:pointer;white-space:nowrap;background:0 0;border:0;padding:6px 10px;font-size:12.5px}.sv-grid-chart-export-menu button:hover:not(:disabled){background:var(--sg-hover-bg,color-mix(in srgb, var(--sg-accent,#2563eb) 10%, transparent))}.sv-grid-chart-export-menu button:disabled{opacity:.45;cursor:default}.sv-grid-chart-ai-btn{align-items:center;gap:4px;display:inline-flex}.sv-grid-chart-ai-btn.is-active{border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-chart-ai{flex-direction:column;gap:4px;display:flex}.sv-grid-chart-ai-row{align-items:center;gap:6px;display:flex}.sv-grid-chart-ai-input{min-width:0;font:inherit;color:var(--sg-fg,#0f172a);background:var(--sg-input-bg,var(--sg-bg,#fff));border:1px solid var(--sg-input-border,var(--sg-border,#e2e8f0));border-radius:var(--sg-radius,6px);flex:1;padding:5px 9px;font-size:12.5px}.sv-grid-chart-ai-input:focus{border-color:var(--sg-accent,#2563eb);outline:none}.sv-grid-chart-ai-msg{color:var(--sg-muted,#64748b);margin:0;font-size:12px}.sv-grid-chart-ai-msg.is-error{color:var(--sg-danger,#dc2626)}.sv-grid-chart-tabs{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sv-grid-chart-tab{border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);align-items:center;display:inline-flex;overflow:hidden}.sv-grid-chart-tab.is-active{border-color:var(--sg-accent,#2563eb);background:color-mix(in srgb, var(--sg-accent,#2563eb) 10%, transparent)}.sv-grid-chart-tab-label{font:inherit;color:var(--sg-fg,#0f172a);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;max-width:140px;padding:3px 8px;font-size:12px;font-weight:600;overflow:hidden}.sv-grid-chart-tab.is-active .sv-grid-chart-tab-label{color:var(--sg-accent,#2563eb)}.sv-grid-chart-tab-x{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 6px 0 2px;font-size:14px;line-height:1}.sv-grid-chart-tab-x:hover{color:var(--sg-fg,#0f172a)}\n/*$vite$:1*/";document.head.appendChild(s)}catch(e){}})();
|
|
17
|
+
;(function(){try{if(typeof document==='undefined')return;var s=document.createElement('style');s.setAttribute('data-svgrid','');s.textContent=".sv-grid-root{font-family:var(--sg-font,inherit);position:relative}.sv-grid-root[data-selbar]{--sg-selbar-reserve:68px}.sv-grid-root[data-selbar^=upsell]{--sg-selbar-reserve:116px}.sv-grid-root[data-selbar$=bottom] .sv-grid-container{padding-bottom:var(--sg-selbar-reserve)}.sv-grid-root[data-selbar$=top] .sv-grid-container{padding-top:var(--sg-selbar-reserve)}.sv-grid-sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.sv-grid-loading-overlay{z-index:18;pointer-events:auto;background:color-mix(in srgb, var(--sg-bg,#fff) 35%, transparent);position:absolute;inset:0}.sv-grid-loading-bar{background:color-mix(in srgb, var(--sg-accent,#2563eb) 18%, transparent);height:3px;position:absolute;top:0;left:0;right:0;overflow:hidden}.sv-grid-loading-bar:before{content:\"\";background:var(--sg-accent,#2563eb);width:40%;animation:1.1s ease-in-out infinite sv-grid-loading-slide;position:absolute;inset:0}@keyframes sv-grid-loading-slide{0%{transform:translate(-100%)}to{transform:translate(350%)}}.sv-grid-skeleton{top:var(--sg-thead-h,40px);padding:0;position:absolute;left:0;right:0;overflow:hidden}.sv-grid-skeleton-row{height:var(--sg-pinned-row-h,36px);border-bottom:1px solid var(--sg-border,#e2e8f0);align-items:center;display:flex}.sv-grid-skeleton-cell{box-sizing:border-box;flex-shrink:0;padding:0 12px}.sv-grid-skeleton-bar{background:linear-gradient(90deg, color-mix(in srgb, var(--sg-muted,#94a3b8) 18%, transparent) 25%, color-mix(in srgb, var(--sg-muted,#94a3b8) 32%, transparent) 50%, color-mix(in srgb, var(--sg-muted,#94a3b8) 18%, transparent) 75%);background-size:200% 100%;border-radius:4px;width:70%;height:10px;animation:1.3s linear infinite sv-grid-shimmer;display:block}@keyframes sv-grid-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sv-grid-toolbar{align-items:center;gap:8px;padding:6px 2px;display:flex}.sv-grid-toolbar-btn{border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);cursor:pointer;align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;font-weight:600;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.sv-grid-toolbar-btn:hover{border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-toolbar-btn.is-active{background:var(--sg-accent,#2563eb);border-color:var(--sg-accent,#2563eb);color:#fff}.sv-grid-advf-chip>.sv-grid-icon{width:13px;height:13px}.sv-grid-advf-chip{border:1px solid color-mix(in srgb, var(--sg-accent,#2563eb) 35%, transparent);background:color-mix(in srgb, var(--sg-accent,#2563eb) 12%, transparent);color:var(--sg-accent,#2563eb);border-radius:999px;align-items:center;gap:6px;padding:5px 6px 5px 11px;font-size:12.5px;font-weight:600;display:inline-flex}.sv-grid-advf-clear{width:18px;height:18px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;font-size:11px;transition:background-color .12s;display:inline-flex}.sv-grid-advf-clear:hover{background:color-mix(in srgb, var(--sg-accent,#2563eb) 25%, transparent)}.sv-grid-tool-panel{z-index:901;background:var(--sg-bg,#fff);border-left:1px solid var(--sg-border,#e2e8f0);flex-direction:column;width:250px;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-8px 0 24px #0000001f}.sv-grid-tool-panel-head{text-transform:uppercase;letter-spacing:.05em;color:var(--sg-muted,#64748b);border-bottom:1px solid var(--sg-border,#e2e8f0);justify-content:space-between;align-items:center;padding:8px 12px;font-size:12px;font-weight:700;display:flex}.sv-grid-tool-panel-close{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;font-size:14px}.sv-grid-tool-panel-list{flex:1;margin:0;padding:6px;list-style:none;overflow-y:auto}.sv-grid-tool-panel-item{border-radius:5px;justify-content:space-between;align-items:center;gap:6px;padding:3px 6px;display:flex}.sv-grid-tool-panel-item:hover{background:var(--sg-row-hover-bg,#94a3b81a)}.sv-grid-tool-panel-vis{min-width:0;color:var(--sg-fg,#0f172a);cursor:pointer;flex:1;align-items:center;gap:8px;font-size:13px;display:flex}.sv-grid-tool-panel-vis input{accent-color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-tool-panel-actions{flex-shrink:0;gap:2px;display:inline-flex}.sv-grid-tool-panel-btn{width:22px;height:22px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.sv-grid-tool-panel-btn:hover:not(:disabled){background:var(--sg-row-hover-bg,#94a3b82e);color:var(--sg-fg,#0f172a)}.sv-grid-tool-panel-btn.is-active{color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-btn:disabled{opacity:.35;cursor:default}.sv-grid-tool-panel-tabs{border-bottom:1px solid var(--sg-border,#e2e8f0);gap:2px;padding:6px 6px 0;display:flex}.sv-grid-tool-panel-tab{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:6px 8px;font-size:12px;font-weight:600}.sv-grid-tool-panel-tab:hover{color:var(--sg-fg,#0f172a)}.sv-grid-tool-panel-tab.is-active{color:var(--sg-accent,#2563eb);border-bottom-color:var(--sg-accent,#2563eb)}.sv-grid-tool-panel-filters{flex-direction:column;flex:1;gap:8px;padding:6px;display:flex;overflow-y:auto}.sv-grid-tp-filter{border:1px solid var(--sg-border,#e2e8f0);border-radius:6px;flex-direction:column;gap:4px;padding:6px;display:flex}.sv-grid-tp-filter.is-filtered{border-color:var(--sg-accent,#2563eb)}.sv-grid-tp-filter-head{justify-content:space-between;align-items:center;display:flex}.sv-grid-tp-filter-name{color:var(--sg-fg,#0f172a);font-size:12px;font-weight:600}.sv-grid-tp-filter-clear{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 2px;font-size:11px}.sv-grid-tp-filter-clear:hover{color:var(--sg-accent,#2563eb)}.sv-grid-tp-filter-op,.sv-grid-tp-filter-input{box-sizing:border-box;border:1px solid var(--sg-border,#e2e8f0);background:var(--sg-bg,#fff);width:100%;color:var(--sg-fg,#0f172a);border-radius:5px;padding:4px 6px;font-size:12px}.sv-grid-root-fill{flex-direction:column;height:100%;min-height:0;display:flex}.sv-grid-root-fill>.sv-grid-shell{flex:1 1 0;min-height:0;height:auto!important}.sv-grid-shell{border-bottom:1px solid var(--sg-border,#cbd5e1);position:relative}.sv-grid-table{table-layout:fixed;border-collapse:separate;border-spacing:0}.sv-grid-table:focus{outline:none}.sv-grid-column,.sv-grid-cell{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);-webkit-user-select:none;user-select:none;border-right:1px solid var(--sg-border,#e2e8f0);border-bottom:1px solid var(--sg-border,#e2e8f0);overflow:hidden}.sv-grid-table tr>:last-child.sv-grid-column,.sv-grid-table tr>:last-child.sv-grid-cell{border-right:0}.sv-grid-table:not(.sv-grid-no-row-hover) tbody tr:hover>.sv-grid-cell:not([data-selected-range=true]){background-color:var(--sg-row-hover-bg,#eef2ff)}.sv-grid-cell-active,.sv-grid-cell-has-fill-handle{position:relative}.sv-grid-cell-has-fill-handle{overflow:visible}.sv-grid-detail-row{height:auto!important}.sv-grid-detail-cell{text-overflow:clip;white-space:normal;background:var(--sg-bg,#fff);-webkit-user-select:text;user-select:text;height:auto;padding:0;overflow:visible}.sv-grid-cell[data-pinned=left],.sv-grid-column[data-pinned=left]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));box-shadow:inset -1px 0 0 var(--sg-pinned-divider,var(--sg-border,#cbd5e1)), 8px 0 12px -6px var(--sg-pinned-shadow-color,#0f172a38)}.sv-grid-cell[data-pinned=right],.sv-grid-column[data-pinned=right]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));box-shadow:inset 1px 0 0 var(--sg-pinned-divider,var(--sg-border,#cbd5e1)), -8px 0 12px -6px var(--sg-pinned-shadow-color,#0f172a38)}.sv-grid-head .sv-grid-column[data-pinned=left],.sv-grid-head .sv-grid-column[data-pinned=right]{background:var(--sg-pinned-header-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 86%, var(--sg-accent,#2563eb) 14%));font-weight:600}.sv-grid-row-alt>.sv-grid-cell{background:var(--sg-row-alt-bg,#f8fafc)}.sv-grid-row-alt>.sv-grid-cell[data-pinned]{background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-row-selected>.sv-grid-cell[data-pinned]{background:linear-gradient(color-mix(in srgb, var(--sg-selection-bg,#dbeafe) 65%, transparent), color-mix(in srgb, var(--sg-selection-bg,#dbeafe) 65%, transparent)), var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-table:not(.sv-grid-no-row-hover) .sv-grid-row:hover>.sv-grid-cell[data-pinned]:not([data-selected-range=true]){background:linear-gradient(color-mix(in srgb, var(--sg-row-hover-bg,#eef2ff) 55%, transparent), color-mix(in srgb, var(--sg-row-hover-bg,#eef2ff) 55%, transparent)), var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%))}.sv-grid-column{position:relative}.sv-grid-cell[data-align=left],.sv-grid-column[data-align=left]{padding-left:var(--sg-cell-px,7px)}.sv-grid-cell[data-align=right]{text-align:right;padding-right:var(--sg-cell-px,7px)}.sv-grid-cell[data-align=center]{text-align:center}.sv-grid-column[data-align=right]{padding-right:var(--sg-cell-px,7px)}.sv-grid-column[data-align=right] .sv-grid-header-sort{justify-content:flex-end}.sv-grid-has-vscroll:not(.sv-grid-has-hscroll) .sv-grid-table tr>:last-child.sv-grid-cell[data-align=right],.sv-grid-has-vscroll:not(.sv-grid-has-hscroll) .sv-grid-table tr>:last-child.sv-grid-column[data-align=right]{padding-right:calc(var(--sg-cell-px,7px) + 16px)}.sv-grid-container.sv-grid-has-vscroll.sv-grid-has-hscroll{padding-right:16px}.sv-grid-column[data-align=center] .sv-grid-header-sort{justify-content:center}.sv-grid-resize-handle{cursor:col-resize;-webkit-user-select:none;user-select:none;z-index:2;width:5px;height:100%;transition:background-color .1s;position:absolute;top:0;right:0}.sv-grid-resize-handle:after{content:\"\";background:var(--sg-fg,#0f172a);opacity:0;border-radius:1px;width:2px;margin:auto 2px;transition:background-color .1s,opacity .1s;position:absolute;inset:0}.sv-grid-column:hover .sv-grid-resize-handle:after{opacity:.3}.sv-grid-column:hover .sv-grid-resize-handle:hover:after,.sv-grid-resize-handle.is-resizing:after{background:var(--sg-accent,#2563eb);opacity:1}.sv-grid-row-resize-handle{transition:background-color .1s}.sv-grid-row-resize-handle:hover,.sv-grid-row-resize-handle.is-resizing{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 30%, transparent)}.sv-grid-head{z-index:35;background:var(--sg-header-bg,#f5f7fb);position:sticky;top:0}.sv-grid-head .sv-grid-column{background:var(--sg-header-bg,#f5f7fb);color:var(--sg-header-label-color,var(--sg-header-fg,var(--sg-fg,#0f172a)));font-weight:var(--sg-header-weight,600);font-size:var(--sg-header-size,inherit);text-transform:var(--sg-header-transform,none);letter-spacing:var(--sg-header-tracking,normal);border-bottom-color:var(--sg-header-border,var(--sg-border,#e2e8f0))}.sv-grid-column[draggable=true]{cursor:grab}.sv-grid-column[draggable=true]:active{cursor:grabbing}.sv-grid-column.is-dragging{opacity:.55}.sv-grid-column.is-drag-target-before,.sv-grid-column.is-drag-target-after{position:relative}.sv-grid-column.is-drag-target-before:before,.sv-grid-column.is-drag-target-after:after{content:\"\";pointer-events:none;z-index:7;background:linear-gradient(#6366f1,#8b5cf6);border-radius:2px;width:3px;animation:.7s ease-in-out infinite alternate sg-drop-pulse;position:absolute;top:4px;bottom:4px;box-shadow:0 0 6px #6366f1}.sv-grid-column.is-drag-target-before:before{left:-2px}.sv-grid-column.is-drag-target-after:after{right:-2px}@keyframes sg-drop-pulse{0%{opacity:.55}to{opacity:1}}.sv-grid-row-draggable{cursor:grab}.sv-grid-row-draggable:active{cursor:grabbing}.sv-grid-row-drag-active .sv-grid-row-draggable{-webkit-user-select:none;user-select:none}.sv-grid-row-draggable .sv-grid-row-number-cell{padding-left:14px;position:relative}.sv-grid-row-draggable .sv-grid-row-number-cell:before{content:\"⠇\";color:var(--sg-muted,#94a3b8);opacity:.4;pointer-events:none;font-size:13px;line-height:1;transition:opacity .12s;position:absolute;top:50%;left:3px;transform:translateY(-50%)}.sv-grid-row-draggable:hover .sv-grid-row-number-cell:before{opacity:1}.sv-grid-row-dropzone-over{outline:2px dashed var(--sg-accent,#6366f1);outline-offset:-2px;background:color-mix(in srgb, var(--sg-accent,#6366f1) 10%, transparent)}.sv-grid-row-drop-before>td{box-shadow:inset 0 2px 0 0 var(--sg-accent,#6366f1)}.sv-grid-row-drop-after>td{box-shadow:inset 0 -2px 0 0 var(--sg-accent,#6366f1)}.sv-grid-pinned-row td{z-index:4;background:var(--sg-pinned-bg,color-mix(in oklab, var(--sg-header-bg,#f1f5f9) 92%, var(--sg-accent,#2563eb) 8%));border-bottom:1px solid var(--sg-pinned-border,color-mix(in oklab, var(--sg-accent,#2563eb) 24%, transparent));font-weight:600;position:sticky}.sv-grid-pinned-row-top td{top:var(--sg-thead-h,36px)}.sv-grid-pinned-row-bottom td{border-top:1px solid var(--sg-pinned-border,color-mix(in oklab, var(--sg-accent,#2563eb) 24%, transparent));bottom:0}.sv-grid-pinned-row-top[data-pinned-index=\"1\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px))}.sv-grid-pinned-row-top[data-pinned-index=\"2\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px) * 2)}.sv-grid-pinned-row-top[data-pinned-index=\"3\"] td{top:calc(var(--sg-thead-h,36px) + var(--sg-pinned-row-h,32px) * 3)}.sv-grid-pinned-row-bottom[data-pinned-index=\"1\"] td{bottom:var(--sg-pinned-row-h,32px)}.sv-grid-pinned-row-bottom[data-pinned-index=\"2\"] td{bottom:calc(var(--sg-pinned-row-h,32px) * 2)}.sv-grid-pinned-row-bottom[data-pinned-index=\"3\"] td{bottom:calc(var(--sg-pinned-row-h,32px) * 3)}.sv-grid-pinned-row td[data-pinned]{z-index:5}.sv-grid-group-header-row{background:var(--sg-header-bg,#eef2f8)}.sv-grid-group-header-cell{box-sizing:border-box;border-bottom:1px solid var(--sg-border,#d8dee9);border-right:1px solid var(--sg-border,#e2e8f0);text-align:center;color:var(--sg-header-fg,#475569);text-transform:uppercase;letter-spacing:.04em;padding:4px 8px;font-size:11.5px;font-weight:700}.sv-grid-group-header-placeholder{background:0 0;border-right-color:#0000}.sv-grid-group-header-label{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline-block;overflow:hidden}.sv-grid-group-toggle{max-width:100%;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:5px;padding:2px 6px;display:inline-flex}.sv-grid-group-toggle:hover{background:color-mix(in srgb, var(--sg-accent,#2563eb) 12%, transparent);color:var(--sg-accent,#2563eb)}.sv-grid-group-caret{flex-shrink:0;justify-content:center;align-items:center;width:10px;height:10px;transition:transform .14s;display:inline-flex}.sv-grid-group-caret>.sv-grid-icon{width:100%;height:100%}.sv-grid-group-toggle.is-collapsed .sv-grid-group-caret{transform:rotate(-90deg)}.sv-grid-foot{z-index:6;background:var(--sg-header-bg,#f5f7fb);position:sticky;bottom:0}.sv-grid-container.sv-grid-narrow{-webkit-overflow-scrolling:touch;scroll-behavior:auto}.sv-grid-container{scrollbar-width:auto;-ms-overflow-style:auto;overscroll-behavior:contain;overflow-anchor:none;scroll-padding-top:var(--sg-thead-h,36px)}.sv-grid-container.sv-grid-container-custom-scrollbars{scrollbar-width:none;-ms-overflow-style:none}.sv-grid-container.sv-grid-container-custom-scrollbars::-webkit-scrollbar{display:none}.sv-grid-scrollbar{z-index:40;position:absolute}.sv-grid-scrollbar-vertical{top:0;width:16px;height:calc(100% - 16px);inset-inline-end:0}.sv-grid-scrollbar-corner{top:0;background:var(--sg-header-bg,#f5f7fb);border-bottom:1px solid var(--sg-header-border,#0f172a14);z-index:41;pointer-events:none;width:16px;position:absolute;inset-inline-end:0}.sv-grid-scrollbar-corner-br{inset-inline-end:0;background:var(--sg-header-bg,#eef2f8);z-index:42;pointer-events:none;width:16px;height:16px;position:absolute;bottom:0;box-shadow:inset 0 0 0 1px #0f172a0d}.sv-grid-scrollbar-horizontal{inset-inline-start:0;width:calc(100% - 16px);height:16px;bottom:0}.sv-grid-selection-column,.sv-grid-selection-cell{text-align:center;z-index:4;padding-inline:6px;position:sticky}.sv-grid-row-number-column,.sv-grid-row-number-cell{text-align:right;z-index:4;background:var(--sg-header-bg,#f5f7fb);color:var(--sg-muted,#64748b);font-variant-numeric:tabular-nums;padding-inline:8px;position:sticky;left:0}.sv-grid-row-number-head{color:inherit}.sv-grid-filter-row-control{box-sizing:border-box;padding:5px var(--sg-filter-cell-px,var(--sg-cell-px,7px));flex-direction:row;align-items:center;gap:4px;display:flex}.sv-grid-filter-row-control>.sv-field{flex:3 1 0;min-width:0}.sv-grid-filter-operator{box-sizing:border-box;flex:2 1 0;min-width:0}.sv-grid-filter-value{box-sizing:border-box;flex:3 1 0;min-width:0}.sv-grid-filter-value.sv-grid-filter-value-invalid,.sv-grid-tp-filter-input.sv-grid-filter-value-invalid{box-shadow:0 0 0 1px color-mix(in srgb, var(--sg-danger,#dc2626) 45%, transparent);border-color:var(--sg-danger,#dc2626)!important}.sv-grid-filter-chips{box-sizing:border-box;border:1px solid var(--sg-input-border,#8794a8);background:var(--sg-input-bg,#fff);border-radius:4px;flex-wrap:nowrap;flex:3 1 0;align-items:center;gap:3px;min-width:0;padding:2px 4px;display:flex;overflow:hidden}.sv-grid-filter-chip .sv-grid-filter-chip-label{max-width:84px}.sv-grid-filter-chip-more{cursor:pointer;font:inherit;color:var(--sg-text,inherit);border:0;flex:none;font-size:11px;line-height:16px}.sv-grid-filter-chip-more:hover{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 26%, transparent)}.sv-grid-filter-chips:focus-within{border-color:var(--sg-accent,#0b63f3);box-shadow:0 0 0 1px color-mix(in srgb, var(--sg-accent,#0b63f3) 45%, transparent)}.sv-grid-filter-chip{background:color-mix(in srgb, var(--sg-accent,#0b63f3) 16%, transparent);max-width:120px;color:var(--sg-text,inherit);border-radius:3px;align-items:center;gap:2px;padding:0 2px 0 6px;font-size:11px;line-height:16px;display:inline-flex}.sv-grid-filter-chip-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-filter-chip-x{width:14px;height:14px;color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;padding:0;font-size:13px;line-height:1;display:inline-flex}.sv-grid-filter-chip-x:hover{opacity:1;background:color-mix(in srgb, var(--sg-accent,#0b63f3) 28%, transparent)}.sv-grid-filter-chips .sv-grid-filter-chip-input{background:0 0;outline:none;flex:14px;min-width:14px;padding:0 2px;box-shadow:none!important;border:0!important}.sv-grid-filter-value.sv-grid-filter-value-pulse{animation:.7s ease-out sv-grid-filter-pulse}@keyframes sv-grid-filter-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--sg-accent,#0b63f3) 55%, transparent)}70%{box-shadow:0 0 0 6px color-mix(in srgb, var(--sg-accent,#0b63f3) 0%, transparent)}to{box-shadow:0 0 0 0 color-mix(in srgb, var(--sg-accent,#0b63f3) 0%, transparent)}}.sv-grid-checkbox{border:1px solid var(--sg-input-border,#8794a8);background:var(--sg-input-bg,#fff);width:16px;height:16px;color:var(--sg-accent,#0b63f3);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;margin:0 auto;padding:0;transition:border-color .12s,background-color .12s;display:inline-flex;position:relative}.sv-grid-fr-editor{box-sizing:border-box;width:100%}select.sv-grid-fr-editor{height:100%;min-height:26px}.sv-grid-fr-checkbox{width:16px;height:16px;accent-color:var(--sg-accent,#3b82f6);cursor:pointer}.sv-grid-cell-editor-color{cursor:pointer;background:0 0;border:0;width:100%;height:100%;padding:2px}.sv-grid-cell-editor-color::-webkit-color-swatch-wrapper{padding:0}.sv-grid-cell-editor-color::-webkit-color-swatch{border:0;border-radius:4px}.sv-grid-cell-editor-color::-moz-color-swatch{border:0;border-radius:4px}.sv-grid-rating-editor{align-items:center;gap:1px;height:100%;display:inline-flex}.sv-grid-rating-star{cursor:pointer;color:var(--sg-rating-empty,#cbd5e1);background:0 0;border:0;padding:0 1px;font-size:18px;line-height:1;transition:color 80ms,transform 80ms}.sv-grid-rating-star-on{color:var(--sg-rating-on,#f59e0b)}.sv-grid-rating-star:hover{color:var(--sg-rating-hover,#fbbf24);transform:scale(1.12)}.sv-grid-rating-clear{color:var(--sg-muted,#94a3b8);cursor:pointer;background:0 0;border:0;margin-left:4px;font-size:14px}.sv-grid-rating-clear:hover{color:var(--sg-fg,#0f172a)}.sv-grid-checkbox[aria-checked=true],.sv-grid-checkbox[aria-checked=mixed]{border-color:var(--sg-accent,#2563eb);background:var(--sg-accent,#2563eb);color:var(--sg-on-accent,#fff)}.sv-grid-checkbox[aria-checked=true]:after{content:\"\";border-bottom:2px solid;border-right:2px solid;flex:none;width:5px;height:9px;transform:rotate(40deg)translate(-1px,-1px)}.sv-grid-checkbox[aria-checked=mixed]:after{content:\"\";background:currentColor;border-radius:1px;flex:none;width:8px;height:2px}.sv-grid-checkbox:focus-visible{outline:2px solid var(--sg-accent,#0b63f3);outline-offset:1px}.sv-grid-checkbox-readonly{cursor:default;pointer-events:none}@keyframes sv-grid-cell-flash-kf{0%{background-color:var(--sg-cell-flash,color-mix(in oklab, var(--sg-accent,#3b82f6) 42%, transparent))}to{background-color:#0000}}.sv-grid-cell-flash{animation:.7s ease-out sv-grid-cell-flash-kf}@media (prefers-reduced-motion:reduce){.sv-grid-cell-flash{animation:none}}.sv-grid-cell-active,.sv-grid-cell-editing{z-index:20;box-shadow:inset 0 0 0 2px var(--sg-accent,#0b63f3);outline:none;position:relative;overflow:visible}.sv-grid-cell.sv-grid-cell-editing:after{content:\"\";border:2px solid var(--sg-accent,#0b63f3);pointer-events:none;position:absolute;inset:-1px}.sv-grid-cell.sv-grid-cell-editing{box-shadow:none}.sv-grid-cell.sv-grid-cell-editing .sv-grid-cell-editor:focus,.sv-grid-cell.sv-grid-cell-editing .sv-grid-dropdown-trigger:focus,.sv-grid-cell.sv-grid-cell-editing .sv-dtp__field:focus-within,.sv-grid-cell.sv-grid-cell-editing .sv-grid-checkbox:focus-visible{box-shadow:none;outline:none}.sv-grid-cell-note-corner{background:linear-gradient(45deg, transparent 50%, var(--sg-note-corner,#f59e0b) 50%);cursor:help;z-index:6;width:12px;height:12px;position:absolute;top:0;right:0}.sv-grid-cell-note-corner:before{content:\"\";position:absolute;inset:-3px -3px 0 0}.sv-grid-fill-handle{background:var(--sg-accent,#0b63f3);border:1px solid var(--sg-bg,#fff);box-sizing:border-box;cursor:crosshair;z-index:15;touch-action:none;width:9px;height:9px;position:absolute;bottom:0;right:0}.sv-grid-fill-handle:hover{transform-origin:100% 100%;transform:scale(1.3)}.sv-grid-selection-bar-upsell{z-index:45;max-width:calc(100% - 24px);position:absolute;left:50%;transform:translate(-50%)}.sv-grid-selection-bar-upsell[data-position=bottom]{bottom:16px}.sv-grid-selection-bar-upsell[data-position=top]{top:16px}.sv-grid-root[data-move-grab=true],.sv-grid-root[data-move-grab=true] .sv-grid-cell{cursor:move!important}.sv-grid-root[data-move-grab=true] .sv-grid-fill-handle{cursor:crosshair!important}.sv-grid-cell[data-fill-top=true],.sv-grid-cell[data-fill-bottom=true],.sv-grid-cell[data-fill-left=true],.sv-grid-cell[data-fill-right=true]{--sv-fill-top:none;--sv-fill-bottom:none;--sv-fill-left:none;--sv-fill-right:none;--sv-fill-color:var(--sg-fill-marquee,var(--sg-accent,#2563eb))}.sv-grid-cell[data-fill-top=true]{--sv-fill-top:repeating-linear-gradient(to right, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-bottom=true]{--sv-fill-bottom:repeating-linear-gradient(to right, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-left=true]{--sv-fill-left:repeating-linear-gradient(to bottom, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-cell[data-fill-right=true]{--sv-fill-right:repeating-linear-gradient(to bottom, var(--sv-fill-color) 0 3px, transparent 3px 6px)}.sv-grid-table .sv-grid-cell[data-fill-top=true],.sv-grid-table .sv-grid-cell[data-fill-bottom=true],.sv-grid-table .sv-grid-cell[data-fill-left=true],.sv-grid-table .sv-grid-cell[data-fill-right=true]{background-image:var(--sv-fill-top), var(--sv-fill-bottom), var(--sv-fill-left), var(--sv-fill-right);background-position:0 0,0 100%,0 0,100% 0;background-repeat:no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}.sv-grid-cell-editing{padding:0}.sv-grid-cell[data-selected-range=true]{background:var(--sg-selection-bg,#eef4ff);--sv-range-top:0 0 0 transparent;--sv-range-bottom:0 0 0 transparent;--sv-range-left:0 0 0 transparent;--sv-range-right:0 0 0 transparent;box-shadow:var(--sv-range-top), var(--sv-range-bottom), var(--sv-range-left), var(--sv-range-right)}.sv-grid-cell[data-range-top=true]{--sv-range-top:inset 0 2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-bottom=true]{--sv-range-bottom:inset 0 -2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-left=true]{--sv-range-left:inset 2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-right=true]{--sv-range-right:inset -2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell[data-range-top=true],.sv-grid-cell[data-range-bottom=true],.sv-grid-cell[data-range-left=true],.sv-grid-cell[data-range-right=true],.sv-grid-cell.sv-merge-edge-right,.sv-grid-cell.sv-merge-edge-bottom{z-index:3;position:relative}.sv-grid-cell.sv-merge-edge-right{box-shadow:inset -2px 0 0 var(--sg-accent,#0b63f3)}.sv-grid-cell.sv-merge-edge-bottom{box-shadow:inset 0 -2px 0 var(--sg-accent,#0b63f3)}.sv-grid-cell.sv-merge-in-range{background:var(--sg-selection-bg,#eef4ff)}.sv-grid-cell-editor{background:var(--sg-input-bg,#fff);box-sizing:border-box;width:100%;height:100%;font:inherit;color:inherit;border:0;outline:none;padding:0 8px;position:absolute;inset:0}.sv-grid-column-filter,.sv-grid-filter-value,.sv-grid-global-filter input,.sv-grid-menu-search,.sv-grid-menu-condition-value{background:var(--sg-input-bg,#fff);color:var(--sg-fg,#0f172a);border:1px solid var(--sg-input-border,#cbd5e1);box-sizing:border-box;font:inherit;border-radius:5px;padding:0 8px}.sv-grid-column-filter{width:100%;height:28px;font-size:.8125rem}.sv-grid-global-filter{color:var(--sg-muted,#64748b);align-items:center;gap:8px;margin-bottom:8px;font-size:.8125rem;font-weight:550;display:inline-flex}.sv-grid-global-filter input{min-width:220px;height:30px;font-size:.8125rem}.sv-grid-column-filter::placeholder,.sv-grid-filter-value::placeholder,.sv-grid-menu-search::placeholder,.sv-grid-global-filter input::placeholder,.sv-grid-cell-editor::placeholder{color:var(--sg-muted,#64748b);opacity:.7}.sv-grid-global-filter input:focus,.sv-grid-filter-value:focus,.sv-grid-column-filter:focus,.sv-grid-menu-search:focus,.sv-grid-menu-condition-value:focus,.sv-grid-menu-operator:focus,.sv-grid-cell-editor:focus{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent);outline:none}.sv-grid-cell-editor-number,.sv-grid-cell-editor-date,.sv-grid-cell-editor-datetime{width:100%;height:100%}.sv-grid-cell.sv-grid-cell-editing .sv-dtp{width:auto;display:block;position:absolute;inset:0}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__field{height:100%;box-shadow:none;border:0;border-radius:0;padding-inline:0}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__input{font:inherit}.sv-grid-cell.sv-grid-cell-editing .sv-dtp__clear,.sv-grid-cell.sv-grid-cell-editing .sv-dtp__toggle,.sv-grid-filter-row-control>.sv-field .sv-dtp__toggle{width:20px;height:20px}.sv-grid-filter-row-control>.sv-field .sv-dtp__toggle{flex:0 auto;min-width:0}.sv-grid-filter-row-control>.sv-field .sv-dtp__clear{display:none}.sv-grid-filter-row-control>.sv-field .sv-dri__field{gap:3px;padding-inline:4px 2px}.sv-grid-filter-row-control>.sv-field .sv-dri__clear{flex:0 auto;width:20px;min-width:0;height:20px}.sv-grid-cell-editor-list{appearance:auto;width:100%;height:100%;font:inherit;color:inherit;background:var(--sg-input-bg,#fff);box-sizing:border-box;border:0;padding:0 6px}.sv-grid-cell-editor-list[multiple]{z-index:5;border:1px solid var(--sg-accent,#0b63f3);background:var(--sg-input-bg,#fff);height:auto;min-height:100%;max-height:220px;padding:4px;position:absolute;top:0;left:0;right:0;box-shadow:0 8px 24px #0f172a2e}.sv-grid-cell-editor-chips{background:var(--sg-header-bg,var(--sg-bg,#fff));min-height:calc(100% + 2px);color:var(--sg-fg,#0f172a);box-sizing:border-box;z-index:1000;border:1px solid var(--sg-accent,#2563eb);border-radius:var(--sg-radius,6px);align-items:flex-start;padding:4px 6px;display:flex;position:absolute;top:-1px;left:-1px;right:-1px;overflow:visible;box-shadow:0 12px 28px #00000073}.sv-grid-cell-editing:has(.sv-grid-cell-editor-chips){outline:none}.sv-grid-chips-row{flex-wrap:wrap;align-items:center;gap:4px;width:100%;display:flex}.sv-grid-chip-input{min-width:60px;font:inherit;color:inherit;background:0 0;border:0;outline:none;flex:80px;padding:2px 4px}.sv-grid-chip-picker{min-width:80px;font:inherit;color:inherit;background:var(--sg-bg,#fff);border:1px solid #0f172a26;border-radius:4px;flex:100px;padding:2px 4px}.sv-grid-chip-commit{text-transform:uppercase;letter-spacing:.04em;color:#fff;background:var(--sg-accent,#0b63f3);cursor:pointer;border:0;border-radius:4px;padding:3px 8px;font-size:11px}.sv-grid-chip-commit:hover{filter:brightness(1.1)}.sv-grid-chips-display{vertical-align:middle;flex-wrap:nowrap;align-items:center;gap:4px;max-width:100%;display:inline-flex}.sv-grid-sparkline{vertical-align:middle;display:inline-block;overflow:visible}.sv-grid-cf-bg{z-index:0;pointer-events:none;position:absolute;inset:0}.sv-grid-cf-bar{z-index:0;opacity:.85;pointer-events:none;border-radius:0 2px 2px 0;position:absolute;top:0;bottom:0;left:0}.sv-grid-cell-cf{position:relative}.sv-grid-cell-invalid{box-shadow:inset 0 0 0 1px var(--sg-invalid-border,#ef444473);color:var(--sg-invalid-fg,#b91c1c);background-color:var(--sg-invalid-bg,#ef444424)!important}.sv-grid-cell-invalid.sv-grid-cell-active{box-shadow:inset 0 0 0 2px var(--sg-invalid-border,#ef4444b3)}.sv-grid-status-bar{color:var(--sg-fg);background:var(--sg-header-bg,#f1f5f9);border:1px solid var(--sg-border,#e2e8f0);border-top:0;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:18px;padding:6px 14px;font-size:12px;display:flex}.sv-grid-status-item{font-variant-numeric:tabular-nums;font-weight:600}.sv-grid-status-label{color:var(--sg-muted,#64748b);margin-right:5px;font-weight:400}.sv-grid-cf-content{z-index:1;position:relative}.sv-grid-cf-icon{margin-right:5px;font-size:.95em}.sv-grid-chip{background:color-mix(in srgb, var(--sg-accent,#2563eb) 18%, transparent);color:var(--sg-fg,inherit);border:1px solid color-mix(in srgb, var(--sg-accent,#2563eb) 35%, transparent);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:.85em;line-height:1.4;display:inline-flex}.sv-grid-chip-removable{padding-right:2px}.sv-grid-chip-remove{background:color-mix(in srgb, var(--sg-fg,#0f172a) 18%, transparent);width:16px;height:16px;color:inherit;cursor:pointer;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;font-size:12px;line-height:1;display:inline-flex}.sv-grid-chip-remove:hover{color:#fff;background:#dc2626b3}.sv-grid-icon{flex:none;width:1em;height:1em;display:block}.sv-grid-icon-custom{justify-content:center;align-items:center;line-height:0;display:inline-flex}.sv-grid-icon-custom>svg,.sv-grid-icon-custom>img{width:100%;height:100%;display:block}.sv-grid-header-cell{width:100%;min-width:0;min-height:var(--sg-header-min-height,auto);align-items:center;gap:2px;display:flex}.sv-grid-header-sort{min-width:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;align-items:center;gap:4px;padding:2px;display:flex}.sv-grid-header-custom{text-align:left;cursor:pointer;outline:none;flex:auto;align-items:center;gap:4px;min-width:0;padding:2px;display:flex}.sv-grid-header-label{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.sv-grid-header-icon{color:var(--sg-muted,#5b6b85);flex:none;font-size:13px;display:inline-flex}.sv-grid-header-icon-hint{opacity:0;transition:opacity .12s}.sv-grid-column:hover .sv-grid-header-icon-hint{opacity:.4}.sv-grid-header-icon-flag{color:var(--sg-accent,#0b63f3)}.sv-grid-col-menu-btn{width:0;height:22px;color:var(--sg-muted,#5b6b85);cursor:pointer;opacity:0;pointer-events:none;background:0 0;border:0;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:15px;transition:width .14s,opacity .14s,background-color .12s;display:inline-flex;overflow:hidden}.sv-grid-column:hover .sv-grid-col-menu-btn,.sv-grid-col-menu-btn.is-open,.sv-grid-col-menu-btn:focus-visible,.sv-grid-col-filter-btn.is-active{opacity:1;pointer-events:auto;width:22px}.sv-grid-col-menu-btn:hover,.sv-grid-col-menu-btn.is-open{background:var(--sg-row-hover-bg,#e2e8f3)}.sv-grid-filter-operator-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);height:24px;color:var(--sg-fg,#334155);cursor:pointer;border-radius:4px;flex:none;align-items:center;gap:2px;padding:0 4px;font-size:13px;display:inline-flex}.sv-grid-filter-operator-btn.is-open{border-color:var(--sg-accent,#0b63f3)}.sv-grid-caret{color:var(--sg-muted,#94a3b8);font-size:9px;display:inline-flex}.sv-grid-menu-backdrop{z-index:900;background:0 0;position:fixed;inset:0}.sv-grid-menu{z-index:901;overscroll-behavior:contain;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#d6dee9);max-height:calc(100vh - 24px);color:var(--sg-fg,#1f2937);border-radius:8px;padding:4px;font-size:13px;position:fixed;overflow:auto;box-shadow:0 12px 28px #0f172a2e}.sv-grid-column-menu{width:260px}.sv-grid-menu-tabs{border-bottom:1px solid var(--sg-border,#e2e8f0);gap:2px;margin:-2px -2px 4px;padding:2px 2px 0;display:flex}.sv-grid-menu-tab{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:6px;font-size:12px;font-weight:600}.sv-grid-menu-tab:hover{color:var(--sg-fg,#0f172a)}.sv-grid-menu-tab.is-active{color:var(--sg-accent,#2563eb);border-bottom-color:var(--sg-accent,#2563eb)}.sv-grid-operator-menu{width:184px}.sv-grid-context-menu{min-width:180px}.sv-grid-comment-editor{width:240px;padding:8px}.sv-grid-comment-textarea{resize:vertical;border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);width:100%;min-height:60px;color:var(--sg-fg,#0f172a);font:inherit;border-radius:4px;outline:none;padding:6px 8px;font-size:13px}.sv-grid-comment-textarea:focus{border-color:var(--sg-accent,#6366f1)}.sv-grid-comment-actions{align-items:center;gap:6px;margin-top:8px;display:flex}.sv-grid-comment-spacer{flex:auto}.sv-grid-comment-actions button{border:1px solid var(--sg-border,#cbd5e1);background:var(--sg-bg,#fff);color:var(--sg-fg,#1f2937);font:inherit;cursor:pointer;border-radius:4px;padding:4px 10px;font-size:12px}.sv-grid-comment-save{border-color:var(--sg-accent,#6366f1)!important;background:var(--sg-accent,#6366f1)!important;color:#fff!important}.sv-grid-comment-remove{color:var(--sg-danger,#dc2626)!important}.sv-grid-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:8px;padding:7px 10px;display:flex}.sv-grid-menu-item:hover{background:var(--sg-row-hover-bg,#eef2f8)}.sv-grid-menu.sv-grid-in-suggest{min-width:140px;max-width:260px;padding:0;font-size:12px;overflow:visible}.sv-grid-menu-item[aria-checked=true]{background:var(--sg-selection-bg,#eaf2ff);color:var(--sg-accent,#0b63f3)}.sv-grid-menu-sep{background:var(--sg-border,#e6ebf2);height:1px;margin:4px 6px}.sv-grid-menu-filter{padding:4px 6px 6px}.sv-grid-menu-filter-head{color:var(--sg-muted,#475569);align-items:center;gap:6px;padding:2px 0 6px;font-weight:600;display:flex}.sv-grid-menu-head-note{color:var(--sg-muted,#64748b);opacity:.85;margin-inline-start:auto;font-size:.85em;font-weight:500}.sv-grid-menu-search{box-sizing:border-box;border:1px solid var(--sg-input-border,#cbd5e1);width:100%;height:28px;font:inherit;border-radius:5px;margin-bottom:6px;padding:0 8px}.sv-grid-menu-filter-row{gap:4px;margin-bottom:6px;display:flex}.sv-grid-menu-operator-group{gap:2px;margin-bottom:6px;display:flex}.sv-grid-menu-operator-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);height:28px;color:var(--sg-fg,#475569);cursor:pointer;border-radius:4px;flex:1 1 0;justify-content:center;align-items:center;padding:0;transition:background-color .1s,color .1s,border-color .1s;display:inline-flex}.sv-grid-menu-operator-btn:hover{background:var(--sg-row-hover-bg,#eef2f8)}.sv-grid-menu-operator-btn.is-active{background:var(--sg-accent,#0b63f3);border-color:var(--sg-accent,#0b63f3);color:#fff}.sv-grid-menu-condition-value{box-sizing:border-box;border:1px solid var(--sg-input-border,#cbd5e1);min-width:0;height:28px;font:inherit;border-radius:5px;flex:1 1 0;padding:0 8px}.sv-grid-menu-add-cond{color:var(--sg-accent,#3b82f6);border:1px dashed var(--sg-border,#cbd5e1);cursor:pointer;background:0 0;border-radius:5px;align-self:flex-start;margin-top:2px;padding:3px 8px;font-size:11.5px;font-weight:600}.sv-grid-menu-add-cond:hover{background:color-mix(in oklab, var(--sg-accent,#3b82f6) 8%, transparent);border-style:solid}.sv-grid-menu-join{align-items:center;gap:2px;margin:2px 0;display:inline-flex}.sv-grid-menu-join button{color:var(--sg-muted,#64748b);border:1px solid var(--sg-border,#cbd5e1);cursor:pointer;background:0 0;padding:2px 10px;font-size:11px;font-weight:700}.sv-grid-menu-join button:first-child{border-radius:5px 0 0 5px}.sv-grid-menu-join button:nth-child(2){border-left:0;border-radius:0}.sv-grid-menu-join button.is-on{background:var(--sg-accent,#3b82f6);color:#fff;border-color:var(--sg-accent,#3b82f6)}.sv-grid-menu-join-x{margin-left:auto;font-size:14px;line-height:1;border-radius:5px!important;padding:2px 7px!important}.sv-grid-menu .sv-listbox{overscroll-behavior:contain}.sv-grid-facet{cursor:pointer;align-items:center;gap:8px;padding:4px 8px;display:flex}.sv-grid-facet:hover{background:var(--sg-row-hover-bg,#f4f6fa)}.sv-grid-facet-all{padding-inline-start:3px;font-weight:600}.sv-grid-facet input{flex:none}.sv-grid-facet-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sv-grid-facet-empty,.sv-grid-facet-note{color:var(--sg-muted,#94a3b8);padding:6px 8px;font-size:12px}.sv-grid-menu-actions{justify-content:flex-end;gap:6px;padding-top:8px;display:flex}.sv-grid-menu-btn{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);color:var(--sg-fg,#334155);font:inherit;cursor:pointer;border-radius:5px;padding:5px 10px}.sv-grid-menu-btn-primary{background:var(--sg-accent,#0b63f3);border-color:var(--sg-accent,#0b63f3);color:#fff}.sv-grid-menu-item:disabled,.sv-grid-menu-btn:disabled{opacity:.4;cursor:default}.sv-grid-menu-item:disabled:hover{background:0 0}.sv-grid-group-row>.sv-grid-cell{background:var(--sg-header-bg,#eef2f8);cursor:pointer;font-weight:600}.sv-grid-row-selected>.sv-grid-cell{background:var(--sg-selection-bg,#eaf2ff)}.sv-grid-group-footer-row>.sv-grid-cell{background:var(--sg-header-bg,#eef2f8);border-top:1px solid var(--sg-border,#d7dce5);font-weight:600}.sv-grid-row-auto-height>.sv-grid-cell{white-space:normal;overflow-wrap:anywhere;text-overflow:clip;vertical-align:top;padding-top:6px;padding-bottom:6px;overflow:visible}.sv-grid-grand-total-row>.sv-grid-cell{border-top:3px double var(--sg-border,#d7dce5);font-weight:700}.sv-grid-tree-indent{flex:none;display:inline-block}.sv-grid-tree-toggle{width:14px;height:14px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:3px;flex:none;justify-content:center;align-items:center;margin-right:3px;padding:0;font-size:10px;line-height:1;display:inline-flex}.sv-grid-tree-toggle:hover{background:var(--sg-header-bg,#eef2f8);color:var(--sg-fg,#0f172a)}.sv-grid-tree-toggle>.sv-grid-icon,.sv-grid-group-toggle>.sv-grid-icon{width:12px;height:12px;transition:transform .15s}.sv-grid-tree-toggle[aria-expanded=true]>.sv-grid-icon,.sv-grid-group-toggle[aria-expanded=true]>.sv-grid-icon{transform:rotate(90deg)}.sv-grid-tree-toggle:focus-visible{outline:2px solid var(--sg-accent,#2563eb);outline-offset:1px}.sv-grid-autogroup-label{color:var(--sg-fg,#0f172a);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.sv-grid-tree-spacer{flex:none;width:14px;margin-right:3px;display:inline-block}.sv-grid-group-cell{padding:0 12px}.sv-grid-group-content{align-items:center;gap:6px;display:inline-flex}.sv-grid-group-toggle{color:var(--sg-fg,#334155);cursor:pointer;background:0 0;border:0;padding:0 4px 0 0;font-size:11px;line-height:1}.sv-grid-group-count{color:var(--sg-muted,#64748b);margin-left:6px;font-size:12px;font-weight:400}.sv-grid-group-agg{color:var(--sg-fg);white-space:nowrap;margin-left:10px;font-size:12px;font-weight:600}.sv-grid-group-agg-label{color:var(--sg-muted,#64748b);margin-right:4px;font-weight:400}.sv-grid-group-agg-label:after{content:\":\"}.sv-grid-group-child-indent{width:18px;display:inline-block}.sv-grid-tooltip{z-index:10000;color:#f1f5f9;border-radius:var(--sg-radius,6px);pointer-events:none;white-space:pre-wrap;word-wrap:break-word;background:#0f172a;max-width:280px;padding:8px 10px;font-size:12px;line-height:1.45;position:fixed;box-shadow:0 8px 24px #0f172a47}[data-theme=dark] .sv-grid-tooltip{color:#0f172a;background:#f1f5f9}.sv-grid-cell-editor-textarea{border:1px solid var(--sg-accent,#6366f1);background:var(--sg-bg,#fff);width:100%;min-height:80px;color:var(--sg-fg,#0f172a);resize:vertical;box-shadow:0 0 0 2px var(--sg-focus-ring,#6366f166);border-radius:4px;outline:none;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1.4}.sv-grid-autocomplete{width:100%;position:relative}.sv-grid-autocomplete-list{z-index:30;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#d6dee9);border-radius:var(--sg-radius,6px);max-height:220px;margin-top:2px;padding:4px;position:absolute;top:100%;left:0;right:0;overflow:auto;box-shadow:0 12px 28px #0f172a2e}.sv-grid-autocomplete-option{text-align:left;width:100%;color:var(--sg-fg,#1f2937);font:inherit;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:4px;padding:5px 8px;font-size:13px;display:block;overflow:hidden}.sv-grid-autocomplete-option:hover,.sv-grid-autocomplete-option[aria-selected=true]{background:var(--sg-row-hover-bg,#6366f11a)}.sv-grid-find{z-index:60;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);border:1px solid var(--sg-border,#cbd5e1);border-radius:8px;align-items:center;gap:4px;min-width:280px;padding:6px 8px;display:inline-flex;position:absolute;top:8px;right:8px;box-shadow:0 10px 25px #0f172a2e}.sv-grid-find>.sv-grid-icon{width:14px;height:14px;color:var(--sg-muted,#94a3b8);flex:none;margin-left:2px}.sv-grid-find-input{min-width:0;color:inherit;background:0 0;border:0;outline:none;flex:1;padding:2px 6px;font-size:13px}.sv-grid-find-input::placeholder{color:var(--sg-muted,#94a3b8)}.sv-grid-find-count{color:var(--sg-muted,#64748b);font-variant-numeric:tabular-nums;white-space:nowrap;padding:0 4px;font-size:11px}.sv-grid-find-step,.sv-grid-find-close{width:22px;height:22px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:12px;display:inline-flex}.sv-grid-find-step:hover:not(:disabled),.sv-grid-find-close:hover{background:var(--sg-row-hover-bg,#94a3b81f);color:var(--sg-fg,#0f172a)}.sv-grid-find-step:disabled{opacity:.3;cursor:default}.sv-grid-pagination{border:1px solid var(--sg-border,#e2e8f0);border-radius:0 0 var(--sg-radius,6px) var(--sg-radius,6px);background:var(--sg-header-bg,#f1f5f9);color:var(--sg-fg,#0f172a);border-top:0;justify-content:flex-end;align-items:center;gap:24px;margin-top:0;padding:12px 16px;font-size:13px;display:flex}.sv-grid-pagination-top{border-top:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px) var(--sg-radius,6px) 0 0;border-bottom:0}.sv-grid-pagination-pagesize{color:var(--sg-muted,#64748b);align-items:center;gap:8px;display:inline-flex}.sv-grid-pagination-pagesize-dd{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);border-radius:5px;min-width:62px;height:28px;position:relative}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown{height:100%;color:var(--sg-fg,#0f172a);background:0 0;border-radius:5px;font-size:13px;position:absolute;inset:0}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-trigger{width:100%;height:100%;min-height:28px;color:var(--sg-fg,#0f172a);font:inherit;text-align:start;cursor:pointer;box-sizing:border-box;background:0 0;border:0;border-radius:5px;outline:none;align-items:center;gap:6px;padding:0 8px;font-size:13px;display:flex}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-label{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.sv-grid-pagination-pagesize-dd .sv-grid-dropdown-caret{opacity:.7;flex:none;font-size:10px;line-height:1}.sv-grid-pagination-pagesize-dd:focus-within{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent)}.sv-grid-pagination-range{color:var(--sg-fg,#0f172a)}.sv-grid-pagination-nav{align-items:center;gap:4px;display:inline-flex}.sv-grid-pagination-btn{width:28px;height:28px;color:var(--sg-fg,#0f172a);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;padding:0;font-size:16px;transition:background-color .1s,color .1s;display:inline-flex}.sv-grid-pagination-btn:hover:not(:disabled){background:var(--sg-input-bg,#fff);color:var(--sg-accent,#2563eb)}.sv-grid-pagination-btn:disabled{color:var(--sg-muted,#64748b);opacity:.4;cursor:default}.sv-grid-pagination-label{color:var(--sg-fg,#0f172a);margin:0 8px}.sv-grid-no-scroll .sv-grid-scrollbar-corner,.sv-grid-no-scroll .sv-grid-scrollbar{display:none}.sv-grid-scrollbar-corner,.sv-grid-scrollbar-corner-br{border-bottom-color:var(--sg-border,#e2e8f0)}.sv-grid-menu-operator-select{border:1px solid var(--sg-input-border,#cbd5e1);background:var(--sg-input-bg,#fff);width:100%;height:28px;color:var(--sg-fg,#0f172a);font:inherit;cursor:pointer;appearance:none;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 12px) 12px,calc(100% - 8px) 12px;background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-radius:5px;margin-bottom:6px;padding:0 22px 0 8px;font-size:13px}.sv-grid-menu-operator-select:focus{border-color:var(--sg-accent,#2563eb);box-shadow:0 0 0 2px color-mix(in srgb, var(--sg-accent,#2563eb) 40%, transparent);outline:none}.sv-grid-menu-operator-btn.is-active{color:var(--sg-on-accent,#fff)}.sv-grid-filter-menu{width:260px}.sv-grid-choose-columns-menu{width:240px}.sv-grid-facet input[type=checkbox]{accent-color:var(--sg-accent,#2563eb);cursor:pointer;width:14px;height:14px}.sv-grid-menu-item-chevron{opacity:.55;margin-left:auto;transform:rotate(-90deg)}.sv-grid-menu-item.is-open .sv-grid-menu-item-chevron{opacity:1}.sv-grid-menu-search{padding-left:28px}.sv-grid-menu-search-wrap{display:block;position:relative}.sv-grid-menu-search-wrap>.sv-grid-icon{width:14px;height:14px;color:var(--sg-muted,#94a3b8);pointer-events:none;position:absolute;top:50%;left:8px;transform:translateY(-50%)}.sv-grid-menu-filter>*+*{margin-top:6px}.sv-grid-col-filter-btn.is-active{color:var(--sg-accent,#2563eb)}.sv-grid-row-number-column,.sv-grid-row-number-cell{border-right-color:var(--sg-header-bg,#f1f5f9)}.sv-grid-group-row>.sv-grid-cell{color:var(--sg-header-fg,#0f172a)}.sv-grid-filter-operator-btn{opacity:.85}.sv-grid-filter-operator-btn:hover{opacity:1;border-color:var(--sg-accent,#2563eb)}.sv-grid-filter-operator-btn.is-open{opacity:1}.sv-grid-board-search>.sv-grid-icon{width:14px;height:14px}.sv-grid-board-search{border:1px solid var(--sg-border,#e4e7ec);border-radius:var(--sg-radius,8px);background:var(--sg-bg,#fff);color:color-mix(in srgb, var(--sg-fg,#101828) 55%, transparent);align-items:center;gap:6px;max-width:280px;margin-bottom:8px;padding:5px 9px;display:flex}.sv-grid-board-search:focus-within{border-color:var(--sg-accent,#3b82f6)}.sv-grid-board-search input{font:inherit;color:var(--sg-fg,#101828);background:0 0;border:0;outline:none;flex:auto;font-size:.82rem}.sv-grid-scheduler-upsell{text-align:left;border:1px dashed var(--sg-border,#e4e7ec);border-radius:var(--sg-radius,8px);background:color-mix(in srgb, var(--sg-fg,#1f2937) 5%, transparent);height:100%;color:color-mix(in srgb, var(--sg-fg,#101828) 70%, transparent);flex-direction:column;justify-content:center;align-items:flex-start;gap:6px;padding:24px;display:flex}.sv-grid-scheduler-upsell strong{font-size:.95rem}.sv-grid-scheduler-upsell p{max-width:42ch;margin:0;font-size:.85rem}.sv-grid-upsell-license{opacity:.85;font-size:.8rem}.sv-grid-upsell-license a{color:inherit;text-underline-offset:2px;text-decoration:underline}.sv-grid-scheduler-upsell code{background:color-mix(in srgb, var(--sg-fg,#101828) 8%, transparent);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82em}.sv-grid-chart-toggle svg{flex:none}.sv-grid-chart-panel{z-index:900;background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);flex-direction:column;display:flex;position:absolute}.sv-grid-chart-panel.is-bottom{border-top:1px solid var(--sg-border,#e2e8f0);bottom:0;left:0;right:0;box-shadow:0 -8px 24px #0000001f}.sv-grid-chart-panel.is-right{border-left:1px solid var(--sg-border,#e2e8f0);top:0;bottom:0;right:0;box-shadow:-8px 0 24px #0000001f}.sv-grid-chart-panel.is-floating{border:1px solid var(--sg-border,#e2e8f0);border-radius:calc(var(--sg-radius,6px) + 2px);inset:auto;overflow:hidden;box-shadow:0 12px 40px #00000047}.sv-grid-chart-resizer{z-index:1;touch-action:none;background:0 0;position:absolute}.sv-grid-chart-panel.is-bottom>.sv-grid-chart-resizer{cursor:ns-resize;height:7px;top:-3px;left:0;right:0}.sv-grid-chart-panel.is-right>.sv-grid-chart-resizer{cursor:ew-resize;width:7px;top:0;bottom:0;left:-3px}.sv-grid-chart-resizer:hover,.sv-grid-chart-resizer.is-dragging{background:color-mix(in srgb, var(--sg-accent,#2563eb) 30%, transparent)}.sv-grid-chart-float-resizer{cursor:nwse-resize;touch-action:none;background:linear-gradient(135deg, transparent 50%, color-mix(in srgb, var(--sg-muted,#64748b) 55%, transparent) 50%);border-bottom-right-radius:calc(var(--sg-radius,6px) + 2px);width:16px;height:16px;position:absolute;bottom:0;right:0}.sv-grid-chart-panel-head{border-bottom:1px solid var(--sg-border,#e2e8f0);background:var(--sg-header-bg,#f8fafc);flex-direction:column;align-items:stretch;gap:8px;padding:8px 12px 10px;display:flex}.sv-grid-chart-drawer-title{align-items:center;gap:7px;display:flex}.sv-grid-chart-drawer-title.is-drag-handle{cursor:move;-webkit-user-select:none;user-select:none}.sv-grid-chart-title-icon{color:var(--sg-accent,#2563eb);flex:none}.sv-grid-chart-title{letter-spacing:.01em;color:var(--sg-fg,#0f172a);font-size:13px;font-weight:700}.sv-grid-chart-drawer-title .sv-grid-chart-actions{margin-left:auto}.sv-grid-chart-actions{align-items:center;gap:6px;display:inline-flex}.sv-grid-chart-controls{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.sv-grid-chart-controls:empty{display:none}.sv-grid-chart-hint{color:var(--sg-muted,#64748b);flex-basis:100%;margin:2px 0 0;font-size:11.5px;font-weight:400}.sv-grid-chart-ctl{color:var(--sg-muted,#64748b);flex-direction:column;gap:2px;font-size:11px;font-weight:600;display:flex}.sv-grid-chart-ctl select{font:inherit;color:var(--sg-fg,#0f172a);background:var(--sg-input-bg,var(--sg-bg,#fff));border:1px solid var(--sg-input-border,var(--sg-border,#e2e8f0));border-radius:var(--sg-radius,6px);padding:4px 8px;font-size:12.5px;font-weight:400}.sv-grid-chart-toggle{color:var(--sg-muted,#64748b);cursor:pointer;white-space:nowrap;align-items:center;gap:5px;font-size:12px;font-weight:600;display:inline-flex}.sv-grid-chart-btn{font:inherit;border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);color:var(--sg-fg,#0f172a);cursor:pointer;padding:5px 10px;font-size:12px;font-weight:550}.sv-grid-chart-btn:hover:not(:disabled){border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-chart-btn:disabled{opacity:.5;cursor:default}.sv-grid-chart-icon-btn{border-radius:var(--sg-radius,6px);width:24px;height:24px;color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.sv-grid-chart-icon-btn:hover{border-color:var(--sg-border,#e2e8f0);color:var(--sg-accent,#2563eb);background:var(--sg-bg,#fff)}.sv-grid-chart-close{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:18px;line-height:1}.sv-grid-chart-close:hover{color:var(--sg-fg,#0f172a)}.sv-grid-chart-panel-body{flex:1;justify-content:center;align-items:stretch;min-height:0;padding:4px 10px 8px;display:flex;overflow:hidden}.sv-grid-chart-panel-body>.sv-grid-chart{justify-content:center;width:100%}.sv-grid-chart-empty{color:var(--sg-muted,#64748b);text-align:center;max-width:42ch;margin:0;font-size:13px}.sv-grid-chart-export{display:inline-flex;position:relative}.sv-grid-chart-export-menu{z-index:5;background:var(--sg-bg,#fff);border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);flex-direction:column;min-width:150px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #0000002e}.sv-grid-chart-export-menu button{font:inherit;text-align:left;border-radius:calc(var(--sg-radius,6px) - 2px);color:var(--sg-fg,#0f172a);cursor:pointer;white-space:nowrap;background:0 0;border:0;padding:6px 10px;font-size:12.5px}.sv-grid-chart-export-menu button:hover:not(:disabled){background:var(--sg-hover-bg,color-mix(in srgb, var(--sg-accent,#2563eb) 10%, transparent))}.sv-grid-chart-export-menu button:disabled{opacity:.45;cursor:default}.sv-grid-chart-ai-btn{align-items:center;gap:4px;display:inline-flex}.sv-grid-chart-ai-btn.is-active{border-color:var(--sg-accent,#2563eb);color:var(--sg-accent,#2563eb)}.sv-grid-chart-ai{flex-direction:column;gap:4px;display:flex}.sv-grid-chart-ai-row{align-items:center;gap:6px;display:flex}.sv-grid-chart-ai-input{min-width:0;font:inherit;color:var(--sg-fg,#0f172a);background:var(--sg-input-bg,var(--sg-bg,#fff));border:1px solid var(--sg-input-border,var(--sg-border,#e2e8f0));border-radius:var(--sg-radius,6px);flex:1;padding:5px 9px;font-size:12.5px}.sv-grid-chart-ai-input:focus{border-color:var(--sg-accent,#2563eb);outline:none}.sv-grid-chart-ai-msg{color:var(--sg-muted,#64748b);margin:0;font-size:12px}.sv-grid-chart-ai-msg.is-error{color:var(--sg-danger,#dc2626)}.sv-grid-chart-tabs{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sv-grid-chart-tab{border:1px solid var(--sg-border,#e2e8f0);border-radius:var(--sg-radius,6px);background:var(--sg-bg,#fff);align-items:center;display:inline-flex;overflow:hidden}.sv-grid-chart-tab.is-active{border-color:var(--sg-accent,#2563eb);background:color-mix(in srgb, var(--sg-accent,#2563eb) 10%, transparent)}.sv-grid-chart-tab-label{font:inherit;color:var(--sg-fg,#0f172a);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;max-width:140px;padding:3px 8px;font-size:12px;font-weight:600;overflow:hidden}.sv-grid-chart-tab.is-active .sv-grid-chart-tab-label{color:var(--sg-accent,#2563eb)}.sv-grid-chart-tab-x{color:var(--sg-muted,#64748b);cursor:pointer;background:0 0;border:0;padding:0 6px 0 2px;font-size:14px;line-height:1}.sv-grid-chart-tab-x:hover{color:var(--sg-fg,#0f172a)}\n/*$vite$:1*/";document.head.appendChild(s)}catch(e){}})();
|
|
@@ -11,6 +11,13 @@ type NumericFormatInput = {
|
|
|
11
11
|
valueIsPercentPoints?: boolean;
|
|
12
12
|
options?: Intl.NumberFormatOptions;
|
|
13
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* A cached `Intl.NumberFormat` for the locale and options given. Cached because
|
|
16
|
+
* constructing one is among the most expensive calls in the platform, and both
|
|
17
|
+
* callers do it per rendered value: once per cell while scrolling a number
|
|
18
|
+
* column, and once per axis tick, data label and tooltip while drawing a chart.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getNumberFormatter(locales: string | readonly string[] | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat;
|
|
14
21
|
/** A cached `Intl.DateTimeFormat` for the locale and options given. Cached because
|
|
15
22
|
* constructing one per cell is the dominant cost when formatting a date column. */
|
|
16
23
|
export declare function getDateFormatter(locales: string | readonly string[] | undefined, options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat;
|
package/dist/cell-formatting.js
CHANGED
|
@@ -59,7 +59,13 @@ export function resolveDatePattern(pattern, kind) {
|
|
|
59
59
|
* + currency + options).
|
|
60
60
|
*/
|
|
61
61
|
const numberFormatterCache = new Map();
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
|
+
* A cached `Intl.NumberFormat` for the locale and options given. Cached because
|
|
64
|
+
* constructing one is among the most expensive calls in the platform, and both
|
|
65
|
+
* callers do it per rendered value: once per cell while scrolling a number
|
|
66
|
+
* column, and once per axis tick, data label and tooltip while drawing a chart.
|
|
67
|
+
*/
|
|
68
|
+
export function getNumberFormatter(locales, options) {
|
|
63
69
|
// Stable key - for normal column configs the options object is reused
|
|
64
70
|
// (declared in module scope), so this stringifies a small static shape.
|
|
65
71
|
const key = (Array.isArray(locales) ? locales.join(',') : locales ?? '') +
|
package/dist/chart-export.d.ts
CHANGED
|
@@ -27,10 +27,31 @@ export declare function chartToPngBlob(source: SVGSVGElement | HTMLElement, opti
|
|
|
27
27
|
export declare function downloadChartPng(source: SVGSVGElement | HTMLElement, filename?: string, options?: ChartExportOptions): Promise<void>;
|
|
28
28
|
/**
|
|
29
29
|
* Serialize a chart's data to CSV: one row per category, one column per series
|
|
30
|
-
* (`Category, <series 1>, ...`).
|
|
31
|
-
*
|
|
30
|
+
* (`Category, <series 1>, ...`).
|
|
31
|
+
*
|
|
32
|
+
* A series that carries more than one number per category widens instead of
|
|
33
|
+
* losing them. `ohlc` becomes four columns, `boxes` five plus its outliers,
|
|
34
|
+
* `errors` two. This used to write `values` and nothing else, which quietly
|
|
35
|
+
* made "Export CSV" on a candlestick chart hand back the closing prices only -
|
|
36
|
+
* the screen-reader table was given the four real numbers on purpose and the
|
|
37
|
+
* export, which is what people actually take away, was not.
|
|
38
|
+
*
|
|
39
|
+
* Scatter has no categories, so it gets its own long-format table of points
|
|
40
|
+
* rather than exporting nothing at all.
|
|
41
|
+
*
|
|
42
|
+
* Still empty for the specs with no rectangular data to write: sankey, treemap,
|
|
43
|
+
* gauge and calendar.
|
|
32
44
|
*/
|
|
33
45
|
export declare function chartSpecToCsv(spec: ChartSpec): string;
|
|
46
|
+
/**
|
|
47
|
+
* Whether {@link chartSpecToCsv} would produce anything, without building it.
|
|
48
|
+
*
|
|
49
|
+
* The chart panel disables its CSV menu item on this. It has to be a predicate
|
|
50
|
+
* rather than `chartSpecToCsv(spec) !== ''` because that runs on every render,
|
|
51
|
+
* and serialising a 100,000-point series to decide whether to grey out a button
|
|
52
|
+
* is not a thing to do sixty times a second.
|
|
53
|
+
*/
|
|
54
|
+
export declare function chartCsvExportable(spec: ChartSpec): boolean;
|
|
34
55
|
/** Download the chart's data as a `.csv` file. Returns false if there's no
|
|
35
56
|
* rectangular category/series data to export. */
|
|
36
57
|
export declare function downloadChartCsv(spec: ChartSpec, filename?: string): boolean;
|
package/dist/chart-export.js
CHANGED
|
@@ -49,14 +49,14 @@ export function chartToSvgString(source, options = {}) {
|
|
|
49
49
|
// Drop interaction-only hit layers.
|
|
50
50
|
clone.querySelectorAll('.sv-grid-chart-hit').forEach((n) => n.remove());
|
|
51
51
|
const style = document.createElementNS('http://www.w3.org/2000/svg', 'style');
|
|
52
|
-
style.textContent = `
|
|
53
|
-
.sv-grid-chart-axis { fill: ${muted}; font-size: 10px; font-family: sans-serif; }
|
|
54
|
-
.sv-grid-chart-gridline { stroke: ${border}; stroke-width: 1; opacity: 0.6; }
|
|
55
|
-
.sv-grid-chart-gridline.is-zero { stroke: ${muted}; opacity: 0.9; }
|
|
56
|
-
.sv-grid-chart-datalabel { fill: ${fg}; font-size: 9.5px; font-weight: 600; font-family: sans-serif; }
|
|
57
|
-
.sv-grid-chart-datalabel.on-bar { fill: #fff; }
|
|
58
|
-
.sv-grid-chart-donut-total { fill: ${fg}; font-size: 16px; font-weight: 800; font-family: sans-serif; }
|
|
59
|
-
.sv-grid-chart-donut-label { fill: ${muted}; font-size: 10px; font-family: sans-serif; }
|
|
52
|
+
style.textContent = `
|
|
53
|
+
.sv-grid-chart-axis { fill: ${muted}; font-size: 10px; font-family: sans-serif; }
|
|
54
|
+
.sv-grid-chart-gridline { stroke: ${border}; stroke-width: 1; opacity: 0.6; }
|
|
55
|
+
.sv-grid-chart-gridline.is-zero { stroke: ${muted}; opacity: 0.9; }
|
|
56
|
+
.sv-grid-chart-datalabel { fill: ${fg}; font-size: 9.5px; font-weight: 600; font-family: sans-serif; }
|
|
57
|
+
.sv-grid-chart-datalabel.on-bar { fill: #fff; }
|
|
58
|
+
.sv-grid-chart-donut-total { fill: ${fg}; font-size: 16px; font-weight: 800; font-family: sans-serif; }
|
|
59
|
+
.sv-grid-chart-donut-label { fill: ${muted}; font-size: 10px; font-family: sans-serif; }
|
|
60
60
|
`;
|
|
61
61
|
clone.insertBefore(style, clone.firstChild);
|
|
62
62
|
const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
|
|
@@ -128,17 +128,91 @@ const csvCell = (v) => {
|
|
|
128
128
|
};
|
|
129
129
|
/**
|
|
130
130
|
* Serialize a chart's data to CSV: one row per category, one column per series
|
|
131
|
-
* (`Category, <series 1>, ...`).
|
|
132
|
-
*
|
|
131
|
+
* (`Category, <series 1>, ...`).
|
|
132
|
+
*
|
|
133
|
+
* A series that carries more than one number per category widens instead of
|
|
134
|
+
* losing them. `ohlc` becomes four columns, `boxes` five plus its outliers,
|
|
135
|
+
* `errors` two. This used to write `values` and nothing else, which quietly
|
|
136
|
+
* made "Export CSV" on a candlestick chart hand back the closing prices only -
|
|
137
|
+
* the screen-reader table was given the four real numbers on purpose and the
|
|
138
|
+
* export, which is what people actually take away, was not.
|
|
139
|
+
*
|
|
140
|
+
* Scatter has no categories, so it gets its own long-format table of points
|
|
141
|
+
* rather than exporting nothing at all.
|
|
142
|
+
*
|
|
143
|
+
* Still empty for the specs with no rectangular data to write: sankey, treemap,
|
|
144
|
+
* gauge and calendar.
|
|
133
145
|
*/
|
|
134
146
|
export function chartSpecToCsv(spec) {
|
|
135
|
-
const cats = spec.categories ?? [];
|
|
136
147
|
const series = spec.series ?? [];
|
|
148
|
+
// Scatter: one row per point. `categories` is empty for these, so the
|
|
149
|
+
// category path below would return '' and the export button would do nothing.
|
|
150
|
+
if (series.some((s) => s.points?.length)) {
|
|
151
|
+
const header = ['Series', 'X', 'Y', 'Size', 'Label'].map(csvCell).join(',');
|
|
152
|
+
const rows = [];
|
|
153
|
+
for (const s of series) {
|
|
154
|
+
for (const p of s.points ?? []) {
|
|
155
|
+
rows.push([s.label, p.x, p.y, p.r ?? '', p.label ?? ''].map(csvCell).join(','));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return rows.length ? [header, ...rows].join('\n') : '';
|
|
159
|
+
}
|
|
160
|
+
const cats = spec.categories ?? [];
|
|
137
161
|
if (!cats.length || !series.length)
|
|
138
162
|
return '';
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
163
|
+
// One header cell per column a series contributes. A plain series keeps its
|
|
164
|
+
// bare label, so an existing export is byte-identical.
|
|
165
|
+
const header = ['Category'];
|
|
166
|
+
for (const s of series) {
|
|
167
|
+
if (s.ohlc)
|
|
168
|
+
header.push(`${s.label} Open`, `${s.label} High`, `${s.label} Low`, `${s.label} Close`);
|
|
169
|
+
else if (s.boxes)
|
|
170
|
+
header.push(`${s.label} Min`, `${s.label} Q1`, `${s.label} Median`, `${s.label} Q3`, `${s.label} Max`, `${s.label} Outliers`);
|
|
171
|
+
else if (s.errors)
|
|
172
|
+
header.push(s.label, `${s.label} Low`, `${s.label} High`);
|
|
173
|
+
else
|
|
174
|
+
header.push(s.label);
|
|
175
|
+
}
|
|
176
|
+
const rows = cats.map((cat, i) => {
|
|
177
|
+
const cells = [cat];
|
|
178
|
+
for (const s of series) {
|
|
179
|
+
if (s.ohlc) {
|
|
180
|
+
const k = s.ohlc[i];
|
|
181
|
+
cells.push(k?.o ?? '', k?.h ?? '', k?.l ?? '', k?.c ?? '');
|
|
182
|
+
}
|
|
183
|
+
else if (s.boxes) {
|
|
184
|
+
const b = s.boxes[i];
|
|
185
|
+
// Outliers are a list inside one cell; csvCell quotes it.
|
|
186
|
+
cells.push(b?.min ?? '', b?.q1 ?? '', b?.median ?? '', b?.q3 ?? '', b?.max ?? '', b?.outliers?.join(' ') ?? '');
|
|
187
|
+
}
|
|
188
|
+
else if (s.errors) {
|
|
189
|
+
const v = s.values[i];
|
|
190
|
+
const e = s.errors[i];
|
|
191
|
+
const lo = e == null ? '' : typeof e === 'number' ? (v ?? 0) - Math.abs(e) : Math.min(e.lo, e.hi);
|
|
192
|
+
const hi = e == null ? '' : typeof e === 'number' ? (v ?? 0) + Math.abs(e) : Math.max(e.lo, e.hi);
|
|
193
|
+
cells.push(v ?? '', lo, hi);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
cells.push(s.values[i] ?? '');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return cells.map(csvCell).join(',');
|
|
200
|
+
});
|
|
201
|
+
return [header.map(csvCell).join(','), ...rows].join('\n');
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Whether {@link chartSpecToCsv} would produce anything, without building it.
|
|
205
|
+
*
|
|
206
|
+
* The chart panel disables its CSV menu item on this. It has to be a predicate
|
|
207
|
+
* rather than `chartSpecToCsv(spec) !== ''` because that runs on every render,
|
|
208
|
+
* and serialising a 100,000-point series to decide whether to grey out a button
|
|
209
|
+
* is not a thing to do sixty times a second.
|
|
210
|
+
*/
|
|
211
|
+
export function chartCsvExportable(spec) {
|
|
212
|
+
const series = spec.series ?? [];
|
|
213
|
+
if (series.some((s) => s.points?.length))
|
|
214
|
+
return true;
|
|
215
|
+
return !!(spec.categories?.length && series.length);
|
|
142
216
|
}
|
|
143
217
|
/** Download the chart's data as a `.csv` file. Returns false if there's no
|
|
144
218
|
* rectangular category/series data to export. */
|