@actualwave/react-native-codeditor 1.1.0 → 1.2.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.
- package/CHANGELOG.md +39 -0
- package/README.md +67 -7
- package/SKILL.md +504 -0
- package/THIRD_PARTY_NOTICES +120 -0
- package/app.plugin.js +1 -1
- package/lib/module/CodeEditor.js +69 -2
- package/lib/typescript/src/CodeEditor.d.ts +20 -2
- package/lib/typescript/src/EditorAPI.d.ts +42 -1
- package/lib/typescript/src/WebViewAPI.d.ts +4 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/package.json +12 -4
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-core.js +39 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-css.js +19 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-glsl.js +1 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-graphql.js +50 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-icu-messageformat.js +1 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-react-native.js +6 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sksl.js +7 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sql.js +5 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-embed-tailwind.js +63 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-glsl.js +20 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-icu-messageformat.js +11 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-js-completion.js +72 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-react-native.js +71 -0
- package/src/assets/codemirror/@actualwave_codemirror-lang-sksl.js +7 -2
- package/src/assets/codemirror/@codemirror_autocomplete.js +9 -9
- package/src/assets/codemirror/@codemirror_commands.js +86 -86
- package/src/assets/codemirror/@codemirror_lang-css.js +2 -2
- package/src/assets/codemirror/@codemirror_lang-go.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-html.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-javascript.js +4 -4
- package/src/assets/codemirror/@codemirror_lang-jinja.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-json.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-less.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-liquid.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-markdown.js +2 -2
- package/src/assets/codemirror/@codemirror_lang-python.js +1 -1
- package/src/assets/codemirror/@codemirror_lang-sql.js +4 -4
- package/src/assets/codemirror/@codemirror_lang-xml.js +1 -1
- package/src/assets/codemirror/@codemirror_language.js +11 -11
- package/src/assets/codemirror/@codemirror_legacy-modes_mode_clike.js +1 -1
- package/src/assets/codemirror/@codemirror_legacy-modes_mode_mathematica.js +1 -1
- package/src/assets/codemirror/@codemirror_legacy-modes_mode_oz.js +1 -1
- package/src/assets/codemirror/@codemirror_legacy-modes_mode_verilog.js +1 -1
- package/src/assets/codemirror/@codemirror_lint.js +5 -5
- package/src/assets/codemirror/@codemirror_merge.js +4 -4
- package/src/assets/codemirror/@codemirror_search.js +8 -8
- package/src/assets/codemirror/@codemirror_state.js +1 -1
- package/src/assets/codemirror/@codemirror_theme-one-dark.js +3 -3
- package/src/assets/codemirror/@codemirror_view.js +6 -6
- package/src/assets/codemirror/@lezer_common.js +2 -2
- package/src/assets/codemirror/@lezer_css.js +1 -1
- package/src/assets/codemirror/@lezer_javascript.js +1 -1
- package/src/assets/codemirror/@lezer_lr.js +1 -1
- package/src/assets/codemirror/@lezer_markdown.js +4 -4
- package/src/assets/codemirror/@lezer_sass.js +1 -1
- package/src/assets/codemirror/_core.js +129 -129
- package/src/assets/codemirror-editor.umd.js +130 -17
- package/src/assets/editor.html +37 -2
- package/lib/typescript/app.plugin.d.ts +0 -3
- package/lib/typescript/babel.config.d.ts +0 -10
- package/lib/typescript/react-native.config.d.ts +0 -2
- package/lib/typescript/scripts/copy-assets.d.ts +0 -2
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
THIRD PARTY NOTICES
|
|
2
|
+
===================
|
|
3
|
+
|
|
4
|
+
This package distributes compiled browser assets built from the following
|
|
5
|
+
open-source libraries. Their licenses and copyright notices are reproduced
|
|
6
|
+
below as required by the MIT License.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
-------------------------------------------------------------------------------
|
|
10
|
+
CodeMirror, @codemirror/*, @lezer/*, crelt, style-mod, w3c-keyname,
|
|
11
|
+
@marijn/find-cluster-break
|
|
12
|
+
-------------------------------------------------------------------------------
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (C) 2018-2024 by Marijn Haverbeke <marijn@haverbeke.berlin> and others
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
34
|
+
|
|
35
|
+
https://codemirror.net/
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
-------------------------------------------------------------------------------
|
|
39
|
+
@uiw/codemirror-themes, @uiw/codemirror-theme-*
|
|
40
|
+
-------------------------------------------------------------------------------
|
|
41
|
+
MIT License
|
|
42
|
+
|
|
43
|
+
Copyright (c) 2022 kenny wong <wowohoo@qq.com>
|
|
44
|
+
|
|
45
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
46
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
47
|
+
in the Software without restriction, including without limitation the rights
|
|
48
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
49
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
50
|
+
furnished to do so, subject to the following conditions:
|
|
51
|
+
|
|
52
|
+
The above copyright notice and this permission notice shall be included in all
|
|
53
|
+
copies or substantial portions of the Software.
|
|
54
|
+
|
|
55
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
56
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
57
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
58
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
59
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
60
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
61
|
+
SOFTWARE.
|
|
62
|
+
|
|
63
|
+
https://github.com/uiwjs/react-codemirror
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
-------------------------------------------------------------------------------
|
|
67
|
+
cm6-graphql, graphql, graphql-language-service
|
|
68
|
+
-------------------------------------------------------------------------------
|
|
69
|
+
MIT License
|
|
70
|
+
|
|
71
|
+
Copyright (c) 2021 GraphQL Contributors
|
|
72
|
+
|
|
73
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
74
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
75
|
+
in the Software without restriction, including without limitation the rights
|
|
76
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
77
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
78
|
+
furnished to do so, subject to the following conditions:
|
|
79
|
+
|
|
80
|
+
The above copyright notice and this permission notice shall be included in all
|
|
81
|
+
copies or substantial portions of the Software.
|
|
82
|
+
|
|
83
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
84
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
85
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
86
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
87
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
88
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
89
|
+
SOFTWARE.
|
|
90
|
+
|
|
91
|
+
https://github.com/graphql/graphiql
|
|
92
|
+
https://github.com/graphql/graphql-js
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
-------------------------------------------------------------------------------
|
|
96
|
+
@babel/runtime
|
|
97
|
+
-------------------------------------------------------------------------------
|
|
98
|
+
MIT License
|
|
99
|
+
|
|
100
|
+
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
|
101
|
+
|
|
102
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
103
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
104
|
+
in the Software without restriction, including without limitation the rights
|
|
105
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
106
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
107
|
+
furnished to do so, subject to the following conditions:
|
|
108
|
+
|
|
109
|
+
The above copyright notice and this permission notice shall be included in all
|
|
110
|
+
copies or substantial portions of the Software.
|
|
111
|
+
|
|
112
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
113
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
114
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
115
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
116
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
117
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
118
|
+
SOFTWARE.
|
|
119
|
+
|
|
120
|
+
https://babel.dev
|
package/app.plugin.js
CHANGED
package/lib/module/CodeEditor.js
CHANGED
|
@@ -47,6 +47,9 @@ const CodeEditor = ({
|
|
|
47
47
|
onNavigationStateChange,
|
|
48
48
|
renderBlockingView = () => /*#__PURE__*/_jsx(BlockingView, {}),
|
|
49
49
|
language,
|
|
50
|
+
languageConfig,
|
|
51
|
+
embeds,
|
|
52
|
+
languages,
|
|
50
53
|
extensions = DEFAULT_EXTENSIONS,
|
|
51
54
|
theme,
|
|
52
55
|
content = "",
|
|
@@ -83,6 +86,9 @@ const CodeEditor = ({
|
|
|
83
86
|
const propsRef = useRef({
|
|
84
87
|
content,
|
|
85
88
|
language,
|
|
89
|
+
languageConfig,
|
|
90
|
+
embeds,
|
|
91
|
+
languages,
|
|
86
92
|
extensions,
|
|
87
93
|
theme,
|
|
88
94
|
viewport
|
|
@@ -90,6 +96,9 @@ const CodeEditor = ({
|
|
|
90
96
|
propsRef.current = {
|
|
91
97
|
content,
|
|
92
98
|
language,
|
|
99
|
+
languageConfig,
|
|
100
|
+
embeds,
|
|
101
|
+
languages,
|
|
93
102
|
extensions,
|
|
94
103
|
theme,
|
|
95
104
|
viewport
|
|
@@ -139,7 +148,10 @@ const CodeEditor = ({
|
|
|
139
148
|
}
|
|
140
149
|
}, [content]);
|
|
141
150
|
|
|
142
|
-
// Push language changes to live editor
|
|
151
|
+
// Push language changes to live editor. Reads languageConfig/embeds from propsRef
|
|
152
|
+
// (rather than depending on them) so a language switch always carries the current
|
|
153
|
+
// embeds along — otherwise switching away from and back to 'javascript' would silently
|
|
154
|
+
// drop any previously-configured tagged-template embeddings/support extensions.
|
|
143
155
|
const prevLanguageRef = useRef(null);
|
|
144
156
|
useEffect(() => {
|
|
145
157
|
if (prevLanguageRef.current === null) {
|
|
@@ -148,9 +160,58 @@ const CodeEditor = ({
|
|
|
148
160
|
}
|
|
149
161
|
if (prevLanguageRef.current === language) return;
|
|
150
162
|
prevLanguageRef.current = language;
|
|
151
|
-
if (language)
|
|
163
|
+
if (language) {
|
|
164
|
+
const {
|
|
165
|
+
languageConfig: lc,
|
|
166
|
+
embeds: em
|
|
167
|
+
} = propsRef.current;
|
|
168
|
+
callEditor(e => e.setLanguage(language, lc, em));
|
|
169
|
+
}
|
|
152
170
|
}, [language]);
|
|
153
171
|
|
|
172
|
+
// Push embeds changes to live editor — re-resolves the current language with the new
|
|
173
|
+
// embeds, since tagged-template embeddings/support extensions are baked into the
|
|
174
|
+
// 'javascript' LanguageSupport at resolution time rather than being separately
|
|
175
|
+
// reconfigurable. No-op for any language other than 'javascript'.
|
|
176
|
+
const prevEmbedsRef = useRef(null);
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
if (prevEmbedsRef.current === null) {
|
|
179
|
+
prevEmbedsRef.current = embeds;
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (prevEmbedsRef.current === embeds) return;
|
|
183
|
+
prevEmbedsRef.current = embeds;
|
|
184
|
+
const {
|
|
185
|
+
language: l,
|
|
186
|
+
languageConfig: lc
|
|
187
|
+
} = propsRef.current;
|
|
188
|
+
if (l) callEditor(e => e.setLanguage(l, lc, embeds));
|
|
189
|
+
}, [embeds]);
|
|
190
|
+
|
|
191
|
+
// Push languages changes to live editor — registers the new mappings, then re-resolves
|
|
192
|
+
// the current language, since it may be one that was previously unresolvable.
|
|
193
|
+
const prevLanguagesRef = useRef(null);
|
|
194
|
+
useEffect(() => {
|
|
195
|
+
if (prevLanguagesRef.current === null) {
|
|
196
|
+
prevLanguagesRef.current = languages;
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (prevLanguagesRef.current === languages) return;
|
|
200
|
+
prevLanguagesRef.current = languages;
|
|
201
|
+
if (!languages) return;
|
|
202
|
+
const {
|
|
203
|
+
language: l,
|
|
204
|
+
languageConfig: lc,
|
|
205
|
+
embeds: em
|
|
206
|
+
} = propsRef.current;
|
|
207
|
+
callEditor(async e => {
|
|
208
|
+
for (const [name, packageName] of Object.entries(languages)) {
|
|
209
|
+
await e.registerLanguage(name, packageName);
|
|
210
|
+
}
|
|
211
|
+
if (l) await e.setLanguage(l, lc, em);
|
|
212
|
+
});
|
|
213
|
+
}, [languages]);
|
|
214
|
+
|
|
154
215
|
// Push theme changes to live editor
|
|
155
216
|
const prevThemeRef = useRef(null);
|
|
156
217
|
useEffect(() => {
|
|
@@ -193,6 +254,9 @@ const CodeEditor = ({
|
|
|
193
254
|
const {
|
|
194
255
|
content: c,
|
|
195
256
|
language: l,
|
|
257
|
+
languageConfig: lc,
|
|
258
|
+
embeds: em,
|
|
259
|
+
languages: lg,
|
|
196
260
|
extensions: e,
|
|
197
261
|
theme: t,
|
|
198
262
|
viewport: v
|
|
@@ -201,6 +265,9 @@ const CodeEditor = ({
|
|
|
201
265
|
apiRef.current.setInitialConfig({
|
|
202
266
|
content: c,
|
|
203
267
|
language: l,
|
|
268
|
+
languageConfig: lc,
|
|
269
|
+
embeds: em,
|
|
270
|
+
languages: lg,
|
|
204
271
|
extensions: e,
|
|
205
272
|
theme: t,
|
|
206
273
|
viewport: v
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import WebView from "react-native-webview";
|
|
3
3
|
import WebViewAPI from "./WebViewAPI";
|
|
4
|
-
import type { ExtensionSpec, HistorySize, ViewportSettings } from "./EditorAPI";
|
|
4
|
+
import type { EmbedsConfig, ExtensionSpec, HistorySize, ViewportSettings } from "./EditorAPI";
|
|
5
5
|
export interface CodeEditorProps {
|
|
6
6
|
onInitialized: (api: WebViewAPI) => void;
|
|
7
7
|
onHistorySizeUpdate: (size: HistorySize) => void;
|
|
@@ -19,6 +19,24 @@ export interface CodeEditorProps {
|
|
|
19
19
|
renderBlockingView?: () => React.ReactNode;
|
|
20
20
|
/** Language name for syntax highlighting, e.g. 'javascript', 'python'. */
|
|
21
21
|
language?: string;
|
|
22
|
+
/** Options passed to the language factory, e.g. { jsx: true, typescript: true } for 'javascript'. */
|
|
23
|
+
languageConfig?: Record<string, unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* Tagged-template DSL embeddings (e.g. `` sql`...` ``) and javascript support
|
|
26
|
+
* extensions (e.g. completion-only DSLs with no grammar) to mix into the
|
|
27
|
+
* 'javascript' language. Alternative to calling api.registerTaggedTemplate() /
|
|
28
|
+
* api.registerSupportExtension() imperatively — use whichever fits: this prop
|
|
29
|
+
* for "known up front, declarative," the imperative calls for "registered once,
|
|
30
|
+
* dynamically, from app code after init."
|
|
31
|
+
*/
|
|
32
|
+
embeds?: EmbedsConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Custom language packages as `{ name: packageName }`, for languages that don't follow
|
|
35
|
+
* the `@codemirror/lang-{name}` convention, e.g. `{ sksl: '@actualwave/codemirror-lang-sksl' }`.
|
|
36
|
+
* Registered before the initial `language` is resolved. Alternative to calling
|
|
37
|
+
* api.registerLanguage() imperatively.
|
|
38
|
+
*/
|
|
39
|
+
languages?: Record<string, string>;
|
|
22
40
|
/** Additional CodeMirror extension specs loaded on top of the language. */
|
|
23
41
|
extensions?: ExtensionSpec[];
|
|
24
42
|
/** Theme name from the @uiw/codemirror-themes collection, e.g. 'darcula', 'monokai'. */
|
|
@@ -29,6 +47,6 @@ export interface CodeEditorProps {
|
|
|
29
47
|
/** Override the default editor HTML URI (useful on iOS where the bundle path varies). */
|
|
30
48
|
editorUri?: string;
|
|
31
49
|
}
|
|
32
|
-
declare const CodeEditor: ({ onInitialized, onHistorySizeUpdate, onLog, onError, onContentUpdate, onSelectionChange, onShortcut, onWebViewRefUpdated, onLoad, onLoadStart, onLoadProgress, onLoadEnd, onNavigationStateChange, renderBlockingView, language, extensions, theme, content, viewport, allowFileAccess, editorUri, }: CodeEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
declare const CodeEditor: ({ onInitialized, onHistorySizeUpdate, onLog, onError, onContentUpdate, onSelectionChange, onShortcut, onWebViewRefUpdated, onLoad, onLoadStart, onLoadProgress, onLoadEnd, onNavigationStateChange, renderBlockingView, language, languageConfig, embeds, languages, extensions, theme, content, viewport, allowFileAccess, editorUri, }: CodeEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
51
|
export default CodeEditor;
|
|
34
52
|
//# sourceMappingURL=CodeEditor.d.ts.map
|
|
@@ -28,11 +28,27 @@ export interface CompletionItem {
|
|
|
28
28
|
detail?: string;
|
|
29
29
|
info?: string;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Tagged-template DSL embedding config for the 'javascript' language (e.g.
|
|
33
|
+
* `` sql`...` ``, `` gql`...` ``), passed per-call to setLanguage/createEditor
|
|
34
|
+
* and merged with whatever's been registered globally via
|
|
35
|
+
* registerTaggedTemplate/registerSupportExtension.
|
|
36
|
+
* - taggedTemplates: package names exporting createEmbedding(), e.g.
|
|
37
|
+
* '@actualwave/codemirror-lang-embed-sql'.
|
|
38
|
+
* - supportExtensions: package names (or [name, config] tuples) exporting
|
|
39
|
+
* createSupportExtension(), e.g. '@actualwave/codemirror-lang-embed-tailwind',
|
|
40
|
+
* or ['@actualwave/codemirror-lang-embed-react-native', { modules }]. Not
|
|
41
|
+
* JS-specific by name or contract — currently only mixed into 'javascript'.
|
|
42
|
+
*/
|
|
43
|
+
export interface EmbedsConfig {
|
|
44
|
+
taggedTemplates?: string[];
|
|
45
|
+
supportExtensions?: Array<string | [string, Record<string, unknown>]>;
|
|
46
|
+
}
|
|
31
47
|
export interface EditorAPI {
|
|
32
48
|
getValue(): Promise<string>;
|
|
33
49
|
setValue(value: string): Promise<void>;
|
|
34
50
|
resetValue(value?: string): Promise<void>;
|
|
35
|
-
setLanguage(name: string): Promise<void>;
|
|
51
|
+
setLanguage(name: string, config?: Record<string, unknown>, embeds?: EmbedsConfig): Promise<void>;
|
|
36
52
|
setExtensions(specs: ExtensionSpec[]): Promise<void>;
|
|
37
53
|
setTheme(themeName?: string): Promise<void>;
|
|
38
54
|
setFontSize(size: number): Promise<void>;
|
|
@@ -62,6 +78,31 @@ export interface EditorAPI {
|
|
|
62
78
|
setSoftKeyboard(enabled: boolean): Promise<void>;
|
|
63
79
|
registerShortcut(key: string, name: string): Promise<void>;
|
|
64
80
|
unregisterShortcut(key: string): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Maps a language name to an npm package that doesn't follow the
|
|
83
|
+
* `@codemirror/lang-{name}` convention (e.g. `'sksl'` → `'@actualwave/codemirror-lang-sksl'`),
|
|
84
|
+
* for the lifetime of this editor page. The package must be one bundled in the
|
|
85
|
+
* WebView assets. Takes effect on the next setLanguage() call — follow it with
|
|
86
|
+
* setLanguage(name) to apply. Alternative to the `languages` prop on CodeEditor,
|
|
87
|
+
* which registers before the initial language is resolved.
|
|
88
|
+
*/
|
|
89
|
+
registerLanguage(name: string, packageName: string): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Registers a tagged-template DSL embedding package globally, for the lifetime of
|
|
92
|
+
* this editor page — picked up by any subsequent setLanguage('javascript', ...) call
|
|
93
|
+
* (including the one already resolved at createEditor time, so call this before the
|
|
94
|
+
* language is first set to 'javascript' if you want it included immediately, or follow
|
|
95
|
+
* it with setLanguage('javascript', ...) to re-resolve). Alternative to passing
|
|
96
|
+
* `embeds.taggedTemplates` per-call.
|
|
97
|
+
*/
|
|
98
|
+
registerTaggedTemplate(packageName: string): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Registers a support-extension package (e.g. a completion source with no nested
|
|
101
|
+
* grammar) globally — same timing/re-resolve caveat as registerTaggedTemplate.
|
|
102
|
+
* Alternative to passing `embeds.supportExtensions` per-call. Not JS-specific by
|
|
103
|
+
* name or contract — currently only mixed into the 'javascript' language.
|
|
104
|
+
*/
|
|
105
|
+
registerSupportExtension(packageName: string, config?: Record<string, unknown>): Promise<void>;
|
|
65
106
|
loadExtension(moduleName: string): Promise<object>;
|
|
66
107
|
destroy(): Promise<void>;
|
|
67
108
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EditorAPI, ExtensionSpec, HistorySize, ViewportSettings } from './EditorAPI';
|
|
1
|
+
import type { EditorAPI, EmbedsConfig, ExtensionSpec, HistorySize, ViewportSettings } from './EditorAPI';
|
|
2
2
|
export interface WebViewAPIHandlers {
|
|
3
3
|
onInitialized: (api: WebViewAPI) => void;
|
|
4
4
|
onHistorySizeUpdate: (size: HistorySize) => void;
|
|
@@ -15,6 +15,9 @@ export interface WebViewRef {
|
|
|
15
15
|
export interface InitialConfig {
|
|
16
16
|
content?: string;
|
|
17
17
|
language?: string;
|
|
18
|
+
languageConfig?: Record<string, unknown>;
|
|
19
|
+
embeds?: EmbedsConfig;
|
|
20
|
+
languages?: Record<string, string>;
|
|
18
21
|
extensions?: ExtensionSpec[];
|
|
19
22
|
theme?: string;
|
|
20
23
|
viewport?: ViewportSettings;
|
|
@@ -3,5 +3,5 @@ export { default as CodeEditor } from './CodeEditor';
|
|
|
3
3
|
export type { CodeEditorProps } from './CodeEditor';
|
|
4
4
|
export { default as WebViewAPI } from './WebViewAPI';
|
|
5
5
|
export type { WebViewAPIHandlers, WebViewRef, InitialConfig } from './WebViewAPI';
|
|
6
|
-
export type { EditorAPI, ExtensionSpec, ViewportSettings, CursorPosition, HistorySize, } from './EditorAPI';
|
|
6
|
+
export type { EditorAPI, ExtensionSpec, ViewportSettings, CursorPosition, HistorySize, CompletionItem, EmbedsConfig, } from './EditorAPI';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actualwave/react-native-codeditor",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "CodeMirror 6 code editor for React Native, embedded in a WebView with a full bidirectional RPC bridge. Offline, no CDN required.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"lib",
|
|
20
20
|
"app.plugin.js",
|
|
21
21
|
"react-native.config.js",
|
|
22
|
+
"SKILL.md",
|
|
23
|
+
"CHANGELOG.md",
|
|
24
|
+
"THIRD_PARTY_NOTICES",
|
|
22
25
|
"!lib/module/assets",
|
|
23
26
|
"!lib/typescript/src/assets",
|
|
24
27
|
"!**/*.map",
|
|
@@ -36,7 +39,13 @@
|
|
|
36
39
|
"keywords": [
|
|
37
40
|
"react-native",
|
|
38
41
|
"ios",
|
|
39
|
-
"android"
|
|
42
|
+
"android",
|
|
43
|
+
"codemirror",
|
|
44
|
+
"codemirror6",
|
|
45
|
+
"code-editor",
|
|
46
|
+
"editor",
|
|
47
|
+
"webview",
|
|
48
|
+
"expo"
|
|
40
49
|
],
|
|
41
50
|
"repository": {
|
|
42
51
|
"type": "git",
|
|
@@ -52,7 +61,7 @@
|
|
|
52
61
|
"registry": "https://registry.npmjs.org/"
|
|
53
62
|
},
|
|
54
63
|
"devDependencies": {
|
|
55
|
-
"@actualwave/codemirror-package": "^0.1.
|
|
64
|
+
"@actualwave/codemirror-package": "^0.1.5",
|
|
56
65
|
"@react-native/assets-registry": "^0.85.3",
|
|
57
66
|
"@react-native/babel-preset": "0.85.0",
|
|
58
67
|
"@react-native/js-polyfills": "^0.85.3",
|
|
@@ -78,7 +87,6 @@
|
|
|
78
87
|
"workspaces": [
|
|
79
88
|
"example"
|
|
80
89
|
],
|
|
81
|
-
"packageManager": "yarn@4.11.0",
|
|
82
90
|
"react-native-builder-bob": {
|
|
83
91
|
"source": "src",
|
|
84
92
|
"output": "lib",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedCore(){// A registry of (tagPath -> Language) matchers, tried in registration order.
|
|
2
|
+
// `tagPath` is the array produced by readIdentifierPath below, e.g. ['sql'],
|
|
3
|
+
// ['gql'], ['styled', 'View'] (for `styled.View` tags), or ['styled'] (for
|
|
4
|
+
// `styled(Component)` — the call collapses to its callee's own path).
|
|
5
|
+
function createTagRegistry(){const entries=[];return{register(matcher,language){entries.push({matcher,language})},resolve(tagPath){for(const{matcher,language}of entries)if(matcher(tagPath))return language;return null}}}// Walks a tag expression's SyntaxNode down to a flat identifier path.
|
|
6
|
+
// Only VariableName / MemberExpression(.prop) / CallExpression(callee) shapes
|
|
7
|
+
// are recognized — anything else (bracket access, computed member, etc.)
|
|
8
|
+
// is rejected by returning null, since tag-name matching is purely textual
|
|
9
|
+
// (see SINGLE_FILE_PROTOTYPES.md open question 2).
|
|
10
|
+
function readIdentifierPath(node,input){switch(node.name){case"VariableName":return[input.read(node.from,node.to)];case"MemberExpression":{const object=node.firstChild,property=node.lastChild;if(!object||!property)return null;if("PropertyName"!==property.name&&"PrivatePropertyName"!==property.name)// bracket-access form (styled['View']) — not a supported tag shape
|
|
11
|
+
return null;const objectPath=readIdentifierPath(object,input);return objectPath?[...objectPath,input.read(property.from,property.to)]:null}case"CallExpression":{// styled(Component)`...` collapses to the callee's own path, so
|
|
12
|
+
// `styled(Foo)` and bare `styled` both match a matcher for ['styled'].
|
|
13
|
+
const callee=node.firstChild;return callee?readIdentifierPath(callee,input):null}default:return null}}// Given a `TemplateString` node (materialized SyntaxNode, i.e. already
|
|
14
|
+
// `.node`), finds its tag identifier path if it's the template of a
|
|
15
|
+
// TaggedTemplateExpression, or null otherwise (plain, untagged templates).
|
|
16
|
+
function getTaggedTemplateTagPath(templateStringNode,input){const tagged=templateStringNode.parent;if(!tagged||"TaggedTemplateExpression"!==tagged.name)return null;// SyntaxNode accessors (.lastChild etc.) don't return reference-stable
|
|
17
|
+
// objects — compare by range instead of `===` to check this is really
|
|
18
|
+
// the tagged expression's own template (not, in principle, some other
|
|
19
|
+
// child at the same tree position).
|
|
20
|
+
const last=tagged.lastChild;if(!last||last.from!==templateStringNode.from||last.to!==templateStringNode.to)return null;const tagNode=tagged.firstChild;return tagNode?readIdentifierPath(tagNode,input):null}// A `TemplateString` node's own range spans the opening and closing backtick
|
|
21
|
+
// characters, and any `${...}` interpolations appear as `Interpolation` child
|
|
22
|
+
// nodes interleaved with the literal text. Nested DSL parsers only understand
|
|
23
|
+
// the literal text, so the overlay must exclude both the delimiters and any
|
|
24
|
+
// interpolation ranges — otherwise the nested parser sees stray backtick/`${`
|
|
25
|
+
// characters it doesn't recognize and produces spurious error nodes.
|
|
26
|
+
function templateContentRanges(templateStringNode){const ranges=[];let pos=templateStringNode.from+1;// skip opening backtick
|
|
27
|
+
for(let child=templateStringNode.firstChild;child;child=child.nextSibling)"Interpolation"===child.name&&(child.from>pos&&ranges.push({from:pos,to:child.from}),pos=child.to);const end=templateStringNode.to-1;// exclude closing backtick
|
|
28
|
+
return end>pos&&ranges.push({from:pos,to:end}),ranges}// Wraps a JS/TSX LanguageSupport (as returned by @codemirror/lang-javascript's
|
|
29
|
+
// javascript()) so that TaggedTemplateExpression templates whose tag matches
|
|
30
|
+
// an entry in `registry` get parsed by that entry's nested Language.
|
|
31
|
+
function embedTaggedTemplates(languageSupport,registry){const wrappedLanguage=languageSupport.language.configure({wrap:parseMixed((node,input)=>{if("TemplateString"!==node.name)return null;const tagPath=getTaggedTemplateTagPath(node.node,input);if(!tagPath)return null;const language=registry.resolve(tagPath);return language?{parser:language.parser,overlay:templateContentRanges(node.node)}:null})});return new LanguageSupport(wrappedLanguage,languageSupport.support)}// Convenience matcher factory for the common case: a bare identifier tag
|
|
32
|
+
// (e.g. `sql`, `gql`, `css`) with no member/call wrapping.
|
|
33
|
+
function matchTagName(name){return tagPath=>1===tagPath.length&&tagPath[0]===name}// Adapts a CM6 `Text` (`state.doc`) to the minimal Lezer `Input` shape
|
|
34
|
+
// (`.read(from, to)`) that readIdentifierPath/getTaggedTemplateTagPath need.
|
|
35
|
+
// Inside a `parseMixed` callback (embedTaggedTemplates above), Lezer already
|
|
36
|
+
// supplies a real Input, so this isn't needed there — it's for call sites
|
|
37
|
+
// walking an already-built tree directly against `state.doc`, e.g. a
|
|
38
|
+
// CompletionSource or a decoration ViewPlugin (see embed-tailwind).
|
|
39
|
+
function docAsInput(doc){return{read:(from,to)=>doc.sliceString(from,to)}}if(hasRequiredCodemirrorLangEmbedCore)return codemirrorLangEmbedCore;hasRequiredCodemirrorLangEmbedCore=1;const{parseMixed}=require$$0,{LanguageSupport}=require$$1;return codemirrorLangEmbedCore={createTagRegistry,readIdentifierPath,getTaggedTemplateTagPath,templateContentRanges,embedTaggedTemplates,matchTagName,docAsInput},codemirrorLangEmbedCore}const module={exports:exports};var codemirrorLangEmbedCore,hasRequiredCodemirrorLangEmbedCore,require$$0=await requireAsyncModule("@lezer/common"),require$$1=await requireAsyncModule("@codemirror/language"),codemirrorLangEmbedCoreExports=requireCodemirrorLangEmbedCore(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedCoreExports);return module.exports=index,module.exports}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedCss(){// Matches the bare `css` tag as well as any styled-components-shaped tag:
|
|
2
|
+
// `styled.View`/`styled.Text`/... (MemberExpression) and `styled(Component)`
|
|
3
|
+
// (CallExpression, which readIdentifierPath collapses to the callee's own
|
|
4
|
+
// path, so it also resolves to a `['styled', ...]` path).
|
|
5
|
+
function matchCssTag(tagPath){return"css"===tagPath[0]||"styled"===tagPath[0]}// css`...`/styled`...` content is a bare declaration list (`color: #fff;
|
|
6
|
+
// padding: 12px;`), not a full stylesheet with a `selector { ... }` wrapper.
|
|
7
|
+
// Parsed with cssLanguage's default "StyleSheet" top rule, the parser treats
|
|
8
|
+
// that content as sitting *before* any rule block, so cssCompletionSource
|
|
9
|
+
// (which only offers property names when the cursor's ancestor is "Block" or
|
|
10
|
+
// "Styles" — see @codemirror/lang-css's completion.js) falls back to
|
|
11
|
+
// selector/tag-name completion instead (hence "main"/"small"/"summary").
|
|
12
|
+
// @codemirror/lang-html hits this exact same shape for `style="..."`
|
|
13
|
+
// attribute values and fixes it by reparsing with the grammar's alternate
|
|
14
|
+
// "Styles" top rule (see its dist: `cssLanguage.parser.configure({top:
|
|
15
|
+
// "Styles"})`) — same grammar, same NodeSet, so the languageDataProp
|
|
16
|
+
// (autocomplete source) attached at cssLanguage's original definition still
|
|
17
|
+
// resolves correctly off the "Styles" top node. Only `.parser` is used here;
|
|
18
|
+
// embed-core's registry never touches other Language fields (see resolve()).
|
|
19
|
+
function createEmbedding(){return{matcher:matchCssTag,language:{parser:stylesParser},extension:css().support}}if(hasRequiredCodemirrorLangEmbedCss)return codemirrorLangEmbedCss;hasRequiredCodemirrorLangEmbedCss=1;const{cssLanguage,css}=require$$0,stylesParser=cssLanguage.parser.configure({top:"Styles"});return codemirrorLangEmbedCss={createEmbedding},codemirrorLangEmbedCss}const module={exports:exports};var codemirrorLangEmbedCss,hasRequiredCodemirrorLangEmbedCss,require$$0=await requireAsyncModule("@codemirror/lang-css"),codemirrorLangEmbedCssExports=requireCodemirrorLangEmbedCss(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedCssExports);return module.exports=index,module.exports}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedGlsl(){function createEmbedding(){return{matcher:matchTagName("glsl"),language:glslLanguage,extension:glsl().support}}if(hasRequiredCodemirrorLangEmbedGlsl)return codemirrorLangEmbedGlsl;hasRequiredCodemirrorLangEmbedGlsl=1;const{glslLanguage,glsl}=require$$0,{matchTagName}=require$$1;return codemirrorLangEmbedGlsl={createEmbedding},codemirrorLangEmbedGlsl}const module={exports:exports};var codemirrorLangEmbedGlsl,hasRequiredCodemirrorLangEmbedGlsl,require$$0=await requireAsyncModule("@actualwave/codemirror-lang-glsl"),require$$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),codemirrorLangEmbedGlslExports=requireCodemirrorLangEmbedGlsl(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedGlslExports);return module.exports=index,module.exports}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireGraphqlLanguage(){function graphqlLanguageSupport(){return new LanguageSupport(graphqlLanguage)}if(hasRequiredGraphqlLanguage)return graphqlLanguage_1;hasRequiredGraphqlLanguage=1;// This file is a trimmed copy of the `graphqlLanguage` export from `cm6-graphql`
|
|
2
|
+
// (https://github.com/graphql/graphiql/tree/main/packages/cm6-graphql), reproduced
|
|
3
|
+
// here instead of taken as a dependency.
|
|
4
|
+
//
|
|
5
|
+
// Why: `cm6-graphql` bundles everything (this grammar, plus schema-aware
|
|
6
|
+
// completion/hover/lint) into one module that eagerly requires `graphql` and
|
|
7
|
+
// `graphql-language-service` — together pulling in ~400kb+ even though this
|
|
8
|
+
// package only ever uses the grammar below for syntax highlighting of embedded
|
|
9
|
+
// `gql`/`graphql` tagged templates, with no schema validation. The grammar
|
|
10
|
+
// itself has zero runtime dependency on either package (it's a pure Lezer
|
|
11
|
+
// parser plus CodeMirror highlight/indent/fold node props), so copying just
|
|
12
|
+
// this part avoids the dependency weight entirely without touching or forking
|
|
13
|
+
// `cm6-graphql` itself.
|
|
14
|
+
//
|
|
15
|
+
// `cm6-graphql` is MIT licensed:
|
|
16
|
+
//
|
|
17
|
+
// MIT License
|
|
18
|
+
//
|
|
19
|
+
// Copyright (C) 2021 by GraphQL Contributors
|
|
20
|
+
//
|
|
21
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
22
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
23
|
+
// in the Software without restriction, including without limitation the rights
|
|
24
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
25
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
26
|
+
// furnished to do so, subject to the following conditions:
|
|
27
|
+
//
|
|
28
|
+
// The above copyright notice and this permission notice shall be included in
|
|
29
|
+
// all copies or substantial portions of the Software.
|
|
30
|
+
//
|
|
31
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
32
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
33
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
34
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
35
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
36
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
37
|
+
// THE SOFTWARE.
|
|
38
|
+
//
|
|
39
|
+
// Copied verbatim (down to the parser table) from `cm6-graphql@0.2.2`,
|
|
40
|
+
// `dist/index.js`, with only the two exports kept and `require` substituted
|
|
41
|
+
// for the original `import` statements. If `cm6-graphql` ever changes its
|
|
42
|
+
// highlighting (new node types, new styleTags entries), this copy needs to be
|
|
43
|
+
// refreshed by hand from the upstream source — it is not wired into any
|
|
44
|
+
// update mechanism.
|
|
45
|
+
const{LRParser}=require$$0,{LRLanguage,indentNodeProp,delimitedIndent,foldNodeProp,foldInside,LanguageSupport}=require$$1,{styleTags,tags}=require$$2,spec_name={__proto__:null,query:241,mutation:243,subscription:245,on:86,fragment:92,schema:102,scalar:114,type:120,implements:126,interface:140,union:146,enum:154,input:164,directive:172,repeatable:176,extend:192},parser=/*@__PURE__*/LRParser.deserialize({version:14,states:"LWOYQPOOO!WQPO'#C}O!`QPO'#C_OOQO'#C_'#C_O!iQPO'#DYOOQO'#Ev'#EvOOQO'#D_'#D_O!nQPO'#D^O#_QPO'#D^O!iQPO'#DhO!iQPO'#DrO!iQPO'#DuO!iQPO'#DyO!iQPO'#EOOOQO'#Dd'#DdO#fQPO'#ESOOQO'#D]'#D]O!vQPO'#E^OOQO'#Ea'#EaOOQO'#E]'#E]OOQO'#FT'#FTOOQO'#Eu'#EuOOQO'#Eh'#EhQYQPOOOOQO'#C`'#C`OOQO'#DZ'#DZOOQO'#D`'#D`OOQO'#Di'#DiOOQO'#Ds'#DsOOQO'#Dv'#DvOOQO'#Dz'#DzOOQO'#EP'#EPOOQO'#ET'#ETOOQO'#E_'#E_O#kQPO'#CaO$VQPO'#DQO$[QPO'#DPO$sQPO'#DPO$xQPO'#DSO%WQPO'#DOOOQO'#En'#EnO%fQPO,59iOOQO'#Ca'#CaO%qQPO'#CxOOQO'#El'#ElO'hQPO'#CwO)[QPO'#CdOOQO,58y,58yO)aQPO,58yO)fQPO,58yO)nQPO,58yOOQO'#DT'#DTO)yQPO,59tO{QPO'#FUOOQO'#Db'#DbOOQO,59x,59xO*OQPO,59xO!nQPO,59xO!iQPO,5:PO!iQPO,5:SO!iQPO,5:^O!iQPO,5:aO!iQPO,5:eO!iQPO,5:jO*TQPO,5:nOOQO'#Df'#DfO*YQPO,5:SO+aQPO,5:^O,hQPO,5:aO-oQPO,5:eO.sQPO,5:jO/wQPO,5:nO!nQPO,5:xO!iQPO,5:|O!iQPO,5:}O!iQPO,5;OO!iQPO,5;PO!iQPO,5;QO!iQPO,5;ROOQO-E8f-E8fOOQO,59l,59lO0VQPO'#CzOOQO,59k,59kO0[QPO,59kO0mQPO,59kOOQO'#DR'#DRO0tQPO,59kO1OQPO,59nO!iQPO'#DVOOQO,59p,59pO)aQPO,59pO)fQPO,59pOOQO'#DW'#DWOOQO,59j,59jOOQO-E8l-E8lOOQO1G/T1G/TOOQO,59d,59dOOQO-E8j-E8jO1aQPO'#CeOOQO'#Ei'#EiO1fQPO,59OOOQO1G.e1G.eO)aQPO1G.eO)fQPO1G.eO)fQPO1G/`O1nQPO'#DcO1sQPO,5;pOOQO1G/d1G/dO*OQPO1G/dO1xQPO1G/kO4QQPO1G/nO5]QPO1G/xO6hQPO1G/{O7pQPO1G0PO8xQPO1G0UO/wQPO1G0YO9PQPO1G/nO9WQPO'#DkO9`QPO'#FWOOQO'#Dn'#DnOOQO1G/n1G/nO9hQPO1G/nOOQO'#Dl'#DlO:iQPO1G/xOOQO1G/x1G/xO:pQPO1G/xO;qQPO1G/{O;xQPO'#DxO5dQPO1G/{O<QQQO'#FYOOQO'#D|'#D|OOQO1G0P1G0PO6oQPO1G0PO9`QPO'#FZOOQO'#ER'#EROOQO1G0U1G0UO7wQPO1G0UO<YQPO'#DqO!iQPO'#DqOOQO'#Ep'#EpO<_QPO'#DpO<pQSO1G0YO)yQPO1G0YO>QQPO1G0YOOQO'#EV'#EVOOQO1G0d1G0dO>YQPO1G0dO!qQPO1G0hO?ZQPO1G0iO?ZQPO1G0jO?fQPO1G0kO?nQPO1G0lO?vQPO1G0mOOQO'#C|'#C|O@OQPO'#C{OOQO'#Em'#EmO@TQPO,59fOOQO1G/V1G/VO@]QPO1G/VO@nQPO1G/VOOQO1G/Y1G/YOOQO'#Cg'#CgOOQO,59q,59qOOQO1G/[1G/[O)aQPO1G/[O@uQPO,59POOQO-E8g-E8gOOQO1G.j1G.jOOQO7+$P7+$PO)aQPO7+$POOQO7+$z7+$zO)aQPO7+$zO!iQPO,59}OOQO1G1[1G1[OOQO7+%O7+%OOOQO7+%V7+%VOBOQPO7+%YOOQO7+%Y7+%YO@}QPO7+%YOCZQPO7+%dOOQO7+%d7+%dOBYQPO7+%dODfQPO7+%gODmQPO7+%gOOQO7+%k7+%kODtQPO7+%kOOQO7+%p7+%pOEuQPO7+%pO<pQSO7+%tO)yQPO7+%tO>QQPO7+%tO!iQPO,5:VOOQO,5:V,5:VOFvQPO'#DoO!iQPO'#DoOOQO'#Eo'#EoOGRQPO,5;rO!iQPO,5:dOOQO,5:d,5:dOG^QQO'#D}OGlQQO'#D}OOQO'#Eq'#EqOGqQQO,5;tOG|QPO,5;uO@uQPO,5:]OHXQPO,5:]OOQO-E8n-E8nOOQO'#EZ'#EZOOQO'#E['#E[OOQO'#EY'#EYOH^QPO7+%tOOQO'#EX'#EXO<sQSO'#EXOOQO7+&O7+&OOOQO7+&S7+&SOJcQPO7+&TOOQO7+&T7+&TOIbQPO7+&TOKnQPO7+&UOOQO7+&U7+&UOJmQPO7+&UOLyQPO7+&VOMQQPO7+&VOOQO7+&W7+&WOMXQPO7+&WOOQO7+&X7+&XONYQPO7+&XO! ZQQO,59gOOQO-E8k-E8kOOQO1G/Q1G/QOOQO7+$q7+$qO! xQPO7+$qOOQO7+$v7+$vO@uQPO'#CjO!!ZQPO'#E|OOQO'#E|'#E|O!#UQPO1G.kOOQO<<Gk<<GkOOQO<<Hf<<HfOOQO1G/i1G/iOOQO<<Ht<<HtO!#gQPO<<HtOOQO<<IO<<IOO!$hQPO<<IOO!%iQPO<<IROOQO<<IV<<IVOOQO<<I[<<I[O!&mQPO<<I`O<pQSO<<I`O)yQPO<<I`OOQO1G/q1G/qO@uQPO,5:ZO!'qQPO,5:ZO!'vQPO,5:ZOOQO-E8m-E8mOOQO1G1^1G1^OOQO1G0O1G0OO!(RQQO'#CxO!(dQQO'#CwOOQO,5:i,5:iO!(rQQO,5:iOOQO-E8o-E8oOOQO1G1`1G1`OOQO1G1a1G1aO!)QQPO1G/wO@uQPO1G/wO<sQSO,5:sOOQO,5:s,5:sOOQO<<Io<<IoO!)lQPO<<IoOOQO<<Ip<<IpO!*mQPO<<IpO!+nQPO<<IqOOQO<<Ir<<IrOOQO<<Is<<IsO!,rQQO'#CsO!,yQPO'#CvOOQO'#FP'#FPO!-RQPO1G/ROOQO<<H]<<H]O!-^QPO,59UOOQO,59V,59VO! ZQQO'#ClOOQO7+$V7+$VO!-cQPO7+$VO!-nQPO7+$VOOQOAN>`AN>`OOQOAN>jAN>jO!-|QPOAN>zO<pQSOAN>zO!/QQPO1G/uO@uQPO1G/uO!/`QPO1G/uOOQO1G0T1G0TOOQO7+%c7+%cO!/eQPO7+%cO!/|QPO7+%cOOQO1G0_1G0_OOQOAN?ZAN?ZOOQOAN?[AN?[O!0TQQO'#EjO!0xQQO,59_OOQO,59_,59_O!1PQPO'#FROOQO'#Ek'#EkO!1UQPO,59bOOQO,59b,59bOOQO7+$m7+$mOOQO1G.p1G.pOOQO,59W,59WOOQO<<Gq<<GqO!1^QPO<<GqO!1iQPOG24fOOQO7+%a7+%aO!2mQPO7+%aO@uQPO7+%aOOQO<<H}<<H}O!2{QPO<<H}OOQO,5;U,5;UOOQO-E8h-E8hOOQO1G.y1G.yO! ZQQO,5;mOOQO-E8i-E8iOOQO1G.|1G.|OOQOAN=]AN=]OOQO<<H{<<H{O!3dQPO<<H{OOQOAN>iAN>iO!3rQPO1G1XOOQOAN>gAN>gOOQO7+&s7+&s",stateData:"!4U~O#hOSPOS~OcUOiPO!OiO!TjO!^kO!hlO!kmO!onO!toO!xpO#SqO#lhO#mhO#nhO~O#krO#vvO~OV!OOiPOm{O#kzO~Oi!VOm{O~O!TjO!Z!cO!^kO!hlO!kmO!onO!toO~O!xpO~P!vOm!iO~OVuXhuXiuXmuX#kuX#oTX#tuX#vuX~O#o!rO~OV!sOiPOm{OhsX#ksX#tsX#vsX~O#k!wO~OiPOm{O{#OO#kzO~O#t#POhrX#krX#vrX~Oh#RO#krO#vvO~OV!sOilXmlXhlX#klX#tlX#vlXclX!OlX!TlX!^lX!hlX!klX!olX!tlX!xlX#SlX#flX#llX#mlX#nlX#rlXUlXYlX{lX!zlX#olX~Om{OikXhkX#kkX#tkX#vkXckX!OkX!TkX!^kX!hkX!kkX!okX!tkX!xkX#SkX#fkX#lkX#mkX#nkX#rkXUkXYkX{kX!zkX#okX~OY#UO~OiPO~OiPOm{O~OV!OOiPOm{O~O{#OO~Oi!VO~Om#gO~Oi#jOm{O!a#nOc![a!O![a!T![a!^![a!h![a!k![a!o![a!t![a!x![a#S![a#f![a#l![a#m![a#n![a~Oi#jOm{O!a#nOc!fa!O!fa!T!fa!^!fa!h!fa!k!fa!o!fa!t!fa!x!fa#S!fa#f!fa#l!fa#m!fa#n!fa~Om{O#r#sOc!iai!ia!O!ia!T!ia!^!ia!h!ia!k!ia!o!ia!t!ia!x!ia#S!ia#f!ia#l!ia#m!ia#n!ia~Oi#uOm{Oc!ma!O!ma!T!ma!^!ma!h!ma!k!ma!o!ma!t!ma!x!ma#S!ma#f!ma#l!ma#m!ma#n!ma~Oi#yOm{Oc!ra!O!ra!T!ra!^!ra!h!ra!k!ra!o!ra!t!ra!x!ra#S!ra#f!ra#l!ra#m!ra#n!ra~OcUO{#OO!z$UO#kzO~O#k$_O~OiPOhsa#ksa#tsa#vsa~Om{O~P0[OV!sOm{O~P0[Om{Ohva#kva#tva#vva~O#o$kO~OU$mOY#UO~O#o$rO~Oh$sO~Om{Oc!Xii!Xi!O!Xi!T!Xi!^!Xi!h!Xi!k!Xi!o!Xi!t!Xi!x!Xi#S!Xi#f!Xi#l!Xi#m!Xi#n!Xi~Oi#jOm{Oc![i!O![i!T![i!^![i!h![i!k![i!o![i!t![i!x![i#S![i#f![i#l![i#m![i#n![i~O!a#nO~P2|Oi#jOm{Oc!fi!O!fi!T!fi!^!fi!h!fi!k!fi!o!fi!t!fi!x!fi#S!fi#f!fi#l!fi#m!fi#n!fi~O!a#nO~P4XO#r#sOc!iii!ii!O!ii!T!ii!^!ii!h!ii!k!ii!o!ii!t!ii!x!ii#S!ii#f!ii#l!ii#m!ii#n!ii~Om{O~P5dOi#uOc!mi!O!mi!T!mi!^!mi!h!mi!k!mi!o!mi!t!mi!x!mi#S!mi#f!mi#l!mi#m!mi#n!mi~Om{O~P6oOi#yOc!ri!O!ri!T!ri!^!ri!h!ri!k!ri!o!ri!t!ri!x!ri#S!ri#f!ri#l!ri#m!ri#n!ri~Om{O~P7wO#y%VO~P2|O#kzO#y%VO~OcUO#kzO~Oi#jOc![i!O![i!T![i!^![i!h![i!k![i!o![i!t![i!x![i#S![i#f![i#l![i#m![i#n![i~O#y%VO~P4XOi#jOc!fi!O!fi!T!fi!^!fi!h!fi!k!fi!o!fi!t!fi!x!fi#S!fi#f!fi#l!fi#m!fi#n!fi~O#{%]O~P5gO#kzO#{%]O~OcUOf%_O~O#o%dO~OcUO#kzO{!dX!z!dX#o!dX~O#{%lO$O%gO$P%gO$Q%gO$R%gO$S%gO$T%gO$U%gO$V%gO$W%hO$X%hO$Y%hO$Z%hO$[%hO$]%hO$^%hO$_%hO$`%hO$a%hO$b%hO~O{#OO!z$UO~Oi!VOc#Qi!O#Qi!T#Qi!^#Qi!h#Qi!k#Qi!o#Qi!t#Qi!x#Qi#S#Qi#f#Qi#l#Qi#m#Qi#n#Qi~Oi#jOm{O!a#nO~Om{O#r#sO~Oi#uOm{O~Oi#yOm{O~O#o%{O~OU%}O#k$_O~OiPOhsi#ksi#tsi#vsi~Om{O~P@]O]&RO#kzO~Oi#jOc![q!O![q!T![q!^![q!h![q!k![q!o![q!t![q!x![q#S![q#f![q#l![q#m![q#n![q~Om{O#y%VO~P@}Oi#jOc!fq!O!fq!T!fq!^!fq!h!fq!k!fq!o!fq!t!fq!x!fq#S!fq#f!fq#l!fq#m!fq#n!fq~Om{O#y%VO~PBYOc!iqi!iq!O!iq!T!iq!^!iq!h!iq!k!iq!o!iq!t!iq!x!iq#S!iq#f!iq#l!iq#m!iq#n!iq~O#{%]O~PCeO#r#sO~PCeOi#uOc!mq!O!mq!T!mq!^!mq!h!mq!k!mq!o!mq!t!mq!x!mq#S!mq#f!mq#l!mq#m!mq#n!mq~Oi#yOc!rq!O!rq!T!rq!^!rq!h!rq!k!rq!o!rq!t!rq!x!rq#S!rq#f!rq#l!rq#m!rq#n!rq~OcUO#kzO#o&eO~OcUOh&iO#kzO~Om&kOc!qXf!qXh!qX~Of&nO~OcUOf%_Oh&pO~OcUOh&qO#kzO~O#o&sO~O#{&tOc!vqi!vq!O!vq!T!vq!^!vq!h!vq!k!vq!o!vq!t!vq!x!vq#S!vq#f!vq#l!vq#m!vq#n!vq~Oi#jOc#Vq!O#Vq!T#Vq!^#Vq!h#Vq!k#Vq!o#Vq!t#Vq!x#Vq#S#Vq#f#Vq#l#Vq#m#Vq#n#Vq~Om{O#y%VO~PIbOi#jOc#Wq!O#Wq!T#Wq!^#Wq!h#Wq!k#Wq!o#Wq!t#Wq!x#Wq#S#Wq#f#Wq#l#Wq#m#Wq#n#Wq~Om{O#y%VO~PJmOc#Xqi#Xq!O#Xq!T#Xq!^#Xq!h#Xq!k#Xq!o#Xq!t#Xq!x#Xq#S#Xq#f#Xq#l#Xq#m#Xq#n#Xq~O#{%]O~PKxO#r#sO~PKxOi#uOc#Yq!O#Yq!T#Yq!^#Yq!h#Yq!k#Yq!o#Yq!t#Yq!x#Yq#S#Yq#f#Yq#l#Yq#m#Yq#n#Yq~Oi#yOc#Zq!O#Zq!T#Zq!^#Zq!h#Zq!k#Zq!o#Zq!t#Zq!x#Zq#S#Zq#f#Zq#l#Zq#m#Zq#n#Zq~OY'PO]&}Oa'POb'POc'POd'POe'POf'POi'OO~OiPOhsq#ksq#tsq#vsq~O#q'TOU#pXY#pXm#pX#r#pX#t#pXc#pX{#pX!z#pX#k#pX[#pXh#pX#o#pX~Om{O#r'UO#t'VOUXiYXi~Oi#jOc![y!O![y!T![y!^![y!h![y!k![y!o![y!t![y!x![y#S![y#f![y#l![y#m![y#n![y~Oi#jOc!fy!O!fy!T!fy!^!fy!h!fy!k!fy!o!fy!t!fy!x!fy#S!fy#f!fy#l!fy#m!fy#n!fy~O#{%]Oc!iyi!iy!O!iy!T!iy!^!iy!h!iy!k!iy!o!iy!t!iy!x!iy#S!iy#f!iy#l!iy#m!iy#n!iy~O#{&tOc!vyi!vy!O!vy!T!vy!^!vy!h!vy!k!vy!o!vy!t!vy!x!vy#S!vy#f!vy#l!vy#m!vy#n!vy~O#o'_O~OcUO#kzO#o'_O~OV!sOclXflXhlXmlX~Om&kOckXfkXhkX~Om&kOc!qaf!qah!qa~Om{O#r'UOc!ei{!ei!z!ei#k!eih!ei#o!ei~Oi#jOc#Vy!O#Vy!T#Vy!^#Vy!h#Vy!k#Vy!o#Vy!t#Vy!x#Vy#S#Vy#f#Vy#l#Vy#m#Vy#n#Vy~Oi#jOc#Wy!O#Wy!T#Wy!^#Wy!h#Wy!k#Wy!o#Wy!t#Wy!x#Wy#S#Wy#f#Wy#l#Wy#m#Wy#n#Wy~O#{%]Oc#Xyi#Xy!O#Xy!T#Xy!^#Xy!h#Xy!k#Xy!o#Xy!t#Xy!x#Xy#S#Xy#f#Xy#l#Xy#m#Xy#n#Xy~O['jO~P! ZOh'nO#kzO~O#t'oOUoi#koi~O['pO~O#t'rOUXqYXq~Om{O#t'rOUXqYXq~O#{&tOc!v!Ri!v!R!O!v!R!T!v!R!^!v!R!h!v!R!k!v!R!o!v!R!t!v!R!x!v!R#S!v!R#f!v!R#l!v!R#m!v!R#n!v!R~Om{Oc!cih!ci#k!ci~O#o'wO~Om{Oc!eq{!eq!z!eq#k!eqh!eq#o!eq~O#r'UO~P!/eO#t'zOY#^X[#^X]#^Xa#^Xb#^Xc#^Xd#^Xe#^Xf#^Xi#^X~O['|O~P! ZO#o'}O~Oh(PO#kzO~O#t(QOUXyYXy~O#{&tOc!v!Zi!v!Z!O!v!Z!T!v!Z!^!v!Z!h!v!Z!k!v!Z!o!v!Z!t!v!Z!x!v!Z#S!v!Z#f!v!Z#l!v!Z#m!v!Z#n!v!Z~Om{Oc!cqh!cq#k!cq~Om{Oc!ey{!ey!z!ey#k!eyh!ey#o!ey~Om{Oc!cyh!cy#k!cy~O#t(WOh#ui#k#ui~Obdaefe~",goto:":k$OPPP$P$T$[PP&d&jP&nPP'Z'd'mPPPPPP'vPP'v'}*|P,T,_,c,g-k-o-s-w-o.O-o.U.[P$P.oP.s.w.{/bP/l/|.w0P0TP0P0ZP0e0wP1P2T2X2e0P2nP0P2xP3S0P3dP3n4O0P4SP4^.w4nP4uP5P5]5i5i.s5q5uP5q5y5y5y5y5y5y5}6T6Z6a6g7r7x8O8U8cPPP8i8mPPPPP8qPP9WP9eP8m9iP9qP:Z:cTTOgSQOgR#]!VSsPyQ!SQS!TSvQ!dXQ!eYQ!fZQ!g[Q!h]Q#a![Q#b!]Q#c!^Q#d!_Q#e!`Q#f!a^#}!i#g#y$Q%X%c&gQ$X!kQ$Y!lQ$Z!mQ$[!nQ$]!oQ$^!pj$g!z#i#s$k$r%V%]%d&R&e&s'_'wS%X#j%[Q%e$OQ&g%YT'k'O'mQ!RQR#Z!ST#V!O#WQ$h!zQ%W#iQ%^#s^&S$k%d&R&e&s'_'wQ&X$rQ&d%VR&j%]_&S$k%d&R&e&s'_'w_&T$k%d&R&e&s'_'wQ'X&UQ'c&rR'y'dZ'P%{&}'U'i'}Q!QQQ!YVQ!utQ!|vS#Y!R!SQ#`!ZQ#m!dQ#q!eQ#t!fQ#x!gQ#|!hQ$W!jS$d!v!xQ$f!yQ$j!}Q$o#ZQ$q#[Q$u#aS$x#b#hS${#c#oQ$}#dQ%P#eQ%R#fQ%n$XQ%q$YQ%t$ZQ%v$[Q%x$]Q%z$^Q&P$eQ&Z$vQ&]$yQ&m%_Q&w%oQ&y%rQ'W&UQ'a&nQ'b&rQ's'XQ'u'^S'x'c'dQ(R'vQ(T'yR(V(S#Z|QVtv}!R!S!Z!d!e!f!g!h!j!v!x!y!}#Z#[#a#b#c#d#e#f#h#o$X$Y$Z$[$]$^$e$v$y%_%o%r&U&l&n&r'X'^'c'd'v'y(SQ!vtS#S{&kR$e!xT$a!s$bT$`!s$bSROgQ!PQQ!ttQ!{vU#X!Q!R!SU$c!u!v!xS$i!|!}S$n#Y#ZQ$p#[S&O$d$eQ&Q$jQ&V$oQ&W$qR'R&PTxPyTwPyTuPyStPyR!xuQ!USR!yvQ!}vR#[!US!zv!UQ$R!iU%S#g$S$TS&b%T%UR']&cTSOgTdOgT`OgSWOg^$O!i#g#y$Q%X%c&gS%Y#j%[T%`#u%bSVOgQ!ZWR!jaQ!XVS#_!Y!ZQ$V!jQ$t#`R%m$WR#^!VT^OgQ![WR!kaSXOgQ!]WR!laQ#h!dQ#o!eQ$v#bQ$y#cQ%o$YR%r$Z]#i!d!e#b#c$Y$ZQ#l!dQ#p!eU$w#b#h#mU$z#c#o#qQ%p$YQ%s$ZS&Y$v$xS&[$y${S&v%o%qS&x%r%tQ'Y&ZQ'Z&]Q'f&wR'g&yT%Z#j%[Q$T!iQ%U#gQ&f%XR'`&g_$P!i#g#y$Q%X%c&gSYOgQ!^WR!maSZOgQ!_WR!naQ#r!fS$|#d#tQ%u$[Q&^$}R&z%vS[OgQ!`WR!oaQ#w!gS%O#e#xQ%w$]Q&_%PR&{%xT%a#u%bS]OgQ!aWR!paQ#{!hS%Q#f#|Q%y$^Q&`%RR&|%zS_OgR!bWQ$S!iS%T#g$TR&c%UQ%j$RQ&a%SQ'[&bR't']W%k$R%S&b']Q&u%lR'e&t]%i$R%S%l&b&t']TcOgTaOgTbOgQgOR!qgQ#W!OR$l#WQ'i&}R'{'iQ'm'OR(O'm#Q}QVtv!R!S!Z!d!e!f!g!h!j!v!x!y!}#Z#[#a#b#c#d#e#f#h#o$X$Y$Z$[$]$^$e$v$y%o%r&U&r'X'^'c'd'v'y(SS#T}&lT&l%_&nQ$b!sR%|$bQyPR#QyQ%[#jR&h%[W$Q!i#g%X&gQ%c#yT%f$Q%cQ%b#uR&o%bTfOgTeOgQ&U$kQ&r%dQ'S&RQ'^&eQ'd&sQ'v'_R(S'wQ'Q%{S'h&}'iQ'q'UR(U'}T'l'O'm]!WV!Y!Z!j#`$W}#k!d!e#b#c#h#m#o#q$Y$Z$v$x$y${%o%q%r%t&Z&]&w&y]#v!g#e#x$]%P%x]#z!h#f#|$^%R%z",nodeNames:"\u26A0 Comment Document OperationDefinition OperationType Name ) ( VariableDefinitions VariableDefinition Variable NamedType ] [ ListType NonNullType DefaultValue IntValue FloatValue StringValue BooleanValue NullValue EnumValue ListValue } { ObjectValue Directives Directive DirectiveName Arguments Argument ArgumentAttributeName SelectionSet Selection Field Alias FieldName FragmentSpread FragmentName InlineFragment TypeCondition OnKeyword on FragmentDefinition FragmentKeyword fragment TypeSystemDefinition SchemaDefinition Description SchemaKeyword schema RootTypeDefinition RootOperationTypeDefinition TypeDefinition ScalarTypeDefinition ScalarKeyword scalar ObjectTypeDefinition TypeKeyword type ImplementsInterfaces ImplementsKeyword implements FieldsDefinition FieldDefinition ArgumentsDefinition InputValueDefinition InterfaceTypeDefinition InterfaceKeyword interface UnionTypeDefinition UnionKeyword union UnionMemberTypes EnumTypeDefinition EnumKeyword enum EnumValuesDefinition EnumValueDefinition InputObjectTypeDefinition InputKeyword input InputFieldsDefinition DirectiveDefinition DirectiveKeyword directive RepeatableKeyword repeatable DirectiveLocations DirectiveLocation ExecutableDirectiveLocation TypeSystemDirectiveLocation TypeSystemExtension SchemaExtension ExtendKeyword extend TypeExtension ScalarTypeExtension ObjectTypeExtension InterfaceTypeExtension UnionTypeExtension EnumTypeExtension InputObjectTypeExtension",maxTerm:156,nodeProps:[["openedBy",6,"(",12,"[",24,"{"],["closedBy",7,")",13,"]",25,"}"]],skippedNodes:[0,1],repeatNodeCount:10,tokenData:"#F]~R!XX^$npq$nqr%crs%hst7Wtu7ovw8^xy8cyz8h|}8m}!O8r!O!P:Z!Q![8x![!]:l!_!`:q!b!c:v!c!d;e!d!g<O!g!hE}!h!iKW!i!k<O!k!l!2j!l!o<O!o!p!LW!p!q<O!q!r#!a!r!s<O!s!t#%i!t!u<O!u!v#(W!v!w<O!w!x#3b!x!y#6P!y!}<O!}#O#@O#P#Q#@T#R#S<O#T#Y<O#Y#Z#@Y#Z#b<O#b#c#Bt#c#h<O#h#i#Dx#i#o<O#o#p#E|#p#q#FR#q#r#FW#y#z$n$f$g$n#BY#BZ$n$IS$I_$n$I|$JO$n$JT$JU$n$KV$KW$n&FU&FV$n~$sY#h~X^$npq$n#y#z$n$f$g$n#BY#BZ$n$IS$I_$n$I|$JO$n$JT$JU$n$KV$KW$n&FU&FV$n~%hO#q~~%kXOY&WZ]&W^r&Wrs(ss#O&W#O#P&{#P;'S&W;'S;=`(m<%lO&W~&ZXOY&WZ]&W^r&Wrs&vs#O&W#O#P&{#P;'S&W;'S;=`(m<%lO&W~&{Oc~~'OXrs&W!P!Q&W#O#P&W#U#V&W#Y#Z&W#b#c&W#f#g&W#h#i&W#i#j'k~'nR!Qq^r({rs)ws#O({#O#P*s#P;'S({;'S;=`*m<%lO({~)tPYZ({~)zTOr({rs*Zs;'S({;'S;=`*m<%lO({~*^TOr({rs&vs;'S({;'S;=`*m<%lO({~*pP;=`<%l({~*vXrs+c!P!Q({#O#P({#U#V({#Y#Z({#b#c({#f#g({#h#i({#i#j6U~+fZOY({YZ({Z]({]^)q^r({rs,Xs#O({#O#P*s#P;'S({;'S;=`*m<%lO({~,[TOr({rs,ks;'S({;'S;=`*m<%lO({~,nZOY({YZ({Z]({]^({^r({rs-as#O({#O#P-u#P;'S({;'S;=`*m<%lO({~-fTc~Or({rs*Zs;'S({;'S;=`*m<%lO({~-xhOY({YZ({Z]({]^)q^r({rs/ds!P({!P!Q({!Q#O({#O#P-u#P#U({#U#V({#V#Y({#Y#Z({#Z#b({#b#c({#c#f({#f#g({#g#h({#h#i({#i#j1d#j;'S({;'S;=`*m<%lO({~/gZOY({YZ({Z]({]^({^r({rs0Ys#O({#O#P-u#P;'S({;'S;=`*m<%lO({~0]TOr({rs0ls;'S({;'S;=`*m<%lO({~0qZc~OY({YZ({Z]({]^({^r({rs-as#O({#O#P-u#P;'S({;'S;=`*m<%lO({~1gaOY({YZ({Z]({]^)q^r({rs)ws!Q({!Qq^r({rs)ws!Q({!Qq^r({rs)ws!Q({!Qq^r({rs)ws!Q({!Q![({![!c({!c!i({!i#O({#O#P*s#P#T({#T#Z({#Z;'S({;'S;=`*m<%lO({~6XR!Q![6b!c!i6b#T#Z6b~6eR!Q![6n!c!i6n#T#Z6n~6qR!Q![6z!c!i6z#T#Z6z~6}R!Q![({!c!i({#T#Z({~7]SP~OY7WZ;'S7W;'S;=`7i<%lO7W~7lP;=`<%l7W~7rR!c!}7{#R#S7{#T#o7{~8QSY~!Q![7{!c!}7{#R#S7{#T#o7{~8cO#y~~8hOV~~8mOU~~8rO#t~~8uP!Q![8x~8}Sa~!O!P9Z!Q![8x!g!h9o#X#Y9o~9^P!Q![9a~9fRb~!Q![9a!g!h9o#X#Y9o~9rR{|9{}!O9{!Q![:R~:OP!Q![:R~:WPb~!Q![:R~:^P!O!P:a~:dP!O!P:g~:lO#v~~:qO#o~~:vO#r~~:yR!c!};S#R#S;S#T#o;S~;XSm~!Q![;S!c!};S#R#S;S#T#o;SV;lU#kPfQ!Q![<O!c!t<O!t!u<c!u!}<O#R#S<O#T#o<OR<VS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV<jU#kPfQ!Q![<O!c!i<O!i!j<|!j!}<O#R#S<O#T#o<OV=TU#kPfQ!Q![<O!c!w<O!w!x=g!x!}<O#R#S<O#T#o<OV=nU#kPfQ!Q![<O!c!o<O!o!p>Q!p!}<O#R#S<O#T#o<OV>XU#kPfQ!Q![<O!c!g<O!g!h>k!h!}<O#R#S<O#T#o<OV>rU#kPfQ!Q![<O!c!p<O!p!q?U!q!}<O#R#S<O#T#o<OV?]U#kPfQ!Q![<O!c!v<O!v!w?o!w!}<O#R#S<O#T#o<OV?vS#kPfQ!Q![<O!c!}<O#R#S@S#T#o<OV@ZU#kPfQ!Q![<O!c!f<O!f!g@m!g!}<O#R#S<O#T#o<OV@tU#kPfQ!Q![<O!c!g<O!g!hAW!h!}<O#R#S<O#T#o<OVA_U#kPfQ!Q![<O!c!h<O!h!iAq!i!}<O#R#S<O#T#o<OVAxU#kPfQ!Q![<O!c!k<O!k!lB[!l!}<O#R#S<O#T#o<OVBcU#kPfQ!Q![<O!c!p<O!p!qBu!q!}<O#R#S<O#T#o<OVB|U#kPfQ!Q![<O!c!k<O!k!lC`!l!}<O#R#S<O#T#o<OVCgU#kPfQ!Q![<O!c!v<O!v!wCy!w!}<O#R#S<O#T#o<OVDQU#kPfQ!Q![<O!c!k<O!k!lDd!l!}<O#R#S<O#T#o<OVDkU#kPfQ!Q![<O!c!q<O!q!rD}!r!}<O#R#S<O#T#o<OVEUU#kPfQ!Q![<O!c!p<O!p!qEh!q!}<O#R#S<O#T#o<OVEqS$[S#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OVFUU#kPfQ!Q![<O!c!p<O!p!qFh!q!}<O#R#S<O#T#o<OVFoU#kPfQ!Q![<O!c!w<O!w!xGR!x!}<O#R#S<O#T#o<OVGYU#kPfQ!Q![<O!c!o<O!o!pGl!p!}<O#R#S<O#T#o<OVGuS$_S#kPfQ!Q![<O!c!}<O#R#SHR#T#o<OVHYU#kPfQ!Q![<O!c!x<O!x!yHl!y!}<O#R#S<O#T#o<OVHsT#kPfQ!Q![<O!c!dIS!d!}<O#R#S<O#T#o<OVIZU#kPfQ!Q![<O!c!n<O!n!oIm!o!}<O#R#S<O#T#o<OVItU#kPfQ!Q![<O!c!w<O!w!xJW!x!}<O#R#S<O#T#o<OVJ_U#kPfQ!Q![<O!c!g<O!g!hJq!h!}<O#R#S<O#T#o<OVJzS$`S#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OVK_W#kPfQ!Q![<O!c!k<O!k!lKw!l!t<O!t!u!%v!u!}<O#R#S<O#T#o<OVLOU#kPfQ!Q![<O!c!g<O!g!hLb!h!}<O#R#S<O#T#o<OVLiU#kPfQ!Q![<O!c!n<O!n!oL{!o!}<O#R#S<O#T#o<OVMSU#kPfQ!Q![<O!c!f<O!f!gMf!g!}<O#R#S<O#T#o<OVMoS$RS#kPfQ!Q![<O!c!}<O#R#SM{#T#o<OVNSU#kPfQ!Q![<O!c!f<O!f!gNf!g!}<O#R#S<O#T#o<OVNmU#kPfQ!Q![<O!c!g<O!g!h! P!h!}<O#R#S<O#T#o<OV! WU#kPfQ!Q![<O!c!h<O!h!i! j!i!}<O#R#S<O#T#o<OV! qU#kPfQ!Q![<O!c!k<O!k!l!!T!l!}<O#R#S<O#T#o<OV!![U#kPfQ!Q![<O!c!p<O!p!q!!n!q!}<O#R#S<O#T#o<OV!!uU#kPfQ!Q![<O!c!k<O!k!l!#X!l!}<O#R#S<O#T#o<OV!#`U#kPfQ!Q![<O!c!v<O!v!w!#r!w!}<O#R#S<O#T#o<OV!#yU#kPfQ!Q![<O!c!k<O!k!l!$]!l!}<O#R#S<O#T#o<OV!$dU#kPfQ!Q![<O!c!q<O!q!r!$v!r!}<O#R#S<O#T#o<OV!$}U#kPfQ!Q![<O!c!p<O!p!q!%a!q!}<O#R#S<O#T#o<OV!%jS$ZS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!%}T#kPfQ!Q![<O!c!d!&^!d!}<O#R#S<O#T#o<OV!&eU#kPfQ!Q![<O!c!i<O!i!j!&w!j!}<O#R#S<O#T#o<OV!'OU#kPfQ!Q![<O!c!o<O!o!p!'b!p!}<O#R#S<O#T#o<OV!'iU#kPfQ!Q![<O!c!g<O!g!h!'{!h!}<O#R#S<O#T#o<OV!(SU#kPfQ!Q![<O!c!p<O!p!q!(f!q!}<O#R#S<O#T#o<OV!(mU#kPfQ!Q![<O!c!v<O!v!w!)P!w!}<O#R#S<O#T#o<OV!)WS#kPfQ!Q![<O!c!}<O#R#S!)d#T#o<OV!)kW#kPfQ!Q![<O!c!f<O!f!g!*T!g!u<O!u!v!/e!v!}<O#R#S<O#T#o<OV!*[U#kPfQ!Q![<O!c!g<O!g!h!*n!h!}<O#R#S<O#T#o<OV!*uU#kPfQ!Q![<O!c!h<O!h!i!+X!i!}<O#R#S<O#T#o<OV!+`U#kPfQ!Q![<O!c!k<O!k!l!+r!l!}<O#R#S<O#T#o<OV!+yU#kPfQ!Q![<O!c!p<O!p!q!,]!q!}<O#R#S<O#T#o<OV!,dU#kPfQ!Q![<O!c!k<O!k!l!,v!l!}<O#R#S<O#T#o<OV!,}U#kPfQ!Q![<O!c!v<O!v!w!-a!w!}<O#R#S<O#T#o<OV!-hU#kPfQ!Q![<O!c!k<O!k!l!-z!l!}<O#R#S<O#T#o<OV!.RU#kPfQ!Q![<O!c!q<O!q!r!.e!r!}<O#R#S<O#T#o<OV!.lU#kPfQ!Q![<O!c!p<O!p!q!/O!q!}<O#R#S<O#T#o<OV!/XS$SS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!/lU#kPfQ!Q![<O!c!r<O!r!s!0O!s!}<O#R#S<O#T#o<OV!0VU#kPfQ!Q![<O!c!t<O!t!u!0i!u!}<O#R#S<O#T#o<OV!0pU#kPfQ!Q![<O!c!g<O!g!h!1S!h!}<O#R#S<O#T#o<OV!1ZT#kPfQ!Q![<O!c!d!1j!d!}<O#R#S<O#T#o<OV!1qU#kPfQ!Q![<O!c!f<O!f!g!2T!g!}<O#R#S<O#T#o<OV!2^S$TS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!2qU#kPfQ!Q![<O!c!p<O!p!q!3T!q!}<O#R#S<O#T#o<OV!3[Y#kPfQ!Q![<O!c!n<O!n!o!3z!o!r<O!r!s!:p!s!v<O!v!w!Hh!w!}<O#R#S<O#T#o<OV!4RU#kPfQ!Q![<O!c!k<O!k!l!4e!l!}<O#R#S<O#T#o<OV!4lU#kPfQ!Q![<O!c!p<O!p!q!5O!q!}<O#R#S<O#T#o<OV!5VU#kPfQ!Q![<O!c!g<O!g!h!5i!h!}<O#R#S<O#T#o<OV!5pS#kPfQ!Q![<O!c!}<O#R#S!5|#T#o<OV!6TU#kPfQ!Q![<O!c!h<O!h!i!6g!i!}<O#R#S<O#T#o<OV!6nU#kPfQ!Q![<O!c!t<O!t!u!7Q!u!}<O#R#S<O#T#o<OV!7XT#kPfQ!Q![<O!c!d!7h!d!}<O#R#S<O#T#o<OV!7oU#kPfQ!Q![<O!c!i<O!i!j!8R!j!}<O#R#S<O#T#o<OV!8YU#kPfQ!Q![<O!c!o<O!o!p!8l!p!}<O#R#S<O#T#o<OV!8sU#kPfQ!Q![<O!c!g<O!g!h!9V!h!}<O#R#S<O#T#o<OV!9^U#kPfQ!Q![<O!c!p<O!p!q!9p!q!}<O#R#S<O#T#o<OV!9wU#kPfQ!Q![<O!c!v<O!v!w!:Z!w!}<O#R#S<O#T#o<OV!:dS$US#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!:wU#kPfQ!Q![<O!c!w<O!w!x!;Z!x!}<O#R#S<O#T#o<OV!;bU#kPfQ!Q![<O!c!v<O!v!w!;t!w!}<O#R#S<O#T#o<OV!;{S#kPfQ!Q![<O!c!}<O#R#S!<X#T#o<OV!<`W#kPfQ!Q![<O!c!h<O!h!i!<x!i!q<O!q!r!E`!r!}<O#R#S<O#T#o<OV!=PU#kPfQ!Q![<O!c!k<O!k!l!=c!l!}<O#R#S<O#T#o<OV!=jU#kPfQ!Q![<O!c!g<O!g!h!=|!h!}<O#R#S<O#T#o<OV!>TU#kPfQ!Q![<O!c!n<O!n!o!>g!o!}<O#R#S<O#T#o<OV!>nU#kPfQ!Q![<O!c!f<O!f!g!?Q!g!}<O#R#S<O#T#o<OV!?XS#kPfQ!Q![<O!c!}<O#R#S!?e#T#o<OV!?lU#kPfQ!Q![<O!c!f<O!f!g!@O!g!}<O#R#S<O#T#o<OV!@VU#kPfQ!Q![<O!c!g<O!g!h!@i!h!}<O#R#S<O#T#o<OV!@pU#kPfQ!Q![<O!c!h<O!h!i!AS!i!}<O#R#S<O#T#o<OV!AZU#kPfQ!Q![<O!c!k<O!k!l!Am!l!}<O#R#S<O#T#o<OV!AtU#kPfQ!Q![<O!c!p<O!p!q!BW!q!}<O#R#S<O#T#o<OV!B_U#kPfQ!Q![<O!c!k<O!k!l!Bq!l!}<O#R#S<O#T#o<OV!BxU#kPfQ!Q![<O!c!v<O!v!w!C[!w!}<O#R#S<O#T#o<OV!CcU#kPfQ!Q![<O!c!k<O!k!l!Cu!l!}<O#R#S<O#T#o<OV!C|U#kPfQ!Q![<O!c!q<O!q!r!D`!r!}<O#R#S<O#T#o<OV!DgU#kPfQ!Q![<O!c!p<O!p!q!Dy!q!}<O#R#S<O#T#o<OV!ESS$bS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!EgU#kPfQ!Q![<O!c!d<O!d!e!Ey!e!}<O#R#S<O#T#o<OV!FQU#kPfQ!Q![<O!c!l<O!l!m!Fd!m!}<O#R#S<O#T#o<OV!FkU#kPfQ!Q![<O!c!g<O!g!h!F}!h!}<O#R#S<O#T#o<OV!GUU#kPfQ!Q![<O!c!e<O!e!f!Gh!f!}<O#R#S<O#T#o<OV!GoU#kPfQ!Q![<O!c!v<O!v!w!HR!w!}<O#R#S<O#T#o<OV!H[S$aS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!HoU#kPfQ!Q![<O!c!g<O!g!h!IR!h!}<O#R#S<O#T#o<OV!IYU#kPfQ!Q![<O!c!t<O!t!u!Il!u!}<O#R#S<O#T#o<OV!IsU#kPfQ!Q![<O!c!h<O!h!i!JV!i!}<O#R#S<O#T#o<OV!J^T#kPfQ!Q![<O!c!d!Jm!d!}<O#R#S<O#T#o<OV!JtU#kPfQ!Q![<O!c!e<O!e!f!KW!f!}<O#R#S<O#T#o<OV!K_U#kPfQ!Q![<O!c!g<O!g!h!Kq!h!}<O#R#S<O#T#o<OV!KzS$]S#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV!L_U#kPfQ!Q![<O!c!w<O!w!x!Lq!x!}<O#R#S<O#T#o<OV!LxU#kPfQ!Q![<O!c!v<O!v!w!M[!w!}<O#R#S<O#T#o<OV!McT#kPfQ!Q![<O!c!d!Mr!d!}<O#R#S<O#T#o<OV!MyU#kPfQ!Q![<O!c!v<O!v!w!N]!w!}<O#R#S<O#T#o<OV!NdU#kPfQ!Q![<O!c!k<O!k!l!Nv!l!}<O#R#S<O#T#o<OV!N}U#kPfQ!Q![<O!c!q<O!q!r# a!r!}<O#R#S<O#T#o<OV# hU#kPfQ!Q![<O!c!p<O!p!q# z!q!}<O#R#S<O#T#o<OV#!TS$PS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#!hU#kPfQ!Q![<O!c!d<O!d!e#!z!e!}<O#R#S<O#T#o<OV##RU#kPfQ!Q![<O!c!l<O!l!m##e!m!}<O#R#S<O#T#o<OV##lU#kPfQ!Q![<O!c!g<O!g!h#$O!h!}<O#R#S<O#T#o<OV#$VU#kPfQ!Q![<O!c!e<O!e!f#$i!f!}<O#R#S<O#T#o<OV#$pU#kPfQ!Q![<O!c!v<O!v!w#%S!w!}<O#R#S<O#T#o<OV#%]S$YS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#%pU#kPfQ!Q![<O!c!w<O!w!x#&S!x!}<O#R#S<O#T#o<OV#&ZU#kPfQ!Q![<O!c!g<O!g!h#&m!h!}<O#R#S<O#T#o<OV#&tU#kPfQ!Q![<O!c!t<O!t!u#'W!u!}<O#R#S<O#T#o<OV#'_U#kPfQ!Q![<O!c!{<O!{!|#'q!|!}<O#R#S<O#T#o<OV#'zS$OS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#(_W#kPfQ!Q![<O!c!e<O!e!f#(w!f!w<O!w!x#-g!x!}<O#R#S<O#T#o<OV#)OV#kPfQ!Q![<O!c!d#)e!d!j<O!j!k#+f!k!}<O#R#S<O#T#o<OV#)lU#kPfQ!Q![<O!c!n<O!n!o#*O!o!}<O#R#S<O#T#o<OV#*VT#kPfQ!Q![<O!c!d#*f!d!}<O#R#S<O#T#o<OV#*mU#kPfQ!Q![<O!c!t<O!t!u#+P!u!}<O#R#S<O#T#o<OV#+YS$XS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#+mU#kPfQ!Q![<O!c!g<O!g!h#,P!h!}<O#R#S<O#T#o<OV#,WU#kPfQ!Q![<O!c!o<O!o!p#,j!p!}<O#R#S<O#T#o<OV#,qT#kPfQ!Q![<O!c!d#-Q!d!}<O#R#S<O#T#o<OV#-ZS$WS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#-nU#kPfQ!Q![<O!c!d<O!d!e#.Q!e!}<O#R#S<O#T#o<OV#.XU#kPfQ!Q![<O!c!u<O!u!v#.k!v!}<O#R#S<O#T#o<OV#.rU#kPfQ!Q![<O!c!e<O!e!f#/U!f!}<O#R#S<O#T#o<OV#/]U#kPfQ!Q![<O!c!t<O!t!u#/o!u!}<O#R#S<O#T#o<OV#/vU#kPfQ!Q![<O!c!k<O!k!l#0Y!l!}<O#R#S<O#T#o<OV#0aU#kPfQ!Q![<O!c!r<O!r!s#0s!s!}<O#R#S<O#T#o<OV#0zU#kPfQ!Q![<O!c!v<O!v!w#1^!w!}<O#R#S<O#T#o<OV#1eU#kPfQ!Q![<O!c!k<O!k!l#1w!l!}<O#R#S<O#T#o<OV#2OU#kPfQ!Q![<O!c!q<O!q!r#2b!r!}<O#R#S<O#T#o<OV#2iU#kPfQ!Q![<O!c!p<O!p!q#2{!q!}<O#R#S<O#T#o<OV#3US$QS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#3iU#kPfQ!Q![<O!c!p<O!p!q#3{!q!}<O#R#S<O#T#o<OV#4SU#kPfQ!Q![<O!c!k<O!k!l#4f!l!}<O#R#S<O#T#o<OV#4mU#kPfQ!Q![<O!c!q<O!q!r#5P!r!}<O#R#S<O#T#o<OV#5WU#kPfQ!Q![<O!c!p<O!p!q#5j!q!}<O#R#S<O#T#o<OV#5sS$^S#kPfQ!Q![<O!c!}<O#R#S<O#T#o<OV#6WT#kPfQ!Q![<O!c!d#6g!d!}<O#R#S<O#T#o<OV#6nU#kPfQ!Q![<O!c!t<O!t!u#7Q!u!}<O#R#S<O#T#o<OV#7XU#kPfQ!Q![<O!c!k<O!k!l#7k!l!}<O#R#S<O#T#o<OV#7rT#kPfQ!Q![<O!c!d#8R!d!}<O#R#S<O#T#o<OV#8YU#kPfQ!Q![<O!c!d<O!d!e#8l!e!}<O#R#S<O#T#o<OV#8sU#kPfQ!Q![<O!c!n<O!n!o#9V!o!}<O#R#S<O#T#o<OV#9^U#kPfQ!Q![<O!c!g<O!g!h#9p!h!}<O#R#S<O#T#o<OV#9wS#kPfQ!Q![<O!c!}<O#R#S#:T#T#o<OV#:[U#kPfQ!Q![<O!c!f<O!f!g#:n!g!}<O#R#S<O#T#o<OV#:uU#kPfQ!Q![<O!c!g<O!g!h#;X!h!}<O#R#S<O#T#o<OV#;`U#kPfQ!Q![<O!c!h<O!h!i#;r!i!}<O#R#S<O#T#o<OV#;yU#kPfQ!Q![<O!c!k<O!k!l#<]!l!}<O#R#S<O#T#o<OV#<dU#kPfQ!Q![<O!c!p<O!p!q#<v!q!}<O#R#S<O#T#o<OV#<}U#kPfQ!Q![<O!c!k<O!k!l#=a!l!}<O#R#S<O#T#o<OV#=hU#kPfQ!Q![<O!c!v<O!v!w#=z!w!}<O#R#S<O#T#o<OV#>RU#kPfQ!Q![<O!c!k<O!k!l#>e!l!}<O#R#S<O#T#o<OV#>lU#kPfQ!Q![<O!c!q<O!q!r#?O!r!}<O#R#S<O#T#o<OV#?VU#kPfQ!Q![<O!c!p<O!p!q#?i!q!}<O#R#S<O#T#o<OV#?rS$VS#kPfQ!Q![<O!c!}<O#R#S<O#T#o<O~#@TO]~~#@YO[~R#@aT#kPfQ!Q![<O!c!}<O#R#S<O#T#U#@p#U#o<OR#@wU#kPfQ!Q![<O!c!}<O#R#S<O#T#`<O#`#a#AZ#a#o<OR#AbU#kPfQ!Q![<O!c!}<O#R#S<O#T#g<O#g#h#At#h#o<OR#A{U#kPfQ!Q![<O!c!}<O#R#S<O#T#X<O#X#Y#B_#Y#o<OR#BhS#kPdQfQ!Q![<O!c!}<O#R#S<O#T#o<OR#B{U#kPfQ!Q![<O!c!}<O#R#S<O#T#i<O#i#j#C_#j#o<OR#CfU#kPfQ!Q![<O!c!}<O#R#S<O#T#`<O#`#a#Cx#a#o<OR#DPU#kPfQ!Q![<O!c!}<O#R#S<O#T#`<O#`#a#Dc#a#o<OR#DlS#kPeQfQ!Q![<O!c!}<O#R#S<O#T#o<OR#EPU#kPfQ!Q![<O!c!}<O#R#S<O#T#f<O#f#g#Ec#g#o<OR#EjU#kPfQ!Q![<O!c!}<O#R#S<O#T#i<O#i#j#At#j#o<O~#FROi~~#FWO#{~~#F]Oh~",tokenizers:[0,1,2],topRules:{Document:[0,2]},specialized:[{term:119,get:value=>spec_name[value]||-1}],tokenPrec:2989}),nodesWithBraces="RootTypeDefinition InputFieldsDefinition EnumValuesDefinition FieldsDefinition SelectionSet { }",keywords="scalar type interface union enum input implements fragment extend schema directive on repeatable",punctuations="( ) { } : [ ]",graphqlLanguage=/*@__PURE__*/LRLanguage.define({parser:/*@__PURE__*/parser.configure({props:[/*@__PURE__*/styleTags({Variable:tags.variableName,BooleanValue:tags.bool,Description:tags.string,StringValue:tags.string,Comment:tags.lineComment,IntValue:tags.integer,FloatValue:tags.float,EnumValue:/*@__PURE__*/tags.special(tags.name),NullValue:tags.null,DirectiveName:tags.modifier,[keywords]:tags.keyword,OperationType:tags.definitionKeyword,FieldName:tags.propertyName,Field:tags.propertyName,ArgumentAttributeName:tags.attributeName,Name:tags.atom,"( )":tags.paren,"{ }":tags.brace,",":tags.separator,[punctuations]:tags.punctuation}),// https://codemirror.net/docs/ref/#language.indentNodeProp
|
|
46
|
+
/*@__PURE__*/indentNodeProp.add({[nodesWithBraces]:/*@__PURE__*/delimitedIndent({closing:"}",align:!0})}),/*@__PURE__*/foldNodeProp.add({[nodesWithBraces]:foldInside})]}),languageData:{commentTokens:{line:"#"},indentOnInput:/^\s*(\{|\})$/}});// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
47
|
+
return graphqlLanguage_1={graphqlLanguage,graphqlLanguageSupport},graphqlLanguage_1}function requireCodemirrorLangEmbedGraphql(){// graphqlLanguage is a trimmed, MIT-attributed copy of cm6-graphql's grammar
|
|
48
|
+
// (see graphql-language.js) — a ready-to-use LRLanguage, no factory call
|
|
49
|
+
// needed, unlike @codemirror/lang-sql's sql(config).language.
|
|
50
|
+
function createEmbedding(){return{matcher:matchTagName("gql"),language:graphqlLanguage}}if(hasRequiredCodemirrorLangEmbedGraphql)return codemirrorLangEmbedGraphql;hasRequiredCodemirrorLangEmbedGraphql=1;const{graphqlLanguage}=requireGraphqlLanguage(),{matchTagName}=require$$1$1;return codemirrorLangEmbedGraphql={createEmbedding},codemirrorLangEmbedGraphql}const module={exports:exports};var graphqlLanguage_1,hasRequiredGraphqlLanguage,codemirrorLangEmbedGraphql,hasRequiredCodemirrorLangEmbedGraphql,require$$0=await requireAsyncModule("@lezer/lr"),require$$1=await requireAsyncModule("@codemirror/language"),require$$2=await requireAsyncModule("@lezer/highlight"),require$$1$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),codemirrorLangEmbedGraphqlExports=requireCodemirrorLangEmbedGraphql(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedGraphqlExports);return module.exports=index,module.exports}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedIcuMessageformat(){function createEmbedding(){return{matcher:matchTagName("t"),language:icuMessageFormatLanguage,extension:icuMessageFormat().support}}if(hasRequiredCodemirrorLangEmbedIcuMessageformat)return codemirrorLangEmbedIcuMessageformat;hasRequiredCodemirrorLangEmbedIcuMessageformat=1;const{icuMessageFormatLanguage,icuMessageFormat}=require$$0,{matchTagName}=require$$1;return codemirrorLangEmbedIcuMessageformat={createEmbedding},codemirrorLangEmbedIcuMessageformat}const module={exports:exports};var codemirrorLangEmbedIcuMessageformat,hasRequiredCodemirrorLangEmbedIcuMessageformat,require$$0=await requireAsyncModule("@actualwave/codemirror-lang-icu-messageformat"),require$$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),codemirrorLangEmbedIcuMessageformatExports=requireCodemirrorLangEmbedIcuMessageformat(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedIcuMessageformatExports);return module.exports=index,module.exports}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedReactNative(){// Like embed-tailwind, this DSL has no grammar to parse — React/React Native
|
|
2
|
+
// contextual completion is layered entirely on the existing JS/JSX parser via
|
|
3
|
+
// a CompletionSource, so this package exports `createSupportExtension`
|
|
4
|
+
// (plain CM extensions to merge into the JS/TSX language's `support` array)
|
|
5
|
+
// rather than `createEmbedding()` (matcher + nested Language).
|
|
6
|
+
function createSupportExtension(jsLanguageSupport,config){return jsLanguageSupport.language.data.of({autocomplete:reactNativeCompletionSource(config)})}if(hasRequiredCodemirrorLangEmbedReactNative)return codemirrorLangEmbedReactNative;hasRequiredCodemirrorLangEmbedReactNative=1;const{reactNativeCompletionSource}=require$$0;return codemirrorLangEmbedReactNative={createSupportExtension},codemirrorLangEmbedReactNative}const module={exports:exports};var codemirrorLangEmbedReactNative,hasRequiredCodemirrorLangEmbedReactNative,require$$0=await requireAsyncModule("@actualwave/codemirror-lang-react-native"),codemirrorLangEmbedReactNativeExports=requireCodemirrorLangEmbedReactNative(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedReactNativeExports);return module.exports=index,module.exports}
|