@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.
- package/CHANGELOG.md +13 -0
- package/esm/components/command-palette/command-palette-input.spec.js +148 -148
- package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +258 -258
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/context-menu/context-menu-manager.spec.js +211 -217
- package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -1
- package/esm/components/data-grid/body.spec.js +173 -173
- package/esm/components/data-grid/body.spec.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +39 -130
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/services/click-away-service.spec.js +14 -12
- package/esm/services/click-away-service.spec.js.map +1 -1
- package/esm/services/list-service.spec.js +170 -141
- package/esm/services/list-service.spec.js.map +1 -1
- package/esm/services/tree-service.spec.js +190 -159
- package/esm/services/tree-service.spec.js.map +1 -1
- package/package.json +7 -8
- package/src/components/command-palette/command-palette-input.spec.tsx +183 -194
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +303 -321
- package/src/components/context-menu/context-menu-manager.spec.ts +213 -258
- package/src/components/data-grid/body.spec.tsx +266 -276
- package/src/components/data-grid/data-grid.spec.tsx +137 -232
- package/src/services/click-away-service.spec.ts +14 -16
- package/src/services/list-service.spec.ts +170 -172
- 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
|
-
|
|
60
|
-
|
|
59
|
+
await usingAsync(createManager(), async (manager) => {
|
|
60
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
await sleepAsync(50)
|
|
62
|
+
initializeShadeRoot({
|
|
63
|
+
injector,
|
|
64
|
+
rootElement,
|
|
65
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
66
|
+
})
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
expect(component).not.toBeNull()
|
|
68
|
+
await sleepAsync(50)
|
|
72
69
|
|
|
73
|
-
|
|
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
|
-
|
|
80
|
-
|
|
78
|
+
await usingAsync(createManager(), async (manager) => {
|
|
79
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
81
80
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
initializeShadeRoot({
|
|
82
|
+
injector,
|
|
83
|
+
rootElement,
|
|
84
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
85
|
+
})
|
|
87
86
|
|
|
88
|
-
|
|
87
|
+
await sleepAsync(50)
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
102
|
+
initializeShadeRoot({
|
|
103
|
+
injector,
|
|
104
|
+
rootElement,
|
|
105
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
106
|
+
})
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
const items = component?.querySelectorAll('.suggestion-item')
|
|
114
|
-
expect(items?.length).toBe(2)
|
|
108
|
+
await sleepAsync(50)
|
|
115
109
|
|
|
116
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
123
|
+
initializeShadeRoot({
|
|
124
|
+
injector,
|
|
125
|
+
rootElement,
|
|
126
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
127
|
+
})
|
|
133
128
|
|
|
134
|
-
|
|
135
|
-
const item = component?.querySelector('.suggestion-item')
|
|
136
|
-
expect(item?.textContent).toContain('Test Command')
|
|
129
|
+
await sleepAsync(50)
|
|
137
130
|
|
|
138
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
195
|
+
initializeShadeRoot({
|
|
196
|
+
injector,
|
|
197
|
+
rootElement,
|
|
198
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
199
|
+
})
|
|
208
200
|
|
|
209
|
-
|
|
201
|
+
await sleepAsync(50)
|
|
210
202
|
|
|
211
|
-
|
|
212
|
-
const item = component?.querySelector('.suggestion-item') as HTMLElement
|
|
213
|
-
item?.click()
|
|
203
|
+
const selectSpy = vi.spyOn(manager, 'selectSuggestion')
|
|
214
204
|
|
|
215
|
-
|
|
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
|
-
|
|
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
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
|
|
222
|
+
initializeShadeRoot({
|
|
223
|
+
injector,
|
|
224
|
+
rootElement,
|
|
225
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
226
|
+
})
|
|
236
227
|
|
|
237
|
-
|
|
228
|
+
await sleepAsync(50)
|
|
238
229
|
|
|
239
|
-
|
|
240
|
-
const item = component?.querySelector('.suggestion-item') as HTMLElement
|
|
241
|
-
item?.click()
|
|
230
|
+
const selectSpy = vi.spyOn(manager, 'selectSuggestion')
|
|
242
231
|
|
|
243
|
-
|
|
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
|
-
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
310
|
+
initializeShadeRoot({
|
|
311
|
+
injector,
|
|
312
|
+
rootElement,
|
|
313
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
314
|
+
})
|
|
327
315
|
|
|
328
|
-
|
|
329
|
-
await sleepAsync(50)
|
|
316
|
+
await sleepAsync(50)
|
|
330
317
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
expect(container?.style.display).toBe('initial')
|
|
318
|
+
manager.isOpened.setValue(true)
|
|
319
|
+
await sleepAsync(50)
|
|
334
320
|
|
|
335
|
-
|
|
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
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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
|
-
|
|
334
|
+
initializeShadeRoot({
|
|
335
|
+
injector,
|
|
336
|
+
rootElement,
|
|
337
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
338
|
+
})
|
|
352
339
|
|
|
353
|
-
|
|
354
|
-
await sleepAsync(50)
|
|
340
|
+
await sleepAsync(50)
|
|
355
341
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
expect(container?.style.display).toBe('none')
|
|
342
|
+
manager.isOpened.setValue(false)
|
|
343
|
+
await sleepAsync(50)
|
|
359
344
|
|
|
360
|
-
|
|
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
|
-
|
|
367
|
-
|
|
368
|
-
|
|
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
|
-
|
|
358
|
+
initializeShadeRoot({
|
|
359
|
+
injector,
|
|
360
|
+
rootElement,
|
|
361
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
362
|
+
})
|
|
377
363
|
|
|
378
|
-
|
|
379
|
-
const items = component?.querySelectorAll('.suggestion-item')
|
|
380
|
-
expect(items?.length).toBe(0)
|
|
364
|
+
await sleepAsync(50)
|
|
381
365
|
|
|
382
|
-
|
|
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
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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
|
-
|
|
435
|
-
|
|
419
|
+
await usingAsync(createManager(), async (manager) => {
|
|
420
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
436
421
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
422
|
+
initializeShadeRoot({
|
|
423
|
+
injector,
|
|
424
|
+
rootElement,
|
|
425
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
426
|
+
})
|
|
442
427
|
|
|
443
|
-
|
|
428
|
+
await sleepAsync(50)
|
|
444
429
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
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
|
-
|
|
450
|
-
|
|
451
|
-
|
|
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
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
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
|
-
|
|
491
|
-
|
|
492
|
-
|
|
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
|
-
|
|
477
|
+
initializeShadeRoot({
|
|
478
|
+
injector,
|
|
479
|
+
rootElement,
|
|
480
|
+
jsxElement: <CommandPaletteSuggestionList manager={manager} />,
|
|
481
|
+
})
|
|
501
482
|
|
|
502
|
-
|
|
503
|
-
await sleepAsync(50)
|
|
483
|
+
await sleepAsync(50)
|
|
504
484
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
expect(container?.style.zIndex).toBe('1')
|
|
485
|
+
manager.isOpened.setValue(true)
|
|
486
|
+
await sleepAsync(50)
|
|
508
487
|
|
|
509
|
-
|
|
510
|
-
|
|
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
|
-
|
|
492
|
+
manager.isOpened.setValue(false)
|
|
493
|
+
await sleepAsync(50)
|
|
513
494
|
|
|
514
|
-
|
|
495
|
+
expect(container?.style.zIndex).toBe('-1')
|
|
496
|
+
})
|
|
515
497
|
})
|
|
516
498
|
})
|
|
517
499
|
})
|