@actualwave/react-native-codeditor 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +16 -6
  3. package/SKILL.md +469 -0
  4. package/THIRD_PARTY_NOTICES +120 -0
  5. package/app.plugin.js +1 -1
  6. package/lib/module/CodeEditor.js +69 -2
  7. package/lib/typescript/src/CodeEditor.d.ts +20 -2
  8. package/lib/typescript/src/EditorAPI.d.ts +42 -1
  9. package/lib/typescript/src/WebViewAPI.d.ts +4 -1
  10. package/lib/typescript/src/index.d.ts +1 -1
  11. package/package.json +12 -4
  12. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-core.js +39 -0
  13. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-css.js +19 -0
  14. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-glsl.js +1 -0
  15. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-graphql.js +50 -0
  16. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-icu-messageformat.js +1 -0
  17. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-react-native.js +6 -0
  18. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sksl.js +7 -0
  19. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-sql.js +5 -0
  20. package/src/assets/codemirror/@actualwave_codemirror-lang-embed-tailwind.js +63 -0
  21. package/src/assets/codemirror/@actualwave_codemirror-lang-glsl.js +20 -0
  22. package/src/assets/codemirror/@actualwave_codemirror-lang-icu-messageformat.js +11 -0
  23. package/src/assets/codemirror/@actualwave_codemirror-lang-react-native.js +71 -0
  24. package/src/assets/codemirror/@actualwave_codemirror-lang-sksl.js +7 -2
  25. package/src/assets/codemirror/@codemirror_autocomplete.js +9 -9
  26. package/src/assets/codemirror/@codemirror_commands.js +86 -86
  27. package/src/assets/codemirror/@codemirror_lang-css.js +2 -2
  28. package/src/assets/codemirror/@codemirror_lang-go.js +1 -1
  29. package/src/assets/codemirror/@codemirror_lang-html.js +1 -1
  30. package/src/assets/codemirror/@codemirror_lang-javascript.js +4 -4
  31. package/src/assets/codemirror/@codemirror_lang-jinja.js +1 -1
  32. package/src/assets/codemirror/@codemirror_lang-json.js +1 -1
  33. package/src/assets/codemirror/@codemirror_lang-less.js +1 -1
  34. package/src/assets/codemirror/@codemirror_lang-liquid.js +1 -1
  35. package/src/assets/codemirror/@codemirror_lang-markdown.js +2 -2
  36. package/src/assets/codemirror/@codemirror_lang-python.js +1 -1
  37. package/src/assets/codemirror/@codemirror_lang-sql.js +4 -4
  38. package/src/assets/codemirror/@codemirror_lang-xml.js +1 -1
  39. package/src/assets/codemirror/@codemirror_language.js +11 -11
  40. package/src/assets/codemirror/@codemirror_legacy-modes_mode_clike.js +1 -1
  41. package/src/assets/codemirror/@codemirror_legacy-modes_mode_mathematica.js +1 -1
  42. package/src/assets/codemirror/@codemirror_legacy-modes_mode_oz.js +1 -1
  43. package/src/assets/codemirror/@codemirror_legacy-modes_mode_verilog.js +1 -1
  44. package/src/assets/codemirror/@codemirror_lint.js +5 -5
  45. package/src/assets/codemirror/@codemirror_merge.js +4 -4
  46. package/src/assets/codemirror/@codemirror_search.js +8 -8
  47. package/src/assets/codemirror/@codemirror_state.js +1 -1
  48. package/src/assets/codemirror/@codemirror_theme-one-dark.js +3 -3
  49. package/src/assets/codemirror/@codemirror_view.js +6 -6
  50. package/src/assets/codemirror/@lezer_common.js +2 -2
  51. package/src/assets/codemirror/@lezer_css.js +1 -1
  52. package/src/assets/codemirror/@lezer_javascript.js +1 -1
  53. package/src/assets/codemirror/@lezer_lr.js +1 -1
  54. package/src/assets/codemirror/@lezer_markdown.js +4 -4
  55. package/src/assets/codemirror/@lezer_sass.js +1 -1
  56. package/src/assets/codemirror/_core.js +129 -129
  57. package/src/assets/codemirror-editor.umd.js +130 -17
  58. package/src/assets/editor.html +25 -1
  59. package/lib/typescript/app.plugin.d.ts +0 -3
  60. package/lib/typescript/babel.config.d.ts +0 -10
  61. package/lib/typescript/react-native.config.d.ts +0 -2
  62. package/lib/typescript/scripts/copy-assets.d.ts +0 -2
@@ -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) callEditor(e => e.setLanguage(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.0",
3
+ "version": "1.2.0",
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.0",
64
+ "@actualwave/codemirror-package": "^0.1.4",
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!Q!['w!c!i'w#T#Z'w~'zR!Q![(T!c!i(T#T#Z(T~(WR!Q![(a!c!i(a#T#Z(a~(dR!Q![&W!c!i&W#T#Z&W~(pP;=`<%l&W~(xPc~rs({~)OZOY({YZ({Z]({]^)q^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({!Q![2l![!c({!c!i2l!i#O({#O#P*s#P#T({#T#Z2l#Z;'S({;'S;=`*m<%lO({~2oaOY({YZ({Z]({]^)q^r({rs)ws!Q({!Q![3t![!c({!c!i3t!i#O({#O#P*s#P#T({#T#Z3t#Z;'S({;'S;=`*m<%lO({~3waOY({YZ({Z]({]^)q^r({rs)ws!Q({!Q![4|![!c({!c!i4|!i#O({#O#P*s#P#T({#T#Z4|#Z;'S({;'S;=`*m<%lO({~5PaOY({YZ({Z]({]^)q^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}
@@ -0,0 +1,7 @@
1
+ async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedSksl(){// @actualwave/codemirror-lang-sksl exports a ready-to-use LRLanguage
2
+ // (skslLanguage) directly, same shape as cm6-graphql's graphqlLanguage — no
3
+ // factory call needed for the grammar itself. This is the same grammar the
4
+ // `.sksl` file mode uses; see SINGLE_FILE_PROTOTYPES.md's "Relationship to
5
+ // .sksl files" section. The sksl() factory's `.support` carries the
6
+ // completion source, so it's still called for that.
7
+ function createEmbedding(){return{matcher:matchTagName("sksl"),language:skslLanguage,extension:sksl().support}}if(hasRequiredCodemirrorLangEmbedSksl)return codemirrorLangEmbedSksl;hasRequiredCodemirrorLangEmbedSksl=1;const{skslLanguage,sksl}=require$$0,{matchTagName}=require$$1;return codemirrorLangEmbedSksl={createEmbedding},codemirrorLangEmbedSksl}const module={exports:exports};var codemirrorLangEmbedSksl,hasRequiredCodemirrorLangEmbedSksl,require$$0=await requireAsyncModule("@actualwave/codemirror-lang-sksl"),require$$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),codemirrorLangEmbedSkslExports=requireCodemirrorLangEmbedSksl(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedSkslExports);return module.exports=index,module.exports}
@@ -0,0 +1,5 @@
1
+ async function moduleInitFunction(requireAsyncModule,exports={}){function requireCodemirrorLangEmbedSql(){// config is passed through to @codemirror/lang-sql's sql() (dialect, schema,
2
+ // etc.) — see that package's SQLConfig type. sql()'s `.support` always
3
+ // includes keyword completion (schema completion is additive on top, only if
4
+ // config.schema is given) — see SQLConfig in @codemirror/lang-sql source.
5
+ function createEmbedding(config){const support=sql(config);return{matcher:matchTagName("sql"),language:support.language,extension:support.support}}if(hasRequiredCodemirrorLangEmbedSql)return codemirrorLangEmbedSql;hasRequiredCodemirrorLangEmbedSql=1;const{sql}=require$$0,{matchTagName}=require$$1;return codemirrorLangEmbedSql={createEmbedding},codemirrorLangEmbedSql}const module={exports:exports};var codemirrorLangEmbedSql,hasRequiredCodemirrorLangEmbedSql,require$$0=await requireAsyncModule("@codemirror/lang-sql"),require$$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),codemirrorLangEmbedSqlExports=requireCodemirrorLangEmbedSql(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedSqlExports);return module.exports=index,module.exports}
@@ -0,0 +1,63 @@
1
+ async function moduleInitFunction(requireAsyncModule,exports={}){function requireData(){function add(category,...names){for(const name of names)name&&CLASSES.set(name,category)}function addScaled(category,prefixes,scales){for(const prefix of prefixes)for(const scale of scales)add(category,`${prefix}-${scale}`)}// --- Spacing: padding, margin (+ negative), gap, space-between ---
2
+ if(hasRequiredData)return data;hasRequiredData=1;// Categorized Tailwind/twrnc utility class list, generated from small scale
3
+ // tables rather than hand-listed one by one — see TODO.md item 6: "Category
4
+ // must be data-driven per class, not prefix-derived. Tailwind overloads
5
+ // prefixes across categories (`text-lg` is typography, `text-red-500` is
6
+ // color, `text-center` is alignment/layout, all starting with `text-`)."
7
+ // Web-only categories (grid, filters, tables, SVG) are intentionally omitted
8
+ // — this targets the RN-relevant subset twrnc actually implements.
9
+ const SPACING_SCALE=["0","px","0.5","1","1.5","2","2.5","3","3.5","4","5","6","7","8","9","10","11","12","14","16","20","24","28","32","36","40","44","48","52","56","60","64","72","80","96"],FRACTIONS=["1/2","1/3","2/3","1/4","2/4","3/4","1/5","2/5","3/5","4/5","1/6","2/6","3/6","4/6","5/6","1/12","2/12","3/12","4/12","5/12","6/12","7/12","8/12","9/12","10/12","11/12","full"],COLOR_NAMES=["slate","gray","zinc","neutral","stone","red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],COLOR_SHADES=["50","100","200","300","400","500","600","700","800","900","950"],OPACITY_SCALE=["0","5","10","20","25","30","40","50","60","70","75","80","90","95","100"],ROUNDED_SIZES=["none","sm","","md","lg","xl","2xl","3xl","full"],ROUNDED_CORNERS=["t","r","b","l","tl","tr","br","bl"],CLASSES=new Map;// class -> category, built up by the add() calls below.
10
+ addScaled("spacing",["p","pt","pr","pb","pl","px","py"],SPACING_SCALE),addScaled("spacing",["m","mt","mr","mb","ml","mx","my"],SPACING_SCALE);for(const prefix of["m","mt","mr","mb","ml","mx","my"])for(const scale of SPACING_SCALE)add("spacing",`-${prefix}-${scale}`);addScaled("spacing",["gap","gap-x","gap-y"],SPACING_SCALE),addScaled("spacing",["space-x","space-y"],SPACING_SCALE),add("spacing","space-x-reverse","space-y-reverse");// --- Sizing: width/height (+ min/max), fractions, full/screen/auto ---
11
+ const SIZING_PREFIXES=["w","h","min-w","min-h","max-w","max-h"];addScaled("sizing",SIZING_PREFIXES,SPACING_SCALE),addScaled("sizing",SIZING_PREFIXES,FRACTIONS);for(const prefix of SIZING_PREFIXES)add("sizing",`${prefix}-auto`,`${prefix}-screen`,`${prefix}-min`,`${prefix}-max`,`${prefix}-fit`);// --- Layout: display, flexbox container/item, alignment, order ---
12
+ add("layout","flex","hidden","inline","inline-block","block"),add("layout","flex-row","flex-row-reverse","flex-col","flex-col-reverse"),add("layout","flex-wrap","flex-wrap-reverse","flex-nowrap"),add("layout","flex-1","flex-auto","flex-initial","flex-none"),add("layout","grow","grow-0","shrink","shrink-0"),addScaled("layout",["basis"],SPACING_SCALE),addScaled("layout",["basis"],FRACTIONS),add("layout","basis-auto"),add("layout","items-start","items-end","items-center","items-baseline","items-stretch"),add("layout","content-start","content-end","content-center","content-between","content-around","content-evenly"),add("layout","self-auto","self-start","self-end","self-center","self-stretch","self-baseline"),add("layout","justify-start","justify-end","justify-center","justify-between","justify-around","justify-evenly");for(let i=1;12>=i;i++)add("layout",`order-${i}`);add("layout","order-first","order-last","order-none"),add("positioning","absolute","relative","static"),addScaled("positioning",["inset","inset-x","inset-y","top","right","bottom","left"],SPACING_SCALE),add("positioning","z-0","z-10","z-20","z-30","z-40","z-50","z-auto"),add("typography","text-xs","text-sm","text-base","text-lg","text-xl","text-2xl","text-3xl","text-4xl","text-5xl","text-6xl"),add("typography","font-thin","font-extralight","font-light","font-normal","font-medium","font-semibold","font-bold","font-extrabold","font-black"),add("typography","italic","not-italic"),add("typography","text-left","text-center","text-right","text-justify"),add("typography","underline","line-through","no-underline"),add("typography","uppercase","lowercase","capitalize","normal-case"),add("typography","tracking-tighter","tracking-tight","tracking-normal","tracking-wide","tracking-wider","tracking-widest"),add("typography","leading-none","leading-tight","leading-snug","leading-normal","leading-relaxed","leading-loose"),addScaled("typography",["leading"],["3","4","5","6","7","8","9","10"]);// --- Colors: background/text/border color scales (distinct strings from the
13
+ // typography/border families above — e.g. `text-red-500` vs `text-lg`) ---
14
+ for(const prefix of["bg","text","border"]){for(const color of COLOR_NAMES)for(const shade of COLOR_SHADES)add("colors",`${prefix}-${color}-${shade}`);add("colors",`${prefix}-black`,`${prefix}-white`,`${prefix}-transparent`,`${prefix}-current`)}// --- Borders: width/side/style/radius (border *color* lives in "colors") ---
15
+ add("borders","border","border-0","border-2","border-4","border-8");for(const side of["t","r","b","l"])add("borders",`border-${side}`,`border-${side}-0`,`border-${side}-2`,`border-${side}-4`,`border-${side}-8`);add("borders","border-solid","border-dashed","border-dotted");for(const size of ROUNDED_SIZES)add("borders",size?`rounded-${size}`:"rounded");for(const corner of ROUNDED_CORNERS)for(const size of ROUNDED_SIZES)add("borders",size?`rounded-${corner}-${size}`:`rounded-${corner}`);// --- Effects: opacity, shadow ---
16
+ for(const value of OPACITY_SCALE)add("effects",`opacity-${value}`);add("effects","shadow","shadow-sm","shadow-md","shadow-lg","shadow-xl","shadow-2xl","shadow-none");/** @type {ReadonlyMap<string, string>} className -> category */const TAILWIND_CLASSES=CLASSES,TAILWIND_CLASS_NAMES=Array.from(CLASSES.keys()).sort(),TAILWIND_CATEGORIES=["layout","spacing","sizing","typography","colors","borders","effects","positioning"];/** Sorted array of all known class names, for completion filtering. *//** All category names, in the order documented by TODO.md item 6. */return data={TAILWIND_CLASSES,TAILWIND_CLASS_NAMES,TAILWIND_CATEGORIES},data}function requireCompletion(){// Finds the innermost TemplateString node at `pos` (if any) whose tag is `tw`.
17
+ // Mirrors embed-core's getTaggedTemplateTagPath usage in parseMixed, but
18
+ // driving a CompletionSource instead of a nested parser — see TODO.md item 6:
19
+ // "same tag-name-matching primitive used for parseMixed, just driving
20
+ // completions instead of a sub-parser."
21
+ function findTwTemplateAt(state,pos){const tree=syntaxTree(state),node=tree.resolveInner(pos,-1);for(let cur=node;cur;cur=cur.parent){if("TemplateString"!==cur.name)continue;const tagPath=getTaggedTemplateTagPath(cur,docAsInput(state.doc));if(tagPath&&1===tagPath.length&&"tw"===tagPath[0])return cur}return null}function isInsideContentRanges(pos,ranges){return ranges.some(r=>pos>=r.from&&pos<=r.to)}/**
22
+ * A `CompletionSource` (see @codemirror/autocomplete) that suggests Tailwind
23
+ * (twrnc) class names while the cursor is inside a `` tw`...` `` tagged
24
+ * template's literal content, and declines (returns null) everywhere else so
25
+ * normal JS/TSX completions are unaffected.
26
+ */function tailwindCompletionSource(context){const templateNode=findTwTemplateAt(context.state,context.pos);if(!templateNode)return null;const ranges=templateContentRanges(templateNode);if(!isInsideContentRanges(context.pos,ranges))return null;const word=context.matchBefore(/[^\s`]*/);if(!word)return null;if(word.from===word.to&&!context.explicit)return null;const query=word.text,from=word.from;// Arbitrary-value bracket syntax (bg-[#123456], p-[13px]) — don't try to
27
+ // complete inside the brackets, just don't offer suggestions there (stretch
28
+ // goal per TODO.md item 6; v1 just avoids breaking on it).
29
+ if(query.includes("["))return null;const options=TAILWIND_CLASS_NAMES.filter(name=>name.startsWith(query)).map(label=>({label,type:"class"}));return options.length?{from,options,validFor:/^[^\s`]*$/}:null}if(hasRequiredCompletion)return completion;hasRequiredCompletion=1;const{syntaxTree}=require$$0,{getTaggedTemplateTagPath,templateContentRanges,docAsInput}=require$$1,{TAILWIND_CLASS_NAMES}=requireData();return completion={tailwindCompletionSource,findTwTemplateAt,isInsideContentRanges},completion}function requireDecoration(){// Collects every `tw`-tagged TemplateString's content ranges that intersect
30
+ // [from, to) — same tag-matching primitive embed-core uses for parseMixed and
31
+ // completion.js uses for the CompletionSource, just driving decoration this
32
+ // time (see TODO.md item 6).
33
+ function twContentRangesIn(state,from,to){const ranges=[];return syntaxTree(state).iterate({from,to,enter(node){if("TemplateString"===node.name){const tagPath=getTaggedTemplateTagPath(node.node,docAsInput(state.doc));if(tagPath&&1===tagPath.length&&"tw"===tagPath[0])for(const range of templateContentRanges(node.node))ranges.push(range)}}}),ranges}function buildDecorations(view){const builder=new RangeSetBuilder,seen=[];for(const{from,to}of view.visibleRanges)for(const range of twContentRangesIn(view.state,from,to))seen.push(range);// Visible ranges can overlap at chunk boundaries — dedupe by range identity
34
+ // (same node can't produce the same [from,to) twice from disjoint queries,
35
+ // but a template spanning multiple visible chunks could; sort+merge is
36
+ // unnecessary for correctness here since Decoration ranges just need
37
+ // ascending, non-overlapping input, and token matches within one template
38
+ // range never repeat).
39
+ seen.sort((a,b)=>a.from-b.from||a.to-b.to);const text=view.state.doc;for(const{from,to}of seen){const chunk=text.sliceString(from,to);TOKEN_RE.lastIndex=0;for(let match;match=TOKEN_RE.exec(chunk);){const token=match[0],category=TAILWIND_CLASSES.get(token);if(!category)continue;// unknown/arbitrary-value token — leave undecorated (v1)
40
+ const start=from+match.index;builder.add(start,start+token.length,decorationByCategory.get(category))}}return builder.finish()}// Mark decorations nest by facet precedence — the higher-precedence one
41
+ // becomes the *inner* DOM element (see @codemirror/view's Decoration.mark
42
+ // doc comment). @codemirror/language's syntaxHighlighting() wraps its
43
+ // treeHighlighter in Prec.high(...), so it paints `.tok-string` as the
44
+ // innermost span around the whole `tw`-tagged template content. Without
45
+ // out-precedencing that, our per-category `.cm-tw-*` span ends up as the
46
+ // *outer* element and `.tok-string`'s own color always wins (an element's
47
+ // own matching rule beats an ancestor's color regardless of specificity).
48
+ // Prec.highest here makes ours the inner span instead, so it wins.
49
+ if(hasRequiredDecoration)return decoration;hasRequiredDecoration=1;const{syntaxTree}=require$$0,{Decoration,ViewPlugin,EditorView}=require$$1$1,{RangeSetBuilder,Prec}=require$$2,{getTaggedTemplateTagPath,templateContentRanges,docAsInput}=require$$1,{TAILWIND_CLASSES,TAILWIND_CATEGORIES}=requireData(),TOKEN_RE=/[^\s`]+/g,decorationByCategory=new Map(TAILWIND_CATEGORIES.map(category=>[category,Decoration.mark({class:`cm-tw-${category}`})])),tailwindHighlightPlugin=Prec.highest(ViewPlugin.fromClass(class{constructor(view){this.decorations=buildDecorations(view)}update(update){(update.docChanged||update.viewportChanged)&&(this.decorations=buildDecorations(update.view))}},{decorations:v=>v.decorations})),tailwindHighlightTheme=EditorView.baseTheme({".cm-tw-layout":{color:"#569cd6"},".cm-tw-spacing":{color:"#9cdcfe"},".cm-tw-sizing":{color:"#4ec9b0"},".cm-tw-typography":{color:"#c586c0"},".cm-tw-colors":{color:"#ce9178"},".cm-tw-borders":{color:"#d7ba7d"},".cm-tw-effects":{color:"#b5cea8"},".cm-tw-positioning":{color:"#dcdcaa"}});// Default category colors. Downstream (react-native-codeditor's editor.html)
50
+ // overrides these per active editor theme, the same way _themePackageMap
51
+ // remaps @uiw theme exports — see TODO.md item 6's "Category colors need to
52
+ // be defined per editor theme... not hardcoded" note. These are just the
53
+ // standalone/demo defaults so the plugin isn't inert without that wiring.
54
+ return decoration={tailwindHighlightPlugin,tailwindHighlightTheme},decoration}function requireCodemirrorLangEmbedTailwind(){// Unlike the other embed-* packages (embed-sql/embed-graphql/embed-css/
55
+ // embed-sksl), Tailwind has no grammar to parse — `` tw`...` `` content is a
56
+ // flat space-separated list of utility class names (see TODO.md item 6: "no
57
+ // language structure inside `tw`...` ` to parse... this isn't a parseMixed
58
+ // grammar problem like the other DSLs"). So instead of `createEmbedding()`
59
+ // (matcher + nested Language for the tag registry), this package exports
60
+ // `createSupportExtension(jsLanguageSupport)`, returning plain CM extensions
61
+ // (a completion source + a decoration ViewPlugin) to merge into the JS/TSX
62
+ // language's `support` array.
63
+ function createSupportExtension(jsLanguageSupport){return[jsLanguageSupport.language.data.of({autocomplete:tailwindCompletionSource}),tailwindHighlightPlugin,tailwindHighlightTheme]}if(hasRequiredCodemirrorLangEmbedTailwind)return codemirrorLangEmbedTailwind;hasRequiredCodemirrorLangEmbedTailwind=1;const{tailwindCompletionSource}=requireCompletion(),{tailwindHighlightPlugin,tailwindHighlightTheme}=requireDecoration();return codemirrorLangEmbedTailwind={createSupportExtension},codemirrorLangEmbedTailwind}const module={exports:exports};var data,hasRequiredData,completion,hasRequiredCompletion,decoration,hasRequiredDecoration,codemirrorLangEmbedTailwind,hasRequiredCodemirrorLangEmbedTailwind,require$$0=await requireAsyncModule("@codemirror/language"),require$$1=await requireAsyncModule("@actualwave/codemirror-lang-embed-core"),require$$1$1=await requireAsyncModule("@codemirror/view"),require$$2=await requireAsyncModule("@codemirror/state"),codemirrorLangEmbedTailwindExports=requireCodemirrorLangEmbedTailwind(),index=/*@__PURE__*/function getDefaultExportFromCjs(x){return x}(codemirrorLangEmbedTailwindExports);return module.exports=index,module.exports}