xote 7.0.0 → 7.1.0-beta.1

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/src/View.res CHANGED
@@ -552,6 +552,12 @@ let fragment = (children: array<node>): node => Fragment(children)
552
552
 
553
553
  let signalFragment = (signal: Signal.t<array<node>>): node => SignalFragment(signal)
554
554
 
555
+ /* Auto-tracked reactive block: every signal read while `body` runs subscribes
556
+ the block, which re-evaluates `body` and replaces its children wholesale
557
+ (no diffing) whenever a dependency changes. Prefer `eachWithKey`/`For` for
558
+ lists and keep tracked blocks small. */
559
+ let tracked = (body: unit => node): node => SignalFragment(Computed.make(() => [body()]))
560
+
555
561
  let childrenToArray = (child: option<node>): array<node> => {
556
562
  switch child {
557
563
  | Some(Fragment(children)) => children
@@ -746,6 +752,69 @@ let renderValuePrimitiveProps = (props: 'props, stringify: 'scalar => string): n
746
752
  }
747
753
  }
748
754
 
755
+ /* Is this runtime value already a `node`? Nodes are ReScript variants compiled
756
+ to objects carrying a string `TAG` in the set below; Signals, Props, scalars
757
+ and functions are not, so a value already built into a node passes straight
758
+ through `child`. */
759
+ let isNode: 'a => bool = %raw(`function (v) {
760
+ if (v === null || typeof v !== "object" || typeof v.TAG !== "string") { return false }
761
+ switch (v.TAG) {
762
+ case "Element":
763
+ case "Text":
764
+ case "SignalText":
765
+ case "Fragment":
766
+ case "SignalFragment":
767
+ case "Keyed":
768
+ case "LazyComponent":
769
+ case "KeyedList":
770
+ return true
771
+ default:
772
+ return false
773
+ }
774
+ }`)
775
+
776
+ /* Stringify any scalar child (int/float/string/bool) without knowing its type
777
+ at compile time; null/undefined render as empty. */
778
+ let stringifyChild: 'a => string = %raw(`function (v) { return v == null ? "" : String(v) }`)
779
+
780
+ /* Coerce an arbitrary JSX child into a node. This is what `@xote.component`
781
+ emits for a *bare* child in element position — `<div>{Signal.get(count)}</div>`
782
+ — so a value primitive (`<View.Int>`) is no longer required:
783
+
784
+ - an already-built node passes through untouched;
785
+ - a reactive thunk (what the ppx emits for an eager signal read) re-runs on
786
+ change — a scalar result becomes reactive text, a node result a tracked
787
+ fragment;
788
+ - a bare `Signal.t` becomes reactive text; a plain scalar, static text;
789
+ - null/undefined render nothing.
790
+
791
+ The explicit `View.Text`/`Int`/`Float`/`Bool` value primitives still work for
792
+ non-ppx code and for stronger typing; this is the ergonomic default under the
793
+ annotation. */
794
+ let child = (value: 'a): node => {
795
+ if isNode(value) {
796
+ (Obj.magic(value): node)
797
+ } else {
798
+ switch value->Core.Type.Classify.classify {
799
+ | Function(_) => {
800
+ let compute: unit => 'b = Obj.magic(value)
801
+ let signal = Computed.make(compute)
802
+ if isNode(Signal.peek(signal)) {
803
+ SignalFragment(Computed.make(() => [(Obj.magic(Signal.get(signal)): node)]))
804
+ } else {
805
+ SignalText(Computed.make(() => stringifyChild(Signal.get(signal))))
806
+ }
807
+ }
808
+ | Object(_) => {
809
+ let signal: Signal.t<'b> = Obj.magic(value)
810
+ SignalText(Computed.make(() => stringifyChild(Signal.get(signal))))
811
+ }
812
+ | Null | Undefined => null()
813
+ | _ => text(stringifyChild(value))
814
+ }
815
+ }
816
+ }
817
+
749
818
  module Text = {
750
819
  type props<'value, 'children> = {
751
820
  value?: 'value,
package/src/View.res.mjs CHANGED
@@ -534,6 +534,13 @@ function signalFragment(signal) {
534
534
  };
535
535
  }
536
536
 
537
+ function tracked(body) {
538
+ return {
539
+ TAG: "SignalFragment",
540
+ _0: Computed$Xote.make(() => [body()], undefined, undefined)
541
+ };
542
+ }
543
+
537
544
  function childrenToArray(child) {
538
545
  if (child !== undefined) {
539
546
  if (child.TAG === "Fragment") {
@@ -791,6 +798,63 @@ function renderValuePrimitiveProps(props, stringify) {
791
798
  }
792
799
  }
793
800
 
801
+ let isNode = (function (v) {
802
+ if (v === null || typeof v !== "object" || typeof v.TAG !== "string") { return false }
803
+ switch (v.TAG) {
804
+ case "Element":
805
+ case "Text":
806
+ case "SignalText":
807
+ case "Fragment":
808
+ case "SignalFragment":
809
+ case "Keyed":
810
+ case "LazyComponent":
811
+ case "KeyedList":
812
+ return true
813
+ default:
814
+ return false
815
+ }
816
+ });
817
+
818
+ let stringifyChild = (function (v) { return v == null ? "" : String(v) });
819
+
820
+ function child(value) {
821
+ if (isNode(value)) {
822
+ return value;
823
+ }
824
+ let match = Core__Type.Classify.classify(value);
825
+ if (typeof match !== "object") {
826
+ return {
827
+ TAG: "Text",
828
+ _0: ""
829
+ };
830
+ }
831
+ switch (match.TAG) {
832
+ case "Object" :
833
+ return {
834
+ TAG: "SignalText",
835
+ _0: Computed$Xote.make(() => stringifyChild(Signal$Xote.get(value)), undefined, undefined)
836
+ };
837
+ case "Function" :
838
+ let signal = Computed$Xote.make(value, undefined, undefined);
839
+ if (isNode(Signal$Xote.peek(signal))) {
840
+ return {
841
+ TAG: "SignalFragment",
842
+ _0: Computed$Xote.make(() => [Signal$Xote.get(signal)], undefined, undefined)
843
+ };
844
+ } else {
845
+ return {
846
+ TAG: "SignalText",
847
+ _0: Computed$Xote.make(() => stringifyChild(Signal$Xote.get(signal)), undefined, undefined)
848
+ };
849
+ }
850
+ default:
851
+ return {
852
+ TAG: "Text",
853
+ _0: stringifyChild(value)
854
+ };
855
+ }
856
+ }
857
+
794
858
  function make$5(props) {
795
859
  return renderValuePrimitiveProps(props, value => value);
796
860
  }
@@ -867,6 +931,7 @@ export {
867
931
  bool,
868
932
  fragment,
869
933
  signalFragment,
934
+ tracked,
870
935
  childrenToArray,
871
936
  each,
872
937
  eachWithKey,
@@ -883,6 +948,9 @@ export {
883
948
  isReactiveProp,
884
949
  valuePrimitive,
885
950
  renderValuePrimitiveProps,
951
+ isNode,
952
+ stringifyChild,
953
+ child,
886
954
  Text,
887
955
  Int,
888
956
  Float,
@@ -1 +0,0 @@
1
- const e=require("./RuntimeAttr.res-Cr5Qmz0i.js");function t(e){switch(Object.prototype.toString.call(e)){case`[object BigInt]`:return{TAG:`BigInt`,_0:e};case`[object Boolean]`:return{TAG:`Bool`,_0:e};case`[object AsyncFunction]`:case`[object Function]`:case`[object GeneratorFunction]`:return{TAG:`Function`,_0:e};case`[object Null]`:return`Null`;case`[object Number]`:return{TAG:`Number`,_0:e};case`[object String]`:return{TAG:`String`,_0:e};case`[object Symbol]`:return{TAG:`Symbol`,_0:e};case`[object Undefined]`:return`Undefined`;default:return{TAG:`Object`,_0:e}}}var n={classify:t};function r(t,n){let r=t.length,i=Array(r),a=0;for(let o=0;o<r;++o){let r=t[o],s=n(r);s!==void 0&&(i[a]=e.E(s),a=a+1|0)}return i.length=a,i}function i(t,n){let r=e.C(),i={contents:void 0},a=e.S(r,`Effect`,()=>{let e=i.contents;e!==void 0&&e(),i.contents=t()},n,void 0),o=e.h.contents;e.h.contents=a;try{a.run(),e._(a),e.h.contents=o}catch(t){throw e.h.contents=o,t}a.level=e.p(a);let s={contents:!1};return{dispose:()=>{if(s.contents)return;s.contents=!0;let t=i.contents;t!==void 0&&t(),e.g(a)}}}function a(e,t){i(e,t)}var o=e.D({run:()=>c,runWithDisposer:()=>s}),s=i,c=a;function l(t,n){let r=e.C(),i=(e,t)=>!1,a={contents:void 0},o=e.x(()=>{let e=a.contents;e.value=t(),e.subs.version=e.subs.version+1|0},!1),s=e.m.contents;e.m.contents=o;let c=t();e.m.contents=s;let l={id:r,value:c,equals:i,name:n,subs:o};return a.contents=l,o.lastGlobalVersion=e.b.contents,e.y(o),l}function u(t,n,r){let i=e.C(),a={contents:void 0},o=e.x(()=>{let e=a.contents,n=e.value,r=t(),i;try{i=!e.equals(n,r)}catch{i=!0}if(i){e.value=r,e.subs.version=e.subs.version+1|0;return}},!0),s=e.m.contents;e.m.contents=o;let c=t();e.m.contents=s;let l={id:i,value:c,equals:n,name:r,subs:o};return a.contents=l,o.lastGlobalVersion=e.b.contents,e.y(o),l}function d(e,t,n){return n===void 0?l(e,t):u(e,n,t)}function f(t){e.v(t.subs)}var p=e.D({dispose:()=>_,make:()=>g,makeWithEquals:()=>h,makeWithoutEquals:()=>m}),m=l,h=u,g=d,_=f,v=`http://www.w3.org/2000/svg`,y=`svg.path.circle.ellipse.line.polygon.polyline.rect.g.defs.clipPath.mask.pattern.marker.symbol.use.text.tspan.image.foreignObject.linearGradient.radialGradient.stop.filter.feBlend.feColorMatrix.feComposite.feFlood.feGaussianBlur.feMerge.feMergeNode.feOffset.animate.animateTransform.desc.title.metadata`.split(`.`),b={};y.forEach(e=>{b[e]=!0});function x(e){return Array.from(e.childNodes)}function ee(t){return e.a(b[t])?document.createElementNS(v,t):document.createElement(t)}function S(t,n,r){switch(n){case`checked`:t.checked=r===`true`;return;case`disabled`:t.disabled=r===`true`;return;case`value`:t.value=r;return;default:e.n(n)?e.r(r)?t.setAttribute(n,``):t.removeAttribute(n):t.setAttribute(n,r);return}}var C={contents:void 0};function w(){return{disposers:[],computeds:[]}}function T(e,t){let n=C.contents;C.contents=e;let r=t();return C.contents=n,r}function E(e,t){e.disposers.push(t)}function D(e){e.disposers.forEach(e=>e.dispose()),e.computeds.forEach(_)}function O(e,t){e.__xote_owner__=t}function k(t){return e.w(t.__xote_owner__)}function A(t,n){let r=t.TAG;return r===void 0?!1:e.E(r)===n}function j(e){let t=n.classify(e);if(typeof t!=`object`||t.TAG!==`Object`)return!1;let r=t._0;return Object.prototype.hasOwnProperty.call(r,`TAG`)?A(r,`Static`)?!0:A(r,`Reactive`):!1}function M(e){let t=n.classify(e);return typeof t==`object`?t.TAG===`Function`:!1}function te(e){let t=n.classify(e);return typeof t==`object`?t.TAG===`Object`:!1}function N(e,t){return e[t]}var ne=e.D({$$null:()=>Se,Attr:()=>ie,Attributes:()=>re,Bool:()=>Me,Core:()=>Fe,DOM:()=>Ne,Float:()=>Ae,For:()=>fe,Int:()=>Oe,KeyedFor:()=>me,Maybe:()=>ve,Reactivity:()=>Pe,Render:()=>U,Show:()=>ge,Text:()=>Ee,Value:()=>be,attr:()=>Ie,bool:()=>le,childrenToArray:()=>J,computedAttr:()=>Re,each:()=>Y,eachWithKey:()=>ue,element:()=>xe,empty:()=>ze,float:()=>ce,fragment:()=>K,int:()=>se,isReactiveProp:()=>Be,mount:()=>Ce,mountById:()=>we,renderValuePrimitiveProps:()=>Q,signalAttr:()=>Le,signalFloat:()=>oe,signalFragment:()=>q,signalInt:()=>ae,signalText:()=>G,text:()=>W,valuePrimitive:()=>Z});function P(e,t){return[e,{TAG:`Static`,_0:t}]}function F(e,t){return[e,{TAG:`SignalValue`,_0:t}]}function I(e,t){return[e,{TAG:`Compute`,_0:t}]}var re={$$static:P,signal:F,computed:I},ie={string:P,signal:F,compute:I};function L(e){let t=k(e);t!==void 0&&D(t),x(e).forEach(L)}function R(t,r){if(t===r)return!0;let i=n.classify(t),a=n.classify(r);if(typeof i!=`object`||i.TAG!==`Object`||typeof a!=`object`||a.TAG!==`Object`)return!1;let o=a._0,s=i._0,c=Object.keys(s),l=Object.keys(o);return c.length===l.length?c.every(t=>{let n=s[t],r=o[t];return n!==void 0&&r!==void 0?e.E(n)===e.E(r):!1}):!1}function z(t){Object.keys(t).forEach(n=>{e.s(t,n)})}function B(e){if(e.length===0)return;let t=r(e,e=>{if(e.TAG===`Keyed`)return{key:e.key,identity:e.identity,child:e.child}});if(t.length===e.length)return t}function V(t,n,r){let i={};t.forEach(e=>{i[e.key]=e});let a=[];Object.keys(n).forEach(e=>{i[e]===void 0&&a.push(e)}),a.forEach(t=>{let r=n[t];if(r!==void 0){L(r.element),r.element.remove(),e.s(n,t);return}});let o=[],s={};t.forEach(e=>{let t=n[e.key];if(t!==void 0){if(R(t.item,e.identity)){o.push(t);return}let r=H(e.child),i={key:e.key,item:e.identity,element:r};s[e.key]=t.element,o.push(i),n[e.key]=i;return}let r=H(e.child),i={key:e.key,item:e.identity,element:r};o.push(i),n[e.key]=i});let c=r.firstChild,l={contents:c==null?void 0:e.T(c)};o.forEach(t=>{let n=l.contents;if(n!==void 0){let i=e.E(n);if(i===t.element){l.contents=e.w(i.nextSibling);return}let a=s[t.key];if(a!==void 0){let n=e.E(a);if(i===n){L(n),r.replaceChild(t.element,n),l.contents=e.w(t.element.nextSibling);return}}r.insertBefore(t.element,i),l.contents=e.w(t.element.nextSibling);return}let i=s[t.key];if(i!==void 0){let n=e.E(i);L(n),n.remove(),r.appendChild(t.element);return}r.appendChild(t.element)})}function H(t){for(;;){let n=t;switch(n.TAG){case`Element`:let r=n.children,i=n.events,a=n.attrs,o=n.tag,c=ee(o),l=w();return O(c,l),T(l,()=>{let t=e=>o===`select`?e[0]===`value`:!1,n=t=>{let n=t[1],r=t[0];switch(n.TAG){case`Static`:return S(c,r,n._0);case`SignalValue`:let t=n._0;return S(c,r,e.d(t)),E(l,s(()=>{S(c,r,e.l(t))},void 0));case`Compute`:let i=n._0;return E(l,s(()=>{S(c,r,i())},void 0))}};a.forEach(e=>{if(!t(e))return n(e)}),i.forEach(e=>{c.addEventListener(e[0],e[1])}),r.forEach(e=>{let t=H(e);c.appendChild(t)}),a.forEach(e=>{if(t(e))return n(e)})}),c;case`Text`:return document.createTextNode(n._0);case`SignalText`:let u=n._0,d=document.createTextNode(e.d(u)),f=w();return O(d,f),T(f,()=>{E(f,s(()=>{d.textContent=e.l(u)},void 0))}),d;case`Fragment`:let p=document.createDocumentFragment();return n._0.forEach(e=>{let t=H(e);p.appendChild(t)}),p;case`SignalFragment`:let m=n._0,h=w(),g=document.createElement(`div`);g.setAttribute(`style`,`display: contents`),O(g,h);let _={};return T(h,()=>{E(h,s(()=>{let t=e.l(m),n=B(t);n===void 0?(z(_),x(g).forEach(L),g.innerHTML=``,t.forEach(e=>{let t=H(e);g.appendChild(t)})):V(n,_,g)},void 0))}),g;case`Keyed`:t=n.child;continue;case`LazyComponent`:let v=w(),y=H(T(v,n._0));return O(y,v),y;case`KeyedList`:let b=n.renderItem,C=n.keyFn,D=n.signal,k=w(),A=document.createComment(` keyed-list-start `),j=document.createComment(` keyed-list-end `);O(A,k);let M={},te=()=>{let t=j.parentNode;if(t==null)return;let n=e.l(D),r={};n.forEach(e=>{r[C(e)]=e});let i=[];Object.keys(M).forEach(e=>{r[e]===void 0&&i.push(e)}),i.forEach(t=>{let n=M[t];if(n!==void 0){L(n.element),n.element.remove(),e.s(M,t);return}});let a=[],o={};n.forEach(e=>{let t=C(e),n=M[t];if(n!==void 0){if(n.item!==e){o[t]=!0;let n={key:t,item:e,element:H(b(e))};a.push(n),M[t]=n;return}a.push(n);return}let r={key:t,item:e,element:H(b(e))};a.push(r),M[t]=r});let s={contents:A.nextSibling};a.forEach(n=>{let r=s.contents;if(r==null){t.insertBefore(n.element,j);return}if(r===j){t.insertBefore(n.element,j);return}if(r===n.element){s.contents=r.nextSibling;return}e.i(o[n.key],!1)?(L(r),t.replaceChild(n.element,r),s.contents=n.element.nextSibling):(t.insertBefore(n.element,r),s.contents=n.element.nextSibling)})},N=document.createDocumentFragment();return N.appendChild(A),e.d(D).forEach(e=>{let t=C(e),n=H(b(e));M[t]={key:t,item:e,element:n},N.appendChild(n)}),N.appendChild(j),T(k,()=>{E(k,s(()=>{te()},void 0))}),N}}}var U={disposeElement:L,shallowEqualIdentity:R,clearKeyedItems:z,getKeyedChildren:B,reconcileKeyedChildren:V,render:H};function W(e){return{TAG:`Text`,_0:e}}function G(e){return{TAG:`SignalText`,_0:g(e,void 0,void 0)}}function ae(e){return{TAG:`SignalText`,_0:g(()=>e().toString(),void 0,void 0)}}function oe(e){return{TAG:`SignalText`,_0:g(()=>e().toString(),void 0,void 0)}}function se(e){return{TAG:`Text`,_0:e.toString()}}function ce(e){return{TAG:`Text`,_0:e.toString()}}function le(e){return{TAG:`Text`,_0:e?`true`:`false`}}function K(e){return{TAG:`Fragment`,_0:e}}function q(e){return{TAG:`SignalFragment`,_0:e}}function J(e){return e===void 0?[]:e.TAG===`Fragment`?e._0:[e]}function Y(t,n){return{TAG:`SignalFragment`,_0:g(()=>e.l(t).map(n),void 0,void 0)}}function ue(e,t,n){return{TAG:`KeyedList`,signal:e,keyFn:t,renderItem:n}}function de(e){let t=e.each,n=e.by;if(t.TAG===`Reactive`){let r=t._0;return n===void 0?Y(r,e.render):{TAG:`KeyedList`,signal:r,keyFn:n,renderItem:e.render}}let r=t._0;return n===void 0?{TAG:`Fragment`,_0:r.map(e.render)}:{TAG:`Fragment`,_0:r.map(t=>({TAG:`Keyed`,key:n(t),identity:t,child:e.render(t)}))}}var fe={make:de};function pe(e){let t=e.each;return t.TAG===`Reactive`?{TAG:`KeyedList`,signal:t._0,keyFn:e.by,renderItem:e.render}:{TAG:`Fragment`,_0:t._0.map(t=>({TAG:`Keyed`,key:e.by(t),identity:t,child:e.render(t)}))}}var me={make:pe};function he(t){let n=t.when_;if(n.TAG!==`Reactive`)return n._0?{TAG:`Fragment`,_0:J(t.children)}:{TAG:`Fragment`,_0:J(t.fallback)};let r=n._0;return{TAG:`SignalFragment`,_0:g(()=>e.l(r)?J(t.children):J(t.fallback),void 0,void 0)}}var ge={make:he};function X(t,n){return n===void 0?J(t.fallback):[t.render(e.E(n))]}function _e(t){let n=t.value;if(n.TAG!==`Reactive`)return{TAG:`Fragment`,_0:X(t,n._0)};let r=n._0;return{TAG:`SignalFragment`,_0:g(()=>X(t,e.l(r)),void 0,void 0)}}var ve={renderValue:X,make:_e};function ye(t){let n=t.value;if(n.TAG!==`Reactive`)return t.render(n._0);let r=n._0;return{TAG:`SignalFragment`,_0:g(()=>[t.render(e.l(r))],void 0,void 0)}}var be={make:ye};function xe(e,t,n,r,i){return{TAG:`Element`,tag:e,attrs:t===void 0?[]:t,events:n===void 0?[]:n,children:r===void 0?[]:r}}function Se(){return{TAG:`Text`,_0:``}}function Ce(e,t){let n=H(e);t.appendChild(n)}function we(e,t){let n=document.getElementById(t);if(n==null){console.error(`Container element not found: `+t);return}else return Ce(e,n)}function Z(t,r){if(j(t)){if(t.TAG!==`Reactive`)return{TAG:`Text`,_0:r(t._0)};let n=t._0;return{TAG:`SignalText`,_0:g(()=>r(e.l(n)),void 0,void 0)}}let i=n.classify(t);if(typeof i!=`object`)return{TAG:`Text`,_0:``};switch(i.TAG){case`Object`:return{TAG:`SignalText`,_0:g(()=>r(e.l(t)),void 0,void 0)};case`Function`:return G(()=>r(t()));default:return{TAG:`Text`,_0:r(t)}}}function Q(t,n){let r=N(t,`children`),i=N(t,`value`);return r===void 0?i===void 0?{TAG:`Text`,_0:``}:Z(e.E(i),n):Z(e.E(r),n)}function Te(e){return Q(e,e=>e)}var Ee={make:Te};function De(e){return Q(e,e=>e.toString())}var Oe={make:De};function ke(e){return Q(e,e=>e.toString())}var Ae={make:ke};function $(e){return e?`true`:`false`}function je(e){return Q(e,$)}var Me={toString:$,make:je},Ne,Pe,Fe,Ie=P,Le=F,Re=I,ze=Se,Be=j;Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return S}});