atom.io 0.6.9 → 0.7.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/README.md +21 -2
- package/dist/index.d.mts +34 -421
- package/dist/index.d.ts +34 -421
- package/dist/index.js +248 -23
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +209 -4
- package/dist/index.mjs.map +1 -1
- package/internal/dist/index.d.mts +342 -0
- package/internal/dist/index.d.ts +342 -0
- package/internal/dist/index.js +1873 -0
- package/internal/dist/index.js.map +1 -0
- package/internal/dist/index.mjs +1798 -0
- package/internal/dist/index.mjs.map +1 -0
- package/internal/package.json +15 -0
- package/internal/src/atom/create-atom.ts +75 -0
- package/internal/src/atom/delete-atom.ts +10 -0
- package/internal/src/atom/index.ts +3 -0
- package/internal/src/atom/is-default.ts +37 -0
- package/internal/src/caching.ts +21 -0
- package/internal/src/families/create-atom-family.ts +59 -0
- package/internal/src/families/create-readonly-selector-family.ts +45 -0
- package/internal/src/families/create-selector-family.ts +67 -0
- package/internal/src/families/index.ts +3 -0
- package/internal/src/get-state-internal.ts +23 -0
- package/internal/src/index.ts +13 -0
- package/internal/src/mutable/create-mutable-atom-family.ts +25 -0
- package/internal/src/mutable/create-mutable-atom.ts +49 -0
- package/internal/src/mutable/get-json-token.ts +22 -0
- package/internal/src/mutable/get-update-token.ts +20 -0
- package/internal/src/mutable/index.ts +17 -0
- package/internal/src/mutable/is-atom-token-mutable.ts +7 -0
- package/internal/src/mutable/tracker-family.ts +61 -0
- package/internal/src/mutable/tracker.ts +164 -0
- package/internal/src/mutable/transceiver.ts +110 -0
- package/internal/src/operation.ts +68 -0
- package/internal/src/selector/create-read-write-selector.ts +65 -0
- package/internal/src/selector/create-readonly-selector.ts +49 -0
- package/internal/src/selector/create-selector.ts +65 -0
- package/internal/src/selector/index.ts +5 -0
- package/internal/src/selector/lookup-selector-sources.ts +20 -0
- package/internal/src/selector/register-selector.ts +61 -0
- package/internal/src/selector/trace-selector-atoms.ts +45 -0
- package/internal/src/selector/update-selector-atoms.ts +34 -0
- package/internal/src/set-state/become.ts +10 -0
- package/internal/src/set-state/copy-mutable-if-needed.ts +23 -0
- package/internal/src/set-state/copy-mutable-in-transaction.ts +59 -0
- package/internal/src/set-state/copy-mutable-into-new-store.ts +34 -0
- package/internal/src/set-state/emit-update.ts +23 -0
- package/internal/src/set-state/evict-downstream.ts +39 -0
- package/internal/src/set-state/index.ts +2 -0
- package/internal/src/set-state/set-atom-state.ts +38 -0
- package/internal/src/set-state/set-selector-state.ts +19 -0
- package/internal/src/set-state/set-state-internal.ts +18 -0
- package/internal/src/set-state/stow-update.ts +42 -0
- package/internal/src/store/deposit.ts +43 -0
- package/internal/src/store/index.ts +5 -0
- package/internal/src/store/lookup.ts +26 -0
- package/internal/src/store/store.ts +154 -0
- package/internal/src/store/withdraw-new-family-member.ts +53 -0
- package/internal/src/store/withdraw.ts +113 -0
- package/internal/src/subject.ts +21 -0
- package/internal/src/subscribe/index.ts +1 -0
- package/internal/src/subscribe/recall-state.ts +19 -0
- package/internal/src/subscribe/subscribe-to-root-atoms.ts +47 -0
- package/internal/src/timeline/add-atom-to-timeline.ts +189 -0
- package/internal/src/timeline/index.ts +3 -0
- package/internal/src/timeline/time-travel-internal.ts +91 -0
- package/internal/src/timeline/timeline-internal.ts +115 -0
- package/internal/src/transaction/abort-transaction.ts +12 -0
- package/internal/src/transaction/apply-transaction.ts +64 -0
- package/internal/src/transaction/build-transaction.ts +39 -0
- package/internal/src/transaction/index.ts +26 -0
- package/internal/src/transaction/redo-transaction.ts +22 -0
- package/internal/src/transaction/transaction-internal.ts +64 -0
- package/internal/src/transaction/undo-transaction.ts +22 -0
- package/introspection/dist/index.d.mts +3 -197
- package/introspection/dist/index.d.ts +3 -197
- package/introspection/dist/index.js +329 -4
- package/introspection/dist/index.js.map +1 -1
- package/introspection/dist/index.mjs +310 -4
- package/introspection/dist/index.mjs.map +1 -1
- package/introspection/src/attach-atom-index.ts +84 -0
- package/introspection/src/attach-introspection-states.ts +38 -0
- package/introspection/src/attach-selector-index.ts +90 -0
- package/introspection/src/attach-timeline-family.ts +59 -0
- package/introspection/src/attach-timeline-index.ts +38 -0
- package/introspection/src/attach-transaction-index.ts +40 -0
- package/introspection/src/attach-transaction-logs.ts +43 -0
- package/introspection/src/index.ts +20 -0
- package/json/dist/index.d.mts +10 -2
- package/json/dist/index.d.ts +10 -2
- package/json/dist/index.js +83 -26
- package/json/dist/index.js.map +1 -1
- package/json/dist/index.mjs +74 -3
- package/json/dist/index.mjs.map +1 -1
- package/json/src/index.ts +5 -0
- package/json/src/select-json-family.ts +35 -0
- package/json/src/select-json.ts +22 -0
- package/package.json +103 -63
- package/react/dist/index.d.mts +9 -17
- package/react/dist/index.d.ts +9 -17
- package/react/dist/index.js +44 -27
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +24 -4
- package/react/dist/index.mjs.map +1 -1
- package/react/src/index.ts +2 -0
- package/react/src/store-context.tsx +12 -0
- package/react/src/store-hooks.ts +36 -0
- package/react-devtools/dist/index.css +50 -1
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.mts +104 -71
- package/react-devtools/dist/index.d.ts +104 -71
- package/react-devtools/dist/index.js +2806 -44
- package/react-devtools/dist/index.js.map +1 -1
- package/react-devtools/dist/index.mjs +2775 -10
- package/react-devtools/dist/index.mjs.map +1 -1
- package/react-devtools/src/AtomIODevtools.tsx +109 -0
- package/react-devtools/src/Button.tsx +23 -0
- package/react-devtools/src/StateEditor.tsx +75 -0
- package/react-devtools/src/StateIndex.tsx +159 -0
- package/react-devtools/src/TimelineIndex.tsx +88 -0
- package/react-devtools/src/TransactionIndex.tsx +70 -0
- package/react-devtools/src/Updates.tsx +150 -0
- package/react-devtools/src/devtools.scss +310 -0
- package/react-devtools/src/index.ts +72 -0
- package/realtime-react/dist/index.d.mts +8 -22
- package/realtime-react/dist/index.d.ts +8 -22
- package/realtime-react/dist/index.js +87 -32
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/dist/index.mjs +62 -6
- package/realtime-react/dist/index.mjs.map +1 -1
- package/realtime-react/src/index.ts +7 -0
- package/realtime-react/src/realtime-context.tsx +29 -0
- package/realtime-react/src/use-pull-family-member.ts +15 -0
- package/realtime-react/src/use-pull-mutable-family-member.ts +20 -0
- package/realtime-react/src/use-pull-mutable.ts +17 -0
- package/realtime-react/src/use-pull.ts +15 -0
- package/realtime-react/src/use-push.ts +19 -0
- package/realtime-react/src/use-server-action.ts +18 -0
- package/realtime-testing/dist/index.d.mts +49 -0
- package/realtime-testing/dist/index.d.ts +49 -0
- package/realtime-testing/dist/index.js +147 -0
- package/realtime-testing/dist/index.js.map +1 -0
- package/realtime-testing/dist/index.mjs +116 -0
- package/realtime-testing/dist/index.mjs.map +1 -0
- package/realtime-testing/src/index.ts +1 -0
- package/realtime-testing/src/setup-realtime-test.tsx +161 -0
- package/src/atom.ts +64 -9
- package/src/index.ts +36 -32
- package/src/logger.ts +3 -3
- package/src/selector.ts +3 -3
- package/src/silo.ts +29 -20
- package/src/subscribe.ts +3 -3
- package/src/timeline.ts +2 -2
- package/transceivers/set-rtx/dist/index.d.mts +39 -0
- package/transceivers/set-rtx/dist/index.d.ts +39 -0
- package/transceivers/set-rtx/dist/index.js +213 -0
- package/transceivers/set-rtx/dist/index.js.map +1 -0
- package/transceivers/set-rtx/dist/index.mjs +211 -0
- package/transceivers/set-rtx/dist/index.mjs.map +1 -0
- package/{realtime → transceivers/set-rtx}/package.json +1 -1
- package/transceivers/set-rtx/src/index.ts +1 -0
- package/transceivers/set-rtx/src/set-rtx.ts +242 -0
- package/realtime/dist/index.d.mts +0 -23
- package/realtime/dist/index.d.ts +0 -23
- package/realtime/dist/index.js +0 -32
- package/realtime/dist/index.js.map +0 -1
- package/realtime/dist/index.mjs +0 -7
- package/realtime/dist/index.mjs.map +0 -1
|
@@ -3,55 +3,2817 @@
|
|
|
3
3
|
var atom_io = require('atom.io');
|
|
4
4
|
var introspection = require('atom.io/introspection');
|
|
5
5
|
var webEffects = require('atom.io/web-effects');
|
|
6
|
-
var _function = require('fp-ts/function');
|
|
7
6
|
var react = require('atom.io/react');
|
|
8
7
|
var framerMotion = require('framer-motion');
|
|
9
|
-
var
|
|
10
|
-
var boolean = require('fp-ts/boolean');
|
|
11
|
-
var number = require('fp-ts/number');
|
|
12
|
-
var string = require('fp-ts/string');
|
|
8
|
+
var React = require('react');
|
|
13
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
|
-
var Rs = require('ajv');
|
|
15
10
|
var react$1 = require('@floating-ui/react');
|
|
16
11
|
|
|
17
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
-
|
|
19
12
|
function _interopNamespace(e) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var br=Object.defineProperty,xr=Object.defineProperties;var gr=Object.getOwnPropertyDescriptors;var Je=Object.getOwnPropertySymbols;var Lt=Object.prototype.hasOwnProperty,_t=Object.prototype.propertyIsEnumerable;var jt=(e,t,n)=>t in e?br(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,c=(e,t)=>{for(var n in t||(t={}))Lt.call(t,n)&&jt(e,n,t[n]);if(Je)for(var n of Je(t))_t.call(t,n)&&jt(e,n,t[n]);return e},u=(e,t)=>xr(e,gr(t));var Pt=e=>typeof e=="symbol"?e:e+"",ve=(e,t)=>{var n={};for(var o in e)Lt.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&Je)for(var o of Je(e))t.indexOf(o)<0&&_t.call(e,o)&&(n[o]=e[o]);return n};var Bt=e=>t=>{for(let n of e)if(!t.includes(n))return !1;return !0};var Ft=e=>t=>Bt(e)(t)&&Bt(t)(e);var w=e=>t=>Array.isArray(t)&&t.every(n=>e(n));var Te=e=>t=>t.map(e);var Xe=(e=Boolean)=>t=>t.every(e),Mt=Xe(e=>e===!0),Ie=e=>t=>e.includes(t)?e:[...e,t],Se=e=>Array.isArray(e)&&e.length===0,Dt=(...e)=>t=>e.includes(t);var Ge=e=>e===void 0,f=e=>t=>Ge(t)||e(t);var Kt=e=>t=>t!=null?t:e;var se=()=>{},ie=e=>t=>e instanceof Function?e(t instanceof Function?t():t):e,Wt=e=>t=>{if(!e(t))throw new Error(`Invalid test case: JSON.stringify(${t})`);return o=>{if(typeof o!="function")return !1;let r=o(t);return e(r)}},Ht=(...e)=>t=>t(...e);var $t=e=>{throw new Error(e)};var Vt=(e,t)=>{try{return e()}catch(n){return t}};var Ut=e=>Object.assign(t=>t[e],{in:t=>t[e]});var z=e=>Object.entries(e),Oe=e=>Object.fromEntries(e);var ae=(e,t)=>_function.pipe(e,z,Te(([n,o])=>[n,t(o,n)]),Oe),zt=e=>t=>ae(t,e);var Tr=e=>typeof e=="object"&&e!==null,v=e=>Tr(e)&&Object.getPrototypeOf(e)===Object.prototype,Yt=e=>v(e)&&Object.keys(e).length===0,pe=(e,t)=>n=>v(n)&&Object.entries(n).every(([o,r])=>e(o)&&t(r)),qt=(e,t={allowExtraProperties:!1})=>{let n=`{${z(e).map(([r,s])=>String(r)+":"+s.name).join(",")}}`;return {[n]:r=>v(r)&&_function.pipe(e,Object.entries,Xe(([s,i])=>s in r||i(void 0)))&&_function.pipe(r,zt((s,i)=>_function.pipe(e,Ut(i),Kt(()=>t.allowExtraProperties),Ht(s))),Object.values,Mt)}[n]},T=e=>qt(e,{allowExtraProperties:!0}),Qe=e=>qt(e,{allowExtraProperties:!1});var et=(e,t)=>{let n=(o,r)=>{let i=((p,l)=>{let m=t(p,l);return m||null})(o,r);if(i!=null&&i.jobComplete||i!=null&&i.pathComplete)return i;let a=Array.isArray(r)?r.map((p,l)=>[l,p]):v(r)?Object.entries(r):[];for(let[p,l]of a){let m=n([...o,p],l);if(m!=null&&m.jobComplete)return m}return {}};n([],e);};var Y=(e=Ge)=>t=>{let n={};return Object.entries(t).forEach(([r,s])=>e(s,r)?null:n[r]=s),n};var Xt=(e,t)=>{let n=t.reduce((o,r)=>o==null?void 0:o[r],e);return n===void 0?new Error("Not found"):{found:n}};var le=class{constructor(t){this.supported=t;}refine(t){for(let[n,o]of Object.entries(this.supported))try{if(o(t)===!0&&o!==Boolean)return {type:n,data:t}}catch(r){try{if(t instanceof o)return {type:n,data:t}}catch(s){}}return null}},Sr=new le({number:e=>typeof e=="number",string:e=>typeof e=="string",boolean:e=>typeof e=="boolean",object:v,array:e=>Array.isArray(e),null:e=>e===null}),ce=e=>{if(e===void 0)return "undefined";let t=Sr.refine(e);return t?t.type:Object.getPrototypeOf(e).constructor.name};function Gt(e,t){return {summary:`${e<t?"+":"-"}${Math.abs(e-t)} (${e} \u2192 ${t})`}}function Zt(e,t){return {summary:`${e.length<t.length?"+":"-"}${Math.abs(e.length-t.length)} ("${e}" \u2192 "${t}")`}}function Qt(e,t){return {summary:`${e} \u2192 ${t}`}}function tt(e,t,n){let o="",r=[],s=[],i=[];return et(e,(a,p)=>{let l;for(l of a){let m=t[l];if(m===void 0)s.push([l,JSON.stringify(p)]);else {let d=n(p,m);d.summary!=="No Change"&&i.push([l,d]);}}}),et(t,(a,p)=>{let l;for(l of a)e[l]===void 0&&r.push([l,JSON.stringify(p)]);}),o=`\uFF5E${i.length} \uFF0B${r.length} \uFF0D${s.length}`,{summary:o,added:r,removed:s,changed:i}}function en(e,t,n){return tt(e,t,n)}var je=class{constructor(t,n,o){this.leafRefinery=t,this.treeRefinery=n,this.leafDiffers={},this.treeDiffers={};for(let r of Object.keys(t.supported)){let s=o[r];this.leafDiffers[r]=s;}for(let r of Object.keys(n.supported)){let s=o[r];this.treeDiffers[r]=s;}}diff(t,n){var a,p;if(t===n)return {summary:"No Change"};try{if(JSON.stringify(t)===JSON.stringify(n))return {summary:"No Change"}}catch(l){console.error("Error stringifying",t,n);}let o=(a=this.leafRefinery.refine(t))!=null?a:this.treeRefinery.refine(t),r=(p=this.leafRefinery.refine(n))!=null?p:this.treeRefinery.refine(n);if(o!==null&&r!==null&&o.type===r.type){if(o.type in this.leafDiffers)return this.leafDiffers[o.type](o.data,r.data);if(o.type in this.treeDiffers)return this.treeDiffers[o.type](o.data,r.data,(m,d)=>this.diff(m,d))}let s=ce(t),i=ce(n);return s===i?{summary:`${s} \u2192 ${i}`}:{summary:`Type change: ${s} \u2192 ${i}`}}};var tn=e=>JSON.stringify(e),nn=["array","boolean","null","number","object","string"],on={array:[],boolean:!1,null:null,number:0,object:{},string:""};var Rr=["Array","Boolean","Number","Object","String"],me=e=>e===null?{type:"null",data:null}:boolean.isBoolean(e)?{type:"boolean",data:e}:number.isNumber(e)?{type:"number",data:e}:string.isString(e)?{type:"string",data:e}:Array.isArray(e)?{type:"array",data:e}:v(e)?{type:"object",data:e}:$t(e===void 0?"undefined passed to refineJsonType. This is not valid JSON.":`${tn(e)} with prototype "${Object.getPrototypeOf(e).constructor.name}" passed to refineJsonType. This is not valid JSON.`),q=e=>{var o;if(e===null)return !0;if(e===void 0)return !1;let t=(o=Object.getPrototypeOf(e))==null?void 0:o.constructor.name;return Rr.includes(t)};var Cr=({isOpen:e,setIsOpen:t,disabled:n})=>jsxRuntime.jsx("button",{type:"button",className:`carat ${e?"open":"closed"}`,onClick:()=>t(o=>!o),disabled:n,children:"\u25B6"}),X={OpenClose:Cr};var wr=e=>!0,Ar=e=>!1,R=e=>t=>t===e,nt=e=>t=>e.includes(t);var Ne=(e,t=!1,n=[e])=>{let o=`(${n.map(i=>i.name||"anon").join(" | ")})`,r={[o]:i=>n.some(a=>{var p;return t&&console.log(n.map(l=>l.name||"anon").join(" | "),">",(p=a.name)!=null?p:"anon",":",a(i)),a(i)})};return Object.assign(r[o],{or:i=>Ne(i,t,[...n,i])})},ot=Ne(Ar),rn=(e,t=!1,n=[e])=>{let o=`(${n.map(i=>i.name||"anon").join(" & ")})`,r={[o]:i=>n.every(a=>(t&&console.log(n.map(p=>p.name||"anon").join(" & "),">",a.name||"anon",":",a(i)),a(i)))};return Object.assign(r[o],{and:i=>rn(i,t,[...n,i])})},sn=rn(wr);var Jr=["1:1","1:n","n:n"],vr=e=>Jr.includes(e),an={contents:{},relations:{},relationType:"n:n",a:"from",b:"to"},pn=({from:e="from",to:t="to",isContent:n}={})=>o=>Qe({contents:n?pe(string.isString,n):Qe({}),relations:pe(string.isString,w(string.isString)),relationType:vr,a:R(e),b:R(t)})(o);var G=(e,t)=>{var n;return (n=e.relations[t])!=null?n:[]},ue=(e,t)=>{let n=G(e,t);return n.length>1&&console.warn(`entry with id ${t} was not expected to have multiple relations`),n[0]};var ln=(e,...t)=>{let n=t[0],{a:o,b:r}=e,s={from:o,to:r,isContent:n};return {toJson:i=>i.toJSON(),fromJson:i=>de.fromJSON(i,s)}};var ke=(e,t)=>G(e,t).map(n=>[n,Le(e,t,n)]),cn=(e,t)=>Object.fromEntries(ke(e,t));var mn=e=>t=>t.split(e);var Ir=(e,t,n)=>{let o=Dt(t,n);return u(c({},e),{relations:_function.pipe(e.relations,z,Te(([r,s])=>[r,o(r)?s.filter(i=>!o(i)):s]),Oe,Y(Se)),contents:_function.pipe(e.contents,Y((r,s)=>string.isString(s)&&_function.pipe(s,mn("/"),Ft([t,n]))))})},jr=(e,t)=>u(c({},e),{relations:_function.pipe(e.relations,z,Te(([o,r])=>[o,r.filter(s=>s!==t)]),Oe,Y((o,r)=>r===t||Se(o))),contents:_function.pipe(e.contents,Y((o,r)=>string.isString(r)&&r.split("/").includes(t)))}),_e=(e,t)=>{let n=t[e.a],o=t[e.b];return o?Ir(e,n,o):jr(e,n)};var Lr=(e,t,n,...o)=>{var i,a;let r=u(c({},e),{relations:u(c({},e.relations),{[t]:Ie((i=e.relations[t])!=null?i:[])(n),[n]:Ie((a=e.relations[n])!=null?a:[])(t)})}),s=o[0];return s?Be(r,t,n,s):r},dn=Y(Se),_r=(e,t,n,...o)=>{var p;let r=c({},e.relations),s=ue(e,n),i=u(c({},e),{relations:dn(u(c(c({},r),s&&s!==t&&{[s]:r[s].filter(l=>l!==n)}),{[n]:[t],[t]:Ie((p=r[t])!=null?p:[])(n)}))}),a=o[0];return a?Be(i,t,n,a):i},Pr=(e,t,n,...o)=>{let r=ue(e,n),s=ue(e,t),i=u(c({},e),{relations:dn(u(c(c(c({},e.relations),r&&{[r]:[]}),s&&{[s]:[]}),{[t]:[n],[n]:[t]}))}),a=o[0];return a?Be(i,t,n,a):i},Pe=(e,t,...n)=>{let{[e.a]:o,[e.b]:r}=t;switch(e.relationType){case"1:1":return Pr(e,o,r,...n);case"1:n":return _r(e,o,r,...n);case"n:n":return Lr(e,o,r,...n)}};var fn=(e,t)=>[e,t].sort().join("/"),Le=(e,t,n)=>e.contents[fn(t,n)],Be=(e,t,n,o)=>u(c({},e),{contents:u(c({},e.contents),{[fn(t,n)]:o})}),st=(e,t)=>ke(e,t).map(([n,o])=>c({id:n},o)),yn=(e,t,n)=>{let o=t[e.a],r=t[e.b];return _function.pipe(e,s=>{let a=G(e,o).filter(l=>!n.some(m=>m.id===l)),p=s;for(let l of a){let m={[e.a]:o!=null?o:l,[e.b]:r!=null?r:l};p=_e(p,m);}return p},s=>{let i=s;for(let a of n){let p=a,{id:l}=p,m=ve(p,["id"]);let d=Yt(m)?void 0:m;i=Pe(i,{[e.a]:o!=null?o:l,[e.b]:r!=null?r:l},d);}return i},s=>{let i=n.map(a=>a.id);return u(c({},s),{relations:u(c({},s.relations),{[o!=null?o:r]:i})})})};var de=class e{constructor(t){this.a="from";this.b="to";this.makeJsonInterface=(...t)=>ln(this,...t);Object.assign(this,u(c(c({},an),t),{makeJsonInterface:this.makeJsonInterface}));}toJSON(){return {relationType:this.relationType,relations:this.relations,contents:this.contents,a:this.a,b:this.b}}static fromJSON(t,n){if(pn(n)(t))return new e(t);throw new Error(`Saved JSON for this Join is invalid: ${JSON.stringify(t)}`)}from(t){return new e(u(c({},this),{a:t}))}to(t){return new e(u(c({},this),{b:t}))}getRelatedId(t){return ue(this,t)}getRelatedIds(t){return G(this,t)}getContent(t,n){return Le(this,t,n)}getRelationEntries(t){return ke(this,t)}getRelationRecord(t){return cn(this,t)}getRelation(t){return st(this,t)[0]}getRelations(t){return st(this,t)}setRelations(t,n){return new e(yn(this,t,n))}set(t,...n){return new e(Pe(this,t,...n))}remove(t){return new e(_e(this,t))}};var C=Wo.forwardRef(function(t,n){var p,l,m,d;let o=Wo.useRef(null),r=Wo.useRef(null),[s,i]=Wo.useState("auto");Wo.useImperativeHandle(n,()=>({focus:()=>{var y;(y=o.current)==null||y.focus();}}));let a=t.type==="number"?15:0;return Wo.useLayoutEffect(()=>{if(r.current){i(`${r.current.offsetWidth+a}px`);let y=setInterval(()=>{r.current&&i(`${r.current.offsetWidth+a}px`);},1e3);return ()=>clearInterval(y)}},[(p=o.current)==null?void 0:p.value,t.value]),jsxRuntime.jsxs("div",{style:{display:"inline-block",position:"relative"},children:[jsxRuntime.jsx("input",u(c({},t),{ref:o,style:c({padding:0,borderRadius:0,border:"none",fontFamily:"inherit",fontSize:"inherit",width:s},t.style)})),jsxRuntime.jsx("span",{ref:r,style:{padding:(l=t.style)==null?void 0:l.padding,position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:((m=t.style)==null?void 0:m.fontFamily)||"inherit",fontSize:((d=t.style)==null?void 0:d.fontSize)||"inherit"},children:t.value})]})});var F=(e,t)=>n=>n<e?e:n>t?t:n;var Z=(e,t)=>n=>n<e?t-(e-n)%(t-e):e+(n-e)%(t-e);function zr(e,t){if(t===void 0)return e;let n=10**t;return Math.round(e*n)/n}var Yr=["","-",".","-."],Tn=e=>Yr.includes(e),qr={"":null,"-":0,".":0,"-.":0},gn=e=>e==="0"||!isNaN(Number(e))&&e.includes("."),hn=(e,t)=>Tn(e)?qr[e]:t?parseFloat(e):Math.round(parseFloat(e)),Xr={max:1/0,min:-1/0,decimalPlaces:100,nullable:!0},Gr=e=>t=>{if(t===null&&e.nullable===!0)return null;let{max:n,min:o,decimalPlaces:r}=c(c({},Xr),e);return _function.pipe(t!=null?t:0,F(o,n),i=>r?zr(i,r):i)},Zr=e=>e==null?"":e.toString(),Sn=({autoSize:e=!1,customCss:t,decimalPlaces:n,disabled:o=!1,label:r,max:s,min:i,name:a,onChange:p,onClick:l,placeholder:m="",set:d=()=>null,testId:y,value:x=null})=>{let O=Wo.useId(),[I,j]=Wo.useState(null),J=Wo.useRef(!1),E=Gr({max:s,min:i,decimalPlaces:n,nullable:!0}),re=n===void 0||n>0,ge=()=>{J.current&&(d(E(x!=null?x:null)),j(null)),J.current=!1;},he=B=>{var qe;if(p&&p(B),d===void 0)return;J.current=!0;let h=B.target.value;if(Tn(h)||gn(h)){j(h);let fr=gn(h)?h:(qe=i==null?void 0:i.toString())!=null?qe:"0",yr=hn(fr,re);d(E(yr));return}j(null);let Ae=!isNaN(Number(h))&&!h.includes(" ")||re&&h==="."||re&&h==="-."||h===""||h==="-",Ye=hn(h,re);Ae&&d(E(Ye));},b=I!=null?I:Zr(x&&E(x));return jsxRuntime.jsxs("span",{css:t,children:[r&&jsxRuntime.jsx("label",{htmlFor:O,children:r}),e?jsxRuntime.jsx(C,{type:"text",value:b,placeholder:m!=null?m:"-",onChange:he,onBlur:ge,disabled:o,name:a!=null?a:O,id:O,onClick:l,"data-testid":`number-input-${y!=null?y:O}`}):jsxRuntime.jsx("input",{type:"text",value:b,placeholder:m!=null?m:"-",onChange:he,onBlur:ge,disabled:o,name:a!=null?a:O,id:O,onClick:l,"data-testid":`number-input-${y!=null?y:O}`})]})};var On=({value:e,set:t,label:n,placeholder:o,customCss:r,autoSize:s=!1})=>jsxRuntime.jsxs("span",{css:r,children:[jsxRuntime.jsx("label",{children:n}),s?jsxRuntime.jsx(C,{type:"text",value:e,onChange:i=>t==null?void 0:t(i.target.value),disabled:t===void 0,placeholder:o}):jsxRuntime.jsx("input",{type:"text",value:e,onChange:i=>t==null?void 0:t(i.target.value),disabled:t===void 0,placeholder:o})]});var kn=({data:e})=>e===void 0?jsxRuntime.jsx(C,{disabled:!0,value:"undefined"}):jsxRuntime.jsx(C,{disabled:!0,value:Object.getPrototypeOf(e).constructor.name+" "+JSON.stringify(e)});var fe=({data:e,set:t,schema:n,name:o,rename:r,remove:s,recast:i,path:a=[],isReadonly:p=()=>!1,isHidden:l=()=>!1,className:m,customCss:d,Header:y,Components:x})=>{let O=q(e),I=O?me(e):{type:"non-json",data:e},j=O?pt[I.type]:kn,J=p(a);return l(a)?null:jsxRuntime.jsx(x.ErrorBoundary,{children:jsxRuntime.jsxs(x.EditorWrapper,{className:m,customCss:d,children:[s&&jsxRuntime.jsx(x.Button,{onClick:J?se:s,disabled:J,children:jsxRuntime.jsx(x.DeleteIcon,{})}),y&&jsxRuntime.jsx(y,{data:e,schema:n}),r&&jsxRuntime.jsx(x.KeyWrapper,{children:jsxRuntime.jsx(C,{value:o,onChange:J?se:E=>r(E.target.value),disabled:J})}),jsxRuntime.jsx(j,{data:I.data,set:t,schema:n,remove:s,rename:r,path:a,isReadonly:p,isHidden:l,Components:x}),i&&O?jsxRuntime.jsx("select",{onChange:J?se:E=>i(E.target.value),value:I.type,disabled:J,children:Object.keys(pt).map(E=>jsxRuntime.jsx("option",{value:E,children:E},E))}):null]})})};var Rn=(e,t)=>e.map((n,o)=>r=>t(()=>{let s=[...e];return s[o]=ie(r)(n),s}));var En=({path:e=[],isReadonly:t=()=>!1,isHidden:n=()=>!1,data:o,set:r,Components:s})=>{let i=Rn(o,r);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:o.map((a,p)=>{let l=[...e,p];return jsxRuntime.jsx(fe,{path:l,isReadonly:t,isHidden:n,data:a,set:i[p],Components:s},l.join(""))})})};var N=e=>Number.isInteger(e),lt=e=>{if(N(e))return e;throw new Fe(e)},rs,Ce=class extends Number{constructor(n,o){super(n/o);this[rs]=()=>this.numerator/this.denominator;if(o===0)throw new Error("Denominator cannot be zero");this.numerator=lt(n),this.denominator=lt(o);}};rs=Symbol.toPrimitive;var Fe=class extends Error{constructor(t){super(`Could not parse integer from ${JSON.stringify(t)}`);}},ct=Object.assign(e=>lt(e),{from:e=>_function.pipe(e,String,parseFloat,t=>N(t)?{value:t,error:null,round:null,upper:null,lower:null,ratio:null}:{value:null,error:new Fe(e),round:Math.round(t),upper:Math.ceil(t),lower:Math.floor(t),ratio:null}),formula:e=>t=>e(t)});new Ce(1,2);[new Ce(1,2)];({a:new Ce(1,2)});function ye(e){return T({$ref:string.isString})(e)}({$defs:{colorChannel:{type:"integer",minimum:ct(0),maximum:ct(255)},color:{type:"object",properties:{red:{$ref:"#/$defs/colorChannel"},green:{$ref:"#/$defs/colorChannel"},blue:{$ref:"#/$defs/colorChannel"}}}},type:"array",items:{$ref:"#/$defs/color"}});var Me=({refNode:{$ref:e},refMap:t={},root:n})=>{if(typeof n=="boolean")throw new TypeError("The root is a boolean and cannot be indexed");if(e in t)return {node:t[e],refMap:t};let[o,...r]=e.split("/"),s=Xt(n,r);if(s instanceof Error)throw s;let i=s.found;for(;ye(i);){let a=Me({refNode:i,refMap:t,root:n});i=a.node,t=a.refMap;}if(k(i))return {node:i,refMap:u(c({},t),{[e]:i})};throw new TypeError("The refNode is not a JsonSchema")};var wn=["date-time","date","email","hostname","ipv4","ipv6","regex","time","uri-reference","uri-template","uri","uuid"];var An=[...nn,"integer"];[...An,"any","never"];var Jn={type:R("string"),enum:f(w(string.isString)),minLength:f(N),maxLength:f(N),pattern:f(string.isString),format:f(nt(wn))};function mt(e){return T(Jn)(e)}var vn={type:R("number"),enum:f(w(number.isNumber)),minimum:f(number.isNumber),maximum:f(number.isNumber),exclusiveMinimum:f(number.isNumber),exclusiveMaximum:f(number.isNumber),multipleOf:f(number.isNumber)};function In(e){return T(vn)(e)}var jn={type:R("integer"),enum:f(w(N)),minimum:f(N),maximum:f(N),exclusiveMinimum:f(N),exclusiveMaximum:f(N),multipleOf:f(N)};function Ln(e){return T(jn)(e)}var _n={type:R("boolean"),enum:f(w(boolean.isBoolean))};function Pn(e){return T(_n)(e)}var Bn={type:R("null")};function Fn(e){return T(Bn)(e)}var Mn={type:R("object"),properties:f(pe(string.isString,k)),required:f(w(string.isString)),additionalProperties:f(k),propertyNames:f(mt),minProperties:f(N),maxProperties:f(N),dependentSchemas:f(pe(string.isString,k))};function Ke(e){return T(Mn)(e)}var Dn={type:R("array"),items:f(Ne(k).or(w(k))),minItems:f(N),maxItems:f(N),uniqueItems:f(boolean.isBoolean)};function Kn(e){return T(Dn)(e)}var is={anyOf:w(k)};function Wn(e){return T(is)(e)}var as={oneOf:w(k)};function ps(e){return T(as)(e)}var ls={allOf:w(k)};function Hn(e){return T(ls)(e)}var cs={if:k,then:f(k),else:f(k)};function $n(e){return T(cs)(e)}var ms={not:k};function Vn(e){return T(ms)(e)}var us=u(c(c(c(c(c(c(c({},Dn),_n),jn),Bn),vn),Mn),Jn),{type:w(nt(An)),enum:f(w(ot.or(N).or(boolean.isBoolean).or(number.isNumber).or(string.isString)))});function ds(e){return T(us)(e)}var fs=ot.or(Kn).or(Pn).or($n).or(ps).or(Ln).or(Hn).or(ds).or(Vn).or(Fn).or(In).or(Ke).or(mt).or(Wn);var ys=T({$id:f(string.isString),$schema:f(string.isString)}),bs=sn.and(fs).and(ys);function k(e){return Ne(bs).or(boolean.isBoolean).or(ye)(e)}var Un=e=>{try{return e.flatMap(t=>{switch(typeof t){case"string":return ["properties",t];case"number":return ["items",t];case"symbol":throw new TypeError(`The key ${String(t)} is not a valid JSON key; expected string or number, got symbol`);default:throw new TypeError(`The key ${t} is not a valid JSON key; expected string or number, got ${typeof t}`)}})}catch(t){if(t instanceof TypeError)return t;throw t}};var zn=e=>{if(typeof e=="boolean")throw new Error("The schema does not contain subSchemas");return t=>{let n=Un(t);if(n instanceof Error)return n;if(typeof e=="boolean")return new TypeError("The schema is not a JsonSchema");let{node:o,refMap:r}=n.reduce(({node:i,refMap:a=void 0},p)=>(console.log({node:i,key:p}),ye(i)?Me({refNode:i,root:e,refMap:a}):{node:i[p],refMap:a}),{node:e,refMap:void 0});if(o instanceof Error)throw o;let s=o;for(;ye(s);)console.log({subSchema:s}),s=Me({refNode:s,root:e,refMap:r}).node;if(console.log({subSchema:s}),k(s))return s;throw new TypeError("The subSchema is not a JsonSchema")}};var Yn=e=>e==="true",qn=e=>Number(e),Xn=e=>e.split(","),Gn=e=>{try{return JSON.parse(e)}catch(t){return {[e]:e}}},Zn=e=>JSON.stringify(e),Qn=e=>e.true===!0,eo=e=>{var t,n,o;return Number((o=(n=(t=e.number)!=null?t:e.size)!=null?n:e.count)!=null?o:0)},to=e=>Object.entries(e),no=e=>e.toString(),oo=e=>+e,ro=e=>({[e.toString()]:e}),so=e=>[e],io=e=>e.toString(),ao=e=>e===1,po=e=>({number:e}),lo=e=>Array(e).fill(null),co=e=>e.join(","),mo=e=>e.length,uo=e=>typeof e[0]=="boolean"?e[0]:e.length>0,fo=e=>e.reduce((t,n,o)=>(t[`${o}`]=n,t),{}),yo=()=>"",bo=()=>0,xo=()=>!1,go=()=>[],ho=()=>({});var To=e=>{let t=me(e);return {to:{array:()=>{switch(t.type){case"array":return t.data;case"object":return to(t.data);case"string":return Xn(t.data);case"boolean":return so(t.data);case"number":return lo(t.data);case"null":return go()}},boolean:()=>{switch(t.type){case"array":return uo(t.data);case"object":return Qn(t.data);case"string":return Yn(t.data);case"boolean":return t.data;case"number":return ao(t.data);case"null":return xo()}},number:()=>{switch(t.type){case"array":return mo(t.data);case"object":return eo(t.data);case"string":return qn(t.data);case"boolean":return oo(t.data);case"number":return t.data;case"null":return bo()}},object:()=>{switch(t.type){case"array":return fo(t.data);case"object":return t.data;case"string":return Gn(t.data);case"boolean":return ro(t.data);case"number":return po(t.data);case"null":return ho()}},string:()=>{switch(t.type){case"array":return co(t.data);case"object":return Zn(t.data);case"string":return t.data;case"boolean":return no(t.data);case"number":return io(t.data);case"null":return yo()}},null:()=>null}}};var So=(e,t)=>ae(e,(n,o)=>r=>t(u(c({},e),{[o]:ie(r)(n[o])}))),Oo=(e,t,n)=>ae(e,(o,r)=>s=>Object.hasOwn(e,s)?null:t(()=>{let i=Object.entries(e),a=i.findIndex(([l])=>l===r);i[a]=[s,o];let p=n.current;return n.current=u(c({},p),{[s]:p[r]}),Object.fromEntries(i)})),No=(e,t)=>ae(e,(n,o)=>()=>t(()=>{let i=e;return ve(i,[Pt(o)])})),ko=(e,t)=>ae(e,(n,o)=>r=>t(()=>u(c({},e),{[o]:To(n).to[r]()}))),Ro=(e,t)=>(n,o)=>r=>t(u(c({},e),{[n]:r!=null?r:on[o]})),Co=(e,t,n)=>()=>{let o=Object.keys(e).sort(n),r={};o.forEach(s=>r[s]=e[s]),t(r);};var hs=({addProperty:e,disabled:t,propertyKey:n,Components:o})=>jsxRuntime.jsxs(o.MissingPropertyWrapper,{children:[jsxRuntime.jsx(C,{disabled:!0,defaultValue:n})," ",jsxRuntime.jsx(C,{disabled:!0,defaultValue:"is missing"}),jsxRuntime.jsx(o.Button,{onClick:()=>e(),disabled:t,children:"+"})]}),Eo=({schema:e,path:t=[],isReadonly:n=()=>!1,isHidden:o=()=>!1,data:r,set:s,Components:i})=>{var he;let a=n(t),p=Wo.useRef(Object.keys(r).reduce((b,B)=>(b[B]=B,b),{})),l=So(r,s),m=Oo(r,s,p),d=No(r,s),y=ko(r,s),x=Co(r,s),O=Ro(r,s),I=v(e)?zn(e)(t):!0,j=R(!0)(I)?!0:Ke(I)?Object.keys((he=I.properties)!=null?he:{}):[],J=Object.keys(r),[E,re]=J.reduce(([b,B],h)=>j===!0||j.includes(h)?[b,[...B,h]]:[[...b,h],B],[[],[]]),ge=j===!0?[]:j.filter(b=>!J.includes(b));return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(i.Button,{onClick:()=>x(),disabled:a,children:"Sort"}),jsxRuntime.jsxs(i.ObjectWrapper,{children:[jsxRuntime.jsx("div",{className:"json_editor_properties",children:[...ge,...re,...E].map(b=>{let B=p.current[b],h=[...t,b],Ae=[...t,B],Ye=j===!0||j.includes(b);return ge.includes(b)?jsxRuntime.jsx(hs,{propertyKey:b,addProperty:O(b,"string"),disabled:a,Components:i},b+"IsMissing"):jsxRuntime.jsx(fe,{schema:e,path:h,name:b,isReadonly:n,isHidden:o,data:r[b],set:l[b],rename:m[b],remove:d[b],recast:y[b],className:`json_editor_property ${Ye?"json_editor_official":"json_editor_unofficial"}`,Components:i},Ae.join("."))})}),jsxRuntime.jsx(i.Button,{onClick:a?se:()=>O("new_property","string")(),disabled:a,children:"+"})]})]})};var wo=({data:e,set:t,Components:n})=>jsxRuntime.jsx(n.BooleanWrapper,{children:jsxRuntime.jsx("input",{type:"checkbox",checked:e,onChange:o=>t(o.target.checked)})}),Ao=({Components:e})=>jsxRuntime.jsx(e.NullWrapper,{children:'" "'}),Jo=({path:e=[],isReadonly:t=()=>!1,data:n,set:o,Components:r})=>jsxRuntime.jsx(r.NumberWrapper,{children:jsxRuntime.jsx(Sn,{value:n,set:t(e)?void 0:s=>o(Number(s)),autoSize:!0})}),vo=({path:e=[],isReadonly:t=()=>!1,data:n,set:o,Components:r})=>jsxRuntime.jsx(r.StringWrapper,{children:jsxRuntime.jsx(On,{value:n,set:t(e)?void 0:o,autoSize:!0})});var Io=({error:e,errorInfo:t})=>{var r,s;let n=t==null?void 0:t.componentStack.split(" ").filter(Boolean)[2],o=(s=(r=e==null?void 0:e.toString())!=null?r:t==null?void 0:t.componentStack)!=null?s:"Unknown error";return jsxRuntime.jsx("div",{"data-testid":"error-boundary",style:{flex:"1",background:"black",backgroundImage:"url(./src/assets/kablooey.gif)",backgroundPosition:"center",backgroundSize:"overlay"},children:jsxRuntime.jsx("div",{style:{margin:"50px",marginTop:"0",padding:"50px",border:"1px solid dashed"},children:jsxRuntime.jsxs("span",{style:{background:"black",color:"white",padding:10,paddingTop:5},children:["\u26A0\uFE0F ",jsxRuntime.jsx("span",{style:{color:"#fc0",fontWeight:700},children:n})," \u26A0\uFE0F ",o]})})})};var We=class extends Wo.Component{constructor(t){super(t),this.state={};}componentDidCatch(t,n){var o,r;(r=(o=this.props).onError)==null||r.call(o,t,n),this.setState({error:t,errorInfo:n});}render(){let{error:t,errorInfo:n}=this.state,{children:o,Fallback:r=Io}=this.props;return n?jsxRuntime.jsx(r,{error:t,errorInfo:n}):o}};var jo={ErrorBoundary:({children:e})=>jsxRuntime.jsx(We,{children:e}),Button:({onClick:e,children:t,disabled:n})=>jsxRuntime.jsx("button",{type:"button",className:"json_editor_button",onClick:e,disabled:n,children:t}),EditorWrapper:({children:e,customCss:t,className:n})=>jsxRuntime.jsx("div",{className:"json_editor "+n,css:t,children:e}),EditorLayout:({DeleteButton:e,Header:t,KeyInput:n,TypeSelect:o,ValueEditor:r,Wrapper:s})=>jsxRuntime.jsxs(s,{children:[e&&jsxRuntime.jsx(e,{}),t&&jsxRuntime.jsx(t,{}),n&&jsxRuntime.jsx(n,{}),o&&jsxRuntime.jsx(o,{}),jsxRuntime.jsx(r,{})]}),ArrayWrapper:({children:e})=>jsxRuntime.jsx("div",{className:"json_editor_array",children:e}),ObjectWrapper:({children:e})=>jsxRuntime.jsx("div",{className:"json_editor_object",children:e}),StringWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_string",children:e}),NumberWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_number",children:e}),BooleanWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_boolean",children:e}),NullWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_null",children:e}),MissingPropertyWrapper:({children:e})=>jsxRuntime.jsx("div",{className:"json_editor_property json_editor_missing",children:e}),MiscastPropertyWrapper:({children:e})=>jsxRuntime.jsx("div",{className:"json_editor_property json_editor_miscast",children:e}),IllegalPropertyWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_property json_editor_illegal",children:e}),OfficialPropertyWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_property json_editor_official",children:e}),UnofficialPropertyWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_property json_editor_unofficial",children:e}),DeleteIcon:()=>jsxRuntime.jsx("span",{className:"json_editor_icon json_editor_delete",children:"x"}),KeyWrapper:({children:e})=>jsxRuntime.jsx("span",{className:"json_editor_key",children:e})};var ft=({data:e,set:t,schema:n=!0,name:o,rename:r,remove:s,isReadonly:i=()=>!1,isHidden:a=()=>!1,className:p,customCss:l,Header:m,Components:d={}})=>{let y=c(c({},jo),d),x=new Rs__default.default({allErrors:!0,verbose:!0});Wo.useMemo(()=>x.compile(n),[n])(e);return jsxRuntime.jsx(fe,{data:e,set:t,name:o,schema:n,rename:r,remove:s,path:[],isReadonly:i,isHidden:a,className:p,customCss:l,Header:m,Components:y})};var pt={array:En,boolean:wo,null:Ao,number:Jo,object:Eo,string:vo};function Lo(e){let t=0;for(let o=0;o<e.length;o++){let r=e.charCodeAt(o);t=(t<<5)-t+r,t|=0;}let n=(t&16777215).toString(16);for(;n.length<6;)n="0"+n;return `#${n}`}var $={R:.3,G:.5,B:.2};var _o=[{sat:255,hue:0},{sat:255,hue:360}];var ws=e=>`#${Object.values(e).map(t=>{let n=t.toString(16);return n.length===1&&(n=0+n),n}).join("")}`,Po=ws;var Ee=e=>{let n=Z(0,360)(e)/60,o=Math.floor(n),r=n-o,s=r,i=1-r;switch(o){case 0:return [1,s,0];case 1:return [i,1,0];case 2:return [0,1,s];case 3:return [0,i,1];case 4:return [s,0,1];case 5:return [1,0,i];default:throw new Error(`invalid hue served: ${e}`)}};var As=({R:e,G:t,B:n})=>{let o=0;return e>t&&t>=n&&(o=60*(0+(t-n)/(e-n))),t>=e&&e>n&&(o=60*(2-(e-n)/(t-n))),t>n&&n>=e&&(o=60*(2+(n-e)/(t-e))),n>=t&&t>e&&(o=60*(4-(t-e)/(n-e))),n>e&&e>=t&&(o=60*(4+(e-t)/(n-t))),e>=n&&n>t&&(o=60*(6-(n-t)/(e-t))),o},yt=As;var Js=({R:e,G:t,B:n})=>$.R*e/255+$.G*t/255+$.B*n/255,te=Js;var bt=(e,t)=>{let n=255,o=Z(0,360)(e);for(let r=-1,s=0;s<t.length;r++,s++){r=Z(0,t.length)(r);let i=r>s?Z(-180,180)(o):void 0,a=t[r],p=t[s],l=r>s?Z(-180,180)(a.hue):a.hue,m=p.hue;if((i||o)>=l&&(i||o)<m){let d=i||o;d-=l,d/=m-l,d*=p.sat-a.sat,d+=a.sat,n=d;}}return n};var vs=({R:e,G:t,B:n})=>Math.max(e,t,n)-Math.min(e,t,n),xt=vs;var gt=e=>{let[t,n,o]=Ee(e),r=$.R*t,s=$.G*n,i=$.B*o;return r+s+i};var Is=e=>{let t=Ee(e);return o=>{let r=s=>Math.round(t[s]*o);return {R:r(0),G:r(1),B:r(2)}}},js=({minChannels:e,trueLuminosity:t,minLum:n})=>{let{max:o,round:r}=Math,s=255-o(...Object.values(e)),i=F(0,s)(r((t-n)*255));return {R:e.R+i,G:e.G+i,B:e.B+i}},Ls=({hue:e,sat:t,lum:n,prefer:o="lum"},r=_o)=>{let s=Is(e),i,a,p,l,m,d=0,y=1,x=bt(e,r);switch(o){case"sat":i=F(0,255)(Math.min(t,x)),p=s(i),l={R:p.R+255-i,G:p.G+255-i,B:p.B+255-i},d=te(p),y=te(l),a=F(d,y)(n);break;case"lum":a=F(0,1)(n),m=gt(e),x=Math.min(x,Math.round(a<=m?255*(a/m):255*(1-a)/(1-m))),i=Math.min(t,x),p=s(i),d=te(p);break}return {channels:js({minChannels:p,trueLuminosity:a,minLum:d}),fix:{sat:i,lum:a},limit:{sat:[0,x],lum:[o==="lum"?0:d,y]}}},Bo=Ls;var _s=({hue:e,sat:t,lum:n,prefer:o},r)=>{let{channels:s,fix:i,limit:a}=Bo({hue:e,sat:t,lum:n,prefer:o},r),{R:p,G:l,B:m}=s;return {hex:Po({R:p,G:l,B:m}),fix:i,limit:a}},ht=_s;var Ps=({hue:e,sat:t,lum:n,prefer:o},r)=>{let{hex:s}=ht({hue:e,sat:t,lum:n,prefer:o},r);return s},D=Ps;var Bs=({R:e,G:t,B:n})=>{let o=yt({R:e,G:t,B:n}),r=xt({R:e,G:t,B:n}),s=te({R:e,G:t,B:n});return {hue:o,sat:r,lum:s}},Tt=Bs;var Fs="[a-fA-F0-9]+",Ms=e=>{let t=e.split("");return [0,0,1,1,2,2].map(o=>t[o]).join("")},Ds=e=>{let t=e.replace(/^#/,""),n=t.length===6||t.length===3,o=t.match(new RegExp(`^${Fs}$`))!==null;if(!(n&&o))throw new Error(`${e} is not a valid hex code`);return t.length===3?Ms(t):t},St=Ds;var Ot=e=>{let t=St(e);return {R:parseInt(t.slice(0,2),16),G:parseInt(t.slice(2,4),16),B:parseInt(t.slice(4,6),16)}};var Ks=e=>{let{R:t,G:n,B:o}=Ot(e),{hue:r,sat:s,lum:i}=Tt({R:t,G:n,B:o});return {hue:r,sat:s,lum:i}},ne=Ks;var Nt=e=>u(c({},e),{lum:e.lum>.666?0:1});var Do=e=>t=>u(c({},t),{lum:t.lum>.666?t.lum-e:t.lum+e});var Ko={hue:0,lum:0,sat:0,prefer:"lum"};var Mo=e=>typeof e=="object"&&e!==null&&typeof e.hue=="number"&&typeof e.sat=="number"&&typeof e.lum=="number"&&["sat","lum"].includes(e.prefer);Wt(Mo)(Ko);var Vs=["Red","Orange","Yellow","Lime","Green","Teal","Cyan","Blue","Indigo","Violet","Magenta","Pink"];Vs.reduce((e,t,n)=>(e[t]={hue:n*30,sat:255,lum:.5,prefer:"sat"},e),{});var Ct=({id:e})=>{let[t,n]=Wo__namespace.useState(!1),{refs:o,floatingStyles:r,context:s}=react$1.useFloating({open:t,onOpenChange:n,placement:"bottom-start"}),i=react$1.useClick(s),{getReferenceProps:a,getFloatingProps:p}=react$1.useInteractions([i]),l=Lo(e),m=_function.pipe(l,ne,Nt,D),d=_function.pipe(l,ne,Do(.25),D),y=_function.pipe(d,ne,Nt,D);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("span",u(c({role:"content",ref:o.setReference},a()),{style:{background:l,cursor:"pointer",padding:"0px 4px",color:m,userSelect:"none",whiteSpace:"nowrap"},children:e.substring(0,3)})),t&&jsxRuntime.jsx(react$1.FloatingPortal,{children:jsxRuntime.jsx("span",u(c({role:"popup",ref:o.setFloating},p()),{style:u(c({},r),{color:y,background:d,padding:"0px 4px",boxShadow:"0px 2px 10px rgba(0, 0, 0, 0.1)"}),children:e}))})]})};var Ho={};var $o=e=>{let t=new Set,n=Object.entries(e.data.relations).sort(([o,r],[s,i])=>i.length-r.length).filter(([o,r])=>{if(t.has(o))return !1;t.add(o);for(let s of r)t.add(s);return !0});return jsxRuntime.jsx("article",{className:Ho.class,children:n.map(([o,r])=>jsxRuntime.jsxs("section",{children:[jsxRuntime.jsx("span",{children:jsxRuntime.jsx(Ct,{id:o})}),":",jsxRuntime.jsx("span",{children:r.map(s=>jsxRuntime.jsx(Ct,{id:s}))})]}))})};var ni=({token:e})=>{let[t,n]=react.useIO(e);return q(t)?jsxRuntime.jsx(ft,{data:t,set:n,schema:!0}):t instanceof de?jsxRuntime.jsx($o,{data:t,set:n}):jsxRuntime.jsx("div",{className:"json_editor",children:jsxRuntime.jsx(C,{value:t instanceof Set?`Set { ${JSON.stringify([...t]).slice(1,-1)} }`:t instanceof Map?"Map "+JSON.stringify([...t]):Object.getPrototypeOf(t).constructor.name+" "+Vt(()=>JSON.stringify(t),"?"),disabled:!0})})},oi=({token:e})=>{let t=react.useO(e);return q(t)?jsxRuntime.jsx(ft,{data:t,set:()=>null,schema:!0,isReadonly:()=>!0}):jsxRuntime.jsx("div",{className:"json_editor",children:jsxRuntime.jsx(C,{value:t instanceof Set?"Set "+JSON.stringify([...t]):t instanceof Map?"Map "+JSON.stringify([...t]):Object.getPrototypeOf(t).constructor.name+" "+JSON.stringify(t),disabled:!0})})},Et=({token:e})=>e.type==="readonly_selector"?jsxRuntime.jsx(oi,{token:e}):jsxRuntime.jsx(ni,{token:e});var At=atom_io.selectorFamily({key:"\u{1F441}\u200D\u{1F5E8} State Type",get:e=>({get:t})=>{let n;try{n=t(e);}catch(o){return "error"}return n===void 0?"undefined":q(n)?me(n).type:Object.getPrototypeOf(n).constructor.name}}),si=({node:e,isOpenState:t,typeState:n})=>{var p,l;let[o,r]=react.useIO(t),s=react.useO(e),i=react.useO(n),a=!!vt.refine(s);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("header",{children:[jsxRuntime.jsx(X.OpenClose,{isOpen:o&&!a,setIsOpen:r,disabled:a}),jsxRuntime.jsxs("label",{onClick:()=>console.log(e,atom_io.getState(e)),onKeyUp:()=>console.log(e,atom_io.getState(e)),children:[jsxRuntime.jsx("h2",{children:(l=(p=e.family)==null?void 0:p.subKey)!=null?l:e.key}),jsxRuntime.jsxs("span",{className:"type detail",children:["(",i,")"]})]}),a?jsxRuntime.jsx(Et,{token:e}):null]}),o&&!a?jsxRuntime.jsx("main",{children:jsxRuntime.jsx(Et,{token:e})}):null]})},ii=({node:e,isOpenState:t})=>{let[n,o]=react.useIO(t);return Object.entries(e.familyMembers).forEach(([r,s])=>{V(r),At(s);}),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("header",{children:[jsxRuntime.jsx(X.OpenClose,{isOpen:n,setIsOpen:o}),jsxRuntime.jsxs("label",{children:[jsxRuntime.jsx("h2",{children:e.key}),jsxRuntime.jsx("span",{className:"type detail",children:" (family)"})]})]}),n?Object.entries(e.familyMembers).map(([r,s])=>jsxRuntime.jsx(zo,{node:s,isOpenState:V(s.key),typeState:At(s)},r)):null]})},zo=({node:e,isOpenState:t,typeState:n})=>e.key.startsWith("\u{1F441}\u200D\u{1F5E8}")?null:jsxRuntime.jsx("section",{className:"node state",children:"type"in e?jsxRuntime.jsx(si,{node:e,isOpenState:t,typeState:n}):jsxRuntime.jsx(ii,{node:e,isOpenState:t})}),Jt=({tokenIndex:e})=>{let t=react.useO(e);return jsxRuntime.jsx("article",{className:"index state_index",children:Object.entries(t).filter(([n])=>!n.startsWith("\u{1F441}\u200D\u{1F5E8}")).sort().map(([n,o])=>jsxRuntime.jsx(zo,{node:o,isOpenState:V(o.key),typeState:At(o)},n))})};var ai=({atomUpdate:e})=>jsxRuntime.jsxs("article",{className:"node atom_update",onClick:()=>console.log(e),onKeyUp:()=>console.log(e),children:[jsxRuntime.jsxs("span",{className:"detail",children:[e.key,": "]}),jsxRuntime.jsx("span",{children:jsxRuntime.jsx("span",{className:"summary",children:Xo.diff(e.oldValue,e.newValue).summary})})]},e.key),pi=({serialNumber:e,transactionUpdate:t})=>jsxRuntime.jsxs("article",{className:"node transaction_update",children:[jsxRuntime.jsx("header",{children:jsxRuntime.jsx("h4",{children:e})}),jsxRuntime.jsxs("main",{children:[jsxRuntime.jsxs("section",{className:"transaction_params",children:[jsxRuntime.jsx("span",{className:"detail",children:"params: "}),t.params.map((n,o)=>jsxRuntime.jsxs("article",{className:"node transaction_param",onClick:()=>console.log(t),onKeyUp:()=>console.log(t),children:[jsxRuntime.jsxs("span",{className:"detail",children:[ce(n),": "]}),jsxRuntime.jsx("span",{className:"summary",children:typeof n=="object"&&n!==null&&"type"in n&&"target"in n?jsxRuntime.jsx(jsxRuntime.Fragment,{children:JSON.stringify(n.type)}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:JSON.stringify(n)})})]},"param"+o))]}),jsxRuntime.jsxs("section",{className:"node transaction_output",children:[jsxRuntime.jsx("span",{className:"detail",children:"output: "}),jsxRuntime.jsx("span",{className:"detail",children:ce(t.output)}),t.output?jsxRuntime.jsxs("span",{className:"summary",children:[": ",JSON.stringify(t.output)]}):null]}),jsxRuntime.jsxs("section",{className:"transaction_impact",children:[jsxRuntime.jsx("span",{className:"detail",children:"impact: "}),t.atomUpdates.filter(n=>!n.key.startsWith("\u{1F441}\u200D\u{1F5E8}")).map((n,o)=>jsxRuntime.jsx(U.AtomUpdate,{serialNumber:o,atomUpdate:n},`${t.key}:${o}:${n.key}`))]})]})]}),li=({timelineUpdate:e})=>jsxRuntime.jsxs("article",{className:"node timeline_update",children:[jsxRuntime.jsx("header",{children:jsxRuntime.jsxs("h4",{children:[e.timestamp,": ",e.type," (",e.key,")"]})}),jsxRuntime.jsx("main",{children:e.type==="transaction_update"?e.atomUpdates.filter(t=>!t.key.startsWith("\u{1F441}\u200D\u{1F5E8}")).map((t,n)=>jsxRuntime.jsx(U.AtomUpdate,{serialNumber:n,atomUpdate:t},`${e.key}:${n}:${t.key}`)):e.type==="selector_update"?e.atomUpdates.filter(t=>!t.key.startsWith("\u{1F441}\u200D\u{1F5E8}")).map((t,n)=>jsxRuntime.jsx(U.AtomUpdate,{serialNumber:n,atomUpdate:t},`${e.key}:${n}:${t.key}`)):e.type==="atom_update"?jsxRuntime.jsx(U.AtomUpdate,{serialNumber:e.timestamp,atomUpdate:e}):null})]}),U={AtomUpdate:ai,TransactionUpdate:pi,TimelineUpdate:li};var Go=()=>jsxRuntime.jsx("span",{className:"you_are_here",children:"you are here"}),fi=({token:e,isOpenState:t,timelineState:n})=>{let o=react.useO(n),[r,s]=react.useIO(t);return jsxRuntime.jsxs("section",{className:"node timeline_log",children:[jsxRuntime.jsxs("header",{children:[jsxRuntime.jsx(X.OpenClose,{isOpen:r,setIsOpen:s}),jsxRuntime.jsxs("label",{children:[jsxRuntime.jsx("h2",{children:e.key}),jsxRuntime.jsxs("span",{className:"detail length",children:["(",o.at,"/",o.history.length,")"]}),jsxRuntime.jsx("span",{className:"gap"}),jsxRuntime.jsxs("nav",{children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>atom_io.undo(e),disabled:o.at===0,children:"undo"}),jsxRuntime.jsx("button",{type:"button",onClick:()=>atom_io.redo(e),disabled:o.at===o.history.length,children:"redo"})]})]})]}),r?jsxRuntime.jsx("main",{children:o.history.map((i,a)=>jsxRuntime.jsxs(Wo.Fragment,{children:[a===o.at?jsxRuntime.jsx(Go,{}):null,jsxRuntime.jsx(U.TimelineUpdate,{timelineUpdate:i}),a===o.history.length-1&&o.at===o.history.length?jsxRuntime.jsx(Go,{}):null]},i.key+a+o.at))}):null]})},Qo=()=>{let e=react.useO(er);return jsxRuntime.jsx("article",{className:"index timeline_index",children:e.filter(t=>!t.key.startsWith("\u{1F441}\u200D\u{1F5E8}")).map(t=>jsxRuntime.jsx(fi,{token:t,isOpenState:V(t.key),timelineState:tr(t.key)},t.key))})};var bi=({token:e,isOpenState:t,logState:n})=>{let o=react.useO(n),[r,s]=react.useIO(t);return jsxRuntime.jsxs("section",{className:"node transaction_log",children:[jsxRuntime.jsxs("header",{children:[jsxRuntime.jsx(X.OpenClose,{isOpen:r,setIsOpen:s}),jsxRuntime.jsxs("label",{children:[jsxRuntime.jsx("h2",{children:e.key}),jsxRuntime.jsxs("span",{className:"detail length",children:["(",o.length,")"]})]})]}),r?jsxRuntime.jsx("main",{children:o.map((i,a)=>jsxRuntime.jsx(U.TransactionUpdate,{serialNumber:a,transactionUpdate:i},i.key+a))}):null]})},or=()=>{let e=react.useO(rr);return jsxRuntime.jsx("article",{className:"index transaction_index",children:e.filter(t=>!t.key.startsWith("\u{1F441}\u200D\u{1F5E8}")).map(t=>jsxRuntime.jsx(bi,{token:t,isOpenState:V(t.key),logState:sr(t.key)},t.key))})};var Ed=()=>{let e=Wo.useRef(null),[t,n]=react.useIO(mr),[o,r]=react.useIO(ur),s=react.useO(dr),i=Wo.useRef(!1);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(framerMotion.motion.span,{ref:e,className:"atom_io_devtools_zone",style:{position:"fixed",top:0,left:0,right:0,bottom:0,pointerEvents:"none"}}),jsxRuntime.jsxs(framerMotion.motion.main,{drag:!0,dragConstraints:e,className:"atom_io_devtools",transition:framerMotion.spring,style:t?{}:{backgroundColor:"#0000",borderColor:"#0000",maxHeight:28,maxWidth:33},children:[t?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs(framerMotion.motion.header,{children:[jsxRuntime.jsx("h1",{children:"atom.io"}),jsxRuntime.jsx("nav",{children:s.map(a=>jsxRuntime.jsx("button",{type:"button",className:a===o?"active":"",onClick:()=>r(a),disabled:a===o,children:a},a))})]}),jsxRuntime.jsx(framerMotion.motion.main,{children:jsxRuntime.jsx(framerMotion.LayoutGroup,{children:o==="atoms"?jsxRuntime.jsx(Jt,{tokenIndex:lr}):o==="selectors"?jsxRuntime.jsx(Jt,{tokenIndex:cr}):o==="transactions"?jsxRuntime.jsx(or,{}):o==="timelines"?jsxRuntime.jsx(Qo,{}):null})})]}):null,jsxRuntime.jsx("footer",{children:jsxRuntime.jsx("button",{type:"button",onMouseDown:()=>i.current=!1,onMouseMove:()=>i.current=!0,onMouseUp:()=>{i.current||n(a=>!a);},children:"\u{1F441}\u200D\u{1F5E8}"})})]})]})};var {atomIndex:lr,selectorIndex:cr,transactionIndex:rr,findTransactionLogState:sr,timelineIndex:er,findTimelineState:tr}=introspection.attachIntrospectionStates(),mr=atom_io.atom({key:"\u{1F441}\u200D\u{1F5E8} Devtools Are Open",default:!0,effects:[webEffects.lazyLocalStorageEffect("\u{1F441}\u200D\u{1F5E8} Devtools Are Open")]}),ur=atom_io.atom({key:"\u{1F441}\u200D\u{1F5E8} Devtools View Selection",default:"atoms",effects:[webEffects.lazyLocalStorageEffect("\u{1F441}\u200D\u{1F5E8} Devtools View")]}),dr=atom_io.atom({key:"\u{1F441}\u200D\u{1F5E8} Devtools View Options",default:["atoms","selectors","transactions","timelines"],effects:[webEffects.lazyLocalStorageEffect("\u{1F441}\u200D\u{1F5E8} Devtools View Options")]}),V=atom_io.atomFamily({key:"\u{1F441}\u200D\u{1F5E8} Devtools View Is Open",default:!1,effects:e=>[webEffects.lazyLocalStorageEffect(e+":view-is-open")]}),vt=new le({number:e=>typeof e=="number",string:e=>typeof e=="string",boolean:e=>typeof e=="boolean",null:e=>e===null}),Oi=new le({object:v,array:e=>Array.isArray(e)}),Xo=new je(vt,Oi,{number:Gt,string:Zt,boolean:Qt,null:()=>({summary:"No Change"}),object:tt,array:en});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
|
+
|
|
32
|
+
var __defProp = Object.defineProperty;
|
|
33
|
+
var __defProps = Object.defineProperties;
|
|
34
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
35
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
36
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
37
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
38
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
39
|
+
var __spreadValues = (a2, b2) => {
|
|
40
|
+
for (var prop in b2 || (b2 = {}))
|
|
41
|
+
if (__hasOwnProp.call(b2, prop))
|
|
42
|
+
__defNormalProp(a2, prop, b2[prop]);
|
|
43
|
+
if (__getOwnPropSymbols)
|
|
44
|
+
for (var prop of __getOwnPropSymbols(b2)) {
|
|
45
|
+
if (__propIsEnum.call(b2, prop))
|
|
46
|
+
__defNormalProp(a2, prop, b2[prop]);
|
|
47
|
+
}
|
|
48
|
+
return a2;
|
|
49
|
+
};
|
|
50
|
+
var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
|
|
51
|
+
var __restKey = (key) => typeof key === "symbol" ? key : key + "";
|
|
52
|
+
var __objRest = (source, exclude) => {
|
|
53
|
+
var target = {};
|
|
54
|
+
for (var prop in source)
|
|
55
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
56
|
+
target[prop] = source[prop];
|
|
57
|
+
if (source != null && __getOwnPropSymbols)
|
|
58
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
59
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
60
|
+
target[prop] = source[prop];
|
|
61
|
+
}
|
|
62
|
+
return target;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// ../../anvl/src/function/pipe.ts
|
|
66
|
+
function pipe(a2, ab, bc, cd, de, ef, fg, gh, hi) {
|
|
67
|
+
switch (arguments.length) {
|
|
68
|
+
case 1:
|
|
69
|
+
return a2;
|
|
70
|
+
case 2:
|
|
71
|
+
return ab(a2);
|
|
72
|
+
case 3:
|
|
73
|
+
return bc(ab(a2));
|
|
74
|
+
case 4:
|
|
75
|
+
return cd(bc(ab(a2)));
|
|
76
|
+
case 5:
|
|
77
|
+
return de(cd(bc(ab(a2))));
|
|
78
|
+
case 6:
|
|
79
|
+
return ef(de(cd(bc(ab(a2)))));
|
|
80
|
+
case 7:
|
|
81
|
+
return fg(ef(de(cd(bc(ab(a2))))));
|
|
82
|
+
case 8:
|
|
83
|
+
return gh(fg(ef(de(cd(bc(ab(a2)))))));
|
|
84
|
+
case 9:
|
|
85
|
+
return hi(gh(fg(ef(de(cd(bc(ab(a2))))))));
|
|
86
|
+
default: {
|
|
87
|
+
let ret = arguments[0];
|
|
88
|
+
for (let i = 1; i < arguments.length; i++) {
|
|
89
|
+
ret = arguments[i](ret);
|
|
90
|
+
}
|
|
91
|
+
return ret;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ../../anvl/src/function/index.ts
|
|
97
|
+
var doNothing = () => void 0;
|
|
98
|
+
var become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(
|
|
99
|
+
originalThing instanceof Function ? originalThing() : originalThing
|
|
100
|
+
) : nextVersionOfThing;
|
|
101
|
+
var isModifier = (validate) => (sample) => {
|
|
102
|
+
const sampleIsValid = validate(sample);
|
|
103
|
+
if (!sampleIsValid) {
|
|
104
|
+
throw new Error(`Invalid test case: JSON.stringify(${sample})`);
|
|
105
|
+
}
|
|
106
|
+
return (input) => {
|
|
107
|
+
if (typeof input !== `function`)
|
|
108
|
+
return false;
|
|
109
|
+
const testResult = input(sample);
|
|
110
|
+
return validate(testResult);
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
var pass = (...params) => (fn) => fn(...params);
|
|
114
|
+
var raiseError = (message) => {
|
|
115
|
+
throw new Error(message);
|
|
116
|
+
};
|
|
117
|
+
var fallback = (fn, fallbackValue) => {
|
|
118
|
+
try {
|
|
119
|
+
return fn();
|
|
120
|
+
} catch (_) {
|
|
121
|
+
return fallbackValue;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
// ../../anvl/src/array/venn.ts
|
|
126
|
+
var includesAll = (items) => (array) => {
|
|
127
|
+
for (const item of items) {
|
|
128
|
+
if (!array.includes(item))
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
133
|
+
var comprises = (items) => (array) => includesAll(items)(array) && includesAll(array)(items);
|
|
134
|
+
|
|
135
|
+
// ../../anvl/src/array/index.ts
|
|
136
|
+
var isArray = (isType) => (input) => Array.isArray(input) && input.every((item) => isType(item));
|
|
137
|
+
var map = (f) => (a2) => a2.map(f);
|
|
138
|
+
var every = (f = Boolean) => (a2) => a2.every(f);
|
|
139
|
+
var allTrue = every((x) => x === true);
|
|
140
|
+
var addTo = (a2) => (x) => a2.includes(x) ? a2 : [...a2, x];
|
|
141
|
+
var isEmptyArray = (input) => Array.isArray(input) && input.length === 0;
|
|
142
|
+
var isOneOf = (...args) => (input) => args.includes(input);
|
|
143
|
+
|
|
144
|
+
// ../../anvl/src/nullish/index.ts
|
|
145
|
+
var isUndefined = (input) => input === void 0;
|
|
146
|
+
var ifDefined = (validate) => (input) => isUndefined(input) || validate(input);
|
|
147
|
+
var ifNullish = (alt) => (input) => input != null ? input : alt;
|
|
148
|
+
|
|
149
|
+
// ../../anvl/src/object/access.ts
|
|
150
|
+
var access = (k) => Object.assign((obj) => obj[k], {
|
|
151
|
+
in: (obj) => obj[k]
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// ../../anvl/src/object/entries.ts
|
|
155
|
+
var recordToEntries = (obj) => Object.entries(obj);
|
|
156
|
+
var entriesToRecord = (entries) => Object.fromEntries(entries);
|
|
157
|
+
|
|
158
|
+
// ../../anvl/src/object/mapObject.ts
|
|
159
|
+
var mapObject = (obj, fn) => pipe(
|
|
160
|
+
obj,
|
|
161
|
+
recordToEntries,
|
|
162
|
+
map(([key, val]) => [key, fn(val, key)]),
|
|
163
|
+
entriesToRecord
|
|
164
|
+
);
|
|
165
|
+
var mob = (fn) => (obj) => mapObject(obj, fn);
|
|
166
|
+
|
|
167
|
+
// ../../anvl/src/object/refinement.ts
|
|
168
|
+
var isNonNullObject = (input) => typeof input === `object` && input !== null;
|
|
169
|
+
var isPlainObject = (input) => isNonNullObject(input) && Object.getPrototypeOf(input) === Object.prototype;
|
|
170
|
+
var isEmptyObject = (input) => isPlainObject(input) && Object.keys(input).length === 0;
|
|
171
|
+
var isRecord = (isKey, isValue) => (input) => isPlainObject(input) && Object.entries(input).every(([k, v]) => isKey(k) && isValue(v));
|
|
172
|
+
var hasProperties = (isValue, options = { allowExtraProperties: false }) => {
|
|
173
|
+
const name = `{${recordToEntries(
|
|
174
|
+
isValue
|
|
175
|
+
).map(([k, v]) => String(k) + `:` + v.name).join(`,`)}}`;
|
|
176
|
+
const _ = {
|
|
177
|
+
[name]: (input) => isPlainObject(input) && pipe(
|
|
178
|
+
isValue,
|
|
179
|
+
Object.entries,
|
|
180
|
+
every(([key, val]) => key in input || val(void 0))
|
|
181
|
+
) && pipe(
|
|
182
|
+
input,
|
|
183
|
+
mob(
|
|
184
|
+
(val, key) => pipe(
|
|
185
|
+
isValue,
|
|
186
|
+
access(key),
|
|
187
|
+
ifNullish(() => options.allowExtraProperties),
|
|
188
|
+
pass(val)
|
|
189
|
+
)
|
|
190
|
+
),
|
|
191
|
+
Object.values,
|
|
192
|
+
allTrue
|
|
193
|
+
)
|
|
194
|
+
};
|
|
195
|
+
return _[name];
|
|
196
|
+
};
|
|
197
|
+
var ALLOW_EXTENSION = { allowExtraProperties: true };
|
|
198
|
+
var doesExtend = (isValue) => hasProperties(isValue, ALLOW_EXTENSION);
|
|
199
|
+
var DO_NOT_ALLOW_EXTENSION = { allowExtraProperties: false };
|
|
200
|
+
var hasExactProperties = (isValue) => hasProperties(isValue, DO_NOT_ALLOW_EXTENSION);
|
|
201
|
+
|
|
202
|
+
// ../../anvl/src/object/sprawl.ts
|
|
203
|
+
var sprawl = (tree, inspector) => {
|
|
204
|
+
const walk = (path, node) => {
|
|
205
|
+
const inspect = (path2, node2) => {
|
|
206
|
+
const result2 = inspector(path2, node2);
|
|
207
|
+
if (result2)
|
|
208
|
+
return result2;
|
|
209
|
+
return null;
|
|
210
|
+
};
|
|
211
|
+
const result = inspect(path, node);
|
|
212
|
+
if ((result == null ? void 0 : result.jobComplete) || (result == null ? void 0 : result.pathComplete)) {
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
const childEntries = Array.isArray(node) ? node.map((v, i) => [i, v]) : isPlainObject(node) ? Object.entries(node) : [];
|
|
216
|
+
for (const [k, v] of childEntries) {
|
|
217
|
+
const subResult = walk([...path, k], v);
|
|
218
|
+
if (subResult == null ? void 0 : subResult.jobComplete) {
|
|
219
|
+
return subResult;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return {};
|
|
223
|
+
};
|
|
224
|
+
walk([], tree);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// ../../anvl/src/object/index.ts
|
|
228
|
+
var treeShake = (shouldDiscard = isUndefined) => (obj) => {
|
|
229
|
+
const newObj = {};
|
|
230
|
+
const entries = Object.entries(obj);
|
|
231
|
+
entries.forEach(
|
|
232
|
+
([key, val]) => !shouldDiscard(val, key) ? newObj[key] = val : null
|
|
233
|
+
);
|
|
234
|
+
return newObj;
|
|
235
|
+
};
|
|
236
|
+
var delve = (obj, path) => {
|
|
237
|
+
const found = path.reduce((acc, key) => acc == null ? void 0 : acc[key], obj);
|
|
238
|
+
return found === void 0 ? new Error(`Not found`) : { found };
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// ../../anvl/src/refinement/refinery.ts
|
|
242
|
+
var Refinery = class {
|
|
243
|
+
constructor(supported) {
|
|
244
|
+
this.supported = supported;
|
|
245
|
+
}
|
|
246
|
+
refine(input) {
|
|
247
|
+
for (const [key, refiner] of Object.entries(this.supported)) {
|
|
248
|
+
try {
|
|
249
|
+
if (
|
|
250
|
+
// @ts-expect-error that's the point
|
|
251
|
+
refiner(input) === true && refiner !== Boolean
|
|
252
|
+
) {
|
|
253
|
+
return { type: key, data: input };
|
|
254
|
+
}
|
|
255
|
+
} catch (e) {
|
|
256
|
+
try {
|
|
257
|
+
if (input instanceof refiner) {
|
|
258
|
+
return { type: key, data: input };
|
|
259
|
+
}
|
|
260
|
+
} catch (e2) {
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
var jsonRefinery = new Refinery({
|
|
268
|
+
number: (input) => typeof input === `number`,
|
|
269
|
+
string: (input) => typeof input === `string`,
|
|
270
|
+
boolean: (input) => typeof input === `boolean`,
|
|
271
|
+
object: isPlainObject,
|
|
272
|
+
array: (input) => Array.isArray(input),
|
|
273
|
+
null: (input) => input === null
|
|
274
|
+
});
|
|
275
|
+
var discoverType = (input) => {
|
|
276
|
+
if (input === void 0) {
|
|
277
|
+
return `undefined`;
|
|
278
|
+
}
|
|
279
|
+
const refined = jsonRefinery.refine(input);
|
|
280
|
+
if (refined) {
|
|
281
|
+
return refined.type;
|
|
282
|
+
}
|
|
283
|
+
return Object.getPrototypeOf(input).constructor.name;
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
// ../../anvl/src/tree/differ.ts
|
|
287
|
+
function diffNumber(a2, b2) {
|
|
288
|
+
const sign = a2 < b2 ? `+` : `-`;
|
|
289
|
+
return {
|
|
290
|
+
summary: `${sign}${Math.abs(a2 - b2)} (${a2} \u2192 ${b2})`
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
function diffString(a2, b2) {
|
|
294
|
+
const sign = a2.length < b2.length ? `+` : `-`;
|
|
295
|
+
return {
|
|
296
|
+
summary: `${sign}${Math.abs(a2.length - b2.length)} ("${a2}" \u2192 "${b2}")`
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function diffBoolean(a2, b2) {
|
|
300
|
+
return {
|
|
301
|
+
summary: `${a2} \u2192 ${b2}`
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function diffObject(a2, b2, recurse) {
|
|
305
|
+
let summary = ``;
|
|
306
|
+
const added = [];
|
|
307
|
+
const removed = [];
|
|
308
|
+
const changed = [];
|
|
309
|
+
sprawl(a2, (path, nodeA) => {
|
|
310
|
+
let key;
|
|
311
|
+
for (key of path) {
|
|
312
|
+
const nodeB = b2[key];
|
|
313
|
+
if (nodeB === void 0) {
|
|
314
|
+
removed.push([key, JSON.stringify(nodeA)]);
|
|
315
|
+
} else {
|
|
316
|
+
const delta = recurse(nodeA, nodeB);
|
|
317
|
+
if (delta.summary !== `No Change`) {
|
|
318
|
+
changed.push([key, delta]);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
sprawl(b2, (path, nodeB) => {
|
|
324
|
+
let key;
|
|
325
|
+
for (key of path) {
|
|
326
|
+
const nodeA = a2[key];
|
|
327
|
+
if (nodeA === void 0) {
|
|
328
|
+
added.push([key, JSON.stringify(nodeB)]);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
summary = `\uFF5E${changed.length} \uFF0B${added.length} \uFF0D${removed.length}`;
|
|
333
|
+
return {
|
|
334
|
+
summary,
|
|
335
|
+
added,
|
|
336
|
+
removed,
|
|
337
|
+
changed
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function diffArray(a2, b2, recurse) {
|
|
341
|
+
return diffObject(a2, b2, recurse);
|
|
342
|
+
}
|
|
343
|
+
var Differ = class {
|
|
344
|
+
constructor(leafRefinery, treeRefinery, diffFunctions) {
|
|
345
|
+
this.leafRefinery = leafRefinery;
|
|
346
|
+
this.treeRefinery = treeRefinery;
|
|
347
|
+
this.leafDiffers = {};
|
|
348
|
+
this.treeDiffers = {};
|
|
349
|
+
for (const key of Object.keys(leafRefinery.supported)) {
|
|
350
|
+
const diffFunction = diffFunctions[key];
|
|
351
|
+
this.leafDiffers[key] = diffFunction;
|
|
352
|
+
}
|
|
353
|
+
for (const key of Object.keys(treeRefinery.supported)) {
|
|
354
|
+
const diffFunction = diffFunctions[key];
|
|
355
|
+
this.treeDiffers[key] = diffFunction;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
diff(a2, b2) {
|
|
359
|
+
var _a2, _b;
|
|
360
|
+
if (a2 === b2) {
|
|
361
|
+
return { summary: `No Change` };
|
|
362
|
+
}
|
|
363
|
+
try {
|
|
364
|
+
if (JSON.stringify(a2) === JSON.stringify(b2)) {
|
|
365
|
+
return { summary: `No Change` };
|
|
366
|
+
}
|
|
367
|
+
} catch (thrown) {
|
|
368
|
+
console.error(`Error stringifying`, a2, b2);
|
|
369
|
+
}
|
|
370
|
+
const aRefined = (_a2 = this.leafRefinery.refine(a2)) != null ? _a2 : this.treeRefinery.refine(a2);
|
|
371
|
+
const bRefined = (_b = this.leafRefinery.refine(b2)) != null ? _b : this.treeRefinery.refine(b2);
|
|
372
|
+
if (aRefined !== null && bRefined !== null) {
|
|
373
|
+
if (aRefined.type === bRefined.type) {
|
|
374
|
+
if (aRefined.type in this.leafDiffers) {
|
|
375
|
+
const delta = this.leafDiffers[aRefined.type](
|
|
376
|
+
aRefined.data,
|
|
377
|
+
bRefined.data
|
|
378
|
+
);
|
|
379
|
+
return delta;
|
|
380
|
+
}
|
|
381
|
+
if (aRefined.type in this.treeDiffers) {
|
|
382
|
+
const delta = this.treeDiffers[aRefined.type](
|
|
383
|
+
aRefined.data,
|
|
384
|
+
bRefined.data,
|
|
385
|
+
(x, y) => this.diff(x, y)
|
|
386
|
+
);
|
|
387
|
+
return delta;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
const typeA = discoverType(a2);
|
|
392
|
+
const typeB = discoverType(b2);
|
|
393
|
+
if (typeA === typeB) {
|
|
394
|
+
return {
|
|
395
|
+
summary: `${typeA} \u2192 ${typeB}`
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
summary: `Type change: ${typeA} \u2192 ${typeB}`
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
// ../../anvl/src/json/index.ts
|
|
405
|
+
var stringifyJson = (json) => JSON.stringify(json);
|
|
406
|
+
var JSON_TYPE_NAMES = [
|
|
407
|
+
`array`,
|
|
408
|
+
`boolean`,
|
|
409
|
+
`null`,
|
|
410
|
+
`number`,
|
|
411
|
+
`object`,
|
|
412
|
+
`string`
|
|
413
|
+
];
|
|
414
|
+
var JSON_DEFAULTS = {
|
|
415
|
+
array: [],
|
|
416
|
+
boolean: false,
|
|
417
|
+
null: null,
|
|
418
|
+
number: 0,
|
|
419
|
+
object: {},
|
|
420
|
+
string: ``
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
// ../../anvl/src/primitive/index.ts
|
|
424
|
+
var isString = (input) => {
|
|
425
|
+
return typeof input === `string`;
|
|
426
|
+
};
|
|
427
|
+
var isNumber = (input) => {
|
|
428
|
+
return typeof input === `number`;
|
|
429
|
+
};
|
|
430
|
+
var isBoolean = (input) => {
|
|
431
|
+
return typeof input === `boolean`;
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
// ../../anvl/src/refinement/refine-json.ts
|
|
435
|
+
var JSON_PROTOTYPES = [
|
|
436
|
+
`Array`,
|
|
437
|
+
`Boolean`,
|
|
438
|
+
`Number`,
|
|
439
|
+
`Object`,
|
|
440
|
+
`String`
|
|
441
|
+
];
|
|
442
|
+
var refineJsonType = (data) => data === null ? { type: `null`, data: null } : isBoolean(data) ? { type: `boolean`, data } : isNumber(data) ? { type: `number`, data } : isString(data) ? { type: `string`, data } : Array.isArray(data) ? { type: `array`, data } : isPlainObject(data) ? { type: `object`, data } : raiseError(
|
|
443
|
+
data === void 0 ? `undefined passed to refineJsonType. This is not valid JSON.` : `${stringifyJson(data)} with prototype "${Object.getPrototypeOf(data).constructor.name}" passed to refineJsonType. This is not valid JSON.`
|
|
444
|
+
);
|
|
445
|
+
var isJson = (input) => {
|
|
446
|
+
var _a2;
|
|
447
|
+
if (input === null)
|
|
448
|
+
return true;
|
|
449
|
+
if (input === void 0)
|
|
450
|
+
return false;
|
|
451
|
+
const prototype = (_a2 = Object.getPrototypeOf(input)) == null ? void 0 : _a2.constructor.name;
|
|
452
|
+
const isJson2 = JSON_PROTOTYPES.includes(prototype);
|
|
453
|
+
return isJson2;
|
|
454
|
+
};
|
|
455
|
+
var OpenClose = ({ isOpen, setIsOpen, disabled }) => {
|
|
456
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
457
|
+
"button",
|
|
458
|
+
{
|
|
459
|
+
type: "button",
|
|
460
|
+
className: `carat ${isOpen ? `open` : `closed`}`,
|
|
461
|
+
onClick: () => setIsOpen((isOpen2) => !isOpen2),
|
|
462
|
+
disabled,
|
|
463
|
+
children: "\u25B6"
|
|
464
|
+
}
|
|
465
|
+
);
|
|
466
|
+
};
|
|
467
|
+
var button = {
|
|
468
|
+
OpenClose
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
// ../../anvl/src/refinement/can-exist.ts
|
|
472
|
+
var canExist = (_) => true;
|
|
473
|
+
|
|
474
|
+
// ../../anvl/src/refinement/cannot-exist.ts
|
|
475
|
+
var cannotExist = (_) => false;
|
|
476
|
+
|
|
477
|
+
// ../../anvl/src/refinement/is-union.ts
|
|
478
|
+
var mustSatisfyOneOfTheFollowing = (isTypeA, logging = false, refinements = [isTypeA]) => {
|
|
479
|
+
const name = `(${refinements.map((r) => (r == null ? void 0 : r.name) || `anon`).join(` | `)})`;
|
|
480
|
+
const _ = {
|
|
481
|
+
[name]: (input) => refinements.some(
|
|
482
|
+
(refinement) => {
|
|
483
|
+
var _a2;
|
|
484
|
+
return logging && console.log(
|
|
485
|
+
refinements.map((r) => r.name || `anon`).join(` | `),
|
|
486
|
+
`>`,
|
|
487
|
+
(_a2 = refinement.name) != null ? _a2 : `anon`,
|
|
488
|
+
`:`,
|
|
489
|
+
refinement(input)
|
|
490
|
+
), refinement(input);
|
|
491
|
+
}
|
|
492
|
+
)
|
|
493
|
+
};
|
|
494
|
+
const checkTypes = Object.assign(_[name], {
|
|
495
|
+
or: (isTypeB) => mustSatisfyOneOfTheFollowing(isTypeB, logging, [...refinements, isTypeB])
|
|
496
|
+
});
|
|
497
|
+
return checkTypes;
|
|
498
|
+
};
|
|
499
|
+
var isUnion = mustSatisfyOneOfTheFollowing(cannotExist);
|
|
500
|
+
|
|
501
|
+
// ../../anvl/src/refinement/is-intersection.ts
|
|
502
|
+
function mustSatisfyAllOfTheFollowing(isTypeA, logging = false, refinements = [isTypeA]) {
|
|
503
|
+
const name = `(${refinements.map((r) => (r == null ? void 0 : r.name) || `anon`).join(` & `)})`;
|
|
504
|
+
const _ = {
|
|
505
|
+
[name]: (input) => refinements.every(
|
|
506
|
+
(refinement) => (logging && console.log(
|
|
507
|
+
refinements.map((r) => r.name || `anon`).join(` & `),
|
|
508
|
+
`>`,
|
|
509
|
+
refinement.name || `anon`,
|
|
510
|
+
`:`,
|
|
511
|
+
refinement(input)
|
|
512
|
+
), refinement(input))
|
|
513
|
+
)
|
|
514
|
+
};
|
|
515
|
+
const checkTypes = Object.assign(_[name], {
|
|
516
|
+
and: (isTypeB) => mustSatisfyAllOfTheFollowing(isTypeB, logging, [
|
|
517
|
+
...refinements,
|
|
518
|
+
isTypeB
|
|
519
|
+
])
|
|
520
|
+
});
|
|
521
|
+
return checkTypes;
|
|
522
|
+
}
|
|
523
|
+
var isIntersection = mustSatisfyAllOfTheFollowing(canExist);
|
|
524
|
+
|
|
525
|
+
// ../../anvl/src/refinement/index.ts
|
|
526
|
+
var isLiteral = (value) => (input) => input === value;
|
|
527
|
+
var isWithin = (args) => (input) => args.includes(input);
|
|
528
|
+
|
|
529
|
+
// ../../anvl/src/join/core-relation-data.ts
|
|
530
|
+
var RELATION_TYPES = [`1:1`, `1:n`, `n:n`];
|
|
531
|
+
var isRelationType = (x) => RELATION_TYPES.includes(x);
|
|
532
|
+
var EMPTY_RELATION_DATA = {
|
|
533
|
+
contents: {},
|
|
534
|
+
relations: {},
|
|
535
|
+
relationType: `n:n`,
|
|
536
|
+
a: `from`,
|
|
537
|
+
b: `to`
|
|
538
|
+
};
|
|
539
|
+
var isRelationData = ({
|
|
540
|
+
from: a2 = `from`,
|
|
541
|
+
to: b2 = `to`,
|
|
542
|
+
isContent
|
|
543
|
+
} = {}) => (input) => {
|
|
544
|
+
return hasExactProperties({
|
|
545
|
+
contents: isContent ? isRecord(isString, isContent) : hasExactProperties({}),
|
|
546
|
+
relations: isRecord(isString, isArray(isString)),
|
|
547
|
+
relationType: isRelationType,
|
|
548
|
+
a: isLiteral(a2),
|
|
549
|
+
b: isLiteral(b2)
|
|
550
|
+
})(input);
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
// ../../anvl/src/join/get-related-ids.ts
|
|
554
|
+
var getRelatedIds = (relationMap, id) => {
|
|
555
|
+
var _a2;
|
|
556
|
+
return (_a2 = relationMap.relations[id]) != null ? _a2 : [];
|
|
557
|
+
};
|
|
558
|
+
var getRelatedId = (relationMap, id) => {
|
|
559
|
+
const relations = getRelatedIds(relationMap, id);
|
|
560
|
+
if (relations.length > 1) {
|
|
561
|
+
console.warn(
|
|
562
|
+
`entry with id ${id} was not expected to have multiple relations`
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
return relations[0];
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
// ../../anvl/src/join/make-json-interface.ts
|
|
569
|
+
var makeJsonInterface = (join, ...params) => {
|
|
570
|
+
const isContent = params[0];
|
|
571
|
+
const { a: a2, b: b2 } = join;
|
|
572
|
+
const options = {
|
|
573
|
+
from: a2,
|
|
574
|
+
to: b2,
|
|
575
|
+
isContent
|
|
576
|
+
};
|
|
577
|
+
return {
|
|
578
|
+
toJson: (join2) => join2.toJSON(),
|
|
579
|
+
fromJson: (json) => Join.fromJSON(json, options)
|
|
580
|
+
};
|
|
581
|
+
};
|
|
582
|
+
|
|
583
|
+
// ../../anvl/src/join/relation-record.ts
|
|
584
|
+
var getRelationEntries = (relationMap, idA) => getRelatedIds(relationMap, idA).map((idB) => [
|
|
585
|
+
idB,
|
|
586
|
+
getContent(relationMap, idA, idB)
|
|
587
|
+
]);
|
|
588
|
+
var getRelationRecord = (relationMap, id) => Object.fromEntries(getRelationEntries(relationMap, id));
|
|
589
|
+
|
|
590
|
+
// ../../anvl/src/string/split.ts
|
|
591
|
+
var split = (separator) => (str) => str.split(separator);
|
|
592
|
+
|
|
593
|
+
// ../../anvl/src/join/remove-relation.ts
|
|
594
|
+
var removeSpecific = (current, idA, idB) => {
|
|
595
|
+
const isIdForRemoval = isOneOf(idA, idB);
|
|
596
|
+
return __spreadProps(__spreadValues({}, current), {
|
|
597
|
+
relations: pipe(
|
|
598
|
+
current.relations,
|
|
599
|
+
recordToEntries,
|
|
600
|
+
map(([id, relations]) => [
|
|
601
|
+
id,
|
|
602
|
+
isIdForRemoval(id) ? relations.filter((relation) => !isIdForRemoval(relation)) : relations
|
|
603
|
+
]),
|
|
604
|
+
entriesToRecord,
|
|
605
|
+
treeShake(isEmptyArray)
|
|
606
|
+
),
|
|
607
|
+
contents: pipe(
|
|
608
|
+
current.contents,
|
|
609
|
+
treeShake(
|
|
610
|
+
(_, key) => isString(key) && pipe(key, split(`/`), comprises([idA, idB]))
|
|
611
|
+
)
|
|
612
|
+
)
|
|
613
|
+
});
|
|
614
|
+
};
|
|
615
|
+
var removeAll = (current, idToRemove) => {
|
|
616
|
+
const next = __spreadProps(__spreadValues({}, current), {
|
|
617
|
+
relations: pipe(
|
|
618
|
+
current.relations,
|
|
619
|
+
recordToEntries,
|
|
620
|
+
map(([id, relations]) => [
|
|
621
|
+
id,
|
|
622
|
+
relations.filter((relation) => relation !== idToRemove)
|
|
623
|
+
]),
|
|
624
|
+
entriesToRecord,
|
|
625
|
+
treeShake((val, key) => key === idToRemove || isEmptyArray(val))
|
|
626
|
+
),
|
|
627
|
+
contents: pipe(
|
|
628
|
+
current.contents,
|
|
629
|
+
treeShake(
|
|
630
|
+
(_, key) => isString(key) && key.split(`/`).includes(idToRemove)
|
|
631
|
+
)
|
|
632
|
+
)
|
|
633
|
+
});
|
|
634
|
+
return next;
|
|
635
|
+
};
|
|
636
|
+
var removeRelation = (current, relation) => {
|
|
637
|
+
const idA = relation[current.a];
|
|
638
|
+
const idB = relation[current.b];
|
|
639
|
+
return idB ? removeSpecific(current, idA, idB) : removeAll(current, idA);
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
// ../../anvl/src/join/set-relation.ts
|
|
643
|
+
var setManyToMany = (map2, idA, idB, ...rest) => {
|
|
644
|
+
var _a2, _b;
|
|
645
|
+
const next = __spreadProps(__spreadValues({}, map2), {
|
|
646
|
+
relations: __spreadProps(__spreadValues({}, map2.relations), {
|
|
647
|
+
[idA]: addTo((_a2 = map2.relations[idA]) != null ? _a2 : [])(idB),
|
|
648
|
+
[idB]: addTo((_b = map2.relations[idB]) != null ? _b : [])(idA)
|
|
649
|
+
})
|
|
650
|
+
});
|
|
651
|
+
const content = rest[0];
|
|
652
|
+
return content ? setContent(next, idA, idB, content) : next;
|
|
653
|
+
};
|
|
654
|
+
var removeEmpties = treeShake(isEmptyArray);
|
|
655
|
+
var set1ToMany = (current, leaderId, followerId, ...rest) => {
|
|
656
|
+
var _a2;
|
|
657
|
+
const relations = __spreadValues({}, current.relations);
|
|
658
|
+
const prevLeaderId = getRelatedId(current, followerId);
|
|
659
|
+
const next = __spreadProps(__spreadValues({}, current), {
|
|
660
|
+
relations: removeEmpties(__spreadProps(__spreadValues(__spreadValues({}, relations), prevLeaderId && prevLeaderId !== leaderId && {
|
|
661
|
+
[prevLeaderId]: relations[prevLeaderId].filter(
|
|
662
|
+
(id) => id !== followerId
|
|
663
|
+
)
|
|
664
|
+
}), {
|
|
665
|
+
[followerId]: [leaderId],
|
|
666
|
+
[leaderId]: addTo((_a2 = relations[leaderId]) != null ? _a2 : [])(followerId)
|
|
667
|
+
}))
|
|
668
|
+
});
|
|
669
|
+
const content = rest[0];
|
|
670
|
+
return content ? setContent(next, leaderId, followerId, content) : next;
|
|
671
|
+
};
|
|
672
|
+
var set1To1 = (current, wifeId, husbandId, ...rest) => {
|
|
673
|
+
const prevWifeId = getRelatedId(current, husbandId);
|
|
674
|
+
const prevHusbandId = getRelatedId(current, wifeId);
|
|
675
|
+
const next = __spreadProps(__spreadValues({}, current), {
|
|
676
|
+
relations: removeEmpties(__spreadProps(__spreadValues(__spreadValues(__spreadValues({}, current.relations), prevWifeId && { [prevWifeId]: [] }), prevHusbandId && { [prevHusbandId]: [] }), {
|
|
677
|
+
[wifeId]: [husbandId],
|
|
678
|
+
[husbandId]: [wifeId]
|
|
679
|
+
}))
|
|
680
|
+
});
|
|
681
|
+
const content = rest[0];
|
|
682
|
+
return content ? setContent(next, wifeId, husbandId, content) : next;
|
|
683
|
+
};
|
|
684
|
+
var setRelationWithContent = (current, relation, ...rest) => {
|
|
685
|
+
const { [current.a]: idA, [current.b]: idB } = relation;
|
|
686
|
+
switch (current.relationType) {
|
|
687
|
+
case `1:1`:
|
|
688
|
+
return set1To1(current, idA, idB, ...rest);
|
|
689
|
+
case `1:n`:
|
|
690
|
+
return set1ToMany(current, idA, idB, ...rest);
|
|
691
|
+
case `n:n`:
|
|
692
|
+
return setManyToMany(current, idA, idB, ...rest);
|
|
693
|
+
}
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
// ../../anvl/src/join/relation-contents.ts
|
|
697
|
+
var makeContentId = (idA, idB) => [idA, idB].sort().join(`/`);
|
|
698
|
+
var getContent = (relationMap, idA, idB) => relationMap.contents[makeContentId(idA, idB)];
|
|
699
|
+
var setContent = (map2, idA, idB, content) => __spreadProps(__spreadValues({}, map2), {
|
|
700
|
+
contents: __spreadProps(__spreadValues({}, map2.contents), {
|
|
701
|
+
[makeContentId(idA, idB)]: content
|
|
702
|
+
})
|
|
703
|
+
});
|
|
704
|
+
var getRelations = (relationMap, id) => getRelationEntries(relationMap, id).map(
|
|
705
|
+
([id2, content]) => __spreadValues({
|
|
706
|
+
id: id2
|
|
707
|
+
}, content)
|
|
708
|
+
);
|
|
709
|
+
var setRelations = (current, subject, relations) => {
|
|
710
|
+
const idA = subject[current.a];
|
|
711
|
+
const idB = subject[current.b];
|
|
712
|
+
return pipe(
|
|
713
|
+
current,
|
|
714
|
+
(relationData) => {
|
|
715
|
+
const relatedIds = getRelatedIds(current, idA);
|
|
716
|
+
const removedIds = relatedIds.filter(
|
|
717
|
+
(id) => !relations.some((r) => r.id === id)
|
|
718
|
+
);
|
|
719
|
+
let step = relationData;
|
|
720
|
+
for (const id of removedIds) {
|
|
721
|
+
const remove = {
|
|
722
|
+
[current.a]: idA != null ? idA : id,
|
|
723
|
+
[current.b]: idB != null ? idB : id
|
|
724
|
+
};
|
|
725
|
+
step = removeRelation(step, remove);
|
|
726
|
+
}
|
|
727
|
+
return step;
|
|
728
|
+
},
|
|
729
|
+
(relationData) => {
|
|
730
|
+
let step = relationData;
|
|
731
|
+
for (const _a2 of relations) {
|
|
732
|
+
const _b = _a2, { id } = _b, rest = __objRest(_b, ["id"]);
|
|
733
|
+
const content = isEmptyObject(rest) ? void 0 : rest;
|
|
734
|
+
step = setRelationWithContent(
|
|
735
|
+
step,
|
|
736
|
+
{ [current.a]: idA != null ? idA : id, [current.b]: idB != null ? idB : id },
|
|
737
|
+
// @ts-expect-error hacky
|
|
738
|
+
content
|
|
739
|
+
);
|
|
740
|
+
}
|
|
741
|
+
return step;
|
|
742
|
+
},
|
|
743
|
+
(relationData) => {
|
|
744
|
+
const newlyOrderedIds = relations.map((r) => r.id);
|
|
745
|
+
return __spreadProps(__spreadValues({}, relationData), {
|
|
746
|
+
relations: __spreadProps(__spreadValues({}, relationData.relations), {
|
|
747
|
+
[idA != null ? idA : idB]: newlyOrderedIds
|
|
748
|
+
})
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
);
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
// ../../anvl/src/join/index.ts
|
|
755
|
+
var Join = class _Join {
|
|
756
|
+
constructor(json) {
|
|
757
|
+
this.a = `from`;
|
|
758
|
+
this.b = `to`;
|
|
759
|
+
this.makeJsonInterface = (...params) => {
|
|
760
|
+
return makeJsonInterface(this, ...params);
|
|
761
|
+
};
|
|
762
|
+
Object.assign(this, __spreadProps(__spreadValues(__spreadValues({}, EMPTY_RELATION_DATA), json), {
|
|
763
|
+
makeJsonInterface: this.makeJsonInterface
|
|
764
|
+
}));
|
|
765
|
+
}
|
|
766
|
+
toJSON() {
|
|
767
|
+
return {
|
|
768
|
+
relationType: this.relationType,
|
|
769
|
+
relations: this.relations,
|
|
770
|
+
contents: this.contents,
|
|
771
|
+
a: this.a,
|
|
772
|
+
b: this.b
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
static fromJSON(json, options) {
|
|
776
|
+
const isValid = isRelationData(options)(json);
|
|
777
|
+
if (isValid) {
|
|
778
|
+
return new _Join(json);
|
|
779
|
+
}
|
|
780
|
+
throw new Error(
|
|
781
|
+
`Saved JSON for this Join is invalid: ${JSON.stringify(json)}`
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
from(newA) {
|
|
785
|
+
return new _Join(__spreadProps(__spreadValues({}, this), { a: newA }));
|
|
786
|
+
}
|
|
787
|
+
to(newB) {
|
|
788
|
+
return new _Join(__spreadProps(__spreadValues({}, this), { b: newB }));
|
|
789
|
+
}
|
|
790
|
+
getRelatedId(id) {
|
|
791
|
+
return getRelatedId(this, id);
|
|
792
|
+
}
|
|
793
|
+
getRelatedIds(id) {
|
|
794
|
+
return getRelatedIds(this, id);
|
|
795
|
+
}
|
|
796
|
+
getContent(idA, idB) {
|
|
797
|
+
return getContent(this, idA, idB);
|
|
798
|
+
}
|
|
799
|
+
getRelationEntries(id) {
|
|
800
|
+
return getRelationEntries(this, id);
|
|
801
|
+
}
|
|
802
|
+
getRelationRecord(id) {
|
|
803
|
+
return getRelationRecord(this, id);
|
|
804
|
+
}
|
|
805
|
+
getRelation(id) {
|
|
806
|
+
return getRelations(this, id)[0];
|
|
807
|
+
}
|
|
808
|
+
getRelations(id) {
|
|
809
|
+
return getRelations(this, id);
|
|
810
|
+
}
|
|
811
|
+
setRelations(subject, relations) {
|
|
812
|
+
return new _Join(setRelations(this, subject, relations));
|
|
813
|
+
}
|
|
814
|
+
set(relation, ...rest) {
|
|
815
|
+
return new _Join(setRelationWithContent(this, relation, ...rest));
|
|
816
|
+
}
|
|
817
|
+
remove(relation) {
|
|
818
|
+
return new _Join(
|
|
819
|
+
removeRelation(this, relation)
|
|
820
|
+
);
|
|
821
|
+
}
|
|
822
|
+
};
|
|
823
|
+
var ElasticInput = React.forwardRef(function ElasticInputFC(props, ref) {
|
|
824
|
+
var _a2, _b, _c, _d;
|
|
825
|
+
const inputRef = React.useRef(null);
|
|
826
|
+
const spanRef = React.useRef(null);
|
|
827
|
+
const [inputWidth, setInputWidth] = React.useState(`auto`);
|
|
828
|
+
React.useImperativeHandle(ref, () => ({
|
|
829
|
+
focus: () => {
|
|
830
|
+
var _a3;
|
|
831
|
+
(_a3 = inputRef.current) == null ? void 0 : _a3.focus();
|
|
832
|
+
}
|
|
833
|
+
}));
|
|
834
|
+
const extraWidth = props.type === `number` ? 15 : 0;
|
|
835
|
+
React.useLayoutEffect(() => {
|
|
836
|
+
if (spanRef.current) {
|
|
837
|
+
setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
|
|
838
|
+
const interval = setInterval(() => {
|
|
839
|
+
if (spanRef.current) {
|
|
840
|
+
setInputWidth(`${spanRef.current.offsetWidth + extraWidth}px`);
|
|
841
|
+
}
|
|
842
|
+
}, 1e3);
|
|
843
|
+
return () => clearInterval(interval);
|
|
844
|
+
}
|
|
845
|
+
}, [(_a2 = inputRef.current) == null ? void 0 : _a2.value, props.value]);
|
|
846
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: `inline-block`, position: `relative` }, children: [
|
|
847
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
848
|
+
"input",
|
|
849
|
+
__spreadProps(__spreadValues({}, props), {
|
|
850
|
+
ref: inputRef,
|
|
851
|
+
style: __spreadValues({
|
|
852
|
+
padding: 0,
|
|
853
|
+
borderRadius: 0,
|
|
854
|
+
border: `none`,
|
|
855
|
+
fontFamily: `inherit`,
|
|
856
|
+
fontSize: `inherit`,
|
|
857
|
+
width: inputWidth
|
|
858
|
+
}, props.style)
|
|
859
|
+
})
|
|
860
|
+
),
|
|
861
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
862
|
+
"span",
|
|
863
|
+
{
|
|
864
|
+
ref: spanRef,
|
|
865
|
+
style: {
|
|
866
|
+
padding: (_b = props.style) == null ? void 0 : _b.padding,
|
|
867
|
+
position: `absolute`,
|
|
868
|
+
visibility: `hidden`,
|
|
869
|
+
// color: `red`,
|
|
870
|
+
whiteSpace: `pre`,
|
|
871
|
+
fontFamily: ((_c = props.style) == null ? void 0 : _c.fontFamily) || `inherit`,
|
|
872
|
+
fontSize: ((_d = props.style) == null ? void 0 : _d.fontSize) || `inherit`
|
|
873
|
+
},
|
|
874
|
+
children: props.value
|
|
875
|
+
}
|
|
876
|
+
)
|
|
877
|
+
] });
|
|
878
|
+
});
|
|
879
|
+
|
|
880
|
+
// ../../anvl/src/number/clamp.ts
|
|
881
|
+
var clampInto = (min, max) => (value) => value < min ? min : value > max ? max : value;
|
|
882
|
+
|
|
883
|
+
// ../../anvl/src/number/wrap.ts
|
|
884
|
+
var wrapInto = (min, max) => (value) => value < min ? max - (min - value) % (max - min) : min + (value - min) % (max - min);
|
|
885
|
+
function round(value, decimalPlaces) {
|
|
886
|
+
if (decimalPlaces === void 0)
|
|
887
|
+
return value;
|
|
888
|
+
const factor = 10 ** decimalPlaces;
|
|
889
|
+
return Math.round(value * factor) / factor;
|
|
890
|
+
}
|
|
891
|
+
var VALID_NON_NUMBERS = [``, `-`, `.`, `-.`];
|
|
892
|
+
var isValidNonNumber = (input) => VALID_NON_NUMBERS.includes(input);
|
|
893
|
+
var VALID_NON_NUMBER_INTERPRETATIONS = {
|
|
894
|
+
"": null,
|
|
895
|
+
"-": 0,
|
|
896
|
+
".": 0,
|
|
897
|
+
"-.": 0
|
|
898
|
+
};
|
|
899
|
+
var isDecimalInProgress = (input) => input === `0` || !isNaN(Number(input)) && input.includes(`.`);
|
|
900
|
+
var textToValue = (input, allowDecimal) => {
|
|
901
|
+
if (isValidNonNumber(input))
|
|
902
|
+
return VALID_NON_NUMBER_INTERPRETATIONS[input];
|
|
903
|
+
return allowDecimal ? parseFloat(input) : Math.round(parseFloat(input));
|
|
904
|
+
};
|
|
905
|
+
var DEFAULT_NUMBER_CONSTRAINTS = {
|
|
906
|
+
max: Infinity,
|
|
907
|
+
min: -Infinity,
|
|
908
|
+
decimalPlaces: 100,
|
|
909
|
+
nullable: true
|
|
910
|
+
};
|
|
911
|
+
var initRefinery = (constraints) => (input) => {
|
|
912
|
+
if (input === null && constraints.nullable === true) {
|
|
913
|
+
return null;
|
|
914
|
+
}
|
|
915
|
+
const { max, min, decimalPlaces } = __spreadValues(__spreadValues({}, DEFAULT_NUMBER_CONSTRAINTS), constraints);
|
|
916
|
+
const constrained = pipe(
|
|
917
|
+
input != null ? input : 0,
|
|
918
|
+
clampInto(min, max),
|
|
919
|
+
(n) => decimalPlaces ? round(n, decimalPlaces) : n
|
|
920
|
+
);
|
|
921
|
+
return constrained;
|
|
922
|
+
};
|
|
923
|
+
var valueToText = (numericValue) => {
|
|
924
|
+
if (numericValue === null || numericValue === void 0) {
|
|
925
|
+
return ``;
|
|
926
|
+
}
|
|
927
|
+
return numericValue.toString();
|
|
928
|
+
};
|
|
929
|
+
var NumberInput = ({
|
|
930
|
+
autoSize = false,
|
|
931
|
+
customCss,
|
|
932
|
+
decimalPlaces,
|
|
933
|
+
disabled = false,
|
|
934
|
+
label,
|
|
935
|
+
max,
|
|
936
|
+
min,
|
|
937
|
+
name,
|
|
938
|
+
onChange,
|
|
939
|
+
onClick,
|
|
940
|
+
placeholder = ``,
|
|
941
|
+
set = () => null,
|
|
942
|
+
testId,
|
|
943
|
+
value = null
|
|
944
|
+
}) => {
|
|
945
|
+
const id = React.useId();
|
|
946
|
+
const [temporaryEntry, setTemporaryEntry] = React.useState(null);
|
|
947
|
+
const userHasMadeDeliberateChange = React.useRef(false);
|
|
948
|
+
const refine = initRefinery({ max, min, decimalPlaces, nullable: true });
|
|
949
|
+
const allowDecimal = decimalPlaces === void 0 || decimalPlaces > 0;
|
|
950
|
+
const handleBlur = () => {
|
|
951
|
+
if (userHasMadeDeliberateChange.current) {
|
|
952
|
+
set(refine(value != null ? value : null));
|
|
953
|
+
setTemporaryEntry(null);
|
|
954
|
+
}
|
|
955
|
+
userHasMadeDeliberateChange.current = false;
|
|
956
|
+
};
|
|
957
|
+
const handleChange = (event) => {
|
|
958
|
+
var _a2;
|
|
959
|
+
if (onChange)
|
|
960
|
+
onChange(event);
|
|
961
|
+
if (set === void 0)
|
|
962
|
+
return;
|
|
963
|
+
userHasMadeDeliberateChange.current = true;
|
|
964
|
+
const input = event.target.value;
|
|
965
|
+
if (isValidNonNumber(input) || isDecimalInProgress(input)) {
|
|
966
|
+
setTemporaryEntry(input);
|
|
967
|
+
const textInterpretation = isDecimalInProgress(input) ? input : (_a2 = min == null ? void 0 : min.toString()) != null ? _a2 : `0`;
|
|
968
|
+
const newValue = textToValue(textInterpretation, allowDecimal);
|
|
969
|
+
set(refine(newValue));
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
972
|
+
setTemporaryEntry(null);
|
|
973
|
+
const inputIsNumeric = !isNaN(Number(input)) && !input.includes(` `) || allowDecimal && input === `.` || allowDecimal && input === `-.` || input === `` || input === `-`;
|
|
974
|
+
const numericValue = textToValue(input, allowDecimal);
|
|
975
|
+
if (inputIsNumeric) {
|
|
976
|
+
set(refine(numericValue));
|
|
977
|
+
}
|
|
978
|
+
};
|
|
979
|
+
const displayValue = temporaryEntry != null ? temporaryEntry : valueToText(value ? refine(value) : value);
|
|
980
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { css: customCss, children: [
|
|
981
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, children: label }),
|
|
982
|
+
autoSize ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
983
|
+
ElasticInput,
|
|
984
|
+
{
|
|
985
|
+
type: "text",
|
|
986
|
+
value: displayValue,
|
|
987
|
+
placeholder: placeholder != null ? placeholder : `-`,
|
|
988
|
+
onChange: handleChange,
|
|
989
|
+
onBlur: handleBlur,
|
|
990
|
+
disabled,
|
|
991
|
+
name: name != null ? name : id,
|
|
992
|
+
id,
|
|
993
|
+
onClick,
|
|
994
|
+
"data-testid": `number-input-${testId != null ? testId : id}`
|
|
995
|
+
}
|
|
996
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
997
|
+
"input",
|
|
998
|
+
{
|
|
999
|
+
type: "text",
|
|
1000
|
+
value: displayValue,
|
|
1001
|
+
placeholder: placeholder != null ? placeholder : `-`,
|
|
1002
|
+
onChange: handleChange,
|
|
1003
|
+
onBlur: handleBlur,
|
|
1004
|
+
disabled,
|
|
1005
|
+
name: name != null ? name : id,
|
|
1006
|
+
id,
|
|
1007
|
+
onClick,
|
|
1008
|
+
"data-testid": `number-input-${testId != null ? testId : id}`
|
|
1009
|
+
}
|
|
1010
|
+
)
|
|
1011
|
+
] });
|
|
1012
|
+
};
|
|
1013
|
+
var TextInput = ({
|
|
1014
|
+
value,
|
|
1015
|
+
set,
|
|
1016
|
+
label,
|
|
1017
|
+
placeholder,
|
|
1018
|
+
customCss,
|
|
1019
|
+
autoSize = false
|
|
1020
|
+
}) => {
|
|
1021
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { css: customCss, children: [
|
|
1022
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { children: label }),
|
|
1023
|
+
autoSize ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1024
|
+
ElasticInput,
|
|
1025
|
+
{
|
|
1026
|
+
type: "text",
|
|
1027
|
+
value,
|
|
1028
|
+
onChange: (e) => set == null ? void 0 : set(e.target.value),
|
|
1029
|
+
disabled: set === void 0,
|
|
1030
|
+
placeholder
|
|
1031
|
+
}
|
|
1032
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1033
|
+
"input",
|
|
1034
|
+
{
|
|
1035
|
+
type: "text",
|
|
1036
|
+
value,
|
|
1037
|
+
onChange: (e) => set == null ? void 0 : set(e.target.value),
|
|
1038
|
+
disabled: set === void 0,
|
|
1039
|
+
placeholder
|
|
1040
|
+
}
|
|
1041
|
+
)
|
|
1042
|
+
] });
|
|
1043
|
+
};
|
|
1044
|
+
var NonJsonEditor = ({ data }) => {
|
|
1045
|
+
return data === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(ElasticInput, { disabled: true, value: "undefined" }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1046
|
+
ElasticInput,
|
|
1047
|
+
{
|
|
1048
|
+
disabled: true,
|
|
1049
|
+
value: Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data)
|
|
1050
|
+
}
|
|
1051
|
+
);
|
|
1052
|
+
};
|
|
1053
|
+
var JsonEditor_INTERNAL = ({
|
|
1054
|
+
data,
|
|
1055
|
+
set,
|
|
1056
|
+
schema,
|
|
1057
|
+
name,
|
|
1058
|
+
rename,
|
|
1059
|
+
remove,
|
|
1060
|
+
recast,
|
|
1061
|
+
path = [],
|
|
1062
|
+
isReadonly = () => false,
|
|
1063
|
+
isHidden = () => false,
|
|
1064
|
+
className,
|
|
1065
|
+
customCss,
|
|
1066
|
+
Header: HeaderDisplay,
|
|
1067
|
+
Components
|
|
1068
|
+
}) => {
|
|
1069
|
+
const dataIsJson = isJson(data);
|
|
1070
|
+
const refined = dataIsJson ? refineJsonType(data) : { type: `non-json`, data };
|
|
1071
|
+
const SubEditor = dataIsJson ? SubEditors[refined.type] : NonJsonEditor;
|
|
1072
|
+
const disabled = isReadonly(path);
|
|
1073
|
+
return isHidden(path) ? null : /* @__PURE__ */ jsxRuntime.jsx(Components.ErrorBoundary, { children: /* @__PURE__ */ jsxRuntime.jsxs(Components.EditorWrapper, { className, customCss, children: [
|
|
1074
|
+
remove && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1075
|
+
Components.Button,
|
|
1076
|
+
{
|
|
1077
|
+
onClick: disabled ? doNothing : remove,
|
|
1078
|
+
disabled,
|
|
1079
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Components.DeleteIcon, {})
|
|
1080
|
+
}
|
|
1081
|
+
),
|
|
1082
|
+
HeaderDisplay && /* @__PURE__ */ jsxRuntime.jsx(HeaderDisplay, { data, schema }),
|
|
1083
|
+
rename && /* @__PURE__ */ jsxRuntime.jsx(Components.KeyWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1084
|
+
ElasticInput,
|
|
1085
|
+
{
|
|
1086
|
+
value: name,
|
|
1087
|
+
onChange: disabled ? doNothing : (e) => rename(e.target.value),
|
|
1088
|
+
disabled
|
|
1089
|
+
}
|
|
1090
|
+
) }),
|
|
1091
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1092
|
+
SubEditor,
|
|
1093
|
+
{
|
|
1094
|
+
data: refined.data,
|
|
1095
|
+
set,
|
|
1096
|
+
schema,
|
|
1097
|
+
remove,
|
|
1098
|
+
rename,
|
|
1099
|
+
path,
|
|
1100
|
+
isReadonly,
|
|
1101
|
+
isHidden,
|
|
1102
|
+
Components
|
|
1103
|
+
}
|
|
1104
|
+
),
|
|
1105
|
+
recast && dataIsJson ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1106
|
+
"select",
|
|
1107
|
+
{
|
|
1108
|
+
onChange: disabled ? doNothing : (e) => recast(e.target.value),
|
|
1109
|
+
value: refined.type,
|
|
1110
|
+
disabled,
|
|
1111
|
+
children: Object.keys(SubEditors).map((type) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: type, children: type }, type))
|
|
1112
|
+
}
|
|
1113
|
+
) : null
|
|
1114
|
+
] }) });
|
|
1115
|
+
};
|
|
1116
|
+
|
|
1117
|
+
// ../../hamr/src/react-json-editor/editors-by-type/utilities/array-elements.ts
|
|
1118
|
+
var makeElementSetters = (data, set) => data.map(
|
|
1119
|
+
(value, index) => (newValue) => set(() => {
|
|
1120
|
+
const newData = [...data];
|
|
1121
|
+
newData[index] = become(newValue)(value);
|
|
1122
|
+
return newData;
|
|
1123
|
+
})
|
|
1124
|
+
);
|
|
1125
|
+
var ArrayEditor = ({
|
|
1126
|
+
path = [],
|
|
1127
|
+
isReadonly = () => false,
|
|
1128
|
+
isHidden = () => false,
|
|
1129
|
+
data,
|
|
1130
|
+
set,
|
|
1131
|
+
Components
|
|
1132
|
+
}) => {
|
|
1133
|
+
const setElement = makeElementSetters(data, set);
|
|
1134
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: data.map((element, index) => {
|
|
1135
|
+
const newPath = [...path, index];
|
|
1136
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1137
|
+
JsonEditor_INTERNAL,
|
|
1138
|
+
{
|
|
1139
|
+
path: newPath,
|
|
1140
|
+
isReadonly,
|
|
1141
|
+
isHidden,
|
|
1142
|
+
data: element,
|
|
1143
|
+
set: setElement[index],
|
|
1144
|
+
Components
|
|
1145
|
+
},
|
|
1146
|
+
newPath.join(``)
|
|
1147
|
+
);
|
|
1148
|
+
}) });
|
|
1149
|
+
};
|
|
1150
|
+
|
|
1151
|
+
// ../../anvl/src/json-schema/integer.ts
|
|
1152
|
+
var isInteger = (input) => Number.isInteger(input);
|
|
1153
|
+
var parseInteger = (input) => {
|
|
1154
|
+
if (isInteger(input))
|
|
1155
|
+
return input;
|
|
1156
|
+
throw new IntegerParseError(input);
|
|
1157
|
+
};
|
|
1158
|
+
var _a;
|
|
1159
|
+
var Fraction = class extends Number {
|
|
1160
|
+
constructor(n, d) {
|
|
1161
|
+
super(n / d);
|
|
1162
|
+
this[_a] = () => this.numerator / this.denominator;
|
|
1163
|
+
if (d === 0) {
|
|
1164
|
+
throw new Error(`Denominator cannot be zero`);
|
|
1165
|
+
}
|
|
1166
|
+
this.numerator = parseInteger(n);
|
|
1167
|
+
this.denominator = parseInteger(d);
|
|
1168
|
+
}
|
|
1169
|
+
};
|
|
1170
|
+
_a = Symbol.toPrimitive;
|
|
1171
|
+
var IntegerParseError = class extends Error {
|
|
1172
|
+
constructor(value) {
|
|
1173
|
+
super(`Could not parse integer from ${JSON.stringify(value)}`);
|
|
1174
|
+
}
|
|
1175
|
+
};
|
|
1176
|
+
var Int = Object.assign((input) => parseInteger(input), {
|
|
1177
|
+
from: (input) => pipe(
|
|
1178
|
+
input,
|
|
1179
|
+
String,
|
|
1180
|
+
parseFloat,
|
|
1181
|
+
(num) => isInteger(num) ? {
|
|
1182
|
+
value: num,
|
|
1183
|
+
error: null,
|
|
1184
|
+
round: null,
|
|
1185
|
+
upper: null,
|
|
1186
|
+
lower: null,
|
|
1187
|
+
ratio: null
|
|
1188
|
+
} : {
|
|
1189
|
+
value: null,
|
|
1190
|
+
error: new IntegerParseError(input),
|
|
1191
|
+
round: Math.round(num),
|
|
1192
|
+
upper: Math.ceil(num),
|
|
1193
|
+
lower: Math.floor(num),
|
|
1194
|
+
ratio: null
|
|
1195
|
+
}
|
|
1196
|
+
),
|
|
1197
|
+
formula: (fm) => {
|
|
1198
|
+
return (input) => {
|
|
1199
|
+
return fm(
|
|
1200
|
+
input
|
|
1201
|
+
);
|
|
1202
|
+
};
|
|
1203
|
+
}
|
|
1204
|
+
});
|
|
1205
|
+
function asNumber(input) {
|
|
1206
|
+
return input;
|
|
1207
|
+
}
|
|
1208
|
+
asNumber(new Fraction(1, 2));
|
|
1209
|
+
asNumber([new Fraction(1, 2)]);
|
|
1210
|
+
asNumber({ a: new Fraction(1, 2) });
|
|
1211
|
+
|
|
1212
|
+
// ../../anvl/src/json-schema/refs.ts
|
|
1213
|
+
function isJsonSchemaRef(input) {
|
|
1214
|
+
return doesExtend({
|
|
1215
|
+
$ref: isString
|
|
1216
|
+
})(input);
|
|
1217
|
+
}
|
|
1218
|
+
({
|
|
1219
|
+
$defs: {
|
|
1220
|
+
colorChannel: {
|
|
1221
|
+
type: `integer`,
|
|
1222
|
+
minimum: Int(0),
|
|
1223
|
+
maximum: Int(255)
|
|
1224
|
+
},
|
|
1225
|
+
color: {
|
|
1226
|
+
type: `object`,
|
|
1227
|
+
properties: {
|
|
1228
|
+
red: { $ref: `#/$defs/colorChannel` },
|
|
1229
|
+
green: { $ref: `#/$defs/colorChannel` },
|
|
1230
|
+
blue: { $ref: `#/$defs/colorChannel` }
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
},
|
|
1234
|
+
type: `array`,
|
|
1235
|
+
items: {
|
|
1236
|
+
$ref: `#/$defs/color`
|
|
1237
|
+
}
|
|
1238
|
+
});
|
|
1239
|
+
var retrieveRef = ({
|
|
1240
|
+
refNode: { $ref },
|
|
1241
|
+
refMap = {},
|
|
1242
|
+
root
|
|
1243
|
+
}) => {
|
|
1244
|
+
if (typeof root === `boolean`) {
|
|
1245
|
+
throw new TypeError(`The root is a boolean and cannot be indexed`);
|
|
1246
|
+
}
|
|
1247
|
+
if ($ref in refMap)
|
|
1248
|
+
return { node: refMap[$ref], refMap };
|
|
1249
|
+
const [_, ...refPath] = $ref.split(`/`);
|
|
1250
|
+
const discovery = delve(root, refPath);
|
|
1251
|
+
if (discovery instanceof Error)
|
|
1252
|
+
throw discovery;
|
|
1253
|
+
let node = discovery.found;
|
|
1254
|
+
while (isJsonSchemaRef(node)) {
|
|
1255
|
+
const result = retrieveRef({ refNode: node, refMap, root });
|
|
1256
|
+
node = result.node;
|
|
1257
|
+
refMap = result.refMap;
|
|
1258
|
+
}
|
|
1259
|
+
if (isJsonSchema(node)) {
|
|
1260
|
+
return { node, refMap: __spreadProps(__spreadValues({}, refMap), { [$ref]: node }) };
|
|
1261
|
+
}
|
|
1262
|
+
throw new TypeError(`The refNode is not a JsonSchema`);
|
|
1263
|
+
};
|
|
1264
|
+
|
|
1265
|
+
// ../../anvl/src/json-schema/string-formats.ts
|
|
1266
|
+
var JSON_SCHEMA_STRING_FORMATS = [
|
|
1267
|
+
`date-time`,
|
|
1268
|
+
`date`,
|
|
1269
|
+
`email`,
|
|
1270
|
+
`hostname`,
|
|
1271
|
+
`ipv4`,
|
|
1272
|
+
`ipv6`,
|
|
1273
|
+
`regex`,
|
|
1274
|
+
`time`,
|
|
1275
|
+
`uri-reference`,
|
|
1276
|
+
`uri-template`,
|
|
1277
|
+
`uri`,
|
|
1278
|
+
`uuid`
|
|
1279
|
+
];
|
|
1280
|
+
|
|
1281
|
+
// ../../anvl/src/json-schema/json-schema.ts
|
|
1282
|
+
var JSON_SCHEMA_TYPE_NAMES = [...JSON_TYPE_NAMES, `integer`];
|
|
1283
|
+
[
|
|
1284
|
+
...JSON_SCHEMA_TYPE_NAMES,
|
|
1285
|
+
`any`,
|
|
1286
|
+
`never`
|
|
1287
|
+
];
|
|
1288
|
+
var stringSchemaStructure = {
|
|
1289
|
+
type: isLiteral(`string`),
|
|
1290
|
+
enum: ifDefined(isArray(isString)),
|
|
1291
|
+
minLength: ifDefined(isInteger),
|
|
1292
|
+
maxLength: ifDefined(isInteger),
|
|
1293
|
+
pattern: ifDefined(isString),
|
|
1294
|
+
format: ifDefined(isWithin(JSON_SCHEMA_STRING_FORMATS))
|
|
1295
|
+
};
|
|
1296
|
+
function isStringSchema(input) {
|
|
1297
|
+
return doesExtend(stringSchemaStructure)(input);
|
|
1298
|
+
}
|
|
1299
|
+
var numberSchemaStructure = {
|
|
1300
|
+
type: isLiteral(`number`),
|
|
1301
|
+
enum: ifDefined(isArray(isNumber)),
|
|
1302
|
+
minimum: ifDefined(isNumber),
|
|
1303
|
+
maximum: ifDefined(isNumber),
|
|
1304
|
+
exclusiveMinimum: ifDefined(isNumber),
|
|
1305
|
+
exclusiveMaximum: ifDefined(isNumber),
|
|
1306
|
+
multipleOf: ifDefined(isNumber)
|
|
1307
|
+
};
|
|
1308
|
+
function isNumberSchema(input) {
|
|
1309
|
+
return doesExtend(numberSchemaStructure)(input);
|
|
1310
|
+
}
|
|
1311
|
+
var integerSchemaStructure = {
|
|
1312
|
+
type: isLiteral(`integer`),
|
|
1313
|
+
enum: ifDefined(isArray(isInteger)),
|
|
1314
|
+
minimum: ifDefined(isInteger),
|
|
1315
|
+
maximum: ifDefined(isInteger),
|
|
1316
|
+
exclusiveMinimum: ifDefined(isInteger),
|
|
1317
|
+
exclusiveMaximum: ifDefined(isInteger),
|
|
1318
|
+
multipleOf: ifDefined(isInteger)
|
|
1319
|
+
};
|
|
1320
|
+
function isIntegerSchema(input) {
|
|
1321
|
+
return doesExtend(integerSchemaStructure)(input);
|
|
1322
|
+
}
|
|
1323
|
+
var booleanSchemaStructure = {
|
|
1324
|
+
type: isLiteral(`boolean`),
|
|
1325
|
+
enum: ifDefined(isArray(isBoolean))
|
|
1326
|
+
};
|
|
1327
|
+
function isBooleanSchema(input) {
|
|
1328
|
+
return doesExtend(booleanSchemaStructure)(input);
|
|
1329
|
+
}
|
|
1330
|
+
var nullSchemaStructure = {
|
|
1331
|
+
type: isLiteral(`null`)
|
|
1332
|
+
};
|
|
1333
|
+
function isNullSchema(input) {
|
|
1334
|
+
return doesExtend(nullSchemaStructure)(input);
|
|
1335
|
+
}
|
|
1336
|
+
var objectSchemaStructure = {
|
|
1337
|
+
type: isLiteral(`object`),
|
|
1338
|
+
properties: ifDefined(isRecord(isString, isJsonSchema)),
|
|
1339
|
+
required: ifDefined(isArray(isString)),
|
|
1340
|
+
additionalProperties: ifDefined(isJsonSchema),
|
|
1341
|
+
propertyNames: ifDefined(isStringSchema),
|
|
1342
|
+
minProperties: ifDefined(isInteger),
|
|
1343
|
+
maxProperties: ifDefined(isInteger),
|
|
1344
|
+
dependentSchemas: ifDefined(isRecord(isString, isJsonSchema))
|
|
1345
|
+
};
|
|
1346
|
+
function isObjectSchema(input) {
|
|
1347
|
+
return doesExtend(objectSchemaStructure)(input);
|
|
1348
|
+
}
|
|
1349
|
+
var arraySchemaStructure = {
|
|
1350
|
+
type: isLiteral(`array`),
|
|
1351
|
+
items: ifDefined(
|
|
1352
|
+
mustSatisfyOneOfTheFollowing(isJsonSchema).or(isArray(isJsonSchema))
|
|
1353
|
+
),
|
|
1354
|
+
minItems: ifDefined(isInteger),
|
|
1355
|
+
maxItems: ifDefined(isInteger),
|
|
1356
|
+
uniqueItems: ifDefined(isBoolean)
|
|
1357
|
+
};
|
|
1358
|
+
function isArraySchema(input) {
|
|
1359
|
+
return doesExtend(arraySchemaStructure)(input);
|
|
1360
|
+
}
|
|
1361
|
+
var unionSchemaStructure = { anyOf: isArray(isJsonSchema) };
|
|
1362
|
+
function isUnionSchema(input) {
|
|
1363
|
+
return doesExtend(unionSchemaStructure)(input);
|
|
1364
|
+
}
|
|
1365
|
+
var exclusiveSchemaStructure = { oneOf: isArray(isJsonSchema) };
|
|
1366
|
+
function isExclusiveSchema(input) {
|
|
1367
|
+
return doesExtend(exclusiveSchemaStructure)(input);
|
|
1368
|
+
}
|
|
1369
|
+
var intersectionSchemaStructure = { allOf: isArray(isJsonSchema) };
|
|
1370
|
+
function isIntersectionSchema(input) {
|
|
1371
|
+
return doesExtend(intersectionSchemaStructure)(input);
|
|
1372
|
+
}
|
|
1373
|
+
var conditionalSchemaStructure = {
|
|
1374
|
+
if: isJsonSchema,
|
|
1375
|
+
then: ifDefined(isJsonSchema),
|
|
1376
|
+
else: ifDefined(isJsonSchema)
|
|
1377
|
+
};
|
|
1378
|
+
function isConditionalSchema(input) {
|
|
1379
|
+
return doesExtend(conditionalSchemaStructure)(input);
|
|
1380
|
+
}
|
|
1381
|
+
var negationSchemaStructure = { not: isJsonSchema };
|
|
1382
|
+
function isNegationSchema(input) {
|
|
1383
|
+
return doesExtend(negationSchemaStructure)(input);
|
|
1384
|
+
}
|
|
1385
|
+
var mixedSchemaStructure = __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, arraySchemaStructure), booleanSchemaStructure), integerSchemaStructure), nullSchemaStructure), numberSchemaStructure), objectSchemaStructure), stringSchemaStructure), {
|
|
1386
|
+
type: isArray(isWithin(JSON_SCHEMA_TYPE_NAMES)),
|
|
1387
|
+
enum: ifDefined(
|
|
1388
|
+
isArray(isUnion.or(isInteger).or(isBoolean).or(isNumber).or(isString))
|
|
1389
|
+
)
|
|
1390
|
+
});
|
|
1391
|
+
function isMixedSchema(input) {
|
|
1392
|
+
return doesExtend(mixedSchemaStructure)(input);
|
|
1393
|
+
}
|
|
1394
|
+
var isJsonSchemaCore = isUnion.or(isArraySchema).or(isBooleanSchema).or(isConditionalSchema).or(isExclusiveSchema).or(isIntegerSchema).or(isIntersectionSchema).or(isMixedSchema).or(isNegationSchema).or(isNullSchema).or(isNumberSchema).or(isObjectSchema).or(isStringSchema).or(isUnionSchema);
|
|
1395
|
+
var isJsonSchemaRoot = doesExtend({
|
|
1396
|
+
$id: ifDefined(isString),
|
|
1397
|
+
$schema: ifDefined(isString)
|
|
1398
|
+
});
|
|
1399
|
+
var isJsonSchemaObject = isIntersection.and(isJsonSchemaCore).and(isJsonSchemaRoot);
|
|
1400
|
+
function isJsonSchema(input) {
|
|
1401
|
+
return mustSatisfyOneOfTheFollowing(isBoolean).or(isJsonSchemaObject).or(isJsonSchemaRef)(input);
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
// ../../anvl/src/json-schema/path-into.ts
|
|
1405
|
+
var expandPathForSchema = (path) => {
|
|
1406
|
+
try {
|
|
1407
|
+
return path.flatMap((key) => {
|
|
1408
|
+
switch (typeof key) {
|
|
1409
|
+
case `string`:
|
|
1410
|
+
return [`properties`, key];
|
|
1411
|
+
case `number`:
|
|
1412
|
+
return [`items`, key];
|
|
1413
|
+
case `symbol`:
|
|
1414
|
+
throw new TypeError(
|
|
1415
|
+
`The key ${String(
|
|
1416
|
+
key
|
|
1417
|
+
)} is not a valid JSON key; expected string or number, got symbol`
|
|
1418
|
+
);
|
|
1419
|
+
default:
|
|
1420
|
+
throw new TypeError(
|
|
1421
|
+
`The key ${key} is not a valid JSON key; expected string or number, got ${typeof key}`
|
|
1422
|
+
);
|
|
1423
|
+
}
|
|
1424
|
+
});
|
|
1425
|
+
} catch (caught) {
|
|
1426
|
+
if (caught instanceof TypeError)
|
|
1427
|
+
return caught;
|
|
1428
|
+
throw caught;
|
|
1429
|
+
}
|
|
1430
|
+
};
|
|
1431
|
+
|
|
1432
|
+
// ../../anvl/src/json-schema/find-sub-schema.ts
|
|
1433
|
+
var findSubSchema = (schema) => {
|
|
1434
|
+
if (typeof schema === `boolean`) {
|
|
1435
|
+
throw new Error(`The schema does not contain subSchemas`);
|
|
1436
|
+
}
|
|
1437
|
+
return (path) => {
|
|
1438
|
+
const pathIntoSchema = expandPathForSchema(path);
|
|
1439
|
+
if (pathIntoSchema instanceof Error)
|
|
1440
|
+
return pathIntoSchema;
|
|
1441
|
+
if (typeof schema === `boolean`) {
|
|
1442
|
+
return new TypeError(`The schema is not a JsonSchema`);
|
|
1443
|
+
}
|
|
1444
|
+
const { node, refMap } = pathIntoSchema.reduce(
|
|
1445
|
+
({ node: node2, refMap: refMap2 = void 0 }, key) => (console.log({ node: node2, key }), isJsonSchemaRef(node2) ? retrieveRef({ refNode: node2, root: schema, refMap: refMap2 }) : { node: node2[key], refMap: refMap2 }),
|
|
1446
|
+
{ node: schema, refMap: void 0 }
|
|
1447
|
+
);
|
|
1448
|
+
if (node instanceof Error)
|
|
1449
|
+
throw node;
|
|
1450
|
+
let subSchema = node;
|
|
1451
|
+
while (isJsonSchemaRef(subSchema)) {
|
|
1452
|
+
console.log({ subSchema });
|
|
1453
|
+
subSchema = retrieveRef({ refNode: subSchema, root: schema, refMap }).node;
|
|
1454
|
+
}
|
|
1455
|
+
console.log({ subSchema });
|
|
1456
|
+
if (isJsonSchema(subSchema)) {
|
|
1457
|
+
return subSchema;
|
|
1458
|
+
}
|
|
1459
|
+
throw new TypeError(`The subSchema is not a JsonSchema`);
|
|
1460
|
+
};
|
|
1461
|
+
};
|
|
1462
|
+
|
|
1463
|
+
// ../../anvl/src/json/cast-json.ts
|
|
1464
|
+
var stringToBoolean = (str) => str === `true`;
|
|
1465
|
+
var stringToNumber = (str) => Number(str);
|
|
1466
|
+
var stringToArray = (str) => str.split(`,`);
|
|
1467
|
+
var stringToObject = (str) => {
|
|
1468
|
+
try {
|
|
1469
|
+
return JSON.parse(str);
|
|
1470
|
+
} catch (e) {
|
|
1471
|
+
return { [str]: str };
|
|
1472
|
+
}
|
|
1473
|
+
};
|
|
1474
|
+
var objectToString = (obj) => JSON.stringify(obj);
|
|
1475
|
+
var objectToBoolean = (obj) => obj.true === true;
|
|
1476
|
+
var objectToNumber = (obj) => {
|
|
1477
|
+
var _a2, _b, _c;
|
|
1478
|
+
return Number((_c = (_b = (_a2 = obj.number) != null ? _a2 : obj.size) != null ? _b : obj.count) != null ? _c : 0);
|
|
1479
|
+
};
|
|
1480
|
+
var objectToArray = (obj) => Object.entries(obj);
|
|
1481
|
+
var booleanToString = (bool) => bool.toString();
|
|
1482
|
+
var booleanToNumber = (bool) => +bool;
|
|
1483
|
+
var booleanToObject = (bool) => ({
|
|
1484
|
+
[bool.toString()]: bool
|
|
1485
|
+
});
|
|
1486
|
+
var booleanToArray = (bool) => [bool];
|
|
1487
|
+
var numberToString = (num) => num.toString();
|
|
1488
|
+
var numberToBoolean = (num) => num === 1;
|
|
1489
|
+
var numberToObject = (num) => ({
|
|
1490
|
+
number: num
|
|
1491
|
+
});
|
|
1492
|
+
var numberToArray = (num) => Array(num).fill(null);
|
|
1493
|
+
var arrayToString = (arr) => arr.join(`,`);
|
|
1494
|
+
var arrayToNumber = (arr) => arr.length;
|
|
1495
|
+
var arrayToBoolean = (arr) => typeof arr[0] === `boolean` ? arr[0] : arr.length > 0;
|
|
1496
|
+
var arrayToObject = (arr) => arr.reduce((acc, cur, idx) => {
|
|
1497
|
+
acc[`${idx}`] = cur;
|
|
1498
|
+
return acc;
|
|
1499
|
+
}, {});
|
|
1500
|
+
var nullToString = () => ``;
|
|
1501
|
+
var nullToNumber = () => 0;
|
|
1502
|
+
var nullToBoolean = () => false;
|
|
1503
|
+
var nullToArray = () => [];
|
|
1504
|
+
var nullToObject = () => ({});
|
|
1505
|
+
|
|
1506
|
+
// ../../anvl/src/refinement/smart-cast-json.ts
|
|
1507
|
+
var castToJson = (input) => {
|
|
1508
|
+
const json = refineJsonType(input);
|
|
1509
|
+
return {
|
|
1510
|
+
to: {
|
|
1511
|
+
array: () => {
|
|
1512
|
+
switch (json.type) {
|
|
1513
|
+
case `array`:
|
|
1514
|
+
return json.data;
|
|
1515
|
+
case `object`:
|
|
1516
|
+
return objectToArray(json.data);
|
|
1517
|
+
case `string`:
|
|
1518
|
+
return stringToArray(json.data);
|
|
1519
|
+
case `boolean`:
|
|
1520
|
+
return booleanToArray(json.data);
|
|
1521
|
+
case `number`:
|
|
1522
|
+
return numberToArray(json.data);
|
|
1523
|
+
case `null`:
|
|
1524
|
+
return nullToArray();
|
|
1525
|
+
}
|
|
1526
|
+
},
|
|
1527
|
+
boolean: () => {
|
|
1528
|
+
switch (json.type) {
|
|
1529
|
+
case `array`:
|
|
1530
|
+
return arrayToBoolean(json.data);
|
|
1531
|
+
case `object`:
|
|
1532
|
+
return objectToBoolean(json.data);
|
|
1533
|
+
case `string`:
|
|
1534
|
+
return stringToBoolean(json.data);
|
|
1535
|
+
case `boolean`:
|
|
1536
|
+
return json.data;
|
|
1537
|
+
case `number`:
|
|
1538
|
+
return numberToBoolean(json.data);
|
|
1539
|
+
case `null`:
|
|
1540
|
+
return nullToBoolean();
|
|
1541
|
+
}
|
|
1542
|
+
},
|
|
1543
|
+
number: () => {
|
|
1544
|
+
switch (json.type) {
|
|
1545
|
+
case `array`:
|
|
1546
|
+
return arrayToNumber(json.data);
|
|
1547
|
+
case `object`:
|
|
1548
|
+
return objectToNumber(json.data);
|
|
1549
|
+
case `string`:
|
|
1550
|
+
return stringToNumber(json.data);
|
|
1551
|
+
case `boolean`:
|
|
1552
|
+
return booleanToNumber(json.data);
|
|
1553
|
+
case `number`:
|
|
1554
|
+
return json.data;
|
|
1555
|
+
case `null`:
|
|
1556
|
+
return nullToNumber();
|
|
1557
|
+
}
|
|
1558
|
+
},
|
|
1559
|
+
object: () => {
|
|
1560
|
+
switch (json.type) {
|
|
1561
|
+
case `array`:
|
|
1562
|
+
return arrayToObject(json.data);
|
|
1563
|
+
case `object`:
|
|
1564
|
+
return json.data;
|
|
1565
|
+
case `string`:
|
|
1566
|
+
return stringToObject(json.data);
|
|
1567
|
+
case `boolean`:
|
|
1568
|
+
return booleanToObject(json.data);
|
|
1569
|
+
case `number`:
|
|
1570
|
+
return numberToObject(json.data);
|
|
1571
|
+
case `null`:
|
|
1572
|
+
return nullToObject();
|
|
1573
|
+
}
|
|
1574
|
+
},
|
|
1575
|
+
string: () => {
|
|
1576
|
+
switch (json.type) {
|
|
1577
|
+
case `array`:
|
|
1578
|
+
return arrayToString(json.data);
|
|
1579
|
+
case `object`:
|
|
1580
|
+
return objectToString(json.data);
|
|
1581
|
+
case `string`:
|
|
1582
|
+
return json.data;
|
|
1583
|
+
case `boolean`:
|
|
1584
|
+
return booleanToString(json.data);
|
|
1585
|
+
case `number`:
|
|
1586
|
+
return numberToString(json.data);
|
|
1587
|
+
case `null`:
|
|
1588
|
+
return nullToString();
|
|
1589
|
+
}
|
|
1590
|
+
},
|
|
1591
|
+
null: () => null
|
|
1592
|
+
}
|
|
1593
|
+
};
|
|
1594
|
+
};
|
|
1595
|
+
|
|
1596
|
+
// ../../hamr/src/react-json-editor/editors-by-type/utilities/object-properties.ts
|
|
1597
|
+
var makePropertySetters = (data, set) => mapObject(
|
|
1598
|
+
data,
|
|
1599
|
+
(value, key) => (newValue) => set(__spreadProps(__spreadValues({}, data), { [key]: become(newValue)(value[key]) }))
|
|
1600
|
+
);
|
|
1601
|
+
var makePropertyRenamers = (data, set, stableKeyMapRef) => mapObject(
|
|
1602
|
+
data,
|
|
1603
|
+
(value, key) => (newKey) => Object.hasOwn(data, newKey) ? null : set(() => {
|
|
1604
|
+
const entries = Object.entries(data);
|
|
1605
|
+
const index = entries.findIndex(([k]) => k === key);
|
|
1606
|
+
entries[index] = [newKey, value];
|
|
1607
|
+
const stableKeyMap = stableKeyMapRef.current;
|
|
1608
|
+
stableKeyMapRef.current = __spreadProps(__spreadValues({}, stableKeyMap), {
|
|
1609
|
+
[newKey]: stableKeyMap[key]
|
|
1610
|
+
});
|
|
1611
|
+
return Object.fromEntries(entries);
|
|
1612
|
+
})
|
|
1613
|
+
);
|
|
1614
|
+
var makePropertyRemovers = (data, set) => mapObject(
|
|
1615
|
+
data,
|
|
1616
|
+
(_, key) => () => set(() => {
|
|
1617
|
+
const _a2 = data, rest = __objRest(_a2, [__restKey(key)]);
|
|
1618
|
+
return rest;
|
|
1619
|
+
})
|
|
1620
|
+
);
|
|
1621
|
+
var makePropertyRecasters = (data, set) => mapObject(
|
|
1622
|
+
data,
|
|
1623
|
+
(value, key) => (newType) => set(() => __spreadProps(__spreadValues({}, data), {
|
|
1624
|
+
[key]: castToJson(value).to[newType]()
|
|
1625
|
+
}))
|
|
1626
|
+
);
|
|
1627
|
+
var makePropertyCreationInterface = (data, set) => (key, type) => (value) => set(__spreadProps(__spreadValues({}, data), { [key]: value != null ? value : JSON_DEFAULTS[type] }));
|
|
1628
|
+
var makePropertySorter = (data, set, sortFn) => () => {
|
|
1629
|
+
const sortedKeys = Object.keys(data).sort(sortFn);
|
|
1630
|
+
const sortedObj = {};
|
|
1631
|
+
sortedKeys.forEach((key) => sortedObj[key] = data[key]);
|
|
1632
|
+
set(sortedObj);
|
|
1633
|
+
};
|
|
1634
|
+
var PropertyAdder = ({
|
|
1635
|
+
addProperty,
|
|
1636
|
+
disabled,
|
|
1637
|
+
propertyKey,
|
|
1638
|
+
Components
|
|
1639
|
+
}) => /* @__PURE__ */ jsxRuntime.jsxs(Components.MissingPropertyWrapper, { children: [
|
|
1640
|
+
/* @__PURE__ */ jsxRuntime.jsx(ElasticInput, { disabled: true, defaultValue: propertyKey }),
|
|
1641
|
+
` `,
|
|
1642
|
+
/* @__PURE__ */ jsxRuntime.jsx(ElasticInput, { disabled: true, defaultValue: "is missing" }),
|
|
1643
|
+
/* @__PURE__ */ jsxRuntime.jsx(Components.Button, { onClick: () => addProperty(), disabled, children: "+" })
|
|
1644
|
+
] });
|
|
1645
|
+
var ObjectEditor = ({
|
|
1646
|
+
schema,
|
|
1647
|
+
path = [],
|
|
1648
|
+
isReadonly = () => false,
|
|
1649
|
+
isHidden = () => false,
|
|
1650
|
+
data,
|
|
1651
|
+
set,
|
|
1652
|
+
Components
|
|
1653
|
+
}) => {
|
|
1654
|
+
var _a2;
|
|
1655
|
+
const disabled = isReadonly(path);
|
|
1656
|
+
const stableKeyMap = React.useRef(
|
|
1657
|
+
Object.keys(data).reduce((acc, key) => {
|
|
1658
|
+
acc[key] = key;
|
|
1659
|
+
return acc;
|
|
1660
|
+
}, {})
|
|
1661
|
+
);
|
|
1662
|
+
const setProperty = makePropertySetters(data, set);
|
|
1663
|
+
const renameProperty = makePropertyRenamers(data, set, stableKeyMap);
|
|
1664
|
+
const removeProperty = makePropertyRemovers(data, set);
|
|
1665
|
+
const recastProperty = makePropertyRecasters(data, set);
|
|
1666
|
+
const sortProperties = makePropertySorter(data, set);
|
|
1667
|
+
const makePropertyAdder = makePropertyCreationInterface(data, set);
|
|
1668
|
+
const subSchema = isPlainObject(schema) ? findSubSchema(schema)(path) : true;
|
|
1669
|
+
const schemaKeys = isLiteral(true)(subSchema) ? true : isObjectSchema(subSchema) ? Object.keys((_a2 = subSchema.properties) != null ? _a2 : {}) : [];
|
|
1670
|
+
const dataKeys = Object.keys(data);
|
|
1671
|
+
const [unofficialKeys, officialKeys] = dataKeys.reduce(
|
|
1672
|
+
([unofficial, official], key) => {
|
|
1673
|
+
const isOfficial = schemaKeys === true || schemaKeys.includes(key);
|
|
1674
|
+
return isOfficial ? [unofficial, [...official, key]] : [[...unofficial, key], official];
|
|
1675
|
+
},
|
|
1676
|
+
[[], []]
|
|
1677
|
+
);
|
|
1678
|
+
const missingKeys = schemaKeys === true ? [] : schemaKeys.filter((key) => !dataKeys.includes(key));
|
|
1679
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1680
|
+
/* @__PURE__ */ jsxRuntime.jsx(Components.Button, { onClick: () => sortProperties(), disabled, children: "Sort" }),
|
|
1681
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Components.ObjectWrapper, { children: [
|
|
1682
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor_properties", children: [...missingKeys, ...officialKeys, ...unofficialKeys].map((key) => {
|
|
1683
|
+
const originalKey = stableKeyMap.current[key];
|
|
1684
|
+
const newPath = [...path, key];
|
|
1685
|
+
const originalPath = [...path, originalKey];
|
|
1686
|
+
const isOfficial = schemaKeys === true || schemaKeys.includes(key);
|
|
1687
|
+
const isMissing = missingKeys.includes(key);
|
|
1688
|
+
return isMissing ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1689
|
+
PropertyAdder,
|
|
1690
|
+
{
|
|
1691
|
+
propertyKey: key,
|
|
1692
|
+
addProperty: makePropertyAdder(key, `string`),
|
|
1693
|
+
disabled,
|
|
1694
|
+
Components
|
|
1695
|
+
},
|
|
1696
|
+
key + `IsMissing`
|
|
1697
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1698
|
+
JsonEditor_INTERNAL,
|
|
1699
|
+
{
|
|
1700
|
+
schema,
|
|
1701
|
+
path: newPath,
|
|
1702
|
+
name: key,
|
|
1703
|
+
isReadonly,
|
|
1704
|
+
isHidden,
|
|
1705
|
+
data: data[key],
|
|
1706
|
+
set: setProperty[key],
|
|
1707
|
+
rename: renameProperty[key],
|
|
1708
|
+
remove: removeProperty[key],
|
|
1709
|
+
recast: recastProperty[key],
|
|
1710
|
+
className: `json_editor_property ${isOfficial ? `json_editor_official` : `json_editor_unofficial`}`,
|
|
1711
|
+
Components
|
|
1712
|
+
},
|
|
1713
|
+
originalPath.join(`.`)
|
|
1714
|
+
);
|
|
1715
|
+
}) }),
|
|
1716
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1717
|
+
Components.Button,
|
|
1718
|
+
{
|
|
1719
|
+
onClick: disabled ? doNothing : () => makePropertyAdder(`new_property`, `string`)(),
|
|
1720
|
+
disabled,
|
|
1721
|
+
children: "+"
|
|
1722
|
+
}
|
|
1723
|
+
)
|
|
1724
|
+
] })
|
|
1725
|
+
] });
|
|
1726
|
+
};
|
|
1727
|
+
var BooleanEditor = ({
|
|
1728
|
+
data,
|
|
1729
|
+
set,
|
|
1730
|
+
Components
|
|
1731
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(Components.BooleanWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1732
|
+
"input",
|
|
1733
|
+
{
|
|
1734
|
+
type: "checkbox",
|
|
1735
|
+
checked: data,
|
|
1736
|
+
onChange: (event) => set(event.target.checked)
|
|
1737
|
+
}
|
|
1738
|
+
) });
|
|
1739
|
+
var NullEditor = ({
|
|
1740
|
+
Components
|
|
1741
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(Components.NullWrapper, { children: '" "' });
|
|
1742
|
+
var NumberEditor = ({
|
|
1743
|
+
path = [],
|
|
1744
|
+
isReadonly = () => false,
|
|
1745
|
+
data,
|
|
1746
|
+
set,
|
|
1747
|
+
Components
|
|
1748
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(Components.NumberWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1749
|
+
NumberInput,
|
|
1750
|
+
{
|
|
1751
|
+
value: data,
|
|
1752
|
+
set: isReadonly(path) ? void 0 : (newValue) => set(Number(newValue)),
|
|
1753
|
+
autoSize: true
|
|
1754
|
+
}
|
|
1755
|
+
) });
|
|
1756
|
+
var StringEditor = ({
|
|
1757
|
+
path = [],
|
|
1758
|
+
isReadonly = () => false,
|
|
1759
|
+
data,
|
|
1760
|
+
set,
|
|
1761
|
+
Components
|
|
1762
|
+
}) => {
|
|
1763
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Components.StringWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1764
|
+
TextInput,
|
|
1765
|
+
{
|
|
1766
|
+
value: data,
|
|
1767
|
+
set: isReadonly(path) ? void 0 : set,
|
|
1768
|
+
autoSize: true
|
|
1769
|
+
}
|
|
1770
|
+
) });
|
|
1771
|
+
};
|
|
1772
|
+
var DefaultFallback = ({ error, errorInfo }) => {
|
|
1773
|
+
var _a2, _b;
|
|
1774
|
+
const component = errorInfo == null ? void 0 : errorInfo.componentStack.split(` `).filter(Boolean)[2];
|
|
1775
|
+
const message = (_b = (_a2 = error == null ? void 0 : error.toString()) != null ? _a2 : errorInfo == null ? void 0 : errorInfo.componentStack) != null ? _b : `Unknown error`;
|
|
1776
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1777
|
+
"div",
|
|
1778
|
+
{
|
|
1779
|
+
"data-testid": "error-boundary",
|
|
1780
|
+
style: {
|
|
1781
|
+
flex: `1`,
|
|
1782
|
+
background: `black`,
|
|
1783
|
+
backgroundImage: `url(./src/assets/kablooey.gif)`,
|
|
1784
|
+
backgroundPosition: `center`,
|
|
1785
|
+
// backgroundRepeat: `no-repeat`,
|
|
1786
|
+
backgroundSize: `overlay`
|
|
1787
|
+
},
|
|
1788
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1789
|
+
"div",
|
|
1790
|
+
{
|
|
1791
|
+
style: {
|
|
1792
|
+
margin: `50px`,
|
|
1793
|
+
marginTop: `0`,
|
|
1794
|
+
padding: `50px`,
|
|
1795
|
+
border: `1px solid dashed`
|
|
1796
|
+
},
|
|
1797
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1798
|
+
"span",
|
|
1799
|
+
{
|
|
1800
|
+
style: {
|
|
1801
|
+
background: `black`,
|
|
1802
|
+
color: `white`,
|
|
1803
|
+
padding: 10,
|
|
1804
|
+
paddingTop: 5
|
|
1805
|
+
},
|
|
1806
|
+
children: [
|
|
1807
|
+
`\u26A0\uFE0F `,
|
|
1808
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: `#fc0`, fontWeight: 700 }, children: component }),
|
|
1809
|
+
` \u26A0\uFE0F `,
|
|
1810
|
+
message
|
|
1811
|
+
]
|
|
1812
|
+
}
|
|
1813
|
+
)
|
|
1814
|
+
}
|
|
1815
|
+
)
|
|
1816
|
+
}
|
|
1817
|
+
);
|
|
1818
|
+
};
|
|
1819
|
+
var ErrorBoundary = class extends React.Component {
|
|
1820
|
+
constructor(props) {
|
|
1821
|
+
super(props);
|
|
1822
|
+
this.state = {};
|
|
1823
|
+
}
|
|
1824
|
+
componentDidCatch(error, errorInfo) {
|
|
1825
|
+
var _a2, _b;
|
|
1826
|
+
(_b = (_a2 = this.props).onError) == null ? void 0 : _b.call(_a2, error, errorInfo);
|
|
1827
|
+
this.setState({
|
|
1828
|
+
error,
|
|
1829
|
+
errorInfo
|
|
1830
|
+
});
|
|
1831
|
+
}
|
|
1832
|
+
render() {
|
|
1833
|
+
const { error, errorInfo } = this.state;
|
|
1834
|
+
const { children, Fallback = DefaultFallback } = this.props;
|
|
1835
|
+
return errorInfo ? /* @__PURE__ */ jsxRuntime.jsx(Fallback, { error, errorInfo }) : children;
|
|
1836
|
+
}
|
|
1837
|
+
};
|
|
1838
|
+
var DEFAULT_JSON_EDITOR_COMPONENTS = {
|
|
1839
|
+
ErrorBoundary: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx(ErrorBoundary, { children }),
|
|
1840
|
+
Button: ({ onClick, children, disabled }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1841
|
+
"button",
|
|
1842
|
+
{
|
|
1843
|
+
type: "button",
|
|
1844
|
+
className: "json_editor_button",
|
|
1845
|
+
onClick,
|
|
1846
|
+
disabled,
|
|
1847
|
+
children
|
|
1848
|
+
}
|
|
1849
|
+
),
|
|
1850
|
+
EditorWrapper: ({ children, customCss, className }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: `json_editor ` + className, css: customCss, children }),
|
|
1851
|
+
EditorLayout: ({
|
|
1852
|
+
DeleteButton,
|
|
1853
|
+
Header,
|
|
1854
|
+
KeyInput,
|
|
1855
|
+
TypeSelect,
|
|
1856
|
+
ValueEditor,
|
|
1857
|
+
Wrapper
|
|
1858
|
+
}) => {
|
|
1859
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { children: [
|
|
1860
|
+
DeleteButton && /* @__PURE__ */ jsxRuntime.jsx(DeleteButton, {}),
|
|
1861
|
+
Header && /* @__PURE__ */ jsxRuntime.jsx(Header, {}),
|
|
1862
|
+
KeyInput && /* @__PURE__ */ jsxRuntime.jsx(KeyInput, {}),
|
|
1863
|
+
TypeSelect && /* @__PURE__ */ jsxRuntime.jsx(TypeSelect, {}),
|
|
1864
|
+
/* @__PURE__ */ jsxRuntime.jsx(ValueEditor, {})
|
|
1865
|
+
] });
|
|
1866
|
+
},
|
|
1867
|
+
ArrayWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor_array", children }),
|
|
1868
|
+
ObjectWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor_object", children }),
|
|
1869
|
+
StringWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_string", children }),
|
|
1870
|
+
NumberWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_number", children }),
|
|
1871
|
+
BooleanWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_boolean", children }),
|
|
1872
|
+
NullWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_null", children }),
|
|
1873
|
+
MissingPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor_property json_editor_missing", children }),
|
|
1874
|
+
MiscastPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor_property json_editor_miscast", children }),
|
|
1875
|
+
IllegalPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_property json_editor_illegal", children }),
|
|
1876
|
+
OfficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_property json_editor_official", children }),
|
|
1877
|
+
UnofficialPropertyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_property json_editor_unofficial", children }),
|
|
1878
|
+
DeleteIcon: () => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_icon json_editor_delete", children: "x" }),
|
|
1879
|
+
KeyWrapper: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "json_editor_key", children })
|
|
1880
|
+
};
|
|
1881
|
+
var JsonEditor = ({
|
|
1882
|
+
data,
|
|
1883
|
+
set,
|
|
1884
|
+
schema = true,
|
|
1885
|
+
name,
|
|
1886
|
+
rename,
|
|
1887
|
+
remove,
|
|
1888
|
+
isReadonly = () => false,
|
|
1889
|
+
isHidden = () => false,
|
|
1890
|
+
// isIllegal = () => false,
|
|
1891
|
+
className,
|
|
1892
|
+
customCss,
|
|
1893
|
+
Header,
|
|
1894
|
+
Components: CustomComponents = {}
|
|
1895
|
+
}) => {
|
|
1896
|
+
const Components = __spreadValues(__spreadValues({}, DEFAULT_JSON_EDITOR_COMPONENTS), CustomComponents);
|
|
1897
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1898
|
+
JsonEditor_INTERNAL,
|
|
1899
|
+
{
|
|
1900
|
+
data,
|
|
1901
|
+
set,
|
|
1902
|
+
name,
|
|
1903
|
+
schema,
|
|
1904
|
+
rename,
|
|
1905
|
+
remove,
|
|
1906
|
+
path: [],
|
|
1907
|
+
isReadonly,
|
|
1908
|
+
isHidden,
|
|
1909
|
+
className,
|
|
1910
|
+
customCss,
|
|
1911
|
+
Header,
|
|
1912
|
+
Components
|
|
1913
|
+
}
|
|
1914
|
+
);
|
|
1915
|
+
};
|
|
1916
|
+
|
|
1917
|
+
// ../../hamr/src/react-json-editor/index.ts
|
|
1918
|
+
var SubEditors = {
|
|
1919
|
+
array: ArrayEditor,
|
|
1920
|
+
boolean: BooleanEditor,
|
|
1921
|
+
null: NullEditor,
|
|
1922
|
+
number: NumberEditor,
|
|
1923
|
+
object: ObjectEditor,
|
|
1924
|
+
string: StringEditor
|
|
1925
|
+
};
|
|
1926
|
+
|
|
1927
|
+
// ../../anvl/src/string/string-to-color.ts
|
|
1928
|
+
function stringToColor(input) {
|
|
1929
|
+
let hash = 0;
|
|
1930
|
+
for (let i = 0; i < input.length; i++) {
|
|
1931
|
+
const char = input.charCodeAt(i);
|
|
1932
|
+
hash = (hash << 5) - hash + char;
|
|
1933
|
+
hash |= 0;
|
|
1934
|
+
}
|
|
1935
|
+
let hexColor = (hash & 16777215).toString(16);
|
|
1936
|
+
while (hexColor.length < 6) {
|
|
1937
|
+
hexColor = `0` + hexColor;
|
|
1938
|
+
}
|
|
1939
|
+
return `#${hexColor}`;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
// ../../luum/src/constants/index.ts
|
|
1943
|
+
var CHANNEL_SPECIFIC_LUM = {
|
|
1944
|
+
R: 0.3,
|
|
1945
|
+
G: 0.5,
|
|
1946
|
+
B: 0.2
|
|
1947
|
+
};
|
|
1948
|
+
|
|
1949
|
+
// ../../luum/src/constants/filters.ts
|
|
1950
|
+
var unfiltered = [
|
|
1951
|
+
{ sat: 255, hue: 0 },
|
|
1952
|
+
{ sat: 255, hue: 360 }
|
|
1953
|
+
];
|
|
1954
|
+
|
|
1955
|
+
// ../../luum/src/export/channelsToHex.ts
|
|
1956
|
+
var channelsToHex = (channels) => `#${Object.values(channels).map((channel) => {
|
|
1957
|
+
let channelHex = channel.toString(16);
|
|
1958
|
+
if (channelHex.length === 1)
|
|
1959
|
+
channelHex = 0 + channelHex;
|
|
1960
|
+
return channelHex;
|
|
1961
|
+
}).join(``)}`;
|
|
1962
|
+
var channelsToHex_default = channelsToHex;
|
|
1963
|
+
|
|
1964
|
+
// ../../luum/src/import/hueToRelativeChannels.ts
|
|
1965
|
+
var hueToRelativeChannels_default = (hue) => {
|
|
1966
|
+
const hueWrapped = wrapInto(0, 360)(hue);
|
|
1967
|
+
const hueReduced = hueWrapped / 60;
|
|
1968
|
+
const hueInteger = Math.floor(hueReduced);
|
|
1969
|
+
const hueDecimal = hueReduced - hueInteger;
|
|
1970
|
+
const x = hueDecimal;
|
|
1971
|
+
const y = 1 - hueDecimal;
|
|
1972
|
+
switch (hueInteger) {
|
|
1973
|
+
case 0:
|
|
1974
|
+
return [1, x, 0];
|
|
1975
|
+
case 1:
|
|
1976
|
+
return [y, 1, 0];
|
|
1977
|
+
case 2:
|
|
1978
|
+
return [0, 1, x];
|
|
1979
|
+
case 3:
|
|
1980
|
+
return [0, y, 1];
|
|
1981
|
+
case 4:
|
|
1982
|
+
return [x, 0, 1];
|
|
1983
|
+
case 5:
|
|
1984
|
+
return [1, 0, y];
|
|
1985
|
+
default:
|
|
1986
|
+
throw new Error(`invalid hue served: ${hue}`);
|
|
1987
|
+
}
|
|
1988
|
+
};
|
|
1989
|
+
|
|
1990
|
+
// ../../luum/src/solveFor/hueFromChannels.ts
|
|
1991
|
+
var hueFromChannels = ({ R, G, B }) => {
|
|
1992
|
+
let hue = 0;
|
|
1993
|
+
if (R > G && G >= B)
|
|
1994
|
+
hue = 60 * (0 + (G - B) / (R - B));
|
|
1995
|
+
if (G >= R && R > B)
|
|
1996
|
+
hue = 60 * (2 - (R - B) / (G - B));
|
|
1997
|
+
if (G > B && B >= R)
|
|
1998
|
+
hue = 60 * (2 + (B - R) / (G - R));
|
|
1999
|
+
if (B >= G && G > R)
|
|
2000
|
+
hue = 60 * (4 - (G - R) / (B - R));
|
|
2001
|
+
if (B > R && R >= G)
|
|
2002
|
+
hue = 60 * (4 + (R - G) / (B - G));
|
|
2003
|
+
if (R >= B && B > G)
|
|
2004
|
+
hue = 60 * (6 - (B - G) / (R - G));
|
|
2005
|
+
return hue;
|
|
2006
|
+
};
|
|
2007
|
+
var hueFromChannels_default = hueFromChannels;
|
|
2008
|
+
|
|
2009
|
+
// ../../luum/src/solveFor/lumFromChannels.ts
|
|
2010
|
+
var lumFromChannels = ({ R, G, B }) => {
|
|
2011
|
+
const lum = CHANNEL_SPECIFIC_LUM.R * R / 255 + CHANNEL_SPECIFIC_LUM.G * G / 255 + CHANNEL_SPECIFIC_LUM.B * B / 255;
|
|
2012
|
+
return lum;
|
|
2013
|
+
};
|
|
2014
|
+
var lumFromChannels_default = lumFromChannels;
|
|
2015
|
+
|
|
2016
|
+
// ../../luum/src/solveFor/maxSatForHueInFilter.ts
|
|
2017
|
+
var maxSatForHueInFilter_default = (hue, filter) => {
|
|
2018
|
+
let maxSat = 255;
|
|
2019
|
+
const hueWrapped = wrapInto(0, 360)(hue);
|
|
2020
|
+
for (let a2 = -1, b2 = 0; b2 < filter.length; a2++, b2++) {
|
|
2021
|
+
a2 = wrapInto(0, filter.length)(a2);
|
|
2022
|
+
const hueDoubleWrapped = a2 > b2 ? wrapInto(-180, 180)(hueWrapped) : void 0;
|
|
2023
|
+
const tuningPointA = filter[a2];
|
|
2024
|
+
const tuningPointB = filter[b2];
|
|
2025
|
+
const hueA = a2 > b2 ? wrapInto(-180, 180)(tuningPointA.hue) : tuningPointA.hue;
|
|
2026
|
+
const hueB = tuningPointB.hue;
|
|
2027
|
+
if ((hueDoubleWrapped || hueWrapped) >= hueA && (hueDoubleWrapped || hueWrapped) < hueB) {
|
|
2028
|
+
let $ = hueDoubleWrapped || hueWrapped;
|
|
2029
|
+
$ -= hueA;
|
|
2030
|
+
$ /= hueB - hueA;
|
|
2031
|
+
$ *= tuningPointB.sat - tuningPointA.sat;
|
|
2032
|
+
$ += tuningPointA.sat;
|
|
2033
|
+
maxSat = $;
|
|
2034
|
+
}
|
|
2035
|
+
}
|
|
2036
|
+
return maxSat;
|
|
2037
|
+
};
|
|
2038
|
+
|
|
2039
|
+
// ../../luum/src/solveFor/satFromChannels.ts
|
|
2040
|
+
var satFromChannels = ({ R, G, B }) => {
|
|
2041
|
+
const sat = Math.max(R, G, B) - Math.min(R, G, B);
|
|
2042
|
+
return sat;
|
|
2043
|
+
};
|
|
2044
|
+
var satFromChannels_default = satFromChannels;
|
|
2045
|
+
|
|
2046
|
+
// ../../luum/src/solveFor/specificLumFromHue.ts
|
|
2047
|
+
var specificLumFromHue_default = (hue) => {
|
|
2048
|
+
const [factorR, factorG, factorB] = hueToRelativeChannels_default(hue);
|
|
2049
|
+
const lumR = CHANNEL_SPECIFIC_LUM.R * factorR;
|
|
2050
|
+
const lumG = CHANNEL_SPECIFIC_LUM.G * factorG;
|
|
2051
|
+
const lumB = CHANNEL_SPECIFIC_LUM.B * factorB;
|
|
2052
|
+
const specificLum = lumR + lumG + lumB;
|
|
2053
|
+
return specificLum;
|
|
2054
|
+
};
|
|
2055
|
+
|
|
2056
|
+
// ../../luum/src/export/specToChannelsFixLimit.ts
|
|
2057
|
+
var minChannelsForSaturationFromHue = (hue) => {
|
|
2058
|
+
const relativeChannels = hueToRelativeChannels_default(hue);
|
|
2059
|
+
const channelSpreader = (trueSaturation) => {
|
|
2060
|
+
const makeMinChannel = (idx) => Math.round(relativeChannels[idx] * trueSaturation);
|
|
2061
|
+
return {
|
|
2062
|
+
R: makeMinChannel(0),
|
|
2063
|
+
G: makeMinChannel(1),
|
|
2064
|
+
B: makeMinChannel(2)
|
|
2065
|
+
};
|
|
2066
|
+
};
|
|
2067
|
+
return channelSpreader;
|
|
2068
|
+
};
|
|
2069
|
+
var channelsFromIlluminationObj = ({
|
|
2070
|
+
minChannels,
|
|
2071
|
+
trueLuminosity,
|
|
2072
|
+
minLum
|
|
2073
|
+
}) => {
|
|
2074
|
+
const { max, round: round2 } = Math;
|
|
2075
|
+
const maxWhite = 255 - max(...Object.values(minChannels));
|
|
2076
|
+
const white = clampInto(0, maxWhite)(round2((trueLuminosity - minLum) * 255));
|
|
2077
|
+
const channels = {
|
|
2078
|
+
R: minChannels.R + white,
|
|
2079
|
+
G: minChannels.G + white,
|
|
2080
|
+
B: minChannels.B + white
|
|
2081
|
+
};
|
|
2082
|
+
return channels;
|
|
2083
|
+
};
|
|
2084
|
+
var specToChannelsFixLimit = ({ hue, sat, lum, prefer = `lum` }, filter = unfiltered) => {
|
|
2085
|
+
const minChannelsForSaturation = minChannelsForSaturationFromHue(hue);
|
|
2086
|
+
let trueSaturation;
|
|
2087
|
+
let trueLuminosity;
|
|
2088
|
+
let minChannels;
|
|
2089
|
+
let maxChannels;
|
|
2090
|
+
let specificLum;
|
|
2091
|
+
let minLum = 0;
|
|
2092
|
+
let maxLum = 1;
|
|
2093
|
+
let maxSat = maxSatForHueInFilter_default(hue, filter);
|
|
2094
|
+
switch (prefer) {
|
|
2095
|
+
case `sat`:
|
|
2096
|
+
trueSaturation = clampInto(0, 255)(Math.min(sat, maxSat));
|
|
2097
|
+
minChannels = minChannelsForSaturation(trueSaturation);
|
|
2098
|
+
maxChannels = {
|
|
2099
|
+
R: minChannels.R + 255 - trueSaturation,
|
|
2100
|
+
G: minChannels.G + 255 - trueSaturation,
|
|
2101
|
+
B: minChannels.B + 255 - trueSaturation
|
|
2102
|
+
};
|
|
2103
|
+
minLum = lumFromChannels_default(minChannels);
|
|
2104
|
+
maxLum = lumFromChannels_default(maxChannels);
|
|
2105
|
+
trueLuminosity = clampInto(minLum, maxLum)(lum);
|
|
2106
|
+
break;
|
|
2107
|
+
case `lum`:
|
|
2108
|
+
trueLuminosity = clampInto(0, 1)(lum);
|
|
2109
|
+
specificLum = specificLumFromHue_default(hue);
|
|
2110
|
+
maxSat = Math.min(
|
|
2111
|
+
maxSat,
|
|
2112
|
+
Math.round(
|
|
2113
|
+
trueLuminosity <= specificLum ? 255 * (trueLuminosity / specificLum) : 255 * (1 - trueLuminosity) / (1 - specificLum)
|
|
2114
|
+
)
|
|
2115
|
+
);
|
|
2116
|
+
trueSaturation = Math.min(sat, maxSat);
|
|
2117
|
+
minChannels = minChannelsForSaturation(trueSaturation);
|
|
2118
|
+
minLum = lumFromChannels_default(minChannels);
|
|
2119
|
+
break;
|
|
2120
|
+
}
|
|
2121
|
+
const channels = channelsFromIlluminationObj({
|
|
2122
|
+
minChannels,
|
|
2123
|
+
trueLuminosity,
|
|
2124
|
+
minLum
|
|
2125
|
+
});
|
|
2126
|
+
return {
|
|
2127
|
+
channels,
|
|
2128
|
+
fix: {
|
|
2129
|
+
sat: trueSaturation,
|
|
2130
|
+
lum: trueLuminosity
|
|
2131
|
+
},
|
|
2132
|
+
limit: {
|
|
2133
|
+
sat: [0, maxSat],
|
|
2134
|
+
lum: [prefer === `lum` ? 0 : minLum, maxLum]
|
|
2135
|
+
}
|
|
2136
|
+
};
|
|
2137
|
+
};
|
|
2138
|
+
var specToChannelsFixLimit_default = specToChannelsFixLimit;
|
|
2139
|
+
|
|
2140
|
+
// ../../luum/src/export/specToHexFixLimit.ts
|
|
2141
|
+
var specToHexFixLimit = ({ hue, sat, lum, prefer }, filter) => {
|
|
2142
|
+
const { channels, fix, limit } = specToChannelsFixLimit_default(
|
|
2143
|
+
{
|
|
2144
|
+
hue,
|
|
2145
|
+
sat,
|
|
2146
|
+
lum,
|
|
2147
|
+
prefer
|
|
2148
|
+
},
|
|
2149
|
+
filter
|
|
2150
|
+
);
|
|
2151
|
+
const { R, G, B } = channels;
|
|
2152
|
+
const hex = channelsToHex_default({ R, G, B });
|
|
2153
|
+
return { hex, fix, limit };
|
|
2154
|
+
};
|
|
2155
|
+
var specToHexFixLimit_default = specToHexFixLimit;
|
|
2156
|
+
|
|
2157
|
+
// ../../luum/src/export/specToHex.ts
|
|
2158
|
+
var specToHex = ({ hue, sat, lum, prefer }, filter) => {
|
|
2159
|
+
const { hex } = specToHexFixLimit_default({ hue, sat, lum, prefer }, filter);
|
|
2160
|
+
return hex;
|
|
2161
|
+
};
|
|
2162
|
+
var specToHex_default = specToHex;
|
|
2163
|
+
|
|
2164
|
+
// ../../luum/src/import/channelsToSpec.ts
|
|
2165
|
+
var channelsToSpec = ({ R, G, B }) => {
|
|
2166
|
+
const hue = hueFromChannels_default({ R, G, B });
|
|
2167
|
+
const sat = satFromChannels_default({ R, G, B });
|
|
2168
|
+
const lum = lumFromChannels_default({ R, G, B });
|
|
2169
|
+
return { hue, sat, lum };
|
|
2170
|
+
};
|
|
2171
|
+
var channelsToSpec_default = channelsToSpec;
|
|
2172
|
+
|
|
2173
|
+
// ../../luum/src/import/normalizeHex.ts
|
|
2174
|
+
var BASE_16_CHAR_SET = `[a-fA-F0-9]+`;
|
|
2175
|
+
var miniHexToHex = (miniHex) => {
|
|
2176
|
+
const miniHexArray = miniHex.split(``);
|
|
2177
|
+
const hexTemplate = [0, 0, 1, 1, 2, 2];
|
|
2178
|
+
return hexTemplate.map((idx) => miniHexArray[idx]).join(``);
|
|
2179
|
+
};
|
|
2180
|
+
var normalizeHex = (maybeHex) => {
|
|
2181
|
+
const hex = maybeHex.replace(/^#/, ``);
|
|
2182
|
+
const hexIsCorrectLength = hex.length === 6 || hex.length === 3;
|
|
2183
|
+
const hexIsCorrectCharSet = hex.match(new RegExp(`^${BASE_16_CHAR_SET}$`)) !== null;
|
|
2184
|
+
const hexIsValid = hexIsCorrectLength && hexIsCorrectCharSet;
|
|
2185
|
+
if (!hexIsValid) {
|
|
2186
|
+
throw new Error(`${maybeHex} is not a valid hex code`);
|
|
2187
|
+
}
|
|
2188
|
+
if (hex.length === 3) {
|
|
2189
|
+
return miniHexToHex(hex);
|
|
2190
|
+
}
|
|
2191
|
+
return hex;
|
|
2192
|
+
};
|
|
2193
|
+
var normalizeHex_default = normalizeHex;
|
|
2194
|
+
|
|
2195
|
+
// ../../luum/src/import/hexToChannels.ts
|
|
2196
|
+
var hexToChannels_default = (maybeHex) => {
|
|
2197
|
+
const hex = normalizeHex_default(maybeHex);
|
|
2198
|
+
return {
|
|
2199
|
+
R: parseInt(hex.slice(0, 2), 16),
|
|
2200
|
+
G: parseInt(hex.slice(2, 4), 16),
|
|
2201
|
+
B: parseInt(hex.slice(4, 6), 16)
|
|
2202
|
+
};
|
|
2203
|
+
};
|
|
2204
|
+
|
|
2205
|
+
// ../../luum/src/import/hexToSpec.ts
|
|
2206
|
+
var hexToSpec = (hex) => {
|
|
2207
|
+
const { R, G, B } = hexToChannels_default(hex);
|
|
2208
|
+
const { hue, sat, lum } = channelsToSpec_default({ R, G, B });
|
|
2209
|
+
return { hue, sat, lum };
|
|
2210
|
+
};
|
|
2211
|
+
var hexToSpec_default = hexToSpec;
|
|
2212
|
+
|
|
2213
|
+
// ../../luum/src/mixers/contrast.ts
|
|
2214
|
+
var contrastMax = (color) => __spreadProps(__spreadValues({}, color), {
|
|
2215
|
+
lum: color.lum > 0.666 ? 0 : 1
|
|
2216
|
+
});
|
|
2217
|
+
var offset = (offsetAmount) => (color) => __spreadProps(__spreadValues({}, color), {
|
|
2218
|
+
lum: color.lum > 0.666 ? color.lum - offsetAmount : color.lum + offsetAmount
|
|
2219
|
+
});
|
|
2220
|
+
|
|
2221
|
+
// ../../luum/src/constants/luum-spec.ts
|
|
2222
|
+
var defaultSpec = {
|
|
2223
|
+
hue: 0,
|
|
2224
|
+
lum: 0,
|
|
2225
|
+
sat: 0,
|
|
2226
|
+
prefer: `lum`
|
|
2227
|
+
};
|
|
2228
|
+
|
|
2229
|
+
// ../../luum/src/scheme/index.ts
|
|
2230
|
+
var isLuumSpec = (input) => typeof input === `object` && input !== null && typeof input.hue === `number` && typeof input.sat === `number` && typeof input.lum === `number` && [`sat`, `lum`].includes(input.prefer);
|
|
2231
|
+
isModifier(isLuumSpec)(defaultSpec);
|
|
2232
|
+
var WAYFORGE_CORE_COLOR_NAMES = [
|
|
2233
|
+
`Red`,
|
|
2234
|
+
`Orange`,
|
|
2235
|
+
`Yellow`,
|
|
2236
|
+
`Lime`,
|
|
2237
|
+
`Green`,
|
|
2238
|
+
`Teal`,
|
|
2239
|
+
`Cyan`,
|
|
2240
|
+
`Blue`,
|
|
2241
|
+
`Indigo`,
|
|
2242
|
+
`Violet`,
|
|
2243
|
+
`Magenta`,
|
|
2244
|
+
`Pink`
|
|
2245
|
+
];
|
|
2246
|
+
WAYFORGE_CORE_COLOR_NAMES.reduce((acc, name, idx) => {
|
|
2247
|
+
acc[name] = {
|
|
2248
|
+
hue: idx * 30,
|
|
2249
|
+
sat: 255,
|
|
2250
|
+
lum: 0.5,
|
|
2251
|
+
prefer: `sat`
|
|
2252
|
+
};
|
|
2253
|
+
return acc;
|
|
2254
|
+
}, {});
|
|
2255
|
+
var Id = ({ id }) => {
|
|
2256
|
+
const [isOpen, setIsOpen] = React__namespace.useState(false);
|
|
2257
|
+
const { refs, floatingStyles, context } = react$1.useFloating({
|
|
2258
|
+
open: isOpen,
|
|
2259
|
+
onOpenChange: setIsOpen,
|
|
2260
|
+
placement: `bottom-start`
|
|
2261
|
+
});
|
|
2262
|
+
const click = react$1.useClick(context);
|
|
2263
|
+
const { getReferenceProps, getFloatingProps } = react$1.useInteractions([click]);
|
|
2264
|
+
const bgColor = stringToColor(id);
|
|
2265
|
+
const contrastColor = pipe(bgColor, hexToSpec_default, contrastMax, specToHex_default);
|
|
2266
|
+
const offsetColor = pipe(bgColor, hexToSpec_default, offset(0.25), specToHex_default);
|
|
2267
|
+
const contrastOffsetColor = pipe(
|
|
2268
|
+
offsetColor,
|
|
2269
|
+
hexToSpec_default,
|
|
2270
|
+
contrastMax,
|
|
2271
|
+
specToHex_default
|
|
2272
|
+
);
|
|
2273
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2274
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2275
|
+
"span",
|
|
2276
|
+
__spreadProps(__spreadValues({
|
|
2277
|
+
role: "content",
|
|
2278
|
+
ref: refs.setReference
|
|
2279
|
+
}, getReferenceProps()), {
|
|
2280
|
+
style: {
|
|
2281
|
+
background: bgColor,
|
|
2282
|
+
cursor: `pointer`,
|
|
2283
|
+
padding: `0px 4px`,
|
|
2284
|
+
color: contrastColor,
|
|
2285
|
+
userSelect: `none`,
|
|
2286
|
+
whiteSpace: `nowrap`
|
|
2287
|
+
},
|
|
2288
|
+
children: id.substring(0, 3)
|
|
2289
|
+
})
|
|
2290
|
+
),
|
|
2291
|
+
isOpen && /* @__PURE__ */ jsxRuntime.jsx(react$1.FloatingPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2292
|
+
"span",
|
|
2293
|
+
__spreadProps(__spreadValues({
|
|
2294
|
+
role: "popup",
|
|
2295
|
+
ref: refs.setFloating
|
|
2296
|
+
}, getFloatingProps()), {
|
|
2297
|
+
style: __spreadProps(__spreadValues({}, floatingStyles), {
|
|
2298
|
+
color: contrastOffsetColor,
|
|
2299
|
+
background: offsetColor,
|
|
2300
|
+
padding: `0px 4px`,
|
|
2301
|
+
boxShadow: `0px 2px 10px rgba(0, 0, 0, 0.1)`
|
|
2302
|
+
}),
|
|
2303
|
+
children: id
|
|
2304
|
+
})
|
|
2305
|
+
) })
|
|
2306
|
+
] });
|
|
2307
|
+
};
|
|
2308
|
+
|
|
2309
|
+
// ../../hamr/src/react-data-designer/RelationEditor.module.scss
|
|
2310
|
+
var RelationEditor_module_default = {};
|
|
2311
|
+
var RelationEditor = (props) => {
|
|
2312
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2313
|
+
const data = Object.entries(props.data.relations).sort(([_, a2], [__, b2]) => b2.length - a2.length).filter(([head, tail]) => {
|
|
2314
|
+
if (seen.has(head))
|
|
2315
|
+
return false;
|
|
2316
|
+
seen.add(head);
|
|
2317
|
+
for (const tailElement of tail) {
|
|
2318
|
+
seen.add(tailElement);
|
|
2319
|
+
}
|
|
2320
|
+
return true;
|
|
2321
|
+
});
|
|
2322
|
+
return /* @__PURE__ */ jsxRuntime.jsx("article", { className: RelationEditor_module_default.class, children: data.map(([head, tail]) => /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
|
|
2323
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(Id, { id: head }) }),
|
|
2324
|
+
":",
|
|
2325
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: tail.map((child) => /* @__PURE__ */ jsxRuntime.jsx(Id, { id: child })) })
|
|
2326
|
+
] })) });
|
|
2327
|
+
};
|
|
2328
|
+
var StateEditor = ({ token }) => {
|
|
2329
|
+
const set = react.useI(token);
|
|
2330
|
+
const data = react.useO(token);
|
|
2331
|
+
return isJson(data) ? /* @__PURE__ */ jsxRuntime.jsx(JsonEditor, { data, set, schema: true }) : data instanceof Join ? /* @__PURE__ */ jsxRuntime.jsx(RelationEditor, { data, set }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2332
|
+
ElasticInput,
|
|
2333
|
+
{
|
|
2334
|
+
value: data instanceof Set ? `Set { ${JSON.stringify([...data]).slice(1, -1)} }` : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + fallback(() => JSON.stringify(data), `?`),
|
|
2335
|
+
disabled: true
|
|
2336
|
+
}
|
|
2337
|
+
) });
|
|
2338
|
+
};
|
|
2339
|
+
var ReadonlySelectorViewer = ({ token }) => {
|
|
2340
|
+
const data = react.useO(token);
|
|
2341
|
+
return isJson(data) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2342
|
+
JsonEditor,
|
|
2343
|
+
{
|
|
2344
|
+
data,
|
|
2345
|
+
set: () => null,
|
|
2346
|
+
schema: true,
|
|
2347
|
+
isReadonly: () => true
|
|
2348
|
+
}
|
|
2349
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "json_editor", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2350
|
+
ElasticInput,
|
|
2351
|
+
{
|
|
2352
|
+
value: data instanceof Set ? `Set ` + JSON.stringify([...data]) : data instanceof Map ? `Map ` + JSON.stringify([...data]) : Object.getPrototypeOf(data).constructor.name + ` ` + JSON.stringify(data),
|
|
2353
|
+
disabled: true
|
|
2354
|
+
}
|
|
2355
|
+
) });
|
|
2356
|
+
};
|
|
2357
|
+
var StoreEditor = ({ token }) => {
|
|
2358
|
+
if (token.type === `readonly_selector`) {
|
|
2359
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ReadonlySelectorViewer, { token });
|
|
2360
|
+
}
|
|
2361
|
+
return /* @__PURE__ */ jsxRuntime.jsx(StateEditor, { token });
|
|
2362
|
+
};
|
|
2363
|
+
var findStateTypeState = atom_io.selectorFamily({
|
|
2364
|
+
key: `\u{1F441}\u200D\u{1F5E8} State Type`,
|
|
2365
|
+
get: (token) => ({ get }) => {
|
|
2366
|
+
let state;
|
|
2367
|
+
try {
|
|
2368
|
+
state = get(token);
|
|
2369
|
+
} catch (error) {
|
|
2370
|
+
return `error`;
|
|
2371
|
+
}
|
|
2372
|
+
if (state === void 0)
|
|
2373
|
+
return `undefined`;
|
|
2374
|
+
if (isJson(state))
|
|
2375
|
+
return refineJsonType(state).type;
|
|
2376
|
+
return Object.getPrototypeOf(state).constructor.name;
|
|
2377
|
+
}
|
|
2378
|
+
});
|
|
2379
|
+
var StateIndexLeafNode = ({ node, isOpenState, typeState }) => {
|
|
2380
|
+
var _a2, _b;
|
|
2381
|
+
const setIsOpen = react.useI(isOpenState);
|
|
2382
|
+
const isOpen = react.useO(isOpenState);
|
|
2383
|
+
const state = react.useO(node);
|
|
2384
|
+
const stateType = react.useO(typeState);
|
|
2385
|
+
const isPrimitive = Boolean(primitiveRefinery.refine(state));
|
|
2386
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2387
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { children: [
|
|
2388
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2389
|
+
button.OpenClose,
|
|
2390
|
+
{
|
|
2391
|
+
isOpen: isOpen && !isPrimitive,
|
|
2392
|
+
setIsOpen,
|
|
2393
|
+
disabled: isPrimitive
|
|
2394
|
+
}
|
|
2395
|
+
),
|
|
2396
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2397
|
+
"label",
|
|
2398
|
+
{
|
|
2399
|
+
onClick: () => console.log(node, atom_io.getState(node)),
|
|
2400
|
+
onKeyUp: () => console.log(node, atom_io.getState(node)),
|
|
2401
|
+
children: [
|
|
2402
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: (_b = (_a2 = node.family) == null ? void 0 : _a2.subKey) != null ? _b : node.key }),
|
|
2403
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "type detail", children: [
|
|
2404
|
+
"(",
|
|
2405
|
+
stateType,
|
|
2406
|
+
")"
|
|
2407
|
+
] })
|
|
2408
|
+
]
|
|
2409
|
+
}
|
|
2410
|
+
),
|
|
2411
|
+
isPrimitive ? /* @__PURE__ */ jsxRuntime.jsx(StoreEditor, { token: node }) : null
|
|
2412
|
+
] }),
|
|
2413
|
+
isOpen && !isPrimitive ? /* @__PURE__ */ jsxRuntime.jsx("main", { children: /* @__PURE__ */ jsxRuntime.jsx(StoreEditor, { token: node }) }) : null
|
|
2414
|
+
] });
|
|
2415
|
+
};
|
|
2416
|
+
var StateIndexTreeNode = ({ node, isOpenState }) => {
|
|
2417
|
+
const setIsOpen = react.useI(isOpenState);
|
|
2418
|
+
const isOpen = react.useO(isOpenState);
|
|
2419
|
+
Object.entries(node.familyMembers).forEach(([key, childNode]) => {
|
|
2420
|
+
findViewIsOpenState(key);
|
|
2421
|
+
findStateTypeState(childNode);
|
|
2422
|
+
});
|
|
2423
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2424
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { children: [
|
|
2425
|
+
/* @__PURE__ */ jsxRuntime.jsx(button.OpenClose, { isOpen, setIsOpen }),
|
|
2426
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
2427
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: node.key }),
|
|
2428
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "type detail", children: " (family)" })
|
|
2429
|
+
] })
|
|
2430
|
+
] }),
|
|
2431
|
+
isOpen ? Object.entries(node.familyMembers).map(([key, childNode]) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2432
|
+
StateIndexNode,
|
|
2433
|
+
{
|
|
2434
|
+
node: childNode,
|
|
2435
|
+
isOpenState: findViewIsOpenState(childNode.key),
|
|
2436
|
+
typeState: findStateTypeState(childNode)
|
|
2437
|
+
},
|
|
2438
|
+
key
|
|
2439
|
+
)) : null
|
|
2440
|
+
] });
|
|
2441
|
+
};
|
|
2442
|
+
var StateIndexNode = ({ node, isOpenState, typeState }) => {
|
|
2443
|
+
if (node.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)) {
|
|
2444
|
+
return null;
|
|
2445
|
+
}
|
|
2446
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: "node state", children: `type` in node ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2447
|
+
StateIndexLeafNode,
|
|
2448
|
+
{
|
|
2449
|
+
node,
|
|
2450
|
+
isOpenState,
|
|
2451
|
+
typeState
|
|
2452
|
+
}
|
|
2453
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(StateIndexTreeNode, { node, isOpenState }) });
|
|
2454
|
+
};
|
|
2455
|
+
var StateIndex = ({ tokenIndex }) => {
|
|
2456
|
+
const tokenIds = react.useO(tokenIndex);
|
|
2457
|
+
return /* @__PURE__ */ jsxRuntime.jsx("article", { className: "index state_index", children: Object.entries(tokenIds).filter(([key]) => !key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).sort().map(([key, node]) => {
|
|
2458
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2459
|
+
StateIndexNode,
|
|
2460
|
+
{
|
|
2461
|
+
node,
|
|
2462
|
+
isOpenState: findViewIsOpenState(node.key),
|
|
2463
|
+
typeState: findStateTypeState(node)
|
|
2464
|
+
},
|
|
2465
|
+
key
|
|
2466
|
+
);
|
|
2467
|
+
}) });
|
|
2468
|
+
};
|
|
2469
|
+
var AtomUpdateFC = ({ atomUpdate }) => {
|
|
2470
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2471
|
+
"article",
|
|
2472
|
+
{
|
|
2473
|
+
className: "node atom_update",
|
|
2474
|
+
onClick: () => console.log(atomUpdate),
|
|
2475
|
+
onKeyUp: () => console.log(atomUpdate),
|
|
2476
|
+
children: [
|
|
2477
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "detail", children: [
|
|
2478
|
+
atomUpdate.key,
|
|
2479
|
+
": "
|
|
2480
|
+
] }),
|
|
2481
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "summary", children: prettyJson.diff(atomUpdate.oldValue, atomUpdate.newValue).summary }) })
|
|
2482
|
+
]
|
|
2483
|
+
},
|
|
2484
|
+
atomUpdate.key
|
|
2485
|
+
);
|
|
2486
|
+
};
|
|
2487
|
+
var TransactionUpdateFC = ({ serialNumber, transactionUpdate }) => {
|
|
2488
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "node transaction_update", children: [
|
|
2489
|
+
/* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsx("h4", { children: serialNumber }) }),
|
|
2490
|
+
/* @__PURE__ */ jsxRuntime.jsxs("main", { children: [
|
|
2491
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "transaction_params", children: [
|
|
2492
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "detail", children: "params: " }),
|
|
2493
|
+
transactionUpdate.params.map((param, index) => {
|
|
2494
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2495
|
+
"article",
|
|
2496
|
+
{
|
|
2497
|
+
className: "node transaction_param",
|
|
2498
|
+
onClick: () => console.log(transactionUpdate),
|
|
2499
|
+
onKeyUp: () => console.log(transactionUpdate),
|
|
2500
|
+
children: [
|
|
2501
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "detail", children: [
|
|
2502
|
+
discoverType(param),
|
|
2503
|
+
": "
|
|
2504
|
+
] }),
|
|
2505
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "summary", children: typeof param === `object` && param !== null && `type` in param && `target` in param ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: JSON.stringify(param.type) }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: JSON.stringify(param) }) })
|
|
2506
|
+
]
|
|
2507
|
+
},
|
|
2508
|
+
`param` + index
|
|
2509
|
+
);
|
|
2510
|
+
})
|
|
2511
|
+
] }),
|
|
2512
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "node transaction_output", children: [
|
|
2513
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "detail", children: "output: " }),
|
|
2514
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "detail", children: discoverType(transactionUpdate.output) }),
|
|
2515
|
+
transactionUpdate.output ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "summary", children: [
|
|
2516
|
+
": ",
|
|
2517
|
+
JSON.stringify(transactionUpdate.output)
|
|
2518
|
+
] }) : null
|
|
2519
|
+
] }),
|
|
2520
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "transaction_impact", children: [
|
|
2521
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "detail", children: "impact: " }),
|
|
2522
|
+
transactionUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
|
|
2523
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2524
|
+
article.AtomUpdate,
|
|
2525
|
+
{
|
|
2526
|
+
serialNumber: index,
|
|
2527
|
+
atomUpdate
|
|
2528
|
+
},
|
|
2529
|
+
`${transactionUpdate.key}:${index}:${atomUpdate.key}`
|
|
2530
|
+
);
|
|
2531
|
+
})
|
|
2532
|
+
] })
|
|
2533
|
+
] })
|
|
2534
|
+
] });
|
|
2535
|
+
};
|
|
2536
|
+
var TimelineUpdateFC = ({ timelineUpdate }) => {
|
|
2537
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "node timeline_update", children: [
|
|
2538
|
+
/* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsxs("h4", { children: [
|
|
2539
|
+
timelineUpdate.timestamp,
|
|
2540
|
+
": ",
|
|
2541
|
+
timelineUpdate.type,
|
|
2542
|
+
" (",
|
|
2543
|
+
timelineUpdate.key,
|
|
2544
|
+
")"
|
|
2545
|
+
] }) }),
|
|
2546
|
+
/* @__PURE__ */ jsxRuntime.jsx("main", { children: timelineUpdate.type === `transaction_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
|
|
2547
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2548
|
+
article.AtomUpdate,
|
|
2549
|
+
{
|
|
2550
|
+
serialNumber: index,
|
|
2551
|
+
atomUpdate
|
|
2552
|
+
},
|
|
2553
|
+
`${timelineUpdate.key}:${index}:${atomUpdate.key}`
|
|
2554
|
+
);
|
|
2555
|
+
}) : timelineUpdate.type === `selector_update` ? timelineUpdate.atomUpdates.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((atomUpdate, index) => {
|
|
2556
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2557
|
+
article.AtomUpdate,
|
|
2558
|
+
{
|
|
2559
|
+
serialNumber: index,
|
|
2560
|
+
atomUpdate
|
|
2561
|
+
},
|
|
2562
|
+
`${timelineUpdate.key}:${index}:${atomUpdate.key}`
|
|
2563
|
+
);
|
|
2564
|
+
}) : timelineUpdate.type === `atom_update` ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2565
|
+
article.AtomUpdate,
|
|
2566
|
+
{
|
|
2567
|
+
serialNumber: timelineUpdate.timestamp,
|
|
2568
|
+
atomUpdate: timelineUpdate
|
|
2569
|
+
}
|
|
2570
|
+
) : null })
|
|
2571
|
+
] });
|
|
2572
|
+
};
|
|
2573
|
+
var article = {
|
|
2574
|
+
AtomUpdate: AtomUpdateFC,
|
|
2575
|
+
TransactionUpdate: TransactionUpdateFC,
|
|
2576
|
+
TimelineUpdate: TimelineUpdateFC
|
|
2577
|
+
};
|
|
2578
|
+
var YouAreHere = () => {
|
|
2579
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "you_are_here", children: "you are here" });
|
|
2580
|
+
};
|
|
2581
|
+
var TimelineLog = ({ token, isOpenState, timelineState }) => {
|
|
2582
|
+
const timeline = react.useO(timelineState);
|
|
2583
|
+
const isOpen = react.useO(isOpenState);
|
|
2584
|
+
const setIsOpen = react.useI(isOpenState);
|
|
2585
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "node timeline_log", children: [
|
|
2586
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { children: [
|
|
2587
|
+
/* @__PURE__ */ jsxRuntime.jsx(button.OpenClose, { isOpen, setIsOpen }),
|
|
2588
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
2589
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: token.key }),
|
|
2590
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "detail length", children: [
|
|
2591
|
+
"(",
|
|
2592
|
+
timeline.at,
|
|
2593
|
+
"/",
|
|
2594
|
+
timeline.history.length,
|
|
2595
|
+
")"
|
|
2596
|
+
] }),
|
|
2597
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "gap" }),
|
|
2598
|
+
/* @__PURE__ */ jsxRuntime.jsxs("nav", { children: [
|
|
2599
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2600
|
+
"button",
|
|
2601
|
+
{
|
|
2602
|
+
type: "button",
|
|
2603
|
+
onClick: () => atom_io.undo(token),
|
|
2604
|
+
disabled: timeline.at === 0,
|
|
2605
|
+
children: "undo"
|
|
2606
|
+
}
|
|
2607
|
+
),
|
|
2608
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2609
|
+
"button",
|
|
2610
|
+
{
|
|
2611
|
+
type: "button",
|
|
2612
|
+
onClick: () => atom_io.redo(token),
|
|
2613
|
+
disabled: timeline.at === timeline.history.length,
|
|
2614
|
+
children: "redo"
|
|
2615
|
+
}
|
|
2616
|
+
)
|
|
2617
|
+
] })
|
|
2618
|
+
] })
|
|
2619
|
+
] }),
|
|
2620
|
+
isOpen ? /* @__PURE__ */ jsxRuntime.jsx("main", { children: timeline.history.map((update, index) => /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
|
|
2621
|
+
index === timeline.at ? /* @__PURE__ */ jsxRuntime.jsx(YouAreHere, {}) : null,
|
|
2622
|
+
/* @__PURE__ */ jsxRuntime.jsx(article.TimelineUpdate, { timelineUpdate: update }),
|
|
2623
|
+
index === timeline.history.length - 1 && timeline.at === timeline.history.length ? /* @__PURE__ */ jsxRuntime.jsx(YouAreHere, {}) : null
|
|
2624
|
+
] }, update.key + index + timeline.at)) }) : null
|
|
2625
|
+
] });
|
|
2626
|
+
};
|
|
2627
|
+
var TimelineIndex = () => {
|
|
2628
|
+
const tokenIds = react.useO(timelineIndex);
|
|
2629
|
+
return /* @__PURE__ */ jsxRuntime.jsx("article", { className: "index timeline_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
|
|
2630
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2631
|
+
TimelineLog,
|
|
2632
|
+
{
|
|
2633
|
+
token,
|
|
2634
|
+
isOpenState: findViewIsOpenState(token.key),
|
|
2635
|
+
timelineState: findTimelineState(token.key)
|
|
2636
|
+
},
|
|
2637
|
+
token.key
|
|
2638
|
+
);
|
|
2639
|
+
}) });
|
|
2640
|
+
};
|
|
2641
|
+
var TransactionLog = ({ token, isOpenState, logState }) => {
|
|
2642
|
+
const log = react.useO(logState);
|
|
2643
|
+
const isOpen = react.useO(isOpenState);
|
|
2644
|
+
const setIsOpen = react.useI(isOpenState);
|
|
2645
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "node transaction_log", children: [
|
|
2646
|
+
/* @__PURE__ */ jsxRuntime.jsxs("header", { children: [
|
|
2647
|
+
/* @__PURE__ */ jsxRuntime.jsx(button.OpenClose, { isOpen, setIsOpen }),
|
|
2648
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
2649
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: token.key }),
|
|
2650
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "detail length", children: [
|
|
2651
|
+
"(",
|
|
2652
|
+
log.length,
|
|
2653
|
+
")"
|
|
2654
|
+
] })
|
|
2655
|
+
] })
|
|
2656
|
+
] }),
|
|
2657
|
+
isOpen ? /* @__PURE__ */ jsxRuntime.jsx("main", { children: log.map((update, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2658
|
+
article.TransactionUpdate,
|
|
2659
|
+
{
|
|
2660
|
+
serialNumber: index,
|
|
2661
|
+
transactionUpdate: update
|
|
2662
|
+
},
|
|
2663
|
+
update.key + index
|
|
2664
|
+
)) }) : null
|
|
2665
|
+
] });
|
|
2666
|
+
};
|
|
2667
|
+
var TransactionIndex = () => {
|
|
2668
|
+
const tokenIds = react.useO(transactionIndex);
|
|
2669
|
+
return /* @__PURE__ */ jsxRuntime.jsx("article", { className: "index transaction_index", children: tokenIds.filter((token) => !token.key.startsWith(`\u{1F441}\u200D\u{1F5E8}`)).map((token) => {
|
|
2670
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2671
|
+
TransactionLog,
|
|
2672
|
+
{
|
|
2673
|
+
token,
|
|
2674
|
+
isOpenState: findViewIsOpenState(token.key),
|
|
2675
|
+
logState: findTransactionLogState(token.key)
|
|
2676
|
+
},
|
|
2677
|
+
token.key
|
|
2678
|
+
);
|
|
2679
|
+
}) });
|
|
2680
|
+
};
|
|
2681
|
+
var AtomIODevtools = () => {
|
|
2682
|
+
const constraintsRef = React.useRef(null);
|
|
2683
|
+
const setDevtoolsAreOpen = react.useI(devtoolsAreOpenState);
|
|
2684
|
+
const devtoolsAreOpen = react.useO(devtoolsAreOpenState);
|
|
2685
|
+
const setDevtoolsView = react.useI(devtoolsViewSelectionState);
|
|
2686
|
+
const devtoolsView = react.useO(devtoolsViewSelectionState);
|
|
2687
|
+
const devtoolsViewOptions = react.useO(devtoolsViewOptionsState);
|
|
2688
|
+
const mouseHasMoved = React.useRef(false);
|
|
2689
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2690
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2691
|
+
framerMotion.motion.span,
|
|
2692
|
+
{
|
|
2693
|
+
ref: constraintsRef,
|
|
2694
|
+
className: "atom_io_devtools_zone",
|
|
2695
|
+
style: {
|
|
2696
|
+
position: `fixed`,
|
|
2697
|
+
top: 0,
|
|
2698
|
+
left: 0,
|
|
2699
|
+
right: 0,
|
|
2700
|
+
bottom: 0,
|
|
2701
|
+
pointerEvents: `none`
|
|
2702
|
+
}
|
|
2703
|
+
}
|
|
2704
|
+
),
|
|
2705
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2706
|
+
framerMotion.motion.main,
|
|
2707
|
+
{
|
|
2708
|
+
drag: true,
|
|
2709
|
+
dragConstraints: constraintsRef,
|
|
2710
|
+
className: "atom_io_devtools",
|
|
2711
|
+
transition: framerMotion.spring,
|
|
2712
|
+
style: devtoolsAreOpen ? {} : {
|
|
2713
|
+
backgroundColor: `#0000`,
|
|
2714
|
+
borderColor: `#0000`,
|
|
2715
|
+
maxHeight: 28,
|
|
2716
|
+
maxWidth: 33
|
|
2717
|
+
},
|
|
2718
|
+
children: [
|
|
2719
|
+
devtoolsAreOpen ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2720
|
+
/* @__PURE__ */ jsxRuntime.jsxs(framerMotion.motion.header, { children: [
|
|
2721
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { children: "atom.io" }),
|
|
2722
|
+
/* @__PURE__ */ jsxRuntime.jsx("nav", { children: devtoolsViewOptions.map((viewOption) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2723
|
+
"button",
|
|
2724
|
+
{
|
|
2725
|
+
type: "button",
|
|
2726
|
+
className: viewOption === devtoolsView ? `active` : ``,
|
|
2727
|
+
onClick: () => setDevtoolsView(viewOption),
|
|
2728
|
+
disabled: viewOption === devtoolsView,
|
|
2729
|
+
children: viewOption
|
|
2730
|
+
},
|
|
2731
|
+
viewOption
|
|
2732
|
+
)) })
|
|
2733
|
+
] }),
|
|
2734
|
+
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.main, { children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.LayoutGroup, { children: devtoolsView === `atoms` ? /* @__PURE__ */ jsxRuntime.jsx(StateIndex, { tokenIndex: atomIndex }) : devtoolsView === `selectors` ? /* @__PURE__ */ jsxRuntime.jsx(StateIndex, { tokenIndex: selectorIndex }) : devtoolsView === `transactions` ? /* @__PURE__ */ jsxRuntime.jsx(TransactionIndex, {}) : devtoolsView === `timelines` ? /* @__PURE__ */ jsxRuntime.jsx(TimelineIndex, {}) : null }) })
|
|
2735
|
+
] }) : null,
|
|
2736
|
+
/* @__PURE__ */ jsxRuntime.jsx("footer", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2737
|
+
"button",
|
|
2738
|
+
{
|
|
2739
|
+
type: "button",
|
|
2740
|
+
onMouseDown: () => mouseHasMoved.current = false,
|
|
2741
|
+
onMouseMove: () => mouseHasMoved.current = true,
|
|
2742
|
+
onMouseUp: () => {
|
|
2743
|
+
if (!mouseHasMoved.current) {
|
|
2744
|
+
setDevtoolsAreOpen((open) => !open);
|
|
2745
|
+
}
|
|
2746
|
+
},
|
|
2747
|
+
children: "\u{1F441}\u200D\u{1F5E8}"
|
|
2748
|
+
}
|
|
2749
|
+
) })
|
|
2750
|
+
]
|
|
2751
|
+
}
|
|
2752
|
+
)
|
|
2753
|
+
] });
|
|
2754
|
+
};
|
|
2755
|
+
|
|
2756
|
+
// src/index.ts
|
|
2757
|
+
var {
|
|
2758
|
+
atomIndex,
|
|
2759
|
+
selectorIndex,
|
|
2760
|
+
transactionIndex,
|
|
2761
|
+
findTransactionLogState,
|
|
2762
|
+
timelineIndex,
|
|
2763
|
+
findTimelineState
|
|
2764
|
+
} = introspection.attachIntrospectionStates();
|
|
2765
|
+
var devtoolsAreOpenState = atom_io.atom({
|
|
2766
|
+
key: `\u{1F441}\u200D\u{1F5E8} Devtools Are Open`,
|
|
2767
|
+
default: true,
|
|
2768
|
+
effects: [webEffects.lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools Are Open`)]
|
|
2769
|
+
});
|
|
2770
|
+
var devtoolsViewSelectionState = atom_io.atom({
|
|
2771
|
+
key: `\u{1F441}\u200D\u{1F5E8} Devtools View Selection`,
|
|
2772
|
+
default: `atoms`,
|
|
2773
|
+
effects: [webEffects.lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools View`)]
|
|
2774
|
+
});
|
|
2775
|
+
var devtoolsViewOptionsState = atom_io.atom({
|
|
2776
|
+
key: `\u{1F441}\u200D\u{1F5E8} Devtools View Options`,
|
|
2777
|
+
default: [`atoms`, `selectors`, `transactions`, `timelines`],
|
|
2778
|
+
effects: [webEffects.lazyLocalStorageEffect(`\u{1F441}\u200D\u{1F5E8} Devtools View Options`)]
|
|
2779
|
+
});
|
|
2780
|
+
var findViewIsOpenState = atom_io.atomFamily({
|
|
2781
|
+
key: `\u{1F441}\u200D\u{1F5E8} Devtools View Is Open`,
|
|
2782
|
+
default: false,
|
|
2783
|
+
effects: (key) => [webEffects.lazyLocalStorageEffect(key + `:view-is-open`)]
|
|
2784
|
+
});
|
|
2785
|
+
var primitiveRefinery = new Refinery({
|
|
2786
|
+
number: (input) => typeof input === `number`,
|
|
2787
|
+
string: (input) => typeof input === `string`,
|
|
2788
|
+
boolean: (input) => typeof input === `boolean`,
|
|
2789
|
+
null: (input) => input === null
|
|
2790
|
+
});
|
|
2791
|
+
var jsonTreeRefinery = new Refinery({
|
|
2792
|
+
object: isPlainObject,
|
|
2793
|
+
array: (input) => Array.isArray(input)
|
|
2794
|
+
});
|
|
2795
|
+
var prettyJson = new Differ(primitiveRefinery, jsonTreeRefinery, {
|
|
2796
|
+
number: diffNumber,
|
|
2797
|
+
string: diffString,
|
|
2798
|
+
boolean: diffBoolean,
|
|
2799
|
+
null: () => ({ summary: `No Change` }),
|
|
2800
|
+
object: diffObject,
|
|
2801
|
+
array: diffArray
|
|
2802
|
+
});
|
|
2803
|
+
|
|
2804
|
+
exports.AtomIODevtools = AtomIODevtools;
|
|
2805
|
+
exports.atomIndex = atomIndex;
|
|
2806
|
+
exports.devtoolsAreOpenState = devtoolsAreOpenState;
|
|
2807
|
+
exports.devtoolsViewOptionsState = devtoolsViewOptionsState;
|
|
2808
|
+
exports.devtoolsViewSelectionState = devtoolsViewSelectionState;
|
|
2809
|
+
exports.findTimelineState = findTimelineState;
|
|
2810
|
+
exports.findTransactionLogState = findTransactionLogState;
|
|
2811
|
+
exports.findViewIsOpenState = findViewIsOpenState;
|
|
2812
|
+
exports.jsonTreeRefinery = jsonTreeRefinery;
|
|
2813
|
+
exports.prettyJson = prettyJson;
|
|
2814
|
+
exports.primitiveRefinery = primitiveRefinery;
|
|
2815
|
+
exports.selectorIndex = selectorIndex;
|
|
2816
|
+
exports.timelineIndex = timelineIndex;
|
|
2817
|
+
exports.transactionIndex = transactionIndex;
|
|
56
2818
|
//# sourceMappingURL=out.js.map
|
|
57
2819
|
//# sourceMappingURL=index.js.map
|