@furystack/shades-common-components 12.0.0 → 12.0.1

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 (26) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/esm/components/command-palette/command-palette-input.spec.js +148 -148
  3. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
  4. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +258 -258
  5. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
  6. package/esm/components/context-menu/context-menu-manager.spec.js +211 -217
  7. package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -1
  8. package/esm/components/data-grid/body.spec.js +173 -173
  9. package/esm/components/data-grid/body.spec.js.map +1 -1
  10. package/esm/components/data-grid/data-grid.spec.js +39 -130
  11. package/esm/components/data-grid/data-grid.spec.js.map +1 -1
  12. package/esm/services/click-away-service.spec.js +14 -12
  13. package/esm/services/click-away-service.spec.js.map +1 -1
  14. package/esm/services/list-service.spec.js +170 -141
  15. package/esm/services/list-service.spec.js.map +1 -1
  16. package/esm/services/tree-service.spec.js +190 -159
  17. package/esm/services/tree-service.spec.js.map +1 -1
  18. package/package.json +7 -8
  19. package/src/components/command-palette/command-palette-input.spec.tsx +183 -194
  20. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +303 -321
  21. package/src/components/context-menu/context-menu-manager.spec.ts +213 -258
  22. package/src/components/data-grid/body.spec.tsx +266 -276
  23. package/src/components/data-grid/data-grid.spec.tsx +137 -232
  24. package/src/services/click-away-service.spec.ts +14 -16
  25. package/src/services/list-service.spec.ts +170 -172
  26. package/src/services/tree-service.spec.ts +191 -207
@@ -56,462 +56,444 @@ describe('CommandPaletteSuggestionList', () => {
56
56
 
57
57
  it('should render with shadow DOM', async () => {
58
58
  await usingAsync(new Injector(), async (injector) => {
59
- const manager = createManager()
60
- const rootElement = document.getElementById('root') as HTMLDivElement
59
+ await usingAsync(createManager(), async (manager) => {
60
+ const rootElement = document.getElementById('root') as HTMLDivElement
61
61
 
62
- initializeShadeRoot({
63
- injector,
64
- rootElement,
65
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
66
- })
67
-
68
- await sleepAsync(50)
62
+ initializeShadeRoot({
63
+ injector,
64
+ rootElement,
65
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
66
+ })
69
67
 
70
- const component = document.querySelector('shade-command-palette-suggestion-list')
71
- expect(component).not.toBeNull()
68
+ await sleepAsync(50)
72
69
 
73
- manager[Symbol.dispose]()
70
+ const component = document.querySelector('shade-command-palette-suggestion-list')
71
+ expect(component).not.toBeNull()
72
+ })
74
73
  })
75
74
  })
76
75
 
77
76
  it('should render suggestion items container', async () => {
78
77
  await usingAsync(new Injector(), async (injector) => {
79
- const manager = createManager()
80
- const rootElement = document.getElementById('root') as HTMLDivElement
78
+ await usingAsync(createManager(), async (manager) => {
79
+ const rootElement = document.getElementById('root') as HTMLDivElement
81
80
 
82
- initializeShadeRoot({
83
- injector,
84
- rootElement,
85
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
86
- })
81
+ initializeShadeRoot({
82
+ injector,
83
+ rootElement,
84
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
85
+ })
87
86
 
88
- await sleepAsync(50)
87
+ await sleepAsync(50)
89
88
 
90
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
91
- const container = component?.querySelector('.suggestion-items-container')
92
- expect(container).not.toBeNull()
93
-
94
- manager[Symbol.dispose]()
89
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
90
+ const container = component?.querySelector('.suggestion-items-container')
91
+ expect(container).not.toBeNull()
92
+ })
95
93
  })
96
94
  })
97
95
 
98
96
  it('should render suggestions from manager', async () => {
99
97
  await usingAsync(new Injector(), async (injector) => {
100
- const manager = createManager()
101
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
102
- const rootElement = document.getElementById('root') as HTMLDivElement
103
-
104
- initializeShadeRoot({
105
- injector,
106
- rootElement,
107
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
108
- })
98
+ await usingAsync(createManager(), async (manager) => {
99
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
100
+ const rootElement = document.getElementById('root') as HTMLDivElement
109
101
 
110
- await sleepAsync(50)
102
+ initializeShadeRoot({
103
+ injector,
104
+ rootElement,
105
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
106
+ })
111
107
 
112
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
113
- const items = component?.querySelectorAll('.suggestion-item')
114
- expect(items?.length).toBe(2)
108
+ await sleepAsync(50)
115
109
 
116
- manager[Symbol.dispose]()
110
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
111
+ const items = component?.querySelectorAll('.suggestion-item')
112
+ expect(items?.length).toBe(2)
113
+ })
117
114
  })
118
115
  })
119
116
 
120
117
  it('should render suggestion content', async () => {
121
118
  await usingAsync(new Injector(), async (injector) => {
122
- const manager = createManager()
123
- manager.currentSuggestions.setValue([createSuggestion('Test Command', 100)])
124
- const rootElement = document.getElementById('root') as HTMLDivElement
125
-
126
- initializeShadeRoot({
127
- injector,
128
- rootElement,
129
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
130
- })
119
+ await usingAsync(createManager(), async (manager) => {
120
+ manager.currentSuggestions.setValue([createSuggestion('Test Command', 100)])
121
+ const rootElement = document.getElementById('root') as HTMLDivElement
131
122
 
132
- await sleepAsync(50)
123
+ initializeShadeRoot({
124
+ injector,
125
+ rootElement,
126
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
127
+ })
133
128
 
134
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
135
- const item = component?.querySelector('.suggestion-item')
136
- expect(item?.textContent).toContain('Test Command')
129
+ await sleepAsync(50)
137
130
 
138
- manager[Symbol.dispose]()
131
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
132
+ const item = component?.querySelector('.suggestion-item')
133
+ expect(item?.textContent).toContain('Test Command')
134
+ })
139
135
  })
140
136
  })
141
137
 
142
138
  it('should mark first item as selected by default', async () => {
143
139
  await usingAsync(new Injector(), async (injector) => {
144
- const manager = createManager()
145
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
146
- manager.selectedIndex.setValue(0)
147
- const rootElement = document.getElementById('root') as HTMLDivElement
148
-
149
- initializeShadeRoot({
150
- injector,
151
- rootElement,
152
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
140
+ await usingAsync(createManager(), async (manager) => {
141
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
142
+ manager.selectedIndex.setValue(0)
143
+ const rootElement = document.getElementById('root') as HTMLDivElement
144
+
145
+ initializeShadeRoot({
146
+ injector,
147
+ rootElement,
148
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
149
+ })
150
+
151
+ await sleepAsync(50)
152
+
153
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
154
+ const items = component?.querySelectorAll('.suggestion-item')
155
+ expect(items?.[0]?.classList.contains('selected')).toBe(true)
156
+ expect(items?.[1]?.classList.contains('selected')).toBe(false)
153
157
  })
154
-
155
- await sleepAsync(50)
156
-
157
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
158
- const items = component?.querySelectorAll('.suggestion-item')
159
- expect(items?.[0]?.classList.contains('selected')).toBe(true)
160
- expect(items?.[1]?.classList.contains('selected')).toBe(false)
161
-
162
- manager[Symbol.dispose]()
163
158
  })
164
159
  })
165
160
 
166
161
  it('should update selected class when selectedIndex changes', async () => {
167
162
  await usingAsync(new Injector(), async (injector) => {
168
- const manager = createManager()
169
- manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
170
- manager.selectedIndex.setValue(0)
171
- const rootElement = document.getElementById('root') as HTMLDivElement
172
-
173
- initializeShadeRoot({
174
- injector,
175
- rootElement,
176
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
163
+ await usingAsync(createManager(), async (manager) => {
164
+ manager.currentSuggestions.setValue([createSuggestion('Command 1', 100), createSuggestion('Command 2', 90)])
165
+ manager.selectedIndex.setValue(0)
166
+ const rootElement = document.getElementById('root') as HTMLDivElement
167
+
168
+ initializeShadeRoot({
169
+ injector,
170
+ rootElement,
171
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
172
+ })
173
+
174
+ await sleepAsync(50)
175
+
176
+ manager.selectedIndex.setValue(1)
177
+ await sleepAsync(50)
178
+
179
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
180
+ const items = component?.querySelectorAll('.suggestion-item')
181
+ expect(items?.[0]?.classList.contains('selected')).toBe(false)
182
+ expect(items?.[1]?.classList.contains('selected')).toBe(true)
177
183
  })
178
-
179
- await sleepAsync(50)
180
-
181
- manager.selectedIndex.setValue(1)
182
- await sleepAsync(50)
183
-
184
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
185
- const items = component?.querySelectorAll('.suggestion-item')
186
- expect(items?.[0]?.classList.contains('selected')).toBe(false)
187
- expect(items?.[1]?.classList.contains('selected')).toBe(true)
188
-
189
- manager[Symbol.dispose]()
190
184
  })
191
185
  })
192
186
 
193
187
  it('should call selectSuggestion when item is clicked while opened', async () => {
194
188
  await usingAsync(new Injector(), async (injector) => {
195
- const manager = createManager()
196
- const suggestion = createSuggestion('Click Me', 100)
197
- manager.currentSuggestions.setValue([suggestion])
198
- manager.isOpened.setValue(true)
199
- const rootElement = document.getElementById('root') as HTMLDivElement
200
-
201
- initializeShadeRoot({
202
- injector,
203
- rootElement,
204
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
205
- })
189
+ await usingAsync(createManager(), async (manager) => {
190
+ const suggestion = createSuggestion('Click Me', 100)
191
+ manager.currentSuggestions.setValue([suggestion])
192
+ manager.isOpened.setValue(true)
193
+ const rootElement = document.getElementById('root') as HTMLDivElement
206
194
 
207
- await sleepAsync(50)
195
+ initializeShadeRoot({
196
+ injector,
197
+ rootElement,
198
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
199
+ })
208
200
 
209
- const selectSpy = vi.spyOn(manager, 'selectSuggestion')
201
+ await sleepAsync(50)
210
202
 
211
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
212
- const item = component?.querySelector('.suggestion-item') as HTMLElement
213
- item?.click()
203
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion')
214
204
 
215
- expect(selectSpy).toHaveBeenCalledWith(injector, 0)
205
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
206
+ const item = component?.querySelector('.suggestion-item') as HTMLElement
207
+ item?.click()
216
208
 
217
- manager[Symbol.dispose]()
209
+ expect(selectSpy).toHaveBeenCalledWith(injector, 0)
210
+ })
218
211
  })
219
212
  })
220
213
 
221
214
  it('should not call selectSuggestion when item is clicked while closed', async () => {
222
215
  await usingAsync(new Injector(), async (injector) => {
223
- const manager = createManager()
224
- const suggestion = createSuggestion('Click Me', 100)
225
- manager.currentSuggestions.setValue([suggestion])
226
- manager.isOpened.setValue(false)
227
- const rootElement = document.getElementById('root') as HTMLDivElement
228
-
229
- initializeShadeRoot({
230
- injector,
231
- rootElement,
232
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
233
- })
216
+ await usingAsync(createManager(), async (manager) => {
217
+ const suggestion = createSuggestion('Click Me', 100)
218
+ manager.currentSuggestions.setValue([suggestion])
219
+ manager.isOpened.setValue(false)
220
+ const rootElement = document.getElementById('root') as HTMLDivElement
234
221
 
235
- await sleepAsync(50)
222
+ initializeShadeRoot({
223
+ injector,
224
+ rootElement,
225
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
226
+ })
236
227
 
237
- const selectSpy = vi.spyOn(manager, 'selectSuggestion')
228
+ await sleepAsync(50)
238
229
 
239
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
240
- const item = component?.querySelector('.suggestion-item') as HTMLElement
241
- item?.click()
230
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion')
242
231
 
243
- expect(selectSpy).not.toHaveBeenCalled()
232
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
233
+ const item = component?.querySelector('.suggestion-item') as HTMLElement
234
+ item?.click()
244
235
 
245
- manager[Symbol.dispose]()
236
+ expect(selectSpy).not.toHaveBeenCalled()
237
+ })
246
238
  })
247
239
  })
248
240
 
249
241
  it('should animate slide-in when opening', async () => {
250
242
  await usingAsync(new Injector(), async (injector) => {
251
- const manager = createManager()
252
- manager.isOpened.setValue(false)
253
- const rootElement = document.getElementById('root') as HTMLDivElement
254
-
255
- initializeShadeRoot({
256
- injector,
257
- rootElement,
258
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
243
+ await usingAsync(createManager(), async (manager) => {
244
+ manager.isOpened.setValue(false)
245
+ const rootElement = document.getElementById('root') as HTMLDivElement
246
+
247
+ initializeShadeRoot({
248
+ injector,
249
+ rootElement,
250
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
251
+ })
252
+
253
+ await sleepAsync(50)
254
+ animateCalls = []
255
+
256
+ manager.isOpened.setValue(true)
257
+ await sleepAsync(50)
258
+
259
+ const slideAnimation = animateCalls.find(
260
+ (call) =>
261
+ Array.isArray(call.keyframes) &&
262
+ call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, -50px)') &&
263
+ call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, 0)'),
264
+ )
265
+
266
+ expect(slideAnimation).toBeDefined()
267
+ expect((slideAnimation?.options as KeyframeAnimationOptions)?.duration).toBe(500)
268
+ expect((slideAnimation?.options as KeyframeAnimationOptions)?.fill).toBe('forwards')
259
269
  })
260
-
261
- await sleepAsync(50)
262
- animateCalls = []
263
-
264
- manager.isOpened.setValue(true)
265
- await sleepAsync(50)
266
-
267
- const slideAnimation = animateCalls.find(
268
- (call) =>
269
- Array.isArray(call.keyframes) &&
270
- call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, -50px)') &&
271
- call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, 0)'),
272
- )
273
-
274
- expect(slideAnimation).toBeDefined()
275
- expect((slideAnimation?.options as KeyframeAnimationOptions)?.duration).toBe(500)
276
- expect((slideAnimation?.options as KeyframeAnimationOptions)?.fill).toBe('forwards')
277
-
278
- manager[Symbol.dispose]()
279
270
  })
280
271
  })
281
272
 
282
273
  it('should animate slide-out when closing', async () => {
283
274
  await usingAsync(new Injector(), async (injector) => {
284
- const manager = createManager()
285
- manager.isOpened.setValue(true)
286
- const rootElement = document.getElementById('root') as HTMLDivElement
287
-
288
- initializeShadeRoot({
289
- injector,
290
- rootElement,
291
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
275
+ await usingAsync(createManager(), async (manager) => {
276
+ manager.isOpened.setValue(true)
277
+ const rootElement = document.getElementById('root') as HTMLDivElement
278
+
279
+ initializeShadeRoot({
280
+ injector,
281
+ rootElement,
282
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
283
+ })
284
+
285
+ await sleepAsync(50)
286
+ animateCalls = []
287
+
288
+ manager.isOpened.setValue(false)
289
+ await sleepAsync(50)
290
+
291
+ const slideAnimation = animateCalls.find(
292
+ (call) =>
293
+ Array.isArray(call.keyframes) &&
294
+ call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, 0)') &&
295
+ call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, -50px)'),
296
+ )
297
+
298
+ expect(slideAnimation).toBeDefined()
299
+ expect((slideAnimation?.options as KeyframeAnimationOptions)?.duration).toBe(200)
292
300
  })
293
-
294
- await sleepAsync(50)
295
- animateCalls = []
296
-
297
- manager.isOpened.setValue(false)
298
- await sleepAsync(50)
299
-
300
- const slideAnimation = animateCalls.find(
301
- (call) =>
302
- Array.isArray(call.keyframes) &&
303
- call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, 0)') &&
304
- call.keyframes.some((kf: Keyframe) => kf.transform === 'translate(0, -50px)'),
305
- )
306
-
307
- expect(slideAnimation).toBeDefined()
308
- expect((slideAnimation?.options as KeyframeAnimationOptions)?.duration).toBe(200)
309
-
310
- manager[Symbol.dispose]()
311
301
  })
312
302
  })
313
303
 
314
304
  it('should set container display to initial when opening', async () => {
315
305
  await usingAsync(new Injector(), async (injector) => {
316
- const manager = createManager()
317
- manager.isOpened.setValue(false)
318
- const rootElement = document.getElementById('root') as HTMLDivElement
319
-
320
- initializeShadeRoot({
321
- injector,
322
- rootElement,
323
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
324
- })
306
+ await usingAsync(createManager(), async (manager) => {
307
+ manager.isOpened.setValue(false)
308
+ const rootElement = document.getElementById('root') as HTMLDivElement
325
309
 
326
- await sleepAsync(50)
310
+ initializeShadeRoot({
311
+ injector,
312
+ rootElement,
313
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
314
+ })
327
315
 
328
- manager.isOpened.setValue(true)
329
- await sleepAsync(50)
316
+ await sleepAsync(50)
330
317
 
331
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
332
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
333
- expect(container?.style.display).toBe('initial')
318
+ manager.isOpened.setValue(true)
319
+ await sleepAsync(50)
334
320
 
335
- manager[Symbol.dispose]()
321
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
322
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
323
+ expect(container?.style.display).toBe('initial')
324
+ })
336
325
  })
337
326
  })
338
327
 
339
328
  it('should set container display to none when closing', async () => {
340
329
  await usingAsync(new Injector(), async (injector) => {
341
- const manager = createManager()
342
- manager.isOpened.setValue(true)
343
- const rootElement = document.getElementById('root') as HTMLDivElement
344
-
345
- initializeShadeRoot({
346
- injector,
347
- rootElement,
348
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
349
- })
330
+ await usingAsync(createManager(), async (manager) => {
331
+ manager.isOpened.setValue(true)
332
+ const rootElement = document.getElementById('root') as HTMLDivElement
350
333
 
351
- await sleepAsync(50)
334
+ initializeShadeRoot({
335
+ injector,
336
+ rootElement,
337
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
338
+ })
352
339
 
353
- manager.isOpened.setValue(false)
354
- await sleepAsync(50)
340
+ await sleepAsync(50)
355
341
 
356
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
357
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
358
- expect(container?.style.display).toBe('none')
342
+ manager.isOpened.setValue(false)
343
+ await sleepAsync(50)
359
344
 
360
- manager[Symbol.dispose]()
345
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
346
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
347
+ expect(container?.style.display).toBe('none')
348
+ })
361
349
  })
362
350
  })
363
351
 
364
352
  it('should render empty list when no suggestions', async () => {
365
353
  await usingAsync(new Injector(), async (injector) => {
366
- const manager = createManager()
367
- manager.currentSuggestions.setValue([])
368
- const rootElement = document.getElementById('root') as HTMLDivElement
369
-
370
- initializeShadeRoot({
371
- injector,
372
- rootElement,
373
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
374
- })
354
+ await usingAsync(createManager(), async (manager) => {
355
+ manager.currentSuggestions.setValue([])
356
+ const rootElement = document.getElementById('root') as HTMLDivElement
375
357
 
376
- await sleepAsync(50)
358
+ initializeShadeRoot({
359
+ injector,
360
+ rootElement,
361
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
362
+ })
377
363
 
378
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
379
- const items = component?.querySelectorAll('.suggestion-item')
380
- expect(items?.length).toBe(0)
364
+ await sleepAsync(50)
381
365
 
382
- manager[Symbol.dispose]()
366
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
367
+ const items = component?.querySelectorAll('.suggestion-item')
368
+ expect(items?.length).toBe(0)
369
+ })
383
370
  })
384
371
  })
385
372
 
386
373
  it('should support fullScreenSuggestions prop', async () => {
387
374
  await usingAsync(new Injector(), async (injector) => {
388
- const manager = createManager()
389
- manager.isOpened.setValue(true)
390
- const rootElement = document.getElementById('root') as HTMLDivElement
391
-
392
- initializeShadeRoot({
393
- injector,
394
- rootElement,
395
- jsxElement: <CommandPaletteSuggestionList manager={manager} fullScreenSuggestions />,
375
+ await usingAsync(createManager(), async (manager) => {
376
+ manager.isOpened.setValue(true)
377
+ const rootElement = document.getElementById('root') as HTMLDivElement
378
+
379
+ initializeShadeRoot({
380
+ injector,
381
+ rootElement,
382
+ jsxElement: <CommandPaletteSuggestionList manager={manager} fullScreenSuggestions />,
383
+ })
384
+
385
+ await sleepAsync(50)
386
+
387
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
388
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
389
+ expect(container?.style.left).toBe('0px')
390
+ expect(container?.style.width).toBe('calc(100% - 42px)')
396
391
  })
397
-
398
- await sleepAsync(50)
399
-
400
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
401
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
402
- expect(container?.style.left).toBe('0px')
403
- expect(container?.style.width).toBe('calc(100% - 42px)')
404
-
405
- manager[Symbol.dispose]()
406
392
  })
407
393
  })
408
394
 
409
395
  it('should set max height based on window height', async () => {
410
396
  await usingAsync(new Injector(), async (injector) => {
411
- const manager = createManager()
412
- manager.isOpened.setValue(true)
413
- const rootElement = document.getElementById('root') as HTMLDivElement
414
-
415
- initializeShadeRoot({
416
- injector,
417
- rootElement,
418
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
397
+ await usingAsync(createManager(), async (manager) => {
398
+ manager.isOpened.setValue(true)
399
+ const rootElement = document.getElementById('root') as HTMLDivElement
400
+
401
+ initializeShadeRoot({
402
+ injector,
403
+ rootElement,
404
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
405
+ })
406
+
407
+ await sleepAsync(50)
408
+
409
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
410
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
411
+ const expectedMaxHeight = `${window.innerHeight * 0.8}px`
412
+ expect(container?.style.maxHeight).toBe(expectedMaxHeight)
419
413
  })
420
-
421
- await sleepAsync(50)
422
-
423
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
424
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
425
- const expectedMaxHeight = `${window.innerHeight * 0.8}px`
426
- expect(container?.style.maxHeight).toBe(expectedMaxHeight)
427
-
428
- manager[Symbol.dispose]()
429
414
  })
430
415
  })
431
416
 
432
417
  it('should have correct CSS styles for suggestion items container', async () => {
433
418
  await usingAsync(new Injector(), async (injector) => {
434
- const manager = createManager()
435
- const rootElement = document.getElementById('root') as HTMLDivElement
419
+ await usingAsync(createManager(), async (manager) => {
420
+ const rootElement = document.getElementById('root') as HTMLDivElement
436
421
 
437
- initializeShadeRoot({
438
- injector,
439
- rootElement,
440
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
441
- })
422
+ initializeShadeRoot({
423
+ injector,
424
+ rootElement,
425
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
426
+ })
442
427
 
443
- await sleepAsync(50)
428
+ await sleepAsync(50)
444
429
 
445
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
446
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
447
- const computedStyle = window.getComputedStyle(container)
430
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
431
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
432
+ const computedStyle = window.getComputedStyle(container)
448
433
 
449
- expect(computedStyle.position).toBe('absolute')
450
- expect(computedStyle.overflow).toBe('hidden')
451
- expect(computedStyle.zIndex).toBe('1')
452
-
453
- manager[Symbol.dispose]()
434
+ expect(computedStyle.position).toBe('absolute')
435
+ expect(computedStyle.overflow).toBe('hidden')
436
+ expect(computedStyle.zIndex).toBe('1')
437
+ })
454
438
  })
455
439
  })
456
440
 
457
441
  it('should call selectSuggestion with correct index for second item', async () => {
458
442
  await usingAsync(new Injector(), async (injector) => {
459
- const manager = createManager()
460
- manager.currentSuggestions.setValue([
461
- createSuggestion('First', 100),
462
- createSuggestion('Second', 90),
463
- createSuggestion('Third', 80),
464
- ])
465
- manager.isOpened.setValue(true)
466
- const rootElement = document.getElementById('root') as HTMLDivElement
467
-
468
- initializeShadeRoot({
469
- injector,
470
- rootElement,
471
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
443
+ await usingAsync(createManager(), async (manager) => {
444
+ manager.currentSuggestions.setValue([
445
+ createSuggestion('First', 100),
446
+ createSuggestion('Second', 90),
447
+ createSuggestion('Third', 80),
448
+ ])
449
+ manager.isOpened.setValue(true)
450
+ const rootElement = document.getElementById('root') as HTMLDivElement
451
+
452
+ initializeShadeRoot({
453
+ injector,
454
+ rootElement,
455
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
456
+ })
457
+
458
+ await sleepAsync(50)
459
+
460
+ const selectSpy = vi.spyOn(manager, 'selectSuggestion')
461
+
462
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
463
+ const items = component?.querySelectorAll('.suggestion-item')
464
+ ;(items[1] as HTMLElement)?.click()
465
+
466
+ expect(selectSpy).toHaveBeenCalledWith(injector, 1)
472
467
  })
473
-
474
- await sleepAsync(50)
475
-
476
- const selectSpy = vi.spyOn(manager, 'selectSuggestion')
477
-
478
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
479
- const items = component?.querySelectorAll('.suggestion-item')
480
- ;(items[1] as HTMLElement)?.click()
481
-
482
- expect(selectSpy).toHaveBeenCalledWith(injector, 1)
483
-
484
- manager[Symbol.dispose]()
485
468
  })
486
469
  })
487
470
 
488
471
  it('should update container z-index when opening and closing', async () => {
489
472
  await usingAsync(new Injector(), async (injector) => {
490
- const manager = createManager()
491
- manager.isOpened.setValue(false)
492
- const rootElement = document.getElementById('root') as HTMLDivElement
493
-
494
- initializeShadeRoot({
495
- injector,
496
- rootElement,
497
- jsxElement: <CommandPaletteSuggestionList manager={manager} />,
498
- })
473
+ await usingAsync(createManager(), async (manager) => {
474
+ manager.isOpened.setValue(false)
475
+ const rootElement = document.getElementById('root') as HTMLDivElement
499
476
 
500
- await sleepAsync(50)
477
+ initializeShadeRoot({
478
+ injector,
479
+ rootElement,
480
+ jsxElement: <CommandPaletteSuggestionList manager={manager} />,
481
+ })
501
482
 
502
- manager.isOpened.setValue(true)
503
- await sleepAsync(50)
483
+ await sleepAsync(50)
504
484
 
505
- const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
506
- const container = component?.querySelector('.suggestion-items-container') as HTMLElement
507
- expect(container?.style.zIndex).toBe('1')
485
+ manager.isOpened.setValue(true)
486
+ await sleepAsync(50)
508
487
 
509
- manager.isOpened.setValue(false)
510
- await sleepAsync(50)
488
+ const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
489
+ const container = component?.querySelector('.suggestion-items-container') as HTMLElement
490
+ expect(container?.style.zIndex).toBe('1')
511
491
 
512
- expect(container?.style.zIndex).toBe('-1')
492
+ manager.isOpened.setValue(false)
493
+ await sleepAsync(50)
513
494
 
514
- manager[Symbol.dispose]()
495
+ expect(container?.style.zIndex).toBe('-1')
496
+ })
515
497
  })
516
498
  })
517
499
  })