@longline/aqua-ui 1.0.330 → 1.0.334

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.
Files changed (162) hide show
  1. package/Types.d.ts +9 -1
  2. package/containers/Anchor/Anchor.d.ts +2 -1
  3. package/containers/Anchor/Anchor.js +1 -1
  4. package/containers/Dock/Dock.d.ts +2 -1
  5. package/containers/Dock/Dock.js +1 -1
  6. package/containers/Dock/Dockable.d.ts +2 -1
  7. package/containers/Dock/Dockable.js +1 -1
  8. package/containers/DragBar/DragBar.d.ts +2 -1
  9. package/containers/DragBar/DragBar.js +1 -1
  10. package/containers/Form/elements/BoxWrapper.js +1 -1
  11. package/containers/Form/elements/Hint.js +1 -1
  12. package/containers/Form/elements/SimpleWrapper.js +1 -1
  13. package/containers/GlassPane/GlassPane.d.ts +2 -1
  14. package/containers/GlassPane/GlassPane.js +1 -1
  15. package/containers/InfoBox/InfoBox.d.ts +2 -1
  16. package/containers/InfoBox/InfoBox.js +1 -1
  17. package/containers/InfoBox/elements/Content.d.ts +2 -1
  18. package/containers/InfoBox/elements/Content.js +1 -1
  19. package/containers/InfoBox/elements/Footer.d.ts +2 -1
  20. package/containers/InfoBox/elements/Footer.js +1 -1
  21. package/containers/InfoBox/elements/Header.d.ts +2 -1
  22. package/containers/InfoBox/elements/Header.js +1 -1
  23. package/containers/InfoBox/elements/Row.d.ts +4 -2
  24. package/containers/InfoBox/elements/Row.js +1 -1
  25. package/containers/List/List.d.ts +2 -1
  26. package/containers/List/List.js +1 -1
  27. package/containers/List/ListCell.d.ts +2 -1
  28. package/containers/List/ListCell.js +1 -1
  29. package/containers/List/ListRow.d.ts +2 -1
  30. package/containers/List/ListRow.js +1 -1
  31. package/containers/Message/Message.d.ts +2 -1
  32. package/containers/Message/Message.js +1 -1
  33. package/containers/Openable/Openable.d.ts +2 -1
  34. package/containers/Openable/Openable.js +2 -2
  35. package/containers/PublicRoute/Help.d.ts +2 -1
  36. package/containers/PublicRoute/Help.js +1 -1
  37. package/containers/PublicRoute/PublicRoute.d.ts +2 -1
  38. package/containers/PublicRoute/PublicRoute.js +1 -1
  39. package/containers/Tabs/Pane.d.ts +2 -1
  40. package/containers/Tabs/Pane.js +1 -1
  41. package/containers/Tabs/Tabs.d.ts +2 -1
  42. package/containers/Tabs/Tabs.js +1 -1
  43. package/controls/Chip/Chip.d.ts +2 -1
  44. package/controls/Chip/Chip.js +1 -1
  45. package/controls/CircularProgress/CircularProgress.d.ts +2 -1
  46. package/controls/CircularProgress/CircularProgress.js +1 -1
  47. package/controls/Dropzone/Dropzone.d.ts +2 -1
  48. package/controls/Dropzone/Dropzone.js +1 -1
  49. package/controls/Fab/Fab.d.ts +2 -1
  50. package/controls/Fab/Fab.js +1 -1
  51. package/controls/Ghost/Ghost.d.ts +2 -1
  52. package/controls/Ghost/Ghost.js +1 -1
  53. package/controls/Gradient/Gradient.d.ts +2 -2
  54. package/controls/Gradient/Gradient.js +1 -1
  55. package/controls/Histogram/Histogram.d.ts +2 -1
  56. package/controls/Histogram/Histogram.js +14 -14
  57. package/controls/Icon/Icon.d.ts +2 -2
  58. package/controls/Icon/Icon.js +1 -1
  59. package/controls/Key/Key.d.ts +2 -1
  60. package/controls/Key/Key.js +1 -1
  61. package/controls/LinearChart/LinearChart.d.ts +2 -1
  62. package/controls/LinearChart/LinearChart.js +1 -1
  63. package/controls/ListButton/ListButton.d.ts +2 -1
  64. package/controls/ListButton/ListButton.js +1 -1
  65. package/controls/ListView/ListView.d.ts +2 -1
  66. package/controls/ListView/ListView.js +1 -1
  67. package/controls/Mouse/Mouse.d.ts +2 -1
  68. package/controls/Mouse/Mouse.js +1 -1
  69. package/controls/PrimaryButton/PrimaryButton.d.ts +2 -1
  70. package/controls/PrimaryButton/PrimaryButton.js +1 -1
  71. package/controls/Progress/Progress.d.ts +2 -1
  72. package/controls/Progress/Progress.js +1 -1
  73. package/controls/SecondaryButton/SecondaryButton.d.ts +2 -1
  74. package/controls/SecondaryButton/SecondaryButton.js +1 -1
  75. package/controls/TabBar/Tab.d.ts +2 -1
  76. package/controls/TabBar/Tab.js +1 -1
  77. package/controls/TabBar/TabBar.d.ts +2 -1
  78. package/controls/TabBar/TabBar.js +1 -1
  79. package/controls/TertiaryButton/TertiaryButton.d.ts +2 -1
  80. package/controls/TertiaryButton/TertiaryButton.js +1 -1
  81. package/controls/ToggleButton/ToggleButton.d.ts +2 -1
  82. package/controls/ToggleButton/ToggleButton.js +1 -1
  83. package/controls/View/View.d.ts +2 -1
  84. package/controls/View/View.js +1 -1
  85. package/hooks/useSpeechAIRecorder/index.d.ts +1 -0
  86. package/hooks/useSpeechAIRecorder/index.js +1 -0
  87. package/hooks/useSpeechAIRecorder/stories/SpeechAIAudioInput.d.ts +6 -0
  88. package/hooks/{useAssemblyAIRecorder/stories/AssemblyAudioInput.js → useSpeechAIRecorder/stories/SpeechAIAudioInput.js} +4 -4
  89. package/hooks/useSpeechAIRecorder/useSpeechAIRecorder.d.ts +29 -0
  90. package/hooks/{useAssemblyAIRecorder/useAssemblyAIRecorder.js → useSpeechAIRecorder/useSpeechAIRecorder.js} +13 -11
  91. package/hooks/useTextAIStream/index.d.ts +1 -0
  92. package/hooks/useTextAIStream/index.js +1 -0
  93. package/hooks/{useOpenAIStream/stories/OpenAIStreamInput.d.ts → useTextAIStream/stories/TextAIStreamInput.d.ts} +3 -3
  94. package/hooks/{useOpenAIStream/stories/OpenAIStreamInput.js → useTextAIStream/stories/TextAIStreamInput.js} +6 -6
  95. package/hooks/useTextAIStream/useTextAIStream.d.ts +26 -0
  96. package/hooks/{useOpenAIStream/useOpenAIStream.js → useTextAIStream/useTextAIStream.js} +16 -4
  97. package/inputs/DateInput/DateInput.d.ts +2 -5
  98. package/inputs/Dropdown/Dropdown.d.ts +2 -5
  99. package/inputs/Editor/Editor.d.ts +10 -11
  100. package/inputs/Editor/Editor.js +1 -1
  101. package/inputs/Editor/buttons/{SpeechButton.d.ts → SpeechAIButton.d.ts} +2 -2
  102. package/inputs/Editor/buttons/{SpeechButton.js → SpeechAIButton.js} +5 -5
  103. package/inputs/Editor/buttons/TextAIButton.d.ts +28 -0
  104. package/inputs/Editor/buttons/{OpenAIButton.js → TextAIButton.js} +13 -14
  105. package/inputs/Editor/buttons/{OpenAIMenu.d.ts → TextAIMenu.d.ts} +2 -2
  106. package/inputs/Editor/buttons/{OpenAIMenu.js → TextAIMenu.js} +3 -3
  107. package/inputs/Editor/menu/MenuBar.d.ts +6 -6
  108. package/inputs/Editor/menu/MenuBar.js +7 -7
  109. package/inputs/Input/Input.d.ts +2 -5
  110. package/inputs/Input/InputWrapper.d.ts +2 -1
  111. package/inputs/Input/InputWrapper.js +1 -1
  112. package/inputs/MonthRange/MonthRange.d.ts +2 -5
  113. package/inputs/Selector/Selector.d.ts +2 -5
  114. package/inputs/Slider/Slider.d.ts +2 -5
  115. package/inputs/Textarea/Textarea.d.ts +2 -5
  116. package/map/Map/Map.d.ts +2 -1
  117. package/map/Map/Map.js +1 -1
  118. package/map/PositionsManager/PositionBox.d.ts +2 -1
  119. package/map/PositionsManager/PositionBox.js +1 -1
  120. package/map/controls/CompassButton/CompassButton.js +3 -3
  121. package/map/controls/FullscreenButton/FullscreenButton.js +1 -1
  122. package/map/controls/Geocoder/Geocoder.js +1 -1
  123. package/map/controls/MapLoader/MapLoader.js +1 -1
  124. package/map/controls/ScaleControl/ScaleControl.js +1 -1
  125. package/map/controls/ZoomInButton/ZoomInButton.js +1 -1
  126. package/map/controls/ZoomOutButton/ZoomOutButton.js +1 -1
  127. package/map/controls/base/MapButton/MapButton.d.ts +0 -4
  128. package/map/controls/base/MapButton/MapButton.js +2 -2
  129. package/map/controls/base/MapControl/MapControl.d.ts +2 -1
  130. package/map/controls/base/MapControl/MapControl.js +2 -2
  131. package/modules/Filter/Filter.d.ts +2 -1
  132. package/modules/Filter/Filter.js +1 -1
  133. package/modules/MainMenu/Item.d.ts +2 -1
  134. package/modules/MainMenu/Item.js +1 -1
  135. package/modules/MainMenu/MainMenu.d.ts +2 -1
  136. package/modules/MainMenu/MainMenu.js +1 -1
  137. package/modules/Root/Sidebar.js +1 -1
  138. package/package.json +4 -5
  139. package/services/Dialog/Dialog.d.ts +2 -1
  140. package/services/Dialog/Dialog.js +2 -2
  141. package/services/Dialog/DialogWindow.d.ts +2 -1
  142. package/services/Dialog/DialogWindow.js +1 -1
  143. package/hooks/useAssemblyAIRecorder/index.d.ts +0 -1
  144. package/hooks/useAssemblyAIRecorder/index.js +0 -1
  145. package/hooks/useAssemblyAIRecorder/stories/AssemblyAudioInput.d.ts +0 -6
  146. package/hooks/useAssemblyAIRecorder/useAssemblyAIRecorder.d.ts +0 -27
  147. package/hooks/useOpenAIRecorder/index.d.ts +0 -1
  148. package/hooks/useOpenAIRecorder/index.js +0 -1
  149. package/hooks/useOpenAIRecorder/old/AudioInputNoHook.d.ts +0 -8
  150. package/hooks/useOpenAIRecorder/old/AudioInputNoHook.js +0 -192
  151. package/hooks/useOpenAIRecorder/old/AudioInputStandardMedia.d.ts +0 -5
  152. package/hooks/useOpenAIRecorder/old/AudioInputStandardMedia.js +0 -170
  153. package/hooks/useOpenAIRecorder/stories/OpenAIAudioInput.d.ts +0 -8
  154. package/hooks/useOpenAIRecorder/stories/OpenAIAudioInput.js +0 -17
  155. package/hooks/useOpenAIRecorder/useOpenAIRecorder.d.ts +0 -22
  156. package/hooks/useOpenAIRecorder/useOpenAIRecorder.js +0 -223
  157. package/hooks/useOpenAIStream/index.d.ts +0 -1
  158. package/hooks/useOpenAIStream/index.js +0 -1
  159. package/hooks/useOpenAIStream/useOpenAIStream.d.ts +0 -14
  160. package/inputs/Editor/buttons/OpenAIButton.d.ts +0 -29
  161. /package/hooks/{useAssemblyAIRecorder → useSpeechAIRecorder}/SpeechManager.d.ts +0 -0
  162. /package/hooks/{useAssemblyAIRecorder → useSpeechAIRecorder}/SpeechManager.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IEditorProps {
2
+ import { ITestable } from '../../Types';
3
+ interface IEditorProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /**
@@ -49,15 +50,16 @@ interface IEditorProps {
49
50
  */
50
51
  codeButtons?: boolean;
51
52
  /**
52
- * URL for OpenAI requests.
53
- * If not present, no OpenAI controls will be available.
53
+ * URL for the back-end Text AI endpoint (streamed text generation).
54
+ * If not present, no Text AI controls will be available.
54
55
  */
55
- openAIurl?: string;
56
+ textAIurl?: string;
56
57
  /**
57
- * URL for AssemblyAI temporary token requests.
58
- * If not present, no AssemblyAI controls will be available.
58
+ * URL for the back-end Speech AI endpoint (issues a temporary streaming
59
+ * token for the speech-to-text provider).
60
+ * If not present, no Speech AI controls will be available.
59
61
  */
60
- assemblyAIurl?: string;
62
+ speechAIurl?: string;
61
63
  /**
62
64
  * Optional Bearer token for authenticated AI requests.
63
65
  */
@@ -65,10 +67,7 @@ interface IEditorProps {
65
67
  /**
66
68
  * Listeners are notified whenever the user interacts with the Editor.
67
69
  */
68
- onChange?: (value: any) => void; /**
69
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
70
- */
71
- 'data-testid'?: string;
70
+ onChange?: (value: any) => void;
72
71
  }
73
72
  declare const Editor: {
74
73
  ({ fluid, error, disabled, transparent, ghost, allowFullscreen, codeButtons, ...props }: IEditorProps): React.JSX.Element;
@@ -91,7 +91,7 @@ var EditorBase = function (props) {
91
91
  React.createElement("div", { "data-testid": props['data-testid'] || "Editor", className: props.className, ref: wrapperRef },
92
92
  React.createElement(OverlayScrollbarsComponent, { className: "scroller ".concat(fullscreen ? 'fullscreen' : ''), defer: true, options: { scrollbars: { theme: 'os-theme-dark', autoHide: 'leave' } } },
93
93
  !props.disabled && !props.ghost &&
94
- React.createElement(MenuBar, { allowFullscreen: props.allowFullscreen, codeButtons: props.codeButtons, fullscreen: fullscreen, editor: editor, onToggleFullscreen: handleToggleFullscreen, openAIurl: props.openAIurl, assemblyAIurl: props.assemblyAIurl, authToken: props.authToken }),
94
+ React.createElement(MenuBar, { allowFullscreen: props.allowFullscreen, codeButtons: props.codeButtons, fullscreen: fullscreen, editor: editor, onToggleFullscreen: handleToggleFullscreen, textAIurl: props.textAIurl, speechAIurl: props.speechAIurl, authToken: props.authToken }),
95
95
  React.createElement(EditorContent, { editor: editor, ref: setRef })))));
96
96
  };
97
97
  var pulse = keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n from {\n opacity: .15;\n }\n to {\n opacity: 1;\n }\n"], ["\n from {\n opacity: .15;\n }\n to {\n opacity: 1;\n }\n"])));
@@ -8,5 +8,5 @@ interface IProps {
8
8
  */
9
9
  authToken?: string;
10
10
  }
11
- declare const SpeechButton: (props: IProps) => React.JSX.Element;
12
- export { SpeechButton };
11
+ declare const SpeechAIButton: (props: IProps) => React.JSX.Element;
12
+ export { SpeechAIButton };
@@ -1,8 +1,8 @@
1
1
  import React, { useEffect, useRef } from 'react';
2
2
  import { MenuButton } from '../menu/MenuButton';
3
3
  import { SVG } from '../../../svg';
4
- import { useAssemblyAIRecorder } from '../../../hooks/useAssemblyAIRecorder';
5
- var SpeechButton = function (props) {
4
+ import { useSpeechAIRecorder } from '../../../hooks/useSpeechAIRecorder';
5
+ var SpeechAIButton = function (props) {
6
6
  var fromRef = useRef(null);
7
7
  var transcriptRef = useRef("");
8
8
  var onTranscript = function (text) {
@@ -12,7 +12,7 @@ var SpeechButton = function (props) {
12
12
  view.dispatch(transaction);
13
13
  transcriptRef.current = text;
14
14
  };
15
- var _a = useAssemblyAIRecorder(props.url, onTranscript, props.authToken), recordingStatus = _a.recordingStatus, toggleRecording = _a.toggleRecording;
15
+ var _a = useSpeechAIRecorder(props.url, onTranscript, props.authToken), recordingStatus = _a.recordingStatus, toggleRecording = _a.toggleRecording;
16
16
  useEffect(function () {
17
17
  if (recordingStatus == 'recording') {
18
18
  props.editor.setOptions({ editable: false });
@@ -26,6 +26,6 @@ var SpeechButton = function (props) {
26
26
  var handleClick = function () {
27
27
  toggleRecording();
28
28
  };
29
- return (React.createElement(MenuButton, { editor: props.editor, hint: React.createElement("span", { style: { whiteSpace: "nowrap" } }, "AssemblyAI speech-to-text"), onClick: handleClick, disabled: false, active: recordingStatus == 'connecting', highlighted: recordingStatus == 'recording', icon: { url: SVG.Icons.Microphone } }));
29
+ return (React.createElement(MenuButton, { editor: props.editor, hint: React.createElement("span", { style: { whiteSpace: "nowrap" } }, "Speech-to-text"), onClick: handleClick, disabled: false, active: recordingStatus == 'connecting', highlighted: recordingStatus == 'recording', icon: { url: SVG.Icons.Microphone } }));
30
30
  };
31
- export { SpeechButton };
31
+ export { SpeechAIButton };
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { Editor } from '@tiptap/react';
3
+ interface IProps {
4
+ editor: Editor;
5
+ /**
6
+ * URL for AI requests.
7
+ */
8
+ url: string;
9
+ /**
10
+ * Optional Bearer token for authenticated requests.
11
+ */
12
+ authToken?: string;
13
+ }
14
+ /**
15
+ * `TextAIButton` provides a menu button that allows the user to run various
16
+ * AI-powered text transformations on selected editor content.
17
+ *
18
+ * Available transformations include:
19
+ * - Summarizing selected content
20
+ * - Extracting key points
21
+ * - Translating
22
+ *
23
+ * When triggered, the selected content is cut, sent to the configured Text AI
24
+ * back-end, and replaced with the transformed version. Streaming support
25
+ * allows real-time insertion with animated progress.
26
+ */
27
+ declare const TextAIButton: (props: IProps) => React.JSX.Element;
28
+ export { TextAIButton };
@@ -37,24 +37,23 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  import React, { useState } from 'react';
38
38
  import { marked } from 'marked';
39
39
  import { DOMParser as ProseMirrorDOMParser } from 'prosemirror-model';
40
- import { useOpenAIStream } from '../../../hooks/useOpenAIStream';
41
- import { OpenAIMenu } from './OpenAIMenu';
40
+ import { useTextAIStream } from '../../../hooks/useTextAIStream';
41
+ import { TextAIMenu } from './TextAIMenu';
42
42
  /**
43
- * `AIButton` provides a menu button that allows the user to run various
44
- * AI-powered transformations on selected editor content.
43
+ * `TextAIButton` provides a menu button that allows the user to run various
44
+ * AI-powered text transformations on selected editor content.
45
45
  *
46
46
  * Available transformations include:
47
- * - Telling a joke
48
47
  * - Summarizing selected content
49
48
  * - Extracting key points
50
- * - Translating to Portuguese
49
+ * - Translating
51
50
  *
52
- * When triggered, the selected content is cut, sent to OpenAI, and replaced
53
- * with the transformed version. Streaming support allows real-time insertion
54
- * with animated progress.
51
+ * When triggered, the selected content is cut, sent to the configured Text AI
52
+ * back-end, and replaced with the transformed version. Streaming support
53
+ * allows real-time insertion with animated progress.
55
54
  */
56
- var OpenAIButton = function (props) {
57
- var streamOpenAI = useOpenAIStream(props.url, props.authToken).stream;
55
+ var TextAIButton = function (props) {
56
+ var streamTextAI = useTextAIStream(props.url, props.authToken).stream;
58
57
  var _a = useState(false), streaming = _a[0], setStreaming = _a[1];
59
58
  // The DOM parser is only created once, then used many times as content
60
59
  // is streamed in.
@@ -154,7 +153,7 @@ var OpenAIButton = function (props) {
154
153
  // Create initial node.
155
154
  _a.sent();
156
155
  text = "";
157
- return [4 /*yield*/, streamOpenAI(prompt, function (chunk) { return __awaiter(void 0, void 0, void 0, function () {
156
+ return [4 /*yield*/, streamTextAI(prompt, function (chunk) { return __awaiter(void 0, void 0, void 0, function () {
158
157
  return __generator(this, function (_a) {
159
158
  switch (_a.label) {
160
159
  case 0:
@@ -203,6 +202,6 @@ var OpenAIButton = function (props) {
203
202
  props.editor.setOptions({ editable: true });
204
203
  });
205
204
  };
206
- return (React.createElement(OpenAIMenu, { editor: props.editor, onClick: function (p) { return transformStream(p); }, animated: streaming }));
205
+ return (React.createElement(TextAIMenu, { editor: props.editor, onClick: function (p) { return transformStream(p); }, animated: streaming }));
207
206
  };
208
- export { OpenAIButton };
207
+ export { TextAIButton };
@@ -5,5 +5,5 @@ interface IProps {
5
5
  onClick: (prompt: (text: string) => string) => void;
6
6
  animated: boolean;
7
7
  }
8
- declare const OpenAIMenu: (props: IProps) => React.JSX.Element;
9
- export { OpenAIMenu };
8
+ declare const TextAIMenu: (props: IProps) => React.JSX.Element;
9
+ export { TextAIMenu };
@@ -4,7 +4,7 @@ import { MenuButton } from '../menu/MenuButton';
4
4
  import { List, ListRow } from '../../../containers/List';
5
5
  import { SVG } from '../../../svg';
6
6
  import { Icon } from '../../../controls/Icon';
7
- var OpenAIMenu = function (props) {
7
+ var TextAIMenu = function (props) {
8
8
  var _a = React.useState(false), open = _a[0], setOpen = _a[1];
9
9
  var _b = React.useState(false), langOpen = _b[0], setLangOpen = _b[1];
10
10
  // With an empty selection, some AI commands cannot work, because they
@@ -19,7 +19,7 @@ var OpenAIMenu = function (props) {
19
19
  setLangOpen(false);
20
20
  }, [open]);
21
21
  var languages = ["US English", "UK English", "Portuguese", "Spanish", "French", "German", "Dutch", "Simplified Chinese"];
22
- return (React.createElement(Openable, { width: 300, toggle: React.createElement(MenuButton, { editor: props.editor, onClick: function () { return setOpen(!open); }, hint: React.createElement("span", { style: { whiteSpace: "nowrap" } }, "OpenAI functions"), icon: { url: SVG.Editor.AI, animated: props.animated } }), content: React.createElement("div", { style: { display: 'flex', gap: '8px' } },
22
+ return (React.createElement(Openable, { width: 300, toggle: React.createElement(MenuButton, { editor: props.editor, onClick: function () { return setOpen(!open); }, hint: React.createElement("span", { style: { whiteSpace: "nowrap" } }, "Text AI"), icon: { url: SVG.Editor.AI, animated: props.animated } }), content: React.createElement("div", { style: { display: 'flex', gap: '8px' } },
23
23
  React.createElement("div", { style: { minWidth: '150px' } },
24
24
  React.createElement(List, { maxItems: 4, contract: true },
25
25
  React.createElement(ListRow, { disabled: selectionIsEmpty, onClick: function () { return handleClick(function (text) {
@@ -39,4 +39,4 @@ var OpenAIMenu = function (props) {
39
39
  }); } }, lang);
40
40
  })))), open: open, onClose: function () { return setOpen(false); } }));
41
41
  };
42
- export { OpenAIMenu };
42
+ export { TextAIMenu };
@@ -16,15 +16,15 @@ interface IProps {
16
16
  */
17
17
  codeButtons?: boolean;
18
18
  /**
19
- * URL for OpenAI requests.
20
- * If not present, no AI controls will be available.
19
+ * URL for the back-end Text AI endpoint.
20
+ * If not present, no Text AI controls will be available.
21
21
  */
22
- openAIurl?: string;
22
+ textAIurl?: string;
23
23
  /**
24
- * URL for AssemblyAI requests.
25
- * If not present, no AI controls will be available.
24
+ * URL for the back-end Speech AI endpoint.
25
+ * If not present, no Speech AI controls will be available.
26
26
  */
27
- assemblyAIurl?: string;
27
+ speechAIurl?: string;
28
28
  /**
29
29
  * Optional Bearer token for authenticated AI requests.
30
30
  */
@@ -13,8 +13,8 @@ import { OrderedListButton } from '../buttons/OrderedListButton';
13
13
  import { BulletListButton } from '../buttons/BulletListButton';
14
14
  import { CodeBlockButton } from '../buttons/CodeBlockButton';
15
15
  import { FullscreenButton } from '../buttons/FullscreenButton';
16
- import { OpenAIButton } from '../buttons/OpenAIButton';
17
- import { SpeechButton } from '../buttons/SpeechButton';
16
+ import { TextAIButton } from '../buttons/TextAIButton';
17
+ import { SpeechAIButton } from '../buttons/SpeechAIButton';
18
18
  var MenuBarBase = function (props) {
19
19
  if (!props.editor) {
20
20
  return null;
@@ -31,11 +31,11 @@ var MenuBarBase = function (props) {
31
31
  React.createElement(MenuSeparator, null),
32
32
  React.createElement(CodeButton, { editor: props.editor }),
33
33
  React.createElement(CodeBlockButton, { editor: props.editor })),
34
- (props.openAIurl || props.allowFullscreen) && React.createElement(MenuSeparator, null),
35
- props.openAIurl &&
36
- React.createElement(OpenAIButton, { url: props.openAIurl, editor: props.editor, authToken: props.authToken }),
37
- props.assemblyAIurl &&
38
- React.createElement(SpeechButton, { url: props.assemblyAIurl, editor: props.editor, authToken: props.authToken }),
34
+ (props.textAIurl || props.allowFullscreen) && React.createElement(MenuSeparator, null),
35
+ props.textAIurl &&
36
+ React.createElement(TextAIButton, { url: props.textAIurl, editor: props.editor, authToken: props.authToken }),
37
+ props.speechAIurl &&
38
+ React.createElement(SpeechAIButton, { url: props.speechAIurl, editor: props.editor, authToken: props.authToken }),
39
39
  props.allowFullscreen &&
40
40
  React.createElement(FullscreenButton, { fullscreen: props.fullscreen, editor: props.editor, onClick: props.onToggleFullscreen }))));
41
41
  };
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { IIconProps } from '../../controls/Icon';
3
- interface IInputProps {
3
+ import { ITestable } from '../../Types';
4
+ interface IInputProps extends ITestable {
4
5
  /** @ignore */
5
6
  className?: string;
6
7
  /** @ignore */
@@ -128,10 +129,6 @@ interface IInputProps {
128
129
  * Listeners are notified when the Input receives focus.
129
130
  */
130
131
  onFocus?: () => void;
131
- /**
132
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
133
- */
134
- 'data-testid'?: string;
135
132
  }
136
133
  declare const Input: {
137
134
  (props: IInputProps): React.JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { IIconProps } from '../../controls/Icon';
3
- interface IProps {
3
+ import { ITestable } from '../../Types';
4
+ interface IProps extends ITestable {
4
5
  className?: string;
5
6
  children?: React.ReactNode;
6
7
  fluid?: boolean;
@@ -42,7 +42,7 @@ var InputWrapperBase = function (props) {
42
42
  else if (props.icon != null) {
43
43
  icon = (React.createElement(Icon, __assign({ size: 17, color: (_a = props.icon.color) !== null && _a !== void 0 ? _a : theme.colors.primary[3] }, props.icon)));
44
44
  }
45
- return (React.createElement("div", { "data-testid": "InputWrapper", className: props.className, onClick: props.onClick },
45
+ return (React.createElement("div", { "data-testid": props['data-testid'] || "InputWrapper", className: props.className, onClick: props.onClick },
46
46
  props.ghost && React.createElement(Ghost, { style: { position: 'absolute', left: 0, top: 0, right: 0, bottom: 0, zIndex: 100 } }),
47
47
  icon && !props.ghost && props.iconPosition == 'left' && icon,
48
48
  React.createElement(Content, null, props.children),
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IMonthRangeProps {
2
+ import { ITestable } from '../../Types';
3
+ interface IMonthRangeProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /**
@@ -63,10 +64,6 @@ interface IMonthRangeProps {
63
64
  * Listeners are notified when the `MonthRange` receives focus.
64
65
  */
65
66
  onFocus?: () => void;
66
- /**
67
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
68
- */
69
- 'data-testid'?: string;
70
67
  }
71
68
  /**
72
69
  * A `MonthRange` allows a selection of a time period, measured in months.
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { ISelectorProps } from './ISelectorProps';
3
+ import { ITestable } from '../../Types';
3
4
  type TCheckboxType = 'check' | 'toggle' | 'slider' | 'circle';
4
- interface IProps extends ISelectorProps {
5
+ interface IProps extends ISelectorProps, ITestable {
5
6
  /** @ignore */
6
7
  className?: string;
7
8
  /**
@@ -25,10 +26,6 @@ interface IProps extends ISelectorProps {
25
26
  * If set, checkbox has a dark label.
26
27
  */
27
28
  dark?: boolean;
28
- /**
29
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
30
- */
31
- 'data-testid'?: string;
32
29
  }
33
30
  /**
34
31
  * A Selector can be used to create either a HTML checkbox or a HTML radio button.
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface ISliderProps {
2
+ import { ITestable } from '../../Types';
3
+ interface ISliderProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /**
@@ -72,10 +73,6 @@ interface ISliderProps {
72
73
  * Event is triggered when slider's value changes.
73
74
  */
74
75
  onChange?: (value: number) => void;
75
- /**
76
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
77
- */
78
- 'data-testid'?: string;
79
76
  }
80
77
  /**
81
78
  * Sliders allow users to view and select a value (or range) along a track.
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
+ import { ITestable } from '../../Types';
2
3
  /**
3
4
  * Textarea validates itself using the HTML validation API whenever its
4
5
  * content changes. Listeners can use onValidate to obtain the resulting
5
6
  * ValidityState.
6
7
  */
7
- interface ITextareaProps {
8
+ interface ITextareaProps extends ITestable {
8
9
  /** @ignore */
9
10
  className?: string;
10
11
  /**
@@ -69,10 +70,6 @@ interface ITextareaProps {
69
70
  * Listeners are notified whenever the user interacts with the Textarea.
70
71
  */
71
72
  onChange?: (value: any) => void;
72
- /**
73
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
74
- */
75
- 'data-testid'?: string;
76
73
  }
77
74
  /**
78
75
  * `Textarea` encapsulated and styles the `<textarea>` element. Like `Input`,
package/map/Map/Map.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { MapMouseEvent, Map as OriginalMap } from 'mapbox-gl';
3
3
  import { ViewState, ViewStateChangeEvent } from 'react-map-gl/mapbox';
4
- interface IMapProps {
4
+ import { ITestable } from '../../Types';
5
+ interface IMapProps extends ITestable {
5
6
  /** @ignore */
6
7
  children?: React.ReactNode;
7
8
  /**
package/map/Map/Map.js CHANGED
@@ -218,7 +218,7 @@ var MapBase = function (props) {
218
218
  if (props.onMove)
219
219
  props.onMove(e);
220
220
  };
221
- return (React.createElement(GLMap, __assign({ "data-testid": "Map" }, viewState, { mapboxAccessToken: props.token, style: { width: '100%', height: '100%', minHeight: '300px', font: theme.font.bodyMedium }, logoPosition: props.logoPosition, mapStyle: props.style, minZoom: props.minZoom, maxZoom: props.maxZoom, interactiveLayerIds: props.interactiveLayerIds, doubleClickZoom: props.doubleClickZoom, cursor: props.cursor, preserveDrawingBuffer: props.preserveDrawingBuffer, fadeDuration: props.fadeDuration, onMove: handleMove, onMoveEnd: props.onMoveEnd, onMouseMove: props.onMouseMove, onMouseLeave: props.onMouseLeave, onLoad: handleLoad, onClick: props.onClick, onDblClick: props.onDblClick }),
221
+ return (React.createElement(GLMap, __assign({ "data-testid": props['data-testid'] || "Map" }, viewState, { mapboxAccessToken: props.token, style: { width: '100%', height: '100%', minHeight: '300px', font: theme.font.bodyMedium }, logoPosition: props.logoPosition, mapStyle: props.style, minZoom: props.minZoom, maxZoom: props.maxZoom, interactiveLayerIds: props.interactiveLayerIds, doubleClickZoom: props.doubleClickZoom, cursor: props.cursor, preserveDrawingBuffer: props.preserveDrawingBuffer, fadeDuration: props.fadeDuration, onMove: handleMove, onMoveEnd: props.onMoveEnd, onMouseMove: props.onMouseMove, onMouseLeave: props.onMouseLeave, onLoad: handleLoad, onClick: props.onClick, onDblClick: props.onDblClick }),
222
222
  props.clipped && React.createElement(React.Fragment, null,
223
223
  React.createElement(Source, { type: "raster", tiles: ["https://api.mapbox.com/raster/v1/mapbox.mapbox-terrain-dem-v1/{z}/{x}/{y}.webp?access_token=".concat(props.token)] },
224
224
  React.createElement(Layer, { id: "overlay", type: "raster" })),
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
+ import { ITestable } from '../../Types';
2
3
  interface IPosition {
3
4
  lng: number;
4
5
  lat: number;
5
6
  zoom: number;
6
7
  }
7
- interface IPositionBoxProps {
8
+ interface IPositionBoxProps extends ITestable {
8
9
  coord: IPosition;
9
10
  onMove: (x: number, y: number) => void;
10
11
  onDelete: () => void;
@@ -52,7 +52,7 @@ var PositionBox = function (props) {
52
52
  console.error("Could not write to clipboard: context not secure.");
53
53
  }
54
54
  };
55
- return (React.createElement(Dockable, { latitude: props.coord.lat, longitude: props.coord.lng, offsetX: -9, offsetY: -38 },
55
+ return (React.createElement(Dockable, { "data-testid": props['data-testid'] || 'PositionBox', latitude: props.coord.lat, longitude: props.coord.lng, offsetX: -9, offsetY: -38 },
56
56
  React.createElement(Wrapper, { ref: wrapperRef },
57
57
  React.createElement(Icon, { onClick: props.onDelete },
58
58
  React.createElement(Target, null,
@@ -31,11 +31,11 @@ import { MapButton } from '../base/MapButton';
31
31
  import { useViewState } from '../../Map';
32
32
  import { Mouse } from '../../../controls/Mouse';
33
33
  import { Key } from '../../../controls/Key';
34
- var CompassButtonBase = function (p) {
34
+ var CompassButtonBase = function (props) {
35
35
  var viewState = useViewState();
36
36
  var map = useMap().current;
37
- return (React.createElement(MapButton, __assign({ "data-testid": "CompassButton", onClick: function () { map.rotateTo(0); map.resetNorthPitch(); } }, p),
38
- React.createElement("div", { style: { transform: "rotateX(".concat(p.visualizePitch ? viewState.pitch : 0, "deg)") } },
37
+ return (React.createElement(MapButton, __assign({ "data-testid": props['data-testid'] || "CompassButton", onClick: function () { map.rotateTo(0); map.resetNorthPitch(); } }, props),
38
+ React.createElement("div", { style: { transform: "rotateX(".concat(props.visualizePitch ? viewState.pitch : 0, "deg)") } },
39
39
  React.createElement("svg", { style: { transform: "rotateZ(".concat(-viewState.bearing, "deg)") }, xmlns: "http://www.w3.org/2000/svg", x: "0px", y: "0px", viewBox: "0 0 1000 1000" },
40
40
  React.createElement("polygon", { className: "tip", points: "100,1000 500,0 900,1000 500,700 " }),
41
41
  React.createElement("polygon", { className: "arrow", points: "500,0 423,192.6 500,351.6 577,192.6 " })))));
@@ -59,7 +59,7 @@ var FullscreenButton = function (_a) {
59
59
  window.document.exitFullscreen();
60
60
  }
61
61
  };
62
- return (React.createElement(MapButton, __assign({ "data-testid": "FullscreenButton", disabled: !checkFullscreenSupport(), onClick: toggle, hint: hint }, props),
62
+ return (React.createElement(MapButton, __assign({ "data-testid": props['data-testid'] || "FullscreenButton", disabled: !checkFullscreenSupport(), onClick: toggle, hint: hint }, props),
63
63
  React.createElement("svg", { width: "100", height: "100", viewBox: "0 0 448 512", xmlns: "http://www.w3.org/2000/svg" },
64
64
  React.createElement("path", { d: "M32 32C14.3 32 0 46.3 0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V352zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H320zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V352z" }))));
65
65
  };
@@ -129,7 +129,7 @@ var GeocoderBase = function (props) {
129
129
  break;
130
130
  }
131
131
  };
132
- return (React.createElement(MapControl, { "data-testid": "Geocoder", x: props.x, y: props.y },
132
+ return (React.createElement(MapControl, { "data-testid": props['data-testid'] || "Geocoder", x: props.x, y: props.y },
133
133
  React.createElement("div", { className: props.className, onKeyDown: function (e) { return handleKeyDown(e); }, ref: wrapperRef },
134
134
  React.createElement(GeocoderSelector, { placeholder: props.placeholder, searchIcon: props.searchIcon, value: q, onChange: handleChange }),
135
135
  features.length > 0 && React.createElement(GeocoderList, { upwards: props.upwards }, features.map(function (f, idx) {
@@ -30,7 +30,7 @@ import { MapControl } from '../base/MapControl';
30
30
  var DEFAULT_SIZE = 40; // Default control size (px)
31
31
  var DEFAULT_COLOR = "white"; // Default control color
32
32
  var MapLoaderBase = function (props) {
33
- return (React.createElement(MapControl, { "data-testid": "MapLoader", x: props.x, y: props.y },
33
+ return (React.createElement(MapControl, { "data-testid": props['data-testid'] || "MapLoader", x: props.x, y: props.y },
34
34
  React.createElement("div", { className: props.className },
35
35
  React.createElement(Svg, { width: "1792", height: "1792", viewBox: "0 0 1792 1792", xmlns: "http://www.w3.org/2000/svg" },
36
36
  React.createElement("path", { d: "M1760 896q0 176-68.5 336t-184 275.5-275.5 184-336 68.5-336-68.5-275.5-184-184-275.5-68.5-336q0-213 97-398.5t265-305.5 374-151v228q-221 45-366.5 221t-145.5 406q0 130 51 248.5t136.5 204 204 136.5 248.5 51 248.5-51 204-136.5 136.5-204 51-248.5q0-230-145.5-406t-366.5-221v-228q206 31 374 151t265 305.5 97 398.5z" })))));
@@ -72,7 +72,7 @@ var ScaleControlBase = function (props) {
72
72
  var meters = width * meterspx;
73
73
  var dist = getRoundedMeters(meters);
74
74
  width = width * dist / meters;
75
- return (React.createElement(MapControl, { "data-testid": "ScaleControl", x: props.x, y: props.y },
75
+ return (React.createElement(MapControl, { "data-testid": props['data-testid'] || "ScaleControl", x: props.x, y: props.y },
76
76
  React.createElement("div", { className: props.className, style: { width: "".concat(width, "px") } }, getHumanText(dist))));
77
77
  };
78
78
  var ScaleControlStyled = styled(ScaleControlBase)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n // Size:\n box-sizing: border-box;\n height: 20px;\n padding-left: 5px;\n\n // Appearance:\n border: solid 2px #333333;\n border-top: none;\n user-select: none;\n pointer-events: none;\n background-color: #C7C7C7;\n font-size: 10px; /* TODO: Not a theme font size. */\n color: #333;\n white-space: nowrap;\n opacity: 0.8;\n transition: width ease-in-out 100ms;\n"], ["\n // Size:\n box-sizing: border-box;\n height: 20px;\n padding-left: 5px;\n\n // Appearance:\n border: solid 2px #333333;\n border-top: none;\n user-select: none;\n pointer-events: none;\n background-color: #C7C7C7;\n font-size: 10px; /* TODO: Not a theme font size. */\n color: #333;\n white-space: nowrap;\n opacity: 0.8;\n transition: width ease-in-out 100ms;\n"
@@ -49,7 +49,7 @@ var ZoomInButton = function (_a) {
49
49
  " Zoom in") : _b, props = __rest(_a, ["hint"]);
50
50
  var viewState = useViewState();
51
51
  var map = useMap().current;
52
- return (React.createElement(MapButton, __assign({ "data-testid": "ZoomInButton", disabled: viewState.zoom >= map.getMaxZoom(), onClick: function () { return map.zoomIn(); }, hint: hint }, props),
52
+ return (React.createElement(MapButton, __assign({ "data-testid": props['data-testid'] || "ZoomInButton", disabled: viewState.zoom >= map.getMaxZoom(), onClick: function () { return map.zoomIn(); }, hint: hint }, props),
53
53
  React.createElement("svg", { width: "100", height: "100", viewBox: "0 0 100 100", xmlns: "http://www.w3.org/2000/svg" },
54
54
  React.createElement("path", { d: "M100,43.2v13.6c0,1.9-0.7,3.5-2,4.8c-1.3,1.3-2.9,2-4.8,2H63.6v29.5c0,1.9-0.7,3.5-2,4.8c-1.3,1.3-2.9,2-4.8,2H43.2c-1.9,0-3.5-0.7-4.8-2c-1.3-1.3-2-2.9-2-4.8V63.6H6.8c-1.9,0-3.5-0.7-4.8-2c-1.3-1.3-2-2.9-2-4.8V43.2c0-1.9,0.7-3.5,2-4.8c1.3-1.3,2.9-2,4.8-2h29.5V6.8c0-1.9,0.7-3.5,2-4.8c1.3-1.3,2.9-2,4.8-2h13.6c1.9,0,3.5,0.7,4.8,2c1.3,1.3,2,2.9,2,4.8v29.5h29.5c1.9,0,3.5,0.7,4.8,2C99.3,39.7,100,41.3,100,43.2z" }))));
55
55
  };
@@ -49,7 +49,7 @@ var ZoomOutButton = function (_a) {
49
49
  " Zoom out") : _b, props = __rest(_a, ["hint"]);
50
50
  var viewState = useViewState();
51
51
  var map = useMap().current;
52
- return (React.createElement(MapButton, __assign({ "data-testid": "ZoomOutButton", disabled: viewState.zoom <= map.getMinZoom(), onClick: function () { return map.zoomOut(); }, hint: hint }, props),
52
+ return (React.createElement(MapButton, __assign({ "data-testid": props['data-testid'] || "ZoomOutButton", disabled: viewState.zoom <= map.getMinZoom(), onClick: function () { return map.zoomOut(); }, hint: hint }, props),
53
53
  React.createElement("svg", { width: "100", height: "100", viewBox: "0 0 100 100", xmlns: "http://www.w3.org/2000/svg" },
54
54
  React.createElement("path", { d: "M93.2,36.4c1.9,0,3.5,0.7,4.8,2c1.3,1.3,2,2.9,2,4.8v13.6c0,1.9-0.7,3.5-2,4.8c-1.3,1.3-2.9,2-4.8,2H63.6H6.8c-1.9,0-3.5-0.7-4.8-2c-1.3-1.3-2-2.9-2-4.8V43.2c0-1.9,0.7-3.5,2-4.8c1.3-1.3,2.9-2,4.8-2" }))));
55
55
  };
@@ -34,10 +34,6 @@ interface IProps {
34
34
  * Fired when the map button is clicked.
35
35
  */
36
36
  onClick: (e?: React.MouseEvent) => void;
37
- /**
38
- * Test ID for Playwright/testing. Forwarded to the root DOM element.
39
- */
40
- 'data-testid'?: string;
41
37
  }
42
38
  /**
43
39
  * A `MapButton` is a square button to be used on a Mapbox map. It must
@@ -60,10 +60,10 @@ var MapButtonBase = function (props) {
60
60
  ]
61
61
  }), styles = _c.styles, attributes = _c.attributes, update = _c.update;
62
62
  var renderButton = function () {
63
- return React.createElement("div", { ref: setWrapperRef, className: props.className, "data-testid": props['data-testid'], tabIndex: props.disabled ? -1 : 0, onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave },
63
+ return React.createElement("div", { ref: setWrapperRef, className: props.className, "data-testid": props['data-testid'] || "MapButton", tabIndex: props.disabled ? -1 : 0, onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave },
64
64
  React.createElement(Button, { "data-testid": "MapButton.Button", "$grouped": props.grouped, "$size": props.size, "$disabled": props.disabled, "$active": props.active }, props.children),
65
65
  props.hint &&
66
- createPortal(React.createElement(Hint, { ref: setHintRef, styles: styles.popper, attributes: __assign({}, attributes.popper) }, props.hint), document.body));
66
+ createPortal(React.createElement(Hint, { "data-testid": "MapButton.Hint", ref: setHintRef, styles: styles.popper, attributes: __assign({}, attributes.popper) }, props.hint), document.body));
67
67
  };
68
68
  if (props.grouped)
69
69
  return renderButton();
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IMapControlProps {
2
+ import { ITestable } from '../../../../Types';
3
+ interface IMapControlProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /**
@@ -25,11 +25,11 @@ var __rest = (this && this.__rest) || function (s, e) {
25
25
  return t;
26
26
  };
27
27
  import * as React from 'react';
28
- import { useViewState } from '../../../Map';
29
28
  import styled from 'styled-components';
29
+ import { useViewState } from '../../../Map';
30
30
  var MapControlBase = function (props) {
31
31
  var viewState = useViewState();
32
- return (React.createElement("div", { "data-testid": "MapControl", className: props.className, style: {
32
+ return (React.createElement("div", { "data-testid": props['data-testid'] || "MapControl", className: props.className, style: {
33
33
  // Must calculate this style dynamically, because it needs local state.
34
34
  left: props.x >= 0 ? "".concat(props.x + (props.respectPadding ? viewState.padding.left : 0), "px") : 'auto',
35
35
  right: props.x < 0 ? "".concat((props.respectPadding ? viewState.padding.right : 0) - props.x, "px") : 'auto',
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IFilterProps {
2
+ import { ITestable } from '../../Types';
3
+ interface IFilterProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /** @ignore */
@@ -60,7 +60,7 @@ var FilterBase = function (props) {
60
60
  if (update)
61
61
  update();
62
62
  };
63
- return (React.createElement("div", { "data-test-id": "Filter", className: props.className },
63
+ return (React.createElement("div", { "data-testid": props['data-testid'] || "Filter", className: props.className },
64
64
  React.createElement(ToggleButton, { url: SVG.Icons.Filter, ref: buttonRef, active: props.active, open: open, onClick: toggleOpen }),
65
65
  createPortal(React.createElement(Pane, __assign({ "data-test-id": "Filter.Pane", "$open": open, "$width": props.width, style: styles.popper }, attributes.popper, { ref: paneRef }), open && React.createElement(GlassPane, { padded: true, bordered: true }, props.children)), document.body)));
66
66
  };
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IProps {
2
+ import { ITestable } from '../../Types';
3
+ interface IProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /**
@@ -74,7 +74,7 @@ var ItemBase = function (props) {
74
74
  }
75
75
  });
76
76
  };
77
- return (React.createElement("div", { tabIndex: -1, className: props.className, onMouseEnter: !props.noExpand ? handleMouseEnter : null, onMouseLeave: !props.noExpand ? handleMouseLeave : null, onClick: (_a = props.onClick) !== null && _a !== void 0 ? _a : null },
77
+ return (React.createElement("div", { "data-testid": props['data-testid'] || "MainMenu.Item", tabIndex: -1, className: props.className, onMouseEnter: !props.noExpand ? handleMouseEnter : null, onMouseLeave: !props.noExpand ? handleMouseLeave : null, onClick: (_a = props.onClick) !== null && _a !== void 0 ? _a : null },
78
78
  React.createElement(Animatable, { style: __assign({}, springs) },
79
79
  React.createElement(Content, { ref: content },
80
80
  React.createElement(Svg, null,
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
- interface IMainMenuProps {
2
+ import { ITestable } from '../../Types';
3
+ interface IMainMenuProps extends ITestable {
3
4
  /** @ignore */
4
5
  className?: string;
5
6
  /** @ignore */