agentation 0.0.2 → 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ PolyForm Shield License 1.0.0
2
+
3
+ Copyright (c) 2026 Benji Taylor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to use,
7
+ copy, modify, and distribute the Software, subject to the following conditions:
8
+
9
+ 1. You may not use the Software to provide a product or service that competes
10
+ with the Software or any product or service offered by the Licensor that
11
+ includes the Software.
12
+
13
+ 2. You may not remove or obscure any licensing, copyright, or other notices
14
+ included in the Software.
15
+
16
+ 3. If you distribute the Software or any derivative works, you must include a
17
+ copy of this license.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ For more information, see https://polyformproject.org/licenses/shield/1.0.0
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # agentation
2
+
3
+ Agentation is an agent-agnostic visual feedback tool. Click elements on your page, add notes, and copy structured output that helps AI coding agents find the exact code you're referring to.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install agentation -D
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```tsx
14
+ import { Agentation } from 'agentation';
15
+
16
+ function App() {
17
+ return (
18
+ <>
19
+ <YourApp />
20
+ <Agentation />
21
+ </>
22
+ );
23
+ }
24
+ ```
25
+
26
+ The toolbar appears in the bottom-right corner. Click to activate, then click any element to annotate it.
27
+
28
+ ## Features
29
+
30
+ - **Click to annotate** – Click any element with automatic selector identification
31
+ - **Text selection** – Select text to annotate specific content
32
+ - **Multi-select** – Drag to select multiple elements at once
33
+ - **Area selection** – Drag to annotate any region, even empty space
34
+ - **Animation pause** – Freeze CSS animations to capture specific states
35
+ - **Structured output** – Copy markdown with selectors, positions, and context
36
+ - **Dark/light mode** – Matches your preference or set manually
37
+ - **Zero dependencies** – Pure CSS animations, no runtime libraries
38
+
39
+ ## How it works
40
+
41
+ Agentation captures class names, selectors, and element positions so AI agents can `grep` for the exact code you're referring to. Instead of describing "the blue button in the sidebar," you give the agent `.sidebar > button.primary` and your feedback.
42
+
43
+ ## Requirements
44
+
45
+ - React 18+
46
+ - Desktop browser (mobile not supported)
47
+
48
+ ## Docs
49
+
50
+ Full documentation at [agentation.dev](https://agentation.dev)
51
+
52
+ ## License
53
+
54
+ © 2026 Benji Taylor
55
+ Licensed under PolyForm Shield 1.0.0
@@ -0,0 +1,222 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+
4
+ type DemoAnnotation = {
5
+ selector: string;
6
+ comment: string;
7
+ selectedText?: string;
8
+ };
9
+ type PageFeedbackToolbarCSSProps = {
10
+ demoAnnotations?: DemoAnnotation[];
11
+ demoDelay?: number;
12
+ enableDemoMode?: boolean;
13
+ };
14
+ declare function PageFeedbackToolbarCSS({ demoAnnotations, demoDelay, enableDemoMode, }?: PageFeedbackToolbarCSSProps): react.ReactPortal | null;
15
+
16
+ interface AnnotationPopupProps {
17
+ /** Element name to display in header */
18
+ element: string;
19
+ /** Optional timestamp display (e.g., "@ 1.23s" for animation feedback) */
20
+ timestamp?: string;
21
+ /** Optional selected/highlighted text */
22
+ selectedText?: string;
23
+ /** Placeholder text for the textarea */
24
+ placeholder?: string;
25
+ /** Called when annotation is submitted with text */
26
+ onSubmit: (text: string) => void;
27
+ /** Called when popup is cancelled/dismissed */
28
+ onCancel: () => void;
29
+ /** Position styles (left, top) */
30
+ style?: React.CSSProperties;
31
+ /** Color variant for submit button */
32
+ variant?: "blue" | "green";
33
+ }
34
+ interface AnnotationPopupHandle {
35
+ /** Shake the popup (e.g., when user clicks outside) */
36
+ shake: () => void;
37
+ }
38
+ declare const AnnotationPopup: react.ForwardRefExoticComponent<AnnotationPopupProps & react.RefAttributes<AnnotationPopupHandle>>;
39
+ declare function AnnotationPopupPresence({ isOpen, ...props }: AnnotationPopupProps & {
40
+ isOpen: boolean;
41
+ }): react_jsx_runtime.JSX.Element;
42
+
43
+ interface AnnotationPopupCSSProps {
44
+ /** Element name to display in header */
45
+ element: string;
46
+ /** Optional timestamp display (e.g., "@ 1.23s" for animation feedback) */
47
+ timestamp?: string;
48
+ /** Optional selected/highlighted text */
49
+ selectedText?: string;
50
+ /** Placeholder text for the textarea */
51
+ placeholder?: string;
52
+ /** Initial value for textarea (for edit mode) */
53
+ initialValue?: string;
54
+ /** Label for submit button (default: "Add") */
55
+ submitLabel?: string;
56
+ /** Called when annotation is submitted with text */
57
+ onSubmit: (text: string) => void;
58
+ /** Called when popup is cancelled/dismissed */
59
+ onCancel: () => void;
60
+ /** Position styles (left, top) */
61
+ style?: React.CSSProperties;
62
+ /** Custom color for submit button and textarea focus (hex) */
63
+ accentColor?: string;
64
+ /** External exit state (parent controls exit animation) */
65
+ isExiting?: boolean;
66
+ /** Light mode styling */
67
+ lightMode?: boolean;
68
+ }
69
+ interface AnnotationPopupCSSHandle {
70
+ /** Shake the popup (e.g., when user clicks outside) */
71
+ shake: () => void;
72
+ }
73
+ declare const AnnotationPopupCSS: react.ForwardRefExoticComponent<AnnotationPopupCSSProps & react.RefAttributes<AnnotationPopupCSSHandle>>;
74
+
75
+ declare const IconClose: ({ size }: {
76
+ size?: number;
77
+ }) => react_jsx_runtime.JSX.Element;
78
+ declare const IconPlus: ({ size }: {
79
+ size?: number;
80
+ }) => react_jsx_runtime.JSX.Element;
81
+ declare const IconCheck: ({ size }: {
82
+ size?: number;
83
+ }) => react_jsx_runtime.JSX.Element;
84
+ declare const IconCheckSmall: ({ size }: {
85
+ size?: number;
86
+ }) => react_jsx_runtime.JSX.Element;
87
+ declare const IconListSparkle: ({ size, style, }: {
88
+ size?: number;
89
+ style?: React.CSSProperties;
90
+ }) => react_jsx_runtime.JSX.Element;
91
+ declare const IconHelp: ({ size }: {
92
+ size?: number;
93
+ }) => react_jsx_runtime.JSX.Element;
94
+ declare const IconCheckSmallAnimated: ({ size }: {
95
+ size?: number;
96
+ }) => react_jsx_runtime.JSX.Element;
97
+ declare const IconCopyAlt: ({ size }: {
98
+ size?: number;
99
+ }) => react_jsx_runtime.JSX.Element;
100
+ declare const IconCopyAnimated: ({ size, copied }: {
101
+ size?: number;
102
+ copied?: boolean;
103
+ }) => react_jsx_runtime.JSX.Element;
104
+ declare const IconEye: ({ size }: {
105
+ size?: number;
106
+ }) => react_jsx_runtime.JSX.Element;
107
+ declare const IconEyeAlt: ({ size }: {
108
+ size?: number;
109
+ }) => react_jsx_runtime.JSX.Element;
110
+ declare const IconEyeClosed: ({ size }: {
111
+ size?: number;
112
+ }) => react_jsx_runtime.JSX.Element;
113
+ declare const IconEyeAnimated: ({ size, isOpen }: {
114
+ size?: number;
115
+ isOpen?: boolean;
116
+ }) => react_jsx_runtime.JSX.Element;
117
+ declare const IconPausePlayAnimated: ({ size, isPaused }: {
118
+ size?: number;
119
+ isPaused?: boolean;
120
+ }) => react_jsx_runtime.JSX.Element;
121
+ declare const IconEyeMinus: ({ size }: {
122
+ size?: number;
123
+ }) => react_jsx_runtime.JSX.Element;
124
+ declare const IconGear: ({ size }: {
125
+ size?: number;
126
+ }) => react_jsx_runtime.JSX.Element;
127
+ declare const IconPauseAlt: ({ size }: {
128
+ size?: number;
129
+ }) => react_jsx_runtime.JSX.Element;
130
+ declare const IconPause: ({ size }: {
131
+ size?: number;
132
+ }) => react_jsx_runtime.JSX.Element;
133
+ declare const IconPlayAlt: ({ size }: {
134
+ size?: number;
135
+ }) => react_jsx_runtime.JSX.Element;
136
+ declare const IconTrashAlt: ({ size }: {
137
+ size?: number;
138
+ }) => react_jsx_runtime.JSX.Element;
139
+ declare const IconChatEllipsis: ({ size, style, }: {
140
+ size?: number;
141
+ style?: React.CSSProperties;
142
+ }) => react_jsx_runtime.JSX.Element;
143
+ declare const IconCheckmark: ({ size }: {
144
+ size?: number;
145
+ }) => react_jsx_runtime.JSX.Element;
146
+ declare const IconCheckmarkLarge: ({ size }: {
147
+ size?: number;
148
+ }) => react_jsx_runtime.JSX.Element;
149
+ declare const IconCheckmarkCircle: ({ size }: {
150
+ size?: number;
151
+ }) => react_jsx_runtime.JSX.Element;
152
+ declare const IconXmark: ({ size }: {
153
+ size?: number;
154
+ }) => react_jsx_runtime.JSX.Element;
155
+ declare const IconXmarkLarge: ({ size }: {
156
+ size?: number;
157
+ }) => react_jsx_runtime.JSX.Element;
158
+ declare const IconSun: ({ size }: {
159
+ size?: number;
160
+ }) => react_jsx_runtime.JSX.Element;
161
+ declare const IconMoon: ({ size }: {
162
+ size?: number;
163
+ }) => react_jsx_runtime.JSX.Element;
164
+ declare const AnimatedBunny: ({ size, color, }: {
165
+ size?: number;
166
+ color?: string;
167
+ }) => react_jsx_runtime.JSX.Element;
168
+
169
+ /**
170
+ * Gets a readable path for an element (e.g., "article > section > p")
171
+ */
172
+ declare function getElementPath(target: HTMLElement, maxDepth?: number): string;
173
+ /**
174
+ * Identifies an element and returns a human-readable name + path
175
+ */
176
+ declare function identifyElement(target: HTMLElement): {
177
+ name: string;
178
+ path: string;
179
+ };
180
+ /**
181
+ * Gets text content from element and siblings for context
182
+ */
183
+ declare function getNearbyText(element: HTMLElement): string;
184
+ /**
185
+ * Simplified element identifier for animation feedback (less verbose)
186
+ */
187
+ declare function identifyAnimationElement(target: HTMLElement): string;
188
+ /**
189
+ * Gets CSS class names from an element (cleaned of module hashes)
190
+ */
191
+ declare function getElementClasses(target: HTMLElement): string;
192
+
193
+ type Annotation = {
194
+ id: string;
195
+ x: number;
196
+ y: number;
197
+ comment: string;
198
+ element: string;
199
+ elementPath: string;
200
+ timestamp: number;
201
+ selectedText?: string;
202
+ boundingBox?: {
203
+ x: number;
204
+ y: number;
205
+ width: number;
206
+ height: number;
207
+ };
208
+ nearbyText?: string;
209
+ cssClasses?: string;
210
+ nearbyElements?: string;
211
+ computedStyles?: string;
212
+ fullPath?: string;
213
+ accessibility?: string;
214
+ isMultiSelect?: boolean;
215
+ isFixed?: boolean;
216
+ };
217
+
218
+ declare function getStorageKey(pathname: string): string;
219
+ declare function loadAnnotations<T = Annotation>(pathname: string): T[];
220
+ declare function saveAnnotations<T = Annotation>(pathname: string, annotations: T[]): void;
221
+
222
+ export { PageFeedbackToolbarCSS as Agentation, PageFeedbackToolbarCSS as AgentationCSS, AnimatedBunny, type Annotation, AnnotationPopup, AnnotationPopupCSS, type AnnotationPopupCSSHandle, type AnnotationPopupCSSProps, type AnnotationPopupHandle, AnnotationPopupPresence, type AnnotationPopupProps, type DemoAnnotation, IconChatEllipsis, IconCheck, IconCheckSmall, IconCheckSmallAnimated, IconCheckmark, IconCheckmarkCircle, IconCheckmarkLarge, IconClose, IconCopyAlt, IconCopyAnimated, IconEye, IconEyeAlt, IconEyeAnimated, IconEyeClosed, IconEyeMinus, IconGear, IconHelp, IconListSparkle, IconMoon, IconPause, IconPauseAlt, IconPausePlayAnimated, IconPlayAlt, IconPlus, IconSun, IconTrashAlt, IconXmark, IconXmarkLarge, PageFeedbackToolbarCSS, getElementClasses, getElementPath, getNearbyText, getStorageKey, identifyAnimationElement, identifyElement, loadAnnotations, saveAnnotations };
@@ -0,0 +1,222 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+
4
+ type DemoAnnotation = {
5
+ selector: string;
6
+ comment: string;
7
+ selectedText?: string;
8
+ };
9
+ type PageFeedbackToolbarCSSProps = {
10
+ demoAnnotations?: DemoAnnotation[];
11
+ demoDelay?: number;
12
+ enableDemoMode?: boolean;
13
+ };
14
+ declare function PageFeedbackToolbarCSS({ demoAnnotations, demoDelay, enableDemoMode, }?: PageFeedbackToolbarCSSProps): react.ReactPortal | null;
15
+
16
+ interface AnnotationPopupProps {
17
+ /** Element name to display in header */
18
+ element: string;
19
+ /** Optional timestamp display (e.g., "@ 1.23s" for animation feedback) */
20
+ timestamp?: string;
21
+ /** Optional selected/highlighted text */
22
+ selectedText?: string;
23
+ /** Placeholder text for the textarea */
24
+ placeholder?: string;
25
+ /** Called when annotation is submitted with text */
26
+ onSubmit: (text: string) => void;
27
+ /** Called when popup is cancelled/dismissed */
28
+ onCancel: () => void;
29
+ /** Position styles (left, top) */
30
+ style?: React.CSSProperties;
31
+ /** Color variant for submit button */
32
+ variant?: "blue" | "green";
33
+ }
34
+ interface AnnotationPopupHandle {
35
+ /** Shake the popup (e.g., when user clicks outside) */
36
+ shake: () => void;
37
+ }
38
+ declare const AnnotationPopup: react.ForwardRefExoticComponent<AnnotationPopupProps & react.RefAttributes<AnnotationPopupHandle>>;
39
+ declare function AnnotationPopupPresence({ isOpen, ...props }: AnnotationPopupProps & {
40
+ isOpen: boolean;
41
+ }): react_jsx_runtime.JSX.Element;
42
+
43
+ interface AnnotationPopupCSSProps {
44
+ /** Element name to display in header */
45
+ element: string;
46
+ /** Optional timestamp display (e.g., "@ 1.23s" for animation feedback) */
47
+ timestamp?: string;
48
+ /** Optional selected/highlighted text */
49
+ selectedText?: string;
50
+ /** Placeholder text for the textarea */
51
+ placeholder?: string;
52
+ /** Initial value for textarea (for edit mode) */
53
+ initialValue?: string;
54
+ /** Label for submit button (default: "Add") */
55
+ submitLabel?: string;
56
+ /** Called when annotation is submitted with text */
57
+ onSubmit: (text: string) => void;
58
+ /** Called when popup is cancelled/dismissed */
59
+ onCancel: () => void;
60
+ /** Position styles (left, top) */
61
+ style?: React.CSSProperties;
62
+ /** Custom color for submit button and textarea focus (hex) */
63
+ accentColor?: string;
64
+ /** External exit state (parent controls exit animation) */
65
+ isExiting?: boolean;
66
+ /** Light mode styling */
67
+ lightMode?: boolean;
68
+ }
69
+ interface AnnotationPopupCSSHandle {
70
+ /** Shake the popup (e.g., when user clicks outside) */
71
+ shake: () => void;
72
+ }
73
+ declare const AnnotationPopupCSS: react.ForwardRefExoticComponent<AnnotationPopupCSSProps & react.RefAttributes<AnnotationPopupCSSHandle>>;
74
+
75
+ declare const IconClose: ({ size }: {
76
+ size?: number;
77
+ }) => react_jsx_runtime.JSX.Element;
78
+ declare const IconPlus: ({ size }: {
79
+ size?: number;
80
+ }) => react_jsx_runtime.JSX.Element;
81
+ declare const IconCheck: ({ size }: {
82
+ size?: number;
83
+ }) => react_jsx_runtime.JSX.Element;
84
+ declare const IconCheckSmall: ({ size }: {
85
+ size?: number;
86
+ }) => react_jsx_runtime.JSX.Element;
87
+ declare const IconListSparkle: ({ size, style, }: {
88
+ size?: number;
89
+ style?: React.CSSProperties;
90
+ }) => react_jsx_runtime.JSX.Element;
91
+ declare const IconHelp: ({ size }: {
92
+ size?: number;
93
+ }) => react_jsx_runtime.JSX.Element;
94
+ declare const IconCheckSmallAnimated: ({ size }: {
95
+ size?: number;
96
+ }) => react_jsx_runtime.JSX.Element;
97
+ declare const IconCopyAlt: ({ size }: {
98
+ size?: number;
99
+ }) => react_jsx_runtime.JSX.Element;
100
+ declare const IconCopyAnimated: ({ size, copied }: {
101
+ size?: number;
102
+ copied?: boolean;
103
+ }) => react_jsx_runtime.JSX.Element;
104
+ declare const IconEye: ({ size }: {
105
+ size?: number;
106
+ }) => react_jsx_runtime.JSX.Element;
107
+ declare const IconEyeAlt: ({ size }: {
108
+ size?: number;
109
+ }) => react_jsx_runtime.JSX.Element;
110
+ declare const IconEyeClosed: ({ size }: {
111
+ size?: number;
112
+ }) => react_jsx_runtime.JSX.Element;
113
+ declare const IconEyeAnimated: ({ size, isOpen }: {
114
+ size?: number;
115
+ isOpen?: boolean;
116
+ }) => react_jsx_runtime.JSX.Element;
117
+ declare const IconPausePlayAnimated: ({ size, isPaused }: {
118
+ size?: number;
119
+ isPaused?: boolean;
120
+ }) => react_jsx_runtime.JSX.Element;
121
+ declare const IconEyeMinus: ({ size }: {
122
+ size?: number;
123
+ }) => react_jsx_runtime.JSX.Element;
124
+ declare const IconGear: ({ size }: {
125
+ size?: number;
126
+ }) => react_jsx_runtime.JSX.Element;
127
+ declare const IconPauseAlt: ({ size }: {
128
+ size?: number;
129
+ }) => react_jsx_runtime.JSX.Element;
130
+ declare const IconPause: ({ size }: {
131
+ size?: number;
132
+ }) => react_jsx_runtime.JSX.Element;
133
+ declare const IconPlayAlt: ({ size }: {
134
+ size?: number;
135
+ }) => react_jsx_runtime.JSX.Element;
136
+ declare const IconTrashAlt: ({ size }: {
137
+ size?: number;
138
+ }) => react_jsx_runtime.JSX.Element;
139
+ declare const IconChatEllipsis: ({ size, style, }: {
140
+ size?: number;
141
+ style?: React.CSSProperties;
142
+ }) => react_jsx_runtime.JSX.Element;
143
+ declare const IconCheckmark: ({ size }: {
144
+ size?: number;
145
+ }) => react_jsx_runtime.JSX.Element;
146
+ declare const IconCheckmarkLarge: ({ size }: {
147
+ size?: number;
148
+ }) => react_jsx_runtime.JSX.Element;
149
+ declare const IconCheckmarkCircle: ({ size }: {
150
+ size?: number;
151
+ }) => react_jsx_runtime.JSX.Element;
152
+ declare const IconXmark: ({ size }: {
153
+ size?: number;
154
+ }) => react_jsx_runtime.JSX.Element;
155
+ declare const IconXmarkLarge: ({ size }: {
156
+ size?: number;
157
+ }) => react_jsx_runtime.JSX.Element;
158
+ declare const IconSun: ({ size }: {
159
+ size?: number;
160
+ }) => react_jsx_runtime.JSX.Element;
161
+ declare const IconMoon: ({ size }: {
162
+ size?: number;
163
+ }) => react_jsx_runtime.JSX.Element;
164
+ declare const AnimatedBunny: ({ size, color, }: {
165
+ size?: number;
166
+ color?: string;
167
+ }) => react_jsx_runtime.JSX.Element;
168
+
169
+ /**
170
+ * Gets a readable path for an element (e.g., "article > section > p")
171
+ */
172
+ declare function getElementPath(target: HTMLElement, maxDepth?: number): string;
173
+ /**
174
+ * Identifies an element and returns a human-readable name + path
175
+ */
176
+ declare function identifyElement(target: HTMLElement): {
177
+ name: string;
178
+ path: string;
179
+ };
180
+ /**
181
+ * Gets text content from element and siblings for context
182
+ */
183
+ declare function getNearbyText(element: HTMLElement): string;
184
+ /**
185
+ * Simplified element identifier for animation feedback (less verbose)
186
+ */
187
+ declare function identifyAnimationElement(target: HTMLElement): string;
188
+ /**
189
+ * Gets CSS class names from an element (cleaned of module hashes)
190
+ */
191
+ declare function getElementClasses(target: HTMLElement): string;
192
+
193
+ type Annotation = {
194
+ id: string;
195
+ x: number;
196
+ y: number;
197
+ comment: string;
198
+ element: string;
199
+ elementPath: string;
200
+ timestamp: number;
201
+ selectedText?: string;
202
+ boundingBox?: {
203
+ x: number;
204
+ y: number;
205
+ width: number;
206
+ height: number;
207
+ };
208
+ nearbyText?: string;
209
+ cssClasses?: string;
210
+ nearbyElements?: string;
211
+ computedStyles?: string;
212
+ fullPath?: string;
213
+ accessibility?: string;
214
+ isMultiSelect?: boolean;
215
+ isFixed?: boolean;
216
+ };
217
+
218
+ declare function getStorageKey(pathname: string): string;
219
+ declare function loadAnnotations<T = Annotation>(pathname: string): T[];
220
+ declare function saveAnnotations<T = Annotation>(pathname: string, annotations: T[]): void;
221
+
222
+ export { PageFeedbackToolbarCSS as Agentation, PageFeedbackToolbarCSS as AgentationCSS, AnimatedBunny, type Annotation, AnnotationPopup, AnnotationPopupCSS, type AnnotationPopupCSSHandle, type AnnotationPopupCSSProps, type AnnotationPopupHandle, AnnotationPopupPresence, type AnnotationPopupProps, type DemoAnnotation, IconChatEllipsis, IconCheck, IconCheckSmall, IconCheckSmallAnimated, IconCheckmark, IconCheckmarkCircle, IconCheckmarkLarge, IconClose, IconCopyAlt, IconCopyAnimated, IconEye, IconEyeAlt, IconEyeAnimated, IconEyeClosed, IconEyeMinus, IconGear, IconHelp, IconListSparkle, IconMoon, IconPause, IconPauseAlt, IconPausePlayAnimated, IconPlayAlt, IconPlus, IconSun, IconTrashAlt, IconXmark, IconXmarkLarge, PageFeedbackToolbarCSS, getElementClasses, getElementPath, getNearbyText, getStorageKey, identifyAnimationElement, identifyElement, loadAnnotations, saveAnnotations };