@tslite/react 1.0.0 → 1.1.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.
package/dist/full.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Extension } from '@codemirror/state';
2
- import { F as FieldLayout, S as SegmenterOption, U as UseExpressionFieldOptions } from './useExpressionField-RJzhO-r7.cjs';
2
+ import { F as FieldLayout, S as SegmenterOption, U as UseExpressionFieldOptions } from './useExpressionField-RmyW3D9R.cjs';
3
3
  export { searchEditing } from '@tslite/codemirror/search';
4
4
  export { format, formatExpression } from '@tslite/format';
5
5
  export { tsliteTokenStyles } from '@tslite/editor';
package/dist/full.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Extension } from '@codemirror/state';
2
- import { F as FieldLayout, S as SegmenterOption, U as UseExpressionFieldOptions } from './useExpressionField-RJzhO-r7.js';
2
+ import { F as FieldLayout, S as SegmenterOption, U as UseExpressionFieldOptions } from './useExpressionField-RmyW3D9R.js';
3
3
  export { searchEditing } from '@tslite/codemirror/search';
4
4
  export { format, formatExpression } from '@tslite/format';
5
5
  export { tsliteTokenStyles } from '@tslite/editor';
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var n=require('react'),state=require('@codemirror/state'),view=require('@codemirror/view'),commands=require('@codemirror/commands'),autocomplete=require('@codemirror/autocomplete'),codemirror=require('@tslite/codemirror'),editor=require('@tslite/editor'),languageService=require('@tslite/language-service'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var n__namespace=/*#__PURE__*/_interopNamespace(n);var ae={mustache:languageService.mustache,whole:languageService.whole},ce=t=>typeof t=="function"?t:ae[t];function A(t){let{env:o,service:c,segmenter:i="mustache",mode:s="expression",profile:l,limits:d,unused:p,format:a}=t;return n__namespace.useMemo(()=>{if(c)return c;if(!o)return null;let m={env:o,...l?{profile:l}:{},...d?{limits:d}:{},...p!==void 0?{unused:p}:{},...a?{format:a}:{}};return s==="template"?editor.createHostService({...m,mode:s}):editor.createHostService({...m,segmenter:ce(i),mode:s})},[c,o,i,s,l,d,p,a])}var Oe=view.EditorView.theme({".cm-scroller":{overflowX:"auto",overflowY:"hidden"},".cm-content":{padding:"6px 8px"},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),z=6,Te=view.EditorView.theme({".cm-scroller":{overflowY:"auto"},".cm-content":{padding:`${z}px 8px`},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),Le=(t,o)=>`${o*t.defaultLineHeight+2*z}px`,we=view.EditorView.theme({"&":{height:"100%"},".cm-scroller":{overflowY:"auto"},".cm-content":{padding:"8px"},"&.cm-focused":{outline:"none"}}),$=t=>t.replace(/\r?\n/g," "),ke=(t,o)=>{if(t===false)return [];let c=o==="block"?{}:{tab:false,indentOnInput:false};return codemirror.codeEditing(typeof t=="object"?{...c,...t}:c)},Ce=t=>t?codemirror.gutters(typeof t=="object"?t:{}):[];function D(t){let{value:o,onChange:c,onCommit:i,layout:s="inline",maxLines:l,wrap:d=s!=="inline",editing:p,gutters:a,readOnly:m=false,placeholder:b,features:I,tooltipParent:L,onTokenAction:V,isTokenActionable:_,definition:w,extensions:ee}=t,h=A(t),k=n__namespace.useRef(null),y=n__namespace.useRef(null),[U,Y]=n__namespace.useState(null),[te,oe]=n__namespace.useState(false),R=n__namespace.useRef({value:o,onChange:c,onCommit:i,onTokenAction:V,isTokenActionable:_});R.current={value:o,onChange:c,onCommit:i,onTokenAction:V,isTokenActionable:_};let C=n__namespace.useCallback(e=>{let{value:r,onCommit:x}=R.current;if(!x)return;let f=e.state.doc.toString();f!==r&&x(f);},[]),u=n__namespace.useRef({service:new state.Compartment,layout:new state.Compartment,editable:new state.Compartment,actions:new state.Compartment}).current,H=n__namespace.useCallback(e=>e?codemirror.languageService(e,{theme:editor.tsliteTokenStyles,...L!==null?{tooltipParent:L??(typeof document<"u"?document.body:void 0)}:{},...I}):[],[I,L]),G=n__namespace.useCallback(e=>autocomplete.completionStatus(e.state)==="active"?autocomplete.acceptCompletion(e)||true:(C(e),true),[C]),P=n__namespace.useCallback((e,r,x,f)=>[e==="block"?[...r?[view.EditorView.lineWrapping]:[],we]:e==="grow"?[...r?[view.EditorView.lineWrapping]:[],Te,state.Prec.highest(view.keymap.of([{key:"Enter",run:G},{key:"Shift-Enter",run:commands.insertNewlineAndIndent}]))]:[codemirror.singleLine,Oe],ke(x,e),Ce(f)],[G]),M=n__namespace.useCallback(()=>{let e=[];return R.current.onTokenAction&&e.push(codemirror.tokenAction({actionable:r=>R.current.isTokenActionable?.(r)??true,onAction:r=>R.current.onTokenAction?.(r)})),w&&h?.definitionAt&&e.push(codemirror.gotoDefinition(w)),e},[w,h]);n__namespace.useEffect(()=>{if(!k.current)return;let e=new view.EditorView({parent:k.current,state:state.EditorState.create({doc:s==="inline"?$(o):o,extensions:[commands.history(),u.service.of(H(h)),u.layout.of(P(s,d,p,a)),u.editable.of(view.EditorView.editable.of(!m)),u.actions.of(M()),...b?[view.placeholder(b)]:[],view.keymap.of([...commands.historyKeymap,...commands.defaultKeymap]),view.EditorView.updateListener.of(r=>{if(r.focusChanged&&oe(r.view.hasFocus),!r.docChanged)return;r.transactions.some(f=>f.annotation(codemirror.externalChange))||R.current.onChange?.(r.state.doc.toString());}),view.EditorView.contentAttributes.of({"aria-label":b??"expression"}),view.EditorView.domEventHandlers({blur:(r,x)=>{let f=r.relatedTarget;return f instanceof Element&&(x.dom.contains(f)||f.closest(".cm-tooltip"))||C(x),false}}),...ee??[]]})});return y.current=e,Y(e),()=>{e.destroy(),y.current=null,Y(null);}},[]),n__namespace.useEffect(()=>{y.current?.dispatch({effects:u.service.reconfigure(H(h))});},[h,H,u]),n__namespace.useEffect(()=>{y.current?.dispatch({effects:u.layout.reconfigure(P(s,d,p,a))});},[s,d,p,a,P,u]),n__namespace.useEffect(()=>{y.current?.dispatch({effects:u.editable.reconfigure(view.EditorView.editable.of(!m))});},[m,u]),n__namespace.useEffect(()=>{let e=y.current;e&&(e.scrollDOM.style.maxHeight=s==="grow"&&l!==void 0&&l>0?Le(e,l):"");},[s,l,U]),n__namespace.useEffect(()=>{y.current?.dispatch({effects:u.actions.reconfigure(M())});},[M,u]),n__namespace.useEffect(()=>{let e=y.current;if(!e)return;let r=s==="inline"?$(o):o;if(r===e.state.doc.toString())return;let{anchor:x,head:f}=e.state.selection.main,N=re=>Math.min(re,r.length);e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},selection:{anchor:N(x),head:N(f)},annotations:codemirror.externalChange.of(true)});},[o,s]);let ne=n__namespace.useCallback(()=>y.current?.focus(),[]);return {ref:k,view:U,focused:te,service:h,focus:ne}}var X=n__namespace.createContext(null);function J(){let t=n__namespace.useContext(X);if(!t)throw new Error("useFieldContext must be used inside <ExpressionField.Root>");return t}var He=["value","onChange","onCommit","layout","maxLines","wrap","editing","gutters","readOnly","placeholder","features","tooltipParent","onTokenAction","isTokenActionable","definition","extensions","env","service","segmenter","mode","profile","limits","unused","format"];var Q=n__namespace.forwardRef(function(o,c){let{children:i,...s}=o,l={},d={};for(let[a,m]of Object.entries(s))(He.includes(a)?l:d)[a]=m;let p=D(l);return jsxRuntime.jsx(X.Provider,{value:p,children:jsxRuntime.jsx("div",{ref:c,...d,children:typeof i=="function"?i(p):i})})}),Z=n__namespace.forwardRef(function(o,c){let i=J();return jsxRuntime.jsx("div",{ref:i.ref,...o})}),q=n__namespace.forwardRef(function({children:o,...c},i){return jsxRuntime.jsx("button",{ref:i,type:"button",...c,children:o})}),S={Root:Q,Editor:Z,ExpandTrigger:q};var E={fg:"var(--foreground, #cccccc)",mutedFg:"var(--muted-foreground, #8b8b8b)",border:"var(--border, #2b2b2b)",ring:"var(--ring, #0078d4)",input:"var(--input, transparent)",destructive:"var(--destructive, #f14c4c)",font:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)"},Pe=["--foreground","--muted-foreground","--border","--ring","--input","--destructive","--font-mono","--muted","--popover","--popover-foreground","--primary","--primary-foreground","--secondary","--accent"];var Me=jsxRuntime.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})});function Ae({invalid:t,className:o,style:c,onExpand:i,expandIcon:s,multiline:l,layout:d,...p}){let a=d??(l?"block":"inline");return jsxRuntime.jsx(S.Root,{...p,layout:a,className:o,children:m=>jsxRuntime.jsxs("div",{style:{position:"relative",border:`1px solid ${t?E.destructive:m.focused?E.ring:E.border}`,borderRadius:"6px",backgroundColor:E.input,color:E.fg,fontFamily:E.font,fontSize:"13px",overflow:"hidden",...a==="block"?{height:"100%",display:"flex",flexDirection:"column"}:{},...c},children:[jsxRuntime.jsx(S.Editor,{style:a==="block"?{flex:1,minHeight:0}:a==="grow"?{paddingRight:i?"28px":void 0}:{paddingRight:i?"24px":void 0}}),i&&jsxRuntime.jsx(S.ExpandTrigger,{onClick:i,"aria-label":"Expandir",title:"Expandir",onMouseEnter:b=>b.currentTarget.style.opacity="1",onMouseLeave:b=>b.currentTarget.style.opacity="0.55",style:{position:"absolute",top:a==="inline"?"50%":"6px",right:"4px",transform:a==="inline"?"translateY(-50%)":void 0,display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",padding:0,lineHeight:0,border:"none",borderRadius:"4px",background:E.input,color:E.mutedFg,cursor:"pointer",opacity:.55},children:s??Me})]})})}exports.CSS_VARS=Pe;exports.ExpressionField=S;exports.ExpressionFieldEditor=Z;exports.ExpressionFieldExpandTrigger=q;exports.ExpressionFieldRoot=Q;exports.ExpressionInput=Ae;exports.V=E;exports.useExpressionField=D;exports.useFieldContext=J;exports.useLanguageService=A;
1
+ 'use strict';var n=require('react'),state=require('@codemirror/state'),view=require('@codemirror/view'),commands=require('@codemirror/commands'),autocomplete=require('@codemirror/autocomplete'),codemirror=require('@tslite/codemirror'),editor=require('@tslite/editor'),languageService=require('@tslite/language-service'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var n__namespace=/*#__PURE__*/_interopNamespace(n);var ae={mustache:languageService.mustache,whole:languageService.whole},le=t=>typeof t=="function"?t:ae[t];function A(t){let{env:o,service:l,segmenter:i="mustache",mode:s="expression",profile:c,limits:d,unused:p,format:a,optional:g}=t;return n__namespace.useMemo(()=>{if(l)return l;if(!o)return null;let x={env:o,...c?{profile:c}:{},...d?{limits:d}:{},...p!==void 0?{unused:p}:{},...a?{format:a}:{},...g?{optional:g}:{}};return s==="template"?editor.createHostService({...x,mode:s}):editor.createHostService({...x,segmenter:le(i),mode:s})},[l,o,i,s,c,d,p,a,g])}var Oe=view.EditorView.theme({".cm-scroller":{overflowX:"auto",overflowY:"hidden"},".cm-content":{padding:"6px 8px"},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),z=6,Le=view.EditorView.theme({".cm-scroller":{overflowY:"auto"},".cm-content":{padding:`${z}px 8px`},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),Te=(t,o)=>`${o*t.defaultLineHeight+2*z}px`,we=view.EditorView.theme({"&":{height:"100%"},".cm-scroller":{overflowY:"auto"},".cm-content":{padding:"8px"},"&.cm-focused":{outline:"none"}}),$=t=>t.replace(/\r?\n/g," "),ke=(t,o)=>{if(t===false)return [];let l=o==="block"?{}:{tab:false,indentOnInput:false};return codemirror.codeEditing(typeof t=="object"?{...l,...t}:l)},Ce=t=>t?codemirror.gutters(typeof t=="object"?t:{}):[];function D(t){let{value:o,onChange:l,onCommit:i,layout:s="inline",maxLines:c,wrap:d=s!=="inline",editing:p,gutters:a,readOnly:g=false,placeholder:x,features:I,tooltipParent:T,onTokenAction:V,isTokenActionable:_,definition:w,extensions:ee}=t,h=A(t),k=n__namespace.useRef(null),v=n__namespace.useRef(null),[U,Y]=n__namespace.useState(null),[te,oe]=n__namespace.useState(false),R=n__namespace.useRef({value:o,onChange:l,onCommit:i,onTokenAction:V,isTokenActionable:_});R.current={value:o,onChange:l,onCommit:i,onTokenAction:V,isTokenActionable:_};let C=n__namespace.useCallback(e=>{let{value:r,onCommit:E}=R.current;if(!E)return;let f=e.state.doc.toString();f!==r&&E(f);},[]),u=n__namespace.useRef({service:new state.Compartment,layout:new state.Compartment,editable:new state.Compartment,actions:new state.Compartment}).current,H=n__namespace.useCallback(e=>e?codemirror.languageService(e,{theme:editor.tsliteTokenStyles,...T!==null?{tooltipParent:T??(typeof document<"u"?document.body:void 0)}:{},...I}):[],[I,T]),G=n__namespace.useCallback(e=>autocomplete.completionStatus(e.state)==="active"?autocomplete.acceptCompletion(e)||true:(C(e),true),[C]),P=n__namespace.useCallback((e,r,E,f)=>[e==="block"?[...r?[view.EditorView.lineWrapping]:[],we]:e==="grow"?[...r?[view.EditorView.lineWrapping]:[],Le,state.Prec.highest(view.keymap.of([{key:"Enter",run:G},{key:"Shift-Enter",run:commands.insertNewlineAndIndent}]))]:[codemirror.singleLine,Oe],ke(E,e),Ce(f)],[G]),M=n__namespace.useCallback(()=>{let e=[];return R.current.onTokenAction&&e.push(codemirror.tokenAction({actionable:r=>R.current.isTokenActionable?.(r)??true,onAction:r=>R.current.onTokenAction?.(r)})),w&&h?.definitionAt&&e.push(codemirror.gotoDefinition(w)),e},[w,h]);n__namespace.useEffect(()=>{if(!k.current)return;let e=new view.EditorView({parent:k.current,state:state.EditorState.create({doc:s==="inline"?$(o):o,extensions:[commands.history(),u.service.of(H(h)),u.layout.of(P(s,d,p,a)),u.editable.of(view.EditorView.editable.of(!g)),u.actions.of(M()),...x?[view.placeholder(x)]:[],view.keymap.of([...commands.historyKeymap,...commands.defaultKeymap]),view.EditorView.updateListener.of(r=>{if(r.focusChanged&&oe(r.view.hasFocus),!r.docChanged)return;r.transactions.some(f=>f.annotation(codemirror.externalChange))||R.current.onChange?.(r.state.doc.toString());}),view.EditorView.contentAttributes.of({"aria-label":x??"expression"}),view.EditorView.domEventHandlers({blur:(r,E)=>{let f=r.relatedTarget;return f instanceof Element&&(E.dom.contains(f)||f.closest(".cm-tooltip"))||C(E),false}}),...ee??[]]})});return v.current=e,Y(e),()=>{e.destroy(),v.current=null,Y(null);}},[]),n__namespace.useEffect(()=>{v.current?.dispatch({effects:u.service.reconfigure(H(h))});},[h,H,u]),n__namespace.useEffect(()=>{v.current?.dispatch({effects:u.layout.reconfigure(P(s,d,p,a))});},[s,d,p,a,P,u]),n__namespace.useEffect(()=>{v.current?.dispatch({effects:u.editable.reconfigure(view.EditorView.editable.of(!g))});},[g,u]),n__namespace.useEffect(()=>{let e=v.current;e&&(e.scrollDOM.style.maxHeight=s==="grow"&&c!==void 0&&c>0?Te(e,c):"");},[s,c,U]),n__namespace.useEffect(()=>{v.current?.dispatch({effects:u.actions.reconfigure(M())});},[M,u]),n__namespace.useEffect(()=>{let e=v.current;if(!e)return;let r=s==="inline"?$(o):o;if(r===e.state.doc.toString())return;let{anchor:E,head:f}=e.state.selection.main,N=re=>Math.min(re,r.length);e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},selection:{anchor:N(E),head:N(f)},annotations:codemirror.externalChange.of(true)});},[o,s]);let ne=n__namespace.useCallback(()=>v.current?.focus(),[]);return {ref:k,view:U,focused:te,service:h,focus:ne}}var X=n__namespace.createContext(null);function q(){let t=n__namespace.useContext(X);if(!t)throw new Error("useFieldContext must be used inside <ExpressionField.Root>");return t}var He=["value","onChange","onCommit","layout","maxLines","wrap","editing","gutters","readOnly","placeholder","features","tooltipParent","onTokenAction","isTokenActionable","definition","extensions","env","service","segmenter","mode","profile","limits","unused","format","optional"];var J=n__namespace.forwardRef(function(o,l){let{children:i,...s}=o,c={},d={};for(let[a,g]of Object.entries(s))(He.includes(a)?c:d)[a]=g;let p=D(c);return jsxRuntime.jsx(X.Provider,{value:p,children:jsxRuntime.jsx("div",{ref:l,...d,children:typeof i=="function"?i(p):i})})}),Q=n__namespace.forwardRef(function(o,l){let i=q();return jsxRuntime.jsx("div",{ref:i.ref,...o})}),Z=n__namespace.forwardRef(function({children:o,...l},i){return jsxRuntime.jsx("button",{ref:i,type:"button",...l,children:o})}),S={Root:J,Editor:Q,ExpandTrigger:Z};var y={fg:"var(--foreground, #cccccc)",mutedFg:"var(--muted-foreground, #8b8b8b)",border:"var(--border, #2b2b2b)",ring:"var(--ring, #0078d4)",input:"var(--input, transparent)",destructive:"var(--destructive, #f14c4c)",font:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)"},Pe=["--foreground","--muted-foreground","--border","--ring","--input","--destructive","--font-mono","--muted","--popover","--popover-foreground","--primary","--primary-foreground","--secondary","--accent"];var Me=jsxRuntime.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:jsxRuntime.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})});function Ae({invalid:t,className:o,style:l,onExpand:i,expandIcon:s,multiline:c,layout:d,...p}){let a=d??(c?"block":"inline");return jsxRuntime.jsx(S.Root,{...p,layout:a,className:o,children:g=>jsxRuntime.jsxs("div",{style:{position:"relative",border:`1px solid ${t?y.destructive:g.focused?y.ring:y.border}`,borderRadius:"6px",backgroundColor:y.input,color:y.fg,fontFamily:y.font,fontSize:"13px",overflow:"hidden",...a==="block"?{height:"100%",display:"flex",flexDirection:"column"}:{},...l},children:[jsxRuntime.jsx(S.Editor,{style:a==="block"?{flex:1,minHeight:0}:a==="grow"?{paddingRight:i?"28px":void 0}:{paddingRight:i?"24px":void 0}}),i&&jsxRuntime.jsx(S.ExpandTrigger,{onClick:i,"aria-label":"Expandir",title:"Expandir",onMouseEnter:x=>x.currentTarget.style.opacity="1",onMouseLeave:x=>x.currentTarget.style.opacity="0.55",style:{position:"absolute",top:a==="inline"?"50%":"6px",right:"4px",transform:a==="inline"?"translateY(-50%)":void 0,display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",padding:0,lineHeight:0,border:"none",borderRadius:"4px",background:y.input,color:y.mutedFg,cursor:"pointer",opacity:.55},children:s??Me})]})})}exports.CSS_VARS=Pe;exports.ExpressionField=S;exports.ExpressionFieldEditor=Q;exports.ExpressionFieldExpandTrigger=Z;exports.ExpressionFieldRoot=J;exports.ExpressionInput=Ae;exports.V=y;exports.useExpressionField=D;exports.useFieldContext=q;exports.useLanguageService=A;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { U as UseExpressionFieldOptions, E as ExpressionFieldHandle } from './useExpressionField-RJzhO-r7.cjs';
3
- export { F as FieldLayout, L as LanguageServiceOptions, S as SegmenterOption, u as useExpressionField, a as useLanguageService } from './useExpressionField-RJzhO-r7.cjs';
2
+ import { U as UseExpressionFieldOptions, E as ExpressionFieldHandle } from './useExpressionField-RmyW3D9R.cjs';
3
+ export { F as FieldLayout, L as LanguageServiceOptions, S as SegmenterOption, u as useExpressionField, a as useLanguageService } from './useExpressionField-RmyW3D9R.cjs';
4
4
  export { TokenActionTarget } from '@tslite/codemirror';
5
5
  import '@codemirror/state';
6
6
  import '@codemirror/view';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { U as UseExpressionFieldOptions, E as ExpressionFieldHandle } from './useExpressionField-RJzhO-r7.js';
3
- export { F as FieldLayout, L as LanguageServiceOptions, S as SegmenterOption, u as useExpressionField, a as useLanguageService } from './useExpressionField-RJzhO-r7.js';
2
+ import { U as UseExpressionFieldOptions, E as ExpressionFieldHandle } from './useExpressionField-RmyW3D9R.js';
3
+ export { F as FieldLayout, L as LanguageServiceOptions, S as SegmenterOption, u as useExpressionField, a as useLanguageService } from './useExpressionField-RmyW3D9R.js';
4
4
  export { TokenActionTarget } from '@tslite/codemirror';
5
5
  import '@codemirror/state';
6
6
  import '@codemirror/view';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import*as n from'react';import {Compartment,Prec,EditorState}from'@codemirror/state';import {EditorView,keymap,placeholder}from'@codemirror/view';import {insertNewlineAndIndent,history,historyKeymap,defaultKeymap}from'@codemirror/commands';import {completionStatus,acceptCompletion}from'@codemirror/autocomplete';import {languageService,singleLine,tokenAction,gotoDefinition,externalChange,codeEditing,gutters}from'@tslite/codemirror';import {tsliteTokenStyles,createHostService}from'@tslite/editor';import {whole,mustache}from'@tslite/language-service';import {jsx,jsxs}from'react/jsx-runtime';var ae={mustache:mustache,whole:whole},ce=t=>typeof t=="function"?t:ae[t];function A(t){let{env:o,service:c,segmenter:i="mustache",mode:s="expression",profile:l,limits:d,unused:p,format:a}=t;return n.useMemo(()=>{if(c)return c;if(!o)return null;let m={env:o,...l?{profile:l}:{},...d?{limits:d}:{},...p!==void 0?{unused:p}:{},...a?{format:a}:{}};return s==="template"?createHostService({...m,mode:s}):createHostService({...m,segmenter:ce(i),mode:s})},[c,o,i,s,l,d,p,a])}var Oe=EditorView.theme({".cm-scroller":{overflowX:"auto",overflowY:"hidden"},".cm-content":{padding:"6px 8px"},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),z=6,Te=EditorView.theme({".cm-scroller":{overflowY:"auto"},".cm-content":{padding:`${z}px 8px`},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),Le=(t,o)=>`${o*t.defaultLineHeight+2*z}px`,we=EditorView.theme({"&":{height:"100%"},".cm-scroller":{overflowY:"auto"},".cm-content":{padding:"8px"},"&.cm-focused":{outline:"none"}}),$=t=>t.replace(/\r?\n/g," "),ke=(t,o)=>{if(t===false)return [];let c=o==="block"?{}:{tab:false,indentOnInput:false};return codeEditing(typeof t=="object"?{...c,...t}:c)},Ce=t=>t?gutters(typeof t=="object"?t:{}):[];function D(t){let{value:o,onChange:c,onCommit:i,layout:s="inline",maxLines:l,wrap:d=s!=="inline",editing:p,gutters:a,readOnly:m=false,placeholder:b,features:I,tooltipParent:L,onTokenAction:V,isTokenActionable:_,definition:w,extensions:ee}=t,h=A(t),k=n.useRef(null),y=n.useRef(null),[U,Y]=n.useState(null),[te,oe]=n.useState(false),R=n.useRef({value:o,onChange:c,onCommit:i,onTokenAction:V,isTokenActionable:_});R.current={value:o,onChange:c,onCommit:i,onTokenAction:V,isTokenActionable:_};let C=n.useCallback(e=>{let{value:r,onCommit:x}=R.current;if(!x)return;let f=e.state.doc.toString();f!==r&&x(f);},[]),u=n.useRef({service:new Compartment,layout:new Compartment,editable:new Compartment,actions:new Compartment}).current,H=n.useCallback(e=>e?languageService(e,{theme:tsliteTokenStyles,...L!==null?{tooltipParent:L??(typeof document<"u"?document.body:void 0)}:{},...I}):[],[I,L]),G=n.useCallback(e=>completionStatus(e.state)==="active"?acceptCompletion(e)||true:(C(e),true),[C]),P=n.useCallback((e,r,x,f)=>[e==="block"?[...r?[EditorView.lineWrapping]:[],we]:e==="grow"?[...r?[EditorView.lineWrapping]:[],Te,Prec.highest(keymap.of([{key:"Enter",run:G},{key:"Shift-Enter",run:insertNewlineAndIndent}]))]:[singleLine,Oe],ke(x,e),Ce(f)],[G]),M=n.useCallback(()=>{let e=[];return R.current.onTokenAction&&e.push(tokenAction({actionable:r=>R.current.isTokenActionable?.(r)??true,onAction:r=>R.current.onTokenAction?.(r)})),w&&h?.definitionAt&&e.push(gotoDefinition(w)),e},[w,h]);n.useEffect(()=>{if(!k.current)return;let e=new EditorView({parent:k.current,state:EditorState.create({doc:s==="inline"?$(o):o,extensions:[history(),u.service.of(H(h)),u.layout.of(P(s,d,p,a)),u.editable.of(EditorView.editable.of(!m)),u.actions.of(M()),...b?[placeholder(b)]:[],keymap.of([...historyKeymap,...defaultKeymap]),EditorView.updateListener.of(r=>{if(r.focusChanged&&oe(r.view.hasFocus),!r.docChanged)return;r.transactions.some(f=>f.annotation(externalChange))||R.current.onChange?.(r.state.doc.toString());}),EditorView.contentAttributes.of({"aria-label":b??"expression"}),EditorView.domEventHandlers({blur:(r,x)=>{let f=r.relatedTarget;return f instanceof Element&&(x.dom.contains(f)||f.closest(".cm-tooltip"))||C(x),false}}),...ee??[]]})});return y.current=e,Y(e),()=>{e.destroy(),y.current=null,Y(null);}},[]),n.useEffect(()=>{y.current?.dispatch({effects:u.service.reconfigure(H(h))});},[h,H,u]),n.useEffect(()=>{y.current?.dispatch({effects:u.layout.reconfigure(P(s,d,p,a))});},[s,d,p,a,P,u]),n.useEffect(()=>{y.current?.dispatch({effects:u.editable.reconfigure(EditorView.editable.of(!m))});},[m,u]),n.useEffect(()=>{let e=y.current;e&&(e.scrollDOM.style.maxHeight=s==="grow"&&l!==void 0&&l>0?Le(e,l):"");},[s,l,U]),n.useEffect(()=>{y.current?.dispatch({effects:u.actions.reconfigure(M())});},[M,u]),n.useEffect(()=>{let e=y.current;if(!e)return;let r=s==="inline"?$(o):o;if(r===e.state.doc.toString())return;let{anchor:x,head:f}=e.state.selection.main,N=re=>Math.min(re,r.length);e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},selection:{anchor:N(x),head:N(f)},annotations:externalChange.of(true)});},[o,s]);let ne=n.useCallback(()=>y.current?.focus(),[]);return {ref:k,view:U,focused:te,service:h,focus:ne}}var X=n.createContext(null);function J(){let t=n.useContext(X);if(!t)throw new Error("useFieldContext must be used inside <ExpressionField.Root>");return t}var He=["value","onChange","onCommit","layout","maxLines","wrap","editing","gutters","readOnly","placeholder","features","tooltipParent","onTokenAction","isTokenActionable","definition","extensions","env","service","segmenter","mode","profile","limits","unused","format"];var Q=n.forwardRef(function(o,c){let{children:i,...s}=o,l={},d={};for(let[a,m]of Object.entries(s))(He.includes(a)?l:d)[a]=m;let p=D(l);return jsx(X.Provider,{value:p,children:jsx("div",{ref:c,...d,children:typeof i=="function"?i(p):i})})}),Z=n.forwardRef(function(o,c){let i=J();return jsx("div",{ref:i.ref,...o})}),q=n.forwardRef(function({children:o,...c},i){return jsx("button",{ref:i,type:"button",...c,children:o})}),S={Root:Q,Editor:Z,ExpandTrigger:q};var E={fg:"var(--foreground, #cccccc)",mutedFg:"var(--muted-foreground, #8b8b8b)",border:"var(--border, #2b2b2b)",ring:"var(--ring, #0078d4)",input:"var(--input, transparent)",destructive:"var(--destructive, #f14c4c)",font:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)"},Pe=["--foreground","--muted-foreground","--border","--ring","--input","--destructive","--font-mono","--muted","--popover","--popover-foreground","--primary","--primary-foreground","--secondary","--accent"];var Me=jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})});function Ae({invalid:t,className:o,style:c,onExpand:i,expandIcon:s,multiline:l,layout:d,...p}){let a=d??(l?"block":"inline");return jsx(S.Root,{...p,layout:a,className:o,children:m=>jsxs("div",{style:{position:"relative",border:`1px solid ${t?E.destructive:m.focused?E.ring:E.border}`,borderRadius:"6px",backgroundColor:E.input,color:E.fg,fontFamily:E.font,fontSize:"13px",overflow:"hidden",...a==="block"?{height:"100%",display:"flex",flexDirection:"column"}:{},...c},children:[jsx(S.Editor,{style:a==="block"?{flex:1,minHeight:0}:a==="grow"?{paddingRight:i?"28px":void 0}:{paddingRight:i?"24px":void 0}}),i&&jsx(S.ExpandTrigger,{onClick:i,"aria-label":"Expandir",title:"Expandir",onMouseEnter:b=>b.currentTarget.style.opacity="1",onMouseLeave:b=>b.currentTarget.style.opacity="0.55",style:{position:"absolute",top:a==="inline"?"50%":"6px",right:"4px",transform:a==="inline"?"translateY(-50%)":void 0,display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",padding:0,lineHeight:0,border:"none",borderRadius:"4px",background:E.input,color:E.mutedFg,cursor:"pointer",opacity:.55},children:s??Me})]})})}export{Pe as CSS_VARS,S as ExpressionField,Z as ExpressionFieldEditor,q as ExpressionFieldExpandTrigger,Q as ExpressionFieldRoot,Ae as ExpressionInput,E as V,D as useExpressionField,J as useFieldContext,A as useLanguageService};
1
+ import*as n from'react';import {Compartment,Prec,EditorState}from'@codemirror/state';import {EditorView,keymap,placeholder}from'@codemirror/view';import {insertNewlineAndIndent,history,historyKeymap,defaultKeymap}from'@codemirror/commands';import {completionStatus,acceptCompletion}from'@codemirror/autocomplete';import {languageService,singleLine,tokenAction,gotoDefinition,externalChange,codeEditing,gutters}from'@tslite/codemirror';import {tsliteTokenStyles,createHostService}from'@tslite/editor';import {whole,mustache}from'@tslite/language-service';import {jsx,jsxs}from'react/jsx-runtime';var ae={mustache:mustache,whole:whole},le=t=>typeof t=="function"?t:ae[t];function A(t){let{env:o,service:l,segmenter:i="mustache",mode:s="expression",profile:c,limits:d,unused:p,format:a,optional:g}=t;return n.useMemo(()=>{if(l)return l;if(!o)return null;let x={env:o,...c?{profile:c}:{},...d?{limits:d}:{},...p!==void 0?{unused:p}:{},...a?{format:a}:{},...g?{optional:g}:{}};return s==="template"?createHostService({...x,mode:s}):createHostService({...x,segmenter:le(i),mode:s})},[l,o,i,s,c,d,p,a,g])}var Oe=EditorView.theme({".cm-scroller":{overflowX:"auto",overflowY:"hidden"},".cm-content":{padding:"6px 8px"},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),z=6,Le=EditorView.theme({".cm-scroller":{overflowY:"auto"},".cm-content":{padding:`${z}px 8px`},".cm-line":{padding:"0"},"&.cm-focused":{outline:"none"}}),Te=(t,o)=>`${o*t.defaultLineHeight+2*z}px`,we=EditorView.theme({"&":{height:"100%"},".cm-scroller":{overflowY:"auto"},".cm-content":{padding:"8px"},"&.cm-focused":{outline:"none"}}),$=t=>t.replace(/\r?\n/g," "),ke=(t,o)=>{if(t===false)return [];let l=o==="block"?{}:{tab:false,indentOnInput:false};return codeEditing(typeof t=="object"?{...l,...t}:l)},Ce=t=>t?gutters(typeof t=="object"?t:{}):[];function D(t){let{value:o,onChange:l,onCommit:i,layout:s="inline",maxLines:c,wrap:d=s!=="inline",editing:p,gutters:a,readOnly:g=false,placeholder:x,features:I,tooltipParent:T,onTokenAction:V,isTokenActionable:_,definition:w,extensions:ee}=t,h=A(t),k=n.useRef(null),v=n.useRef(null),[U,Y]=n.useState(null),[te,oe]=n.useState(false),R=n.useRef({value:o,onChange:l,onCommit:i,onTokenAction:V,isTokenActionable:_});R.current={value:o,onChange:l,onCommit:i,onTokenAction:V,isTokenActionable:_};let C=n.useCallback(e=>{let{value:r,onCommit:E}=R.current;if(!E)return;let f=e.state.doc.toString();f!==r&&E(f);},[]),u=n.useRef({service:new Compartment,layout:new Compartment,editable:new Compartment,actions:new Compartment}).current,H=n.useCallback(e=>e?languageService(e,{theme:tsliteTokenStyles,...T!==null?{tooltipParent:T??(typeof document<"u"?document.body:void 0)}:{},...I}):[],[I,T]),G=n.useCallback(e=>completionStatus(e.state)==="active"?acceptCompletion(e)||true:(C(e),true),[C]),P=n.useCallback((e,r,E,f)=>[e==="block"?[...r?[EditorView.lineWrapping]:[],we]:e==="grow"?[...r?[EditorView.lineWrapping]:[],Le,Prec.highest(keymap.of([{key:"Enter",run:G},{key:"Shift-Enter",run:insertNewlineAndIndent}]))]:[singleLine,Oe],ke(E,e),Ce(f)],[G]),M=n.useCallback(()=>{let e=[];return R.current.onTokenAction&&e.push(tokenAction({actionable:r=>R.current.isTokenActionable?.(r)??true,onAction:r=>R.current.onTokenAction?.(r)})),w&&h?.definitionAt&&e.push(gotoDefinition(w)),e},[w,h]);n.useEffect(()=>{if(!k.current)return;let e=new EditorView({parent:k.current,state:EditorState.create({doc:s==="inline"?$(o):o,extensions:[history(),u.service.of(H(h)),u.layout.of(P(s,d,p,a)),u.editable.of(EditorView.editable.of(!g)),u.actions.of(M()),...x?[placeholder(x)]:[],keymap.of([...historyKeymap,...defaultKeymap]),EditorView.updateListener.of(r=>{if(r.focusChanged&&oe(r.view.hasFocus),!r.docChanged)return;r.transactions.some(f=>f.annotation(externalChange))||R.current.onChange?.(r.state.doc.toString());}),EditorView.contentAttributes.of({"aria-label":x??"expression"}),EditorView.domEventHandlers({blur:(r,E)=>{let f=r.relatedTarget;return f instanceof Element&&(E.dom.contains(f)||f.closest(".cm-tooltip"))||C(E),false}}),...ee??[]]})});return v.current=e,Y(e),()=>{e.destroy(),v.current=null,Y(null);}},[]),n.useEffect(()=>{v.current?.dispatch({effects:u.service.reconfigure(H(h))});},[h,H,u]),n.useEffect(()=>{v.current?.dispatch({effects:u.layout.reconfigure(P(s,d,p,a))});},[s,d,p,a,P,u]),n.useEffect(()=>{v.current?.dispatch({effects:u.editable.reconfigure(EditorView.editable.of(!g))});},[g,u]),n.useEffect(()=>{let e=v.current;e&&(e.scrollDOM.style.maxHeight=s==="grow"&&c!==void 0&&c>0?Te(e,c):"");},[s,c,U]),n.useEffect(()=>{v.current?.dispatch({effects:u.actions.reconfigure(M())});},[M,u]),n.useEffect(()=>{let e=v.current;if(!e)return;let r=s==="inline"?$(o):o;if(r===e.state.doc.toString())return;let{anchor:E,head:f}=e.state.selection.main,N=re=>Math.min(re,r.length);e.dispatch({changes:{from:0,to:e.state.doc.length,insert:r},selection:{anchor:N(E),head:N(f)},annotations:externalChange.of(true)});},[o,s]);let ne=n.useCallback(()=>v.current?.focus(),[]);return {ref:k,view:U,focused:te,service:h,focus:ne}}var X=n.createContext(null);function q(){let t=n.useContext(X);if(!t)throw new Error("useFieldContext must be used inside <ExpressionField.Root>");return t}var He=["value","onChange","onCommit","layout","maxLines","wrap","editing","gutters","readOnly","placeholder","features","tooltipParent","onTokenAction","isTokenActionable","definition","extensions","env","service","segmenter","mode","profile","limits","unused","format","optional"];var J=n.forwardRef(function(o,l){let{children:i,...s}=o,c={},d={};for(let[a,g]of Object.entries(s))(He.includes(a)?c:d)[a]=g;let p=D(c);return jsx(X.Provider,{value:p,children:jsx("div",{ref:l,...d,children:typeof i=="function"?i(p):i})})}),Q=n.forwardRef(function(o,l){let i=q();return jsx("div",{ref:i.ref,...o})}),Z=n.forwardRef(function({children:o,...l},i){return jsx("button",{ref:i,type:"button",...l,children:o})}),S={Root:J,Editor:Q,ExpandTrigger:Z};var y={fg:"var(--foreground, #cccccc)",mutedFg:"var(--muted-foreground, #8b8b8b)",border:"var(--border, #2b2b2b)",ring:"var(--ring, #0078d4)",input:"var(--input, transparent)",destructive:"var(--destructive, #f14c4c)",font:"var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)"},Pe=["--foreground","--muted-foreground","--border","--ring","--input","--destructive","--font-mono","--muted","--popover","--popover-foreground","--primary","--primary-foreground","--secondary","--accent"];var Me=jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})});function Ae({invalid:t,className:o,style:l,onExpand:i,expandIcon:s,multiline:c,layout:d,...p}){let a=d??(c?"block":"inline");return jsx(S.Root,{...p,layout:a,className:o,children:g=>jsxs("div",{style:{position:"relative",border:`1px solid ${t?y.destructive:g.focused?y.ring:y.border}`,borderRadius:"6px",backgroundColor:y.input,color:y.fg,fontFamily:y.font,fontSize:"13px",overflow:"hidden",...a==="block"?{height:"100%",display:"flex",flexDirection:"column"}:{},...l},children:[jsx(S.Editor,{style:a==="block"?{flex:1,minHeight:0}:a==="grow"?{paddingRight:i?"28px":void 0}:{paddingRight:i?"24px":void 0}}),i&&jsx(S.ExpandTrigger,{onClick:i,"aria-label":"Expandir",title:"Expandir",onMouseEnter:x=>x.currentTarget.style.opacity="1",onMouseLeave:x=>x.currentTarget.style.opacity="0.55",style:{position:"absolute",top:a==="inline"?"50%":"6px",right:"4px",transform:a==="inline"?"translateY(-50%)":void 0,display:"flex",alignItems:"center",justifyContent:"center",width:"20px",height:"20px",padding:0,lineHeight:0,border:"none",borderRadius:"4px",background:y.input,color:y.mutedFg,cursor:"pointer",opacity:.55},children:s??Me})]})})}export{Pe as CSS_VARS,S as ExpressionField,Q as ExpressionFieldEditor,Z as ExpressionFieldExpandTrigger,J as ExpressionFieldRoot,Ae as ExpressionInput,y as V,D as useExpressionField,q as useFieldContext,A as useLanguageService};
@@ -66,6 +66,13 @@ interface LanguageServiceOptions {
66
66
  readonly unused?: HostServiceOptions["unused"];
67
67
  /** O formatador (`formatExpression` do `@tslite/format`). Sem ele, não formata. */
68
68
  readonly format?: HostServiceOptions["format"];
69
+ /**
70
+ * O campo aceita ficar vazio: o texto vazio, ou só com espaços, é a ausência do
71
+ * valor, e não o erro de "falta a expressão". Padrão: `false`. As sugestões no
72
+ * campo vazio continuam. Com `service`, a opção é de quem montou o serviço
73
+ * (`createHostService({ optional })`).
74
+ */
75
+ readonly optional?: HostServiceOptions["optional"];
69
76
  }
70
77
  /**
71
78
  * O `LanguageService` do campo. `null` quando não há `env` nem `service` — o
@@ -66,6 +66,13 @@ interface LanguageServiceOptions {
66
66
  readonly unused?: HostServiceOptions["unused"];
67
67
  /** O formatador (`formatExpression` do `@tslite/format`). Sem ele, não formata. */
68
68
  readonly format?: HostServiceOptions["format"];
69
+ /**
70
+ * O campo aceita ficar vazio: o texto vazio, ou só com espaços, é a ausência do
71
+ * valor, e não o erro de "falta a expressão". Padrão: `false`. As sugestões no
72
+ * campo vazio continuam. Com `service`, a opção é de quem montou o serviço
73
+ * (`createHostService({ optional })`).
74
+ */
75
+ readonly optional?: HostServiceOptions["optional"];
69
76
  }
70
77
  /**
71
78
  * O `LanguageService` do campo. `null` quando não há `env` nem `service` — o
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslite/react",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "React bindings for TSLite — a headless expression field (CodeMirror 6) with type-aware highlighting, completion, diagnostics and quick-fixes, driven by the TSLite checker.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -47,10 +47,10 @@
47
47
  "access": "public"
48
48
  },
49
49
  "dependencies": {
50
- "@tslite/codemirror": "1.0.0",
51
- "@tslite/editor": "1.0.0",
52
- "@tslite/format": "1.0.0",
53
- "@tslite/language-service": "1.0.0"
50
+ "@tslite/codemirror": "1.1.0",
51
+ "@tslite/editor": "1.2.0",
52
+ "@tslite/format": "1.1.1",
53
+ "@tslite/language-service": "1.1.0"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@codemirror/autocomplete": "^6.0.0",
@@ -59,7 +59,7 @@
59
59
  "@codemirror/lint": "^6.0.0",
60
60
  "@codemirror/search": "^6.0.0",
61
61
  "@codemirror/state": "^6.0.0",
62
- "@codemirror/view": "^6.0.0",
62
+ "@codemirror/view": "^6.37.0",
63
63
  "react": ">=18",
64
64
  "react-dom": ">=18"
65
65
  },
@@ -76,7 +76,7 @@
76
76
  "@types/react-dom": "^18.3.1",
77
77
  "react": "^18.3.1",
78
78
  "react-dom": "^18.3.1",
79
- "@tslite/checker": "1.0.0"
79
+ "@tslite/checker": "1.2.0"
80
80
  },
81
81
  "peerDependenciesMeta": {
82
82
  "@codemirror/search": {