@svgrid/grid 2.0.2 → 2.1.0

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 (85) hide show
  1. package/dist/FlexRender.svelte +96 -96
  2. package/dist/GridFooter.svelte +178 -178
  3. package/dist/SvGrid.css +2377 -2376
  4. package/dist/SvGrid.svelte +2764 -2764
  5. package/dist/SvGridBoard.svelte +2281 -2281
  6. package/dist/SvGridDropdown.svelte +666 -666
  7. package/dist/cdn/svgrid.js +3 -3
  8. package/dist/cdn/svgrid.svelte-external.js +3 -3
  9. package/dist/themes/index.d.ts +45 -0
  10. package/dist/themes/index.js +132 -0
  11. package/package.json +92 -85
  12. package/src/FlexRender.svelte +96 -96
  13. package/src/GridFooter.svelte +178 -178
  14. package/src/SvGrid.controller.svelte.ts +2553 -2553
  15. package/src/SvGrid.css +2377 -2376
  16. package/src/SvGrid.svelte +2764 -2764
  17. package/src/SvGrid.types.ts +944 -944
  18. package/src/SvGridBoard.svelte +2281 -2281
  19. package/src/SvGridDropdown.svelte +666 -666
  20. package/src/a11y.contract.test.ts +49 -49
  21. package/src/a11y.test.ts +59 -59
  22. package/src/a11y.ts +61 -61
  23. package/src/build-api.ts +798 -798
  24. package/src/cell-formatting.ts +169 -169
  25. package/src/cell-render.ts +469 -469
  26. package/src/collaboration.test.ts +104 -104
  27. package/src/collaboration.ts +167 -167
  28. package/src/core.performance.test.ts +30 -30
  29. package/src/core.ts +1111 -1111
  30. package/src/createGrid.svelte.ts +42 -42
  31. package/src/createGrid.test.ts +10 -10
  32. package/src/createGridState.svelte.ts +17 -17
  33. package/src/editing.test.ts +859 -859
  34. package/src/editing.ts +675 -675
  35. package/src/export-data-api.test.ts +126 -126
  36. package/src/export-format.test.ts +107 -107
  37. package/src/export-format.ts +598 -598
  38. package/src/flex-render.ts +3 -3
  39. package/src/index.ts +463 -463
  40. package/src/keyboard.test.ts +59 -59
  41. package/src/keyboard.ts +97 -97
  42. package/src/menus.ts +582 -582
  43. package/src/merge-objects.ts +48 -48
  44. package/src/render-component.ts +28 -28
  45. package/src/selection.test.ts +754 -754
  46. package/src/selection.ts +600 -600
  47. package/src/server-data-source.test.ts +289 -289
  48. package/src/server-data-source.ts +413 -413
  49. package/src/sparkline.test.ts +68 -68
  50. package/src/sparkline.ts +169 -169
  51. package/src/spreadsheet.test.ts +489 -489
  52. package/src/spreadsheet.ts +304 -304
  53. package/src/static-functions.ts +11 -11
  54. package/src/subscribe.ts +38 -38
  55. package/src/svgrid-wrapper.types.ts +439 -439
  56. package/src/svgrid.behavior.test.ts +706 -706
  57. package/src/svgrid.features.test.ts +157 -157
  58. package/src/svgrid.new-features.wrapper.test.ts +251 -251
  59. package/src/svgrid.wrapper.test.ts +40 -40
  60. package/src/themes/index.ts +159 -0
  61. package/src/virtualization/column-virtualizer.test.ts +27 -27
  62. package/src/virtualization/column-virtualizer.ts +30 -30
  63. package/src/virtualization/svelte-virtualizer.svelte.ts +26 -26
  64. package/src/virtualization/types.ts +30 -30
  65. package/src/virtualization/virtualizer.test.ts +47 -47
  66. package/src/virtualization/virtualizer.ts +296 -296
  67. package/themes/ag-alpine.css +59 -0
  68. package/themes/antd.css +59 -0
  69. package/themes/atlassian.css +59 -0
  70. package/themes/bootstrap.css +59 -0
  71. package/themes/carbon.css +59 -0
  72. package/themes/catppuccin.css +59 -0
  73. package/themes/dracula.css +59 -0
  74. package/themes/excel.css +59 -0
  75. package/themes/fluent.css +59 -0
  76. package/themes/github.css +59 -0
  77. package/themes/linear.css +59 -0
  78. package/themes/material.css +59 -0
  79. package/themes/nord.css +59 -0
  80. package/themes/notion.css +59 -0
  81. package/themes/salesforce.css +59 -0
  82. package/themes/sap.css +59 -0
  83. package/themes/shadcn.css +59 -0
  84. package/themes/tailwind.css +59 -0
  85. package/themes/vercel.css +59 -0
@@ -1,157 +1,157 @@
1
- import { describe, expect, it } from 'vitest'
2
- import {
3
- columnFilteringFeature,
4
- columnGroupingFeature,
5
- createCoreRowModel,
6
- createExpandedRowModel,
7
- createFilteredRowModel,
8
- createGroupedRowModel,
9
- createPaginatedRowModel,
10
- createSortedRowModel,
11
- createSvGrid,
12
- rowExpandingFeature,
13
- rowSelectionFeature,
14
- rowSortingFeature,
15
- sortFns,
16
- subscribeSvGrid,
17
- tableFeatures,
18
- } from './index'
19
- import type { ColumnDef } from './index'
20
-
21
- type Person = { firstName: string; age: number; status?: string }
22
-
23
- describe('SvGrid features', () => {
24
- it('supports sorting and pagination row model pipeline', () => {
25
- const _features = tableFeatures({
26
- columnFilteringFeature,
27
- columnGroupingFeature,
28
- rowExpandingFeature,
29
- rowSelectionFeature,
30
- rowSortingFeature,
31
- })
32
- const columns: Array<ColumnDef<typeof _features, Person>> = [
33
- { field: 'firstName' },
34
- { field: 'age' },
35
- ]
36
- const data: Array<Person> = [
37
- { firstName: 'John', age: 40, status: 'pending' },
38
- { firstName: 'Amy', age: 22, status: 'active' },
39
- { firstName: 'Kate', age: 31, status: 'active' },
40
- ]
41
-
42
- const grid = createSvGrid({
43
- _features,
44
- _rowModels: {
45
- coreRowModel: createCoreRowModel(),
46
- filteredRowModel: createFilteredRowModel(),
47
- sortedRowModel: createSortedRowModel(sortFns),
48
- groupedRowModel: createGroupedRowModel(),
49
- expandedRowModel: createExpandedRowModel(),
50
- paginatedRowModel: createPaginatedRowModel(),
51
- },
52
- columns,
53
- data,
54
- state: {
55
- columnFilters: [{ id: 'firstName', value: 'a', fn: 'includesString' }],
56
- grouping: ['status'],
57
- expanded: { group_status_active: true },
58
- sorting: [{ id: 'age', desc: false }],
59
- pagination: { pageIndex: 0, pageSize: 2 },
60
- },
61
- })
62
-
63
- const rows = grid.getRowModel().rows
64
- expect(rows).toHaveLength(1)
65
- expect(rows[0]?.id).toContain('group_status_')
66
- })
67
-
68
- it('supports row selection and expansion toggles', () => {
69
- const _features = tableFeatures({
70
- rowExpandingFeature,
71
- rowSelectionFeature,
72
- })
73
- const columns: Array<ColumnDef<typeof _features, Person>> = [
74
- { field: 'firstName' },
75
- ]
76
- const data: Array<Person> = [
77
- { firstName: 'Amy', age: 22 },
78
- ]
79
- const grid = createSvGrid({
80
- _features,
81
- _rowModels: {
82
- coreRowModel: createCoreRowModel(),
83
- },
84
- columns,
85
- data,
86
- })
87
- const row = grid.getRowModel().rows[0]
88
- expect(row).toBeDefined()
89
- row?.toggleSelected()
90
- row?.toggleExpanded()
91
- expect(row?.getIsSelected()).toBe(true)
92
- expect(row?.getIsExpanded()).toBe(true)
93
- })
94
-
95
- it('supports selector subscriptions with stable shape', () => {
96
- const _features = tableFeatures({ rowSortingFeature })
97
- const grid = createSvGrid({
98
- _features,
99
- _rowModels: {
100
- coreRowModel: createCoreRowModel(),
101
- },
102
- columns: [{ field: 'firstName' }],
103
- data: [{ firstName: 'Amy', age: 22 }],
104
- })
105
- const selected = subscribeSvGrid(grid, (state) => ({
106
- sorting: state.sorting,
107
- pageIndex: state.pagination?.pageIndex ?? 0,
108
- }))
109
- expect(selected.current.pageIndex).toBe(0)
110
- })
111
-
112
- it('supports active cell movement primitives', () => {
113
- const _features = tableFeatures({ rowSortingFeature })
114
- const grid = createSvGrid({
115
- _features,
116
- _rowModels: { coreRowModel: createCoreRowModel() },
117
- columns: [
118
- { field: 'firstName' },
119
- { field: 'age' },
120
- ],
121
- data: [
122
- { firstName: 'Amy', age: 22 },
123
- { firstName: 'John', age: 40 },
124
- ],
125
- })
126
-
127
- grid.moveActiveCell({ rowDelta: 1, colDelta: 1 })
128
- expect(grid.getState().activeCell.rowIndex).toBe(1)
129
- expect(grid.getState().activeCell.colIndex).toBe(1)
130
- })
131
-
132
- it('supports multi-column sorting clauses', () => {
133
- const _features = tableFeatures({ rowSortingFeature })
134
- const grid = createSvGrid({
135
- _features,
136
- _rowModels: {
137
- coreRowModel: createCoreRowModel(),
138
- sortedRowModel: createSortedRowModel(sortFns),
139
- },
140
- columns: [
141
- { field: 'firstName' },
142
- { field: 'age', editorType: 'number' },
143
- ],
144
- data: [
145
- { firstName: 'Amy', age: 20 },
146
- { firstName: 'Amy', age: 30 },
147
- { firstName: 'Bob', age: 10 },
148
- ],
149
- state: { sorting: [{ id: 'firstName', desc: false }, { id: 'age', desc: true }] },
150
- })
151
-
152
- const rows = grid.getRowModel().rows
153
- expect(rows[0]?.original.firstName).toBe('Amy')
154
- expect(rows[0]?.original.age).toBe(30)
155
- expect(rows[1]?.original.age).toBe(20)
156
- })
157
- })
1
+ import { describe, expect, it } from 'vitest'
2
+ import {
3
+ columnFilteringFeature,
4
+ columnGroupingFeature,
5
+ createCoreRowModel,
6
+ createExpandedRowModel,
7
+ createFilteredRowModel,
8
+ createGroupedRowModel,
9
+ createPaginatedRowModel,
10
+ createSortedRowModel,
11
+ createSvGrid,
12
+ rowExpandingFeature,
13
+ rowSelectionFeature,
14
+ rowSortingFeature,
15
+ sortFns,
16
+ subscribeSvGrid,
17
+ tableFeatures,
18
+ } from './index'
19
+ import type { ColumnDef } from './index'
20
+
21
+ type Person = { firstName: string; age: number; status?: string }
22
+
23
+ describe('SvGrid features', () => {
24
+ it('supports sorting and pagination row model pipeline', () => {
25
+ const _features = tableFeatures({
26
+ columnFilteringFeature,
27
+ columnGroupingFeature,
28
+ rowExpandingFeature,
29
+ rowSelectionFeature,
30
+ rowSortingFeature,
31
+ })
32
+ const columns: Array<ColumnDef<typeof _features, Person>> = [
33
+ { field: 'firstName' },
34
+ { field: 'age' },
35
+ ]
36
+ const data: Array<Person> = [
37
+ { firstName: 'John', age: 40, status: 'pending' },
38
+ { firstName: 'Amy', age: 22, status: 'active' },
39
+ { firstName: 'Kate', age: 31, status: 'active' },
40
+ ]
41
+
42
+ const grid = createSvGrid({
43
+ _features,
44
+ _rowModels: {
45
+ coreRowModel: createCoreRowModel(),
46
+ filteredRowModel: createFilteredRowModel(),
47
+ sortedRowModel: createSortedRowModel(sortFns),
48
+ groupedRowModel: createGroupedRowModel(),
49
+ expandedRowModel: createExpandedRowModel(),
50
+ paginatedRowModel: createPaginatedRowModel(),
51
+ },
52
+ columns,
53
+ data,
54
+ state: {
55
+ columnFilters: [{ id: 'firstName', value: 'a', fn: 'includesString' }],
56
+ grouping: ['status'],
57
+ expanded: { group_status_active: true },
58
+ sorting: [{ id: 'age', desc: false }],
59
+ pagination: { pageIndex: 0, pageSize: 2 },
60
+ },
61
+ })
62
+
63
+ const rows = grid.getRowModel().rows
64
+ expect(rows).toHaveLength(1)
65
+ expect(rows[0]?.id).toContain('group_status_')
66
+ })
67
+
68
+ it('supports row selection and expansion toggles', () => {
69
+ const _features = tableFeatures({
70
+ rowExpandingFeature,
71
+ rowSelectionFeature,
72
+ })
73
+ const columns: Array<ColumnDef<typeof _features, Person>> = [
74
+ { field: 'firstName' },
75
+ ]
76
+ const data: Array<Person> = [
77
+ { firstName: 'Amy', age: 22 },
78
+ ]
79
+ const grid = createSvGrid({
80
+ _features,
81
+ _rowModels: {
82
+ coreRowModel: createCoreRowModel(),
83
+ },
84
+ columns,
85
+ data,
86
+ })
87
+ const row = grid.getRowModel().rows[0]
88
+ expect(row).toBeDefined()
89
+ row?.toggleSelected()
90
+ row?.toggleExpanded()
91
+ expect(row?.getIsSelected()).toBe(true)
92
+ expect(row?.getIsExpanded()).toBe(true)
93
+ })
94
+
95
+ it('supports selector subscriptions with stable shape', () => {
96
+ const _features = tableFeatures({ rowSortingFeature })
97
+ const grid = createSvGrid({
98
+ _features,
99
+ _rowModels: {
100
+ coreRowModel: createCoreRowModel(),
101
+ },
102
+ columns: [{ field: 'firstName' }],
103
+ data: [{ firstName: 'Amy', age: 22 }],
104
+ })
105
+ const selected = subscribeSvGrid(grid, (state) => ({
106
+ sorting: state.sorting,
107
+ pageIndex: state.pagination?.pageIndex ?? 0,
108
+ }))
109
+ expect(selected.current.pageIndex).toBe(0)
110
+ })
111
+
112
+ it('supports active cell movement primitives', () => {
113
+ const _features = tableFeatures({ rowSortingFeature })
114
+ const grid = createSvGrid({
115
+ _features,
116
+ _rowModels: { coreRowModel: createCoreRowModel() },
117
+ columns: [
118
+ { field: 'firstName' },
119
+ { field: 'age' },
120
+ ],
121
+ data: [
122
+ { firstName: 'Amy', age: 22 },
123
+ { firstName: 'John', age: 40 },
124
+ ],
125
+ })
126
+
127
+ grid.moveActiveCell({ rowDelta: 1, colDelta: 1 })
128
+ expect(grid.getState().activeCell.rowIndex).toBe(1)
129
+ expect(grid.getState().activeCell.colIndex).toBe(1)
130
+ })
131
+
132
+ it('supports multi-column sorting clauses', () => {
133
+ const _features = tableFeatures({ rowSortingFeature })
134
+ const grid = createSvGrid({
135
+ _features,
136
+ _rowModels: {
137
+ coreRowModel: createCoreRowModel(),
138
+ sortedRowModel: createSortedRowModel(sortFns),
139
+ },
140
+ columns: [
141
+ { field: 'firstName' },
142
+ { field: 'age', editorType: 'number' },
143
+ ],
144
+ data: [
145
+ { firstName: 'Amy', age: 20 },
146
+ { firstName: 'Amy', age: 30 },
147
+ { firstName: 'Bob', age: 10 },
148
+ ],
149
+ state: { sorting: [{ id: 'firstName', desc: false }, { id: 'age', desc: true }] },
150
+ })
151
+
152
+ const rows = grid.getRowModel().rows
153
+ expect(rows[0]?.original.firstName).toBe('Amy')
154
+ expect(rows[0]?.original.age).toBe(30)
155
+ expect(rows[1]?.original.age).toBe(20)
156
+ })
157
+ })