diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns index 6c0183da..6c84ab9d 100644 Binary files a/src-tauri/icons/icon.icns and b/src-tauri/icons/icon.icns differ diff --git a/src-web/components/DropMarker.tsx b/src-web/components/DropMarker.tsx new file mode 100644 index 00000000..9ca4e557 --- /dev/null +++ b/src-web/components/DropMarker.tsx @@ -0,0 +1,12 @@ +import React, { memo } from 'react'; + +export const DropMarker = memo( + function DropMarker() { + return ( +
+
+
+ ); + }, + () => true, +); diff --git a/src-web/components/RequestPane.tsx b/src-web/components/RequestPane.tsx index 7b5b7718..b5c494c9 100644 --- a/src-web/components/RequestPane.tsx +++ b/src-web/components/RequestPane.tsx @@ -80,7 +80,7 @@ export function RequestPane({ fullHeight, className }: Props) { null} /> - + {activeRequest.bodyType === 'json' ? ( ); } - -const DropMarker = memo( - function DropMarker() { - return ( -
-
-
- ); - }, - () => true, -); diff --git a/src-web/components/core/Editor/twig/extension.ts b/src-web/components/core/Editor/twig/extension.ts index 8e7cfa1d..757bad8e 100644 --- a/src-web/components/core/Editor/twig/extension.ts +++ b/src-web/components/core/Editor/twig/extension.ts @@ -20,9 +20,9 @@ export function twig(base?: LanguageSupport, autocomplete?: GenericCompletionCon if (base) { const completion2 = base.language.data.of({ autocomplete: completions }); const languageSupport2 = new LanguageSupport(base.language, [completion2]); - return [languageSupport, languageSupport2, placeholders, base.support]; + return [languageSupport, languageSupport2, base.support]; } else { - return [languageSupport, placeholders]; + return [languageSupport]; } } diff --git a/src-web/components/core/Editor/twig/highlight.ts b/src-web/components/core/Editor/twig/highlight.ts index b53a528f..3da5e480 100644 --- a/src-web/components/core/Editor/twig/highlight.ts +++ b/src-web/components/core/Editor/twig/highlight.ts @@ -1,7 +1,8 @@ import { styleTags, tags as t } from '@lezer/highlight'; export const highlight = styleTags({ - 'if endif': t.controlKeyword, - '${[ ]}': t.meta, - DirectiveContent: t.variableName, + Open: t.meta, + Close: t.meta, + Content: t.comment, + Template: t.comment, }); diff --git a/src-web/components/core/Editor/twig/twig.grammar b/src-web/components/core/Editor/twig/twig.grammar index 11324af9..5f4c40ba 100644 --- a/src-web/components/core/Editor/twig/twig.grammar +++ b/src-web/components/core/Editor/twig/twig.grammar @@ -1,19 +1,17 @@ -@top Template { (directive | Text)* } +@top Template { Tag | Text } -directive { - Insert +@local tokens { + Close { "]}" } + @else Content } -@skip {space} { - Insert { "${[" DirectiveContent "]}" } +@skip {} { + Open { "${[" } + Tag { Open (Content)+ Close } } @tokens { - Text { ![$] Text? } - space { @whitespace+ } - DirectiveContent { ![\]}] DirectiveContent? } - @precedence { space DirectiveContent } - "${[" "]}" + Text { _ } } @external propSource highlight from "./highlight" diff --git a/src-web/components/core/Editor/twig/twig.terms.ts b/src-web/components/core/Editor/twig/twig.terms.ts index fddbc22f..804ecf1d 100644 --- a/src-web/components/core/Editor/twig/twig.terms.ts +++ b/src-web/components/core/Editor/twig/twig.terms.ts @@ -1,6 +1,8 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. export const Template = 1, - Insert = 2, - DirectiveContent = 4, + Tag = 2, + Open = 3, + Content = 4, + Close = 5, Text = 6 diff --git a/src-web/components/core/Editor/twig/twig.ts b/src-web/components/core/Editor/twig/twig.ts index a806f562..e6ea8e39 100644 --- a/src-web/components/core/Editor/twig/twig.ts +++ b/src-web/components/core/Editor/twig/twig.ts @@ -1,18 +1,18 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. -import {LRParser} from "@lezer/lr" +import {LRParser, LocalTokenGroup} from "@lezer/lr" import {highlight} from "./highlight" export const parser = LRParser.deserialize({ version: 14, - states: "zQVOPOOO_QQO'#C^OOOO'#Cc'#CcQVOPOOOdQQO,58xOOOO-E6a-E6aOOOO1G.d1G.d", - stateData: "l~OYOS~ORPOUQO~OSSO~OTUO~OYS~", - goto: "cWPPXPPPP]TQORQRORTR", - nodeNames: "⚠ Template Insert ${[ DirectiveContent ]} Text", - maxTerm: 10, + states: "!QOQOPOOOOOO'#C_'#C_OYOQO'#C^QOOOOOOOOO'#Cc'#CcO_OQO,58xOOOO-E6a-E6aOOOO1G.d1G.d", + stateData: "g~OUROXPO~OSSO~OSSOTVO~O", + goto: "eWPPX[PPP_RRORQOQTQRUT", + nodeNames: "⚠ Template Tag Open Content Close Text", + maxTerm: 9, propSources: [highlight], skippedNodes: [0], repeatNodeCount: 1, - tokenData: ")gRRmOX!|X^$y^p!|pq$yqt!|tu&}u#P!|#P#Q(k#Q#q!|#q#r$[#r#y!|#y#z$y#z$f!|$f$g$y$g#BY!|#BY#BZ$y#BZ$IS!|$IS$I_$y$I_$I|!|$I|$JO$y$JO$JT!|$JT$JU$y$JU$KV!|$KV$KW$y$KW&FU!|&FU&FV$y&FV;'S!|;'S;=`$s<%lO!|R#TXUPSQOt!|tu#pu#P!|#P#Q$[#Q#q!|#q#r$[#r;'S!|;'S;=`$s<%lO!|Q#uTSQO#P#p#Q#q#p#r;'S#p;'S;=`$U<%lO#pQ$XP;=`<%l#pP$aSUPOt$[u;'S$[;'S;=`$m<%lO$[P$pP;=`<%l$[R$vP;=`<%l!|R%SmUPYQSQOX!|X^$y^p!|pq$yqt!|tu#pu#P!|#P#Q$[#Q#q!|#q#r$[#r#y!|#y#z$y#z$f!|$f$g$y$g#BY!|#BY#BZ$y#BZ$IS!|$IS$I_$y$I_$I|!|$I|$JO$y$JO$JT!|$JT$JU$y$JU$KV!|$KV$KW$y$KW&FU!|&FU&FV$y&FV;'S!|;'S;=`$s<%lO!|R'SVSQO#P#p#Q#o#p#o#p'i#p#q#p#r;'S#p;'S;=`$U<%lO#pR'nVSQO!}#p!}#O(T#O#P#p#Q#q#p#r;'S#p;'S;=`$U<%lO#pR([TRPSQO#P#p#Q#q#p#r;'S#p;'S;=`$U<%lO#pR(pUUPOt$[u#q$[#q#r)S#r;'S$[;'S;=`$m<%lO$[R)ZSTQUPOt$[u;'S$[;'S;=`$m<%lO$[", - tokenizers: [0, 1], + tokenData: "!S~RTOtbtugu;'Sb;'S;=`z;=`Ob~gOU~~lPU~#o#po~rP!}#Ou~zOX~~!PPU~;=`<%lb", + tokenizers: [1, new LocalTokenGroup("b~RP#P#QU~XP#q#r[~aOT~~", 17, 4)], topRules: {"Template":[0,1]}, - tokenPrec: 25 + tokenPrec: 0 }) diff --git a/src-web/components/core/PairEditor.tsx b/src-web/components/core/PairEditor.tsx index 1ee3e833..bc91998d 100644 --- a/src-web/components/core/PairEditor.tsx +++ b/src-web/components/core/PairEditor.tsx @@ -3,6 +3,7 @@ import React, { Fragment, memo, useCallback, useEffect, useMemo, useRef, useStat import type { XYCoord } from 'react-dnd'; import { useDrag, useDrop } from 'react-dnd'; import { v4 as uuid } from 'uuid'; +import { DropMarker } from '../DropMarker'; import type { GenericCompletionConfig } from './Editor/genericCompletion'; import { Icon } from './Icon'; import { IconButton } from './IconButton'; @@ -284,14 +285,3 @@ const FormRow = memo(function FormRow({ const newPairContainer = (pair?: Pair): PairContainer => { return { pair: pair ?? { name: '', value: '' }, id: uuid() }; }; - -const DropMarker = memo( - function DropMarker() { - return ( -
-
-
- ); - }, - () => true, -);