@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
|
@@ -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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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
|
});
|