@astryxdesign/core 0.7.3 → 0.7.4-canary.3f6ea7d
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/dist/BottomSheet/BottomSheet.d.ts +18 -6
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +268 -58
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +41 -12
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +294 -165
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +51 -1
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcherContext.js +13 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +7 -11
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +46 -7
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +6 -1
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +12 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +6 -1
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +6 -1
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +9 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +6 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +6 -1
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +9 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +6 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +6 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +6 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +6 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +6 -1
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +9 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +9 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +7 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +9 -1
- package/dist/astryx.css +2 -0
- package/dist/hooks/useBusyAnnouncement.d.ts +22 -0
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -0
- package/dist/hooks/useBusyAnnouncement.js +87 -0
- package/dist/hooks/useMenuPress.d.ts +2 -2
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +5 -1
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +7 -2
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +1 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +1 -0
- package/locales/en.json +6 -2
- package/locales/pseudo.json +3 -0
- package/package.json +4 -4
- package/src/BottomSheet/BottomSheet.doc.mjs +2 -2
- package/src/BottomSheet/BottomSheet.spec.md +2 -5
- package/src/BottomSheet/BottomSheet.tsx +260 -47
- package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +4 -2
- package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +11 -10
- package/src/BottomSheet/BottomSheetSwitcher.spec.md +28 -35
- package/src/BottomSheet/BottomSheetSwitcher.test.tsx +830 -48
- package/src/BottomSheet/BottomSheetSwitcher.tsx +396 -215
- package/src/BottomSheet/BottomSheetSwitcherContext.ts +57 -2
- package/src/Carousel/Carousel.test.tsx +8 -12
- package/src/Carousel/Carousel.tsx +6 -13
- package/src/Chat/ChatComposerInput.test.tsx +167 -1
- package/src/Chat/useTriggerMenu.tsx +55 -6
- package/src/ComplexSelector/ComplexSelector.tsx +5 -1
- package/src/ContextMenu/ContextMenu.test.tsx +34 -0
- package/src/ContextMenu/ContextMenu.tsx +13 -1
- package/src/DateInput/DateInput.tsx +5 -1
- package/src/DateInput/DateInputTouch.test.tsx +45 -0
- package/src/DateInput/NativeDateField.test.tsx +10 -2
- package/src/DateInput/NativeDateField.tsx +5 -1
- package/src/DateInput/TouchDateField.tsx +14 -2
- package/src/DateRangeInput/DateRangeInput.tsx +5 -1
- package/src/DateTimeInput/DateTimeInput.tsx +5 -1
- package/src/DateTimeInput/TouchDateTimeField.tsx +14 -2
- package/src/MultiSelector/MultiSelector.test.tsx +18 -4
- package/src/MultiSelector/MultiSelector.tsx +5 -1
- package/src/ProgressBar/ProgressBar.test.tsx +4 -21
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +114 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.known-failures.ts +12 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.renders.tsx +38 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.states.ts +123 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.test.tsx +107 -0
- package/src/Selector/Selector.test.tsx +22 -5
- package/src/Selector/Selector.tsx +5 -1
- package/src/TextArea/TextArea.test.tsx +9 -1
- package/src/TextArea/TextArea.tsx +5 -1
- package/src/TextInput/TextInput.tsx +5 -1
- package/src/TimeInput/TimeInput.tsx +5 -1
- package/src/TimeInput/TouchTimeField.tsx +12 -2
- package/src/Tokenizer/Tokenizer.test.tsx +17 -12
- package/src/Tokenizer/Tokenizer.tsx +10 -1
- package/src/Typeahead/BaseTypeahead.tsx +14 -1
- package/src/Typeahead/Typeahead.test.tsx +32 -41
- package/src/Typeahead/Typeahead.tsx +10 -1
- package/src/__tests__/BusyOwnerAnnouncement.test.tsx +470 -0
- package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +50 -0
- package/src/hooks/useBusyAnnouncement.ts +100 -0
- package/src/hooks/useMenuPress.test.tsx +27 -1
- package/src/hooks/useMenuPress.ts +12 -3
- package/src/hooks/useTypeahead.test.tsx +42 -1
- package/src/hooks/useTypeahead.ts +7 -2
- package/src/i18n/generated-locales/en.generated.ts +1 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
|
|
13
|
-
import {
|
|
13
|
+
import {Activity, type ReactNode} from 'react';
|
|
14
|
+
import {render, renderHook} from '@testing-library/react';
|
|
14
15
|
import {useTypeahead} from './useTypeahead';
|
|
15
16
|
|
|
16
17
|
const LABELS = ['Apple', 'Apricot', 'Banana', 'Cherry'] as const;
|
|
@@ -86,6 +87,46 @@ describe('useTypeahead', () => {
|
|
|
86
87
|
expect(onMatch).toHaveBeenLastCalledWith(2);
|
|
87
88
|
});
|
|
88
89
|
|
|
90
|
+
it('clears the pending buffer reset when the component unmounts', () => {
|
|
91
|
+
const {result, unmount} = renderHook(() =>
|
|
92
|
+
useTypeahead({getItemLabels: () => LABELS, onMatch: vi.fn()}),
|
|
93
|
+
);
|
|
94
|
+
result.current.onKeyDown(key('a'));
|
|
95
|
+
expect(vi.getTimerCount()).toBe(1);
|
|
96
|
+
unmount();
|
|
97
|
+
expect(vi.getTimerCount()).toBe(0);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('empties the buffer when an Activity boundary hides the collection', () => {
|
|
101
|
+
const latest: {api: ReturnType<typeof useTypeahead> | null} = {api: null};
|
|
102
|
+
function Probe(): ReactNode {
|
|
103
|
+
latest.api = useTypeahead({
|
|
104
|
+
getItemLabels: () => LABELS,
|
|
105
|
+
onMatch: vi.fn(),
|
|
106
|
+
});
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const {rerender} = render(
|
|
110
|
+
<Activity mode="visible">
|
|
111
|
+
<Probe />
|
|
112
|
+
</Activity>,
|
|
113
|
+
);
|
|
114
|
+
latest.api?.onKeyDown(key('a'));
|
|
115
|
+
rerender(
|
|
116
|
+
<Activity mode="hidden">
|
|
117
|
+
<Probe />
|
|
118
|
+
</Activity>,
|
|
119
|
+
);
|
|
120
|
+
expect(vi.getTimerCount()).toBe(0);
|
|
121
|
+
rerender(
|
|
122
|
+
<Activity mode="visible">
|
|
123
|
+
<Probe />
|
|
124
|
+
</Activity>,
|
|
125
|
+
);
|
|
126
|
+
// The typed prefix went with the hide, so a bare Space is not typeahead.
|
|
127
|
+
expect(latest.api?.onKeyDown(key(' '))).toBe(false);
|
|
128
|
+
});
|
|
129
|
+
|
|
89
130
|
it('skips disabled items', () => {
|
|
90
131
|
const {onMatch, api} = setup({disabledIndices: [0]}); // Apple disabled
|
|
91
132
|
api.onKeyDown(key('a'));
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useTypeahead.ts
|
|
7
|
-
* @input Uses React useCallback/useRef
|
|
7
|
+
* @input Uses React useCallback/useEffect/useRef
|
|
8
8
|
* @output Exports useTypeahead hook for first-character (type-to-focus) search
|
|
9
9
|
* @position Core hook; adds APG typeahead to menus, listboxes, and other
|
|
10
10
|
* collections. Composes with useListFocus/useGridFocus (or any collection)
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* - /packages/core/src/hooks/index.ts
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import {useCallback, useRef} from 'react';
|
|
17
|
+
import {useCallback, useEffect, useRef} from 'react';
|
|
18
18
|
|
|
19
19
|
export interface UseTypeaheadOptions {
|
|
20
20
|
/**
|
|
@@ -135,6 +135,11 @@ export function useTypeahead(options: UseTypeaheadOptions): UseTypeaheadReturn {
|
|
|
135
135
|
}
|
|
136
136
|
}, []);
|
|
137
137
|
|
|
138
|
+
// A collection that unmounts, or that an `<Activity>` boundary hides,
|
|
139
|
+
// mid-typing leaves no reset timer running and comes back with an empty
|
|
140
|
+
// buffer, as the reset would have left it.
|
|
141
|
+
useEffect(() => reset, [reset]);
|
|
142
|
+
|
|
138
143
|
const scheduleReset = useCallback(() => {
|
|
139
144
|
if (timeoutRef.current) {
|
|
140
145
|
clearTimeout(timeoutRef.current);
|
|
@@ -340,6 +340,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
|
|
|
340
340
|
'@astryx.chatToolCalls.status.complete': 'Complete',
|
|
341
341
|
'@astryx.chatToolCalls.status.error': 'Failed',
|
|
342
342
|
'@astryx.chatToolCalls.groupLabel': '{count} tool calls',
|
|
343
|
+
'@astryx.chatTriggerMenu.searching': 'Searching…',
|
|
343
344
|
'@astryx.chatTriggerMenu.suggestions': 'Suggestions',
|
|
344
345
|
'@astryx.citation.label': 'Citation {number}: {title}',
|
|
345
346
|
'@astryx.codeBlock.copied': 'Copied',
|
|
@@ -347,6 +347,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
|
|
|
347
347
|
'@astryx.chatToolCalls.status.complete': '⟦Çóɱþłéţé⟧',
|
|
348
348
|
'@astryx.chatToolCalls.status.error': '⟦Ƒàíłéð⟧',
|
|
349
349
|
'@astryx.chatToolCalls.groupLabel': '⟦{count} ţóół çàłłš⟧',
|
|
350
|
+
'@astryx.chatTriggerMenu.searching': '⟦Šéàřçĥíñĝ…⟧',
|
|
350
351
|
'@astryx.chatTriggerMenu.suggestions': '⟦Šúĝĝéšţíóñš⟧',
|
|
351
352
|
'@astryx.citation.label': '⟦Çíţàţíóñ {number}: {title}⟧',
|
|
352
353
|
'@astryx.codeBlock.copied': '⟦Çóþíéð⟧',
|