@primer/components 31.0.2-rc.c7dafefb → 31.2.0-rc.25d7c83f
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/.storybook/main.js +7 -9
- package/.storybook/preview.js +5 -1
- package/CHANGELOG.md +23 -1
- package/dist/browser.esm.js +623 -620
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +164 -161
- package/dist/browser.umd.js.map +1 -1
- package/docs/content/ActionList2.mdx +354 -0
- package/docs/content/FilterList.md +2 -2
- package/docs/content/TextInputWithTokens.mdx +114 -0
- package/docs/content/getting-started.md +1 -1
- package/docs/content/theming.md +23 -0
- package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +1 -3
- package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +1 -1
- package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
- package/lib/ActionList/Header.js +1 -1
- package/lib/ActionList2/Description.d.ts +12 -0
- package/lib/ActionList2/Description.js +53 -0
- package/lib/ActionList2/Divider.d.ts +5 -0
- package/lib/ActionList2/Divider.js +35 -0
- package/lib/ActionList2/Group.d.ts +11 -0
- package/lib/ActionList2/Group.js +57 -0
- package/lib/ActionList2/Header.d.ts +26 -0
- package/lib/ActionList2/Header.js +55 -0
- package/lib/ActionList2/Item.d.ts +63 -0
- package/lib/ActionList2/Item.js +234 -0
- package/lib/ActionList2/LinkItem.d.ts +17 -0
- package/lib/ActionList2/LinkItem.js +57 -0
- package/lib/ActionList2/List.d.ts +26 -0
- package/lib/ActionList2/List.js +59 -0
- package/lib/ActionList2/Selection.d.ts +5 -0
- package/lib/ActionList2/Selection.js +70 -0
- package/lib/ActionList2/Visuals.d.ts +9 -0
- package/lib/ActionList2/Visuals.js +90 -0
- package/lib/ActionList2/index.d.ts +36 -0
- package/lib/ActionList2/index.js +47 -0
- package/lib/Autocomplete/Autocomplete.d.ts +4 -4
- package/lib/Autocomplete/AutocompleteInput.d.ts +4 -4
- package/lib/Button/Button.d.ts +5 -5
- package/lib/Button/ButtonBase.d.ts +1 -1
- package/lib/Button/ButtonClose.d.ts +3 -3
- package/lib/Button/ButtonDanger.d.ts +5 -5
- package/lib/Button/ButtonInvisible.d.ts +5 -5
- package/lib/Button/ButtonOutline.d.ts +5 -5
- package/lib/Button/ButtonPrimary.d.ts +5 -5
- package/lib/CircleBadge.d.ts +2 -2
- package/lib/CircleOcticon.d.ts +4 -4
- package/lib/Dialog.d.ts +4 -4
- package/lib/Dropdown.d.ts +16 -16
- package/lib/DropdownMenu/DropdownButton.d.ts +6 -6
- package/lib/FilterList.d.ts +3 -3
- package/lib/Flash.d.ts +1 -1
- package/lib/Label.d.ts +1 -1
- package/lib/Overlay.js +3 -1
- package/lib/Portal/Portal.js +3 -2
- package/lib/Position.d.ts +4 -4
- package/lib/ProgressBar.d.ts +1 -1
- package/lib/SelectMenu/SelectMenu.d.ts +24 -24
- package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib/TextInputWithTokens.d.ts +8 -4
- package/lib/TextInputWithTokens.js +61 -8
- package/lib/Timeline.d.ts +4 -4
- package/lib/Token/AvatarToken.d.ts +1 -1
- package/lib/Token/IssueLabelToken.d.ts +1 -1
- package/lib/Token/Token.d.ts +1 -1
- package/lib/_TextInputWrapper.d.ts +1 -1
- package/lib/_TextInputWrapper.js +2 -2
- package/lib/__tests__/ActionList2.test.d.ts +1 -0
- package/lib/__tests__/ActionList2.test.js +53 -0
- package/lib/__tests__/AnchoredOverlay.test.js +4 -2
- package/lib/__tests__/KeyPaths.types.test.d.ts +11 -0
- package/lib/__tests__/KeyPaths.types.test.js +10 -0
- package/lib/__tests__/TextInputWithTokens.test.js +138 -7
- package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
- package/lib/__tests__/utils/createSlots.test.js +75 -0
- package/lib/hooks/useAnchoredPosition.js +3 -2
- package/lib/hooks/useCombinedRefs.d.ts +2 -2
- package/lib/hooks/useCombinedRefs.js +4 -6
- package/lib/hooks/useResizeObserver.js +2 -2
- package/lib/stories/ActionList2.stories.js +907 -0
- package/lib/stories/TextInput.stories.js +144 -0
- package/lib/stories/TextInputWithTokens.stories.js +18 -1
- package/lib/stories/Token.stories.js +19 -2
- package/lib/sx.d.ts +10 -2
- package/lib/sx.js +8 -0
- package/lib/theme-preval.js +81 -2
- package/lib/theme.d.ts +78 -0
- package/lib/theme.js +3 -1
- package/lib/unreleased.d.ts +7 -0
- package/lib/unreleased.js +18 -0
- package/lib/utils/create-slots.d.ts +17 -0
- package/lib/utils/create-slots.js +105 -0
- package/lib/utils/testing.d.ts +14 -1
- package/lib/utils/types/KeyPaths.d.ts +3 -0
- package/lib/utils/types/KeyPaths.js +1 -0
- package/lib/utils/use-force-update.d.ts +1 -0
- package/lib/utils/use-force-update.js +19 -0
- package/lib/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/lib/utils/useIsomorphicLayoutEffect.js +12 -0
- package/lib-esm/ActionList/Header.js +1 -1
- package/lib-esm/ActionList2/Description.d.ts +12 -0
- package/lib-esm/ActionList2/Description.js +37 -0
- package/lib-esm/ActionList2/Divider.d.ts +5 -0
- package/lib-esm/ActionList2/Divider.js +23 -0
- package/lib-esm/ActionList2/Group.d.ts +11 -0
- package/lib-esm/ActionList2/Group.js +40 -0
- package/lib-esm/ActionList2/Header.d.ts +26 -0
- package/lib-esm/ActionList2/Header.js +44 -0
- package/lib-esm/ActionList2/Item.d.ts +63 -0
- package/lib-esm/ActionList2/Item.js +201 -0
- package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
- package/lib-esm/ActionList2/LinkItem.js +43 -0
- package/lib-esm/ActionList2/List.d.ts +26 -0
- package/lib-esm/ActionList2/List.js +37 -0
- package/lib-esm/ActionList2/Selection.d.ts +5 -0
- package/lib-esm/ActionList2/Selection.js +52 -0
- package/lib-esm/ActionList2/Visuals.d.ts +9 -0
- package/lib-esm/ActionList2/Visuals.js +68 -0
- package/lib-esm/ActionList2/index.d.ts +36 -0
- package/lib-esm/ActionList2/index.js +33 -0
- package/lib-esm/Autocomplete/Autocomplete.d.ts +4 -4
- package/lib-esm/Autocomplete/AutocompleteInput.d.ts +4 -4
- package/lib-esm/Button/Button.d.ts +5 -5
- package/lib-esm/Button/ButtonBase.d.ts +1 -1
- package/lib-esm/Button/ButtonClose.d.ts +3 -3
- package/lib-esm/Button/ButtonDanger.d.ts +5 -5
- package/lib-esm/Button/ButtonInvisible.d.ts +5 -5
- package/lib-esm/Button/ButtonOutline.d.ts +5 -5
- package/lib-esm/Button/ButtonPrimary.d.ts +5 -5
- package/lib-esm/CircleBadge.d.ts +2 -2
- package/lib-esm/CircleOcticon.d.ts +4 -4
- package/lib-esm/Dialog.d.ts +4 -4
- package/lib-esm/Dropdown.d.ts +16 -16
- package/lib-esm/DropdownMenu/DropdownButton.d.ts +6 -6
- package/lib-esm/FilterList.d.ts +3 -3
- package/lib-esm/Flash.d.ts +1 -1
- package/lib-esm/Label.d.ts +1 -1
- package/lib-esm/Overlay.js +2 -1
- package/lib-esm/Portal/Portal.js +2 -1
- package/lib-esm/Position.d.ts +4 -4
- package/lib-esm/ProgressBar.d.ts +1 -1
- package/lib-esm/SelectMenu/SelectMenu.d.ts +24 -24
- package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib-esm/TextInputWithTokens.d.ts +8 -4
- package/lib-esm/TextInputWithTokens.js +60 -8
- package/lib-esm/Timeline.d.ts +4 -4
- package/lib-esm/Token/AvatarToken.d.ts +1 -1
- package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
- package/lib-esm/Token/Token.d.ts +1 -1
- package/lib-esm/_TextInputWrapper.d.ts +1 -1
- package/lib-esm/_TextInputWrapper.js +2 -2
- package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList2.test.js +41 -0
- package/lib-esm/__tests__/AnchoredOverlay.test.js +4 -2
- package/lib-esm/__tests__/KeyPaths.types.test.d.ts +11 -0
- package/lib-esm/__tests__/KeyPaths.types.test.js +3 -0
- package/lib-esm/__tests__/TextInputWithTokens.test.js +132 -8
- package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
- package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
- package/lib-esm/hooks/useAnchoredPosition.js +2 -1
- package/lib-esm/hooks/useCombinedRefs.d.ts +2 -2
- package/lib-esm/hooks/useCombinedRefs.js +3 -2
- package/lib-esm/hooks/useResizeObserver.js +2 -2
- package/lib-esm/stories/ActionList2.stories.js +796 -0
- package/lib-esm/stories/TextInput.stories.js +117 -0
- package/lib-esm/stories/TextInputWithTokens.stories.js +14 -0
- package/lib-esm/stories/Token.stories.js +14 -1
- package/lib-esm/sx.d.ts +10 -2
- package/lib-esm/sx.js +3 -1
- package/lib-esm/theme-preval.js +81 -2
- package/lib-esm/theme.d.ts +78 -0
- package/lib-esm/theme.js +2 -1
- package/lib-esm/unreleased.d.ts +7 -0
- package/lib-esm/unreleased.js +8 -0
- package/lib-esm/utils/create-slots.d.ts +17 -0
- package/lib-esm/utils/create-slots.js +84 -0
- package/lib-esm/utils/testing.d.ts +14 -1
- package/lib-esm/utils/types/KeyPaths.d.ts +3 -0
- package/lib-esm/utils/types/KeyPaths.js +1 -0
- package/lib-esm/utils/use-force-update.d.ts +1 -0
- package/lib-esm/utils/use-force-update.js +6 -0
- package/lib-esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/lib-esm/utils/useIsomorphicLayoutEffect.js +3 -0
- package/migrating.md +1 -1
- package/package-lock.json +38098 -45
- package/package.json +7 -3
- package/script/build +2 -0
- package/src/ActionList/Header.tsx +1 -1
- package/src/ActionList2/Description.tsx +49 -0
- package/src/ActionList2/Divider.tsx +24 -0
- package/src/ActionList2/Group.tsx +34 -0
- package/src/ActionList2/Header.tsx +58 -0
- package/src/ActionList2/Item.tsx +223 -0
- package/src/ActionList2/LinkItem.tsx +49 -0
- package/src/ActionList2/List.tsx +55 -0
- package/src/ActionList2/Selection.tsx +40 -0
- package/src/ActionList2/Visuals.tsx +76 -0
- package/src/ActionList2/index.ts +39 -0
- package/src/Overlay.tsx +2 -1
- package/src/Portal/Portal.tsx +2 -1
- package/src/TextInputWithTokens.tsx +64 -8
- package/src/_TextInputWrapper.tsx +8 -0
- package/src/__tests__/ActionList2.test.tsx +47 -0
- package/src/__tests__/AnchoredOverlay.test.tsx +2 -2
- package/src/__tests__/KeyPaths.types.test.ts +14 -0
- package/src/__tests__/TextInputWithTokens.test.tsx +123 -1
- package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
- package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +35 -135
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +7 -0
- package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +6 -0
- package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +463 -0
- package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
- package/src/__tests__/utils/createSlots.test.tsx +74 -0
- package/src/hooks/useAnchoredPosition.ts +2 -1
- package/src/hooks/useCombinedRefs.ts +3 -3
- package/src/hooks/useResizeObserver.ts +2 -2
- package/src/stories/ActionList2.stories.tsx +1290 -0
- package/src/stories/Button.stories.tsx +1 -1
- package/src/stories/TextInput.stories.tsx +113 -0
- package/src/stories/TextInputWithTokens.stories.tsx +9 -0
- package/src/stories/Token.stories.tsx +12 -1
- package/src/sx.ts +17 -2
- package/src/theme-preval.js +1 -0
- package/src/theme.ts +86 -0
- package/src/unreleased.ts +9 -0
- package/src/utils/create-slots.tsx +96 -0
- package/src/utils/types/KeyPaths.ts +10 -0
- package/src/utils/use-force-update.ts +7 -0
- package/src/utils/useIsomorphicLayoutEffect.ts +10 -0
- package/stats.html +1 -1
@@ -60,6 +60,7 @@ const LabelledTextInputWithTokens = ({
|
|
60
60
|
id: "tokenInput"
|
61
61
|
}, rest)));
|
62
62
|
|
63
|
+
jest.useFakeTimers();
|
63
64
|
describe('TextInputWithTokens', () => {
|
64
65
|
it('renders without tokens', () => {
|
65
66
|
const onRemoveMock = jest.fn();
|
@@ -127,6 +128,14 @@ describe('TextInputWithTokens', () => {
|
|
127
128
|
onTokenRemove: onRemoveMock
|
128
129
|
}))).toMatchSnapshot();
|
129
130
|
});
|
131
|
+
it('renders a truncated set of tokens', () => {
|
132
|
+
const onRemoveMock = jest.fn();
|
133
|
+
expect((0, _testing.render)( /*#__PURE__*/_react.default.createElement(_TextInputWithTokens.default, {
|
134
|
+
tokens: mockTokens,
|
135
|
+
onTokenRemove: onRemoveMock,
|
136
|
+
visibleTokenCount: 2
|
137
|
+
}))).toMatchSnapshot();
|
138
|
+
});
|
130
139
|
it('focuses the previous token when keying ArrowLeft', () => {
|
131
140
|
var _document$activeEleme, _document$activeEleme2;
|
132
141
|
|
@@ -250,8 +259,130 @@ describe('TextInputWithTokens', () => {
|
|
250
259
|
expect((_document$activeEleme8 = document.activeElement) === null || _document$activeEleme8 === void 0 ? void 0 : _document$activeEleme8.id).not.toEqual(lastTokenNode.id);
|
251
260
|
expect((_document$activeEleme9 = document.activeElement) === null || _document$activeEleme9 === void 0 ? void 0 : _document$activeEleme9.id).toEqual(inputNode.id);
|
252
261
|
});
|
262
|
+
it('does not focus the input when clicking a token', () => {
|
263
|
+
var _document$activeEleme10;
|
264
|
+
|
265
|
+
const onRemoveMock = jest.fn();
|
266
|
+
const {
|
267
|
+
getByLabelText,
|
268
|
+
getByText
|
269
|
+
} = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(LabelledTextInputWithTokens, {
|
270
|
+
tokens: mockTokens,
|
271
|
+
onTokenRemove: onRemoveMock,
|
272
|
+
visibleTokenCount: 2
|
273
|
+
}));
|
274
|
+
const inputNode = getByLabelText('Tokens');
|
275
|
+
const tokenNode = getByText(mockTokens[0].text);
|
276
|
+
expect(document.activeElement).not.toEqual(inputNode.id);
|
277
|
+
|
278
|
+
_react2.fireEvent.click(tokenNode);
|
279
|
+
|
280
|
+
expect((_document$activeEleme10 = document.activeElement) === null || _document$activeEleme10 === void 0 ? void 0 : _document$activeEleme10.id).not.toEqual(inputNode.id);
|
281
|
+
});
|
282
|
+
it('focuses the input when clicking somewhere in the component besides the tokens', () => {
|
283
|
+
var _document$activeEleme11;
|
284
|
+
|
285
|
+
const onRemoveMock = jest.fn();
|
286
|
+
const {
|
287
|
+
getByLabelText,
|
288
|
+
getByText
|
289
|
+
} = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(LabelledTextInputWithTokens, {
|
290
|
+
tokens: mockTokens,
|
291
|
+
onTokenRemove: onRemoveMock,
|
292
|
+
visibleTokenCount: 2
|
293
|
+
}));
|
294
|
+
const inputNode = getByLabelText('Tokens');
|
295
|
+
const truncatedTokenCount = getByText('+6');
|
296
|
+
expect(document.activeElement).not.toEqual(inputNode.id);
|
297
|
+
|
298
|
+
_react2.fireEvent.click(truncatedTokenCount);
|
299
|
+
|
300
|
+
expect((_document$activeEleme11 = document.activeElement) === null || _document$activeEleme11 === void 0 ? void 0 : _document$activeEleme11.id).toEqual(inputNode.id);
|
301
|
+
});
|
302
|
+
it('shows all tokens when the input is focused and hides them when it is blurred (when visibleTokenCount is set)', () => {
|
303
|
+
const onRemoveMock = jest.fn();
|
304
|
+
const visibleTokenCount = 2;
|
305
|
+
const {
|
306
|
+
getByLabelText,
|
307
|
+
getByText
|
308
|
+
} = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(LabelledTextInputWithTokens, {
|
309
|
+
tokens: mockTokens,
|
310
|
+
onTokenRemove: onRemoveMock,
|
311
|
+
visibleTokenCount: visibleTokenCount
|
312
|
+
}), /*#__PURE__*/_react.default.createElement("button", {
|
313
|
+
id: "focusableOutsideComponent"
|
314
|
+
}, "Focus me")));
|
315
|
+
const inputNode = getByLabelText('Tokens');
|
316
|
+
const focusableOutsideComponentNode = getByText('Focus me');
|
317
|
+
const allTokenLabels = mockTokens.map(token => token.text);
|
318
|
+
const truncatedTokenCountNode = getByText('+6');
|
319
|
+
(0, _react2.act)(() => {
|
320
|
+
jest.runAllTimers();
|
321
|
+
|
322
|
+
_react2.fireEvent.focus(inputNode);
|
323
|
+
});
|
324
|
+
setTimeout(() => {
|
325
|
+
for (const tokenLabel of allTokenLabels) {
|
326
|
+
const tokenNode = getByText(tokenLabel);
|
327
|
+
expect(tokenNode).toBeDefined();
|
328
|
+
}
|
329
|
+
}, 0);
|
330
|
+
(0, _react2.act)(() => {
|
331
|
+
jest.runAllTimers(); // onBlur isn't called on input unless we specifically fire the "blur" event
|
332
|
+
// eslint-disable-next-line github/no-blur
|
333
|
+
|
334
|
+
_react2.fireEvent.blur(inputNode);
|
335
|
+
|
336
|
+
_react2.fireEvent.focus(focusableOutsideComponentNode);
|
337
|
+
});
|
338
|
+
setTimeout(() => {
|
339
|
+
expect(truncatedTokenCountNode).toBeDefined();
|
340
|
+
|
341
|
+
for (const tokenLabel of allTokenLabels) {
|
342
|
+
const tokenNode = getByText(tokenLabel);
|
343
|
+
|
344
|
+
if (allTokenLabels.indexOf(tokenLabel) > visibleTokenCount) {
|
345
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
346
|
+
expect(tokenNode).toBeDefined();
|
347
|
+
} else {
|
348
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
349
|
+
expect(tokenNode).not.toBeDefined();
|
350
|
+
}
|
351
|
+
}
|
352
|
+
}, 0);
|
353
|
+
jest.useRealTimers();
|
354
|
+
});
|
355
|
+
it('does not hide tokens when blurring the input to focus within the component (when visibleTokenCount is set)', () => {
|
356
|
+
const onRemoveMock = jest.fn();
|
357
|
+
const visibleTokenCount = 2;
|
358
|
+
const {
|
359
|
+
getByLabelText,
|
360
|
+
getByText
|
361
|
+
} = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(LabelledTextInputWithTokens, {
|
362
|
+
tokens: mockTokens,
|
363
|
+
onTokenRemove: onRemoveMock,
|
364
|
+
visibleTokenCount: visibleTokenCount
|
365
|
+
}), /*#__PURE__*/_react.default.createElement("button", {
|
366
|
+
id: "focusableOutsideComponent"
|
367
|
+
}, "Focus me")));
|
368
|
+
const inputNode = getByLabelText('Tokens');
|
369
|
+
const firstTokenNode = getByText(mockTokens[visibleTokenCount - 1].text);
|
370
|
+
const allTokenLabels = mockTokens.map(token => token.text);
|
371
|
+
const truncatedTokenCountNode = getByText('+6');
|
372
|
+
(0, _react2.act)(() => {
|
373
|
+
_react2.fireEvent.focus(inputNode);
|
374
|
+
|
375
|
+
_react2.fireEvent.focus(firstTokenNode);
|
376
|
+
});
|
377
|
+
expect(truncatedTokenCountNode).toBeDefined();
|
378
|
+
|
379
|
+
for (const tokenLabel of allTokenLabels) {
|
380
|
+
const tokenNode = getByText(tokenLabel);
|
381
|
+
expect(tokenNode).toBeDefined();
|
382
|
+
}
|
383
|
+
});
|
253
384
|
it('focuses the first token when keying ArrowRight in the input', () => {
|
254
|
-
var _document$
|
385
|
+
var _document$activeEleme12, _document$activeEleme13;
|
255
386
|
|
256
387
|
const onRemoveMock = jest.fn();
|
257
388
|
const {
|
@@ -271,8 +402,8 @@ describe('TextInputWithTokens', () => {
|
|
271
402
|
key: 'ArrowRight'
|
272
403
|
});
|
273
404
|
|
274
|
-
expect((_document$
|
275
|
-
expect((_document$
|
405
|
+
expect((_document$activeEleme12 = document.activeElement) === null || _document$activeEleme12 === void 0 ? void 0 : _document$activeEleme12.id).not.toEqual(inputNode.id);
|
406
|
+
expect((_document$activeEleme13 = document.activeElement) === null || _document$activeEleme13 === void 0 ? void 0 : _document$activeEleme13.id).toEqual(firstTokenNode.id);
|
276
407
|
});
|
277
408
|
it('calls onTokenRemove on the last token when keying Backspace in an empty input', () => {
|
278
409
|
const onRemoveMock = jest.fn();
|
@@ -372,9 +503,9 @@ describe('TextInputWithTokens', () => {
|
|
372
503
|
|
373
504
|
jest.runAllTimers();
|
374
505
|
setTimeout(() => {
|
375
|
-
var _document$
|
506
|
+
var _document$activeEleme14;
|
376
507
|
|
377
|
-
expect((_document$
|
508
|
+
expect((_document$activeEleme14 = document.activeElement) === null || _document$activeEleme14 === void 0 ? void 0 : _document$activeEleme14.textContent).toBe(mockTokens[1].text);
|
378
509
|
}, 0);
|
379
510
|
jest.useRealTimers();
|
380
511
|
});
|
@@ -399,9 +530,9 @@ describe('TextInputWithTokens', () => {
|
|
399
530
|
|
400
531
|
jest.runAllTimers();
|
401
532
|
setTimeout(() => {
|
402
|
-
var _document$
|
533
|
+
var _document$activeEleme15;
|
403
534
|
|
404
|
-
expect((_document$
|
535
|
+
expect((_document$activeEleme15 = document.activeElement) === null || _document$activeEleme15 === void 0 ? void 0 : _document$activeEleme15.id).toBe(inputNode.id);
|
405
536
|
}, 0);
|
406
537
|
jest.useRealTimers();
|
407
538
|
});
|
@@ -0,0 +1 @@
|
|
1
|
+
import 'babel-polyfill';
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
4
|
+
|
5
|
+
require("babel-polyfill");
|
6
|
+
|
7
|
+
var _react2 = require("@testing-library/react");
|
8
|
+
|
9
|
+
var _createSlots = _interopRequireDefault(require("../../utils/create-slots"));
|
10
|
+
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
12
|
+
|
13
|
+
// setup a component with slots
|
14
|
+
const {
|
15
|
+
Slots,
|
16
|
+
Slot
|
17
|
+
} = (0, _createSlots.default)(['One', 'Two', 'Three']);
|
18
|
+
|
19
|
+
const ComponentWithSlots = ({
|
20
|
+
salutation,
|
21
|
+
children
|
22
|
+
}) => {
|
23
|
+
return /*#__PURE__*/_react.default.createElement(Slots, {
|
24
|
+
context: {
|
25
|
+
salutation
|
26
|
+
}
|
27
|
+
}, slots => /*#__PURE__*/_react.default.createElement("div", null, slots.One, /*#__PURE__*/_react.default.createElement("span", null, children, " ", slots.Two, " ", slots.Three)));
|
28
|
+
};
|
29
|
+
|
30
|
+
ComponentWithSlots.displayName = "ComponentWithSlots";
|
31
|
+
|
32
|
+
const SlotItem1 = ({
|
33
|
+
children
|
34
|
+
}) => /*#__PURE__*/_react.default.createElement(Slot, {
|
35
|
+
name: "One"
|
36
|
+
}, children);
|
37
|
+
|
38
|
+
SlotItem1.displayName = "SlotItem1";
|
39
|
+
|
40
|
+
const SlotItem2 = ({
|
41
|
+
children
|
42
|
+
}) => /*#__PURE__*/_react.default.createElement(Slot, {
|
43
|
+
name: "Two"
|
44
|
+
}, children);
|
45
|
+
|
46
|
+
SlotItem2.displayName = "SlotItem2";
|
47
|
+
|
48
|
+
const SlotItem3 = ({
|
49
|
+
children
|
50
|
+
}) => /*#__PURE__*/_react.default.createElement(Slot, {
|
51
|
+
name: "Three"
|
52
|
+
}, context => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, context.salutation, " ", children));
|
53
|
+
|
54
|
+
SlotItem3.displayName = "SlotItem3";
|
55
|
+
describe('ComponentWithSlots', () => {
|
56
|
+
it('renders all slots', async () => {
|
57
|
+
const component = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(ComponentWithSlots, null, /*#__PURE__*/_react.default.createElement(SlotItem1, null, "first"), /*#__PURE__*/_react.default.createElement(SlotItem2, null, "second"), "free form"));
|
58
|
+
await (0, _react2.waitFor)(() => component.getByText('first'));
|
59
|
+
expect(component.container).toMatchSnapshot();
|
60
|
+
});
|
61
|
+
it('renders without any slots', async () => {
|
62
|
+
const component = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(ComponentWithSlots, null, "free form"));
|
63
|
+
expect(component.container).toMatchSnapshot();
|
64
|
+
});
|
65
|
+
it('renders with just one slot', async () => {
|
66
|
+
const component = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(ComponentWithSlots, null, /*#__PURE__*/_react.default.createElement(SlotItem1, null, "first"), "free form"));
|
67
|
+
expect(component.container).toMatchSnapshot();
|
68
|
+
});
|
69
|
+
it('renders with context passed to children', async () => {
|
70
|
+
const component = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(ComponentWithSlots, {
|
71
|
+
salutation: "hi"
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(SlotItem3, null, "third"), "free form"));
|
73
|
+
expect(component.container).toMatchSnapshot();
|
74
|
+
});
|
75
|
+
});
|
@@ -13,6 +13,8 @@ var _useProvidedRefOrCreate = require("./useProvidedRefOrCreate");
|
|
13
13
|
|
14
14
|
var _useResizeObserver = require("./useResizeObserver");
|
15
15
|
|
16
|
+
var _useIsomorphicLayoutEffect = _interopRequireDefault(require("../utils/useIsomorphicLayoutEffect"));
|
17
|
+
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17
19
|
|
18
20
|
/**
|
@@ -39,8 +41,7 @@ function useAnchoredPosition(settings, dependencies = []) {
|
|
39
41
|
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
40
42
|
[floatingElementRef, anchorElementRef, ...dependencies]);
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
(0, _useIsomorphicLayoutEffect.default)(updatePosition, [updatePosition]);
|
44
45
|
(0, _useResizeObserver.useResizeObserver)(updatePosition);
|
45
46
|
return {
|
46
47
|
floatingElementRef,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
import { ForwardedRef } from 'react';
|
2
2
|
/**
|
3
3
|
* Creates a ref by combining multiple constituent refs. The ref returned by this hook
|
4
4
|
* should be passed as the ref for the element that needs to be shared. This is
|
@@ -7,4 +7,4 @@ import React, { ForwardedRef } from 'react';
|
|
7
7
|
* though, as it breaks encapsulation.
|
8
8
|
* @param refs
|
9
9
|
*/
|
10
|
-
export declare function useCombinedRefs<T>(...refs: (ForwardedRef<T> | null | undefined)[]):
|
10
|
+
export declare function useCombinedRefs<T>(...refs: (ForwardedRef<T> | null | undefined)[]): import("react").MutableRefObject<T | null>;
|
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.useCombinedRefs = useCombinedRefs;
|
7
7
|
|
8
|
-
var _react =
|
8
|
+
var _react = require("react");
|
9
9
|
|
10
|
-
|
10
|
+
var _useIsomorphicLayoutEffect = _interopRequireDefault(require("../utils/useIsomorphicLayoutEffect"));
|
11
11
|
|
12
|
-
function
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
13
|
|
14
14
|
/**
|
15
15
|
* Creates a ref by combining multiple constituent refs. The ref returned by this hook
|
@@ -21,8 +21,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
21
21
|
*/
|
22
22
|
function useCombinedRefs(...refs) {
|
23
23
|
const combinedRef = (0, _react.useRef)(null);
|
24
|
-
|
25
|
-
_react.default.useLayoutEffect(() => {
|
24
|
+
(0, _useIsomorphicLayoutEffect.default)(() => {
|
26
25
|
function setRefs(current = null) {
|
27
26
|
for (const ref of refs) {
|
28
27
|
if (!ref) {
|
@@ -44,6 +43,5 @@ function useCombinedRefs(...refs) {
|
|
44
43
|
setRefs(combinedRef.current);
|
45
44
|
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
46
45
|
}, [...refs, combinedRef.current]);
|
47
|
-
|
48
46
|
return combinedRef;
|
49
47
|
}
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.useResizeObserver = useResizeObserver;
|
7
7
|
|
8
|
-
var
|
8
|
+
var _useIsomorphicLayoutEffect = _interopRequireDefault(require("../utils/useIsomorphicLayoutEffect"));
|
9
9
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
11
|
|
12
12
|
function useResizeObserver(callback) {
|
13
|
-
|
13
|
+
(0, _useIsomorphicLayoutEffect.default)(() => {
|
14
14
|
const observer = new window.ResizeObserver(() => callback());
|
15
15
|
observer.observe(document.documentElement);
|
16
16
|
return () => {
|