gridstack 12.3.1 → 12.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/angular/esm2020/lib/base-widget.mjs +2 -2
  2. package/dist/angular/esm2020/lib/gridstack-item.component.mjs +2 -2
  3. package/dist/angular/esm2020/lib/gridstack.component.mjs +2 -2
  4. package/dist/angular/esm2020/lib/gridstack.module.mjs +2 -2
  5. package/dist/angular/esm2020/lib/types.mjs +2 -2
  6. package/dist/angular/fesm2015/gridstack-angular.mjs +4 -4
  7. package/dist/angular/fesm2015/gridstack-angular.mjs.map +1 -1
  8. package/dist/angular/fesm2020/gridstack-angular.mjs +5 -5
  9. package/dist/angular/fesm2020/gridstack-angular.mjs.map +1 -1
  10. package/dist/angular/lib/gridstack-item.component.d.ts +1 -1
  11. package/dist/angular/lib/gridstack.component.d.ts +1 -1
  12. package/dist/angular/lib/types.d.ts +1 -1
  13. package/dist/angular/package.json +1 -1
  14. package/dist/angular/src/base-widget.ts +1 -1
  15. package/dist/angular/src/gridstack-item.component.ts +1 -1
  16. package/dist/angular/src/gridstack.component.ts +1 -1
  17. package/dist/angular/src/gridstack.module.ts +1 -1
  18. package/dist/angular/src/types.ts +1 -1
  19. package/dist/dd-base-impl.d.ts +1 -1
  20. package/dist/dd-base-impl.js +1 -1
  21. package/dist/dd-base-impl.js.map +1 -1
  22. package/dist/dd-draggable.d.ts +1 -1
  23. package/dist/dd-draggable.js +1 -1
  24. package/dist/dd-draggable.js.map +1 -1
  25. package/dist/dd-droppable.d.ts +1 -1
  26. package/dist/dd-droppable.js +1 -1
  27. package/dist/dd-droppable.js.map +1 -1
  28. package/dist/dd-element.d.ts +1 -1
  29. package/dist/dd-element.js +1 -1
  30. package/dist/dd-element.js.map +1 -1
  31. package/dist/dd-gridstack.d.ts +1 -1
  32. package/dist/dd-gridstack.js +1 -1
  33. package/dist/dd-gridstack.js.map +1 -1
  34. package/dist/dd-manager.d.ts +1 -1
  35. package/dist/dd-manager.js +1 -1
  36. package/dist/dd-manager.js.map +1 -1
  37. package/dist/dd-resizable-handle.d.ts +1 -1
  38. package/dist/dd-resizable-handle.js +1 -1
  39. package/dist/dd-resizable-handle.js.map +1 -1
  40. package/dist/dd-resizable.d.ts +1 -1
  41. package/dist/dd-resizable.js +1 -1
  42. package/dist/dd-resizable.js.map +1 -1
  43. package/dist/dd-touch.d.ts +1 -1
  44. package/dist/dd-touch.js +1 -1
  45. package/dist/dd-touch.js.map +1 -1
  46. package/dist/gridstack-all.js +1 -1
  47. package/dist/gridstack-all.js.LICENSE.txt +1 -1
  48. package/dist/gridstack-all.js.map +1 -1
  49. package/dist/gridstack-engine.d.ts +8 -7
  50. package/dist/gridstack-engine.js +20 -10
  51. package/dist/gridstack-engine.js.map +1 -1
  52. package/dist/gridstack.css +1 -1
  53. package/dist/gridstack.d.ts +5 -4
  54. package/dist/gridstack.js +9 -7
  55. package/dist/gridstack.js.map +1 -1
  56. package/dist/spec/gridstack-engine-spec.d.ts +1 -0
  57. package/dist/spec/gridstack-engine-spec.js +358 -0
  58. package/dist/spec/gridstack-engine-spec.js.map +1 -0
  59. package/dist/spec/gridstack-spec.d.ts +1 -0
  60. package/dist/spec/gridstack-spec.js +1780 -0
  61. package/dist/spec/gridstack-spec.js.map +1 -0
  62. package/dist/spec/integration/gridstack-integration.spec.d.ts +1 -0
  63. package/dist/spec/integration/gridstack-integration.spec.js +171 -0
  64. package/dist/spec/integration/gridstack-integration.spec.js.map +1 -0
  65. package/dist/spec/regression-spec.d.ts +1 -0
  66. package/dist/spec/regression-spec.js +100 -0
  67. package/dist/spec/regression-spec.js.map +1 -0
  68. package/dist/spec/utils-spec.d.ts +1 -0
  69. package/dist/spec/utils-spec.js +243 -0
  70. package/dist/spec/utils-spec.js.map +1 -0
  71. package/dist/src/dd-base-impl.d.ts +69 -0
  72. package/dist/src/dd-base-impl.js +70 -0
  73. package/dist/src/dd-base-impl.js.map +1 -0
  74. package/dist/src/dd-draggable.d.ts +20 -0
  75. package/dist/src/dd-draggable.js +364 -0
  76. package/dist/src/dd-draggable.js.map +1 -0
  77. package/dist/src/dd-droppable.d.ts +26 -0
  78. package/dist/src/dd-droppable.js +149 -0
  79. package/dist/src/dd-droppable.js.map +1 -0
  80. package/dist/src/dd-element.d.ts +27 -0
  81. package/dist/src/dd-element.js +91 -0
  82. package/dist/src/dd-element.js.map +1 -0
  83. package/dist/src/dd-gridstack.d.ts +82 -0
  84. package/dist/src/dd-gridstack.js +165 -0
  85. package/dist/src/dd-gridstack.js.map +1 -0
  86. package/dist/src/dd-manager.d.ts +43 -0
  87. package/dist/src/dd-manager.js +14 -0
  88. package/dist/src/dd-manager.js.map +1 -0
  89. package/dist/src/dd-resizable-handle.d.ts +18 -0
  90. package/dist/src/dd-resizable-handle.js +113 -0
  91. package/dist/src/dd-resizable-handle.js.map +1 -0
  92. package/dist/src/dd-resizable.d.ts +30 -0
  93. package/dist/src/dd-resizable.js +304 -0
  94. package/dist/src/dd-resizable.js.map +1 -0
  95. package/dist/src/dd-touch.d.ts +33 -0
  96. package/dist/src/dd-touch.js +145 -0
  97. package/dist/src/dd-touch.js.map +1 -0
  98. package/dist/src/gridstack-engine.d.ts +321 -0
  99. package/dist/src/gridstack-engine.js +1272 -0
  100. package/dist/src/gridstack-engine.js.map +1 -0
  101. package/dist/src/gridstack.d.ts +802 -0
  102. package/dist/src/gridstack.js +2872 -0
  103. package/dist/src/gridstack.js.map +1 -0
  104. package/dist/src/gridstack.scss +1 -1
  105. package/dist/src/types.d.ts +427 -0
  106. package/dist/src/types.js +38 -0
  107. package/dist/src/types.js.map +1 -0
  108. package/dist/src/utils.d.ts +283 -0
  109. package/dist/src/utils.js +790 -0
  110. package/dist/src/utils.js.map +1 -0
  111. package/dist/types.d.ts +1 -1
  112. package/dist/types.js +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils.d.ts +1 -1
  115. package/dist/utils.js +5 -4
  116. package/dist/utils.js.map +1 -1
  117. package/dist/vitest.config.d.ts +2 -0
  118. package/dist/vitest.config.js +74 -0
  119. package/dist/vitest.config.js.map +1 -0
  120. package/dist/vitest.setup.d.ts +1 -0
  121. package/dist/vitest.setup.js +90 -0
  122. package/dist/vitest.setup.js.map +1 -0
  123. package/doc/API.md +87 -87
  124. package/package.json +21 -9
@@ -0,0 +1,74 @@
1
+ /// <reference types="vitest" />
2
+ import { defineConfig } from 'vitest/config';
3
+ export default defineConfig({
4
+ test: {
5
+ // Enable globals (describe, it, expect, etc.) without imports
6
+ globals: true,
7
+ // Use jsdom for DOM simulation (required for testing DOM-related code)
8
+ environment: 'jsdom',
9
+ // Setup files to run before tests
10
+ setupFiles: ['./vitest.setup.ts'],
11
+ // Test file patterns
12
+ include: [
13
+ 'spec/**/*-spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
14
+ 'spec/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
15
+ 'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'
16
+ ],
17
+ // Exclude patterns
18
+ exclude: [
19
+ '**/node_modules/**',
20
+ '**/dist/**',
21
+ '**/angular/**',
22
+ '**/react/**',
23
+ '**/demo/**',
24
+ '**/spec/e2e/**' // Exclude old Protractor E2E tests
25
+ ],
26
+ // Coverage configuration
27
+ coverage: {
28
+ provider: 'v8',
29
+ reporter: ['text', 'json', 'html', 'lcov'],
30
+ exclude: [
31
+ 'coverage/**',
32
+ 'dist/**',
33
+ 'node_modules/**',
34
+ 'demo/**',
35
+ 'angular/**',
36
+ 'react/**',
37
+ '**/*.d.ts',
38
+ '**/*.config.{js,ts}',
39
+ '**/karma.conf.js',
40
+ 'scripts/**',
41
+ 'spec/e2e/**' // Exclude e2e tests from coverage
42
+ ],
43
+ // Coverage thresholds (optional - set to your desired levels)
44
+ thresholds: {
45
+ global: {
46
+ branches: 80,
47
+ functions: 80,
48
+ lines: 80,
49
+ statements: 80
50
+ }
51
+ },
52
+ // Include source files for coverage even if not tested
53
+ all: true,
54
+ include: ['src/**/*.{js,ts}']
55
+ },
56
+ // Test timeout (in milliseconds)
57
+ testTimeout: 10000,
58
+ // Hook timeout (in milliseconds)
59
+ hookTimeout: 10000,
60
+ // Reporter configuration
61
+ reporters: ['verbose', 'html'],
62
+ // Output directory for test results
63
+ outputFile: {
64
+ html: './coverage/test-results.html'
65
+ }
66
+ },
67
+ // Resolve configuration for imports
68
+ resolve: {
69
+ alias: {
70
+ '@': '/src'
71
+ }
72
+ }
73
+ });
74
+ //# sourceMappingURL=vitest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,8DAA8D;QAC9D,OAAO,EAAE,IAAI;QAEb,uEAAuE;QACvE,WAAW,EAAE,OAAO;QAEpB,kCAAkC;QAClC,UAAU,EAAE,CAAC,mBAAmB,CAAC;QAEjC,qBAAqB;QACrB,OAAO,EAAE;YACP,gDAAgD;YAChD,uDAAuD;YACvD,sDAAsD;SACvD;QAED,mBAAmB;QACnB,OAAO,EAAE;YACP,oBAAoB;YACpB,YAAY;YACZ,eAAe;YACf,aAAa;YACb,YAAY;YACZ,gBAAgB,CAAC,mCAAmC;SACrD;QAED,yBAAyB;QACzB,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1C,OAAO,EAAE;gBACP,aAAa;gBACb,SAAS;gBACT,iBAAiB;gBACjB,SAAS;gBACT,YAAY;gBACZ,UAAU;gBACV,WAAW;gBACX,qBAAqB;gBACrB,kBAAkB;gBAClB,YAAY;gBACZ,aAAa,CAAC,kCAAkC;aACjD;YACD,8DAA8D;YAC9D,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,EAAE;oBACb,KAAK,EAAE,EAAE;oBACT,UAAU,EAAE,EAAE;iBACf;aACF;YACD,uDAAuD;YACvD,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,CAAC,kBAAkB,CAAC;SAC9B;QAED,iCAAiC;QACjC,WAAW,EAAE,KAAK;QAElB,kCAAkC;QAClC,WAAW,EAAE,KAAK;QAElB,yBAAyB;QACzB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;QAE9B,oCAAoC;QACpC,UAAU,EAAE;YACV,IAAI,EAAE,8BAA8B;SACrC;KACF;IAED,oCAAoC;IACpC,OAAO,EAAE;QACP,KAAK,EAAE;YACL,GAAG,EAAE,MAAM;SACZ;KACF;CACF,CAAC,CAAA","sourcesContent":["/// <reference types=\"vitest\" />\nimport { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n test: {\n // Enable globals (describe, it, expect, etc.) without imports\n globals: true,\n \n // Use jsdom for DOM simulation (required for testing DOM-related code)\n environment: 'jsdom',\n \n // Setup files to run before tests\n setupFiles: ['./vitest.setup.ts'],\n \n // Test file patterns\n include: [\n 'spec/**/*-spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',\n 'spec/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',\n 'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'\n ],\n \n // Exclude patterns\n exclude: [\n '**/node_modules/**',\n '**/dist/**',\n '**/angular/**',\n '**/react/**',\n '**/demo/**',\n '**/spec/e2e/**' // Exclude old Protractor E2E tests\n ],\n\n // Coverage configuration\n coverage: {\n provider: 'v8', // Use V8's built-in coverage (faster and more accurate)\n reporter: ['text', 'json', 'html', 'lcov'],\n exclude: [\n 'coverage/**',\n 'dist/**',\n 'node_modules/**',\n 'demo/**',\n 'angular/**',\n 'react/**',\n '**/*.d.ts',\n '**/*.config.{js,ts}',\n '**/karma.conf.js',\n 'scripts/**',\n 'spec/e2e/**' // Exclude e2e tests from coverage\n ],\n // Coverage thresholds (optional - set to your desired levels)\n thresholds: {\n global: {\n branches: 80,\n functions: 80,\n lines: 80,\n statements: 80\n }\n },\n // Include source files for coverage even if not tested\n all: true,\n include: ['src/**/*.{js,ts}']\n },\n\n // Test timeout (in milliseconds)\n testTimeout: 10000,\n\n // Hook timeout (in milliseconds) \n hookTimeout: 10000,\n\n // Reporter configuration\n reporters: ['verbose', 'html'],\n\n // Output directory for test results\n outputFile: {\n html: './coverage/test-results.html'\n }\n },\n\n // Resolve configuration for imports\n resolve: {\n alias: {\n '@': '/src'\n }\n }\n})\n"]}
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,90 @@
1
+ import '@testing-library/jest-dom';
2
+ // Global test setup
3
+ // This file runs before each test file
4
+ // Mock DOM APIs that might not be available in jsdom
5
+ Object.defineProperty(window, 'matchMedia', {
6
+ writable: true,
7
+ value: vi.fn().mockImplementation(query => ({
8
+ matches: false,
9
+ media: query,
10
+ onchange: null,
11
+ addListener: vi.fn(),
12
+ removeListener: vi.fn(),
13
+ addEventListener: vi.fn(),
14
+ removeEventListener: vi.fn(),
15
+ dispatchEvent: vi.fn(),
16
+ })),
17
+ });
18
+ // Mock ResizeObserver
19
+ globalThis.ResizeObserver = vi.fn().mockImplementation(() => ({
20
+ observe: vi.fn(),
21
+ unobserve: vi.fn(),
22
+ disconnect: vi.fn(),
23
+ }));
24
+ // Mock IntersectionObserver
25
+ globalThis.IntersectionObserver = vi.fn().mockImplementation(() => ({
26
+ observe: vi.fn(),
27
+ unobserve: vi.fn(),
28
+ disconnect: vi.fn(),
29
+ }));
30
+ // Mock requestAnimationFrame
31
+ globalThis.requestAnimationFrame = vi.fn().mockImplementation((cb) => {
32
+ return setTimeout(cb, 0);
33
+ });
34
+ globalThis.cancelAnimationFrame = vi.fn().mockImplementation((id) => {
35
+ clearTimeout(id);
36
+ });
37
+ // Mock performance.now for timing-related tests
38
+ Object.defineProperty(window, 'performance', {
39
+ writable: true,
40
+ value: {
41
+ now: vi.fn(() => Date.now())
42
+ }
43
+ });
44
+ // Mock CSS properties that might be used by gridstack
45
+ Object.defineProperty(window, 'getComputedStyle', {
46
+ value: () => ({
47
+ getPropertyValue: () => '',
48
+ width: '100px',
49
+ height: '100px',
50
+ marginTop: '0px',
51
+ marginBottom: '0px',
52
+ marginLeft: '0px',
53
+ marginRight: '0px'
54
+ })
55
+ });
56
+ // Mock scrollTo for tests that might trigger scrolling
57
+ window.scrollTo = vi.fn();
58
+ // Setup DOM environment
59
+ Object.defineProperty(window, 'location', {
60
+ value: {
61
+ href: 'http://localhost:3000',
62
+ origin: 'http://localhost:3000',
63
+ pathname: '/',
64
+ search: '',
65
+ hash: ''
66
+ },
67
+ writable: true
68
+ });
69
+ // Global test utilities
70
+ globalThis.createMockElement = (tagName = 'div', attributes = {}) => {
71
+ const element = document.createElement(tagName);
72
+ Object.entries(attributes).forEach(([key, value]) => {
73
+ element.setAttribute(key, value);
74
+ });
75
+ return element;
76
+ };
77
+ // Console error/warning suppression for expected errors in tests
78
+ const originalError = console.error;
79
+ const originalWarn = console.warn;
80
+ beforeEach(() => {
81
+ // Reset console methods for each test
82
+ console.error = originalError;
83
+ console.warn = originalWarn;
84
+ });
85
+ // Helper to suppress expected console errors/warnings
86
+ globalThis.suppressConsoleErrors = () => {
87
+ console.error = vi.fn();
88
+ console.warn = vi.fn();
89
+ };
90
+ //# sourceMappingURL=vitest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.setup.js","sourceRoot":"","sources":["../vitest.setup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@testing-library/jest-dom'\n\n// Global test setup\n// This file runs before each test file\n\n// Mock DOM APIs that might not be available in jsdom\nObject.defineProperty(window, 'matchMedia', {\n writable: true,\n value: vi.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: vi.fn(), // deprecated\n removeListener: vi.fn(), // deprecated\n addEventListener: vi.fn(),\n removeEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n })),\n});\n\n// Mock ResizeObserver\n(globalThis as any).ResizeObserver = vi.fn().mockImplementation(() => ({\n observe: vi.fn(),\n unobserve: vi.fn(),\n disconnect: vi.fn(),\n}));\n\n// Mock IntersectionObserver \n(globalThis as any).IntersectionObserver = vi.fn().mockImplementation(() => ({\n observe: vi.fn(),\n unobserve: vi.fn(),\n disconnect: vi.fn(),\n}));\n\n// Mock requestAnimationFrame\n(globalThis as any).requestAnimationFrame = vi.fn().mockImplementation((cb: Function) => {\n return setTimeout(cb, 0);\n});\n\n(globalThis as any).cancelAnimationFrame = vi.fn().mockImplementation((id: number) => {\n clearTimeout(id);\n});\n\n// Mock performance.now for timing-related tests\nObject.defineProperty(window, 'performance', {\n writable: true,\n value: {\n now: vi.fn(() => Date.now())\n }\n});\n\n// Mock CSS properties that might be used by gridstack\nObject.defineProperty(window, 'getComputedStyle', {\n value: () => ({\n getPropertyValue: () => '',\n width: '100px',\n height: '100px',\n marginTop: '0px',\n marginBottom: '0px',\n marginLeft: '0px',\n marginRight: '0px'\n })\n});\n\n// Mock scrollTo for tests that might trigger scrolling\nwindow.scrollTo = vi.fn();\n\n// Setup DOM environment\nObject.defineProperty(window, 'location', {\n value: {\n href: 'http://localhost:3000',\n origin: 'http://localhost:3000',\n pathname: '/',\n search: '',\n hash: ''\n },\n writable: true\n});\n\n// Global test utilities\n(globalThis as any).createMockElement = (tagName: string = 'div', attributes: Record<string, string> = {}) => {\n const element = document.createElement(tagName);\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n return element;\n};\n\n// Console error/warning suppression for expected errors in tests\nconst originalError = console.error;\nconst originalWarn = console.warn;\n\nbeforeEach(() => {\n // Reset console methods for each test\n console.error = originalError;\n console.warn = originalWarn;\n});\n\n// Helper to suppress expected console errors/warnings\n(globalThis as any).suppressConsoleErrors = () => {\n console.error = vi.fn();\n console.warn = vi.fn();\n};\n"]}