@furystack/shades-common-components 12.0.0 → 12.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 (49) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +26 -0
  3. package/esm/components/cache-view.d.ts +46 -0
  4. package/esm/components/cache-view.d.ts.map +1 -0
  5. package/esm/components/cache-view.js +65 -0
  6. package/esm/components/cache-view.js.map +1 -0
  7. package/esm/components/cache-view.spec.d.ts +2 -0
  8. package/esm/components/cache-view.spec.d.ts.map +1 -0
  9. package/esm/components/cache-view.spec.js +183 -0
  10. package/esm/components/cache-view.spec.js.map +1 -0
  11. package/esm/components/command-palette/command-palette-input.spec.js +148 -148
  12. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
  13. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +258 -258
  14. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
  15. package/esm/components/context-menu/context-menu-manager.spec.js +211 -217
  16. package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -1
  17. package/esm/components/data-grid/body.spec.js +173 -173
  18. package/esm/components/data-grid/body.spec.js.map +1 -1
  19. package/esm/components/data-grid/data-grid.spec.js +39 -130
  20. package/esm/components/data-grid/data-grid.spec.js.map +1 -1
  21. package/esm/components/index.d.ts +1 -0
  22. package/esm/components/index.d.ts.map +1 -1
  23. package/esm/components/index.js +1 -0
  24. package/esm/components/index.js.map +1 -1
  25. package/esm/components/skeleton.d.ts.map +1 -1
  26. package/esm/components/skeleton.js +2 -11
  27. package/esm/components/skeleton.js.map +1 -1
  28. package/esm/components/skeleton.spec.js +6 -55
  29. package/esm/components/skeleton.spec.js.map +1 -1
  30. package/esm/services/click-away-service.spec.js +14 -12
  31. package/esm/services/click-away-service.spec.js.map +1 -1
  32. package/esm/services/list-service.spec.js +170 -141
  33. package/esm/services/list-service.spec.js.map +1 -1
  34. package/esm/services/tree-service.spec.js +190 -159
  35. package/esm/services/tree-service.spec.js.map +1 -1
  36. package/package.json +8 -8
  37. package/src/components/cache-view.spec.tsx +210 -0
  38. package/src/components/cache-view.tsx +103 -0
  39. package/src/components/command-palette/command-palette-input.spec.tsx +183 -194
  40. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +303 -321
  41. package/src/components/context-menu/context-menu-manager.spec.ts +213 -258
  42. package/src/components/data-grid/body.spec.tsx +266 -276
  43. package/src/components/data-grid/data-grid.spec.tsx +137 -232
  44. package/src/components/index.ts +1 -0
  45. package/src/components/skeleton.spec.tsx +6 -73
  46. package/src/components/skeleton.tsx +2 -11
  47. package/src/services/click-away-service.spec.ts +14 -16
  48. package/src/services/list-service.spec.ts +170 -172
  49. package/src/services/tree-service.spec.ts +191 -207
@@ -44,350 +44,350 @@ describe('CommandPaletteSuggestionList', () => {
44
44
  });
45
45
  it('should render with shadow DOM', async () => {
46
46
  await usingAsync(new Injector(), async (injector) => {
47
- const manager = createManager();
48
- const rootElement = document.getElementById('root');
49
- initializeShadeRoot({
50
- injector,
51
- rootElement,
52
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
47
+ await usingAsync(createManager(), async (manager) => {
48
+ const rootElement = document.getElementById('root');
49
+ initializeShadeRoot({
50
+ injector,
51
+ rootElement,
52
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
53
+ });
54
+ await sleepAsync(50);
55
+ const component = document.querySelector('shade-command-palette-suggestion-list');
56
+ expect(component).not.toBeNull();
53
57
  });
54
- await sleepAsync(50);
55
- const component = document.querySelector('shade-command-palette-suggestion-list');
56
- expect(component).not.toBeNull();
57
- manager[Symbol.dispose]();
58
58
  });
59
59
  });
60
60
  it('should render suggestion items container', async () => {
61
61
  await usingAsync(new Injector(), async (injector) => {
62
- const manager = createManager();
63
- const rootElement = document.getElementById('root');
64
- initializeShadeRoot({
65
- injector,
66
- rootElement,
67
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
62
+ await usingAsync(createManager(), async (manager) => {
63
+ const rootElement = document.getElementById('root');
64
+ initializeShadeRoot({
65
+ injector,
66
+ rootElement,
67
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
68
+ });
69
+ await sleepAsync(50);
70
+ const component = document.querySelector('shade-command-palette-suggestion-list');
71
+ const container = component?.querySelector('.suggestion-items-container');
72
+ expect(container).not.toBeNull();
68
73
  });
69
- await sleepAsync(50);
70
- const component = document.querySelector('shade-command-palette-suggestion-list');
71
- const container = component?.querySelector('.suggestion-items-container');
72
- expect(container).not.toBeNull();
73
- manager[Symbol.dispose]();
74
74
  });
75
75
  });
76
76
  it('should render suggestions from manager', async () => {
77
77
  await usingAsync(new Injector(), async (injector) => {
78
- const manager = createManager();
79
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
80
- const rootElement = document.getElementById('root');
81
- initializeShadeRoot({
82
- injector,
83
- rootElement,
84
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
78
+ await usingAsync(createManager(), async (manager) => {
79
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
80
+ const rootElement = document.getElementById('root');
81
+ initializeShadeRoot({
82
+ injector,
83
+ rootElement,
84
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
85
+ });
86
+ await sleepAsync(50);
87
+ const component = document.querySelector('shade-command-palette-suggestion-list');
88
+ const items = component?.querySelectorAll('.suggestion-item');
89
+ expect(items?.length).toBe(2);
85
90
  });
86
- await sleepAsync(50);
87
- const component = document.querySelector('shade-command-palette-suggestion-list');
88
- const items = component?.querySelectorAll('.suggestion-item');
89
- expect(items?.length).toBe(2);
90
- manager[Symbol.dispose]();
91
91
  });
92
92
  });
93
93
  it('should render suggestion content', async () => {
94
94
  await usingAsync(new Injector(), async (injector) => {
95
- const manager = createManager();
96
- manager.currentSuggestions.setValue([createSuggestion('Test Command', 100)]);
97
- const rootElement = document.getElementById('root');
98
- initializeShadeRoot({
99
- injector,
100
- rootElement,
101
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
95
+ await usingAsync(createManager(), async (manager) => {
96
+ manager.currentSuggestions.setValue([createSuggestion('Test Command', 100)]);
97
+ const rootElement = document.getElementById('root');
98
+ initializeShadeRoot({
99
+ injector,
100
+ rootElement,
101
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
102
+ });
103
+ await sleepAsync(50);
104
+ const component = document.querySelector('shade-command-palette-suggestion-list');
105
+ const item = component?.querySelector('.suggestion-item');
106
+ expect(item?.textContent).toContain('Test Command');
102
107
  });
103
- await sleepAsync(50);
104
- const component = document.querySelector('shade-command-palette-suggestion-list');
105
- const item = component?.querySelector('.suggestion-item');
106
- expect(item?.textContent).toContain('Test Command');
107
- manager[Symbol.dispose]();
108
108
  });
109
109
  });
110
110
  it('should mark first item as selected by default', async () => {
111
111
  await usingAsync(new Injector(), async (injector) => {
112
- const manager = createManager();
113
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
114
- manager.selectedIndex.setValue(0);
115
- const rootElement = document.getElementById('root');
116
- initializeShadeRoot({
117
- injector,
118
- rootElement,
119
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
112
+ await usingAsync(createManager(), async (manager) => {
113
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
114
+ manager.selectedIndex.setValue(0);
115
+ const rootElement = document.getElementById('root');
116
+ initializeShadeRoot({
117
+ injector,
118
+ rootElement,
119
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
120
+ });
121
+ await sleepAsync(50);
122
+ const component = document.querySelector('shade-command-palette-suggestion-list');
123
+ const items = component?.querySelectorAll('.suggestion-item');
124
+ expect(items?.[0]?.classList.contains('selected')).toBe(true);
125
+ expect(items?.[1]?.classList.contains('selected')).toBe(false);
120
126
  });
121
- await sleepAsync(50);
122
- const component = document.querySelector('shade-command-palette-suggestion-list');
123
- const items = component?.querySelectorAll('.suggestion-item');
124
- expect(items?.[0]?.classList.contains('selected')).toBe(true);
125
- expect(items?.[1]?.classList.contains('selected')).toBe(false);
126
- manager[Symbol.dispose]();
127
127
  });
128
128
  });
129
129
  it('should update selected class when selectedIndex changes', async () => {
130
130
  await usingAsync(new Injector(), async (injector) => {
131
- const manager = createManager();
132
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
133
- manager.selectedIndex.setValue(0);
134
- const rootElement = document.getElementById('root');
135
- initializeShadeRoot({
136
- injector,
137
- rootElement,
138
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
131
+ await usingAsync(createManager(), async (manager) => {
132
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)]);
133
+ manager.selectedIndex.setValue(0);
134
+ const rootElement = document.getElementById('root');
135
+ initializeShadeRoot({
136
+ injector,
137
+ rootElement,
138
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
139
+ });
140
+ await sleepAsync(50);
141
+ manager.selectedIndex.setValue(1);
142
+ await sleepAsync(50);
143
+ const component = document.querySelector('shade-command-palette-suggestion-list');
144
+ const items = component?.querySelectorAll('.suggestion-item');
145
+ expect(items?.[0]?.classList.contains('selected')).toBe(false);
146
+ expect(items?.[1]?.classList.contains('selected')).toBe(true);
139
147
  });
140
- await sleepAsync(50);
141
- manager.selectedIndex.setValue(1);
142
- await sleepAsync(50);
143
- const component = document.querySelector('shade-command-palette-suggestion-list');
144
- const items = component?.querySelectorAll('.suggestion-item');
145
- expect(items?.[0]?.classList.contains('selected')).toBe(false);
146
- expect(items?.[1]?.classList.contains('selected')).toBe(true);
147
- manager[Symbol.dispose]();
148
148
  });
149
149
  });
150
150
  it('should call selectSuggestion when item is clicked while opened', async () => {
151
151
  await usingAsync(new Injector(), async (injector) => {
152
- const manager = createManager();
153
- const suggestion = createSuggestion('Click Me', 100);
154
- manager.currentSuggestions.setValue([suggestion]);
155
- manager.isOpened.setValue(true);
156
- const rootElement = document.getElementById('root');
157
- initializeShadeRoot({
158
- injector,
159
- rootElement,
160
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
152
+ await usingAsync(createManager(), async (manager) => {
153
+ const suggestion = createSuggestion('Click Me', 100);
154
+ manager.currentSuggestions.setValue([suggestion]);
155
+ manager.isOpened.setValue(true);
156
+ const rootElement = document.getElementById('root');
157
+ initializeShadeRoot({
158
+ injector,
159
+ rootElement,
160
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
161
+ });
162
+ await sleepAsync(50);
163
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion');
164
+ const component = document.querySelector('shade-command-palette-suggestion-list');
165
+ const item = component?.querySelector('.suggestion-item');
166
+ item?.click();
167
+ expect(selectSpy).toHaveBeenCalledWith(injector, 0);
161
168
  });
162
- await sleepAsync(50);
163
- const selectSpy = vi.spyOn(manager, 'selectSuggestion');
164
- const component = document.querySelector('shade-command-palette-suggestion-list');
165
- const item = component?.querySelector('.suggestion-item');
166
- item?.click();
167
- expect(selectSpy).toHaveBeenCalledWith(injector, 0);
168
- manager[Symbol.dispose]();
169
169
  });
170
170
  });
171
171
  it('should not call selectSuggestion when item is clicked while closed', async () => {
172
172
  await usingAsync(new Injector(), async (injector) => {
173
- const manager = createManager();
174
- const suggestion = createSuggestion('Click Me', 100);
175
- manager.currentSuggestions.setValue([suggestion]);
176
- manager.isOpened.setValue(false);
177
- const rootElement = document.getElementById('root');
178
- initializeShadeRoot({
179
- injector,
180
- rootElement,
181
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
173
+ await usingAsync(createManager(), async (manager) => {
174
+ const suggestion = createSuggestion('Click Me', 100);
175
+ manager.currentSuggestions.setValue([suggestion]);
176
+ manager.isOpened.setValue(false);
177
+ const rootElement = document.getElementById('root');
178
+ initializeShadeRoot({
179
+ injector,
180
+ rootElement,
181
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
182
+ });
183
+ await sleepAsync(50);
184
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion');
185
+ const component = document.querySelector('shade-command-palette-suggestion-list');
186
+ const item = component?.querySelector('.suggestion-item');
187
+ item?.click();
188
+ expect(selectSpy).not.toHaveBeenCalled();
182
189
  });
183
- await sleepAsync(50);
184
- const selectSpy = vi.spyOn(manager, 'selectSuggestion');
185
- const component = document.querySelector('shade-command-palette-suggestion-list');
186
- const item = component?.querySelector('.suggestion-item');
187
- item?.click();
188
- expect(selectSpy).not.toHaveBeenCalled();
189
- manager[Symbol.dispose]();
190
190
  });
191
191
  });
192
192
  it('should animate slide-in when opening', async () => {
193
193
  await usingAsync(new Injector(), async (injector) => {
194
- const manager = createManager();
195
- manager.isOpened.setValue(false);
196
- const rootElement = document.getElementById('root');
197
- initializeShadeRoot({
198
- injector,
199
- rootElement,
200
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
194
+ await usingAsync(createManager(), async (manager) => {
195
+ manager.isOpened.setValue(false);
196
+ const rootElement = document.getElementById('root');
197
+ initializeShadeRoot({
198
+ injector,
199
+ rootElement,
200
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
201
+ });
202
+ await sleepAsync(50);
203
+ animateCalls = [];
204
+ manager.isOpened.setValue(true);
205
+ await sleepAsync(50);
206
+ const slideAnimation = animateCalls.find((call) => Array.isArray(call.keyframes) &&
207
+ call.keyframes.some((kf) => kf.transform === 'translate(0, -50px)') &&
208
+ call.keyframes.some((kf) => kf.transform === 'translate(0, 0)'));
209
+ expect(slideAnimation).toBeDefined();
210
+ expect(slideAnimation?.options?.duration).toBe(500);
211
+ expect(slideAnimation?.options?.fill).toBe('forwards');
201
212
  });
202
- await sleepAsync(50);
203
- animateCalls = [];
204
- manager.isOpened.setValue(true);
205
- await sleepAsync(50);
206
- const slideAnimation = animateCalls.find((call) => Array.isArray(call.keyframes) &&
207
- call.keyframes.some((kf) => kf.transform === 'translate(0, -50px)') &&
208
- call.keyframes.some((kf) => kf.transform === 'translate(0, 0)'));
209
- expect(slideAnimation).toBeDefined();
210
- expect(slideAnimation?.options?.duration).toBe(500);
211
- expect(slideAnimation?.options?.fill).toBe('forwards');
212
- manager[Symbol.dispose]();
213
213
  });
214
214
  });
215
215
  it('should animate slide-out when closing', async () => {
216
216
  await usingAsync(new Injector(), async (injector) => {
217
- const manager = createManager();
218
- manager.isOpened.setValue(true);
219
- const rootElement = document.getElementById('root');
220
- initializeShadeRoot({
221
- injector,
222
- rootElement,
223
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
217
+ await usingAsync(createManager(), async (manager) => {
218
+ manager.isOpened.setValue(true);
219
+ const rootElement = document.getElementById('root');
220
+ initializeShadeRoot({
221
+ injector,
222
+ rootElement,
223
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
224
+ });
225
+ await sleepAsync(50);
226
+ animateCalls = [];
227
+ manager.isOpened.setValue(false);
228
+ await sleepAsync(50);
229
+ const slideAnimation = animateCalls.find((call) => Array.isArray(call.keyframes) &&
230
+ call.keyframes.some((kf) => kf.transform === 'translate(0, 0)') &&
231
+ call.keyframes.some((kf) => kf.transform === 'translate(0, -50px)'));
232
+ expect(slideAnimation).toBeDefined();
233
+ expect(slideAnimation?.options?.duration).toBe(200);
224
234
  });
225
- await sleepAsync(50);
226
- animateCalls = [];
227
- manager.isOpened.setValue(false);
228
- await sleepAsync(50);
229
- const slideAnimation = animateCalls.find((call) => Array.isArray(call.keyframes) &&
230
- call.keyframes.some((kf) => kf.transform === 'translate(0, 0)') &&
231
- call.keyframes.some((kf) => kf.transform === 'translate(0, -50px)'));
232
- expect(slideAnimation).toBeDefined();
233
- expect(slideAnimation?.options?.duration).toBe(200);
234
- manager[Symbol.dispose]();
235
235
  });
236
236
  });
237
237
  it('should set container display to initial when opening', async () => {
238
238
  await usingAsync(new Injector(), async (injector) => {
239
- const manager = createManager();
240
- manager.isOpened.setValue(false);
241
- const rootElement = document.getElementById('root');
242
- initializeShadeRoot({
243
- injector,
244
- rootElement,
245
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
239
+ await usingAsync(createManager(), async (manager) => {
240
+ manager.isOpened.setValue(false);
241
+ const rootElement = document.getElementById('root');
242
+ initializeShadeRoot({
243
+ injector,
244
+ rootElement,
245
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
246
+ });
247
+ await sleepAsync(50);
248
+ manager.isOpened.setValue(true);
249
+ await sleepAsync(50);
250
+ const component = document.querySelector('shade-command-palette-suggestion-list');
251
+ const container = component?.querySelector('.suggestion-items-container');
252
+ expect(container?.style.display).toBe('initial');
246
253
  });
247
- await sleepAsync(50);
248
- manager.isOpened.setValue(true);
249
- await sleepAsync(50);
250
- const component = document.querySelector('shade-command-palette-suggestion-list');
251
- const container = component?.querySelector('.suggestion-items-container');
252
- expect(container?.style.display).toBe('initial');
253
- manager[Symbol.dispose]();
254
254
  });
255
255
  });
256
256
  it('should set container display to none when closing', async () => {
257
257
  await usingAsync(new Injector(), async (injector) => {
258
- const manager = createManager();
259
- manager.isOpened.setValue(true);
260
- const rootElement = document.getElementById('root');
261
- initializeShadeRoot({
262
- injector,
263
- rootElement,
264
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
258
+ await usingAsync(createManager(), async (manager) => {
259
+ manager.isOpened.setValue(true);
260
+ const rootElement = document.getElementById('root');
261
+ initializeShadeRoot({
262
+ injector,
263
+ rootElement,
264
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
265
+ });
266
+ await sleepAsync(50);
267
+ manager.isOpened.setValue(false);
268
+ await sleepAsync(50);
269
+ const component = document.querySelector('shade-command-palette-suggestion-list');
270
+ const container = component?.querySelector('.suggestion-items-container');
271
+ expect(container?.style.display).toBe('none');
265
272
  });
266
- await sleepAsync(50);
267
- manager.isOpened.setValue(false);
268
- await sleepAsync(50);
269
- const component = document.querySelector('shade-command-palette-suggestion-list');
270
- const container = component?.querySelector('.suggestion-items-container');
271
- expect(container?.style.display).toBe('none');
272
- manager[Symbol.dispose]();
273
273
  });
274
274
  });
275
275
  it('should render empty list when no suggestions', async () => {
276
276
  await usingAsync(new Injector(), async (injector) => {
277
- const manager = createManager();
278
- manager.currentSuggestions.setValue([]);
279
- const rootElement = document.getElementById('root');
280
- initializeShadeRoot({
281
- injector,
282
- rootElement,
283
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
277
+ await usingAsync(createManager(), async (manager) => {
278
+ manager.currentSuggestions.setValue([]);
279
+ const rootElement = document.getElementById('root');
280
+ initializeShadeRoot({
281
+ injector,
282
+ rootElement,
283
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
284
+ });
285
+ await sleepAsync(50);
286
+ const component = document.querySelector('shade-command-palette-suggestion-list');
287
+ const items = component?.querySelectorAll('.suggestion-item');
288
+ expect(items?.length).toBe(0);
284
289
  });
285
- await sleepAsync(50);
286
- const component = document.querySelector('shade-command-palette-suggestion-list');
287
- const items = component?.querySelectorAll('.suggestion-item');
288
- expect(items?.length).toBe(0);
289
- manager[Symbol.dispose]();
290
290
  });
291
291
  });
292
292
  it('should support fullScreenSuggestions prop', async () => {
293
293
  await usingAsync(new Injector(), async (injector) => {
294
- const manager = createManager();
295
- manager.isOpened.setValue(true);
296
- const rootElement = document.getElementById('root');
297
- initializeShadeRoot({
298
- injector,
299
- rootElement,
300
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager, fullScreenSuggestions: true }),
294
+ await usingAsync(createManager(), async (manager) => {
295
+ manager.isOpened.setValue(true);
296
+ const rootElement = document.getElementById('root');
297
+ initializeShadeRoot({
298
+ injector,
299
+ rootElement,
300
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager, fullScreenSuggestions: true }),
301
+ });
302
+ await sleepAsync(50);
303
+ const component = document.querySelector('shade-command-palette-suggestion-list');
304
+ const container = component?.querySelector('.suggestion-items-container');
305
+ expect(container?.style.left).toBe('0px');
306
+ expect(container?.style.width).toBe('calc(100% - 42px)');
301
307
  });
302
- await sleepAsync(50);
303
- const component = document.querySelector('shade-command-palette-suggestion-list');
304
- const container = component?.querySelector('.suggestion-items-container');
305
- expect(container?.style.left).toBe('0px');
306
- expect(container?.style.width).toBe('calc(100% - 42px)');
307
- manager[Symbol.dispose]();
308
308
  });
309
309
  });
310
310
  it('should set max height based on window height', async () => {
311
311
  await usingAsync(new Injector(), async (injector) => {
312
- const manager = createManager();
313
- manager.isOpened.setValue(true);
314
- const rootElement = document.getElementById('root');
315
- initializeShadeRoot({
316
- injector,
317
- rootElement,
318
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
312
+ await usingAsync(createManager(), async (manager) => {
313
+ manager.isOpened.setValue(true);
314
+ const rootElement = document.getElementById('root');
315
+ initializeShadeRoot({
316
+ injector,
317
+ rootElement,
318
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
319
+ });
320
+ await sleepAsync(50);
321
+ const component = document.querySelector('shade-command-palette-suggestion-list');
322
+ const container = component?.querySelector('.suggestion-items-container');
323
+ const expectedMaxHeight = `${window.innerHeight * 0.8}px`;
324
+ expect(container?.style.maxHeight).toBe(expectedMaxHeight);
319
325
  });
320
- await sleepAsync(50);
321
- const component = document.querySelector('shade-command-palette-suggestion-list');
322
- const container = component?.querySelector('.suggestion-items-container');
323
- const expectedMaxHeight = `${window.innerHeight * 0.8}px`;
324
- expect(container?.style.maxHeight).toBe(expectedMaxHeight);
325
- manager[Symbol.dispose]();
326
326
  });
327
327
  });
328
328
  it('should have correct CSS styles for suggestion items container', async () => {
329
329
  await usingAsync(new Injector(), async (injector) => {
330
- const manager = createManager();
331
- const rootElement = document.getElementById('root');
332
- initializeShadeRoot({
333
- injector,
334
- rootElement,
335
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
330
+ await usingAsync(createManager(), async (manager) => {
331
+ const rootElement = document.getElementById('root');
332
+ initializeShadeRoot({
333
+ injector,
334
+ rootElement,
335
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
336
+ });
337
+ await sleepAsync(50);
338
+ const component = document.querySelector('shade-command-palette-suggestion-list');
339
+ const container = component?.querySelector('.suggestion-items-container');
340
+ const computedStyle = window.getComputedStyle(container);
341
+ expect(computedStyle.position).toBe('absolute');
342
+ expect(computedStyle.overflow).toBe('hidden');
343
+ expect(computedStyle.zIndex).toBe('1');
336
344
  });
337
- await sleepAsync(50);
338
- const component = document.querySelector('shade-command-palette-suggestion-list');
339
- const container = component?.querySelector('.suggestion-items-container');
340
- const computedStyle = window.getComputedStyle(container);
341
- expect(computedStyle.position).toBe('absolute');
342
- expect(computedStyle.overflow).toBe('hidden');
343
- expect(computedStyle.zIndex).toBe('1');
344
- manager[Symbol.dispose]();
345
345
  });
346
346
  });
347
347
  it('should call selectSuggestion with correct index for second item', async () => {
348
348
  await usingAsync(new Injector(), async (injector) => {
349
- const manager = createManager();
350
- manager.currentSuggestions.setValue([
351
- createSuggestion('First', 100),
352
- createSuggestion('Second', 90),
353
- createSuggestion('Third', 80),
354
- ]);
355
- manager.isOpened.setValue(true);
356
- const rootElement = document.getElementById('root');
357
- initializeShadeRoot({
358
- injector,
359
- rootElement,
360
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
349
+ await usingAsync(createManager(), async (manager) => {
350
+ manager.currentSuggestions.setValue([
351
+ createSuggestion('First', 100),
352
+ createSuggestion('Second', 90),
353
+ createSuggestion('Third', 80),
354
+ ]);
355
+ manager.isOpened.setValue(true);
356
+ const rootElement = document.getElementById('root');
357
+ initializeShadeRoot({
358
+ injector,
359
+ rootElement,
360
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
361
+ });
362
+ await sleepAsync(50);
363
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion');
364
+ const component = document.querySelector('shade-command-palette-suggestion-list');
365
+ const items = component?.querySelectorAll('.suggestion-item');
366
+ items[1]?.click();
367
+ expect(selectSpy).toHaveBeenCalledWith(injector, 1);
361
368
  });
362
- await sleepAsync(50);
363
- const selectSpy = vi.spyOn(manager, 'selectSuggestion');
364
- const component = document.querySelector('shade-command-palette-suggestion-list');
365
- const items = component?.querySelectorAll('.suggestion-item');
366
- items[1]?.click();
367
- expect(selectSpy).toHaveBeenCalledWith(injector, 1);
368
- manager[Symbol.dispose]();
369
369
  });
370
370
  });
371
371
  it('should update container z-index when opening and closing', async () => {
372
372
  await usingAsync(new Injector(), async (injector) => {
373
- const manager = createManager();
374
- manager.isOpened.setValue(false);
375
- const rootElement = document.getElementById('root');
376
- initializeShadeRoot({
377
- injector,
378
- rootElement,
379
- jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
373
+ await usingAsync(createManager(), async (manager) => {
374
+ manager.isOpened.setValue(false);
375
+ const rootElement = document.getElementById('root');
376
+ initializeShadeRoot({
377
+ injector,
378
+ rootElement,
379
+ jsxElement: createComponent(CommandPaletteSuggestionList, { manager: manager }),
380
+ });
381
+ await sleepAsync(50);
382
+ manager.isOpened.setValue(true);
383
+ await sleepAsync(50);
384
+ const component = document.querySelector('shade-command-palette-suggestion-list');
385
+ const container = component?.querySelector('.suggestion-items-container');
386
+ expect(container?.style.zIndex).toBe('1');
387
+ manager.isOpened.setValue(false);
388
+ await sleepAsync(50);
389
+ expect(container?.style.zIndex).toBe('-1');
380
390
  });
381
- await sleepAsync(50);
382
- manager.isOpened.setValue(true);
383
- await sleepAsync(50);
384
- const component = document.querySelector('shade-command-palette-suggestion-list');
385
- const container = component?.querySelector('.suggestion-items-container');
386
- expect(container?.style.zIndex).toBe('1');
387
- manager.isOpened.setValue(false);
388
- await sleepAsync(50);
389
- expect(container?.style.zIndex).toBe('-1');
390
- manager[Symbol.dispose]();
391
391
  });
392
392
  });
393
393
  });