@reactive-web-components/rwc 2.61.7 → 2.63.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 +52 -1
- package/main.d.ts +2 -5
- package/package.json +5 -5
- package/reactive-web-component.B_uUgR3i.umd.cjs +2 -0
- package/reactive-web-component.BmD7vrr3.js +1134 -0
- package/shared/types/element.d.ts +1 -0
- package/shared/utils/signal/signal.d.ts +1 -1
- package/shared/utils/signal/utils.d.ts +6 -0
- package/test-components/test-batching.d.ts +8 -0
- package/reactive-web-component.B1k6LJYO.umd.cjs +0 -2
- package/reactive-web-component.BOufSDNu.js +0 -1097
package/README.md
CHANGED
|
@@ -243,7 +243,32 @@ city.set('SPB'); // userData immediately updates to ['Jane', 30, 'SPB']
|
|
|
243
243
|
- **`forkJoin`** — waits for all signals to update before emitting a new value. Useful when you need all values to be updated together.
|
|
244
244
|
- **`combineLatest`** — emits a new value immediately when any signal changes. Useful for real-time updates and reactive computations.
|
|
245
245
|
|
|
246
|
-
|
|
246
|
+
#### firstUpdate
|
|
247
|
+
|
|
248
|
+
Executes a callback after the first update of a reactive signal. Useful for performing one-time actions when a signal receives its first non-initial value.
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
import { firstUpdate, signal } from '@shared/utils';
|
|
252
|
+
|
|
253
|
+
const userSignal = signal(null);
|
|
254
|
+
|
|
255
|
+
// This callback will be called only once when userSignal is first updated
|
|
256
|
+
firstUpdate(userSignal, (user) => {
|
|
257
|
+
console.log('User loaded for the first time:', user);
|
|
258
|
+
// Perform initialization logic
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Later, when userSignal is updated:
|
|
262
|
+
userSignal.set({ name: 'John', age: 30 }); // Callback executes
|
|
263
|
+
userSignal.set({ name: 'Jane', age: 25 }); // Callback does NOT execute again
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Application:**
|
|
267
|
+
- Performing one-time initialization when data first arrives
|
|
268
|
+
- Triggering side effects only on the first update
|
|
269
|
+
- Handling initial data loading scenarios
|
|
270
|
+
|
|
271
|
+
### Function as Child Content (recommended style for dynamic lists and conditional render)
|
|
247
272
|
|
|
248
273
|
Functions passed as child content to `el` or `customEl` are automatically converted to reactive content. This allows convenient creation of dynamic content that will update when dependent signals change. The content function receives context (a reference to its component) as the first argument.
|
|
249
274
|
|
|
@@ -536,6 +561,7 @@ To set properties, attributes, classes, events, and effects for elements and com
|
|
|
536
561
|
```typescript
|
|
537
562
|
export type ComponentInitConfig<T extends ExtraHTMLElement> = Partial<{
|
|
538
563
|
classList: ConfigClassList;
|
|
564
|
+
ref: ReactiveSignal<ComponentConfig<T>>;
|
|
539
565
|
style: ConfigStyle;
|
|
540
566
|
attributes: ConfigAttribute<T>;
|
|
541
567
|
customAttributes: ConfigCustomAttribute;
|
|
@@ -558,6 +584,7 @@ export type ComponentInitConfig<T extends ExtraHTMLElement> = Partial<{
|
|
|
558
584
|
#### Main Features
|
|
559
585
|
|
|
560
586
|
- **classList** — array of classes (strings or functions/signals)
|
|
587
|
+
- **ref** — reactive signal to get a reference to the component instance
|
|
561
588
|
- **style** — CSS styles object; supports both regular properties and CSS Custom Properties (`--var`), values can be functions/signals
|
|
562
589
|
- **attributes** — object with HTML attributes
|
|
563
590
|
- **customAttributes** — object with custom attributes
|
|
@@ -663,6 +690,30 @@ div(
|
|
|
663
690
|
)
|
|
664
691
|
```
|
|
665
692
|
|
|
693
|
+
**7. Getting component reference with ref**
|
|
694
|
+
|
|
695
|
+
```typescript
|
|
696
|
+
const buttonRef = signal<ComponentConfig<HTMLButtonElement>>(null);
|
|
697
|
+
|
|
698
|
+
// Later, use the reference
|
|
699
|
+
button({
|
|
700
|
+
ref: buttonRef,
|
|
701
|
+
listeners: {
|
|
702
|
+
click: () => console.log('Button clicked')
|
|
703
|
+
}
|
|
704
|
+
}, 'Click me');
|
|
705
|
+
|
|
706
|
+
// Access the component later
|
|
707
|
+
effect(() => {
|
|
708
|
+
const buttonComponent = buttonRef();
|
|
709
|
+
if (buttonComponent) {
|
|
710
|
+
console.log('Button component available:', buttonComponent);
|
|
711
|
+
// You can call component methods:
|
|
712
|
+
// buttonComponent.addClass('active');
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
```
|
|
716
|
+
|
|
666
717
|
---
|
|
667
718
|
|
|
668
719
|
**Best practice:**
|
package/main.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { ComponentConfig } from './shared/types';
|
|
2
1
|
import { BaseElement } from './shared/utils';
|
|
3
2
|
export declare class TestComponent extends BaseElement {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
connectedCallback(): void;
|
|
7
|
-
render(): ComponentConfig<HTMLDivElement>;
|
|
3
|
+
testProperty: import('./shared/utils').ReactiveSignal<boolean>;
|
|
4
|
+
render(): import('./shared').ComponentConfig<HTMLDivElement>;
|
|
8
5
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reactive-web-components/rwc",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.63.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./shared/index.d.ts",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
8
|
"types": "./shared/index.d.ts",
|
|
9
|
-
"import": "./reactive-web-component.
|
|
10
|
-
"require": "./reactive-web-component.
|
|
9
|
+
"import": "./reactive-web-component.BmD7vrr3.js",
|
|
10
|
+
"require": "./reactive-web-component.B_uUgR3i.umd.cjs"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"author": "tamazyanarsen",
|
|
@@ -34,6 +34,6 @@
|
|
|
34
34
|
"ui",
|
|
35
35
|
"frontend"
|
|
36
36
|
],
|
|
37
|
-
"module": "./reactive-web-component.
|
|
38
|
-
"main": "./reactive-web-component.
|
|
37
|
+
"module": "./reactive-web-component.BmD7vrr3.js",
|
|
38
|
+
"main": "./reactive-web-component.B_uUgR3i.umd.cjs"
|
|
39
39
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(i,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(i=typeof globalThis<"u"?globalThis:i||self,A(i.ReactiveComponent={}))})(this,function(i){"use strict";var pn=Object.defineProperty;var En=(i,A,_)=>A in i?pn(i,A,{enumerable:!0,configurable:!0,writable:!0,value:_}):i[A]=_;var u=(i,A,_)=>En(i,typeof A!="symbol"?A+"":A,_);const A=n=>n&&typeof n=="object"&&("classList"in n||"attributes"in n||"customAttributes"in n||"reactiveClassList"in n||"listeners"in n||"customListeners"in n||"children"in n||"effects"in n||"ref"in n||"style"in n||Object.keys(n).some(t=>t.startsWith(".")||t.startsWith("@")||t.startsWith("$")))&&!("hostElement"in n),_=n=>n&&typeof n=="object"&&"hostElement"in n&&"append"in n&&"set"in n&&"addStyle"in n&&"setAttribute"in n&&"addClass"in n&&"addEffect"in n&&"addReactiveContent"in n&&"setReactiveContent"in n&&"clear"in n,D=(n,t,...e)=>{t&&t.apply(n,e)};let G=!0;const b=(...n)=>{G&&console.debug(["[rwc]",...n].join(" | "),...Array.from(n.join("").matchAll(/%c/gm)).map((t,e)=>e%2===0?"color:red":"color:inherit"))},F=n=>n.replace(/([A-Z])/gm,t=>`-${t.toLowerCase()}`),rt=n=>n.replace(/-(\w)/gm,(t,e)=>e.toUpperCase()),B=(n,...t)=>{if(!G)return;const e={r:"color: #ff0000",g:"color: #00ff00",b:"color: #0000ff",y:"color: #ffff00",p:"color: #800080",c:"color: #00ffff",o:"color: #ffa500",w:"color: #808080"},s=n.match(/@[rgbpycow]/g)||[],o=s.map(c=>{const a=c.slice(1);return e[a]||"color: inherit"});let r=n;s.forEach(c=>{const a=new RegExp(`\\${c}([^\\s,]+)`,"g");r=r.replace(a,"%c$1")}),console.log(r,...o,...t)},Ot=()=>{G=!0},it=()=>{G=!1};it();const Mt=(n,t)=>{n.every(Boolean)&&t(n)},V=new Set;let Q=!1,x=!1;const $t=()=>{if(!x){x=!0;try{if(Q=!1,V.size===0)return;const n=Array.from(V);V.clear(),n.forEach(t=>{if(t.status==="active"){K(t),O.push(t);try{t()}catch(e){console.error("Error in effect:",e)}finally{O.pop()}}}),V.size>0&&ct()}finally{x=!1}}};function _t(){queueMicrotask($t)}const ct=()=>{Q||(Q=!0,_t())},Ht=n=>{V.add(n),ct()},O=[],K=n=>{var t,e,s,o;(t=n.children)==null||t.forEach(r=>{var c;return(c=r.destroy)==null?void 0:c.call(r)}),(e=n.children)==null||e.clear(),(s=n.cleanupSet)==null||s.forEach(r=>r()),(o=n.cleanupSet)==null||o.clear()};function T(n,t){let e=(t==null?void 0:t.signalCompareFn)||(()=>!0);const s=new Set;function o(){var c;const r=O[O.length-1];return r&&!r.fake&&!s.has(r)&&r.status==="active"&&(s.add(r),(c=r.cleanupSet)==null||c.add(()=>s.delete(r))),!(t!=null&&t.name)&&(r!=null&&r.effectId)&&o.setName(r.effectId),n}return o.signalId=`${(t==null?void 0:t.name)||""}_${Math.random().toString(36).substring(2,15)}`,o.setName=function(r){return o.signalId=`${r}_${Math.random().toString(36).substring(2,15)}`,o},o.setCompareFn=function(r){return e=r,o},o.clearSubscribers=function(){s.clear()},o.getSubscribers=function(){return s},o.peek=function(){return Object.freeze(n)},o.initValue=Object.freeze(n),o.forceSet=function(r){n=r,s.forEach(c=>{Ht(c)})},o.set=function(r,c=e){n!==r&&c(n,r)&&o.forceSet(r)},o.update=function(r){o.set(r(n))},o.pipe=(r,c)=>{c!=null&&c.name&&o.setName(c.name);const a=T(null);return v(()=>{const d=o();v(()=>{const h=r(d);h instanceof Promise?h.then(E=>a.set(E)):R(h)?v(()=>a.set(h()),{name:"pipe_effect_inner"}):a.set(h)},{name:"pipe_effect"})},{name:(c==null?void 0:c.name)||`pipe_${o.signalId}`}),a},o}function v(n,t){var r;const e=`${(t==null?void 0:t.name)||""}_${Math.random().toString(36).substring(2,15)}`;b("current effect",`%c${e}%c`);const s=n;s.status="active",s.children=new Set,s.effectId=e;const o=O[O.length-1];return o&&((r=o.children)==null||r.add(s),s.parent=new WeakRef(o),s.destroy=()=>{var c;K(s),(c=o.children)==null||c.delete(s),s.destroy=void 0,s.status="inactive"}),s.cleanupSet=new Set,O.push(s),s(),O.pop(),s}const R=n=>!!n&&["object","function"].includes(typeof n)&&"set"in n&&"update"in n&&"forceSet"in n&&"signalId"in n;function kt(n,...t){const e=T("");return v(()=>{const s=t.map(r=>R(r)?String(r()):String(r)),o=[n[0]];s.forEach((r,c)=>{o.push(r,n[c+1])}),e.set(o.join(""))}),e}function Wt(n,t){const e=T(t??null),s=o=>e.set(o);return n instanceof Promise?n.then(s):typeof n=="function"&&v(()=>{const o=n();o instanceof Promise?o.then(s):R(o)?v(()=>s(o())):s(o)}),e}function Pt(n,t){let e=n(),s=t();v(()=>{const o=n(),r=t();o!==r&&(o!==e?t.set(o):r!==s&&n.set(r)),e=o,s=r})}function Ft(...n){let t=n.map(s=>s());const e=T(t);return n.forEach((s,o)=>{v(()=>{const r=()=>t.filter(c=>c!==void 0).length;r()===n.length&&(t=Array.from(t).fill(void 0)),t[o]=s(),r()===n.length&&e.set([...t])})}),e}const Bt=(...n)=>{const t=T([]);return v(()=>{t.set(n.map(e=>e()))}),t},Vt=(n,t)=>{let e=!0;const s=v(()=>{var o;e&&(e=!1,t(n()),(o=s.destroy)==null||o.call(s))})},U="eventProps",Y="EVENT_CONFIG",J="observedAttributes",Jt=()=>(n,t)=>{Reflect.get(n,J)||Reflect.defineProperty(n,J,{value:[]}),Reflect.get(n,J).push(F(t))},Nt=n=>(t,e)=>{Reflect.get(t,U)||Reflect.defineProperty(t,U,{value:[]}),Reflect.get(t,Y)||Reflect.defineProperty(t,Y,{value:{}}),Reflect.get(t,Y)[e]={bubbles:(n==null?void 0:n.bubbles)??!1,composed:(n==null?void 0:n.composed)??!1},Reflect.get(t,U).push(e)},tt=(n,t=!1)=>e=>{b(n,"start register static attr",e.prototype[J]);const s=[];if(e.styles){const r=e.styles,c=[];Array.isArray(r)?c.push(...r):c.push(r),c.forEach(a=>{const d=new CSSStyleSheet;d.replaceSync(a),s.push(d);const S=new CSSStyleSheet;S.replaceSync(a.slice(a.indexOf("@property"))),document.adoptedStyleSheets.push(S)})}class o extends e{constructor(...c){b("constructor",`%c${n}%c`),super(t,...c),s.length>0&&this.shadow.adoptedStyleSheets.push(...s)}render(){return b("rwc: render from new class"),e.prototype.render.call(this)}attributeChangedCallback(c,a,d){b("%cAttribute has changed.%c",`%c${c}%c`,`oldValue: ${a}, newValue: ${d}`,`%c${n}%c`);try{d=JSON.parse(d)}catch{}const S=rt(c);if(S in this&&R(this[S])){const h=this[S];h.setName(c),d===null?(h.set(h.initValue),this.removeAttribute(c)):h.set(d)}D(this,e.prototype.attributeChangedCallback,c,a,d)}connectedCallback(){const c=()=>{var d,S;b("rwc: connectedCallback"),b("connectedCallback",`%c${n}%c`,this),(d=this.init)==null||d.call(this),this.providers&&Object.keys(this.providers).length>0&&(b("WRAPPER for providers",n),Object.entries(this.providers).forEach(([h,f])=>{b("register provider",h,f()),this.addEventListener(h,E=>{var m;b("send provider",h,f());const p=E;((m=p.detail)==null?void 0:m.context)===h&&(p.stopPropagation(),p.detail.callback(f))})})),this.checkInjects(),(S=e.prototype[U])==null||S.forEach(h=>{this[h]=f=>{const E=e.prototype[Y][h],{bubbles:p,composed:m}=E;R(f)?v(()=>{B("@oemit reactive value",f()),this.dispatchEvent(new CustomEvent(h,{detail:f(),bubbles:p,composed:m}))}):(B("@oemit value",f),this.dispatchEvent(new CustomEvent(h,{detail:f,bubbles:p,composed:m})))}}),b("start render",`%c${n}%c`,n);const a=()=>{b("rwc: insertRenderTemplate");const f=this.render().hostElement;f&&this.shadow.appendChild(f),D(this,e.prototype.connectedCallback),this.appendSlotContent()};if(this.rootStyle&&!e.styles){const h=p=>p instanceof Promise||Array.isArray(p)&&p.every(m=>m instanceof Promise),f=this.rootStyle,E=p=>{const m=new CSSStyleSheet;m.replaceSync(p),this.shadow.adoptedStyleSheets.push(m);const w=new CSSStyleSheet;w.replaceSync(p.slice(p.indexOf("@property"))),document.adoptedStyleSheets.push(w)};if(h(f)){const p=[];Array.isArray(f)?p.push(...f):p.push(f),Promise.all(p).then(m=>m.forEach(w=>E(w.default))).then(()=>a())}else{const p=[];Array.isArray(f)?p.push(...f):p.push(f),p.forEach(m=>E(m)),a()}}else a();this.slotContext&&Object.keys(this.slotContext).length>0&&this.shadow.querySelectorAll("slot").forEach(h=>{b(this.slotContext,this.slotContext&&this.slotContext[h.name]),B("@bslot element",h,`name:${h.name};`,h.assignedElements()),h.assignedElements().forEach(f=>{const E=this.slotContext[h.name];this.slotContext&&R(E)&&(B("@oslot element",h,`name:${h.name};`,h.assignedElements()),v(()=>{f.dispatchEvent(new CustomEvent("handleSlotContext",{detail:E()}))}))})})};c.fake=!0,c.component=new WeakRef(this),this.effectSet.add(new WeakRef(c)),v(c,{name:"FAKE_wrapperEffect"})}disconnectedCallback(){this.allSlotContent=[],this.slotContent={},this.htmlSlotContent={},this.effectSet.forEach(c=>{var a,d;return(d=(a=c.deref())==null?void 0:a.destroy)==null?void 0:d.call(a)}),this.effectSet.clear(),this.shadow.replaceChildren(),this.replaceChildren(),D(this,e.prototype.disconnectedCallback)}}return u(o,"observedAttributes",e.prototype[J]??[]),u(o,"renderTagName",n),o.toString=()=>n,customElements.get(n)?console.error(`название тега ${n} повторяется, компонент ${e.name} не зарегистрирован`):customElements.define(n,o),e.renderTagName=n,e};class H extends HTMLElement{constructor(e=!1){super();u(this,"init");u(this,"isSlotLazyLoading",!1);u(this,"slotTemplate");u(this,"slotContext");u(this,"rootStyle");u(this,"modelValue");u(this,"providers");u(this,"effectSet",new Set);u(this,"appendAllSlotContent");u(this,"allSlotContent",[]);u(this,"slotContent",{});u(this,"htmlSlotContent",{});u(this,"shadow");u(this,"injects",{});this.shadow=this.attachShadow({mode:e?"closed":"open"})}appendChild(e,s=!0){var o;if(this.isSlotLazyLoading&&s){if(e instanceof HTMLElement){const r=e.slot||"default";this.htmlSlotContent[r]||(this.htmlSlotContent[r]=[]),(o=this.htmlSlotContent[r])==null||o.push(e)}}else return super.appendChild(e)}appendSlotContent(){var e;(e=this.appendAllSlotContent)==null||e.call(this)}inject(e){return b("%cinject%c",e),this.injects[e]||(this.injects[e]=T(null)),this.injects[e]}checkInjects(){Object.entries(this.injects).forEach(([e,s])=>{b("%cinject%c",`%c${e}%c`,"from BaseElement (dispatch event)"),this.shadow.dispatchEvent(new CustomEvent(e,{detail:{context:e,callback:o=>v(()=>{s.set(o())},{name:e})},bubbles:!0,composed:!0}))})}setReactiveValue(e){this.modelValue=e}}u(H,"observedAttributes",[]),u(H,"renderTagName",""),u(H,"styles");const qt=n=>"render"in n&&"setReactiveValue"in n,zt="handleSlotContext",lt="onConnected",at=n=>typeof n=="string"?n:JSON.stringify(n),Dt=n=>{const t=document.createElement("span");return t.textContent=at(n),t},dt=(n,t)=>(n.appendChild(Dt(t)),n),Gt=(n,t)=>(n.replaceChildren(),dt(n,t)),ft=n=>{const t=document.createElement("span");return v(()=>{const e=n();t.textContent=at(e)}),t};class ht{constructor(t){u(this,"wrapper");u(this,"keyedEffects",new Map);u(this,"append",(...t)=>(t.forEach(e=>{var o;const s=e.hostElement;s&&((o=this.hostElement)==null||o.appendChild(s),lt in s&&setTimeout(()=>{var r;(r=s.onConnected)==null||r.call(s,e,s)}))}),this));u(this,"set",(...t)=>{var s;this.clear();const e=document.createDocumentFragment();return t.forEach(o=>{const r=o.hostElement;r&&e.appendChild(r)}),(s=this.hostElement)==null||s.appendChild(e),this});u(this,"removeChild",(...t)=>(t.forEach(e=>{var s,o;if(Array.from(((s=this.hostElement)==null?void 0:s.childNodes.values())||[]).some(r=>r===e.hostElement)){const r=e.hostElement;r&&((o=this.hostElement)==null||o.removeChild(r))}}),this));u(this,"addHtmlContent",t=>{const e=this.hostElement;return e?(dt(e,t),this):this});u(this,"setHtmlContent",t=>{const e=this.hostElement;return e?(Gt(e,t),this):this});u(this,"setAttribute",(t,e)=>{var r;b("setAttribute",t,e);const s=this.hostElement;if(!s)return this;let o;if((typeof e=="boolean"||e===null)&&!(s instanceof H))if(e)o="";else{this.removeAttribute(t);const c=t.toLowerCase();return c in s&&(s[c]=null),this}else typeof e!="string"?o=JSON.stringify(e):o=e;if((r=this.hostElement)==null||r.setAttribute(F(t),o),!(s instanceof H)){const c=t.toLowerCase();c in s&&(s[c]=e)}return this});u(this,"setCustomAttribute",(t,e)=>{var o;let s;return typeof e!="string"?s=JSON.stringify(e):s=e,(o=this.hostElement)==null||o.setAttribute(F(t),s),this});u(this,"setReactiveAttribute",(t,e)=>(this.addEffect(s=>{b("setReactiveAttribute effect",t,e),s.setAttribute(t,e())},t),this));u(this,"setReactiveCustomAttribute",(t,e)=>(this.addEffect(s=>{s.setCustomAttribute(t,e())}),this));u(this,"removeAttribute",t=>{var e;return(e=this.hostElement)==null||e.removeAttribute(F(t)),this});u(this,"addStyle",t=>{const e=this.hostElement;return e?(Object.entries(t).forEach(([s,o])=>{const r=s.startsWith("--");typeof o=="function"?this.addEffect(()=>{if(r){const c=String(o()||"");e.style.setProperty(s,c)}else e.style[s]=o()}):typeof o=="string"&&(r?e.style.setProperty(s,o):e.style[s]=o)}),this):this});u(this,"onConnected",t=>this.hostElement?(Reflect.defineProperty(this.hostElement,lt,{get(){return t}}),this):this);u(this,"addClass",(...t)=>(t.forEach(e=>{var s;typeof e=="string"?(s=this.hostElement)==null||s.classList.add(...e.split(" ").flatMap(o=>o.split(`
|
|
2
|
+
`)).map(o=>o.trim()).filter(Boolean)):(()=>{let o=null;this.addEffect(()=>{const r=e();r.length>0&&(o?this.replaceClass(o,r):this.addClass(r),o=r)})})()}),this));u(this,"setClass",(...t)=>{var e,s,o;return(s=this.hostElement)==null||s.classList.remove(...((e=this.hostElement)==null?void 0:e.classList)||[]),(o=this.hostElement)==null||o.classList.add(...t),this});u(this,"addReactiveClass",t=>(Object.keys(t).forEach(e=>{this.addEffect(s=>{t[e]()?s.addClass(e):s.removeClass(e)})}),this));u(this,"removeClass",(...t)=>{var e;return(e=this.hostElement)==null||e.classList.remove(...t),this});u(this,"replaceClass",(t,e)=>{var s;return(s=this.hostElement)==null||s.classList.replace(t,e),this});u(this,"addEffect",(t,e)=>{var r,c;const s=this.hostElement;if(!s)return this;const o=()=>t(this,s);if(e){const a=(r=this.keyedEffects.get(e))==null?void 0:r.deref();a&&K(a)}return(c=s.effectSet)==null||c.add(new WeakRef(o)),o.component=this.wrapper,v(o,{name:(e==null?void 0:e.toString())||s.tagName}),this});u(this,"addReactiveContent",t=>{var e;return(e=this.hostElement)==null||e.appendChild(ft(t)),this});u(this,"setReactiveContent",t=>{var e;return this.clear(),(e=this.hostElement)==null||e.appendChild(ft(t)),this});u(this,"clear",()=>{var t;return(t=this.hostElement)==null||t.replaceChildren(),this});this.wrapper=t;const e=t.deref();e&&(e.effectSet=new Set)}get hostElement(){return this.wrapper.deref()}addEventlistener(t,e,s=!1){var o;return(o=this.hostElement)==null||o.addEventListener(t,r=>e(r,this,this.hostElement),s),this}}class Kt extends ht{constructor(){super(...arguments);u(this,"setReactiveValue",e=>(this.hostElement instanceof H&&this.hostElement.setReactiveValue(e),this));u(this,"setSlotTemplate",e=>{var o;const s=(o=this.hostElement)==null?void 0:o.slotTemplate;return s&&Object.entries(e).forEach(([r,c])=>{s[r]=c}),this})}}const Ut=()=>()=>{},ut=n=>new Kt(new WeakRef(n)),mt=n=>new ht(new WeakRef(n)),pt=(n,...t)=>({classList:[...n.map(e=>e.trim()).filter(Boolean),...t]}),Yt=(n,...t)=>pt(n,...t),et=(n,t)=>{var o;if(!t||!n.deref())return;const e=Object.keys(t||{}).filter(r=>r.startsWith(".")||r.startsWith("@")||r.startsWith("$"));e.filter(r=>r.startsWith(".")).forEach(r=>{t!=null&&t.attributes||(t.attributes={}),t.attributes[r.slice(1)]=t[r]}),e.filter(r=>r.startsWith("@")).forEach(r=>{t!=null&&t.listeners||(t.listeners={});const c=r.slice(1);t.listeners[c]=t[r]}),e.filter(r=>r.startsWith("$")).forEach(r=>{t!=null&&t.effects||(t.effects=[]),t.effects.push(t[r])});const s=n.deref();if(s)return St(s,t.classList),vt(s,t.style),wt(s,t.attributes),yt(s,t.reactiveClassList),bt(s,t.customAttributes),Ct(s,t.children),Et(s,t.effects),nt(s,t.listeners),nt(s,t.customListeners),(o=t.ref)==null||o.set(s),s},nt=(n,t)=>{t&&Object.entries(t).forEach(([e,s])=>{typeof s=="function"&&n.addEventlistener(e,s)})},Et=(n,t)=>t==null?void 0:t.forEach(e=>n.addEffect(e)),Ct=(n,t)=>N(new WeakRef(n),...t||[])??n,bt=(n,t)=>{const e=t;e&&Object.keys(e).forEach(s=>{R(e[s])?n.setReactiveCustomAttribute(s,e[s]):typeof e[s]=="function"?n.addEffect(()=>{n.setCustomAttribute(s,e[s]())}):n.setCustomAttribute(s,e[s])})},St=(n,t)=>n.addClass(...t||[]),yt=(n,t)=>n.addReactiveClass(t||{}),vt=(n,t)=>n.addStyle(t||{}),wt=(n,t)=>{const e=t,s=(o,r)=>{r!==void 0&&(b("addAttribute",o,r),R(r)?n.setReactiveAttribute(o,r):typeof r=="function"?n.addEffect(()=>{n.setAttribute(o,r())}):n.setAttribute(o,r))};e&&Object.keys(e).forEach(o=>{s(o,e[o])})},N=(n,...t)=>{const e=n.deref();if(e)return t.forEach(s=>{typeof s=="string"?s.trim().length>0&&e.addHtmlContent(s):R(s)?e.addReactiveContent(s):e.append(s)}),e},k=(n,t)=>{const e=document.createElement(n),s=mt(e);return et(new WeakRef(s),t)??s},Z=(n,t)=>{const[e,...s]=n.split(" ").map(r=>r.trim()),o=k(e,t);return s.length>0&&o.addClass(...s),(...r)=>N(new WeakRef(o),...r.filter(Boolean).flat().flatMap(c=>typeof c=="function"&&!R(c)?j(()=>c(o)):c))??o},j=n=>{const t=`getSignalContent_${Math.random().toString(36).substring(2,15)}`;return k("div").addStyle({display:"contents"}).addEffect(e=>{e.clear(),N(new WeakRef(e),...[n()].flat())},t)},Zt=(n,t,e)=>{const s=k("div").addStyle({display:"contents"}),o=new Map,r=new Map,c=new Map,a=new Map;let d=[];const S=new Set;let h=n.peek();const f=m=>{S.delete(m),o.delete(m),r.delete(m),c.delete(m),a.delete(m)},E=m=>{if(!a.has(m)){const w=d.indexOf(m);return a.set(m,w),w}return a.get(m)},p=(m,w,q)=>Array.from(q.children).indexOf(m)!==w;return v(()=>{const m=n(),w=m.map(t).map(C=>typeof C=="string"?C:C.toString()),q=new Set(w);a.clear(),w.forEach((C,y)=>{a.set(C,y)}),d=w;const M=s.hostElement;if(!M)return;b("containerChildren",Array.from(M.children),d);const z=[];Array.from(M.children).forEach(C=>{const y=C.dataset.key;y&&!q.has(y)&&z.push(C)}),z.forEach(C=>{const y=C.dataset.key;b("remove element",y,C),C.remove(),f(y)}),w.forEach((C,y)=>{var g;const L=m[y],P=h[y];if(!o.has(C))b("create new element",C,L),o.set(C,T(Math.random().toString(36).substring(2,15))),r.set(C,()=>e(L,y,m).setCustomAttribute("data-key",C));else if(P&&JSON.stringify(L)!==JSON.stringify(P)){const I=c.get(C);(g=o.get(C))==null||g.set(Math.random().toString(36).substring(2,15)),r.set(C,()=>e(L,y,m).setCustomAttribute("data-key",C)),I&&I.parentNode&&b("mark element for update",C)}}),h=[...m.map(C=>({...C}))];const X=()=>{o.forEach((C,y)=>{b("key from setTimeout foreach currItemSignalMap",y),S.has(y)||(S.add(y),v(()=>{var jt;C();const L=E(y),P=(jt=r.get(y))==null?void 0:jt();if(!P||!P.hostElement)return;const g=s.hostElement,I=P.hostElement;if(!g)return;b("call effect from setTimeout",y,I);const $=c.get(y);if($&&$.parentNode===g){if(p($,L,g)){const W=g.children[L];W&&W!==$?g.insertBefore($,W):W||g.appendChild($)}I!==$&&($.replaceWith(I),c.set(y,I))}else if(c.set(y,I),L<g.children.length){const W=g.children[L];W?g.insertBefore(I,W):g.appendChild(I)}else g.appendChild(I)}))})};Promise.resolve().then(()=>X())}),s},Xt=n=>{let t=[k("div")],e=!1;return v(()=>{var r,c;const s=n();e=Array.isArray(s);const o=[];o.push(...[s].flat()),o.length===0&&o.push(k("div").addStyle({display:"none"}).setAttribute("id","empty_template"));try{b("newReactiveComponent.map",o.map(a=>{var d;return b("newReactiveComponent hostElement",a.hostElement),(d=a.hostElement)==null?void 0:d.id})),b("currComponent[0].hostElement?.id",(r=t[0].hostElement)==null?void 0:r.id,t),(c=t[0].hostElement)==null||c.replaceWith(...o.map(a=>a.hostElement).filter(Boolean)),t.slice(1).forEach(a=>{var d;return(d=a.hostElement)==null?void 0:d.remove()}),t=o}catch(a){console.error(a)}}),e?t:t[0]},Qt=n=>zt in n,xt=n=>{const t=Z("div")().addStyle({display:"contents"}),e=s=>{const o=t.hostElement;return o&&(o.innerHTML=s),t};return typeof n=="string"?e(n):t.addEffect(()=>{e(n())}),t},st=(n,t,e)=>n?j(t):e?j(e):Z("div")().setAttribute("id","empty_div_renderIf").addStyle({display:"none"}),At=(n,t,e)=>j(()=>st(!!n(),t,e)),te=(n,t,e)=>typeof n=="boolean"?st(n,t,e):At(n,t,e),ot=(n,t)=>j(t).addEffect((e,s)=>{if(typeof n=="boolean")s.style.display=n?"block":"none";else{const o=n()?"block":"none";s.style.display=o}}),ee=(n,t,e)=>{const s=[ot(n,t)].flat();return e&&s.push(...[ot(()=>typeof n=="boolean"?!n:!n(),e)].flat()),j(()=>s)},gt=(n,t)=>{b("createCustomElement",n);const e=document.createElement(n),s=ut(e);return e.init=()=>{et(new WeakRef(s),t)},s},Rt=(n,t)=>{const e=n.split(" ").slice(1).map(o=>o.trim()),s=gt(n.split(" ")[0],t);return Array.isArray(e)&&e.length>0&&s.addClass(...e),(...o)=>{const r=o.filter(Boolean).flat().flatMap(a=>typeof a=="function"&&!R(a)?j(()=>a(s)):a),c=s.hostElement;return c&&(c.allSlotContent=r,c.slotContent=r.filter(_).reduce((a,d)=>{var h;const S=((h=d.hostElement)==null?void 0:h.getAttribute("slot"))||"default";return a[S]||(a[S]=[]),a[S].push(d),a},{}),c.appendAllSlotContent=()=>{N(new WeakRef(s),...r)}),s}},Lt=(n,t,e)=>Rt(`${n.renderTagName}${t&&typeof t=="string"?" "+t:""}`,A(t)?t:t&&typeof t=="string"?e:void 0),ne=()=>{const n=()=>{};return n.oldValue=null,n},se=()=>({}),It=(n,t,e)=>{const s=t?tt(t,e)(n):n;return(o,...r)=>{const c=[...r];return o&&!A(o)&&c.unshift(o),Lt(s,A(o)?o:{})(...c)}},oe=n=>[It(n),(t,e)=>{tt(t,e)(n)}],l={};["div","span","section","input","button","table","tr","td","th","ul","li","ol","form","label","select","option","textarea","img","a","p","h1","h2","h3","h4","h5","h6","br","hr","pre","code","nav","header","footer","main","aside","article","figure","figcaption","blockquote","cite","small","strong","em","b","i","u","s","sub","sup","mark","del","ins","details","summary","progress","meter","audio","video","canvas","slot"].forEach(n=>{l[n]=(t,...e)=>{let s=[...e];return t&&!A(t)&&(s=[t].concat(s)),Z(n,A(t)?t:{})(...s)}});const Tt=l.div,re=l.span,ie=l.section,ce=l.input,le=l.button,ae=l.table,de=l.tr,fe=l.td,he=l.th,ue=l.ul,me=l.li,pe=l.ol,Ee=l.form,Ce=l.label,be=l.select,Se=l.option,ye=l.textarea,ve=l.img,we=l.a,Ae=l.p,ge=l.h1,Re=l.h2,Le=l.h3,Ie=l.h4,Te=l.h5,je=l.h6,Oe=l.br,Me=l.hr,$e=l.pre,_e=l.code,He=l.nav,ke=l.header,We=l.footer,Pe=l.main,Fe=l.aside,Be=l.article,Ve=l.figure,Je=l.figcaption,Ne=l.blockquote,qe=l.cite,ze=l.small,De=l.strong,Ge=l.em,Ke=l.b,Ue=l.i,Ye=l.u,Ze=l.s,Xe=l.sub,Qe=l.sup,xe=l.mark,tn=l.del,en=l.ins,nn=l.details,sn=l.summary,on=l.progress,rn=l.meter,cn=l.audio,ln=l.video,an=l.canvas,dn=l.slot,fn=n=>t=>n(t).addClass(...t.classList??[]).addReactiveClass(t.reactiveClassList??{});function hn(n,t){let e=0;return(...s)=>{const o=Date.now();o-e>=t&&(n(...s),e=o)}}const un=(n,t)=>j(()=>{const e=n();let s=null;return e.map((o,r)=>Tt({"@dragstart":(c,a,d)=>{s=d},"@dragend":(c,a,d)=>{d.style.transform="",d.removeAttribute("draggable")},"@mousedown":(c,a,d)=>{d.style.transform="translateZ(0)",d.setAttribute("draggable","true")},"@dragover":c=>{c.preventDefault()},"@dragenter":hn((c,a,d)=>{var S,h,f;if(c.preventDefault(),s){let E=s,p=d;const m=((S=s.getClientRects().item(0))==null?void 0:S.y)??0,w=((h=d.getClientRects().item(0))==null?void 0:h.y)??0;m<w&&([E,p]=[d,s]),(f=d.parentElement)==null||f.insertBefore(E,p)}},200)},t(o,r,[...n.peek()])))}),mn=(n,t,e)=>{let s=[],o=[];const r=k("div").addStyle({display:"contents"}),c=new Map,a=new Map;return v(()=>{const d=n(),S=d.map(t);o.filter(f=>!S.includes(f)).forEach(f=>{var E,p;c.delete(f),(p=(E=r.hostElement)==null?void 0:E.querySelector(`[data-key="${f}"]`))==null||p.remove()}),S.forEach((f,E)=>{o.includes(f)||c.set(f,()=>e(d[E],E,d).setCustomAttribute("data-key",f))}),S.forEach((f,E)=>{var p;if(o.includes(f)){JSON.stringify(s[o.indexOf(f)])!==JSON.stringify(d[E])&&((p=a.get(f))==null||p.set({templateFunc:()=>e(d[E],E,d),items:d,itemsKey:S,index:E}));return}a.set(f,T({templateFunc:()=>e(d[E],E,d),items:d,itemsKey:S,index:E})),queueMicrotask(()=>{v(()=>{var z,X,C;const{templateFunc:m,index:w}=((z=a.get(f))==null?void 0:z())??{},q=(X=r.hostElement)==null?void 0:X.querySelector(`[data-key="${f}"]`),M=(m==null?void 0:m().setCustomAttribute("data-key",f).hostElement)??document.createElement("div");q?(C=r.hostElement)==null||C.childNodes.forEach((y,L)=>{y instanceof HTMLElement&&y.getAttribute("data-key")===f&&(w===L?(h(w??0,r.hostElement,M),y.remove()):h(w??0,r.hostElement,M))}):h(w??0,r.hostElement,M)})})});const h=(f,E,p)=>{p&&E&&(f<E.children.length?E.insertBefore(p,E.children[f]):E.appendChild(p))};o=S,s=[...d]}),r};i.BaseElement=H,i.a=we,i.addAttributeList=wt,i.addClassList=St,i.addCustomAttributes=bt,i.addReactiveClassList=yt,i.addStyleList=vt,i.appendContentItem=N,i.article=Be,i.aside=Fe,i.audio=cn,i.b=Ke,i.bindReactiveSignals=Pt,i.blockquote=Ne,i.br=Oe,i.button=le,i.camelToKebab=F,i.canvas=an,i.checkCall=D,i.checkRef=Mt,i.cite=qe,i.classList=pt,i.cls=Yt,i.code=_e,i.colorLog=B,i.combineLatest=Bt,i.component=tt,i.configCustomComponent=oe,i.createComponent=fn,i.createCustom=Lt,i.createCustomEl=Rt,i.createCustomElement=gt,i.createEl=Z,i.createElement=k,i.createSignal=Wt,i.customElementHelpers=ut,i.ddList=un,i.defineSlotTemplate=se,i.del=tn,i.details=nn,i.disableLogs=it,i.div=Tt,i.effect=v,i.elementHelpers=mt,i.em=Ge,i.enableLogs=Ot,i.event=Nt,i.eventEmitter=Ut,i.figcaption=Je,i.figure=Ve,i.firstUpdate=Vt,i.footer=We,i.forkJoin=Ft,i.form=Ee,i.getList=mn,i.getSignalContent=j,i.h1=ge,i.h2=Re,i.h3=Le,i.h4=Ie,i.h5=Te,i.h6=je,i.header=ke,i.hr=Me,i.i=Ue,i.img=ve,i.initComponent=et,i.input=ce,i.ins=en,i.isBaseElement=qt,i.isComponentConfig=_,i.isComponentInitConfig=A,i.isReactiveSignal=R,i.isSlotTemplate=Qt,i.kebabToCamel=rt,i.label=Ce,i.li=me,i.main=Pe,i.mark=xe,i.meter=rn,i.nav=He,i.newEventEmitter=ne,i.ol=pe,i.oldGetList=Zt,i.option=Se,i.p=Ae,i.pre=$e,i.progress=on,i.projectLog=b,i.property=Jt,i.removeEffect=K,i.renderIf=st,i.rs=kt,i.rxRenderIf=At,i.s=Ze,i.section=ie,i.select=be,i.setChildren=Ct,i.setEffects=Et,i.setListeners=nt,i.show=ee,i.showIf=ot,i.signal=T,i.signalComponent=Xt,i.slot=dn,i.small=ze,i.span=re,i.strong=De,i.sub=Xe,i.summary=sn,i.sup=Qe,i.table=ae,i.td=fe,i.textarea=ye,i.th=he,i.tr=de,i.u=Ye,i.ul=ue,i.unsafeHtml=xt,i.useCustomComponent=It,i.video=ln,i.when=te,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|