<!doctypehtml><html lang=en xmlns=http://www.w3.org/1999/xhtml><meta charset=utf-8><title>Monaco Editor Lua</title><style>body,html{width:100%;height:100%;margin:0;padding:0;overflow:hidden}</style><div id=container style=width:100%;height:100%></div><script src=vs/loader.js></script><script>require.config({
            paths: {
                'vs': 'vs'
            }
        });

        var editor;
        var Proposals = [];

        var SetText, ShowMinimap, HideMinimap, EnableAutoComplete, DisableAutoComplete, GetText, AddIntellisense, Refresh;

        require(['vs/editor/editor.main'], function () {
            function getDependencyProposals() {
                return Proposals;
            }

            // Register Lua completion provider
            monaco.languages.registerCompletionItemProvider('lua', {
                provideCompletionItems: function (model, position) {
                    return getDependencyProposals();
                }
            });

            // Define custom theme
            monaco.editor.defineTheme('net-theme-dark', {
                base: 'vs-dark',
                inherit: true,
                rules: [
                    { token: 'global', foreground: '6699cc', fontStyle: "bold" },
                    { token: 'keyword', foreground: 'cc99cc', fontStyle: "bold" },
                    { token: 'comment', foreground: '999999' },
                    { token: 'number', foreground: 'f99157' },
                    { token: 'string', foreground: '99CC99' },
                    { token: 'Method', foreground: 'ffa1dc' },
                ]
            });

            // Initialize editor
            editor = monaco.editor.create(document.getElementById('container'), {
                language: 'lua',
                theme: "net-theme-dark",
                acceptSuggestionOnEnter: "smart",
                suggestOnTriggerCharacters: true,
                suggestSelection: "recentlyUsed",
                folding: true,
                wordBasedSuggestions: true,
                scrollbar: {
                    verticalHasArrows: true,
                },
                dragAndDrop: true,
                links: true,
                minimap: { enabled: false },
                showFoldingControls: "always",
                smoothScrolling: true,
            });

            // Functions to enable/disable autocomplete
            EnableAutoComplete = function () {
                editor.updateOptions({
                    suggestOnTriggerCharacters: true,
                    acceptSuggestionOnEnter: "smart",
                    wordBasedSuggestions: true
                });
            }

            DisableAutoComplete = function () {
                editor.updateOptions({
                    suggestOnTriggerCharacters: false,
                    acceptSuggestionOnEnter: "off",
                    wordBasedSuggestions: false
                });
            }

            // Window resize handler
            window.onresize = function () {
                editor.layout();
            };

            // Show/Hide minimap
            ShowMinimap = function () {
                editor.updateOptions({
                    minimap: { enabled: true }
                });
            }

            HideMinimap = function () {
                editor.updateOptions({
                    minimap: { enabled: false }
                });
            }

            // Editor content change event
            editor.onDidChangeModelContent(function (e) {
                window.chrome.webview.postMessage(editor.getValue());
            });

            // Functions to get/set text
            GetText = function () {
                return editor.getValue();
            }

            SetText = function (x) {
                editor.setValue(x);
            }

            // Add custom intellisense
            AddIntellisense = function (label, kind, detail, insertText) {
                var typeMap = {
                    "Class": monaco.languages.CompletionItemKind.Class,
                    "Color": monaco.languages.CompletionItemKind.Color,
                    "Constructor": monaco.languages.CompletionItemKind.Constructor,
                    "Enum": monaco.languages.CompletionItemKind.Enum,
                    "Field": monaco.languages.CompletionItemKind.Field,
                    "File": monaco.languages.CompletionItemKind.File,
                    "Folder": monaco.languages.CompletionItemKind.Folder,
                    "Function": monaco.languages.CompletionItemKind.Function,
                    "Interface": monaco.languages.CompletionItemKind.Interface,
                    "Keyword": monaco.languages.CompletionItemKind.Keyword,
                    "Method": monaco.languages.CompletionItemKind.Method,
                    "Module": monaco.languages.CompletionItemKind.Module,
                    "Property": monaco.languages.CompletionItemKind.Property,
                    "Reference": monaco.languages.CompletionItemKind.Reference,
                    "Snippet": monaco.languages.CompletionItemKind.Snippet,
                    "Text": monaco.languages.CompletionItemKind.Text,
                    "Unit": monaco.languages.CompletionItemKind.Unit,
                    "Value": monaco.languages.CompletionItemKind.Value,
                    "Variable": monaco.languages.CompletionItemKind.Variable
                };

                Proposals.push({
                    label: label,
                    kind: typeMap[kind] || monaco.languages.CompletionItemKind.Text,
                    detail: detail,
                    insertText: insertText
                });
            }

            // Load external data for intellisense
            async function load() {
                var docs = await (await fetch('https://raw.githubusercontent.com/khxnsu/AppSet/main/docs.txt')).json();
                for (var prop in docs) {
                    for (var item in docs[prop]) {
                        const document = docs[prop][item];
                        AddIntellisense(document.label, document.type, document.description, document.insert);
                    }
                }
                // Predefined keywords and methods
                const predefined = {
                    "Keywords": ["_G", "_VERSION", "Enum", "game", "plugin", "workspace", "script"],
                    "Variables": ["and", "break", "do", "else", "true"],
                    "Methods": ["math.abs", "string.byte"],
                    "Classes": ["Drawing", "Instance"],
                    "Functions": ["print", "warn"]
                };
                for (const category in predefined) {
                    predefined[category].forEach(key => AddIntellisense(key, category.slice(0, -1), key, key));
                }
            }
            load();

            // Refresh content
            Refresh = function () {
                var text = GetText();
                SetText('');
                editor.trigger('keyboard', 'type', { text: text });
            }
        });</script>