@crystallize/design-system 1.3.2 → 1.4.1

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 (246) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/TableComponent-I2YOOYOU.css +281 -0
  3. package/dist/TableComponent-QINOO453.mjs +1377 -0
  4. package/dist/arrow-clockwise-Z2G6UEGP.svg +1 -0
  5. package/dist/arrow-counterclockwise-2O5EYVJT.svg +1 -0
  6. package/dist/bg-color-HB2WDYGO.svg +1 -0
  7. package/dist/camera-CR7D2PNH.svg +1 -0
  8. package/dist/caret-right-fill-FFBNEXVX.svg +1 -0
  9. package/dist/chat-square-quote-CI6PUJHH.svg +1 -0
  10. package/dist/chevron-down-3FRWSIKS.svg +1 -0
  11. package/dist/chunk-VUXQZRSP.mjs +737 -0
  12. package/dist/clipboard-OSEFDF25.svg +1 -0
  13. package/dist/close-FH57ZMJF.svg +1 -0
  14. package/dist/code-SEVR6TIQ.svg +1 -0
  15. package/dist/copy-DMGDODUL.svg +1 -0
  16. package/dist/diagram-2-CEJUD2B4.svg +1 -0
  17. package/dist/download-JXUGIUCX.svg +1 -0
  18. package/dist/draggable-block-menu-KKHDNKJA.svg +1 -0
  19. package/dist/dropdown-more-BHZ5COKX.svg +1 -0
  20. package/dist/file-image-TIQPFJX4.svg +1 -0
  21. package/dist/filetype-gif-OG2BEYYK.svg +1 -0
  22. package/dist/font-color-J4GA3ZJO.svg +1 -0
  23. package/dist/font-family-ZU5N6TTE.svg +1 -0
  24. package/dist/gear-ICMT4NTP.svg +1 -0
  25. package/dist/horizontal-rule-N6RD2V7H.svg +1 -0
  26. package/dist/indent-MJ6JIMCK.svg +1 -0
  27. package/dist/index.css +2711 -315
  28. package/dist/index.d.ts +145 -40
  29. package/dist/index.js +10376 -1481
  30. package/dist/index.mjs +7609 -746
  31. package/dist/journal-code-XUT44HDV.svg +1 -0
  32. package/dist/justify-J7X5JEEX.svg +1 -0
  33. package/dist/link-W52N4JKZ.svg +1 -0
  34. package/dist/list-ol-2ZEUN4Z7.svg +1 -0
  35. package/dist/list-ul-DVKNUP47.svg +1 -0
  36. package/dist/lock-WCYOZOHW.svg +1 -0
  37. package/dist/lock-fill-JZSKOSHK.svg +1 -0
  38. package/dist/markdown-4BGQNLLT.svg +1 -0
  39. package/dist/mic-H5FNOMM7.svg +1 -0
  40. package/dist/outdent-2LUMUMIP.svg +1 -0
  41. package/dist/paint-bucket-VCISMZTH.svg +1 -0
  42. package/dist/palette-SWGFPRWZ.svg +1 -0
  43. package/dist/pencil-fill-STFSC26F.svg +1 -0
  44. package/dist/plug-HGGGEVS3.svg +1 -0
  45. package/dist/plug-fill-OTG3U4TN.svg +1 -0
  46. package/dist/plus-CQISIKEC.svg +1 -0
  47. package/dist/plus-slash-minus-N22JU4TI.svg +1 -0
  48. package/dist/prettier-WUJ7B5NV.svg +1 -0
  49. package/dist/prettier-error-DYJSLYDP.svg +1 -0
  50. package/dist/square-check-UTG6FU6D.svg +1 -0
  51. package/dist/success-YVXUMPEZ.svg +1 -0
  52. package/dist/table-BR6DI4ZQ.svg +1 -0
  53. package/dist/text-center-UQI6PAEF.svg +1 -0
  54. package/dist/text-left-KT2B6TR3.svg +1 -0
  55. package/dist/text-paragraph-MFTUIIQG.svg +1 -0
  56. package/dist/text-right-SKELPISG.svg +1 -0
  57. package/dist/trash-UOM6D7TD.svg +1 -0
  58. package/dist/type-bold-PY7COC3N.svg +1 -0
  59. package/dist/type-h1-6KJP7YOM.svg +1 -0
  60. package/dist/type-h2-VHI2USC3.svg +1 -0
  61. package/dist/type-h3-JIU77CHO.svg +1 -0
  62. package/dist/type-h4-P5EHKDAL.svg +1 -0
  63. package/dist/type-h5-CS2KYVRG.svg +1 -0
  64. package/dist/type-h6-J2O74LJZ.svg +1 -0
  65. package/dist/type-italic-3DSFOSG2.svg +1 -0
  66. package/dist/type-strikethrough-E2KKQFSX.svg +1 -0
  67. package/dist/type-subscript-BMPTRIBU.svg +1 -0
  68. package/dist/type-superscript-EDF6EPAA.svg +1 -0
  69. package/dist/type-underline-CBFA5VLF.svg +1 -0
  70. package/dist/upload-Q6KICGZW.svg +1 -0
  71. package/dist/user-EOI2NEFZ.svg +1 -0
  72. package/package.json +30 -6
  73. package/src/dialog/dialog.tsx +1 -0
  74. package/src/icon-button/icon-button.css +16 -14
  75. package/src/index.ts +4 -4
  76. package/src/input/input.css +1 -1
  77. package/src/input-with-label/input-with-label.css +1 -1
  78. package/src/rich-text-editor/appSettings.ts +28 -0
  79. package/src/rich-text-editor/context/SettingsContext.tsx +71 -0
  80. package/src/rich-text-editor/context/SharedAutocompleteContext.tsx +60 -0
  81. package/src/rich-text-editor/context/SharedHistoryContext.tsx +25 -0
  82. package/src/rich-text-editor/hooks/useReport.ts +64 -0
  83. package/src/rich-text-editor/images/cat-typing.gif +0 -0
  84. package/src/rich-text-editor/images/emoji/1F600.png +0 -0
  85. package/src/rich-text-editor/images/emoji/1F641.png +0 -0
  86. package/src/rich-text-editor/images/emoji/1F642.png +0 -0
  87. package/src/rich-text-editor/images/emoji/2764.png +0 -0
  88. package/src/rich-text-editor/images/emoji/LICENSE.md +5 -0
  89. package/src/rich-text-editor/images/icons/LICENSE.md +5 -0
  90. package/src/rich-text-editor/images/icons/arrow-clockwise.svg +1 -0
  91. package/src/rich-text-editor/images/icons/arrow-counterclockwise.svg +1 -0
  92. package/src/rich-text-editor/images/icons/bg-color.svg +1 -0
  93. package/src/rich-text-editor/images/icons/camera.svg +1 -0
  94. package/src/rich-text-editor/images/icons/card-checklist.svg +1 -0
  95. package/src/rich-text-editor/images/icons/caret-right-fill.svg +1 -0
  96. package/src/rich-text-editor/images/icons/chat-left-text.svg +1 -0
  97. package/src/rich-text-editor/images/icons/chat-right-dots.svg +1 -0
  98. package/src/rich-text-editor/images/icons/chat-right-text.svg +1 -0
  99. package/src/rich-text-editor/images/icons/chat-right.svg +1 -0
  100. package/src/rich-text-editor/images/icons/chat-square-quote.svg +1 -0
  101. package/src/rich-text-editor/images/icons/chevron-down.svg +1 -0
  102. package/src/rich-text-editor/images/icons/clipboard.svg +1 -0
  103. package/src/rich-text-editor/images/icons/close.svg +1 -0
  104. package/src/rich-text-editor/images/icons/code.svg +1 -0
  105. package/src/rich-text-editor/images/icons/comments.svg +1 -0
  106. package/src/rich-text-editor/images/icons/copy.svg +1 -0
  107. package/src/rich-text-editor/images/icons/diagram-2.svg +1 -0
  108. package/src/rich-text-editor/images/icons/download.svg +1 -0
  109. package/src/rich-text-editor/images/icons/draggable-block-menu.svg +1 -0
  110. package/src/rich-text-editor/images/icons/dropdown-more.svg +1 -0
  111. package/src/rich-text-editor/images/icons/figma.svg +1 -0
  112. package/src/rich-text-editor/images/icons/file-image.svg +1 -0
  113. package/src/rich-text-editor/images/icons/filetype-gif.svg +1 -0
  114. package/src/rich-text-editor/images/icons/font-color.svg +1 -0
  115. package/src/rich-text-editor/images/icons/font-family.svg +1 -0
  116. package/src/rich-text-editor/images/icons/gear.svg +1 -0
  117. package/src/rich-text-editor/images/icons/horizontal-rule.svg +1 -0
  118. package/src/rich-text-editor/images/icons/indent.svg +1 -0
  119. package/src/rich-text-editor/images/icons/journal-code.svg +1 -0
  120. package/src/rich-text-editor/images/icons/journal-text.svg +1 -0
  121. package/src/rich-text-editor/images/icons/justify.svg +1 -0
  122. package/src/rich-text-editor/images/icons/link.svg +1 -0
  123. package/src/rich-text-editor/images/icons/list-ol.svg +1 -0
  124. package/src/rich-text-editor/images/icons/list-ul.svg +1 -0
  125. package/src/rich-text-editor/images/icons/lock-fill.svg +1 -0
  126. package/src/rich-text-editor/images/icons/lock.svg +1 -0
  127. package/src/rich-text-editor/images/icons/markdown.svg +1 -0
  128. package/src/rich-text-editor/images/icons/mic.svg +1 -0
  129. package/src/rich-text-editor/images/icons/outdent.svg +1 -0
  130. package/src/rich-text-editor/images/icons/paint-bucket.svg +1 -0
  131. package/src/rich-text-editor/images/icons/palette.svg +1 -0
  132. package/src/rich-text-editor/images/icons/pencil-fill.svg +1 -0
  133. package/src/rich-text-editor/images/icons/plug-fill.svg +1 -0
  134. package/src/rich-text-editor/images/icons/plug.svg +1 -0
  135. package/src/rich-text-editor/images/icons/plus-slash-minus.svg +1 -0
  136. package/src/rich-text-editor/images/icons/plus.svg +1 -0
  137. package/src/rich-text-editor/images/icons/prettier-error.svg +1 -0
  138. package/src/rich-text-editor/images/icons/prettier.svg +1 -0
  139. package/src/rich-text-editor/images/icons/send.svg +1 -0
  140. package/src/rich-text-editor/images/icons/square-check.svg +1 -0
  141. package/src/rich-text-editor/images/icons/sticky.svg +1 -0
  142. package/src/rich-text-editor/images/icons/success.svg +1 -0
  143. package/src/rich-text-editor/images/icons/table.svg +1 -0
  144. package/src/rich-text-editor/images/icons/text-center.svg +1 -0
  145. package/src/rich-text-editor/images/icons/text-left.svg +1 -0
  146. package/src/rich-text-editor/images/icons/text-paragraph.svg +1 -0
  147. package/src/rich-text-editor/images/icons/text-right.svg +1 -0
  148. package/src/rich-text-editor/images/icons/trash.svg +1 -0
  149. package/src/rich-text-editor/images/icons/trash3.svg +1 -0
  150. package/src/rich-text-editor/images/icons/tweet.svg +1 -0
  151. package/src/rich-text-editor/images/icons/type-bold.svg +1 -0
  152. package/src/rich-text-editor/images/icons/type-h1.svg +1 -0
  153. package/src/rich-text-editor/images/icons/type-h2.svg +1 -0
  154. package/src/rich-text-editor/images/icons/type-h3.svg +1 -0
  155. package/src/rich-text-editor/images/icons/type-h4.svg +1 -0
  156. package/src/rich-text-editor/images/icons/type-h5.svg +1 -0
  157. package/src/rich-text-editor/images/icons/type-h6.svg +1 -0
  158. package/src/rich-text-editor/images/icons/type-italic.svg +1 -0
  159. package/src/rich-text-editor/images/icons/type-strikethrough.svg +1 -0
  160. package/src/rich-text-editor/images/icons/type-subscript.svg +1 -0
  161. package/src/rich-text-editor/images/icons/type-superscript.svg +1 -0
  162. package/src/rich-text-editor/images/icons/type-underline.svg +1 -0
  163. package/src/rich-text-editor/images/icons/upload.svg +1 -0
  164. package/src/rich-text-editor/images/icons/user.svg +1 -0
  165. package/src/rich-text-editor/images/icons/youtube.svg +1 -0
  166. package/src/rich-text-editor/images/image/LICENSE.md +5 -0
  167. package/src/rich-text-editor/images/landscape.jpg +0 -0
  168. package/src/rich-text-editor/images/logo.svg +1 -0
  169. package/src/rich-text-editor/images/yellow-flower-small.jpg +0 -0
  170. package/src/rich-text-editor/images/yellow-flower.jpg +0 -0
  171. package/src/rich-text-editor/index.ts +1 -0
  172. package/src/rich-text-editor/model/crystallize-rich-text-types/code.ts +39 -0
  173. package/src/rich-text-editor/model/crystallize-rich-text-types/headings.ts +12 -0
  174. package/src/rich-text-editor/model/crystallize-rich-text-types/index.ts +69 -0
  175. package/src/rich-text-editor/model/crystallize-rich-text-types/link.ts +9 -0
  176. package/src/rich-text-editor/model/crystallize-rich-text-types/table.ts +16 -0
  177. package/src/rich-text-editor/model/crystallize-to-lexical.ts +186 -0
  178. package/src/rich-text-editor/model/lexical-to-crystallize.ts +232 -0
  179. package/src/rich-text-editor/nodes/AutocompleteNode.tsx +96 -0
  180. package/src/rich-text-editor/nodes/BaseNodes.ts +45 -0
  181. package/src/rich-text-editor/nodes/KeywordNode.ts +73 -0
  182. package/src/rich-text-editor/nodes/TableCellNodes.ts +31 -0
  183. package/src/rich-text-editor/nodes/TableComponent.tsx +1547 -0
  184. package/src/rich-text-editor/nodes/TableNode.tsx +398 -0
  185. package/src/rich-text-editor/plugins/ActionsPlugin/index.tsx +83 -0
  186. package/src/rich-text-editor/plugins/AutoLinkPlugin/index.tsx +47 -0
  187. package/src/rich-text-editor/plugins/AutocompletePlugin/index.tsx +2536 -0
  188. package/src/rich-text-editor/plugins/CodeActionMenuPlugin/components/CopyButton/index.tsx +60 -0
  189. package/src/rich-text-editor/plugins/CodeActionMenuPlugin/components/PrettierButton/index.css +14 -0
  190. package/src/rich-text-editor/plugins/CodeActionMenuPlugin/components/PrettierButton/index.tsx +140 -0
  191. package/src/rich-text-editor/plugins/CodeActionMenuPlugin/index.css +46 -0
  192. package/src/rich-text-editor/plugins/CodeActionMenuPlugin/index.tsx +155 -0
  193. package/src/rich-text-editor/plugins/CodeHighlightPlugin/index.ts +21 -0
  194. package/src/rich-text-editor/plugins/ComponentPickerPlugin/index.tsx +320 -0
  195. package/src/rich-text-editor/plugins/DragDropPastePlugin/index.ts +40 -0
  196. package/src/rich-text-editor/plugins/DraggableBlockPlugin/index.css +36 -0
  197. package/src/rich-text-editor/plugins/DraggableBlockPlugin/index.tsx +368 -0
  198. package/src/rich-text-editor/plugins/FloatingLinkEditorPlugin/index.css +40 -0
  199. package/src/rich-text-editor/plugins/FloatingLinkEditorPlugin/index.tsx +305 -0
  200. package/src/rich-text-editor/plugins/FloatingTextFormatToolbarPlugin/index.css +128 -0
  201. package/src/rich-text-editor/plugins/FloatingTextFormatToolbarPlugin/index.tsx +351 -0
  202. package/src/rich-text-editor/plugins/LinkPlugin/index.tsx +16 -0
  203. package/src/rich-text-editor/plugins/ListMaxIndentLevelPlugin/index.ts +86 -0
  204. package/src/rich-text-editor/plugins/MarkdownShortcutPlugin/index.tsx +16 -0
  205. package/src/rich-text-editor/plugins/MarkdownTransformers/index.ts +195 -0
  206. package/src/rich-text-editor/plugins/MaxLengthPlugin/index.tsx +49 -0
  207. package/src/rich-text-editor/plugins/SpeechToTextPlugin/index.ts +113 -0
  208. package/src/rich-text-editor/plugins/TabFocusPlugin/index.tsx +65 -0
  209. package/src/rich-text-editor/plugins/TableActionMenuPlugin/index.tsx +481 -0
  210. package/src/rich-text-editor/plugins/TableCellResizer/index.css +12 -0
  211. package/src/rich-text-editor/plugins/TableCellResizer/index.tsx +386 -0
  212. package/src/rich-text-editor/plugins/TablePlugin.tsx +190 -0
  213. package/src/rich-text-editor/plugins/ToolbarPlugin/index.tsx +726 -0
  214. package/src/rich-text-editor/plugins/TreeViewPlugin/index.tsx +25 -0
  215. package/src/rich-text-editor/plugins/TypingPerfPlugin/index.ts +117 -0
  216. package/src/rich-text-editor/rich-text-editor.css +1396 -0
  217. package/src/rich-text-editor/rich-text-editor.stories.tsx +385 -0
  218. package/src/rich-text-editor/rich-text-editor.tsx +228 -0
  219. package/src/rich-text-editor/tests/rich-text-editor-basic-rendering.test.tsx +47 -0
  220. package/src/rich-text-editor/tests/rich-text-editor-code.test.tsx +39 -0
  221. package/src/rich-text-editor/tests/rich-text-editor-model-basics.test.tsx +56 -0
  222. package/src/rich-text-editor/tests/rich-text-editor-model-conversions.test.tsx +195 -0
  223. package/src/rich-text-editor/tests/rich-text-editor-onchange.test.tsx +37 -0
  224. package/src/rich-text-editor/tests/rich-text-editor-quote.test.tsx +36 -0
  225. package/src/rich-text-editor/tests/rich-text-editor-text-formats.test.tsx +135 -0
  226. package/src/rich-text-editor/tests/rich-text-editor-typing.test.tsx +73 -0
  227. package/src/rich-text-editor/tests/utils.ts +23 -0
  228. package/src/rich-text-editor/themes/PlaygroundEditorTheme.css +433 -0
  229. package/src/rich-text-editor/themes/PlaygroundEditorTheme.ts +113 -0
  230. package/src/rich-text-editor/types.ts +5 -0
  231. package/src/rich-text-editor/ui/ContentEditable.css +13 -0
  232. package/src/rich-text-editor/ui/ContentEditable.tsx +15 -0
  233. package/src/rich-text-editor/ui/LinkPreview.css +57 -0
  234. package/src/rich-text-editor/ui/LinkPreview.tsx +169 -0
  235. package/src/rich-text-editor/utils/environment.ts +1 -0
  236. package/src/rich-text-editor/utils/getDOMRangeRect.ts +42 -0
  237. package/src/rich-text-editor/utils/getSelectedNode.ts +27 -0
  238. package/src/rich-text-editor/utils/guard.ts +10 -0
  239. package/src/rich-text-editor/utils/isMobileWidth.ts +7 -0
  240. package/src/rich-text-editor/utils/joinClasses.ts +13 -0
  241. package/src/rich-text-editor/utils/point.ts +55 -0
  242. package/src/rich-text-editor/utils/rect.ts +158 -0
  243. package/src/rich-text-editor/utils/setFloatingElemPosition.ts +46 -0
  244. package/src/rich-text-editor/utils/swipe.ts +127 -0
  245. package/src/rich-text-editor/utils/url.ts +33 -0
  246. package/src/Tokens.stories.tsx +0 -18
@@ -0,0 +1,2536 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import type {
10
+ GridSelection,
11
+ NodeKey,
12
+ NodeSelection,
13
+ RangeSelection,
14
+ } from 'lexical';
15
+
16
+ import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';
17
+ import {$isAtNodeEnd} from '@lexical/selection';
18
+ import {mergeRegister} from '@lexical/utils';
19
+ import {
20
+ $createTextNode,
21
+ $getNodeByKey,
22
+ $getSelection,
23
+ $isRangeSelection,
24
+ $isTextNode,
25
+ $setSelection,
26
+ COMMAND_PRIORITY_LOW,
27
+ KEY_ARROW_RIGHT_COMMAND,
28
+ KEY_TAB_COMMAND,
29
+ } from 'lexical';
30
+ import {useCallback, useEffect} from 'react';
31
+
32
+ import {useSharedAutocompleteContext} from '../../context/SharedAutocompleteContext';
33
+ import {
34
+ $createAutocompleteNode,
35
+ AutocompleteNode,
36
+ } from '../../nodes/AutocompleteNode';
37
+ import {addSwipeRightListener} from '../../utils/swipe';
38
+
39
+ type SearchPromise = {
40
+ dismiss: () => void;
41
+ promise: Promise<null | string>;
42
+ };
43
+
44
+ export const uuid = Math.random()
45
+ .toString(36)
46
+ .replace(/[^a-z]+/g, '')
47
+ .substr(0, 5);
48
+
49
+ // TODO lookup should be custom
50
+ function $search(
51
+ selection: null | RangeSelection | NodeSelection | GridSelection,
52
+ ): [boolean, string] {
53
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
54
+ return [false, ''];
55
+ }
56
+ const node = selection.getNodes()[0];
57
+ const anchor = selection.anchor;
58
+ // Check siblings?
59
+ if (!$isTextNode(node) || !node.isSimpleText() || !$isAtNodeEnd(anchor)) {
60
+ return [false, ''];
61
+ }
62
+ const word = [];
63
+ const text = node.getTextContent();
64
+ let i = node.getTextContentSize();
65
+ let c;
66
+ while (i-- && i >= 0 && (c = text[i]) !== ' ') {
67
+ word.push(c);
68
+ }
69
+ if (word.length === 0) {
70
+ return [false, ''];
71
+ }
72
+ return [true, word.reverse().join('')];
73
+ }
74
+
75
+ // TODO query should be custom
76
+ function useQuery(): (searchText: string) => SearchPromise {
77
+ return useCallback((searchText: string) => {
78
+ const server = new AutocompleteServer();
79
+ console.time('query');
80
+ const response = server.query(searchText);
81
+ console.timeEnd('query');
82
+ return response;
83
+ }, []);
84
+ }
85
+
86
+ export default function AutocompletePlugin(): JSX.Element | null {
87
+ const [editor] = useLexicalComposerContext();
88
+ const [, setSuggestion] = useSharedAutocompleteContext();
89
+ const query = useQuery();
90
+
91
+ useEffect(() => {
92
+ let autocompleteNodeKey: null | NodeKey = null;
93
+ let lastMatch: null | string = null;
94
+ let lastSuggestion: null | string = null;
95
+ let searchPromise: null | SearchPromise = null;
96
+ function $clearSuggestion() {
97
+ const autocompleteNode =
98
+ autocompleteNodeKey !== null
99
+ ? $getNodeByKey(autocompleteNodeKey)
100
+ : null;
101
+ if (autocompleteNode !== null && autocompleteNode.isAttached()) {
102
+ autocompleteNode.remove();
103
+ autocompleteNodeKey = null;
104
+ }
105
+ if (searchPromise !== null) {
106
+ searchPromise.dismiss();
107
+ searchPromise = null;
108
+ }
109
+ lastMatch = null;
110
+ lastSuggestion = null;
111
+ setSuggestion(null);
112
+ }
113
+ function updateAsyncSuggestion(
114
+ refSearchPromise: SearchPromise,
115
+ newSuggestion: null | string,
116
+ ) {
117
+ if (searchPromise !== refSearchPromise || newSuggestion === null) {
118
+ // Outdated or no suggestion
119
+ return;
120
+ }
121
+ editor.update(
122
+ () => {
123
+ const selection = $getSelection();
124
+ const [hasMatch, match] = $search(selection);
125
+ if (
126
+ !hasMatch ||
127
+ match !== lastMatch ||
128
+ !$isRangeSelection(selection)
129
+ ) {
130
+ // Outdated
131
+ return;
132
+ }
133
+ const selectionCopy = selection.clone();
134
+ const node = $createAutocompleteNode(uuid);
135
+ autocompleteNodeKey = node.getKey();
136
+ selection.insertNodes([node]);
137
+ $setSelection(selectionCopy);
138
+ lastSuggestion = newSuggestion;
139
+ setSuggestion(newSuggestion);
140
+ },
141
+ {tag: 'history-merge'},
142
+ );
143
+ }
144
+
145
+ function handleAutocompleteNodeTransform(node: AutocompleteNode) {
146
+ const key = node.getKey();
147
+ if (node.__uuid === uuid && key !== autocompleteNodeKey) {
148
+ // Max one Autocomplete node per session
149
+ $clearSuggestion();
150
+ }
151
+ }
152
+ function handleUpdate() {
153
+ editor.update(() => {
154
+ const selection = $getSelection();
155
+ const [hasMatch, match] = $search(selection);
156
+ if (!hasMatch) {
157
+ $clearSuggestion();
158
+ return;
159
+ }
160
+ if (match === lastMatch) {
161
+ return;
162
+ }
163
+ $clearSuggestion();
164
+ searchPromise = query(match);
165
+ searchPromise.promise
166
+ .then((newSuggestion) => {
167
+ if (searchPromise !== null) {
168
+ updateAsyncSuggestion(searchPromise, newSuggestion);
169
+ }
170
+ })
171
+ .catch((e) => {
172
+ console.error(e);
173
+ });
174
+ lastMatch = match;
175
+ });
176
+ }
177
+ function $handleAutocompleteIntent(): boolean {
178
+ if (lastSuggestion === null || autocompleteNodeKey === null) {
179
+ return false;
180
+ }
181
+ const autocompleteNode = $getNodeByKey(autocompleteNodeKey);
182
+ if (autocompleteNode === null) {
183
+ return false;
184
+ }
185
+ const textNode = $createTextNode(lastSuggestion);
186
+ autocompleteNode.replace(textNode);
187
+ textNode.selectNext();
188
+ $clearSuggestion();
189
+ return true;
190
+ }
191
+ function $handleKeypressCommand(e: Event) {
192
+ if ($handleAutocompleteIntent()) {
193
+ e.preventDefault();
194
+ return true;
195
+ }
196
+ return false;
197
+ }
198
+ function handleSwipeRight(_force: number, e: TouchEvent) {
199
+ editor.update(() => {
200
+ if ($handleAutocompleteIntent()) {
201
+ e.preventDefault();
202
+ }
203
+ });
204
+ }
205
+ function unmountSuggestion() {
206
+ editor.update(() => {
207
+ $clearSuggestion();
208
+ });
209
+ }
210
+
211
+ const rootElem = editor.getRootElement();
212
+
213
+ return mergeRegister(
214
+ editor.registerNodeTransform(
215
+ AutocompleteNode,
216
+ handleAutocompleteNodeTransform,
217
+ ),
218
+ editor.registerUpdateListener(handleUpdate),
219
+ editor.registerCommand(
220
+ KEY_TAB_COMMAND,
221
+ $handleKeypressCommand,
222
+ COMMAND_PRIORITY_LOW,
223
+ ),
224
+ editor.registerCommand(
225
+ KEY_ARROW_RIGHT_COMMAND,
226
+ $handleKeypressCommand,
227
+ COMMAND_PRIORITY_LOW,
228
+ ),
229
+ ...(rootElem !== null
230
+ ? [addSwipeRightListener(rootElem, handleSwipeRight)]
231
+ : []),
232
+ unmountSuggestion,
233
+ );
234
+ }, [editor, query, setSuggestion]);
235
+
236
+ return null;
237
+ }
238
+
239
+ /*
240
+ * Simulate an asynchronous autocomplete server (typical in more common use cases like GMail where
241
+ * the data is not static).
242
+ */
243
+ class AutocompleteServer {
244
+ DATABASE = DICTIONARY;
245
+ LATENCY = 200;
246
+
247
+ query = (searchText: string): SearchPromise => {
248
+ let isDismissed = false;
249
+
250
+ const dismiss = () => {
251
+ isDismissed = true;
252
+ };
253
+ const promise: Promise<null | string> = new Promise((resolve, reject) => {
254
+ setTimeout(() => {
255
+ if (isDismissed) {
256
+ // TODO cache result
257
+ return reject('Dismissed');
258
+ }
259
+ const searchTextLength = searchText.length;
260
+ if (searchText === '' || searchTextLength < 4) {
261
+ return resolve(null);
262
+ }
263
+ const char0 = searchText.charCodeAt(0);
264
+ const isCapitalized = char0 >= 65 && char0 <= 90;
265
+ const caseInsensitiveSearchText = isCapitalized
266
+ ? String.fromCharCode(char0 + 32) + searchText.substring(1)
267
+ : searchText;
268
+ const match = this.DATABASE.find(
269
+ (dictionaryWord) =>
270
+ dictionaryWord.startsWith(caseInsensitiveSearchText) ?? null,
271
+ );
272
+ if (match === undefined) {
273
+ return resolve(null);
274
+ }
275
+ const matchCapitalized = isCapitalized
276
+ ? String.fromCharCode(match.charCodeAt(0) - 32) + match.substring(1)
277
+ : match;
278
+ const autocompleteChunk = matchCapitalized.substring(searchTextLength);
279
+ if (autocompleteChunk === '') {
280
+ return resolve(null);
281
+ }
282
+ return resolve(autocompleteChunk);
283
+ }, this.LATENCY);
284
+ });
285
+
286
+ return {
287
+ dismiss,
288
+ promise,
289
+ };
290
+ };
291
+ }
292
+
293
+ // https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-long.txt
294
+ const DICTIONARY = [
295
+ 'information',
296
+ 'available',
297
+ 'copyright',
298
+ 'university',
299
+ 'management',
300
+ 'international',
301
+ 'development',
302
+ 'education',
303
+ 'community',
304
+ 'technology',
305
+ 'following',
306
+ 'resources',
307
+ 'including',
308
+ 'directory',
309
+ 'government',
310
+ 'department',
311
+ 'description',
312
+ 'insurance',
313
+ 'different',
314
+ 'categories',
315
+ 'conditions',
316
+ 'accessories',
317
+ 'september',
318
+ 'questions',
319
+ 'application',
320
+ 'financial',
321
+ 'equipment',
322
+ 'performance',
323
+ 'experience',
324
+ 'important',
325
+ 'activities',
326
+ 'additional',
327
+ 'something',
328
+ 'professional',
329
+ 'committee',
330
+ 'washington',
331
+ 'california',
332
+ 'reference',
333
+ 'companies',
334
+ 'computers',
335
+ 'president',
336
+ 'australia',
337
+ 'discussion',
338
+ 'entertainment',
339
+ 'agreement',
340
+ 'marketing',
341
+ 'association',
342
+ 'collection',
343
+ 'solutions',
344
+ 'electronics',
345
+ 'technical',
346
+ 'microsoft',
347
+ 'conference',
348
+ 'environment',
349
+ 'statement',
350
+ 'downloads',
351
+ 'applications',
352
+ 'requirements',
353
+ 'individual',
354
+ 'subscribe',
355
+ 'everything',
356
+ 'production',
357
+ 'commercial',
358
+ 'advertising',
359
+ 'treatment',
360
+ 'newsletter',
361
+ 'knowledge',
362
+ 'currently',
363
+ 'construction',
364
+ 'registered',
365
+ 'protection',
366
+ 'engineering',
367
+ 'published',
368
+ 'corporate',
369
+ 'customers',
370
+ 'materials',
371
+ 'countries',
372
+ 'standards',
373
+ 'political',
374
+ 'advertise',
375
+ 'environmental',
376
+ 'availability',
377
+ 'employment',
378
+ 'commission',
379
+ 'administration',
380
+ 'institute',
381
+ 'sponsored',
382
+ 'electronic',
383
+ 'condition',
384
+ 'effective',
385
+ 'organization',
386
+ 'selection',
387
+ 'corporation',
388
+ 'executive',
389
+ 'necessary',
390
+ 'according',
391
+ 'particular',
392
+ 'facilities',
393
+ 'opportunities',
394
+ 'appropriate',
395
+ 'statistics',
396
+ 'investment',
397
+ 'christmas',
398
+ 'registration',
399
+ 'furniture',
400
+ 'wednesday',
401
+ 'structure',
402
+ 'distribution',
403
+ 'industrial',
404
+ 'potential',
405
+ 'responsible',
406
+ 'communications',
407
+ 'associated',
408
+ 'foundation',
409
+ 'documents',
410
+ 'communication',
411
+ 'independent',
412
+ 'operating',
413
+ 'developed',
414
+ 'telephone',
415
+ 'population',
416
+ 'navigation',
417
+ 'operations',
418
+ 'therefore',
419
+ 'christian',
420
+ 'understand',
421
+ 'publications',
422
+ 'worldwide',
423
+ 'connection',
424
+ 'publisher',
425
+ 'introduction',
426
+ 'properties',
427
+ 'accommodation',
428
+ 'excellent',
429
+ 'opportunity',
430
+ 'assessment',
431
+ 'especially',
432
+ 'interface',
433
+ 'operation',
434
+ 'restaurants',
435
+ 'beautiful',
436
+ 'locations',
437
+ 'significant',
438
+ 'technologies',
439
+ 'manufacturer',
440
+ 'providing',
441
+ 'authority',
442
+ 'considered',
443
+ 'programme',
444
+ 'enterprise',
445
+ 'educational',
446
+ 'employees',
447
+ 'alternative',
448
+ 'processing',
449
+ 'responsibility',
450
+ 'resolution',
451
+ 'publication',
452
+ 'relations',
453
+ 'photography',
454
+ 'components',
455
+ 'assistance',
456
+ 'completed',
457
+ 'organizations',
458
+ 'otherwise',
459
+ 'transportation',
460
+ 'disclaimer',
461
+ 'membership',
462
+ 'recommended',
463
+ 'background',
464
+ 'character',
465
+ 'maintenance',
466
+ 'functions',
467
+ 'trademarks',
468
+ 'phentermine',
469
+ 'submitted',
470
+ 'television',
471
+ 'interested',
472
+ 'throughout',
473
+ 'established',
474
+ 'programming',
475
+ 'regarding',
476
+ 'instructions',
477
+ 'increased',
478
+ 'understanding',
479
+ 'beginning',
480
+ 'associates',
481
+ 'instruments',
482
+ 'businesses',
483
+ 'specified',
484
+ 'restaurant',
485
+ 'procedures',
486
+ 'relationship',
487
+ 'traditional',
488
+ 'sometimes',
489
+ 'themselves',
490
+ 'transport',
491
+ 'interesting',
492
+ 'evaluation',
493
+ 'implementation',
494
+ 'galleries',
495
+ 'references',
496
+ 'presented',
497
+ 'literature',
498
+ 'respective',
499
+ 'definition',
500
+ 'secretary',
501
+ 'networking',
502
+ 'australian',
503
+ 'magazines',
504
+ 'francisco',
505
+ 'individuals',
506
+ 'guidelines',
507
+ 'installation',
508
+ 'described',
509
+ 'attention',
510
+ 'difference',
511
+ 'regulations',
512
+ 'certificate',
513
+ 'directions',
514
+ 'documentation',
515
+ 'automotive',
516
+ 'successful',
517
+ 'communities',
518
+ 'situation',
519
+ 'publishing',
520
+ 'emergency',
521
+ 'developing',
522
+ 'determine',
523
+ 'temperature',
524
+ 'announcements',
525
+ 'historical',
526
+ 'ringtones',
527
+ 'difficult',
528
+ 'scientific',
529
+ 'satellite',
530
+ 'particularly',
531
+ 'functional',
532
+ 'monitoring',
533
+ 'architecture',
534
+ 'recommend',
535
+ 'dictionary',
536
+ 'accounting',
537
+ 'manufacturing',
538
+ 'professor',
539
+ 'generally',
540
+ 'continued',
541
+ 'techniques',
542
+ 'permission',
543
+ 'generation',
544
+ 'component',
545
+ 'guarantee',
546
+ 'processes',
547
+ 'interests',
548
+ 'paperback',
549
+ 'classifieds',
550
+ 'supported',
551
+ 'competition',
552
+ 'providers',
553
+ 'characters',
554
+ 'thousands',
555
+ 'apartments',
556
+ 'generated',
557
+ 'administrative',
558
+ 'practices',
559
+ 'reporting',
560
+ 'essential',
561
+ 'affiliate',
562
+ 'immediately',
563
+ 'designated',
564
+ 'integrated',
565
+ 'configuration',
566
+ 'comprehensive',
567
+ 'universal',
568
+ 'presentation',
569
+ 'languages',
570
+ 'compliance',
571
+ 'improvement',
572
+ 'pennsylvania',
573
+ 'challenge',
574
+ 'acceptance',
575
+ 'strategies',
576
+ 'affiliates',
577
+ 'multimedia',
578
+ 'certified',
579
+ 'computing',
580
+ 'interactive',
581
+ 'procedure',
582
+ 'leadership',
583
+ 'religious',
584
+ 'breakfast',
585
+ 'developer',
586
+ 'approximately',
587
+ 'recommendations',
588
+ 'comparison',
589
+ 'automatically',
590
+ 'minnesota',
591
+ 'adventure',
592
+ 'institutions',
593
+ 'assistant',
594
+ 'advertisement',
595
+ 'headlines',
596
+ 'yesterday',
597
+ 'determined',
598
+ 'wholesale',
599
+ 'extension',
600
+ 'statements',
601
+ 'completely',
602
+ 'electrical',
603
+ 'applicable',
604
+ 'manufacturers',
605
+ 'classical',
606
+ 'dedicated',
607
+ 'direction',
608
+ 'basketball',
609
+ 'wisconsin',
610
+ 'personnel',
611
+ 'identified',
612
+ 'professionals',
613
+ 'advantage',
614
+ 'newsletters',
615
+ 'estimated',
616
+ 'anonymous',
617
+ 'miscellaneous',
618
+ 'integration',
619
+ 'interview',
620
+ 'framework',
621
+ 'installed',
622
+ 'massachusetts',
623
+ 'associate',
624
+ 'frequently',
625
+ 'discussions',
626
+ 'laboratory',
627
+ 'destination',
628
+ 'intelligence',
629
+ 'specifications',
630
+ 'tripadvisor',
631
+ 'residential',
632
+ 'decisions',
633
+ 'industries',
634
+ 'partnership',
635
+ 'editorial',
636
+ 'expression',
637
+ 'provisions',
638
+ 'principles',
639
+ 'suggestions',
640
+ 'replacement',
641
+ 'strategic',
642
+ 'economics',
643
+ 'compatible',
644
+ 'apartment',
645
+ 'netherlands',
646
+ 'consulting',
647
+ 'recreation',
648
+ 'participants',
649
+ 'favorites',
650
+ 'translation',
651
+ 'estimates',
652
+ 'protected',
653
+ 'philadelphia',
654
+ 'officials',
655
+ 'contained',
656
+ 'legislation',
657
+ 'parameters',
658
+ 'relationships',
659
+ 'tennessee',
660
+ 'representative',
661
+ 'frequency',
662
+ 'introduced',
663
+ 'departments',
664
+ 'residents',
665
+ 'displayed',
666
+ 'performed',
667
+ 'administrator',
668
+ 'addresses',
669
+ 'permanent',
670
+ 'agriculture',
671
+ 'constitutes',
672
+ 'portfolio',
673
+ 'practical',
674
+ 'delivered',
675
+ 'collectibles',
676
+ 'infrastructure',
677
+ 'exclusive',
678
+ 'originally',
679
+ 'utilities',
680
+ 'philosophy',
681
+ 'regulation',
682
+ 'reduction',
683
+ 'nutrition',
684
+ 'recording',
685
+ 'secondary',
686
+ 'wonderful',
687
+ 'announced',
688
+ 'prevention',
689
+ 'mentioned',
690
+ 'automatic',
691
+ 'healthcare',
692
+ 'maintained',
693
+ 'increasing',
694
+ 'connected',
695
+ 'directors',
696
+ 'participation',
697
+ 'containing',
698
+ 'combination',
699
+ 'amendment',
700
+ 'guaranteed',
701
+ 'libraries',
702
+ 'distributed',
703
+ 'singapore',
704
+ 'enterprises',
705
+ 'convention',
706
+ 'principal',
707
+ 'certification',
708
+ 'previously',
709
+ 'buildings',
710
+ 'household',
711
+ 'batteries',
712
+ 'positions',
713
+ 'subscription',
714
+ 'contemporary',
715
+ 'panasonic',
716
+ 'permalink',
717
+ 'signature',
718
+ 'provision',
719
+ 'certainly',
720
+ 'newspaper',
721
+ 'liability',
722
+ 'trademark',
723
+ 'trackback',
724
+ 'americans',
725
+ 'promotion',
726
+ 'conversion',
727
+ 'reasonable',
728
+ 'broadband',
729
+ 'influence',
730
+ 'importance',
731
+ 'webmaster',
732
+ 'prescription',
733
+ 'specifically',
734
+ 'represent',
735
+ 'conservation',
736
+ 'louisiana',
737
+ 'javascript',
738
+ 'marketplace',
739
+ 'evolution',
740
+ 'certificates',
741
+ 'objectives',
742
+ 'suggested',
743
+ 'concerned',
744
+ 'structures',
745
+ 'encyclopedia',
746
+ 'continuing',
747
+ 'interracial',
748
+ 'competitive',
749
+ 'suppliers',
750
+ 'preparation',
751
+ 'receiving',
752
+ 'accordance',
753
+ 'discussed',
754
+ 'elizabeth',
755
+ 'reservations',
756
+ 'playstation',
757
+ 'instruction',
758
+ 'annotation',
759
+ 'differences',
760
+ 'establish',
761
+ 'expressed',
762
+ 'paragraph',
763
+ 'mathematics',
764
+ 'compensation',
765
+ 'conducted',
766
+ 'percentage',
767
+ 'mississippi',
768
+ 'requested',
769
+ 'connecticut',
770
+ 'personals',
771
+ 'immediate',
772
+ 'agricultural',
773
+ 'supporting',
774
+ 'collections',
775
+ 'participate',
776
+ 'specialist',
777
+ 'experienced',
778
+ 'investigation',
779
+ 'institution',
780
+ 'searching',
781
+ 'proceedings',
782
+ 'transmission',
783
+ 'characteristics',
784
+ 'experiences',
785
+ 'extremely',
786
+ 'verzeichnis',
787
+ 'contracts',
788
+ 'concerning',
789
+ 'developers',
790
+ 'equivalent',
791
+ 'chemistry',
792
+ 'neighborhood',
793
+ 'variables',
794
+ 'continues',
795
+ 'curriculum',
796
+ 'psychology',
797
+ 'responses',
798
+ 'circumstances',
799
+ 'identification',
800
+ 'appliances',
801
+ 'elementary',
802
+ 'unlimited',
803
+ 'printable',
804
+ 'enforcement',
805
+ 'hardcover',
806
+ 'celebrity',
807
+ 'chocolate',
808
+ 'hampshire',
809
+ 'bluetooth',
810
+ 'controlled',
811
+ 'requirement',
812
+ 'authorities',
813
+ 'representatives',
814
+ 'pregnancy',
815
+ 'biography',
816
+ 'attractions',
817
+ 'transactions',
818
+ 'authorized',
819
+ 'retirement',
820
+ 'financing',
821
+ 'efficiency',
822
+ 'efficient',
823
+ 'commitment',
824
+ 'specialty',
825
+ 'interviews',
826
+ 'qualified',
827
+ 'discovery',
828
+ 'classified',
829
+ 'confidence',
830
+ 'lifestyle',
831
+ 'consistent',
832
+ 'clearance',
833
+ 'connections',
834
+ 'inventory',
835
+ 'converter',
836
+ 'organisation',
837
+ 'objective',
838
+ 'indicated',
839
+ 'securities',
840
+ 'volunteer',
841
+ 'democratic',
842
+ 'switzerland',
843
+ 'parameter',
844
+ 'processor',
845
+ 'dimensions',
846
+ 'contribute',
847
+ 'challenges',
848
+ 'recognition',
849
+ 'submission',
850
+ 'encourage',
851
+ 'regulatory',
852
+ 'inspection',
853
+ 'consumers',
854
+ 'territory',
855
+ 'transaction',
856
+ 'manchester',
857
+ 'contributions',
858
+ 'continuous',
859
+ 'resulting',
860
+ 'cambridge',
861
+ 'initiative',
862
+ 'execution',
863
+ 'disability',
864
+ 'increases',
865
+ 'contractor',
866
+ 'examination',
867
+ 'indicates',
868
+ 'committed',
869
+ 'extensive',
870
+ 'affordable',
871
+ 'candidate',
872
+ 'databases',
873
+ 'outstanding',
874
+ 'perspective',
875
+ 'messenger',
876
+ 'tournament',
877
+ 'consideration',
878
+ 'discounts',
879
+ 'catalogue',
880
+ 'publishers',
881
+ 'caribbean',
882
+ 'reservation',
883
+ 'remaining',
884
+ 'depending',
885
+ 'expansion',
886
+ 'purchased',
887
+ 'performing',
888
+ 'collected',
889
+ 'absolutely',
890
+ 'featuring',
891
+ 'implement',
892
+ 'scheduled',
893
+ 'calculator',
894
+ 'significantly',
895
+ 'temporary',
896
+ 'sufficient',
897
+ 'awareness',
898
+ 'vancouver',
899
+ 'contribution',
900
+ 'measurement',
901
+ 'constitution',
902
+ 'packaging',
903
+ 'consultation',
904
+ 'northwest',
905
+ 'classroom',
906
+ 'democracy',
907
+ 'wallpaper',
908
+ 'merchandise',
909
+ 'resistance',
910
+ 'baltimore',
911
+ 'candidates',
912
+ 'charlotte',
913
+ 'biological',
914
+ 'transition',
915
+ 'preferences',
916
+ 'instrument',
917
+ 'classification',
918
+ 'physician',
919
+ 'hollywood',
920
+ 'wikipedia',
921
+ 'spiritual',
922
+ 'photographs',
923
+ 'relatively',
924
+ 'satisfaction',
925
+ 'represents',
926
+ 'pittsburgh',
927
+ 'preferred',
928
+ 'intellectual',
929
+ 'comfortable',
930
+ 'interaction',
931
+ 'listening',
932
+ 'effectively',
933
+ 'experimental',
934
+ 'revolution',
935
+ 'consolidation',
936
+ 'landscape',
937
+ 'dependent',
938
+ 'mechanical',
939
+ 'consultants',
940
+ 'applicant',
941
+ 'cooperation',
942
+ 'acquisition',
943
+ 'implemented',
944
+ 'directories',
945
+ 'recognized',
946
+ 'notification',
947
+ 'licensing',
948
+ 'textbooks',
949
+ 'diversity',
950
+ 'cleveland',
951
+ 'investments',
952
+ 'accessibility',
953
+ 'sensitive',
954
+ 'templates',
955
+ 'completion',
956
+ 'universities',
957
+ 'technique',
958
+ 'contractors',
959
+ 'subscriptions',
960
+ 'calculate',
961
+ 'alexander',
962
+ 'broadcast',
963
+ 'converted',
964
+ 'anniversary',
965
+ 'improvements',
966
+ 'specification',
967
+ 'accessible',
968
+ 'accessory',
969
+ 'typically',
970
+ 'representation',
971
+ 'arrangements',
972
+ 'conferences',
973
+ 'uniprotkb',
974
+ 'consumption',
975
+ 'birmingham',
976
+ 'afternoon',
977
+ 'consultant',
978
+ 'controller',
979
+ 'ownership',
980
+ 'committees',
981
+ 'legislative',
982
+ 'researchers',
983
+ 'unsubscribe',
984
+ 'molecular',
985
+ 'residence',
986
+ 'attorneys',
987
+ 'operators',
988
+ 'sustainable',
989
+ 'philippines',
990
+ 'statistical',
991
+ 'innovation',
992
+ 'employers',
993
+ 'definitions',
994
+ 'elections',
995
+ 'stainless',
996
+ 'newspapers',
997
+ 'hospitals',
998
+ 'exception',
999
+ 'successfully',
1000
+ 'indonesia',
1001
+ 'primarily',
1002
+ 'capabilities',
1003
+ 'recommendation',
1004
+ 'recruitment',
1005
+ 'organized',
1006
+ 'improving',
1007
+ 'expensive',
1008
+ 'organisations',
1009
+ 'explained',
1010
+ 'programmes',
1011
+ 'expertise',
1012
+ 'mechanism',
1013
+ 'jewellery',
1014
+ 'eventually',
1015
+ 'agreements',
1016
+ 'considering',
1017
+ 'innovative',
1018
+ 'conclusion',
1019
+ 'disorders',
1020
+ 'collaboration',
1021
+ 'detection',
1022
+ 'formation',
1023
+ 'engineers',
1024
+ 'proposals',
1025
+ 'moderator',
1026
+ 'tutorials',
1027
+ 'settlement',
1028
+ 'collectables',
1029
+ 'fantastic',
1030
+ 'governments',
1031
+ 'purchasing',
1032
+ 'appointed',
1033
+ 'operational',
1034
+ 'corresponding',
1035
+ 'descriptions',
1036
+ 'determination',
1037
+ 'animation',
1038
+ 'productions',
1039
+ 'telecommunications',
1040
+ 'instructor',
1041
+ 'approaches',
1042
+ 'highlights',
1043
+ 'designers',
1044
+ 'melbourne',
1045
+ 'scientists',
1046
+ 'blackjack',
1047
+ 'argentina',
1048
+ 'possibility',
1049
+ 'commissioner',
1050
+ 'dangerous',
1051
+ 'reliability',
1052
+ 'unfortunately',
1053
+ 'respectively',
1054
+ 'volunteers',
1055
+ 'attachment',
1056
+ 'appointment',
1057
+ 'workshops',
1058
+ 'hurricane',
1059
+ 'represented',
1060
+ 'mortgages',
1061
+ 'responsibilities',
1062
+ 'carefully',
1063
+ 'productivity',
1064
+ 'investors',
1065
+ 'underground',
1066
+ 'diagnosis',
1067
+ 'principle',
1068
+ 'vacations',
1069
+ 'calculated',
1070
+ 'appearance',
1071
+ 'incorporated',
1072
+ 'notebooks',
1073
+ 'algorithm',
1074
+ 'valentine',
1075
+ 'involving',
1076
+ 'investing',
1077
+ 'christopher',
1078
+ 'admission',
1079
+ 'terrorism',
1080
+ 'parliament',
1081
+ 'situations',
1082
+ 'allocated',
1083
+ 'corrections',
1084
+ 'structural',
1085
+ 'municipal',
1086
+ 'describes',
1087
+ 'disabilities',
1088
+ 'substance',
1089
+ 'prohibited',
1090
+ 'addressed',
1091
+ 'simulation',
1092
+ 'initiatives',
1093
+ 'concentration',
1094
+ 'interpretation',
1095
+ 'bankruptcy',
1096
+ 'optimization',
1097
+ 'substances',
1098
+ 'discovered',
1099
+ 'restrictions',
1100
+ 'participating',
1101
+ 'exhibition',
1102
+ 'composition',
1103
+ 'nationwide',
1104
+ 'definitely',
1105
+ 'existence',
1106
+ 'commentary',
1107
+ 'limousines',
1108
+ 'developments',
1109
+ 'immigration',
1110
+ 'destinations',
1111
+ 'necessarily',
1112
+ 'attribute',
1113
+ 'apparently',
1114
+ 'surrounding',
1115
+ 'mountains',
1116
+ 'popularity',
1117
+ 'postposted',
1118
+ 'coordinator',
1119
+ 'obviously',
1120
+ 'fundamental',
1121
+ 'substantial',
1122
+ 'progressive',
1123
+ 'championship',
1124
+ 'sacramento',
1125
+ 'impossible',
1126
+ 'depression',
1127
+ 'testimonials',
1128
+ 'memorabilia',
1129
+ 'cartridge',
1130
+ 'explanation',
1131
+ 'cincinnati',
1132
+ 'subsection',
1133
+ 'electricity',
1134
+ 'permitted',
1135
+ 'workplace',
1136
+ 'confirmed',
1137
+ 'wallpapers',
1138
+ 'infection',
1139
+ 'eligibility',
1140
+ 'involvement',
1141
+ 'placement',
1142
+ 'observations',
1143
+ 'vbulletin',
1144
+ 'subsequent',
1145
+ 'motorcycle',
1146
+ 'disclosure',
1147
+ 'establishment',
1148
+ 'presentations',
1149
+ 'undergraduate',
1150
+ 'occupation',
1151
+ 'donations',
1152
+ 'associations',
1153
+ 'citysearch',
1154
+ 'radiation',
1155
+ 'seriously',
1156
+ 'elsewhere',
1157
+ 'pollution',
1158
+ 'conservative',
1159
+ 'guestbook',
1160
+ 'effectiveness',
1161
+ 'demonstrate',
1162
+ 'atmosphere',
1163
+ 'experiment',
1164
+ 'purchases',
1165
+ 'federation',
1166
+ 'assignment',
1167
+ 'chemicals',
1168
+ 'everybody',
1169
+ 'nashville',
1170
+ 'counseling',
1171
+ 'acceptable',
1172
+ 'satisfied',
1173
+ 'measurements',
1174
+ 'milwaukee',
1175
+ 'medication',
1176
+ 'warehouse',
1177
+ 'shareware',
1178
+ 'violation',
1179
+ 'configure',
1180
+ 'stability',
1181
+ 'southwest',
1182
+ 'institutional',
1183
+ 'expectations',
1184
+ 'independence',
1185
+ 'metabolism',
1186
+ 'personally',
1187
+ 'excellence',
1188
+ 'somewhere',
1189
+ 'attributes',
1190
+ 'recognize',
1191
+ 'screening',
1192
+ 'thumbnail',
1193
+ 'forgotten',
1194
+ 'intelligent',
1195
+ 'edinburgh',
1196
+ 'obligation',
1197
+ 'regardless',
1198
+ 'restricted',
1199
+ 'republican',
1200
+ 'merchants',
1201
+ 'attendance',
1202
+ 'arguments',
1203
+ 'amsterdam',
1204
+ 'adventures',
1205
+ 'announcement',
1206
+ 'appreciate',
1207
+ 'regularly',
1208
+ 'mechanisms',
1209
+ 'customize',
1210
+ 'tradition',
1211
+ 'indicators',
1212
+ 'emissions',
1213
+ 'physicians',
1214
+ 'complaint',
1215
+ 'experiments',
1216
+ 'afghanistan',
1217
+ 'scholarship',
1218
+ 'governance',
1219
+ 'supplements',
1220
+ 'camcorder',
1221
+ 'implementing',
1222
+ 'ourselves',
1223
+ 'conversation',
1224
+ 'capability',
1225
+ 'producing',
1226
+ 'precision',
1227
+ 'contributed',
1228
+ 'reproduction',
1229
+ 'ingredients',
1230
+ 'franchise',
1231
+ 'complaints',
1232
+ 'promotions',
1233
+ 'rehabilitation',
1234
+ 'maintaining',
1235
+ 'environments',
1236
+ 'reception',
1237
+ 'correctly',
1238
+ 'consequences',
1239
+ 'geography',
1240
+ 'appearing',
1241
+ 'integrity',
1242
+ 'discrimination',
1243
+ 'processed',
1244
+ 'implications',
1245
+ 'functionality',
1246
+ 'intermediate',
1247
+ 'emotional',
1248
+ 'platforms',
1249
+ 'overnight',
1250
+ 'geographic',
1251
+ 'preliminary',
1252
+ 'districts',
1253
+ 'introduce',
1254
+ 'promotional',
1255
+ 'chevrolet',
1256
+ 'specialists',
1257
+ 'generator',
1258
+ 'suspension',
1259
+ 'correction',
1260
+ 'authentication',
1261
+ 'communicate',
1262
+ 'supplement',
1263
+ 'showtimes',
1264
+ 'promoting',
1265
+ 'machinery',
1266
+ 'bandwidth',
1267
+ 'probability',
1268
+ 'dimension',
1269
+ 'schedules',
1270
+ 'admissions',
1271
+ 'quarterly',
1272
+ 'illustrated',
1273
+ 'continental',
1274
+ 'alternate',
1275
+ 'achievement',
1276
+ 'limitations',
1277
+ 'automated',
1278
+ 'passenger',
1279
+ 'convenient',
1280
+ 'orientation',
1281
+ 'childhood',
1282
+ 'flexibility',
1283
+ 'jurisdiction',
1284
+ 'displaying',
1285
+ 'encouraged',
1286
+ 'cartridges',
1287
+ 'declaration',
1288
+ 'automation',
1289
+ 'advantages',
1290
+ 'preparing',
1291
+ 'recipient',
1292
+ 'extensions',
1293
+ 'athletics',
1294
+ 'southeast',
1295
+ 'alternatives',
1296
+ 'determining',
1297
+ 'personalized',
1298
+ 'conditioning',
1299
+ 'partnerships',
1300
+ 'destruction',
1301
+ 'increasingly',
1302
+ 'migration',
1303
+ 'basically',
1304
+ 'conventional',
1305
+ 'applicants',
1306
+ 'occupational',
1307
+ 'adjustment',
1308
+ 'treatments',
1309
+ 'camcorders',
1310
+ 'difficulty',
1311
+ 'collective',
1312
+ 'coalition',
1313
+ 'enrollment',
1314
+ 'producers',
1315
+ 'collector',
1316
+ 'interfaces',
1317
+ 'advertisers',
1318
+ 'representing',
1319
+ 'observation',
1320
+ 'restoration',
1321
+ 'convenience',
1322
+ 'returning',
1323
+ 'opposition',
1324
+ 'container',
1325
+ 'defendant',
1326
+ 'confirmation',
1327
+ 'supervisor',
1328
+ 'peripherals',
1329
+ 'bestsellers',
1330
+ 'departure',
1331
+ 'minneapolis',
1332
+ 'interactions',
1333
+ 'intervention',
1334
+ 'attraction',
1335
+ 'modification',
1336
+ 'customized',
1337
+ 'understood',
1338
+ 'assurance',
1339
+ 'happening',
1340
+ 'amendments',
1341
+ 'metropolitan',
1342
+ 'compilation',
1343
+ 'verification',
1344
+ 'attractive',
1345
+ 'recordings',
1346
+ 'jefferson',
1347
+ 'gardening',
1348
+ 'obligations',
1349
+ 'orchestra',
1350
+ 'polyphonic',
1351
+ 'outsourcing',
1352
+ 'adjustable',
1353
+ 'allocation',
1354
+ 'discipline',
1355
+ 'demonstrated',
1356
+ 'identifying',
1357
+ 'alphabetical',
1358
+ 'dispatched',
1359
+ 'installing',
1360
+ 'voluntary',
1361
+ 'photographer',
1362
+ 'messaging',
1363
+ 'constructed',
1364
+ 'additions',
1365
+ 'requiring',
1366
+ 'engagement',
1367
+ 'refinance',
1368
+ 'calendars',
1369
+ 'arrangement',
1370
+ 'conclusions',
1371
+ 'bibliography',
1372
+ 'compatibility',
1373
+ 'furthermore',
1374
+ 'cooperative',
1375
+ 'measuring',
1376
+ 'jacksonville',
1377
+ 'headquarters',
1378
+ 'transfers',
1379
+ 'transformation',
1380
+ 'attachments',
1381
+ 'administrators',
1382
+ 'personality',
1383
+ 'facilitate',
1384
+ 'subscriber',
1385
+ 'priorities',
1386
+ 'bookstore',
1387
+ 'parenting',
1388
+ 'incredible',
1389
+ 'commonwealth',
1390
+ 'pharmaceutical',
1391
+ 'manhattan',
1392
+ 'workforce',
1393
+ 'organizational',
1394
+ 'portuguese',
1395
+ 'everywhere',
1396
+ 'discharge',
1397
+ 'halloween',
1398
+ 'hazardous',
1399
+ 'methodology',
1400
+ 'housewares',
1401
+ 'reputation',
1402
+ 'resistant',
1403
+ 'democrats',
1404
+ 'recycling',
1405
+ 'qualifications',
1406
+ 'slideshow',
1407
+ 'variation',
1408
+ 'transferred',
1409
+ 'photograph',
1410
+ 'distributor',
1411
+ 'underlying',
1412
+ 'wrestling',
1413
+ 'photoshop',
1414
+ 'gathering',
1415
+ 'projection',
1416
+ 'mathematical',
1417
+ 'specialized',
1418
+ 'diagnostic',
1419
+ 'indianapolis',
1420
+ 'corporations',
1421
+ 'criticism',
1422
+ 'automobile',
1423
+ 'confidential',
1424
+ 'statutory',
1425
+ 'accommodations',
1426
+ 'northeast',
1427
+ 'downloaded',
1428
+ 'paintings',
1429
+ 'injection',
1430
+ 'yorkshire',
1431
+ 'populations',
1432
+ 'protective',
1433
+ 'initially',
1434
+ 'indicator',
1435
+ 'eliminate',
1436
+ 'sunglasses',
1437
+ 'preference',
1438
+ 'threshold',
1439
+ 'venezuela',
1440
+ 'exploration',
1441
+ 'sequences',
1442
+ 'astronomy',
1443
+ 'translate',
1444
+ 'announces',
1445
+ 'compression',
1446
+ 'establishing',
1447
+ 'constitutional',
1448
+ 'perfectly',
1449
+ 'instantly',
1450
+ 'litigation',
1451
+ 'submissions',
1452
+ 'broadcasting',
1453
+ 'horizontal',
1454
+ 'terrorist',
1455
+ 'informational',
1456
+ 'ecommerce',
1457
+ 'suffering',
1458
+ 'prospective',
1459
+ 'ultimately',
1460
+ 'artificial',
1461
+ 'spectacular',
1462
+ 'coordination',
1463
+ 'connector',
1464
+ 'affiliated',
1465
+ 'activation',
1466
+ 'naturally',
1467
+ 'subscribers',
1468
+ 'mitsubishi',
1469
+ 'underwear',
1470
+ 'potentially',
1471
+ 'constraints',
1472
+ 'inclusive',
1473
+ 'dimensional',
1474
+ 'considerable',
1475
+ 'selecting',
1476
+ 'processors',
1477
+ 'pantyhose',
1478
+ 'difficulties',
1479
+ 'complexity',
1480
+ 'constantly',
1481
+ 'barcelona',
1482
+ 'presidential',
1483
+ 'documentary',
1484
+ 'territories',
1485
+ 'palestinian',
1486
+ 'legislature',
1487
+ 'hospitality',
1488
+ 'procurement',
1489
+ 'theoretical',
1490
+ 'exercises',
1491
+ 'surveillance',
1492
+ 'protocols',
1493
+ 'highlight',
1494
+ 'substitute',
1495
+ 'inclusion',
1496
+ 'hopefully',
1497
+ 'brilliant',
1498
+ 'evaluated',
1499
+ 'assignments',
1500
+ 'termination',
1501
+ 'households',
1502
+ 'authentic',
1503
+ 'montgomery',
1504
+ 'architectural',
1505
+ 'louisville',
1506
+ 'macintosh',
1507
+ 'movements',
1508
+ 'amenities',
1509
+ 'virtually',
1510
+ 'authorization',
1511
+ 'projector',
1512
+ 'comparative',
1513
+ 'psychological',
1514
+ 'surprised',
1515
+ 'genealogy',
1516
+ 'expenditure',
1517
+ 'liverpool',
1518
+ 'connectivity',
1519
+ 'algorithms',
1520
+ 'similarly',
1521
+ 'collaborative',
1522
+ 'excluding',
1523
+ 'commander',
1524
+ 'suggestion',
1525
+ 'spotlight',
1526
+ 'investigate',
1527
+ 'connecting',
1528
+ 'logistics',
1529
+ 'proportion',
1530
+ 'significance',
1531
+ 'symposium',
1532
+ 'essentials',
1533
+ 'protecting',
1534
+ 'transmitted',
1535
+ 'screenshots',
1536
+ 'intensive',
1537
+ 'switching',
1538
+ 'correspondence',
1539
+ 'supervision',
1540
+ 'expenditures',
1541
+ 'separation',
1542
+ 'testimony',
1543
+ 'celebrities',
1544
+ 'mandatory',
1545
+ 'boundaries',
1546
+ 'syndication',
1547
+ 'celebration',
1548
+ 'filtering',
1549
+ 'luxembourg',
1550
+ 'offensive',
1551
+ 'deployment',
1552
+ 'colleagues',
1553
+ 'separated',
1554
+ 'directive',
1555
+ 'governing',
1556
+ 'retailers',
1557
+ 'occasionally',
1558
+ 'attending',
1559
+ 'recruiting',
1560
+ 'instructional',
1561
+ 'traveling',
1562
+ 'permissions',
1563
+ 'biotechnology',
1564
+ 'prescribed',
1565
+ 'catherine',
1566
+ 'reproduced',
1567
+ 'calculation',
1568
+ 'consolidated',
1569
+ 'occasions',
1570
+ 'equations',
1571
+ 'exceptional',
1572
+ 'respondents',
1573
+ 'considerations',
1574
+ 'queensland',
1575
+ 'musicians',
1576
+ 'composite',
1577
+ 'unavailable',
1578
+ 'essentially',
1579
+ 'designing',
1580
+ 'assessments',
1581
+ 'brunswick',
1582
+ 'sensitivity',
1583
+ 'preservation',
1584
+ 'streaming',
1585
+ 'intensity',
1586
+ 'technological',
1587
+ 'syndicate',
1588
+ 'antivirus',
1589
+ 'addressing',
1590
+ 'discounted',
1591
+ 'bangladesh',
1592
+ 'constitute',
1593
+ 'concluded',
1594
+ 'desperate',
1595
+ 'demonstration',
1596
+ 'governmental',
1597
+ 'manufactured',
1598
+ 'graduation',
1599
+ 'variations',
1600
+ 'addiction',
1601
+ 'springfield',
1602
+ 'synthesis',
1603
+ 'undefined',
1604
+ 'unemployment',
1605
+ 'enhancement',
1606
+ 'newcastle',
1607
+ 'performances',
1608
+ 'societies',
1609
+ 'brazilian',
1610
+ 'identical',
1611
+ 'petroleum',
1612
+ 'norwegian',
1613
+ 'retention',
1614
+ 'exchanges',
1615
+ 'soundtrack',
1616
+ 'wondering',
1617
+ 'profession',
1618
+ 'separately',
1619
+ 'physiology',
1620
+ 'collecting',
1621
+ 'participant',
1622
+ 'scholarships',
1623
+ 'recreational',
1624
+ 'dominican',
1625
+ 'friendship',
1626
+ 'expanding',
1627
+ 'provincial',
1628
+ 'investigations',
1629
+ 'medications',
1630
+ 'rochester',
1631
+ 'advertiser',
1632
+ 'encryption',
1633
+ 'downloadable',
1634
+ 'sophisticated',
1635
+ 'possession',
1636
+ 'laboratories',
1637
+ 'vegetables',
1638
+ 'thumbnails',
1639
+ 'stockings',
1640
+ 'respondent',
1641
+ 'destroyed',
1642
+ 'manufacture',
1643
+ 'wordpress',
1644
+ 'vulnerability',
1645
+ 'accountability',
1646
+ 'celebrate',
1647
+ 'accredited',
1648
+ 'appliance',
1649
+ 'compressed',
1650
+ 'scheduling',
1651
+ 'perspectives',
1652
+ 'mortality',
1653
+ 'christians',
1654
+ 'therapeutic',
1655
+ 'impressive',
1656
+ 'accordingly',
1657
+ 'architect',
1658
+ 'challenging',
1659
+ 'microwave',
1660
+ 'accidents',
1661
+ 'relocation',
1662
+ 'contributors',
1663
+ 'violations',
1664
+ 'temperatures',
1665
+ 'competitions',
1666
+ 'discretion',
1667
+ 'cosmetics',
1668
+ 'repository',
1669
+ 'concentrations',
1670
+ 'christianity',
1671
+ 'negotiations',
1672
+ 'realistic',
1673
+ 'generating',
1674
+ 'christina',
1675
+ 'congressional',
1676
+ 'photographic',
1677
+ 'modifications',
1678
+ 'millennium',
1679
+ 'achieving',
1680
+ 'fisheries',
1681
+ 'exceptions',
1682
+ 'reactions',
1683
+ 'macromedia',
1684
+ 'companion',
1685
+ 'divisions',
1686
+ 'additionally',
1687
+ 'fellowship',
1688
+ 'victorian',
1689
+ 'copyrights',
1690
+ 'lithuania',
1691
+ 'mastercard',
1692
+ 'chronicles',
1693
+ 'obtaining',
1694
+ 'distribute',
1695
+ 'decorative',
1696
+ 'enlargement',
1697
+ 'campaigns',
1698
+ 'conjunction',
1699
+ 'instances',
1700
+ 'indigenous',
1701
+ 'validation',
1702
+ 'corruption',
1703
+ 'incentives',
1704
+ 'cholesterol',
1705
+ 'differential',
1706
+ 'scientist',
1707
+ 'starsmerchant',
1708
+ 'arthritis',
1709
+ 'nevertheless',
1710
+ 'practitioners',
1711
+ 'transcript',
1712
+ 'inflation',
1713
+ 'compounds',
1714
+ 'contracting',
1715
+ 'structured',
1716
+ 'reasonably',
1717
+ 'graduates',
1718
+ 'recommends',
1719
+ 'controlling',
1720
+ 'distributors',
1721
+ 'arlington',
1722
+ 'particles',
1723
+ 'extraordinary',
1724
+ 'indicating',
1725
+ 'coordinate',
1726
+ 'exclusively',
1727
+ 'limitation',
1728
+ 'widescreen',
1729
+ 'illustration',
1730
+ 'construct',
1731
+ 'inquiries',
1732
+ 'inspiration',
1733
+ 'affecting',
1734
+ 'downloading',
1735
+ 'aggregate',
1736
+ 'forecasts',
1737
+ 'complicated',
1738
+ 'shopzilla',
1739
+ 'decorating',
1740
+ 'expressions',
1741
+ 'shakespeare',
1742
+ 'connectors',
1743
+ 'conflicts',
1744
+ 'travelers',
1745
+ 'offerings',
1746
+ 'incorrect',
1747
+ 'furnishings',
1748
+ 'guatemala',
1749
+ 'perception',
1750
+ 'renaissance',
1751
+ 'pathology',
1752
+ 'ordinance',
1753
+ 'photographers',
1754
+ 'infections',
1755
+ 'configured',
1756
+ 'festivals',
1757
+ 'possibilities',
1758
+ 'contributing',
1759
+ 'analytical',
1760
+ 'circulation',
1761
+ 'assumption',
1762
+ 'jerusalem',
1763
+ 'transexuales',
1764
+ 'invention',
1765
+ 'technician',
1766
+ 'executives',
1767
+ 'enquiries',
1768
+ 'cognitive',
1769
+ 'exploring',
1770
+ 'registrar',
1771
+ 'supporters',
1772
+ 'withdrawal',
1773
+ 'predicted',
1774
+ 'saskatchewan',
1775
+ 'cancellation',
1776
+ 'ministers',
1777
+ 'veterinary',
1778
+ 'prostores',
1779
+ 'relevance',
1780
+ 'incentive',
1781
+ 'butterfly',
1782
+ 'mechanics',
1783
+ 'numerical',
1784
+ 'reflection',
1785
+ 'accompanied',
1786
+ 'invitation',
1787
+ 'princeton',
1788
+ 'spirituality',
1789
+ 'meanwhile',
1790
+ 'proprietary',
1791
+ 'childrens',
1792
+ 'thumbzilla',
1793
+ 'porcelain',
1794
+ 'pichunter',
1795
+ 'translated',
1796
+ 'columnists',
1797
+ 'consensus',
1798
+ 'delivering',
1799
+ 'journalism',
1800
+ 'intention',
1801
+ 'undertaken',
1802
+ 'statewide',
1803
+ 'semiconductor',
1804
+ 'illustrations',
1805
+ 'happiness',
1806
+ 'substantially',
1807
+ 'identifier',
1808
+ 'calculations',
1809
+ 'conducting',
1810
+ 'accomplished',
1811
+ 'calculators',
1812
+ 'impression',
1813
+ 'correlation',
1814
+ 'fragrance',
1815
+ 'neighbors',
1816
+ 'transparent',
1817
+ 'charleston',
1818
+ 'champions',
1819
+ 'selections',
1820
+ 'projectors',
1821
+ 'inappropriate',
1822
+ 'comparing',
1823
+ 'vocational',
1824
+ 'pharmacies',
1825
+ 'introducing',
1826
+ 'appreciated',
1827
+ 'albuquerque',
1828
+ 'distinguished',
1829
+ 'projected',
1830
+ 'assumptions',
1831
+ 'shareholders',
1832
+ 'developmental',
1833
+ 'regulated',
1834
+ 'anticipated',
1835
+ 'completing',
1836
+ 'comparable',
1837
+ 'confusion',
1838
+ 'copyrighted',
1839
+ 'warranties',
1840
+ 'documented',
1841
+ 'paperbacks',
1842
+ 'keyboards',
1843
+ 'vulnerable',
1844
+ 'reflected',
1845
+ 'respiratory',
1846
+ 'notifications',
1847
+ 'transexual',
1848
+ 'mainstream',
1849
+ 'evaluating',
1850
+ 'subcommittee',
1851
+ 'maternity',
1852
+ 'journalists',
1853
+ 'foundations',
1854
+ 'volleyball',
1855
+ 'liabilities',
1856
+ 'decreased',
1857
+ 'tolerance',
1858
+ 'creativity',
1859
+ 'describing',
1860
+ 'lightning',
1861
+ 'quotations',
1862
+ 'inspector',
1863
+ 'bookmarks',
1864
+ 'behavioral',
1865
+ 'riverside',
1866
+ 'bathrooms',
1867
+ 'abilities',
1868
+ 'initiated',
1869
+ 'nonprofit',
1870
+ 'lancaster',
1871
+ 'suspended',
1872
+ 'containers',
1873
+ 'attitudes',
1874
+ 'simultaneously',
1875
+ 'integrate',
1876
+ 'sociology',
1877
+ 'screenshot',
1878
+ 'exhibitions',
1879
+ 'confident',
1880
+ 'retrieved',
1881
+ 'officially',
1882
+ 'consortium',
1883
+ 'recipients',
1884
+ 'delicious',
1885
+ 'traditions',
1886
+ 'periodically',
1887
+ 'hungarian',
1888
+ 'referring',
1889
+ 'transform',
1890
+ 'educators',
1891
+ 'vegetable',
1892
+ 'humanities',
1893
+ 'independently',
1894
+ 'alignment',
1895
+ 'henderson',
1896
+ 'britannica',
1897
+ 'competitors',
1898
+ 'visibility',
1899
+ 'consciousness',
1900
+ 'encounter',
1901
+ 'resolutions',
1902
+ 'accessing',
1903
+ 'attempted',
1904
+ 'witnesses',
1905
+ 'administered',
1906
+ 'strengthen',
1907
+ 'frederick',
1908
+ 'aggressive',
1909
+ 'advertisements',
1910
+ 'sublimedirectory',
1911
+ 'disturbed',
1912
+ 'determines',
1913
+ 'sculpture',
1914
+ 'motivation',
1915
+ 'pharmacology',
1916
+ 'passengers',
1917
+ 'quantities',
1918
+ 'petersburg',
1919
+ 'consistently',
1920
+ 'powerpoint',
1921
+ 'obituaries',
1922
+ 'punishment',
1923
+ 'appreciation',
1924
+ 'subsequently',
1925
+ 'providence',
1926
+ 'restriction',
1927
+ 'incorporate',
1928
+ 'backgrounds',
1929
+ 'treasurer',
1930
+ 'lightweight',
1931
+ 'transcription',
1932
+ 'complications',
1933
+ 'scripting',
1934
+ 'remembered',
1935
+ 'synthetic',
1936
+ 'testament',
1937
+ 'specifics',
1938
+ 'partially',
1939
+ 'wilderness',
1940
+ 'generations',
1941
+ 'tournaments',
1942
+ 'sponsorship',
1943
+ 'headphones',
1944
+ 'proceeding',
1945
+ 'volkswagen',
1946
+ 'uncertainty',
1947
+ 'breakdown',
1948
+ 'reconstruction',
1949
+ 'subsidiary',
1950
+ 'strengths',
1951
+ 'encouraging',
1952
+ 'furnished',
1953
+ 'terrorists',
1954
+ 'comparisons',
1955
+ 'beneficial',
1956
+ 'distributions',
1957
+ 'viewpicture',
1958
+ 'threatened',
1959
+ 'republicans',
1960
+ 'discusses',
1961
+ 'responded',
1962
+ 'abstracts',
1963
+ 'prediction',
1964
+ 'pharmaceuticals',
1965
+ 'thesaurus',
1966
+ 'individually',
1967
+ 'battlefield',
1968
+ 'literally',
1969
+ 'ecological',
1970
+ 'appraisal',
1971
+ 'consisting',
1972
+ 'submitting',
1973
+ 'citations',
1974
+ 'geographical',
1975
+ 'mozambique',
1976
+ 'disclaimers',
1977
+ 'championships',
1978
+ 'sheffield',
1979
+ 'finishing',
1980
+ 'wellington',
1981
+ 'prospects',
1982
+ 'bulgarian',
1983
+ 'aboriginal',
1984
+ 'remarkable',
1985
+ 'preventing',
1986
+ 'productive',
1987
+ 'boulevard',
1988
+ 'compliant',
1989
+ 'penalties',
1990
+ 'imagination',
1991
+ 'refurbished',
1992
+ 'activated',
1993
+ 'conferencing',
1994
+ 'armstrong',
1995
+ 'politicians',
1996
+ 'trackbacks',
1997
+ 'accommodate',
1998
+ 'christine',
1999
+ 'accepting',
2000
+ 'precipitation',
2001
+ 'isolation',
2002
+ 'sustained',
2003
+ 'approximate',
2004
+ 'programmer',
2005
+ 'greetings',
2006
+ 'inherited',
2007
+ 'incomplete',
2008
+ 'chronicle',
2009
+ 'legitimate',
2010
+ 'biographies',
2011
+ 'investigator',
2012
+ 'plaintiff',
2013
+ 'prisoners',
2014
+ 'mediterranean',
2015
+ 'nightlife',
2016
+ 'architects',
2017
+ 'entrepreneur',
2018
+ 'freelance',
2019
+ 'excessive',
2020
+ 'screensaver',
2021
+ 'valuation',
2022
+ 'unexpected',
2023
+ 'cigarette',
2024
+ 'characteristic',
2025
+ 'metallica',
2026
+ 'consequently',
2027
+ 'appointments',
2028
+ 'narrative',
2029
+ 'academics',
2030
+ 'quantitative',
2031
+ 'screensavers',
2032
+ 'subdivision',
2033
+ 'distinction',
2034
+ 'livestock',
2035
+ 'exemption',
2036
+ 'sustainability',
2037
+ 'formatting',
2038
+ 'nutritional',
2039
+ 'nicaragua',
2040
+ 'affiliation',
2041
+ 'relatives',
2042
+ 'satisfactory',
2043
+ 'revolutionary',
2044
+ 'bracelets',
2045
+ 'telephony',
2046
+ 'breathing',
2047
+ 'thickness',
2048
+ 'adjustments',
2049
+ 'graphical',
2050
+ 'discussing',
2051
+ 'aerospace',
2052
+ 'meaningful',
2053
+ 'maintains',
2054
+ 'shortcuts',
2055
+ 'voyeurweb',
2056
+ 'extending',
2057
+ 'specifies',
2058
+ 'accreditation',
2059
+ 'blackberry',
2060
+ 'meditation',
2061
+ 'microphone',
2062
+ 'macedonia',
2063
+ 'combining',
2064
+ 'instrumental',
2065
+ 'organizing',
2066
+ 'moderators',
2067
+ 'kazakhstan',
2068
+ 'standings',
2069
+ 'partition',
2070
+ 'invisible',
2071
+ 'translations',
2072
+ 'commodity',
2073
+ 'kilometers',
2074
+ 'thanksgiving',
2075
+ 'guarantees',
2076
+ 'indication',
2077
+ 'congratulations',
2078
+ 'cigarettes',
2079
+ 'controllers',
2080
+ 'consultancy',
2081
+ 'conventions',
2082
+ 'coordinates',
2083
+ 'responding',
2084
+ 'physically',
2085
+ 'stakeholders',
2086
+ 'hydrocodone',
2087
+ 'consecutive',
2088
+ 'attempting',
2089
+ 'representations',
2090
+ 'competing',
2091
+ 'peninsula',
2092
+ 'accurately',
2093
+ 'considers',
2094
+ 'ministries',
2095
+ 'vacancies',
2096
+ 'parliamentary',
2097
+ 'acknowledge',
2098
+ 'thoroughly',
2099
+ 'nottingham',
2100
+ 'identifies',
2101
+ 'questionnaire',
2102
+ 'qualification',
2103
+ 'modelling',
2104
+ 'miniature',
2105
+ 'interstate',
2106
+ 'consequence',
2107
+ 'systematic',
2108
+ 'perceived',
2109
+ 'madagascar',
2110
+ 'presenting',
2111
+ 'troubleshooting',
2112
+ 'uzbekistan',
2113
+ 'centuries',
2114
+ 'magnitude',
2115
+ 'richardson',
2116
+ 'fragrances',
2117
+ 'vocabulary',
2118
+ 'earthquake',
2119
+ 'fundraising',
2120
+ 'geological',
2121
+ 'assessing',
2122
+ 'introduces',
2123
+ 'webmasters',
2124
+ 'computational',
2125
+ 'acdbentity',
2126
+ 'participated',
2127
+ 'handhelds',
2128
+ 'answering',
2129
+ 'impressed',
2130
+ 'conspiracy',
2131
+ 'organizer',
2132
+ 'combinations',
2133
+ 'preceding',
2134
+ 'cumulative',
2135
+ 'amplifier',
2136
+ 'arbitrary',
2137
+ 'prominent',
2138
+ 'lexington',
2139
+ 'contacted',
2140
+ 'recorders',
2141
+ 'occasional',
2142
+ 'innovations',
2143
+ 'postcards',
2144
+ 'reviewing',
2145
+ 'explicitly',
2146
+ 'transsexual',
2147
+ 'citizenship',
2148
+ 'informative',
2149
+ 'girlfriend',
2150
+ 'bloomberg',
2151
+ 'hierarchy',
2152
+ 'influenced',
2153
+ 'abandoned',
2154
+ 'complement',
2155
+ 'mauritius',
2156
+ 'checklist',
2157
+ 'requesting',
2158
+ 'lauderdale',
2159
+ 'scenarios',
2160
+ 'extraction',
2161
+ 'elevation',
2162
+ 'utilization',
2163
+ 'beverages',
2164
+ 'calibration',
2165
+ 'efficiently',
2166
+ 'entertaining',
2167
+ 'prerequisite',
2168
+ 'hypothesis',
2169
+ 'medicines',
2170
+ 'regression',
2171
+ 'enhancements',
2172
+ 'renewable',
2173
+ 'intersection',
2174
+ 'passwords',
2175
+ 'consistency',
2176
+ 'collectors',
2177
+ 'azerbaijan',
2178
+ 'astrology',
2179
+ 'occurring',
2180
+ 'supplemental',
2181
+ 'travelling',
2182
+ 'induction',
2183
+ 'precisely',
2184
+ 'spreading',
2185
+ 'provinces',
2186
+ 'widespread',
2187
+ 'incidence',
2188
+ 'incidents',
2189
+ 'enhancing',
2190
+ 'interference',
2191
+ 'palestine',
2192
+ 'listprice',
2193
+ 'atmospheric',
2194
+ 'knowledgestorm',
2195
+ 'referenced',
2196
+ 'publicity',
2197
+ 'proposition',
2198
+ 'allowance',
2199
+ 'designation',
2200
+ 'duplicate',
2201
+ 'criterion',
2202
+ 'civilization',
2203
+ 'vietnamese',
2204
+ 'tremendous',
2205
+ 'corrected',
2206
+ 'encountered',
2207
+ 'internationally',
2208
+ 'surrounded',
2209
+ 'creatures',
2210
+ 'commented',
2211
+ 'accomplish',
2212
+ 'vegetarian',
2213
+ 'newfoundland',
2214
+ 'investigated',
2215
+ 'ambassador',
2216
+ 'stephanie',
2217
+ 'contacting',
2218
+ 'vegetation',
2219
+ 'findarticles',
2220
+ 'specially',
2221
+ 'infectious',
2222
+ 'continuity',
2223
+ 'phenomenon',
2224
+ 'conscious',
2225
+ 'referrals',
2226
+ 'differently',
2227
+ 'integrating',
2228
+ 'revisions',
2229
+ 'reasoning',
2230
+ 'charitable',
2231
+ 'annotated',
2232
+ 'convinced',
2233
+ 'burlington',
2234
+ 'replacing',
2235
+ 'researcher',
2236
+ 'watershed',
2237
+ 'occupations',
2238
+ 'acknowledged',
2239
+ 'equilibrium',
2240
+ 'characterized',
2241
+ 'privilege',
2242
+ 'qualifying',
2243
+ 'estimation',
2244
+ 'pediatric',
2245
+ 'techrepublic',
2246
+ 'institutes',
2247
+ 'brochures',
2248
+ 'traveller',
2249
+ 'appropriations',
2250
+ 'suspected',
2251
+ 'benchmark',
2252
+ 'beginners',
2253
+ 'instructors',
2254
+ 'highlighted',
2255
+ 'stationery',
2256
+ 'unauthorized',
2257
+ 'competent',
2258
+ 'contributor',
2259
+ 'demonstrates',
2260
+ 'gradually',
2261
+ 'desirable',
2262
+ 'journalist',
2263
+ 'afterwards',
2264
+ 'religions',
2265
+ 'explosion',
2266
+ 'signatures',
2267
+ 'disciplines',
2268
+ 'daughters',
2269
+ 'conversations',
2270
+ 'simplified',
2271
+ 'motherboard',
2272
+ 'bibliographic',
2273
+ 'champagne',
2274
+ 'deviation',
2275
+ 'superintendent',
2276
+ 'housewives',
2277
+ 'influences',
2278
+ 'inspections',
2279
+ 'irrigation',
2280
+ 'hydraulic',
2281
+ 'robertson',
2282
+ 'penetration',
2283
+ 'conviction',
2284
+ 'omissions',
2285
+ 'retrieval',
2286
+ 'qualities',
2287
+ 'prototype',
2288
+ 'importantly',
2289
+ 'apparatus',
2290
+ 'explaining',
2291
+ 'nomination',
2292
+ 'empirical',
2293
+ 'dependence',
2294
+ 'sexuality',
2295
+ 'polyester',
2296
+ 'commitments',
2297
+ 'suggesting',
2298
+ 'remainder',
2299
+ 'privileges',
2300
+ 'televisions',
2301
+ 'specializing',
2302
+ 'commodities',
2303
+ 'motorcycles',
2304
+ 'concentrate',
2305
+ 'reproductive',
2306
+ 'molecules',
2307
+ 'refrigerator',
2308
+ 'intervals',
2309
+ 'sentences',
2310
+ 'exclusion',
2311
+ 'workstation',
2312
+ 'holocaust',
2313
+ 'receivers',
2314
+ 'disposition',
2315
+ 'navigator',
2316
+ 'investigators',
2317
+ 'marijuana',
2318
+ 'cathedral',
2319
+ 'fairfield',
2320
+ 'fascinating',
2321
+ 'landscapes',
2322
+ 'lafayette',
2323
+ 'computation',
2324
+ 'cardiovascular',
2325
+ 'salvation',
2326
+ 'predictions',
2327
+ 'accompanying',
2328
+ 'selective',
2329
+ 'arbitration',
2330
+ 'configuring',
2331
+ 'editorials',
2332
+ 'sacrifice',
2333
+ 'removable',
2334
+ 'convergence',
2335
+ 'gibraltar',
2336
+ 'anthropology',
2337
+ 'malpractice',
2338
+ 'reporters',
2339
+ 'necessity',
2340
+ 'rendering',
2341
+ 'hepatitis',
2342
+ 'nationally',
2343
+ 'waterproof',
2344
+ 'specialties',
2345
+ 'humanitarian',
2346
+ 'invitations',
2347
+ 'functioning',
2348
+ 'economies',
2349
+ 'alexandria',
2350
+ 'bacterial',
2351
+ 'undertake',
2352
+ 'continuously',
2353
+ 'achievements',
2354
+ 'convertible',
2355
+ 'secretariat',
2356
+ 'paragraphs',
2357
+ 'adolescent',
2358
+ 'nominations',
2359
+ 'cancelled',
2360
+ 'introductory',
2361
+ 'reservoir',
2362
+ 'occurrence',
2363
+ 'worcester',
2364
+ 'demographic',
2365
+ 'disciplinary',
2366
+ 'respected',
2367
+ 'portraits',
2368
+ 'interpreted',
2369
+ 'evaluations',
2370
+ 'elimination',
2371
+ 'hypothetical',
2372
+ 'immigrants',
2373
+ 'complimentary',
2374
+ 'helicopter',
2375
+ 'performer',
2376
+ 'commissions',
2377
+ 'powerseller',
2378
+ 'graduated',
2379
+ 'surprising',
2380
+ 'unnecessary',
2381
+ 'dramatically',
2382
+ 'yugoslavia',
2383
+ 'characterization',
2384
+ 'likelihood',
2385
+ 'fundamentals',
2386
+ 'contamination',
2387
+ 'endangered',
2388
+ 'compromise',
2389
+ 'expiration',
2390
+ 'namespace',
2391
+ 'peripheral',
2392
+ 'negotiation',
2393
+ 'opponents',
2394
+ 'nominated',
2395
+ 'confidentiality',
2396
+ 'electoral',
2397
+ 'changelog',
2398
+ 'alternatively',
2399
+ 'greensboro',
2400
+ 'controversial',
2401
+ 'recovered',
2402
+ 'upgrading',
2403
+ 'frontpage',
2404
+ 'demanding',
2405
+ 'defensive',
2406
+ 'forbidden',
2407
+ 'programmers',
2408
+ 'monitored',
2409
+ 'installations',
2410
+ 'deutschland',
2411
+ 'practitioner',
2412
+ 'motivated',
2413
+ 'smithsonian',
2414
+ 'examining',
2415
+ 'revelation',
2416
+ 'delegation',
2417
+ 'dictionaries',
2418
+ 'greenhouse',
2419
+ 'transparency',
2420
+ 'currencies',
2421
+ 'survivors',
2422
+ 'positioning',
2423
+ 'descending',
2424
+ 'temporarily',
2425
+ 'frequencies',
2426
+ 'reflections',
2427
+ 'municipality',
2428
+ 'detective',
2429
+ 'experiencing',
2430
+ 'fireplace',
2431
+ 'endorsement',
2432
+ 'psychiatry',
2433
+ 'persistent',
2434
+ 'summaries',
2435
+ 'looksmart',
2436
+ 'magnificent',
2437
+ 'colleague',
2438
+ 'adaptation',
2439
+ 'paintball',
2440
+ 'enclosure',
2441
+ 'supervisors',
2442
+ 'westminster',
2443
+ 'distances',
2444
+ 'absorption',
2445
+ 'treasures',
2446
+ 'transcripts',
2447
+ 'disappointed',
2448
+ 'continually',
2449
+ 'communist',
2450
+ 'collectible',
2451
+ 'entrepreneurs',
2452
+ 'creations',
2453
+ 'acquisitions',
2454
+ 'biodiversity',
2455
+ 'excitement',
2456
+ 'presently',
2457
+ 'mysterious',
2458
+ 'librarian',
2459
+ 'subsidiaries',
2460
+ 'stockholm',
2461
+ 'indonesian',
2462
+ 'therapist',
2463
+ 'promising',
2464
+ 'relaxation',
2465
+ 'thereafter',
2466
+ 'commissioners',
2467
+ 'forwarding',
2468
+ 'nightmare',
2469
+ 'reductions',
2470
+ 'southampton',
2471
+ 'organisms',
2472
+ 'telescope',
2473
+ 'portsmouth',
2474
+ 'advancement',
2475
+ 'harassment',
2476
+ 'generators',
2477
+ 'generates',
2478
+ 'replication',
2479
+ 'inexpensive',
2480
+ 'receptors',
2481
+ 'interventions',
2482
+ 'huntington',
2483
+ 'internship',
2484
+ 'aluminium',
2485
+ 'snowboard',
2486
+ 'beastality',
2487
+ 'evanescence',
2488
+ 'coordinated',
2489
+ 'shipments',
2490
+ 'antarctica',
2491
+ 'chancellor',
2492
+ 'controversy',
2493
+ 'legendary',
2494
+ 'beautifully',
2495
+ 'antibodies',
2496
+ 'examinations',
2497
+ 'immunology',
2498
+ 'departmental',
2499
+ 'terminology',
2500
+ 'gentleman',
2501
+ 'reproduce',
2502
+ 'convicted',
2503
+ 'roommates',
2504
+ 'threatening',
2505
+ 'spokesman',
2506
+ 'activists',
2507
+ 'frankfurt',
2508
+ 'encourages',
2509
+ 'assembled',
2510
+ 'restructuring',
2511
+ 'terminals',
2512
+ 'simulations',
2513
+ 'sufficiently',
2514
+ 'conditional',
2515
+ 'crossword',
2516
+ 'conceptual',
2517
+ 'liechtenstein',
2518
+ 'translator',
2519
+ 'automobiles',
2520
+ 'continent',
2521
+ 'longitude',
2522
+ 'challenged',
2523
+ 'telecharger',
2524
+ 'insertion',
2525
+ 'instrumentation',
2526
+ 'constraint',
2527
+ 'groundwater',
2528
+ 'strengthening',
2529
+ 'insulation',
2530
+ 'infringement',
2531
+ 'subjective',
2532
+ 'swaziland',
2533
+ 'varieties',
2534
+ 'mediawiki',
2535
+ 'configurations',
2536
+ ];