@spawnite/ui 0.1.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,405 @@
1
+ import{press as e,springs as t,tap as n}from"./motion.js";import{a as r,i,n as a,o,r as s,t as c}from"./umq8ESOW.js";import{n as l,r as u,t as d}from"./GS22bG64.js";import{Tooltip as f}from"./tooltip.js";import{createContext as p,createElement as m,forwardRef as h,useCallback as g,useContext as _,useEffect as v,useRef as y,useState as b}from"react";import{AnimatePresence as x,LazyMotion as S,animate as C,domAnimation as w,frame as T,m as E,useAnimationControls as D,useMotionValue as O,useMotionValueEvent as k,useReducedMotion as A,useReducedMotionConfig as j,useTransform as M}from"motion/react";import{clsx as N}from"clsx";import{twMerge as P}from"tailwind-merge";import{jsx as F,jsxs as I}from"react/jsx-runtime";import{Vector2 as L}from"three";import{QualityLevel as R}from"@spawnite/schema";var z=/* @__PURE__ */ function(e){return e.Circle=`circle`,e.Square=`square`,e}({}),B={right:0,bottom:0},V=4;function H(e){let t=e>1?Math.PI/2/(e-1):0,n=t>0?Math.max(140,107/(2*Math.sin(t/2))):140;return Array.from({length:e},(e,r)=>({right:n*Math.cos(t*r),bottom:n*Math.sin(t*r)}))}var ee={fan:`size-20 pointer-coarse:size-24`,primary:`size-24 pointer-coarse:size-28`,"primary-wide":`size-28 pointer-coarse:size-32`},U={circle:`rounded-full`,square:`rounded-2xl`},te={circle:`right-0 bottom-0`,square:`-right-1 -bottom-1`},ne={hidden:{},visible:{transition:{staggerChildren:.04}}},re={hidden:{opacity:0,scale:.8,y:8},visible:{opacity:1,scale:1,y:0,transition:t.bouncy}},ie=.1;function W({id:e,label:n,hotkey:r,icon:i,cooldown:a,casting:s,outOfRange:c=!1,noResource:l,pressed:u=!1,locked:d=!1,place:f,dimmed:p,size:m,shape:h,onPress:g}){let _=j(),[S,w]=b(!1),T=a!==void 0,D=T||d,k=p||d&&!T;D&&S&&w(!1);let A=a??(s&&s.seconds>0?s:void 0),L=A!==void 0,R=A?.seconds??0,z=A?.left??0,B=O(L?1-z/R:0),V=y(null),H=y(0),ne=M(B,e=>String(Math.max(1,Math.ceil((1-e)*R)))),W=M(B,e=>`conic-gradient(var(--rim) ${String(e)}turn, rgb(255 255 255 / 0.15) 0)`);return v(()=>{if(!L){V.current?.stop(),V.current=null;return}let e=1-z/R,t=Math.abs(B.get()-e)*R,n=H.current===R;V.current&&n&&t<ie||(H.current=R,V.current?.stop(),B.set(e),V.current=C(B,1,{duration:z,ease:`linear`}))},[L,z,R,B]),v(()=>()=>V.current?.stop(),[]),/* @__PURE__ */ I(E.button,{type:`button`,"aria-label":n,"aria-keyshortcuts":r,disabled:D,"data-pressed":!D&&(u||S)?``:void 0,"data-dimmed":k?``:void 0,"data-out-of-range":c?``:void 0,"data-no-resource":l===void 0?void 0:``,onPointerDown:t=>{t.button!==0||D||(w(!0),g(e))},onPointerUp:()=>w(!1),onPointerLeave:()=>w(!1),onPointerCancel:()=>w(!1),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&w(!0)},onKeyUp:e=>{(e.key===`Enter`||e.key===` `)&&w(!1)},onBlur:()=>w(!1),onClick:t=>{t.detail===0&&g(e)},variants:re,className:P(N(U[h],`pointer-events-auto absolute translate-x-1/2 translate-y-1/2 touch-none border-2 bg-clip-padding shadow-lg select-none`,`transition-[scale,filter] duration-75 data-pressed:brightness-150`,!_&&`data-pressed:scale-90`,`outline-none focus-visible:ring-2 focus-visible:ring-offset-2`,o.glassSurface,o.glassBorder,o.glassShadow,o.glassFocusRing,o.glassFocusRingOffset,o.glassChildIconEdge,ee[m])),style:{right:`calc(var(--spacing) * ${String(f.right/4)})`,bottom:`calc(var(--spacing) * ${String(f.bottom/4)})`},children:[/* @__PURE__ */ F(E.span,{className:N(`absolute inset-0 flex items-center justify-center [:where(&)_svg]:size-[55%]`,c?`[&_svg]:text-red-400`:l!==void 0&&`[&_svg]:text-sky-400`),initial:!1,animate:T?{y:`28%`,scale:_?1:.5,opacity:k?.35:.55}:{y:`0%`,scale:1,opacity:k?.35:1},transition:T?t.snappy:t.bouncy,"aria-hidden":!0,children:i}),/* @__PURE__ */ I(x,{initial:!1,children:[L&&/* @__PURE__ */ F(E.span,{className:N(`cooldown-rim absolute inset-0`,U[h],T?`[--rim:white]`:`[--rim:var(--color-amber-300)]`),style:{background:W},initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.18},"aria-hidden":!0},`rim`),T&&/* @__PURE__ */ F(E.span,{className:`absolute inset-0 -translate-y-1.5 content-center text-center text-2xl leading-none font-bold tabular-nums [text-shadow:0_2px_6px_rgba(0,0,0,0.7)]`,initial:{opacity:0,scale:.3},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.4,transition:{duration:.18,ease:`easeOut`}},transition:t.bouncy,children:ne},`digits`),!T&&!_&&/* @__PURE__ */ F(E.span,{className:N(`absolute inset-0 border-2 border-white`,U[h]),initial:{opacity:.9,scale:1},animate:{opacity:0,scale:1.35},transition:{duration:.5,ease:`easeOut`},"aria-hidden":!0},`flash`)]}),l!==void 0&&/* @__PURE__ */ F(`span`,{className:`absolute inset-x-0 top-1 text-center text-sm leading-none font-bold text-sky-300 tabular-nums [text-shadow:0_1px_4px_rgba(0,0,0,0.8)]`,children:l}),r!==void 0&&/* @__PURE__ */ F(`span`,{className:N(te[h],`absolute hidden min-w-6 rounded-md bg-black/70 px-1.5 text-center text-base leading-6 font-bold text-white/90 pointer-fine:block`),children:r})]})}function ae({slots:e,primary:t,shape:n=`circle`,onPress:r,className:i}){let a=j(),o=e.slice(0,V),s=H(o.length),c=t!==void 0&&o.length===V,l=[...o,t].some(e=>e?.casting);return/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ I(E.div,{variants:ne,initial:!a&&`hidden`,animate:`visible`,className:P(N(`touch-scale pointer-events-none absolute`,c?`right-18 bottom-18 pointer-coarse:right-20 pointer-coarse:bottom-20`:`right-16 bottom-16 pointer-coarse:right-18 pointer-coarse:bottom-18`,i)),children:[o.map((e,t)=>/* @__PURE__ */ F(W,{...e,size:`fan`,shape:n,place:s[t],dimmed:l&&!e.casting,onPress:r},e.id)),t&&/* @__PURE__ */ F(W,{...t,size:c?`primary-wide`:`primary`,place:B,dimmed:l&&!t.casting,shape:n,onPress:r})]})})}var oe=/* @__PURE__ */ function(e){return e.HealthFill=`healthFill`,e.LoadingBar=`loadingBar`,e}({});function se({value:e,variant:n,color:r,className:i,children:a,fillClassName:s,...c}){return/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ I(E.div,{...c,className:P(`relative overflow-hidden rounded-full bg-neutral-500/30`,i),children:[/* @__PURE__ */ F(E.div,{"data-fill":!0,className:P(`absolute inset-0 rounded-full`,r===void 0&&o[n],s),style:{backgroundColor:r},initial:{x:`-100%`},animate:{x:`${(e-1)*100}%`},transition:t.meter}),a]})})}var ce={xs:`text-xs`,sm:`text-sm`,base:`text-base`,lg:`text-lg`,xl:`text-xl`};function G({as:e,"aria-label":t,size:n=`sm`,tabular:r=!1,title:i,className:a,style:s,children:c}){return/* @__PURE__ */ F(e??`span`,{"aria-label":t,title:i,style:s,className:P(N(o.outlinedText,ce[n],r&&`tabular-nums`,a)),children:c})}function le(e){let[t,n]=b({lost:0,count:0}),r=y(e);return v(()=>{let t=r.current-e;r.current=e,t>0&&n(e=>({lost:t,count:e.count+1}))},[e]),t}function ue({lost:e,count:t}){let n=D(),r=A();return v(()=>{if(e<=0||r){n.set({scaleX:1,scaleY:1});return}let t=.55-Math.min(e,.45)*.5;return n.start({scaleX:[1,.94,1,.99,1],scaleY:[1,t,1,.8,1],transition:{type:`tween`,duration:.36,times:[0,.12,.55,.72,1],ease:[`easeOut`,`easeOut`,`easeInOut`,`easeOut`]}}),()=>{n.stop()}},[n,t,e,r]),n}function de({label:e,value:t,maximum:n,color:r,reserved:i=0,showValue:a=!1,className:s,classNames:c={}}){if(!Number.isFinite(t)||!Number.isFinite(n)||n<=0)throw Error(`Bar requires a finite value and a positive finite maximum`);let l=Math.min(n,Math.max(0,t)),u=l/n,d=Math.min(Math.max(i,0),n-l)/n,f=le(u+d),p=ue(f),m=`${(u*100).toFixed(1)}%`,h=/* @__PURE__ */ I(se,{role:`meter`,"aria-label":e,"aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":n,value:u,variant:oe.HealthFill,color:r,className:P(`h-2 w-40`,s,c.track),fillClassName:c.fill,animate:p,children:[d>0&&/* @__PURE__ */ F(`div`,{"aria-hidden":!0,"data-reserved":!0,className:P(`absolute inset-y-0 opacity-40`,r===void 0&&o.healthFill,c.reserved),style:{left:m,width:`${(d*100).toFixed(1)}%`,backgroundColor:r}}),/* @__PURE__ */ F(x,{children:f.lost>0&&/* @__PURE__ */ F(E.div,{"aria-hidden":!0,className:`absolute inset-y-0 rounded-full ${o.healthLoss}`,style:{left:m},initial:{width:`${(f.lost*100).toFixed(1)}%`,opacity:1},animate:{width:0,opacity:0},transition:{delay:.06,duration:.28,ease:`easeOut`}},f.count)})]});return a?/* @__PURE__ */ I(`span`,{className:P(`flex items-center gap-2`,c.root),children:[h,/* @__PURE__ */ I(G,{size:`xs`,tabular:!0,className:c.value,children:[Math.ceil(l),` / `,Math.round(n)]})]}):h}var fe=/* @__PURE__ */ function(e){return e.Glass=`glass`,e.Accent=`accent`,e.Pane=`pane`,e}({}),pe={glass:``,accent:`bg-menu-accent bg-none border-menu-accent text-menu-accent-ink inset-shadow-none backdrop-blur-none backdrop-saturate-100 hover:brightness-110`,pane:`bg-menu-surface bg-none border-menu-edge text-white/80 inset-shadow-none backdrop-blur-md backdrop-saturate-100 hover:text-white`},me=.5;function K({variant:n=`glass`,disabled:r=!1,label:i,pressed:a,onPress:s,keyShortcuts:c,children:l,className:u,classNames:d={},style:f,ref:p}){let m=j(),h=m?{opacity:0}:{opacity:0,scale:.6};return/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ F(E.button,{ref:p,type:`button`,"aria-label":i,"aria-pressed":a,"aria-keyshortcuts":c,disabled:r,onClick:s,style:f,initial:!1,animate:{opacity:r||a===!1?me:1},transition:t.snappy,whileTap:m||r?void 0:e,className:P(N(`pointer-events-auto relative flex size-14 shrink-0 items-center justify-center select-none`,`w-auto min-w-14 px-3 text-base font-semibold`,`rounded-(--radius-control) border-2 shadow-lg`,`bg-clip-padding`,`outline-none focus-visible:ring-2 focus-visible:ring-offset-2`,o.glassSurface,o.glassBorder,o.glassShadow,o.glassFocusRing,o.glassFocusRingOffset,pe[n],r&&`cursor-not-allowed`,u,d.root)),children:/* @__PURE__ */ F(x,{initial:!1,mode:`popLayout`,children:/* @__PURE__ */ F(E.span,{className:P(N(`flex`,o.glassChildIconEdge),d.icon),initial:h,animate:{opacity:1,scale:1},exit:h,transition:t.snappy,children:l},i??``)})})})}var q=12,he=100,ge=4,_e=Array.from(Array(q).keys(),e=>{let t=e/q*Math.PI*2-Math.PI/2;return{centerX:50+38*Math.cos(t),centerY:50+38*Math.sin(t)}});function J({value:e,className:n}){let r=Math.floor(e*q),[i,a]=b(0);return v(()=>{let e=setInterval(()=>{a(e=>(e+1)%(r+ge))},he);return()=>{clearInterval(e)}},[r]),/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ F(`svg`,{viewBox:`0 0 100 100`,"aria-hidden":!0,className:P(`size-20 fill-current`,n),children:_e.map(({centerX:e,centerY:n},a)=>/* @__PURE__ */ F(E.circle,{"data-testid":`loading-mark`,cx:e,cy:n,r:5,initial:!1,animate:{opacity:a<r?1:.18,scale:a<r&&a===i?1.3:1},transition:{opacity:t.meter,scale:t.snappy}},a))})})}var ve=12,ye=.5;function be({className:e}){let t=O(0),[n,r]=b(0);return k(t,`change`,e=>{r(Math.floor(e*ve)/ve)}),v(()=>{let e=C(t,1,{duration:ye,ease:`linear`});return()=>{e.stop()}},[t]),/* @__PURE__ */ F(J,{value:n,className:e})}var xe={1:`text-4xl font-extrabold tracking-tight text-balance`,2:`text-3xl font-semibold tracking-tight`,3:`text-2xl font-semibold tracking-tight`,4:`text-xl font-semibold tracking-tight`};function Se({level:e,className:t,children:n}){let r=`h${e}`;return/* @__PURE__ */ F(r,{className:P(o.outlinedText,xe[e],t),children:n})}
2
+ /**
3
+ * @license lucide-react v1.47.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ var Ce=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();
9
+ /**
10
+ * @license lucide-react v1.47.0 - ISC
11
+ *
12
+ * This source code is licensed under the ISC license.
13
+ * See the LICENSE file in the root directory of this source tree.
14
+ */
15
+ function we(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:Ce(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}
16
+ /**
17
+ * @license lucide-react v1.47.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */
22
+ var Te=e=>{let t=``,n=!1;for(let r of e){if(r===`-`||r===`_`||r<=` `){n=t.length>0;continue}t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1}return t},Ee=e=>{
23
+ /**
24
+ * @license lucide-react v1.47.0 - ISC
25
+ *
26
+ * This source code is licensed under the ISC license.
27
+ * See the LICENSE file in the root directory of this source tree.
28
+ */
29
+ let t=Te(e);return t.charAt(0).toUpperCase()+t.slice(1)},Y=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),X={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`}
30
+ /**
31
+ * @license lucide-react v1.47.0 - ISC
32
+ *
33
+ * This source code is licensed under the ISC license.
34
+ * See the LICENSE file in the root directory of this source tree.
35
+ */
36
+ /**
37
+ * @license lucide-react v1.47.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */
42
+ ;
43
+ /**
44
+ * @license lucide-react v1.47.0 - ISC
45
+ *
46
+ * This source code is licensed under the ISC license.
47
+ * See the LICENSE file in the root directory of this source tree.
48
+ */
49
+ function Z(e){return e!=null}function De(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??X.width,a=e.size??e.height??X.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?Y(...c):Y(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??X[`stroke-width`])*Number(e.size??e.width??X.width)/Number(t.size??t.width??X.width):t.strokeWidth??X[`stroke-width`];return[`svg`,{...Object.entries(X).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Z(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Z(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Z(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}
50
+ /**
51
+ * @license lucide-react v1.47.0 - ISC
52
+ *
53
+ * This source code is licensed under the ISC license.
54
+ * See the LICENSE file in the root directory of this source tree.
55
+ */
56
+ function Oe(e,t={}){return De(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}
57
+ /**
58
+ * @license lucide-react v1.47.0 - ISC
59
+ *
60
+ * This source code is licensed under the ISC license.
61
+ * See the LICENSE file in the root directory of this source tree.
62
+ */
63
+ var ke=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Ae=p({}),je=()=>_(Ae),Me=h(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:a,nonScalingStroke:o,className:s=``,children:c,iconNode:l=[],icon:u={node:l,aliases:[],size:24},...d},f)=>{
64
+ /**
65
+ * @license lucide-react v1.47.0 - ISC
66
+ *
67
+ * This source code is licensed under the ISC license.
68
+ * See the LICENSE file in the root directory of this source tree.
69
+ */
70
+ /**
71
+ * @license lucide-react v1.47.0 - ISC
72
+ *
73
+ * This source code is licensed under the ISC license.
74
+ * See the LICENSE file in the root directory of this source tree.
75
+ */
76
+ let{size:p=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:v=`currentColor`,className:y=``}=je()??{},b=!!c||ke(d),[x,S,C=[]]=Oe(u,{color:e??v,width:n??t??p,height:r??t??p,strokeWidth:i??h,absoluteStrokeWidth:a??g,nonScalingStroke:o??_,className:Y(y,s),hasA11yProp:b,attributes:d});return m(x,{ref:f,...S},[...C.map(([e,t])=>m(e,t)),...Array.isArray(c)?c:[c]])});
77
+ /**
78
+ * @license lucide-react v1.47.0 - ISC
79
+ *
80
+ * This source code is licensed under the ISC license.
81
+ * See the LICENSE file in the root directory of this source tree.
82
+ */
83
+ function Q(e,t=[],n=[]){let r=typeof e==`string`?we(e,t,n):e,i=h(({className:e,...t},n)=>m(Me,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=Ee(r.name)),i}
84
+ /**
85
+ * @license lucide-react v1.47.0 - ISC
86
+ *
87
+ * This source code is licensed under the ISC license.
88
+ * See the LICENSE file in the root directory of this source tree.
89
+ */
90
+ var Ne={name:`arrow-big-down`,size:24,node:[[`path`,{d:`M9 5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6a1 1 0 0 0 1 1h3.293a.707.707 0 0 1 .5 1.207l-7.086 7.086a1 1 0 0 1-1.414 0l-7.086-7.086a.707.707 0 0 1 .5-1.207H8a1 1 0 0 0 1-1z`,key:`1o3tkq`}]]};Ne.node;var Pe=Q(Ne),Fe={name:`arrow-big-left`,size:24,node:[[`path`,{d:`M10.793 19.793a.707.707 0 0 0 1.207-.5V16a1 1 0 0 1 1-1h6a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1h-6a1 1 0 0 1-1-1V4.707a.707.707 0 0 0-1.207-.5l-6.94 6.94a1.207 1.207 0 0 0 0 1.707z`,key:`qbhtmx`}]]}
91
+ /**
92
+ * @license lucide-react v1.47.0 - ISC
93
+ *
94
+ * This source code is licensed under the ISC license.
95
+ * See the LICENSE file in the root directory of this source tree.
96
+ */
97
+ ;Fe.node;var Ie=Q(Fe),Le={name:`arrow-big-right`,size:24,node:[[`path`,{d:`M13.207 19.793a.707.707 0 0 1-1.207-.5V16a1 1 0 0 0-1-1H5a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h6a1 1 0 0 0 1-1V4.707a.707.707 0 0 1 1.207-.5l6.94 6.94a1.207 1.207 0 0 1 0 1.707z`,key:`zee3eo`}]]}
98
+ /**
99
+ * @license lucide-react v1.47.0 - ISC
100
+ *
101
+ * This source code is licensed under the ISC license.
102
+ * See the LICENSE file in the root directory of this source tree.
103
+ */
104
+ ;Le.node;var Re=Q(Le),ze={name:`arrow-big-up`,size:24,node:[[`path`,{d:`M9 19a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-6a1 1 0 0 1 1-1h3.293a.707.707 0 0 0 .5-1.207l-7.086-7.086a1 1 0 0 0-1.414 0l-7.086 7.086a.707.707 0 0 0 .5 1.207H8a1 1 0 0 1 1 1z`,key:`106j91`}]]}
105
+ /**
106
+ * @license lucide-react v1.47.0 - ISC
107
+ *
108
+ * This source code is licensed under the ISC license.
109
+ * See the LICENSE file in the root directory of this source tree.
110
+ */
111
+ ;ze.node;var Be=Q(ze),Ve={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]}
112
+ /**
113
+ * @license lucide-react v1.47.0 - ISC
114
+ *
115
+ * This source code is licensed under the ISC license.
116
+ * See the LICENSE file in the root directory of this source tree.
117
+ */
118
+ ;Ve.node;var He=Q(Ve),Ue={name:`coins`,size:24,node:[[`path`,{d:`M13.744 17.736a6 6 0 1 1-7.48-7.48`,key:`bq4yh3`}],[`path`,{d:`M15 6h1v4`,key:`11y1tn`}],[`path`,{d:`m6.134 14.768.866-.5 2 3.464`,key:`17snzx`}],[`circle`,{cx:`16`,cy:`8`,r:`6`,key:`14bfc9`}]]}
119
+ /**
120
+ * @license lucide-react v1.47.0 - ISC
121
+ *
122
+ * This source code is licensed under the ISC license.
123
+ * See the LICENSE file in the root directory of this source tree.
124
+ */
125
+ ;Ue.node;var We=Q(Ue),Ge={name:`crosshair`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`22`,x2:`18`,y1:`12`,y2:`12`,key:`l9bcsi`}],[`line`,{x1:`6`,x2:`2`,y1:`12`,y2:`12`,key:`13hhkx`}],[`line`,{x1:`12`,x2:`12`,y1:`6`,y2:`2`,key:`10w3f3`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`18`,key:`15g9kq`}]]}
126
+ /**
127
+ * @license lucide-react v1.47.0 - ISC
128
+ *
129
+ * This source code is licensed under the ISC license.
130
+ * See the LICENSE file in the root directory of this source tree.
131
+ */
132
+ ;Ge.node;var Ke=Q(Ge),qe={name:`crown`,size:24,node:[[`path`,{d:`M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z`,key:`1vdc57`}],[`path`,{d:`M5 21h14`,key:`11awu3`}]]}
133
+ /**
134
+ * @license lucide-react v1.47.0 - ISC
135
+ *
136
+ * This source code is licensed under the ISC license.
137
+ * See the LICENSE file in the root directory of this source tree.
138
+ */
139
+ ;qe.node;var Je=Q(qe),Ye={name:`droplet`,size:24,node:[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]}
140
+ /**
141
+ * @license lucide-react v1.47.0 - ISC
142
+ *
143
+ * This source code is licensed under the ISC license.
144
+ * See the LICENSE file in the root directory of this source tree.
145
+ */
146
+ ;Ye.node;var Xe=Q(Ye),Ze={name:`flag`,size:24,node:[[`path`,{d:`M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528`,key:`1jaruq`}]]}
147
+ /**
148
+ * @license lucide-react v1.47.0 - ISC
149
+ *
150
+ * This source code is licensed under the ISC license.
151
+ * See the LICENSE file in the root directory of this source tree.
152
+ */
153
+ ;Ze.node;var Qe=Q(Ze),$e={name:`flame`,size:24,node:[[`path`,{d:`M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4`,key:`1slcih`}]]}
154
+ /**
155
+ * @license lucide-react v1.47.0 - ISC
156
+ *
157
+ * This source code is licensed under the ISC license.
158
+ * See the LICENSE file in the root directory of this source tree.
159
+ */
160
+ ;$e.node;var et=Q($e),tt={name:`gem`,size:24,node:[[`path`,{d:`M10.5 3 8 9l4 13 4-13-2.5-6`,key:`b3dvk1`}],[`path`,{d:`M17 3a2 2 0 0 1 1.6.8l3 4a2 2 0 0 1 .013 2.382l-7.99 10.986a2 2 0 0 1-3.247 0l-7.99-10.986A2 2 0 0 1 2.4 7.8l2.998-3.997A2 2 0 0 1 7 3z`,key:`7w4byz`}],[`path`,{d:`M2 9h20`,key:`16fsjt`}]]}
161
+ /**
162
+ * @license lucide-react v1.47.0 - ISC
163
+ *
164
+ * This source code is licensed under the ISC license.
165
+ * See the LICENSE file in the root directory of this source tree.
166
+ */
167
+ ;tt.node;var nt=Q(tt),rt={name:`gift`,size:24,node:[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8`,key:`1sqzm4`}],[`path`,{d:`M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5`,key:`kc0143`}],[`rect`,{x:`3`,y:`7`,width:`18`,height:`4`,rx:`1`,key:`1hberx`}]]}
168
+ /**
169
+ * @license lucide-react v1.47.0 - ISC
170
+ *
171
+ * This source code is licensed under the ISC license.
172
+ * See the LICENSE file in the root directory of this source tree.
173
+ */
174
+ ;rt.node;var it=Q(rt),at={name:`heart`,size:24,node:[[`path`,{d:`M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5`,key:`mvr1a0`}]]}
175
+ /**
176
+ * @license lucide-react v1.47.0 - ISC
177
+ *
178
+ * This source code is licensed under the ISC license.
179
+ * See the LICENSE file in the root directory of this source tree.
180
+ */
181
+ ;at.node;var ot=Q(at),st={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]}
182
+ /**
183
+ * @license lucide-react v1.47.0 - ISC
184
+ *
185
+ * This source code is licensed under the ISC license.
186
+ * See the LICENSE file in the root directory of this source tree.
187
+ */
188
+ ;st.node;var ct=Q(st),lt={name:`key`,size:24,node:[[`path`,{d:`m2 21 9.6-9.6`,key:`9l79m3`}],[`path`,{d:`m7.5 15.5 2.3 2.3a1 1 0 0 1 0 1.4l-2.1 2.1a1 1 0 0 1-1.4 0L4 19`,key:`fw8biw`}],[`circle`,{cx:`15.5`,cy:`7.5`,r:`5.5`,key:`4wxmhb`}]]}
189
+ /**
190
+ * @license lucide-react v1.47.0 - ISC
191
+ *
192
+ * This source code is licensed under the ISC license.
193
+ * See the LICENSE file in the root directory of this source tree.
194
+ */
195
+ ;lt.node;var ut=Q(lt),dt={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]}
196
+ /**
197
+ * @license lucide-react v1.47.0 - ISC
198
+ *
199
+ * This source code is licensed under the ISC license.
200
+ * See the LICENSE file in the root directory of this source tree.
201
+ */
202
+ ;dt.node;var ft=Q(dt),pt={name:`map`,size:24,node:[[`path`,{d:`M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z`,key:`169xi5`}],[`path`,{d:`M15 5.764v15`,key:`1pn4in`}],[`path`,{d:`M9 3.236v15`,key:`1uimfh`}]]}
203
+ /**
204
+ * @license lucide-react v1.47.0 - ISC
205
+ *
206
+ * This source code is licensed under the ISC license.
207
+ * See the LICENSE file in the root directory of this source tree.
208
+ */
209
+ ;pt.node;var mt=Q(pt),ht={name:`menu`,size:24,node:[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]}
210
+ /**
211
+ * @license lucide-react v1.47.0 - ISC
212
+ *
213
+ * This source code is licensed under the ISC license.
214
+ * See the LICENSE file in the root directory of this source tree.
215
+ */
216
+ ;ht.node;var gt=Q(ht),_t={name:`mic-off`,size:24,node:[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M15 9.34V5a3 3 0 0 0-5.68-1.33`,key:`1gzdoj`}],[`path`,{d:`M16.95 16.95A7 7 0 0 1 5 12v-2`,key:`cqa7eg`}],[`path`,{d:`M18.89 13.23A7 7 0 0 0 19 12v-2`,key:`16hl24`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v3a3 3 0 0 0 5.12 2.12`,key:`r2i35w`}]]}
217
+ /**
218
+ * @license lucide-react v1.47.0 - ISC
219
+ *
220
+ * This source code is licensed under the ISC license.
221
+ * See the LICENSE file in the root directory of this source tree.
222
+ */
223
+ ;_t.node;var vt=Q(_t),yt={name:`mic`,size:24,node:[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]}
224
+ /**
225
+ * @license lucide-react v1.47.0 - ISC
226
+ *
227
+ * This source code is licensed under the ISC license.
228
+ * See the LICENSE file in the root directory of this source tree.
229
+ */
230
+ ;yt.node;var bt=Q(yt),xt={name:`moon`,size:24,node:[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]}
231
+ /**
232
+ * @license lucide-react v1.47.0 - ISC
233
+ *
234
+ * This source code is licensed under the ISC license.
235
+ * See the LICENSE file in the root directory of this source tree.
236
+ */
237
+ ;xt.node;var St=Q(xt),Ct={name:`pause`,size:24,node:[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]}
238
+ /**
239
+ * @license lucide-react v1.47.0 - ISC
240
+ *
241
+ * This source code is licensed under the ISC license.
242
+ * See the LICENSE file in the root directory of this source tree.
243
+ */
244
+ ;Ct.node;var wt=Q(Ct),Tt={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]}
245
+ /**
246
+ * @license lucide-react v1.47.0 - ISC
247
+ *
248
+ * This source code is licensed under the ISC license.
249
+ * See the LICENSE file in the root directory of this source tree.
250
+ */
251
+ ;Tt.node;var Et=Q(Tt),Dt={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]}
252
+ /**
253
+ * @license lucide-react v1.47.0 - ISC
254
+ *
255
+ * This source code is licensed under the ISC license.
256
+ * See the LICENSE file in the root directory of this source tree.
257
+ */
258
+ ;Dt.node;var Ot=Q(Dt),kt={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]}
259
+ /**
260
+ * @license lucide-react v1.47.0 - ISC
261
+ *
262
+ * This source code is licensed under the ISC license.
263
+ * See the LICENSE file in the root directory of this source tree.
264
+ */
265
+ ;kt.node;var At=Q(kt),jt={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]}
266
+ /**
267
+ * @license lucide-react v1.47.0 - ISC
268
+ *
269
+ * This source code is licensed under the ISC license.
270
+ * See the LICENSE file in the root directory of this source tree.
271
+ */
272
+ ;jt.node;var Mt=Q(jt),Nt={name:`signal-high`,size:24,node:[[`path`,{d:`M2 20h.01`,key:`4haj6o`}],[`path`,{d:`M7 20v-4`,key:`j294jx`}],[`path`,{d:`M12 20v-8`,key:`i3yub9`}],[`path`,{d:`M17 20V8`,key:`1tkaf5`}]]}
273
+ /**
274
+ * @license lucide-react v1.47.0 - ISC
275
+ *
276
+ * This source code is licensed under the ISC license.
277
+ * See the LICENSE file in the root directory of this source tree.
278
+ */
279
+ ;Nt.node;var Pt=Q(Nt),Ft={name:`signal-low`,size:24,node:[[`path`,{d:`M2 20h.01`,key:`4haj6o`}],[`path`,{d:`M7 20v-4`,key:`j294jx`}]]}
280
+ /**
281
+ * @license lucide-react v1.47.0 - ISC
282
+ *
283
+ * This source code is licensed under the ISC license.
284
+ * See the LICENSE file in the root directory of this source tree.
285
+ */
286
+ ;Ft.node;var It=Q(Ft),Lt={name:`signal-medium`,size:24,node:[[`path`,{d:`M2 20h.01`,key:`4haj6o`}],[`path`,{d:`M7 20v-4`,key:`j294jx`}],[`path`,{d:`M12 20v-8`,key:`i3yub9`}]]}
287
+ /**
288
+ * @license lucide-react v1.47.0 - ISC
289
+ *
290
+ * This source code is licensed under the ISC license.
291
+ * See the LICENSE file in the root directory of this source tree.
292
+ */
293
+ ;Lt.node;var Rt=Q(Lt),zt={name:`signal`,size:24,node:[[`path`,{d:`M2 20h.01`,key:`4haj6o`}],[`path`,{d:`M7 20v-4`,key:`j294jx`}],[`path`,{d:`M12 20v-8`,key:`i3yub9`}],[`path`,{d:`M17 20V8`,key:`1tkaf5`}],[`path`,{d:`M22 4v16`,key:`sih9yq`}]]}
294
+ /**
295
+ * @license lucide-react v1.47.0 - ISC
296
+ *
297
+ * This source code is licensed under the ISC license.
298
+ * See the LICENSE file in the root directory of this source tree.
299
+ */
300
+ ;zt.node;var Bt=Q(zt),Vt={name:`skull`,size:24,node:[[`path`,{d:`m12.5 17-.5-1-.5 1h1z`,key:`3me087`}],[`path`,{d:`M15 22a1 1 0 0 0 1-1v-1a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20v1a1 1 0 0 0 1 1z`,key:`1o5pge`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}]]}
301
+ /**
302
+ * @license lucide-react v1.47.0 - ISC
303
+ *
304
+ * This source code is licensed under the ISC license.
305
+ * See the LICENSE file in the root directory of this source tree.
306
+ */
307
+ ;Vt.node;var Ht=Q(Vt),Ut={name:`sliders-horizontal`,size:24,node:[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]}
308
+ /**
309
+ * @license lucide-react v1.47.0 - ISC
310
+ *
311
+ * This source code is licensed under the ISC license.
312
+ * See the LICENSE file in the root directory of this source tree.
313
+ */
314
+ ;Ut.node;var Wt=Q(Ut),Gt={name:`snowflake`,size:24,node:[[`path`,{d:`m10 20-1.25-2.5L6 18`,key:`18frcb`}],[`path`,{d:`M10 4 8.75 6.5 6 6`,key:`7mghy3`}],[`path`,{d:`m14 20 1.25-2.5L18 18`,key:`1chtki`}],[`path`,{d:`m14 4 1.25 2.5L18 6`,key:`1b4wsy`}],[`path`,{d:`m17 21-3-6h-4`,key:`15hhxa`}],[`path`,{d:`m17 3-3 6 1.5 3`,key:`11697g`}],[`path`,{d:`M2 12h6.5L10 9`,key:`kv9z4n`}],[`path`,{d:`m20 10-1.5 2 1.5 2`,key:`1swlpi`}],[`path`,{d:`M22 12h-6.5L14 15`,key:`1mxi28`}],[`path`,{d:`m4 10 1.5 2L4 14`,key:`k9enpj`}],[`path`,{d:`m7 21 3-6-1.5-3`,key:`j8hb9u`}],[`path`,{d:`m7 3 3 6h4`,key:`1otusx`}]]}
315
+ /**
316
+ * @license lucide-react v1.47.0 - ISC
317
+ *
318
+ * This source code is licensed under the ISC license.
319
+ * See the LICENSE file in the root directory of this source tree.
320
+ */
321
+ ;Gt.node;var Kt=Q(Gt),qt={name:`sparkles`,size:24,node:[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]],aliases:[`stars`]}
322
+ /**
323
+ * @license lucide-react v1.47.0 - ISC
324
+ *
325
+ * This source code is licensed under the ISC license.
326
+ * See the LICENSE file in the root directory of this source tree.
327
+ */
328
+ ;qt.node;var Jt=Q(qt),Yt={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]}
329
+ /**
330
+ * @license lucide-react v1.47.0 - ISC
331
+ *
332
+ * This source code is licensed under the ISC license.
333
+ * See the LICENSE file in the root directory of this source tree.
334
+ */
335
+ ;Yt.node;var Xt=Q(Yt),Zt={name:`swords`,size:24,node:[[`path`,{d:`m13 19 6-6`,key:`gj6q8g`}],[`path`,{d:`M14.5 17.5 3.586 6.586A2 2 0 013 5.172V3h2.172a2 2 0 011.414.586L17.5 14.5`,key:`uwfxh8`}],[`path`,{d:`m14.828 6.172 2.586-2.586A2 2 0 0118.828 3H21v2.172a2 2 0 01-.586 1.414l-2.586 2.586`,key:`1f17hx`}],[`path`,{d:`m16 16 4 4`,key:`up5ibb`}],[`path`,{d:`m19 21 2-2`,key:`1phfkn`}],[`path`,{d:`m5 14 4 4`,key:`1gk0qx`}],[`path`,{d:`m5 21-2-2`,key:`1kw20b`}],[`path`,{d:`M7.5 16.5 4 20`,key:`14nozp`}]]}
336
+ /**
337
+ * @license lucide-react v1.47.0 - ISC
338
+ *
339
+ * This source code is licensed under the ISC license.
340
+ * See the LICENSE file in the root directory of this source tree.
341
+ */
342
+ ;Zt.node;var Qt=Q(Zt),$t={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]}
343
+ /**
344
+ * @license lucide-react v1.47.0 - ISC
345
+ *
346
+ * This source code is licensed under the ISC license.
347
+ * See the LICENSE file in the root directory of this source tree.
348
+ */
349
+ ;$t.node;var en=Q($t),tn={name:`timer`,size:24,node:[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]}
350
+ /**
351
+ * @license lucide-react v1.47.0 - ISC
352
+ *
353
+ * This source code is licensed under the ISC license.
354
+ * See the LICENSE file in the root directory of this source tree.
355
+ */
356
+ ;tn.node;var nn=Q(tn),rn={name:`trophy`,size:24,node:[[`path`,{d:`M10 14.66V17a1 1 0 0 1-1 1 2 2 0 0 0-2 2v2`,key:`pwuv1l`}],[`path`,{d:`M14 14.66V17a1 1 0 0 0 1 1 2 2 0 0 1 2 2v2`,key:`1y54w1`}],[`path`,{d:`M17.916 10H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3`,key:`e30mpu`}],[`path`,{d:`M4 22h16`,key:`57wxv0`}],[`path`,{d:`M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z`,key:`1mhfuq`}],[`path`,{d:`M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3`,key:`i0yafy`}]]}
357
+ /**
358
+ * @license lucide-react v1.47.0 - ISC
359
+ *
360
+ * This source code is licensed under the ISC license.
361
+ * See the LICENSE file in the root directory of this source tree.
362
+ */
363
+ ;rn.node;var an=Q(rn),on={name:`user`,size:24,node:[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]}
364
+ /**
365
+ * @license lucide-react v1.47.0 - ISC
366
+ *
367
+ * This source code is licensed under the ISC license.
368
+ * See the LICENSE file in the root directory of this source tree.
369
+ */
370
+ ;on.node;var sn=Q(on),cn={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]}
371
+ /**
372
+ * @license lucide-react v1.47.0 - ISC
373
+ *
374
+ * This source code is licensed under the ISC license.
375
+ * See the LICENSE file in the root directory of this source tree.
376
+ */
377
+ ;cn.node;var ln=Q(cn),un={name:`volume-2`,size:24,node:[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]}
378
+ /**
379
+ * @license lucide-react v1.47.0 - ISC
380
+ *
381
+ * This source code is licensed under the ISC license.
382
+ * See the LICENSE file in the root directory of this source tree.
383
+ */
384
+ ;un.node;var dn=Q(un),fn={name:`volume-x`,size:24,node:[[`path`,{d:`M11 4.702a.7.7 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.7.7 0 0 0 11 19.298z`,key:`1p7khw`}],[`path`,{d:`m16.5 14.5 5-5`,key:`cul3yw`}],[`path`,{d:`m16.5 9.5 5 5`,key:`1akey5`}]]}
385
+ /**
386
+ * @license lucide-react v1.47.0 - ISC
387
+ *
388
+ * This source code is licensed under the ISC license.
389
+ * See the LICENSE file in the root directory of this source tree.
390
+ */
391
+ ;fn.node;var pn=Q(fn),mn={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]}
392
+ /**
393
+ * @license lucide-react v1.47.0 - ISC
394
+ *
395
+ * This source code is licensed under the ISC license.
396
+ * See the LICENSE file in the root directory of this source tree.
397
+ */
398
+ ;mn.node;var hn=Q(mn),gn={name:`zap`,size:24,node:[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]}
399
+ /**
400
+ * @license lucide-react v1.47.0 - ISC
401
+ *
402
+ * This source code is licensed under the ISC license.
403
+ * See the LICENSE file in the root directory of this source tree.
404
+ */
405
+ ;gn.node;var _n={"arrow-big-down":Pe,"arrow-big-left":Ie,"arrow-big-right":Re,"arrow-big-up":Be,check:He,coins:We,crosshair:Ke,crown:Je,droplet:Xe,flag:Qe,flame:et,gem:nt,gift:it,heart:ot,house:ct,key:ut,lock:ft,map:mt,menu:gt,moon:St,mic:bt,"mic-off":vt,pause:wt,play:Et,"rotate-ccw":Ot,settings:At,shield:Mt,skull:Ht,snowflake:Kt,star:Xt,swords:Qt,target:en,timer:nn,trophy:an,user:sn,users:ln,"volume-2":dn,"volume-x":pn,x:hn,zap:Q(gn)};function vn({name:e,label:t,className:n}){let r=typeof e==`string`?_n[e]:e;return/* @__PURE__ */ F(r,{role:t===void 0?void 0:`img`,"aria-label":t,"aria-hidden":t===void 0||void 0,className:P(N(`text-white`,o.glassIconEdge,n))})}function yn({src:e,label:t,className:n,style:r}){return/* @__PURE__ */ F(`img`,{src:e,alt:t,draggable:!1,className:n,style:r})}function $(e,t){let n=()=>{e.document.visibilityState===`hidden`&&t()};return e.document.addEventListener(`visibilitychange`,n),e.addEventListener(`pagehide`,t),()=>{e.document.removeEventListener(`visibilitychange`,n),e.removeEventListener(`pagehide`,t)}}function bn({host:e,window:t=globalThis.window,onGrab:n,onMove:r,onRelease:i}){let a=null,o=()=>{let t=a;t!==null&&(a=null,e.hasPointerCapture(t)&&e.releasePointerCapture(t),i())},s=e=>{e.pointerId===a&&o()},c=t=>{t.pointerId!==a&&(o(),a=t.pointerId,e.setPointerCapture(t.pointerId),n?.(t))},l=e=>{e.pointerId===a&&r?.(e)},u=new AbortController,{signal:d}=u;e.addEventListener(`pointerdown`,c,{signal:d}),e.addEventListener(`pointermove`,l,{signal:d}),e.addEventListener(`pointerup`,s,{signal:d}),e.addEventListener(`pointercancel`,s,{signal:d}),e.addEventListener(`lostpointercapture`,s,{signal:d}),t.addEventListener(`pointerup`,s,{signal:d}),t.addEventListener(`pointercancel`,s,{signal:d}),t.addEventListener(`blur`,o,{signal:d});let f=$(t,o);return()=>{u.abort(),f(),o()}}var xn=32;function Sn(e){let t=y(e);v(()=>{t.current=e});let n=y(()=>void 0);return g(e=>{n.current(),n.current=e?bn({host:e,onGrab:e=>{t.current.onGrab(e)},onMove:e=>{t.current.onMove(e)},onRelease:()=>{t.current.onRelease()}}):()=>void 0},[])}function Cn({onSteer:e,grabMargin:r=8,className:i}){let[a,s]=b(!1),c=A(),l=O(0),u=O(0),d=y(null),f=y(null),p=y([]),m=(xn+2*r)/xn,h=()=>{let t=f.current;if(!d.current||!t)return;let n=d.current.getBoundingClientRect(),r=n.width/2,i=new L(t.x-(n.left+n.width/2),t.y-(n.top+n.height/2)).clampLength(0,r);l.set(i.x),u.set(i.y),e(new L(i.x/r,-i.y/r))},g=e=>{f.current={x:e.clientX,y:e.clientY},h()},_=Sn({onGrab:e=>{for(let e of p.current)e.stop();p.current=[],s(!0),g(e)},onMove:g,onRelease:()=>{s(!1),f.current=null,c?(l.set(0),u.set(0)):p.current=[C(l,0,t.release),C(u,0,t.release)],e(new L)}});return/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ I(E.div,{ref:_,role:`application`,"aria-label":`Steering stick`,className:P(N(`touch-scale pointer-events-auto relative flex size-32 touch-none items-center justify-center rounded-full select-none`,i)),animate:{opacity:a?1:.4},transition:a?n:t.release,children:[/* @__PURE__ */ F(`div`,{"aria-hidden":!0,"data-slot":`joystick-margin`,className:`absolute touch-none rounded-full`,style:{inset:`calc(var(--spacing) * ${-r})`}}),/* @__PURE__ */ F(E.div,{"aria-hidden":!0,ref:d,"data-slot":`joystick-ring`,className:N(`absolute inset-0 rounded-full border-4`,o.stickRing),animate:{scale:a&&!c?m:1},transition:a?n:t.release,onUpdate:()=>T.postRender(h)}),/* @__PURE__ */ F(E.div,{"aria-hidden":!0,"data-slot":`joystick-knob`,className:N(`pointer-events-none size-14 rounded-full shadow-lg`,o.stickKnob,o.stickKnobShadow),style:{x:l,y:u}})]})})}function wn({className:e=``}){return/* @__PURE__ */ I(`p`,{className:`text-xs ${o.loadingLabel} ${e}`,children:[`Made with`,/* @__PURE__ */ F(`a`,{href:`https://spawnite.com`,target:`_blank`,rel:`noopener noreferrer`,className:`pointer-events-auto ml-1 font-bold underline underline-offset-2`,children:`Spawnite`})]})}var Tn={[R.Auto]:{label:`Auto`,icon:Jt},[R.Minimum]:{label:`Minimum`,icon:It},[R.Low]:{label:`Low`,icon:Rt},[R.Medium]:{label:`Medium`,icon:Pt},[R.High]:{label:`High`,icon:Bt}},En={label:`Custom`,icon:Wt};function Dn({level:e,custom:t=!1,onPress:n}){let{label:r,icon:i}=t?En:Tn[e];return/* @__PURE__ */ F(K,{label:`Quality: ${r}`,onPress:n,children:/* @__PURE__ */ F(i,{"aria-hidden":!0,className:`size-7`})})}var On={sm:{icon:`size-4`,text:`sm`},base:{icon:`size-5`,text:`base`},lg:{icon:`size-7`,text:`lg`},xl:{icon:`size-8`,text:`xl`}};function kn({icon:e,label:n,value:r,size:i=`base`,className:a,classNames:o={}}){return/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ I(`span`,{className:P(`flex items-center gap-2`,a,o.root),children:[/* @__PURE__ */ F(vn,{name:e,label:n,className:P(`text-inherit`,On[i].icon,o.icon)}),/* @__PURE__ */ F(E.span,{initial:{scale:1.25},animate:{scale:1},transition:t.snappy,className:`flex`,children:/* @__PURE__ */ F(G,{size:On[i].text,tabular:!0,className:P(`min-w-[2ch] text-right text-inherit`,o.value),children:r})},r)]})})}function An({label:t,onTap:n,onRelease:r,children:i,className:a}){let s=j(),c=y(!1),l=y(r);v(()=>{l.current=r});let u=()=>{c.current&&(c.current=!1,l.current?.())};return v(()=>()=>{c.current&&(c.current=!1,l.current?.())},[]),/* @__PURE__ */ F(S,{features:w,children:/* @__PURE__ */ F(E.button,{type:`button`,"aria-label":t,onPointerDown:e=>{e.button===0&&(r&&e.currentTarget.setPointerCapture?.(e.pointerId),c.current=!0,n())},onPointerUp:u,onPointerCancel:u,onLostPointerCapture:u,onClick:e=>{e.detail===0&&(n(),r?.())},whileTap:s?void 0:e,className:P(N(`pointer-events-auto flex size-18 shrink-0 touch-none items-center justify-center rounded-full border-2 bg-clip-padding shadow-lg select-none`,`outline-none focus-visible:ring-2 focus-visible:ring-offset-2`,o.glassSurface,o.glassBorder,o.glassShadow,o.glassFocusRing,o.glassFocusRingOffset,o.glassIconEdge,a)),children:i})})}export{ae as ActionBar,z as ActionBarShape,de as Bar,K as Button,fe as ButtonVariant,be as CompletionRing,kn as Counter,Se as Heading,vn as Icon,yn as Image,Cn as Joystick,J as LoadingRing,u as Logomark,wn as MadeWithNotice,i as NumberField,se as ProgressBar,oe as ProgressBarVariant,Dn as QualityButton,s as Select,a as Slider,An as Tap,G as Text,r as TextField,c as Toggle,f as Tooltip,d as Wordmark,bn as gripPointer,o as palette,l as platformName,e as press,t as springs,n as tap,$ as trackPageHide};
@@ -0,0 +1,42 @@
1
+ import { Transition } from "motion/react";
2
+ export declare const springs: {
3
+ /** The default: a state change, a control answering a press. */
4
+ snappy: {
5
+ type: "spring";
6
+ duration: number;
7
+ bounce: number;
8
+ };
9
+ /** Letting go of something, such as a stick returning to centre. A spring
10
+ * belongs on the release rather than on the press. */
11
+ release: {
12
+ type: "spring";
13
+ duration: number;
14
+ bounce: number;
15
+ };
16
+ /** Something coming back to the player, such as an ability off its
17
+ * cooldown. The one spring here that overshoots for the eye to see. */
18
+ bouncy: {
19
+ type: "spring";
20
+ duration: number;
21
+ bounce: number;
22
+ };
23
+ /** Meters and counting numbers. No bounce, because overshooting a health
24
+ * bar shows a moment of health nobody has. */
25
+ meter: {
26
+ type: "spring";
27
+ duration: number;
28
+ bounce: number;
29
+ };
30
+ };
31
+ /** A quick start that settles, as a tween's `ease`: a hop, a ring spreading
32
+ * out. */
33
+ export declare const settleEase: readonly [0.3, 0.7, 0.2, 1];
34
+ /** The press itself, which is a tween and not a spring: a press is feedback on
35
+ * something the player does constantly, and a spring's settle reads as lag. */
36
+ export declare const tap: Transition;
37
+ /** The press every control answers with, as its `whileTap`: one small
38
+ * shrink on the tap tween, the same for a button, a card or a thumb. */
39
+ export declare const press: {
40
+ scale: number;
41
+ transition: Transition;
42
+ };
package/dist/motion.js ADDED
@@ -0,0 +1 @@
1
+ var e={snappy:{type:`spring`,duration:.35,bounce:.15},release:{type:`spring`,duration:.18,bounce:0},bouncy:{type:`spring`,duration:.45,bounce:.4},meter:{type:`spring`,duration:.3,bounce:0}},t=[.3,.7,.2,1],n={duration:.12,ease:`easeOut`},r={scale:.95,transition:n};export{r as press,t as settleEase,e as springs,n as tap};
@@ -0,0 +1,146 @@
1
+ import { ButtonHTMLAttributes, CSSProperties, InputHTMLAttributes, Ref, SelectHTMLAttributes } from "react";
2
+ /** The attributes the field passes to its input: any it does not set
3
+ * itself, such as `aria-describedby`. */
4
+ type InputAttributes$2 = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "aria-label" | "min" | "max">;
5
+ /** @inline */
6
+ interface NumberFieldProps extends InputAttributes$2 {
7
+ /** The accessible name. The field draws no label of its own: the
8
+ * layout around it does. */
9
+ label: string;
10
+ value: number;
11
+ /** Called with the typed number when the player presses Enter or
12
+ * leaves the field, never at each key: "0." on the way to "0.5" is no
13
+ * number. Text that is not a number keeps the value. */
14
+ onChange: (value: number) => void;
15
+ /** The least the field reports; a lower number typed reports this. */
16
+ min?: number;
17
+ /** The most the field reports; a higher number typed reports this. */
18
+ max?: number;
19
+ /** The value as the field shows it. @defaultValue `String` */
20
+ display?: (value: number) => string;
21
+ /** Off: dimmed, and it takes no typing. */
22
+ disabled?: boolean;
23
+ /** An override that shows in the diff. */
24
+ className?: string;
25
+ }
26
+ /** A number a player types.
27
+ * @category UI */
28
+ declare function NumberField({ label, value, onChange, min, max, display, disabled, className, onFocus, onBlur, onKeyDown, ...input }: NumberFieldProps): import("react").JSX.Element;
29
+ /** One choice of a Select: the value it reports, and the words it shows
30
+ * where they differ.
31
+ * @category UI */
32
+ type SelectOption = string | {
33
+ value: string;
34
+ label: string;
35
+ };
36
+ /** The attributes the select passes to its element: any it does not set
37
+ * itself, such as `name` or `autoComplete`. */
38
+ type SelectAttributes = Omit<SelectHTMLAttributes<HTMLSelectElement>, "value" | "defaultValue" | "onChange" | "aria-label">;
39
+ /** @inline */
40
+ interface SelectProps extends SelectAttributes {
41
+ /** The accessible name. The select draws no label of its own: the
42
+ * layout around it does. */
43
+ label: string;
44
+ options: readonly SelectOption[];
45
+ /** The chosen option's value. */
46
+ value: string;
47
+ /** Called with the value of the option the player picks. */
48
+ onChange: (value: string) => void;
49
+ /** What the select shows while `value` is empty, and what a player
50
+ * cannot pick. */
51
+ placeholder?: string;
52
+ /** Off: dimmed, and it takes no pick. */
53
+ disabled?: boolean;
54
+ /** An override that shows in the diff. */
55
+ className?: string;
56
+ }
57
+ /** One choice from a list that opens, the browser's own, so a phone opens
58
+ * its wheel for it.
59
+ * @category UI */
60
+ declare function Select({ label, options, value, onChange, placeholder, disabled, className, ...select }: SelectProps): import("react").JSX.Element;
61
+ /** A Slider's style: any CSS a game computes, and the track's paint.
62
+ * @category UI */
63
+ interface SliderStyle extends CSSProperties {
64
+ /** The track's background, such as a gradient through every hue. The
65
+ * fill in the accent up to the value unless set. */
66
+ "--slider-track"?: string;
67
+ }
68
+ /** The attributes the slider passes to its input: any it does not set
69
+ * itself, such as `aria-describedby`. */
70
+ type InputAttributes$1 = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "aria-label" | "min" | "max" | "step" | "style">;
71
+ /** @inline */
72
+ interface SliderProps extends InputAttributes$1 {
73
+ /** The accessible name. The slider draws no label of its own: the
74
+ * layout around it does. */
75
+ label: string;
76
+ value: number;
77
+ min: number;
78
+ max: number;
79
+ /** @defaultValue `1` */
80
+ step?: number;
81
+ /** Called with each value the slider moves to. */
82
+ onChange: (value: number) => void;
83
+ /** Called with the value where a drag or a key press ends, for a
84
+ * change worth making once, such as a save. */
85
+ onCommit?: (value: number) => void;
86
+ /** The value as a screen reader says it, such as "50 percent". */
87
+ valueText?: string;
88
+ /** Off: dimmed, and it takes no change. */
89
+ disabled?: boolean;
90
+ /** An override that shows in the diff. */
91
+ className?: string;
92
+ /** A style that comes from data, such as a track painted as a colour
93
+ * ramp through `--slider-track`. */
94
+ style?: SliderStyle;
95
+ }
96
+ /** A value picked along a track, filled in the menu's accent up to the
97
+ * value.
98
+ * @category UI */
99
+ declare function Slider({ label, value, min, max, step, onChange, onCommit, valueText, disabled, className, style, onPointerUp, onKeyUp, ...input }: SliderProps): import("react").JSX.Element;
100
+ /** The attributes the field passes to its input: any the field does not
101
+ * set itself, such as `name`, `type`, `autoComplete` or `maxLength`. */
102
+ type InputAttributes = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "aria-label">;
103
+ /** @inline */
104
+ interface TextFieldProps extends InputAttributes {
105
+ /** The accessible name. The field draws no label of its own: the
106
+ * layout around it does. */
107
+ label: string;
108
+ value: string;
109
+ /** Called with the text at each key. */
110
+ onChange: (text: string) => void;
111
+ /** Called with the text when the player presses Enter or leaves the
112
+ * field, for a change worth making once, such as a save. */
113
+ onCommit?: (text: string) => void;
114
+ /** What the empty field shows. */
115
+ placeholder?: string;
116
+ /** Off: dimmed, and it takes no typing. */
117
+ disabled?: boolean;
118
+ /** An override that shows in the diff. */
119
+ className?: string;
120
+ /** For the layout that moves the focus here. */
121
+ ref?: Ref<HTMLInputElement>;
122
+ }
123
+ /** A line of text a player types.
124
+ * @category UI */
125
+ declare function TextField({ label, value, onChange, onCommit, placeholder, disabled, className, onBlur, onKeyDown, ...input }: TextFieldProps): import("react").JSX.Element;
126
+ /** The attributes the switch passes to its button: any it does not set
127
+ * itself, such as `aria-describedby`. */
128
+ type ButtonAttributes = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "value" | "onChange" | "onClick" | "aria-label" | "aria-checked" | "role">;
129
+ /** @inline */
130
+ interface ToggleProps extends ButtonAttributes {
131
+ /** The accessible name. The switch draws no label of its own: the
132
+ * layout around it does. */
133
+ label: string;
134
+ /** Whether it is on. */
135
+ value: boolean;
136
+ /** Called with the other state on a press. */
137
+ onChange: (value: boolean) => void;
138
+ /** Off: dimmed, and it takes no press. */
139
+ disabled?: boolean;
140
+ /** An override that shows in the diff. */
141
+ className?: string;
142
+ }
143
+ /** An on-and-off switch, filled in the menu's accent while on.
144
+ * @category UI */
145
+ declare function Toggle({ label, value, onChange, disabled, className, ...button }: ToggleProps): import("react").JSX.Element;
146
+ export { Slider as a, Select as c, NumberField as d, NumberFieldProps as f, TextFieldProps as i, SelectOption as l, ToggleProps as n, SliderProps as o, TextField as r, SliderStyle as s, Toggle as t, SelectProps as u };