From ae7d6a9fd4ee0e6bfa3b8287b82f5f6085727b3c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:46:08 +0000 Subject: [PATCH 1/7] Add workflow_dispatch and MappingPane interface to MBTQDevGenerator - Add workflow_dispatch trigger to active GitHub Actions workflows - Add snippet renderer, TextMate theme selection, and MappingPane tab builder to MBTQDevGenerator - Add database schema mapping node interface and dev DB flow builder Co-authored-by: Pmaster-dev <293764797+Pmaster-dev@users.noreply.github.com> --- .github/workflows/auto-merge.yml | 1 + .github/workflows/codacy.yml | 1 + .github/workflows/docker-image.yml | 1 + .github/workflows/node.js.yml | 1 + client/src/components/MBTQDevGenerator.tsx | 215 +++++++++++++++++++-- 5 files changed, 204 insertions(+), 15 deletions(-) diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index 48470ed..10c3034 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -1,6 +1,7 @@ name: Auto-merge Dependabot PRs on: + workflow_dispatch: pull_request_target: types: [opened, synchronize, reopened] diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml index c5a54a5..24d1d50 100644 --- a/.github/workflows/codacy.yml +++ b/.github/workflows/codacy.yml @@ -14,6 +14,7 @@ name: Codacy Security Scan on: + workflow_dispatch: push: branches: [ "main" ] pull_request: diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 3f53646..1276154 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,6 +1,7 @@ name: Docker Image CI on: + workflow_dispatch: push: branches: [ "main" ] pull_request: diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 2284b93..96ebac9 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -4,6 +4,7 @@ name: Node.js CI on: + workflow_dispatch: push: branches: [ "main" ] pull_request: diff --git a/client/src/components/MBTQDevGenerator.tsx b/client/src/components/MBTQDevGenerator.tsx index a8d1dfe..4fc20d5 100644 --- a/client/src/components/MBTQDevGenerator.tsx +++ b/client/src/components/MBTQDevGenerator.tsx @@ -1,11 +1,20 @@ import { useState, memo } from 'react'; -import { Code, Database, Rocket, Zap, Shield, Eye } from 'lucide-react'; +import { Code, Database, Rocket, Zap, Shield, Eye, FileText, Layers, GitBranch, Terminal } from 'lucide-react'; interface Config { type: string; auth: string; accessibility: boolean; deploy: string; + theme: string; + snippetPreset: string; +} + +interface MappingNode { + id: string; + name: string; + targetDb: string; + status: string; } interface Magician { @@ -24,15 +33,29 @@ interface Output { const appTypes = ['webapp', 'api', 'fullstack']; const authTypes = ['deafauth', 'oauth', 'custom']; const deployTypes = ['docker', 'railway', 'fly.io', 'cloudflare']; +const textmateThemes = ['dracula', 'monokai', 'nord', 'one-dark']; +const snippetPresets = [ + { label: 'DeafAUTH Middleware', code: '// TextMate Syntax: TypeScript\nexport const authMiddleware = async (req: Request) => {\n const token = req.headers.get("x-deafauth-token");\n return await verifyDeafAuth(token);\n};' }, + { label: 'Fibonrose Validator Flow', code: '// TextMate Syntax: TypeScript\nexport const validateTask = (checkpoint: number, evidence: string) => {\n return fibonrose.confirm({ checkpoint, evidence });\n};' }, + { label: 'Supabase Realtime Sync', code: '// TextMate Syntax: TypeScript\nconst channel = supabase.channel("pinksync")\n .on("postgres_changes", { event: "*", schema: "public" }, handleSync)\n .subscribe();' } +]; const MBTQDevGenerator = () => { const [prompt, setPrompt] = useState(''); + const [activeTab, setActiveTab] = useState<'generator' | 'mapping'>('generator'); const [config, setConfig] = useState({ type: 'fullstack', auth: 'deafauth', accessibility: true, - deploy: 'docker' + deploy: 'docker', + theme: 'dracula', + snippetPreset: 'DeafAUTH Middleware' }); + const [mappingNodes, setMappingNodes] = useState([ + { id: '1', name: 'User Identity Flow', targetDb: 'supabase_auth.users', status: 'mapped' }, + { id: '2', name: 'Fibonrose Validation Log', targetDb: 'dev_db.fibonrose_events', status: 'mapped' }, + { id: '3', name: 'PinkSync Realtime Buffer', targetDb: 'dev_db.pinksync_states', status: 'active' } + ]); const [generating, setGenerating] = useState(false); const [output, setOutput] = useState(null); @@ -74,17 +97,46 @@ const MBTQDevGenerator = () => {
{/* Header */} -
-
- -

- MBTQ.dev -

+
+
+
+ +

+ MBTQ.dev +

+
+

AI-Powered Full Stack Generator • Flow & DB Interface Builder

+
+ + {/* Navigation Tabs */} +
+ +
-

AI-Powered Full Stack Generator • Deaf-First • LGBTQ+ Safe

- {/* Main Generator */} + {activeTab === 'generator' ? ( + /* Main Generator */
{/* Input Section */} @@ -153,6 +205,51 @@ const MBTQDevGenerator = () => {
+ {/* TextMate Theme Selection */} +
+ +
+ {textmateThemes.map(theme => ( + + ))} +
+
+ + {/* Code Snippet Preset */} +
+ +
+ {snippetPresets.map(preset => ( + + ))} +
+
+ {/* Auth */}
@@ -270,18 +367,34 @@ const MBTQDevGenerator = () => {
) : output ? ( <> - {/* Repo Info */} + {/* Repo Info & TextMate Syntax Highlight Preview */}
-
- -

Generated Repository

+
+
+ +

Generated Repository

+
+ + TextMate: {config.theme} +
-
+
✓ {output.repo}
{output.structure.map((line, i) => (
{line}
))}
+ + {/* Rendered Snippet */} +
+
+ Snippet Preview ({config.snippetPreset}) + +
+
+                      {snippetPresets.find(p => p.label === config.snippetPreset)?.code}
+                    
+
{/* Magician Status */} @@ -340,6 +453,78 @@ const MBTQDevGenerator = () => {
+ ) : ( + /* MappingPane Interface Builder & Flow Dev DB */ +
+
+
+
+

+ + MappingPane Interface Builder +

+

Configure flow routing, database schema mappings, and event dispatch bindings for dev DB.

+
+ +
+ + {/* Visual Flow Mapper Canvas */} +
+ {mappingNodes.map((node) => ( +
+
+ + + {node.name} + + + {node.status} + +
+
+ Target: {node.targetDb} +
+
+ Dispatch Trigger: auto + +
+
+ ))} +
+ + {/* Dev DB Pipeline Configuration */} +
+
+ + Dev DB & Dispatch Pipeline Status +
+
✓ Supabase Dev DB connected (localhost:5432)
+
✓ Workflow Dispatch webhook listener online
+
⚡ 3 Mapping nodes synced to Fibonrose validator sequence
+
+
+
+ )} {/* Footer Stats */}
From 255da6f458a38119c3280ae24d42345c3c57c058 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 16:57:45 +0000 Subject: [PATCH 2/7] Clean up workflows and implement MappingPane generator interface - Add workflow_dispatch trigger to active GitHub Actions workflows - Clean up unused workflow files (main.yml, nextjs.yml, deno.yml, neuralegion.yml) - Add TextMate theme selector, snippet presets, and MappingPane flow dev DB builder Co-authored-by: Pmaster-dev <293764797+Pmaster-dev@users.noreply.github.com> --- .github/workflows/deno.yml | 23 ---- .github/workflows/main.yml | 1 - .github/workflows/neuralegion.yml | 175 ------------------------------ .github/workflows/nextjs.yml | 93 ---------------- 4 files changed, 292 deletions(-) delete mode 100644 .github/workflows/deno.yml delete mode 100644 .github/workflows/main.yml delete mode 100644 .github/workflows/neuralegion.yml delete mode 100644 .github/workflows/nextjs.yml diff --git a/.github/workflows/deno.yml b/.github/workflows/deno.yml deleted file mode 100644 index 1cdf082..0000000 --- a/.github/workflows/deno.yml +++ /dev/null @@ -1,23 +0,0 @@ - deploy: - on: pull - needs: ci - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Deno - uses: denoland/setup-deno@v1 - - - name: Build Site - run: deno task build - - - name: Deploy to GitHub Pages - uses: actions/upload-pages-artifact@v3 - with: - path: dist - - - name: Publish - uses: actions/deploy-pages@v4 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 8b13789..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/workflows/neuralegion.yml b/.github/workflows/neuralegion.yml deleted file mode 100644 index 5fee27b..0000000 --- a/.github/workflows/neuralegion.yml +++ /dev/null @@ -1,175 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. -# -# Run a Nexploit Scan -# This action runs a new security scan in Nexploit, or reruns an existing one. -# Build Secure Apps & APIs. Fast. -# [NeuraLegion](https://www.neuralegion.com) is a powerful dynamic application & API security testing (DAST) platform that security teams trust and developers love. -# Automatically Tests Every Aspect of Your Apps & APIs -# Scans any target, whether Web Apps, APIs (REST. & SOAP, GraphQL & more), Web sockets or mobile, providing actionable reports -# Seamlessly integrates with the Tools and Workflows You Already Use -# -# NeuraLegion works with your existing CI/CD pipelines – trigger scans on every commit, pull request or build with unit testing. -# Spin-Up, Configure and Control Scans with Code -# One file. One command. One scan. No UI needed. -# -# Super-Fast Scans -# -# Interacts with applications and APIs, instead of just crawling them and guessing. -# Scans are fast as our AI-powered engine can understand application architecture and generate sophisticated and targeted attacks. -# -# No False Positives -# -# Stop chasing ghosts and wasting time. NeuraLegion doesn’t return false positives, so you can focus on releasing code. -# -# Comprehensive Security Testing -# -# NeuraLegion tests for all common vulnerabilities, such as SQL injection, CSRF, XSS, and XXE -- as well as uncommon vulnerabilities, such as business logic vulnerabilities. -# -# More information is available on NeuraLegion’s: -# * [Website](https://www.neuralegion.com/) -# * [Knowledge base](https://docs.neuralegion.com/docs/quickstart) -# * [YouTube channel](https://www.youtube.com/channel/UCoIC0T1pmozq3eKLsUR2uUw) -# * [GitHub Actions](https://github.com/marketplace?query=neuralegion+) -# -# Inputs -# -# `name` -# -# **Required**. Scan name. -# -# _Example:_ `name: GitHub scan ${{ github.sha }}` -# -# `api_token` -# -# **Required**. Your Nexploit API authorization token (key). You can generate it in the **Organization** section on [nexploit.app](https://nexploit.app/login). Find more information [here](https://kb.neuralegion.com/#/guide/np-web-ui/advanced-set-up/managing-org?id=managing-organization-apicli-authentication-tokens). -# -# _Example:_ `api_token: ${{ secrets.NEXPLOIT_TOKEN }}` -# -# `restart_scan` -# -# **Required** when restarting an existing scan by its ID. You can get the scan ID in the Scans section on [nexploit.app](https://nexploit.app/login).
Please make sure to only use the necessary parameters. Otherwise, you will get a response with the parameter usage requirements. -# -# _Example:_ `restart_scan: ai3LG8DmVn9Rn1YeqCNRGQ)` -# -# `discovery_types` -# -# **Required**. Array of discovery types. The following types are available: -# * `archive` - uses an uploaded HAR-file for a scan -# * `crawler` - uses a crawler to define the attack surface for a scan -# * `oas` - uses an uploaded OpenAPI schema for a scan
-# If no discovery type is specified, `crawler` is applied by default. -# -# _Example:_ -# -# ```yml -# discovery_types: | -# [ "crawler", "archive" ] -# ``` -# -# `file_id` -# -# **Required** if the discovery type is set to `archive` or `oas`. ID of a HAR-file or an OpenAPI schema you want to use for a scan. You can get the ID of an uploaded HAR-file or an OpenAPI schema in the **Storage** section on [nexploit.app](https://nexploit.app/login). -# -# _Example:_ -# -# ``` -# FILE_ID=$(nexploit-cli archive:upload \ -# --token ${{ secrets.NEXPLOIT_TOKEN }} \ -# --discard true \ -# ./example.har) -# ``` -# -# `crawler_urls` -# -# **Required** if the discovery type is set to `crawler`. Target URLs to be used by the crawler to define the attack surface. -# -# _Example:_ -# -# ``` -# crawler_urls: | -# [ "http://vulnerable-bank.com" ] -# ``` -# -# `hosts_filter` -# -# **Required** when the the discovery type is set to `archive`. Allows selecting specific hosts for a scan. -# -# Outputs -# -# `url` -# -# Url of the resulting scan -# -# `id` -# -# ID of the created scan. This ID could then be used to restart the scan, or for the following GitHub actions: -# * [Nexploit Wait for Issues](https://github.com/marketplace/actions/nexploit-wait-for-issues) -# * [Nexploit Stop Scan](https://github.com/marketplace/actions/nexploit-stop-scan) -# -# Example usage -# -# Start a new scan with parameters -# -# ```yml -# steps: -# - name: Start Nexploit Scan -# id: start -# uses: NeuraLegion/run-scan@29ebd17b4fd6292ce7a238a59401668953b37fbe -# with: -# api_token: ${{ secrets.NEXPLOIT_TOKEN }} -# name: GitHub scan ${{ github.sha }} -# discovery_types: | -# [ "crawler", "archive" ] -# crawler_urls: | -# [ "http://vulnerable-bank.com" ] -# file_id: LiYknMYSdbSZbqgMaC9Sj -# hosts_filter: | -# [ ] -# - name: Get the output scan url -# run: echo "The scan was started on ${{ steps.start.outputs.url }}" -# ``` -# -# Restart an existing scan -# -# ```yml -# steps: -# - name: Start Nexploit Scan -# id: start -# uses: NeuraLegion/run-scan@29ebd17b4fd6292ce7a238a59401668953b37fbe -# with: -# api_token: ${{ secrets.NEXPLOIT_TOKEN }} -# name: GitHub scan ${{ github.sha }} -# restart_scan: ai3LG8DmVn9Rn1YeqCNRGQ -# - name: Get the output scan url -# run: echo "The scan was started on ${{ steps.start.outputs.url }}" - - -name: "NeuraLegion" - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - schedule: - - cron: '19 11 * * 4' - -jobs: - neuralegion_scan: - runs-on: ubuntu-18.04 - name: A job to run a Nexploit scan - steps: - - uses: actions/checkout@v4 - - name: Start Nexploit Scan 🏁 - id: start - uses: NeuraLegion/run-scan@29ebd17b4fd6292ce7a238a59401668953b37fbe - with: - api_token: ${{ secrets.NEURALEGION_TOKEN }} - name: GitHub scan ${{ github.sha }} - discovery_types: | - [ "crawler" ] - crawler_urls: | - [ "https://brokencrystals.com" ] # ✏️ Update this to the url you wish to scan diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml deleted file mode 100644 index fa8804d..0000000 --- a/.github/workflows/nextjs.yml +++ /dev/null @@ -1,93 +0,0 @@ -# Sample workflow for building and deploying a Next.js site to GitHub Pages -# -# To get started with Next.js see: https://nextjs.org/docs/getting-started -# -name: Deploy Next.js site to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build job - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Detect package manager - id: detect-package-manager - run: | - if [ -f "${{ github.workspace }}/yarn.lock" ]; then - echo "manager=yarn" >> $GITHUB_OUTPUT - echo "command=install" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT - exit 0 - elif [ -f "${{ github.workspace }}/package.json" ]; then - echo "manager=npm" >> $GITHUB_OUTPUT - echo "command=ci" >> $GITHUB_OUTPUT - echo "runner=npx --no-install" >> $GITHUB_OUTPUT - exit 0 - else - echo "Unable to determine package manager" - exit 1 - fi - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: ${{ steps.detect-package-manager.outputs.manager }} - - name: Setup Pages - uses: actions/configure-pages@v5 - with: - # Automatically inject basePath in your Next.js configuration file and disable - # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). - # - # You may remove this line if you want to manage the configuration yourself. - static_site_generator: next - - name: Restore cache - uses: actions/cache@v4 - with: - path: | - .next/cache - # Generate a new cache whenever packages or source files change. - key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} - # If source files changed but packages didn't, rebuild from a prior cache. - restore-keys: | - ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- - - name: Install dependencies - run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} - - name: Build with Next.js - run: ${{ steps.detect-package-manager.outputs.runner }} next build - - name: Upload artifact - uses: actions/upload-pages-artifact@v5 - with: - path: ./out - - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v5 From 57d603aa79967b51cfd66cc501e5ac81ceeede12 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 02:56:47 +0000 Subject: [PATCH 3/7] Clean up workflows and implement MappingPane generator interface - Add workflow_dispatch trigger to active GitHub Actions workflows - Clean up unused workflow files (main.yml, nextjs.yml, deno.yml, neuralegion.yml) - Add TextMate theme selector, snippet presets, and MappingPane flow dev DB builder Co-authored-by: Pmaster-dev <293764797+Pmaster-dev@users.noreply.github.com> From 86b6fd93ea1b3c45fa0c3cfef236fe1394faf560 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 04:56:41 +0000 Subject: [PATCH 4/7] Clean up workflows and implement MappingPane generator interface - Add workflow_dispatch trigger to active GitHub Actions workflows - Clean up unused workflow files and invalid dependabot workflow file - Add id: wait to auto-merge workflow step - Add TextMate theme selector, snippet presets, and MappingPane flow dev DB builder Co-authored-by: Pmaster-dev <293764797+Pmaster-dev@users.noreply.github.com> --- .github/workflows/auto-merge.yml | 1 + .github/workflows/dependabot.yml | 29 ----------------------------- 2 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 .github/workflows/dependabot.yml diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index 10c3034..940d69d 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -21,6 +21,7 @@ jobs: github-token: "${{ secrets.GITHUB_TOKEN }}" - name: Wait for CI checks to pass + id: wait uses: lewagon/wait-on-check-action@v1.3.3 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml deleted file mode 100644 index 71f7606..0000000 --- a/.github/workflows/dependabot.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "npm" - - directory: "/" - schedule: - interval: "daily" - time: "09:00" - - timezone: "America/New_York" - open-pull-requests-limit: 10 - groups: - # Group non‑major updates together to reduce PR noise - minor-and-patch: - applies-to: version-updates - update-types: - - "minor" - - "patch" - patterns: - - "*" - ignore: - # Optionally ignore major updates if you want to review them manually - - dependency-name: "*" - update-types: ["version-update:semver-major"] - labels: - - "dependencies" - - "dependabot" - commit-message: - prefix: "chore(deps)" From 5a7dfb1a54f2332057aefbc1d34f23c8386c6848 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 05:02:21 +0000 Subject: [PATCH 5/7] Clean up workflows and implement TextMate MappingPane generator - Add workflow_dispatch trigger to active GitHub Actions workflows - Fix auto-merge step id bug and remove invalid dependabot/unused workflows - Add TextMate code editor magic features and MappingPane flow dev DB builder Co-authored-by: Pmaster-dev <293764797+Pmaster-dev@users.noreply.github.com> --- client/src/components/MBTQDevGenerator.tsx | 41 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/client/src/components/MBTQDevGenerator.tsx b/client/src/components/MBTQDevGenerator.tsx index 4fc20d5..0b80dd0 100644 --- a/client/src/components/MBTQDevGenerator.tsx +++ b/client/src/components/MBTQDevGenerator.tsx @@ -51,6 +51,9 @@ const MBTQDevGenerator = () => { theme: 'dracula', snippetPreset: 'DeafAUTH Middleware' }); + const [customSnippet, setCustomSnippet] = useState( + snippetPresets[0].code + ); const [mappingNodes, setMappingNodes] = useState([ { id: '1', name: 'User Identity Flow', targetDb: 'supabase_auth.users', status: 'mapped' }, { id: '2', name: 'Fibonrose Validation Log', targetDb: 'dev_db.fibonrose_events', status: 'mapped' }, @@ -235,6 +238,7 @@ const MBTQDevGenerator = () => { key={preset.label} onClick={() => { setConfig({...config, snippetPreset: preset.label}); + setCustomSnippet(preset.code); setPrompt(prev => prev ? `${prev}\n\n// Snippet Preset: ${preset.label}` : `Generate stack with ${preset.label}`); }} className={`text-left px-3 py-2 rounded border text-xs font-mono transition-all ${ @@ -385,15 +389,38 @@ const MBTQDevGenerator = () => { ))}
- {/* Rendered Snippet */} + {/* Rendered Interactive TextMate Editor */}
-
- Snippet Preview ({config.snippetPreset}) - +
+ + + TextMate Code Editor ({config.snippetPreset}) + + + Grammar: source.ts · {config.theme} + +
+
+
+
+ {customSnippet.split('\n').map((_, i) => ( +
{i + 1}
+ ))} +
+