@codecademy/brand 3.36.1 → 3.36.2-alpha.4249fc7d9c.0

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.
@@ -3,22 +3,70 @@ let workerPromise;
3
3
  const initErr = 'Search worker not initialized';
4
4
  export const searchWorker = {
5
5
  init() {
6
+ // eslint-disable-next-line no-console
7
+ console.log('[searchWorker.init] Initializing search worker');
6
8
  if (!workerPromise) {
9
+ // eslint-disable-next-line no-console
10
+ console.log('[searchWorker.init] Creating new worker promise');
7
11
  workerPromise = (async () => {
8
- // lazy load worker
9
- const {
10
- createSearchWorker
11
- } = await import('./worker');
12
- return createSearchWorker();
12
+ try {
13
+ // eslint-disable-next-line no-console
14
+ console.log('[searchWorker.init] Importing worker module');
15
+ // lazy load worker
16
+ const {
17
+ createSearchWorker
18
+ } = await import('./worker');
19
+ // eslint-disable-next-line no-console
20
+ console.log('[searchWorker.init] Worker module imported, creating worker');
21
+ const worker = createSearchWorker();
22
+ // eslint-disable-next-line no-console
23
+ console.log('[searchWorker.init] Worker created successfully');
24
+ return worker;
25
+ } catch (error) {
26
+ // eslint-disable-next-line no-console
27
+ console.error('[searchWorker.init] Error creating worker:', error);
28
+ throw error;
29
+ }
13
30
  })();
31
+ } else {
32
+ // eslint-disable-next-line no-console
33
+ console.log('[searchWorker.init] Worker already initialized');
14
34
  }
15
35
  },
16
36
  async autocomplete(query) {
37
+ // eslint-disable-next-line no-console
38
+ console.log('[searchWorker.autocomplete] Query:', query);
17
39
  if (!workerPromise) throw new Error(initErr);
18
- return (await workerPromise)(SearchAction.Autocomplete, query);
40
+ try {
41
+ const worker = await workerPromise;
42
+ // eslint-disable-next-line no-console
43
+ console.log('[searchWorker.autocomplete] Worker ready, calling with query:', query);
44
+ const result = await worker(SearchAction.Autocomplete, query);
45
+ // eslint-disable-next-line no-console
46
+ console.log('[searchWorker.autocomplete] Result received:', result);
47
+ return result;
48
+ } catch (error) {
49
+ // eslint-disable-next-line no-console
50
+ console.error('[searchWorker.autocomplete] Error:', error);
51
+ throw error;
52
+ }
19
53
  },
20
54
  async searchAsYouType(query) {
55
+ // eslint-disable-next-line no-console
56
+ console.log('[searchWorker.searchAsYouType] Query:', query);
21
57
  if (!workerPromise) throw new Error(initErr);
22
- return (await workerPromise)(SearchAction.SearchAsYouType, query);
58
+ try {
59
+ const worker = await workerPromise;
60
+ // eslint-disable-next-line no-console
61
+ console.log('[searchWorker.searchAsYouType] Worker ready, calling with query:', query);
62
+ const result = await worker(SearchAction.SearchAsYouType, query);
63
+ // eslint-disable-next-line no-console
64
+ console.log('[searchWorker.searchAsYouType] Result received:', result);
65
+ return result;
66
+ } catch (error) {
67
+ // eslint-disable-next-line no-console
68
+ console.error('[searchWorker.searchAsYouType] Error:', error);
69
+ throw error;
70
+ }
23
71
  }
24
72
  };
@@ -28,6 +28,9 @@ function getPortalOrigin() {
28
28
  // for standard envs, use portal app in the same env
29
29
  if (envs.some(s => `https://${s}.codecademy.com` === origin)) return origin;
30
30
 
31
+ // for PR envs (e.g. pr-40229-monolith.dev-eks.codecademy.com)
32
+ if (origin.includes('.dev-eks.codecademy.com')) return origin;
33
+
31
34
  // for local, use local portal-app, replace if origin port is monolith or le
32
35
  if (origin.includes('localhost')) return origin.replace(/:\d{4}/, ':3100');
33
36
 
@@ -35,15 +38,65 @@ function getPortalOrigin() {
35
38
  return 'https://staging.codecademy.com';
36
39
  }
37
40
  export function serializeSearchWorkerSrc() {
38
- const BASE_URL = `${getPortalOrigin()}/api/portal/search`;
39
- const fnAsStr = worker.toString().trim();
41
+ // eslint-disable-next-line no-console
42
+ console.log('[serializeSearchWorkerSrc] Starting serialization');
43
+ try {
44
+ // eslint-disable-next-line no-console
45
+ console.log('[serializeSearchWorkerSrc] Getting portal origin');
46
+ const BASE_URL = `${getPortalOrigin()}/api/portal/search`;
47
+ // eslint-disable-next-line no-console
48
+ console.log('[serializeSearchWorkerSrc] BASE_URL:', BASE_URL);
49
+
50
+ // eslint-disable-next-line no-console
51
+ console.log('[serializeSearchWorkerSrc] Converting worker function to string');
52
+ const fnAsStr = worker.toString().trim();
53
+ // eslint-disable-next-line no-console
54
+ console.log('[serializeSearchWorkerSrc] Worker function string length:', fnAsStr.length);
55
+ // eslint-disable-next-line no-console
56
+ console.log('[serializeSearchWorkerSrc] Full worker function:', fnAsStr);
57
+
58
+ // in a prod build, webpack will handle removing comments
40
59
 
41
- // in a prod build, webpack will handle removing comments
60
+ const startIndex = fnAsStr.indexOf('{');
61
+ // eslint-disable-next-line no-console
62
+ console.log('[serializeSearchWorkerSrc] Start index of first {:', startIndex);
63
+ const result = fnAsStr.slice(fnAsStr.indexOf('{') + 1, -1) // remove wrapping function, which may have been renamed by minification
64
+ .replaceAll(' ', '') // remove indentation
65
+ .replaceAll('{BASE_URL}', BASE_URL) // interpolate base url
66
+ .replaceAll('{SEARCH}', window.location.search); // interpolate search query
42
67
 
43
- return fnAsStr.slice(fnAsStr.indexOf('{') + 1, -1) // remove wrapping function, which may have been renamed by minification
44
- .replaceAll(' ', '') // remove indentation
45
- .replaceAll('{BASE_URL}', BASE_URL) // interpolate base url
46
- .replaceAll('{SEARCH}', window.location.search); // interpolate search query
68
+ // Check for external dependencies that would break the worker
69
+ const externalDeps = [];
70
+ if (result.includes('Object(h.a)') || result.includes('h.a')) {
71
+ externalDeps.push('h (Babel async helper)');
72
+ }
73
+ if (result.includes('p.a.mark') || result.includes('p.a.wrap')) {
74
+ externalDeps.push('p (Regenerator runtime)');
75
+ }
76
+ if (result.includes('_createForOfIteratorHelper')) {
77
+ externalDeps.push('_createForOfIteratorHelper (Babel helper)');
78
+ }
79
+ if (externalDeps.length > 0) {
80
+ // eslint-disable-next-line no-console
81
+ console.error('[serializeSearchWorkerSrc] ERROR: Worker code contains external dependencies that will not be available in worker context:', externalDeps);
82
+ // eslint-disable-next-line no-console
83
+ console.error('[serializeSearchWorkerSrc] This is likely because the worker function uses async/await or modern JS features that Babel transpiles with external helpers.');
84
+ // eslint-disable-next-line no-console
85
+ console.error('[serializeSearchWorkerSrc] The worker function needs to be self-contained or the build configuration needs to be adjusted to inline helpers.');
86
+ }
87
+
88
+ // eslint-disable-next-line no-console
89
+ console.log('[serializeSearchWorkerSrc] Serialization complete, result length:', result.length);
90
+ // eslint-disable-next-line no-console
91
+ console.log('[serializeSearchWorkerSrc] First 500 chars of result:', result.substring(0, 500));
92
+ // eslint-disable-next-line no-console
93
+ console.log('[serializeSearchWorkerSrc] Full result:', result);
94
+ return result;
95
+ } catch (error) {
96
+ // eslint-disable-next-line no-console
97
+ console.error('[serializeSearchWorkerSrc] Error during serialization:', error);
98
+ throw error;
99
+ }
47
100
  }
48
101
 
49
102
  /*
@@ -52,11 +105,7 @@ export function serializeSearchWorkerSrc() {
52
105
  * the worker via onmessage and passed back to the main thread via postMessage.
53
106
  */
54
107
  function worker() {
55
- const preloadTitlesPromise = (async () => {
56
- const f = await fetch('{BASE_URL}/autocomplete-preload{SEARCH}');
57
- const rawTitles = await f.json();
58
- return rawTitles.map(preparseTitle);
59
- })();
108
+ const preloadTitlesPromise = fetch('{BASE_URL}/autocomplete-preload{SEARCH}').then(f => f.json()).then(rawTitles => rawTitles.map(preparseTitle));
60
109
  function preparseTitle({
61
110
  value,
62
111
  popularity
@@ -108,41 +157,43 @@ function worker() {
108
157
  };
109
158
  }
110
159
  const maxResults = 5;
111
- async function autocompleteHandler(q) {
112
- const titles = await preloadTitlesPromise;
113
- const scoredTitles = titles.map(t => getScoredTitle(q, t));
114
- const topAutocompleteTitles = scoredTitles.filter(x => x.score > 0).sort((a, b) => a.score > b.score ? -1 : 1).slice(0, maxResults).map(t => ({
115
- title: t.title,
116
- segments: getHighlightSegments(t.title, t.charScores)
117
- }));
118
- postMessage({
119
- query: q.query,
120
- result: topAutocompleteTitles,
121
- action: 'autocomplete'
160
+ function autocompleteHandler(q) {
161
+ preloadTitlesPromise.then(titles => {
162
+ const scoredTitles = titles.map(t => getScoredTitle(q, t));
163
+ const topAutocompleteTitles = scoredTitles.filter(x => x.score > 0).sort((a, b) => a.score > b.score ? -1 : 1).slice(0, maxResults).map(t => ({
164
+ title: t.title,
165
+ segments: getHighlightSegments(t.title, t.charScores)
166
+ }));
167
+ postMessage({
168
+ query: q.query,
169
+ result: topAutocompleteTitles,
170
+ action: 'autocomplete'
171
+ });
122
172
  });
123
173
  }
124
- async function searchAsYouTypeHandler(q) {
125
- const f = await fetch('{BASE_URL}/search-as-you-type{SEARCH}', {
174
+ function searchAsYouTypeHandler(q) {
175
+ fetch('{BASE_URL}/search-as-you-type{SEARCH}', {
126
176
  body: JSON.stringify({
127
177
  query: q.query,
128
178
  max: maxResults
129
179
  }),
130
180
  method: 'POST'
131
- });
132
- const searchAsYouTypeResults = await f.json();
133
- for (const entry of searchAsYouTypeResults.top) {
134
- const t = preparseTitle({
135
- value: entry.title,
136
- popularity: 0
181
+ }).then(f => f.json()).then(searchAsYouTypeResults => {
182
+ for (let i = 0; i < searchAsYouTypeResults.top.length; i++) {
183
+ const entry = searchAsYouTypeResults.top[i];
184
+ const t = preparseTitle({
185
+ value: entry.title,
186
+ popularity: 0
187
+ });
188
+ const charScores = getCharScores(q, t);
189
+ entry.segments = getHighlightSegments(entry.title, charScores);
190
+ entry.key = q.query + ':' + entry.title;
191
+ }
192
+ postMessage({
193
+ query: q.query,
194
+ result: searchAsYouTypeResults,
195
+ action: 'search-as-you-type'
137
196
  });
138
- const charScores = getCharScores(q, t);
139
- entry.segments = getHighlightSegments(entry.title, charScores);
140
- entry.key = q.query + ':' + entry.title;
141
- }
142
- postMessage({
143
- query: q.query,
144
- result: searchAsYouTypeResults,
145
- action: 'search-as-you-type'
146
197
  });
147
198
  }
148
199
 
@@ -157,17 +208,17 @@ function worker() {
157
208
  // Bonus scores are includes in certain cases
158
209
  function getTotalScore(q, t, charScores) {
159
210
  let fromChars = 0;
160
- for (const s of charScores) {
161
- fromChars += s;
211
+ for (let i = 0; i < charScores.length; i++) {
212
+ fromChars += charScores[i];
162
213
  }
163
214
  const fromPopularity = (t.popularity || 0) * popularityStrength;
164
215
  let bonus = 0;
165
216
  // for each complete word present in both the title and query
166
- for (const qw of q.words) {
217
+ q.words.forEach(qw => {
167
218
  if (t.words.has(qw)) {
168
219
  bonus += 100;
169
220
  }
170
- }
221
+ });
171
222
 
172
223
  // if the title starts with the query
173
224
  if (t.lower.startsWith(q.query)) {
@@ -291,9 +342,11 @@ function worker() {
291
342
  // "authentication" or other words ending in "ion"
292
343
  const minMatchLength = Math.ceil(avgQueryWordLength ** 0.65);
293
344
  const charScores = [];
294
- for (const cmcs of cmcsForTitleChars) {
345
+ for (let i = 0; i < cmcsForTitleChars.length; i++) {
346
+ const cmcs = cmcsForTitleChars[i];
295
347
  let score = 0;
296
- for (const cmc of cmcs) {
348
+ for (let j = 0; j < cmcs.length; j++) {
349
+ const cmc = cmcs[j];
297
350
  // if the string of consecutive matching chars meets the minMatchLength
298
351
  // or if it's a standalone word in the query (e.g "C")
299
352
  if (cmc.value.length >= minMatchLength || q.words.has(cmc.value)) {
@@ -5,27 +5,74 @@ const mockWorker = () => ({
5
5
  postMessage: () => null
6
6
  });
7
7
  export function createSearchWorker() {
8
- const src = serializeSearchWorkerSrc();
9
- const blob = new Blob([src], {
10
- type: 'text/javascript'
11
- });
12
- const dataUrl = URL.createObjectURL?.(blob);
13
- const w = typeof Worker === 'undefined' ? mockWorker() : new Worker(dataUrl);
14
- const results = new PromiseLookup({
15
- onKeyInit: (action, query) => w.postMessage({
16
- action,
17
- query
18
- })
19
- });
20
- w.onmessage = ({
21
- data
22
- }) => {
23
- const {
24
- query,
25
- result,
26
- action
27
- } = data;
28
- results.resolve(action, query, result);
29
- };
30
- return (action, query) => results.get(action, query);
8
+ // eslint-disable-next-line no-console
9
+ console.log('[createSearchWorker] Starting worker creation');
10
+ try {
11
+ // eslint-disable-next-line no-console
12
+ console.log('[createSearchWorker] Serializing worker source');
13
+ const src = serializeSearchWorkerSrc();
14
+ // eslint-disable-next-line no-console
15
+ console.log('[createSearchWorker] Worker source serialized, length:', src.length);
16
+
17
+ // eslint-disable-next-line no-console
18
+ console.log('[createSearchWorker] Creating blob');
19
+ const blob = new Blob([src], {
20
+ type: 'text/javascript'
21
+ });
22
+ // eslint-disable-next-line no-console
23
+ console.log('[createSearchWorker] Blob created');
24
+
25
+ // eslint-disable-next-line no-console
26
+ console.log('[createSearchWorker] Creating object URL');
27
+ const dataUrl = URL.createObjectURL?.(blob);
28
+ // eslint-disable-next-line no-console
29
+ console.log('[createSearchWorker] Object URL created:', dataUrl);
30
+
31
+ // eslint-disable-next-line no-console
32
+ console.log('[createSearchWorker] Checking Worker availability');
33
+ const w = typeof Worker === 'undefined' ? mockWorker() : new Worker(dataUrl);
34
+ // eslint-disable-next-line no-console
35
+ console.log('[createSearchWorker] Worker instance created');
36
+ const results = new PromiseLookup({
37
+ onKeyInit: (action, query) => {
38
+ // eslint-disable-next-line no-console
39
+ console.log('[createSearchWorker.onKeyInit] Posting message to worker:', {
40
+ action,
41
+ query
42
+ });
43
+ w.postMessage({
44
+ action,
45
+ query
46
+ });
47
+ }
48
+ });
49
+ w.onmessage = ({
50
+ data
51
+ }) => {
52
+ // eslint-disable-next-line no-console
53
+ console.log('[createSearchWorker.onmessage] Received message from worker:', data);
54
+ const {
55
+ query,
56
+ result,
57
+ action
58
+ } = data;
59
+ results.resolve(action, query, result);
60
+ };
61
+
62
+ // Add error handler for the worker
63
+ if ('onerror' in w) {
64
+ w.onerror = error => {
65
+ // eslint-disable-next-line no-console
66
+ console.error('[createSearchWorker] Worker error:', error);
67
+ };
68
+ }
69
+
70
+ // eslint-disable-next-line no-console
71
+ console.log('[createSearchWorker] Worker fully configured');
72
+ return (action, query) => results.get(action, query);
73
+ } catch (error) {
74
+ // eslint-disable-next-line no-console
75
+ console.error('[createSearchWorker] Error creating worker:', error);
76
+ throw error;
77
+ }
31
78
  }
@@ -5,14 +5,31 @@
5
5
 
6
6
  import { ALLOWED_HOSTS } from './consts';
7
7
  export function safelyRedirect(url) {
8
+ // eslint-disable-next-line no-console
9
+ console.log('[safelyRedirect] Attempting to redirect to:', url);
8
10
  try {
11
+ // eslint-disable-next-line no-console
12
+ console.log('[safelyRedirect] Sanitizing URL');
9
13
  const sanitizedURL = sanitizeURL(url);
10
- if (isRelativeUrl(sanitizedURL) || hasAllowedHost(sanitizedURL)) {
14
+ // eslint-disable-next-line no-console
15
+ console.log('[safelyRedirect] Sanitized URL:', sanitizedURL);
16
+ const isRelative = isRelativeUrl(sanitizedURL);
17
+ // eslint-disable-next-line no-console
18
+ console.log('[safelyRedirect] Is relative URL:', isRelative);
19
+ const hasAllowed = hasAllowedHost(sanitizedURL);
20
+ // eslint-disable-next-line no-console
21
+ console.log('[safelyRedirect] Has allowed host:', hasAllowed);
22
+ if (isRelative || hasAllowed) {
23
+ // eslint-disable-next-line no-console
24
+ console.log('[safelyRedirect] Redirecting to:', sanitizedURL);
11
25
  window.location.assign(sanitizedURL);
12
26
  } else {
13
27
  throw new Error(`Invalid redirect url: ${sanitizedURL}`);
14
28
  }
15
- } catch (error) {}
29
+ } catch (error) {
30
+ // eslint-disable-next-line no-console
31
+ console.error('[safelyRedirect] Error during redirect:', error);
32
+ }
16
33
  }
17
34
  function hasAllowedHost(url) {
18
35
  const parsedUrl = new URL(url);
@@ -37,13 +54,35 @@ function isRelativeUrl(url) {
37
54
  // supports already encoded urls by decoding and re-encoding.
38
55
  // params are handled separately to allow for the encoding of / characters
39
56
  function sanitizeURL(url) {
40
- const [path, params] = url.split('?', 2);
41
- const sanitizedPath = encodeURI(decodeURI(path));
42
- if (!params) return sanitizedPath;
43
- const urlParams = new URLSearchParams(params);
44
- urlParams.forEach((value, key) => {
45
- const decoded = decodeURIComponent(value);
46
- urlParams.set(key, decoded);
47
- });
48
- return `${sanitizedPath}?${urlParams.toString()}`;
57
+ // eslint-disable-next-line no-console
58
+ console.log('[sanitizeURL] Input URL:', url);
59
+ try {
60
+ const [path, params] = url.split('?', 2);
61
+ // eslint-disable-next-line no-console
62
+ console.log('[sanitizeURL] Path:', path, 'Params:', params);
63
+ const sanitizedPath = encodeURI(decodeURI(path));
64
+ // eslint-disable-next-line no-console
65
+ console.log('[sanitizeURL] Sanitized path:', sanitizedPath);
66
+ if (!params) return sanitizedPath;
67
+
68
+ // eslint-disable-next-line no-console
69
+ console.log('[sanitizeURL] Creating URLSearchParams with:', params);
70
+ const urlParams = new URLSearchParams(params);
71
+ // eslint-disable-next-line no-console
72
+ console.log('[sanitizeURL] URLSearchParams created');
73
+ urlParams.forEach((value, key) => {
74
+ // eslint-disable-next-line no-console
75
+ console.log('[sanitizeURL] Processing param:', key, '=', value);
76
+ const decoded = decodeURIComponent(value);
77
+ urlParams.set(key, decoded);
78
+ });
79
+ const result = `${sanitizedPath}?${urlParams.toString()}`;
80
+ // eslint-disable-next-line no-console
81
+ console.log('[sanitizeURL] Final result:', result);
82
+ return result;
83
+ } catch (error) {
84
+ // eslint-disable-next-line no-console
85
+ console.error('[sanitizeURL] Error sanitizing URL:', error);
86
+ throw error;
87
+ }
49
88
  }
@@ -22,7 +22,7 @@ export declare const DropdownAnchor: import("@emotion/styled").StyledComponent<(
22
22
  as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
23
23
  } & {
24
24
  theme?: import("@emotion/react").Theme | undefined;
25
- } & Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "disabled" | "content" | "translate" | "property" | "hidden" | "form" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "type" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLButtonElement> | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value">, "ref"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>, "ref"> | Omit<Partial<import("@codecademy/gamut/dist/helpers").AppendedIconProps> & {
25
+ } & Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "disabled" | "name" | "content" | "translate" | "property" | "hidden" | "form" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "type" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLButtonElement> | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value">, "ref"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>, "ref"> | Omit<Partial<import("@codecademy/gamut/dist/helpers").AppendedIconProps> & {
26
26
  theme?: import("@emotion/react").Theme | undefined;
27
27
  as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
28
28
  } & import("@codecademy/gamut").AnchorProps & Pick<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "content" | "translate" | "property" | "hidden" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "media" | "target" | "type" | "role" | "tabIndex" | "href" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLAnchorElement> | "download" | "hrefLang" | "ping" | "referrerPolicy"> & Omit<{
@@ -30,7 +30,7 @@ export declare const DropdownAnchor: import("@emotion/styled").StyledComponent<(
30
30
  as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
31
31
  } & {
32
32
  theme?: import("@emotion/react").Theme | undefined;
33
- } & Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "disabled" | "content" | "translate" | "property" | "hidden" | "form" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "type" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLButtonElement> | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value"> & Pick<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "content" | "translate" | "property" | "hidden" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "media" | "target" | "type" | "role" | "tabIndex" | "href" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLAnchorElement> | "download" | "hrefLang" | "ping" | "referrerPolicy">, "ref"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>, "ref">) & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>) & {
33
+ } & Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "disabled" | "name" | "content" | "translate" | "property" | "hidden" | "form" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "type" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLButtonElement> | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value"> & Pick<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "content" | "translate" | "property" | "hidden" | "slot" | "style" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "media" | "target" | "type" | "role" | "tabIndex" | "href" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | keyof React.ClassAttributes<HTMLAnchorElement> | "download" | "hrefLang" | "ping" | "referrerPolicy">, "ref"> & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>, "ref">) & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>) & {
34
34
  theme?: import("@emotion/react").Theme;
35
35
  }) & {
36
36
  theme?: import("@emotion/react").Theme;