@jschofield/play-ground 0.2.0 → 0.3.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.
@@ -1,4 +1,4 @@
1
- import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/standalone";import i from"prettier/plugins/babel";import a from"prettier/plugins/postcss";import o from"prettier/plugins/estree";import s from"prettier/plugins/html";import{EditorView as c,drawSelection as l,gutters as u,keymap as d,lineNumbers as f}from"@codemirror/view";import{EditorState as p}from"@codemirror/state";import{basicSetup as m}from"codemirror";import{customElement as h,property as g,state as _}from"lit/decorators.js";import{defaultKeymap as v,indentWithTab as y}from"@codemirror/commands";import{html as b}from"@codemirror/lang-html";import{vim as x}from"@replit/codemirror-vim";import{foldCode as S}from"@codemirror/language";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var C=class{static{this.STORAGE_KEY=`repl-playground-state`}static{this.STATE_CHANGE_EVENT=`repl-playground-state-change`}static{this.subscribers=new Set}static getState(){try{let e=localStorage.getItem(this.STORAGE_KEY);if(e)return JSON.parse(e)}catch(e){console.warn(`Failed to parse repl-playground state from localStorage:`,e)}return{vimMode:`disabled`}}static getVimMode(){return this.getState().vimMode===`enabled`}static setVimMode(e){let t={...this.getState(),vimMode:e?`enabled`:`disabled`};try{localStorage.setItem(this.STORAGE_KEY,JSON.stringify(t))}catch(e){console.warn(`Failed to save repl-playground state to localStorage:`,e)}this.notifySubscribers(t),window.dispatchEvent(new CustomEvent(this.STATE_CHANGE_EVENT,{detail:t}))}static subscribe(e){this.subscribers.add(e)}static unsubscribe(e){this.subscribers.delete(e)}static notifySubscribers(e){this.subscribers.forEach(t=>{try{t(e)}catch(e){console.warn(`Error in state change callback:`,e)}})}static initializeStorageListener(){window.addEventListener(`storage`,e=>{if(e.key===this.STORAGE_KEY&&e.newValue)try{let t=JSON.parse(e.newValue);this.notifySubscribers(t)}catch(e){console.warn(`Failed to parse state change from storage event:`,e)}}),window.addEventListener(this.STATE_CHANGE_EVENT,(()=>{}))}},w=(e,t)=>{let n;return((...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)})};function T(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var E=[i,o,s,a],D=class extends e{constructor(...e){super(...e),this.docContents=``,this.vimMode=!1,this.html=``,this.fold=``,this.handleDocUpdate=()=>{this.docContents=this.editorView.state.doc.toString().trim(),this.updateIframeContent()},this.debouncedHandleDocUpdate=w(this.handleDocUpdate,200),this.onEditorUpdate=e=>{e.docChanged&&this.debouncedHandleDocUpdate()}}get template(){return this.querySelector(`template`)}connectedCallback(){super.connectedCallback(),C.initializeStorageListener(),this.vimMode=C.getVimMode(),this.stateChangeCallback=e=>{let t=e.vimMode===`enabled`;this.vimMode!==t&&(this.vimMode=t,this.buildEditor())},C.subscribe(this.stateChangeCallback)}async initEditorView(){let e=await this.getTemplate();this.docContents=e,this.buildEditor(e),this.fold&&this.foldLines()}buildEditor(e){let t=this.shadowRoot?.querySelector(`#editor`);if(!t)return;let n=[];this.vimMode&&n.push(x()),n.push(l()),n.push(m,d.of([...v,y]),b(),f(),u(),c.updateListener.of(this.onEditorUpdate));let r=p.create({doc:e??this.editorView?.state.doc.toString()??``,extensions:n});this.editorView&&this.editorView.destroy(),this.editorView=new c({state:r,parent:t})}foldLines(){this.fold.split(`,`).map(e=>Number.parseInt(e)).forEach(e=>{let t=this.editorView.state.doc.line(e);this.editorView.dispatch({selection:{anchor:t.from}}),S(this.editorView)})}async getTemplate(){if(this.html)return await this.format(this.html);let e=this.template?.innerHTML.trim();return await this.format(e)}async firstUpdated(){await this.initEditorView(),this.setupIframe()}disconnectedCallback(){super.disconnectedCallback(),this.stateChangeCallback&&C.unsubscribe(this.stateChangeCallback),this.editorView?.destroy()}setupIframe(){this.iframeContainer=this.shadowRoot?.querySelector(`#view-container`),this.iframeContainer&&this.updateIframeContent()}updateIframeContent(){if(!this.iframeContainer)return;let e=(this.docContents||`<!DOCTYPE html><p>Loading...</p>`).replace(`shadowrootmode="open."`,`shadowrootmode="open"`);this.iframe&&this.iframe.remove(),this.iframe=document.createElement(`iframe`),this.iframe.sandbox.add(`allow-scripts`,`allow-forms`,`allow-same-origin`),this.iframe.srcdoc=e,this.iframeContainer.appendChild(this.iframe)}async format(e=``){let t=await r.format(e,{parser:`html`,plugins:E}),n=[`open`,`disabled`,`checked`,`selected`,`readonly`,`required`,`autofocus`,`autoplay`,`controls`,`defer`,`hidden`,`loop`,`multiple`,`muted`,`reversed`,`scoped`,`async`,`default`,`visible`,`active`,`expanded`,`loading`,`invalid`,`complete`,`bool-attr`],i=t;return n.forEach(e=>{let t=RegExp(`\\s${e}=""`,`g`);i=i.replace(t,` ${e}`)}),i}toggleVimMode(){C.setVimMode(!this.vimMode)}async doFormat(){let e=await this.format(this.docContents),{state:t}=this.editorView,n=t.update({changes:{from:0,to:t.doc.length,insert:e}});this.editorView.update([n])}render(){return n`<div part="container" class="query-container">
1
+ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/standalone";import i from"prettier/plugins/babel";import a from"prettier/plugins/postcss";import o from"prettier/plugins/estree";import s from"prettier/plugins/html";import{EditorView as c,drawSelection as l,gutters as u,keymap as d,lineNumbers as f}from"@codemirror/view";import{EditorState as p}from"@codemirror/state";import{basicSetup as m}from"codemirror";import{customElement as h,property as g,state as _}from"lit/decorators.js";import{defaultKeymap as v,indentWithTab as y}from"@codemirror/commands";import{html as b}from"@codemirror/lang-html";import{HighlightStyle as x,foldCode as S,syntaxHighlighting as C}from"@codemirror/language";import{tags as w}from"@lezer/highlight";import{vim as T}from"@replit/codemirror-vim";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var E=`#1a1b26`,D=`#9aa5ce`,O=`#364A82`,k=`#565f89`,A=`#1a1b26`,j=`#1e202e`,M=[c.theme({"&":{color:D,backgroundColor:E},".cm-content":{caretColor:`#c0caf5`},".cm-cursor, .cm-dropCursor":{borderLeftColor:`#c0caf5`},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:O},".cm-panels":{backgroundColor:E,color:D},".cm-searchMatch":{backgroundColor:`#3d59a1`,outline:`1px solid #3d59a166`},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:`#3d59a1aa`},".cm-activeLine":{backgroundColor:j},".cm-selectionMatch":{backgroundColor:`#3d59a144`},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:`#3d59a166`},".cm-gutters":{backgroundColor:A,color:k,border:`none`},".cm-activeLineGutter":{backgroundColor:j},".cm-foldPlaceholder":{backgroundColor:`transparent`,border:`none`,color:`#565f89`},".cm-tooltip":{border:`none`,backgroundColor:`#24283b`},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:`transparent`,borderBottomColor:`transparent`},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:`#24283b`,borderBottomColor:`#24283b`},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:`#364A82`,color:D}}},{dark:!0}),C(x.define([{tag:w.keyword,color:`#bb9af7`},{tag:[w.name,w.deleted,w.character,w.macroName],color:`#c0caf5`},{tag:[w.function(w.variableName)],color:`#7aa2f7`},{tag:[w.labelName],color:`#7dcfff`},{tag:[w.color,w.constant(w.name),w.standard(w.name)],color:`#ff9e64`},{tag:[w.definition(w.name),w.separator],color:`#c0caf5`},{tag:[w.brace],color:`#c0caf5`},{tag:[w.annotation],color:`#e0af68`},{tag:[w.number,w.changed,w.annotation,w.modifier,w.self,w.namespace],color:`#ff9e64`},{tag:[w.typeName,w.className],color:`#2ac3de`},{tag:[w.operator,w.operatorKeyword],color:`#bb9af7`},{tag:[w.tagName],color:`#f7768e`},{tag:[w.squareBracket],color:`#c0caf5`},{tag:[w.angleBracket],color:`#89ddff`},{tag:[w.attributeName],color:`#bb9af7`},{tag:[w.regexp],color:`#f7768e`},{tag:[w.quote],color:`#9ece6a`},{tag:[w.string],color:`#9ece6a`},{tag:w.link,color:`#73daca`,textDecoration:`underline`,textUnderlinePosition:`under`},{tag:[w.url,w.escape,w.special(w.string)],color:`#ff9e64`},{tag:[w.meta],color:`#565f89`},{tag:[w.comment],color:`#565f89`,fontStyle:`italic`},{tag:w.strong,fontWeight:`bold`,color:`#e0af68`},{tag:w.emphasis,fontStyle:`italic`,color:`#e0af68`},{tag:w.strikethrough,textDecoration:`line-through`},{tag:w.heading,fontWeight:`bold`,color:`#7dcfff`},{tag:w.special(w.heading1),fontWeight:`bold`,color:`#7dcfff`},{tag:w.heading1,fontWeight:`bold`,color:`#7dcfff`},{tag:[w.heading2,w.heading3,w.heading4],fontWeight:`bold`,color:`#7dcfff`},{tag:[w.heading5,w.heading6],color:`#7dcfff`},{tag:[w.atom,w.bool,w.special(w.variableName)],color:`#ff9e64`},{tag:[w.processingInstruction,w.inserted],color:`#73daca`},{tag:[w.contentSeparator],color:`#7aa2f7`},{tag:w.invalid,color:`#ff5370`,borderBottom:`1px dotted #ff5370`}]))],N=class{static{this.STORAGE_KEY=`repl-playground-state`}static{this.STATE_CHANGE_EVENT=`repl-playground-state-change`}static{this.subscribers=new Set}static getState(){try{let e=localStorage.getItem(this.STORAGE_KEY);if(e)return JSON.parse(e)}catch(e){console.warn(`Failed to parse repl-playground state from localStorage:`,e)}return{vimMode:`disabled`}}static getVimMode(){return this.getState().vimMode===`enabled`}static setVimMode(e){let t={...this.getState(),vimMode:e?`enabled`:`disabled`};try{localStorage.setItem(this.STORAGE_KEY,JSON.stringify(t))}catch(e){console.warn(`Failed to save repl-playground state to localStorage:`,e)}this.notifySubscribers(t),window.dispatchEvent(new CustomEvent(this.STATE_CHANGE_EVENT,{detail:t}))}static subscribe(e){this.subscribers.add(e)}static unsubscribe(e){this.subscribers.delete(e)}static notifySubscribers(e){this.subscribers.forEach(t=>{try{t(e)}catch(e){console.warn(`Error in state change callback:`,e)}})}static initializeStorageListener(){window.addEventListener(`storage`,e=>{if(e.key===this.STORAGE_KEY&&e.newValue)try{let t=JSON.parse(e.newValue);this.notifySubscribers(t)}catch(e){console.warn(`Failed to parse state change from storage event:`,e)}}),window.addEventListener(this.STATE_CHANGE_EVENT,(()=>{}))}},P=(e,t)=>{let n;return((...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)})};function F(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var I=[i,o,s,a],L=class extends e{constructor(...e){super(...e),this.docContents=``,this.vimMode=!1,this.html=``,this.fold=``,this.darkModeQuery=window.matchMedia(`(prefers-color-scheme: dark)`),this.darkModeListener=()=>this.buildEditor(),this.handleDocUpdate=()=>{this.docContents=this.editorView.state.doc.toString().trim(),this.updateIframeContent()},this.debouncedHandleDocUpdate=P(this.handleDocUpdate,200),this.onEditorUpdate=e=>{e.docChanged&&this.debouncedHandleDocUpdate()}}get template(){return this.querySelector(`template`)}get isDark(){let e=document.documentElement.getAttribute(`data-theme`);return e===`dark`?!0:e===`light`?!1:this.darkModeQuery.matches}connectedCallback(){super.connectedCallback(),N.initializeStorageListener(),this.vimMode=N.getVimMode(),this.stateChangeCallback=e=>{let t=e.vimMode===`enabled`;this.vimMode!==t&&(this.vimMode=t,this.buildEditor())},N.subscribe(this.stateChangeCallback),this.darkModeQuery.addEventListener(`change`,this.darkModeListener),this.themeObserver=new MutationObserver(()=>this.buildEditor()),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]})}async initEditorView(){let e=await this.getTemplate();this.docContents=e,this.buildEditor(e),this.fold&&this.foldLines()}buildEditor(e){let t=this.shadowRoot?.querySelector(`#editor`);if(!t)return;let n=[];this.vimMode&&n.push(T()),n.push(l()),this.isDark&&n.push(M),n.push(m,d.of([...v,y]),b(),f(),u(),c.updateListener.of(this.onEditorUpdate));let r=p.create({doc:e??this.editorView?.state.doc.toString()??``,extensions:n});this.editorView&&this.editorView.destroy(),this.editorView=new c({state:r,parent:t})}foldLines(){this.fold.split(`,`).map(e=>Number.parseInt(e)).forEach(e=>{let t=this.editorView.state.doc.line(e);this.editorView.dispatch({selection:{anchor:t.from}}),S(this.editorView)})}async getTemplate(){if(this.html)return await this.format(this.html);let e=this.template?.innerHTML.trim();return await this.format(e)}async firstUpdated(){await this.initEditorView(),this.setupIframe()}disconnectedCallback(){super.disconnectedCallback(),this.stateChangeCallback&&N.unsubscribe(this.stateChangeCallback),this.darkModeQuery.removeEventListener(`change`,this.darkModeListener),this.themeObserver?.disconnect(),this.editorView?.destroy()}setupIframe(){this.iframeContainer=this.shadowRoot?.querySelector(`#view-container`),this.iframeContainer&&this.updateIframeContent()}updateIframeContent(){if(!this.iframeContainer)return;let e=(this.docContents||`<!DOCTYPE html><p>Loading...</p>`).replace(`shadowrootmode="open."`,`shadowrootmode="open"`),t=e.includes(`<head>`)?e.replace(`<head>`,`<head><style>html{background:#fff;color:#000;color-scheme:light}</style>`):`<style>html{background:#fff;color:#000;color-scheme:light}</style>${e}`;this.iframe&&this.iframe.remove(),this.iframe=document.createElement(`iframe`),this.iframe.sandbox.add(`allow-scripts`,`allow-forms`,`allow-same-origin`),this.iframe.srcdoc=t,this.iframeContainer.appendChild(this.iframe)}async format(e=``){let t=await r.format(e,{parser:`html`,plugins:I}),n=[`open`,`disabled`,`checked`,`selected`,`readonly`,`required`,`autofocus`,`autoplay`,`controls`,`defer`,`hidden`,`loop`,`multiple`,`muted`,`reversed`,`scoped`,`async`,`default`,`visible`,`active`,`expanded`,`loading`,`invalid`,`complete`,`bool-attr`],i=t;return n.forEach(e=>{let t=RegExp(`\\s${e}=""`,`g`);i=i.replace(t,` ${e}`)}),i}toggleVimMode(){N.setVimMode(!this.vimMode)}async doFormat(){let e=await this.format(this.docContents),{state:t}=this.editorView,n=t.update({changes:{from:0,to:t.doc.length,insert:e}});this.editorView.update([n])}render(){return n`<div part="container" class="query-container">
2
2
  <div class="editor-container">
3
3
  <div class="editor-wrapper">
4
4
  <div id="editor"></div>
@@ -38,7 +38,7 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
38
38
 
39
39
  .query-container {
40
40
  container-type: inline-size;
41
- border: 1px solid #333;
41
+ border: 1px solid var(--border, #333);
42
42
  border-radius: 8px;
43
43
  overflow: hidden;
44
44
  }
@@ -54,12 +54,13 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
54
54
 
55
55
  #view-container {
56
56
  display: flex;
57
- border-left: 1px solid #333;
57
+ border-left: 1px solid var(--border, #333);
58
58
  }
59
59
 
60
60
  #view-container iframe {
61
61
  width: 100%;
62
62
  border: none;
63
+ color-scheme: light;
63
64
  }
64
65
 
65
66
  .editor-wrapper {
@@ -71,8 +72,8 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
71
72
  display: flex;
72
73
  gap: 8px;
73
74
  padding: 6px 8px;
74
- border-top: 1px solid #333;
75
- background: var(--seasalt, #fafafa);
75
+ border-top: 1px solid var(--border, #333);
76
+ background: var(--bg, #fafafa);
76
77
  }
77
78
 
78
79
  .controls button {
@@ -81,23 +82,23 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
81
82
  cursor: pointer;
82
83
  border: none;
83
84
  border-radius: 8px;
84
- background: var(--gunmetal, #1b2f36);
85
- color: var(--seasalt, #fafafa);
85
+ background: var(--button-bg, #1b2f36);
86
+ color: var(--button-text, #fafafa);
86
87
  box-shadow: var(--shadow, 0 4px 8px rgba(0, 0, 0, 0.2));
87
88
  transition: color 0.2s;
88
89
  }
89
90
 
90
91
  .controls button:hover,
91
92
  .controls button:active {
92
- background: var(--gradient, var(--gunmetal, #1b2f36));
93
- color: var(--seasalt, #fafafa);
93
+ background: var(--gradient, var(--button-bg, #1b2f36));
94
+ color: var(--button-text, #fafafa);
94
95
  }
95
96
 
96
97
  .controls button:focus-visible {
97
- outline: 2px solid var(--raw-umber, #906b56);
98
+ outline: 2px solid var(--link, #906b56);
98
99
  outline-offset: 1px;
99
- background: var(--gradient, var(--gunmetal, #1b2f36));
100
- color: var(--seasalt, #fafafa);
100
+ background: var(--gradient, var(--button-bg, #1b2f36));
101
+ color: var(--button-text, #fafafa);
101
102
  }
102
103
 
103
104
  .sr-only {
@@ -119,12 +120,12 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
119
120
  margin-left: auto;
120
121
  cursor: pointer;
121
122
  font-size: 0.833rem;
122
- color: var(--gunmetal, #1b2f36);
123
+ color: var(--text, #1b2f36);
123
124
  user-select: none;
124
125
  }
125
126
 
126
127
  .sr-only:focus-visible + .toggle-track {
127
- outline: 2px solid var(--raw-umber, #906b56);
128
+ outline: 2px solid var(--link, #906b56);
128
129
  outline-offset: 2px;
129
130
  }
130
131
 
@@ -134,14 +135,14 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
134
135
  width: 32px;
135
136
  height: 18px;
136
137
  border-radius: 9px;
137
- background: #d5d5d5;
138
- border: 1.5px solid var(--gunmetal, #1b2f36);
138
+ background: var(--border-subtle, #d5d5d5);
139
+ border: 1.5px solid var(--border, #1b2f36);
139
140
  box-sizing: border-box;
140
141
  transition: background 0.2s;
141
142
  }
142
143
 
143
144
  .toggle-track.active {
144
- background: var(--gunmetal, #1b2f36);
145
+ background: var(--accent-secondary, #1b2f36);
145
146
  }
146
147
 
147
148
  .toggle-thumb {
@@ -151,7 +152,7 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
151
152
  width: 12px;
152
153
  height: 12px;
153
154
  border-radius: 50%;
154
- background: var(--seasalt, #fafafa);
155
+ background: var(--bg, #fafafa);
155
156
  transition: transform 0.2s;
156
157
  }
157
158
 
@@ -168,4 +169,4 @@ import{LitElement as e,css as t,html as n}from"lit";import*as r from"prettier/st
168
169
  }
169
170
  }
170
171
  }
171
- `}};T([_()],D.prototype,`docContents`,void 0),T([_()],D.prototype,`vimMode`,void 0),T([g()],D.prototype,`html`,void 0),T([g()],D.prototype,`fold`,void 0),D=T([h(`play-ground`)],D);
172
+ `}};F([_()],L.prototype,`docContents`,void 0),F([_()],L.prototype,`vimMode`,void 0),F([g()],L.prototype,`html`,void 0),F([g()],L.prototype,`fold`,void 0),L=F([h(`play-ground`)],L);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jschofield/play-ground",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "main": "./dist/assets/index.js",
6
6
  "exports": {
@@ -25,6 +25,7 @@
25
25
  "@codemirror/language": "^6.10.1",
26
26
  "@codemirror/state": "^6.4.1",
27
27
  "@codemirror/view": "^6.24.1",
28
+ "@lezer/highlight": "^1.2.0",
28
29
  "@replit/codemirror-vim": "^6.3.0",
29
30
  "codemirror": "^6.0.1",
30
31
  "lit": "^3.0.0",