@svgrid/enterprise 2.6.2 → 2.6.4

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.
Files changed (34) hide show
  1. package/README.md +1 -1
  2. package/dist/cdn/svgrid-enterprise.svelte-external.js +1682 -1677
  3. package/dist/designer/assets/{GridMenus-Bjr19Tz_.js → GridMenus-BIU7Nfbr.js} +1 -1
  4. package/dist/designer/assets/SvGrid.helpers-C6wxF55r.js +1 -0
  5. package/dist/designer/assets/SvGridCellEditor-CMtmQINJ.js +2 -0
  6. package/dist/designer/assets/SvListBox-D-_I_Aff.js +1 -0
  7. package/dist/designer/assets/editor-registry-BB1Qb5mp.js +1 -0
  8. package/dist/designer/assets/{index-xjfKckuH.js → index-DxBZuosR.js} +42 -42
  9. package/dist/designer/assets/js-scroller.svelte-03aI6ovu.js +110 -0
  10. package/dist/designer/assets/row-drag-touch-IuJPEt0z.js +1 -0
  11. package/dist/designer/assets/src-D8qr49rE.css +1 -0
  12. package/dist/designer/assets/src-Dn1Axx6T.js +2896 -0
  13. package/dist/designer/index.html +7 -5
  14. package/dist/license-core.d.ts +1 -1
  15. package/dist/license-core.js +1 -1
  16. package/dist/node/studio.js +114 -78
  17. package/dist/studio/emit-project.js +16 -7
  18. package/dist/studio/emit-schema.d.ts +1 -4
  19. package/dist/studio/emit-schema.js +7 -29
  20. package/dist/studio/init-flow.js +2 -2
  21. package/dist/studio/scaffold-app.d.ts +8 -0
  22. package/dist/studio/scaffold-app.js +7 -2
  23. package/dist/studio/scaffold.d.ts +8 -0
  24. package/dist/studio/scaffold.js +5 -0
  25. package/dist/studio/themes.d.ts +17 -1
  26. package/dist/studio/themes.js +26 -1
  27. package/dist/studio/ui-components.generated.js +8 -1
  28. package/dist/version.d.ts +1 -1
  29. package/dist/version.js +1 -1
  30. package/package.json +6 -6
  31. package/dist/designer/assets/SvListBox-BB8rt4aP.js +0 -1
  32. package/dist/designer/assets/js-scroller.svelte-CGkUUXwV.js +0 -110
  33. package/dist/designer/assets/src-BT3LjWJL.css +0 -1
  34. package/dist/designer/assets/src-DDhAK0WP.js +0 -2893
@@ -9,7 +9,9 @@
9
9
  * shell, grids, charts, KPIs, forms - not just the accent.
10
10
  *
11
11
  * Pure + node-safe (studio subtree): plain data + helpers, so the same tokens
12
- * drive the browser preview and the emitted `+layout.svelte` / `app.css`.
12
+ * drive the browser preview and every emitted output - `app.css` for the full
13
+ * app and the fragment, the `<svelte:head>` of the CLI `add` scaffolds - via
14
+ * `themeTokenCss` below, the single place the token CSS is built.
13
15
  */
14
16
  import { type ThemeMode, type ThemePalette, type ThemePreset } from '@svgrid/grid/themes';
15
17
  import type { ProjectTheme } from './project.js';
@@ -30,5 +32,19 @@ export declare function resolveThemeTokens(theme?: ProjectTheme): Record<string,
30
32
  /** Resolve the `--sg-*` tokens for a project theme in an EXPLICIT mode (for the
31
33
  * generated app's light/dark switcher, which ships both token sets). */
32
34
  export declare function resolveThemeTokensFor(theme: ProjectTheme | undefined, mode: 'light' | 'dark'): Record<string, string>;
35
+ /**
36
+ * The `--sg-*` token rules for a project theme, as CSS text. `:root` carries
37
+ * the mode picked in Studio (what the server-rendered page shows before
38
+ * hydration), and both palettes are scoped by `[data-theme]` on `<html>` for
39
+ * the generated app's light/dark switcher. An explicit accent override is
40
+ * applied to both. No theme -> the default preset, so every output is themed.
41
+ *
42
+ * `layer` wraps the rules in a cascade layer. Use it for drop-in outputs (the
43
+ * fragment, `svgrid-studio add`): layered declarations lose to unlayered ones,
44
+ * so a host app that already defines its own `--sg-*` tokens keeps winning.
45
+ */
46
+ export declare function themeTokenCss(theme?: ProjectTheme, opts?: {
47
+ layer?: string;
48
+ }): string;
33
49
  /** An inline `style` string (`--sg-x: y; ...; color-scheme; font-family`) for previews. */
34
50
  export declare function themeStyleString(theme?: ProjectTheme): string;
@@ -9,7 +9,9 @@
9
9
  * shell, grids, charts, KPIs, forms - not just the accent.
10
10
  *
11
11
  * Pure + node-safe (studio subtree): plain data + helpers, so the same tokens
12
- * drive the browser preview and the emitted `+layout.svelte` / `app.css`.
12
+ * drive the browser preview and every emitted output - `app.css` for the full
13
+ * app and the fragment, the `<svelte:head>` of the CLI `add` scaffolds - via
14
+ * `themeTokenCss` below, the single place the token CSS is built.
13
15
  */
14
16
  import { themePresets, defaultThemePreset, getThemePreset, resolveThemeTokens as resolveTokens, } from '@svgrid/grid/themes';
15
17
  /** The built-in Studio themes, in gallery order (default first). */
@@ -33,6 +35,29 @@ export function resolveThemeTokensFor(theme, mode) {
33
35
  const preset = getStudioTheme(theme?.preset) ?? defaultStudioTheme;
34
36
  return resolveTokens(preset, mode, theme?.accent);
35
37
  }
38
+ /**
39
+ * The `--sg-*` token rules for a project theme, as CSS text. `:root` carries
40
+ * the mode picked in Studio (what the server-rendered page shows before
41
+ * hydration), and both palettes are scoped by `[data-theme]` on `<html>` for
42
+ * the generated app's light/dark switcher. An explicit accent override is
43
+ * applied to both. No theme -> the default preset, so every output is themed.
44
+ *
45
+ * `layer` wraps the rules in a cascade layer. Use it for drop-in outputs (the
46
+ * fragment, `svgrid-studio add`): layered declarations lose to unlayered ones,
47
+ * so a host app that already defines its own `--sg-*` tokens keeps winning.
48
+ */
49
+ export function themeTokenCss(theme, opts = {}) {
50
+ const decl = (m) => Object.entries(m).map(([k, v]) => ` ${k}: ${v};`).join('\n');
51
+ const mode = isDarkTheme(theme) ? 'dark' : 'light';
52
+ const light = resolveThemeTokensFor(theme, 'light');
53
+ const dark = resolveThemeTokensFor(theme, 'dark');
54
+ const rules = [
55
+ `:root {\n${decl(mode === 'dark' ? dark : light)}\n color-scheme: ${mode};\n}`,
56
+ `:root[data-theme="light"] {\n${decl(light)}\n color-scheme: light;\n}`,
57
+ `:root[data-theme="dark"] {\n${decl(dark)}\n color-scheme: dark;\n}`,
58
+ ].join('\n');
59
+ return opts.layer ? `@layer ${opts.layer} {\n${rules}\n}` : rules;
60
+ }
36
61
  /** An inline `style` string (`--sg-x: y; ...; color-scheme; font-family`) for previews. */
37
62
  export function themeStyleString(theme) {
38
63
  const tokens = resolveThemeTokens(theme);
@@ -6639,7 +6639,7 @@ export const GENERATED_UI_SURFACE = {
6639
6639
  "key": "sortable",
6640
6640
  "label": "Sortable",
6641
6641
  "type": "boolean",
6642
- "description": "Convenience shortcuts to switch a whole capability on without wiring `features` or the finer-grained props by hand. Every capability is OFF by default - a bare grid is a plain read-only table - so set the shortcut `true` to opt in. (`false` / omitted both leave it off; the shortcut is mainly there to turn things ON.) `sortable` - column sorting (injects `rowSortingFeature`) `filterable` - column filtering (injects `columnFilteringFeature`) `editable` - inline cell editing (alias of `enableInlineEditing`) `groupable` - row grouping controls(alias of `showGroupingControls`, also injects `columnGroupingFeature`) `pageable` - pagination footer (alias of `showPagination`) Fine-grained props (`enableInlineEditing`, `showPagination`, ...) still work; the shortcut wins only when it is explicitly set.",
6642
+ "description": "Convenience shortcuts to switch a whole capability on without wiring `features` or the finer-grained props by hand. Every capability is OFF by default - a bare grid is a plain read-only table - so set the shortcut `true` to opt in. (`false` / omitted both leave it off; the shortcut is mainly there to turn things ON.) `sortable` - column sorting (injects `rowSortingFeature`) `filterable` - column filtering (injects `columnFilteringFeature`) `editable` - inline cell editing (alias of `enableInlineEditing`) `selectable` - cell selection (alias of `enableCellSelection`) `groupable` - row grouping controls(alias of `showGroupingControls`, also injects `columnGroupingFeature`) `pageable` - pagination footer (alias of `showPagination`) Fine-grained props (`enableInlineEditing`, `showPagination`, ...) still work; the shortcut wins only when it is explicitly set.",
6643
6643
  "group": "common"
6644
6644
  },
6645
6645
  {
@@ -6654,6 +6654,13 @@ export const GENERATED_UI_SURFACE = {
6654
6654
  "type": "boolean",
6655
6655
  "group": "common"
6656
6656
  },
6657
+ {
6658
+ "key": "selectable",
6659
+ "label": "Selectable",
6660
+ "type": "boolean",
6661
+ "description": "Cell selection - click a cell to select it, drag or shift-click to extend the selection to a range. Alias of `enableCellSelection`, and the highest priority of the three inputs that decide it: `selectable` -> `enableCellSelection` -> `selectionMode`. NOTE the asymmetry with its siblings, which are all off until you opt in: this one is **ON by default**, because `selectionMode` defaults to `'both'`. It is named here so the capability is discoverable next to the other shortcuts, and so `selectable={false}` is a one-word way to turn cell selection off (the longhand being `selectionMode=\"none\"`, which also removes the row-selection surface). This is the CELL surface only. The selection **checkbox column** is the other half of `selectionMode`, controlled by `showRowSelection` - also on by default, and it needs no feature import (verified: the column renders and toggles rows with an empty `features` set). Use `selectionMode` when you want to move both surfaces at once.",
6662
+ "group": "common"
6663
+ },
6657
6664
  {
6658
6665
  "key": "treeData",
6659
6666
  "label": "Tree Data",
package/dist/version.d.ts CHANGED
@@ -10,4 +10,4 @@
10
10
  *
11
11
  * `version.test.ts` asserts this matches `package.json`, so the two cannot drift.
12
12
  */
13
- export declare const SVGRID_VERSION = "2.6.2";
13
+ export declare const SVGRID_VERSION = "2.6.4";
package/dist/version.js CHANGED
@@ -10,4 +10,4 @@
10
10
  *
11
11
  * `version.test.ts` asserts this matches `package.json`, so the two cannot drift.
12
12
  */
13
- export const SVGRID_VERSION = '2.6.2';
13
+ export const SVGRID_VERSION = '2.6.4';
package/package.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "type": "commercial",
5
5
  "url": "https://svgrid.com/pricing"
6
6
  },
7
- "version": "2.6.2",
8
- "description": "Enterprise feature pack for SvGrid: Excel (xlsx), PDF, CSV, TSV and HTML export, Excel/CSV/JSON import, pivot tables with a drag-and-drop designer, paginated print, Kanban board and scheduler views. Requires a paid license key.",
7
+ "version": "2.6.4",
8
+ "description": "Enterprise feature pack for SvGrid: Excel (xlsx) and PDF export, Excel/CSV/JSON import, pivot tables with a drag-and-drop designer, paginated print, Kanban board and scheduler renderers, no-code alerts and batch editing. CSV, TSV and JSON export are already free in @svgrid/grid. Requires a paid license key.",
9
9
  "license": "SEE LICENSE IN LICENSE",
10
10
  "author": "jQWidgets <sales@jqwidgets.com>",
11
11
  "homepage": "https://svgrid.com/pricing",
@@ -65,7 +65,7 @@
65
65
  "jszip": "^3.10.0",
66
66
  "pdfmake": "^0.2.0",
67
67
  "svelte": "^5.0.0",
68
- "@svgrid/grid": "^2.6.4"
68
+ "@svgrid/grid": "^2.6.17"
69
69
  },
70
70
  "peerDependenciesMeta": {
71
71
  "jszip": {
@@ -83,7 +83,7 @@
83
83
  "svelte": "^5.55.5",
84
84
  "typescript": "6.0.3",
85
85
  "vite": "^8.2.1",
86
- "@svgrid/grid": "^2.6.4"
86
+ "@svgrid/grid": "^2.6.17"
87
87
  },
88
88
  "repository": {
89
89
  "type": "git",
@@ -113,8 +113,8 @@
113
113
  "scripts": {
114
114
  "test": "vitest run",
115
115
  "test:types": "tsc -p tsconfig.json --noEmit",
116
- "build": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist && node ./scripts/build-cdn.mjs && node ./scripts/build-node.mjs && node ./scripts/build-designer.mjs",
117
- "build:lib": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist",
116
+ "build": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist && node ../../tools/add-dist-extensions.mjs ./dist && node ./scripts/build-cdn.mjs && node ./scripts/build-node.mjs && node ./scripts/build-designer.mjs",
117
+ "build:lib": "svelte-package --input ./src --output ./dist && node ../../tools/strip-dist-tests.mjs ./dist && node ../../tools/add-dist-extensions.mjs ./dist",
118
118
  "build:cdn": "node ./scripts/build-cdn.mjs",
119
119
  "build:node": "node ./scripts/build-node.mjs",
120
120
  "build:designer": "node ./scripts/build-designer.mjs",
@@ -1 +0,0 @@
1
- import{D as e,H as t,I as n,J as r,K as i,L as a,M as o,P as s,R as c,U as l,W as u,X as d,Z as f,at as p,b as m,bt as h,ct as g,d as _,dt as v,f as y,g as b,it as x,k as S,l as C,mt as w,o as ee,p as te,pt as T,r as E,rt as D,s as ne,st as O,u as re,vt as k,x as A}from"./disclose-version-CIm4S9xS.js";import{c as j,i as M,l as ie,n as ae,o as oe,s as se,t as ce,u as le}from"./js-scroller.svelte-CGkUUXwV.js";import{a as ue,i as N,r as de}from"./dismissable-2EZKoens.js";var P=0;function F(e,t){if(e==null)return[];if(e instanceof Set||Array.isArray(e)){let n=[...e];return t?n:n.slice(0,1)}return[e]}function I(e,t){return e instanceof Set?e:new Set(F(e,t))}function fe(e){let t=`sv-lb-${P++}`,n=()=>e.options(),r=()=>e.multiple?.()??!1,a=()=>e.disabled?.()??!1,o=g(0),s=v(()=>I(e.value(),r())),c=v(()=>F(e.value(),r())),l=v(()=>n().map((e,t)=>e.disabled?-1:t).filter(e=>e>=0));f(()=>{let e=n()[i(o)];(!e||e.disabled)&&O(o,i(l)[0]??0,!0)});let u=e=>i(s).has(e),d=e=>e===i(o),p=e=>`${t}-opt-${e}`;function m(e){let t=n()[e];t&&!t.disabled&&O(o,e,!0)}function h(t){let c=n()[t];if(!(!c||c.disabled||a())){if(O(o,t,!0),r()){let t=new Set(i(s));t.has(c.value)?t.delete(c.value):t.add(c.value),e.onChange?.(e.value()instanceof Set?t:[...t])}else e.onChange?.(c.value)}}function _(e){let t=i(l);if(!t.length)return;let n=t[(t.indexOf(i(o))+e+t.length)%t.length];n!=null&&O(o,n,!0)}let y=()=>{O(o,i(l)[0]??0,!0)},b=()=>{O(o,i(l).at(-1)??0,!0)},x=M();function S(e){let t=x.push(e.toLowerCase()),r=ie(n(),t,i(o));r>=0&&O(o,r,!0)}function C(e){if(!a())switch(e.key){case`ArrowDown`:e.preventDefault(),_(1);break;case`ArrowUp`:e.preventDefault(),_(-1);break;case`Home`:e.preventDefault(),y();break;case`End`:e.preventDefault(),b();break;case` `:case`Enter`:e.preventDefault(),h(i(o));break;default:j(e)&&S(e.key)}}let w=()=>({id:e.id?.(),invalid:e.invalid?.(),required:e.required?.(),error:e.error?.(),hint:e.hint?.(),ariaLabel:e.ariaLabel?.()});return{get activeIndex(){return i(o)},get selectedValues(){return i(c)},isSelected:u,isActive:d,setActive:m,pick:h,move:_,first:y,last:b,onKeydown:C,rootProps:()=>({role:`listbox`,id:e.id?.(),"aria-multiselectable":r(),"aria-disabled":a(),"aria-activedescendant":n()[i(o)]?p(i(o)):void 0,...N(w()),tabindex:a()?-1:0,onkeydown:C}),optionProps:e=>{let t=n()[e];return{role:`option`,id:p(e),"aria-selected":t?u(t.value):!1,"aria-disabled":t?.disabled,"data-idx":e,"data-active":d(e)?``:void 0,"data-selected":t&&u(t.value)?``:void 0,onclick:()=>h(e),onpointermove:()=>m(e)}}}}var pe=c(`<span aria-hidden="true"></span>`),me=c(`<span class="sv-listbox__check svelte-j44quc" aria-hidden="true"> </span>`),he=c(`<span class="sv-listbox__label svelte-j44quc"> </span>`),ge=c(`<!> <!>`,1),_e=c(`<div><!></div>`),ve=c(`<div class="sv-listbox__group svelte-j44quc" role="presentation"> </div>`),ye=c(`<div class="sv-listbox__sb svelte-j44quc" aria-hidden="true"><div></div></div>`),be=c(`<div class="sv-listbox__vp svelte-j44quc"></div> <!>`,1),xe=c(`<div class="sv-listbox__group svelte-j44quc" role="presentation"> </div>`),Se=c(`<!> <!>`,1),Ce=c(`<input type="hidden"/>`),we=c(`<div><!></div> <!>`,1);function L(t,c){w(c,!0);let j=(t,r=h)=>{var i=ge(),l=x(i),u=e=>{var t=pe();let i;d(e=>i=A(t,1,`sv-listbox__box svelte-j44quc`,null,i,e),[()=>({"is-on":G(r())})]),n(e,t)},f=e=>{var t=me(),i=D(t,!0);k(t),d(e=>s(i,e),[()=>G(r())?`✓`:``]),n(e,t)};o(l,e=>{P()?e(u):N()&&e(f,1)});var m=p(l,2),g=t=>{var i=a(),o=x(i);e(o,()=>c.item??c.itemTemplate,r),n(t,i)},_=e=>{var t=he(),i=D(t,!0);k(t),d(()=>s(i,r().label)),n(e,t)};o(m,e=>{c.item??c.itemTemplate?e(g):e(_,-1)}),n(t,i)},M=(e,t=h,r=h,i=h,a=h)=>{var o=_e();_(o,(e,t,n)=>({class:`sv-listbox__opt`,...e,[C]:t,[re]:n}),[()=>W.optionProps(r()),()=>({"is-selected":G(t()),"is-active":W.isActive(r()),"is-disabled":t().disabled}),()=>({height:`${i()??Oe(t())}px`,transform:a()==null?void 0:`translateY(${a()}px)`})],void 0,void 0,`svelte-j44quc`);var s=D(o);j(s,t),k(o),n(e,o)},ie=E(c,`value`,3,null),N=E(c,`multiple`,3,!1),P=E(c,`checkbox`,3,!1),F=E(c,`block`,3,!1),I=E(c,`disabled`,3,!1),L=E(c,`size`,3,`md`),R=E(c,`rows`,3,7),Te=E(c,`virtual`,3,!1),z=E(c,`rowHeight`,3,32),Ee=E(c,`groupHeaderHeight`,3,28),B=E(c,`invalid`,3,!1),V=E(c,`required`,3,!1),De=ue(`sv-lb`),H=v(()=>c.id??De),U=v(()=>le(c.options)),W=fe({options:()=>i(U),value:()=>ie(),onChange:e=>c.onChange?.(e),multiple:()=>N(),disabled:()=>I(),ariaLabel:()=>c.ariaLabel,id:()=>i(H),invalid:()=>B(),required:()=>V(),error:()=>c.error,hint:()=>c.hint}),G=e=>W.isSelected(e.value),K=v(()=>typeof z()==`number`?z():32),Oe=e=>typeof z()==`function`?z()(e,e.index):z(),q=v(Te),J=g(null),Y=g(0),X=v(()=>oe(i(U),{rowHeight:z(),groupHeaderHeight:Ee()})),ke=v(()=>!i(X).hasGroups&&typeof z()==`number`),Ae=v(()=>i(ke)?i(K):e=>i(X).sizeAt(e)),Z=v(()=>i(Y)>0?i(Y):Math.max(1,R()*i(K))),Q=ae(r(()=>({count:i(X).entries.length,estimateSize:i(Ae),overscan:6,viewportHeight:i(Z)})));f(()=>{let e=i(X).entries.length,t=i(Ae);r(()=>Q.setOptions({count:e,estimateSize:t}))}),f(()=>{let e=i(Z);r(()=>Q.setViewportHeight(e))});let je=v(()=>(Q.version,Q.getVirtualItems())),Me=v(()=>(Q.version,Q.getTotalSize())),$=ce({virtualizer:Q,totalSize:()=>i(Me),viewport:()=>i(Z),lineStep:()=>i(K)});f(()=>{let e=W.activeIndex;if(i(q)){let t=i(X).optionFlatIndex[e];if(t==null)return;r(()=>$.ensureIndexVisible(t))}else queueMicrotask(()=>i(J)?.querySelector(`[data-idx="${e}"]`)?.scrollIntoView({block:`nearest`}))}),de(t,{get id(){return i(H)},get label(){return c.label},get hint(){return c.hint},get error(){return c.error},get required(){return V()},get dir(){return c.dir},get block(){return F()},children:(e,t)=>{var r=we(),f=x(r);_(f,e=>({class:`sv-listbox sv-listbox--${L()??``}`,onwheel:i(q)?$.onWheel:void 0,...e,[C]:{"is-invalid":B(),"is-virtual":i(q),"is-checkbox":P(),"is-block":F()},[re]:{"--sv-rows":R(),"--sv-row-h":`${i(K)}px`}}),[()=>W.rootProps()],void 0,void 0,`svelte-j44quc`);var h=D(f),g=e=>{var t=be(),r=x(t);S(r,21,()=>i(je),e=>e.key,(e,t)=>{let r=v(()=>i(X).entries[i(t).index]);var c=a(),l=x(c),u=e=>{var a=ve();let o;var c=D(a,!0);k(a),d(()=>{o=m(a,``,o,{height:`${i(t).size}px`,transform:`translateY(${i(t).start-$.scrollOffset}px)`}),s(c,i(r).label)}),n(e,a)},f=e=>{M(e,()=>i(r).opt,()=>i(r).opt.index,()=>i(t).size,()=>i(t).start-$.scrollOffset)};o(l,e=>{i(r)?.type===`group`?e(u):i(r)&&e(f,1)}),n(e,c)}),k(r);var c=p(r,2),f=e=>{var t=ye(),r=D(t);let i,a;k(t),d(()=>{i=A(r,1,`sv-listbox__thumb svelte-j44quc`,null,i,{"is-dragging":$.dragging}),a=m(r,``,a,{height:`${$.thumbH}px`,transform:`translateY(${$.thumbTop}px)`})}),l(`pointerdown`,t,function(...e){$.onTrackDown?.apply(this,e)}),l(`pointerdown`,r,function(...e){$.onThumbDown?.apply(this,e)}),l(`pointermove`,r,function(...e){$.onThumbMove?.apply(this,e)}),l(`pointerup`,r,function(...e){$.onThumbUp?.apply(this,e)}),u(`pointercancel`,r,function(...e){$.onThumbUp?.apply(this,e)}),n(e,t)};o(c,e=>{$.maxOffset>0&&e(f)}),l(`pointerdown`,r,function(...e){$.onContentDown?.apply(this,e)}),l(`pointermove`,r,function(...e){$.onContentMove?.apply(this,e)}),l(`pointerup`,r,function(...e){$.onContentUp?.apply(this,e)}),u(`pointercancel`,r,function(...e){$.onContentUp?.apply(this,e)}),ne(r,`clientHeight`,e=>O(Y,e)),n(e,t)},w=e=>{var t=a(),r=x(t);S(r,17,()=>se(i(U)),e=>e.group??` `,(e,t)=>{var r=Se(),a=x(r),c=e=>{var r=xe(),a=D(r,!0);k(r),d(()=>s(a,i(t).group)),n(e,r)};o(a,e=>{i(t).group!=null&&e(c)});var l=p(a,2);S(l,17,()=>i(t).options,e=>e.index,(e,t)=>{M(e,()=>i(t),()=>i(t).index)}),n(e,r)}),n(e,t)};o(h,e=>{i(q)?e(g):e(w,-1)}),k(f),ee(f,e=>O(J,e),()=>i(J));var T=p(f,2),E=e=>{var t=a(),r=x(t);S(r,16,()=>W.selectedValues,e=>e,(e,t)=>{var r=Ce();y(r),d(()=>{te(r,`name`,c.name),b(r,t)}),n(e,r)}),n(e,t)};o(T,e=>{c.name&&e(E)}),n(e,r)},$$slots:{default:!0}}),T()}t([`pointerdown`,`pointermove`,`pointerup`]);export{L as t};
@@ -1,110 +0,0 @@
1
- import{J as e,K as t,Z as n,ct as r,dt as i,st as a}from"./disclose-version-CIm4S9xS.js";var o=16,s=280,c=50,l=`http://www.w3.org/2000/svg`;function u(){let e=document.createElementNS(l,`svg`);e.setAttribute(`viewBox`,`0 0 24 24`),e.setAttribute(`fill`,`none`),e.setAttribute(`stroke`,`currentColor`),e.setAttribute(`stroke-width`,`3`),e.setAttribute(`stroke-linecap`,`round`),e.setAttribute(`stroke-linejoin`,`round`);let t=document.createElementNS(l,`path`);return t.setAttribute(`d`,`M6 9l6 6 6-6`),e.appendChild(t),e}var d=`
2
- :host {
3
- display: flex;
4
- user-select: none;
5
- background: var(--sg-scrollbar-bg, #eef2f8);
6
- /* The 1px separator is drawn on the INNER edge only (the edge facing
7
- the grid body) via the orientation rules below. A full inset box
8
- here doubled up with the grid's own frame border on the outer edge,
9
- reading as a 2px border - most visible in dense-gridline themes
10
- like Excel, which should show a single 1px line. */
11
- /* Start hidden + non-interactive - viewport/content sizes are 0 until
12
- after the first layout pass, so without this default the scrollbar
13
- paints visible for one frame and then JS hides it on mount. That
14
- flicker is what shows up as a "flashing horizontal scrollbar"
15
- every time a demo first renders. updateGeometry() switches us to
16
- opacity 1 the moment the grid genuinely has overflow. */
17
- opacity: 0;
18
- pointer-events: none;
19
- transition: opacity 120ms ease;
20
- }
21
- :host([orientation="vertical"]) {
22
- flex-direction: column;
23
- width: ${o}px;
24
- /* LTR: vertical scrollbar sits at the right, inner edge is the left. */
25
- box-shadow: inset 1px 0 0 0 var(--sg-scrollbar-border, rgba(15, 23, 42, 0.04));
26
- }
27
- :host([orientation="vertical"]:dir(rtl)) {
28
- /* RTL flips the scrollbar to the left, so the inner edge is the right. */
29
- box-shadow: inset -1px 0 0 0 var(--sg-scrollbar-border, rgba(15, 23, 42, 0.04));
30
- }
31
- :host([orientation="horizontal"]) {
32
- flex-direction: row;
33
- height: ${o}px;
34
- /* Horizontal scrollbar sits at the bottom, inner edge is the top. */
35
- box-shadow: inset 0 1px 0 0 var(--sg-scrollbar-border, rgba(15, 23, 42, 0.04));
36
- }
37
- .arrow {
38
- flex: none;
39
- display: flex;
40
- align-items: center;
41
- justify-content: center;
42
- width: ${o}px;
43
- height: ${o}px;
44
- margin: 0;
45
- padding: 0;
46
- border: 0;
47
- border-radius: 3px;
48
- background: transparent;
49
- color: var(--sg-scrollbar-arrow, #64748b);
50
- cursor: pointer;
51
- transition: background-color 100ms ease, color 100ms ease;
52
- }
53
- .arrow:hover {
54
- background: var(--sg-scrollbar-arrow-hover-bg, #dde4ee);
55
- color: var(--sg-scrollbar-arrow-hover, #1f2937);
56
- }
57
- .arrow:active {
58
- background: var(--sg-scrollbar-arrow-active-bg, #c7d1df);
59
- color: var(--sg-scrollbar-arrow-active, #0f172a);
60
- }
61
- .arrow:disabled {
62
- color: var(--sg-scrollbar-arrow-disabled, #cbd5e1);
63
- cursor: default;
64
- }
65
- .arrow:disabled:hover {
66
- background: transparent;
67
- }
68
- .arrow svg {
69
- width: 10px;
70
- height: 10px;
71
- display: block;
72
- }
73
- :host([orientation="vertical"]) .arrow-start svg {
74
- transform: rotate(180deg);
75
- }
76
- :host([orientation="horizontal"]) .arrow-start svg {
77
- transform: rotate(90deg);
78
- }
79
- :host([orientation="horizontal"]) .arrow-end svg {
80
- transform: rotate(-90deg);
81
- }
82
- .track {
83
- position: relative;
84
- flex: 1 1 0;
85
- min-width: 0;
86
- min-height: 0;
87
- }
88
- .thumb {
89
- position: absolute;
90
- border-radius: var(--sg-scrollbar-thumb-radius, 6px);
91
- background: var(--sg-scrollbar-thumb, #b1bccd);
92
- cursor: pointer;
93
- transition: background-color 100ms ease;
94
- }
95
- .thumb:hover {
96
- background: var(--sg-scrollbar-thumb-hover, #8693a7);
97
- }
98
- .thumb:active {
99
- background: var(--sg-scrollbar-thumb-active, #64748b);
100
- }
101
- :host([orientation="vertical"]) .thumb {
102
- left: 3px;
103
- right: 3px;
104
- }
105
- :host([orientation="horizontal"]) .thumb {
106
- top: 3px;
107
- bottom: 3px;
108
- }
109
- `,f=typeof HTMLElement<`u`?HTMLElement:class{},p=class extends f{constructor(...e){super(...e),this.dragging=!1,this.dragStart=0,this.valueStart=0,this.holdTimer=null,this.resizeObserver=null,this.resizeFrame=0,this.onArrowStartPointerDown=e=>{e.preventDefault(),this.startHold(-1)},this.onArrowEndPointerDown=e=>{e.preventDefault(),this.startHold(1)},this.stopHold=()=>{this.holdTimer!==null&&(clearTimeout(this.holdTimer),clearInterval(this.holdTimer),this.holdTimer=null)},this.onThumbPointerDown=e=>{e.preventDefault(),this.dragging=!0,this.dragStart=this.orientation===`vertical`?e.clientY:e.clientX,this.valueStart=this.value,document.addEventListener(`pointermove`,this.onPointerMove),document.addEventListener(`pointerup`,this.onPointerUp)},this.onTrackPointerDown=e=>{if(e.target===this.thumb)return;let t=this.track.getBoundingClientRect(),n=this.orientation===`vertical`?e.clientY-t.top:e.clientX-t.left,r=this.orientation===`vertical`?t.height:t.width,i=this.computeThumbSize(r),a=Math.max(r-i,1),o=Math.min(Math.max(n-i/2,0),a);this.emitScroll(o/a*this.maxValue)},this.onPointerMove=e=>{if(!this.dragging)return;let t=(this.orientation===`vertical`?e.clientY:e.clientX)-this.dragStart,n=this.track.getBoundingClientRect(),r=this.orientation===`vertical`?n.height:n.width,i=this.computeThumbSize(r),a=Math.max(r-i,1);this.emitScroll(this.valueStart+t/a*this.maxValue)},this.onPointerUp=()=>{this.dragging=!1,document.removeEventListener(`pointermove`,this.onPointerMove),document.removeEventListener(`pointerup`,this.onPointerUp)}}static get observedAttributes(){return[`orientation`,`viewport-size`,`content-size`,`value`,`step`]}connectedCallback(){if(this.shadowRoot)return;let e=this.attachShadow({mode:`open`}),t=document.createElement(`style`);t.textContent=d,this.startArrow=this.createArrow(`start`),this.endArrow=this.createArrow(`end`),this.track=document.createElement(`div`),this.track.className=`track`,this.thumb=document.createElement(`div`),this.thumb.className=`thumb`,this.track.appendChild(this.thumb),e.append(t,this.startArrow,this.track,this.endArrow),this.thumb.addEventListener(`pointerdown`,this.onThumbPointerDown),this.track.addEventListener(`pointerdown`,this.onTrackPointerDown),this.startArrow.addEventListener(`pointerdown`,this.onArrowStartPointerDown),this.endArrow.addEventListener(`pointerdown`,this.onArrowEndPointerDown);for(let e of[this.startArrow,this.endArrow])e.addEventListener(`pointerup`,this.stopHold),e.addEventListener(`pointerleave`,this.stopHold),e.addEventListener(`pointercancel`,this.stopHold);this.resizeObserver=new ResizeObserver(()=>{this.resizeFrame||=requestAnimationFrame(()=>{this.resizeFrame=0,this.render()})}),this.resizeObserver.observe(this),this.render()}disconnectedCallback(){this.stopHold(),this.resizeFrame&&cancelAnimationFrame(this.resizeFrame),this.resizeFrame=0,this.resizeObserver?.disconnect(),this.resizeObserver=null,document.removeEventListener(`pointermove`,this.onPointerMove),document.removeEventListener(`pointerup`,this.onPointerUp)}attributeChangedCallback(){this.render()}get orientation(){return this.getAttribute(`orientation`)===`horizontal`?`horizontal`:`vertical`}get viewportSize(){return Number(this.getAttribute(`viewport-size`)||`0`)}get contentSize(){return Number(this.getAttribute(`content-size`)||`0`)}get value(){return Number(this.getAttribute(`value`)||`0`)}get step(){let e=Number(this.getAttribute(`step`)||`40`);return e>0?e:40}get maxValue(){return Math.max(this.contentSize-this.viewportSize,0)}getTrackLength(){let e=this.track.getBoundingClientRect(),t=this.orientation===`vertical`?e.height:e.width;return t>0?t:Math.max(this.viewportSize-32,1)}computeThumbSize(e){if(this.contentSize<=0||this.viewportSize<=0||e<=0)return 0;let t=Math.min(this.viewportSize/this.contentSize,1);return Math.max(20,t*e)}createArrow(e){let t=document.createElement(`button`);return t.type=`button`,t.className=`arrow arrow-${e}`,t.setAttribute(`aria-label`,e===`start`?`Scroll back`:`Scroll forward`),t.appendChild(u()),t}startHold(e){this.stopHold();let t=()=>this.emitScroll(this.value+e*this.step);t(),this.holdTimer=setTimeout(()=>{this.holdTimer=setInterval(t,c)},s)}emitScroll(e){let t=Math.min(Math.max(e,0),this.maxValue);this.dispatchEvent(new CustomEvent(`scroll-change`,{detail:{value:t},bubbles:!0,composed:!0}))}render(){if(!this.shadowRoot)return;let e=this.viewportSize,t=this.contentSize<=e||e<=0;this.style.opacity=t?`0`:`1`,this.style.pointerEvents=t?`none`:`auto`;let n=this.getTrackLength(),r=this.computeThumbSize(n),i=this.maxValue,a=(i>0?this.value/i:0)*Math.max(n-r,0);this.orientation===`vertical`?(this.thumb.style.height=`${r}px`,this.thumb.style.transform=`translateY(${a}px)`):(this.thumb.style.width=`${r}px`,this.thumb.style.transform=`translateX(${a}px)`),this.startArrow.disabled=t||this.value<=0,this.endArrow.disabled=t||this.value>=i}};typeof window<`u`&&!customElements.get(`sv-grid-scrollbar`)&&customElements.define(`sv-grid-scrollbar`,p);function m(e){let t=``;return e.color&&(t+=`color:${e.color};`),e.fontWeight!=null&&(t+=`font-weight:${e.fontWeight};`),t}function h(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:2})}function g(e,t){return`${e}:${t}`}function _(e){if(!e)return``;if(typeof e==`string`)return e;if(Array.isArray(e))return e.filter(Boolean).join(` `);if(typeof e==`object`){let t=[];for(let[n,r]of Object.entries(e))r&&t.push(n);return t.join(` `)}return``}function v(e){if(e==null||e===``)return``;if(typeof e==`string`&&/^\d{4}-\d{2}-\d{2}$/.test(e))return e;let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString().slice(0,10)}function y(e){if(e==null||e===``)return``;if(typeof e==`string`&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(e))return e;let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString().slice(0,16)}function b(e){return String(e).replace(/-native$/,``)}function x(e){if(e instanceof Date)return e;if(typeof e==`string`){let t=e.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?/);if(t){let e=new Date;return e.setHours(Math.min(23,+t[1]),Math.min(59,+t[2]),t[3]?+t[3]:0,0),e}}return null}function S(e){return e?`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}`:null}function C(e,t){let n=b(e);return n===`date`?v(t):n===`datetime`?y(t):String(t??``)}function w(e){let t=b(e);return t===`number`?`number`:t===`date`?`date`:t===`datetime`?`datetime-local`:t===`time`?`time`:t===`password`?`password`:t===`color`?`color`:`text`}function T(e){return e==null||e===``?[]:Array.isArray(e)?e.filter(e=>e!=null&&e!==``):[e]}function E(e,t){let n=e.find(e=>e.value===t||String(e.value)===String(t));return n?n.label:String(t??``)}function D(e,t){return e.find(e=>e.value===t||String(e.value)===String(t))?.color}function O(e){return e?`background: color-mix(in srgb, ${e} 22%, transparent);border-color: color-mix(in srgb, ${e} 45%, transparent);color: color-mix(in srgb, ${e} 80%, var(--sg-fg, #0f172a));`:``}function k(e){let t=b(e);return t===`number`?`sv-grid-cell-editor sv-grid-cell-editor-number`:t===`date`?`sv-grid-cell-editor sv-grid-cell-editor-date`:t===`datetime`?`sv-grid-cell-editor sv-grid-cell-editor-datetime`:t===`color`?`sv-grid-cell-editor sv-grid-cell-editor-color`:`sv-grid-cell-editor`}function A(e){if(e==null||e===``)return null;let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t}function ee(e,t){return Math.max(8,Math.min(e,window.innerWidth-t-8))}function te(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/"/g,`\\"`)}function j(e,t){if(e==null||e===``)return NaN;if(t){let t=(e instanceof Date?e:new Date(String(e))).getTime();return Number.isFinite(t)?t:NaN}let n=typeof e==`number`?e:Number(e);return Number.isFinite(n)?n:NaN}function M(e){let t=Math.abs(e),n=t>=1e3?0:t>=100?1:t>=1?2:4;return e.toLocaleString(void 0,{maximumFractionDigits:n})}function N(e){return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}var P=/[̀-ͯ]/g;function F(e,t){if(!e)return``;let n=e.normalize(`NFD`).replace(P,``);return t?n.toLocaleLowerCase(t):n.toLowerCase()}function I(e){let{tokens:t,trailing:n}=R(e);return n&&t.push(n),t}function ne(e){return e.map(e=>e.trim()).filter(e=>e.length>0).map(e=>/["\n,]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e).join(`, `)}function L(e){return R(e).trailing}function R(e){let t=String(e??``),n=[],r=``,i=!1,a=!1,o=!1,s=()=>{let e=a?r:r.trim();return r=``,a=!1,o=!1,e};for(let e=0;e<t.length;e+=1){let c=t[e];if(i){if(c!==`"`){r+=c;continue}if(t[e+1]===`"`){r+=`"`,e+=1;continue}i=!1,o=!0;continue}if(c===`,`||c===`
110
- `){let e=s();e.length&&n.push(e);continue}if(c===`"`&&!o&&!r.trim()){i=!0,a=!0,r=``;continue}r+=c}return{tokens:n,trailing:s()}}function z(e,t){let n=t?.locale,r=e=>F(String(e??``),n),i=r(e.value);switch(e.operator){case`contains`:return e=>r(e).includes(i);case`notContains`:return i===``?()=>!0:e=>!r(e).includes(i);case`equals`:return e=>r(e)===i;case`notEquals`:return i===``?()=>!0:e=>r(e)!==i;case`startsWith`:return e=>r(e).startsWith(i);case`endsWith`:return e=>r(e).endsWith(i);case`regex`:{let t=String(e.value??``);if(!t)return()=>!0;let n;try{n=new RegExp(t,`i`)}catch{return()=>!1}return e=>n.test(String(e??``))}case`in`:case`notIn`:{let t=I(e.value);if(t.length===0)return()=>!0;let i=new Set(t.map(e=>F(e,n)));return e.operator===`in`?e=>i.has(r(e)):e=>!i.has(r(e))}case`greaterThan`:{let t=Number(e.value),n=Number.isFinite(t),r=String(e.value??``);return e=>{let i=Number(e);return n&&Number.isFinite(i)?i>t:String(e??``)>r}}case`lessThan`:{let t=Number(e.value),n=Number.isFinite(t),r=String(e.value??``);return e=>{let i=Number(e);return n&&Number.isFinite(i)?i<t:String(e??``)<r}}case`between`:{let t=e.value==null?0:Number(e.value),n=e.valueTo==null?0:Number(e.valueTo),r=Number.isFinite(t)&&Number.isFinite(n),i=String(e.value??``),a=String(e.valueTo??``);return e=>{let o=Number(e??0);if(r&&Number.isFinite(o))return o>=t&&o<=n;let s=String(e??``);return s>=i&&s<=a}}case`isBlank`:return e=>String(e??``).trim().length===0;case`isNotBlank`:return e=>String(e??``).trim().length>0}}function B(e,t,n){return z(t,n)(e)}function V(e){return e?e.map(e=>{if(typeof e==`object`&&e){let t=e,n=t.value??t.label??``;return{...t,value:n,label:t.label??String(n)}}return{value:e,label:String(e)}}):[]}function H(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)):[...e]}function U(e){let t=[],n=new Map;return e.forEach((e,r)=>{let i=e.group??null,a=n.get(i);a||(a={group:i,options:[]},n.set(i,a),t.push(a)),a.options.push({...e,index:r})}),t}function W(e,t){let n=Math.max(1,t.groupHeaderHeight??28),r=t.rowHeight,i=e=>Math.max(1,typeof r==`function`?r(e,e.index):r),a=[],o=Array(e.length),s=!1;for(let t of U(e)){t.group!=null&&(s=!0,a.push({type:`group`,label:t.group,size:n}));for(let e of t.options)o[e.index]=a.length,a.push({type:`option`,opt:e,size:i(e)})}return{entries:a,hasGroups:s,sizeAt:e=>a[e]?.size??0,optionFlatIndex:o}}function G(e,t,n){let r=t.trim().toLowerCase();if(!r||!e.length)return-1;let i=e.length;for(let t=1;t<=i;t++){let a=(n+t)%i,o=e[a];if(o&&!o.disabled&&o.label.toLowerCase().startsWith(r))return a}return-1}function K(e=600){let t=``,n;return{get value(){return t},push(r){return t+=r,n&&clearTimeout(n),n=setTimeout(()=>{t=``},e),t},clear(){t=``,n&&clearTimeout(n)}}}function q(e){return e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&e.key!==` `}function J(e,t,n){return Math.min(Math.max(e,t),n)}function Y(e,t){return e.count===t.count&&e.estimateSize===t.estimateSize&&(e.overscan??6)===(t.overscan??6)&&e.viewportHeight===t.viewportHeight&&(e.scrollOffset??0)===(t.scrollOffset??0)}function X(e,t){if(e.totalSize!==t.totalSize||e.startIndex!==t.startIndex||e.endIndex!==t.endIndex||e.viewportHeight!==t.viewportHeight||e.items.length!==t.items.length)return!1;for(let n=0;n<e.items.length;n+=1){let r=e.items[n],i=t.items[n];if(r.index!==i.index||r.start!==i.start||r.size!==i.size)return!1}return!0}function re(e,t,n){let r=[];for(let i=e;i<=t;i+=1){let t=i*n;r.push({index:i,start:t,size:n,end:t+n,key:`virtual_slot_${i-e}`})}return r}function Z(e,t,n){let r=[];for(let i=e;i<=t;i+=1){let t=n[i]??0,a=n[i+1]??t;r.push({index:i,start:t,size:a-t,end:a,key:`virtual_slot_${i-e}`})}return r}function Q(e,t){let n=Math.max(e.count,0),r=Math.max(e.overscan??6,0),i=Math.max(e.viewportHeight,0);if(typeof e.estimateSize==`function`&&t){let a=t[n]??0,o=Math.max(a-i,0),s=J(e.scrollOffset??0,0,o),c=0,l=n;for(;c<l;){let e=c+l>>>1;(t[e+1]??0)<=s?c=e+1:l=e}let u=c,d=s+i;for(c=u,l=n;c<l;){let e=c+l>>>1;(t[e]??0)<d?c=e+1:l=e}let f=Math.max(c-1,u),p=n===0?0:J(u-r,0,n-1),m=n===0?-1:J(f+r,0,n-1);return{items:m>=p?Z(p,m,t):[],totalSize:a,startIndex:p,endIndex:m,scrollOffset:s,viewportHeight:i}}let a=Math.max(typeof e.estimateSize==`number`?e.estimateSize:1,1),o=n*a,s=Math.max(o-i,0),c=J(e.scrollOffset??0,0,s),l=Math.floor(c/a),u=Math.ceil(i/a),d=Math.min(l+u,Math.max(n-1,0)),f=n===0?0:J(l-r,0,n-1),p=n===0?-1:J(d+r,0,n-1);return{items:p>=f?re(f,p,a):[],totalSize:o,startIndex:f,endIndex:p,scrollOffset:c,viewportHeight:i}}function $(e){let t=e,n=null;function r(){if(typeof t.estimateSize!=`function`)return null;let e=Math.max(t.count,0);if(n&&n.fn===t.estimateSize&&n.count===e)return n.offsets;let r=t.estimateSize,i=Array(e+1);i[0]=0;for(let t=0;t<e;t+=1)i[t+1]=i[t]+Math.max(r(t),1);return n={fn:r,count:e,offsets:i},i}let i=Q(t,r()),a=new Set;function o(){a.forEach(e=>e())}function s(){let e=Q(t,r());X(i,e)||(i=e,o())}return{setOptions(e){let n={...t,...e};Y(t,n)||(t=n,s())},setScrollOffset(e){(t.scrollOffset??0)!==e&&(t={...t,scrollOffset:e},s())},setViewportHeight(e){t.viewportHeight!==e&&(t={...t,viewportHeight:e},s())},scrollToIndex(e){let n=J(e,0,Math.max(t.count-1,0)),a=i.totalSize,o;if(typeof t.estimateSize==`function`){let e=r();if(e)o=e[n]??0;else{let e=0,r=t.estimateSize;for(let t=0;t<n;t+=1)e+=Math.max(r(t),1);o=e}}else o=n*Math.max(t.estimateSize,1);let c=Math.max(a-t.viewportHeight,0),l=J(o,0,c);(t.scrollOffset??0)!==l&&(t={...t,scrollOffset:l},s())},getVirtualItems(){return i.items},getTotalSize(){return i.totalSize},getOffsetForIndex(e){if(e<=0)return 0;let n=Math.max(t.count,0),i=Math.min(e,n);if(typeof t.estimateSize==`function`){let e=r();if(e)return e[i]??0;let n=0,a=t.estimateSize;for(let e=0;e<i;e+=1)n+=Math.max(a(e),1);return n}return i*Math.max(t.estimateSize,1)},getSizeForIndex(e){return e<0||e>=t.count?0:typeof t.estimateSize==`function`?Math.max(t.estimateSize(e),1):Math.max(t.estimateSize,1)},getState(){return i},subscribe(e){return a.add(e),()=>a.delete(e)}}}function ie(e){let n=$(e),i=r(0);return n.subscribe(()=>{a(i,t(i)+1)}),{get version(){return t(i)},setOptions:n.setOptions,setScrollOffset:n.setScrollOffset,setViewportHeight:n.setViewportHeight,scrollToIndex:n.scrollToIndex,getVirtualItems:n.getVirtualItems,getTotalSize:n.getTotalSize,getOffsetForIndex:n.getOffsetForIndex,getSizeForIndex:n.getSizeForIndex,getState:n.getState}}function ae(o){let s=r(0),c=i(()=>Math.max(0,o.totalSize()-o.viewport()));n(()=>{let n=t(s);e(()=>o.virtualizer.setScrollOffset(n))}),n(()=>{let n=t(c);e(()=>t(s))>n&&a(s,n,!0)});function l(e){a(s,Math.max(0,Math.min(t(c),e)),!0)}function u(e){l(t(s)+e)}function d(e){if(t(c)<=0)return;let n=e.deltaMode===1?e.deltaY*o.lineStep():e.deltaMode===2?e.deltaY*o.viewport():e.deltaY,r=t(s);u(n),t(s)!==r&&e.preventDefault()}let f=i(()=>t(c)>0&&o.totalSize()>0?Math.max(24,Math.min(o.viewport(),o.viewport()/o.totalSize()*o.viewport())):0),p=i(()=>Math.max(0,o.viewport()-t(f))),m=i(()=>t(c)>0?t(s)/t(c)*t(p):0),h=r(!1),g=0,_=0;function v(e){e.stopPropagation(),e.preventDefault(),a(h,!0),g=e.clientY,_=t(s),e.currentTarget.setPointerCapture(e.pointerId)}function y(e){if(!t(h))return;let n=e.clientY-g;l(_+(t(p)>0?n/t(p)*t(c):0))}function b(e){a(h,!1),O(e)}function x(e){let n=e.currentTarget.getBoundingClientRect();u(e.clientY-n.top<t(m)?-o.viewport():o.viewport())}let S=!1,C=0,w=0;function T(e){e.pointerType===`touch`&&(S=!0,C=e.clientY,w=t(s),e.currentTarget.setPointerCapture(e.pointerId))}function E(e){S&&l(w-(e.clientY-C))}function D(e){S&&(S=!1,O(e))}function O(e){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}}function k(e,n){e<t(s)?l(e):e+n>t(s)+o.viewport()&&l(e+n-o.viewport())}function A(e){k(o.virtualizer.getOffsetForIndex(e),o.virtualizer.getSizeForIndex(e))}return{get scrollOffset(){return t(s)},get maxOffset(){return t(c)},get thumbH(){return t(f)},get thumbTop(){return t(m)},get dragging(){return t(h)},scrollTo:l,scrollByPx:u,ensureVisible:k,ensureIndexVisible:A,onWheel:d,onThumbDown:v,onThumbMove:y,onThumbUp:b,onTrackDown:x,onContentDown:T,onContentMove:E,onContentUp:D}}export{D as A,h as C,C as D,g as E,T as F,j as M,_ as N,k as O,x as P,S,M as T,A as _,H as a,O as b,q as c,B as d,z as f,L as g,I as h,K as i,E as j,w as k,G as l,F as m,ie as n,W as o,ne as p,$ as r,U as s,ae as t,V as u,m as v,N as w,te as x,ee as y};