olova 2.0.63 → 2.0.64

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/runtime.js CHANGED
@@ -41,7 +41,7 @@ function requireSetupContext(apiName) {
41
41
  return currentSetupContext;
42
42
  }
43
43
  function toText(value) {
44
- if (value === null || value === void 0) {
44
+ if (value === null || value === void 0 || value === false || value === true) {
45
45
  return "";
46
46
  }
47
47
  if (Array.isArray(value)) {
@@ -103,7 +103,7 @@ function sanitizeHtml(html) {
103
103
  return template.innerHTML;
104
104
  }
105
105
  function toHtml(value) {
106
- if (value === null || value === void 0) {
106
+ if (value === null || value === void 0 || value === false || value === true) {
107
107
  return "";
108
108
  }
109
109
  if (Array.isArray(value)) {
@@ -177,6 +177,7 @@ function bindJsxEventsInRange(range) {
177
177
  };
178
178
  }
179
179
  const listeners = [];
180
+ const handlerIds = /* @__PURE__ */ new Set();
180
181
  const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
181
182
  let current = walker.currentNode;
182
183
  while (current) {
@@ -194,6 +195,7 @@ function bindJsxEventsInRange(range) {
194
195
  }
195
196
  const eventName = attr.name.slice("data-o-jsx-".length);
196
197
  const handlerId = attr.value;
198
+ handlerIds.add(handlerId);
197
199
  const listener = (event) => {
198
200
  const handler = handlers.get(handlerId);
199
201
  if (typeof handler === "function") {
@@ -211,6 +213,9 @@ function bindJsxEventsInRange(range) {
211
213
  for (const cleanup of listeners) {
212
214
  cleanup();
213
215
  }
216
+ for (const handlerId of handlerIds) {
217
+ handlers.delete(handlerId);
218
+ }
214
219
  };
215
220
  }
216
221
  function replaceTokenWithTextNode(root, token) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts"],"names":["preactEffect"],"mappings":";;;AA8BA,IAAM,kBAAqC,EAAC;AAuKrC,SAAS,MAAA,CACd,IACA,OAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAOA,QAAA,CAAa,MAAM,EAAA,EAAI,CAAA;AACpC,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAcO,SAAS,qBAAqB,cAAA,EAA2C;AAC9E,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAqB;AAC/C,EAAA,MAAM,kBAA6B,EAAC;AAEpC,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,IAAkB,EAAC,EAAG;AACxC,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,KAAK,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAClC;AAEA,EAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,IACnB,SAAS,EAAC;AAAA,IACV,cAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAEO,SAAS,kBAAA,GAAuE;AACrF,EAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAA,EAAI;AAClC,EAAA,OAAO,KAAA,EAAO,WAAW,EAAC;AAC5B;;;AClKA,IAAM,WAAA,GAA0B,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAChD,IAAI,mBAAA,GAAyC,IAAA;AAc7C,SAAS,oBAAoB,OAAA,EAA6B;AACxD,EAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,WAAW,OAAO,CAAA,2CAAA;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,OAAO,mBAAA;AACT;AAEA,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,oBAAoB,KAAA,EAA+B;AAC1D,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC5D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAA,CACX,GAAA,CAAI,CAAC,SAAS,mBAAA,CAAoB,IAAI,CAAC,CAAA,CACvC,MAAA,CAAO,CAAC,IAAA,KAAyB,CAAC,CAAC,IAAI,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,KAAgC,EAC1D,MAAA,CAAO,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,OAAO,CAAA,CACjC,GAAA,CAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,OAAO,KAAA,EAA+B;AAC7C,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC5D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAWA,SAAS,gBAAgB,KAAA,EAAwC;AAC/D,EAAA,OAAO,CAAC,EACN,KAAA,IACA,OAAO,UAAU,QAAA,IACjB,iBAAA,IAAqB,KAAA,IACpB,KAAA,CAAwB,eAAA,KAAoB,IAAA,CAAA;AAEjD;AAEA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,EAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAErB,EAAA,MAAM,eAAA,uBAAsB,GAAA,CAAI,CAAC,UAAU,QAAA,EAAU,QAAA,EAAU,OAAO,CAAC,CAAA;AACvE,EAAA,MAAM,SAAS,QAAA,CAAS,gBAAA,CAAiB,QAAA,CAAS,OAAA,EAAS,WAAW,YAAY,CAAA;AAClF,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,OAAA,GAAU,OAAA;AAChB,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAE1B,IAAA,IAAI,gBAAgB,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,CAAA,EAAG;AACtD,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACjD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AACvC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,WAAA,EAAY;AAChD,MAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CACG,QAAA,KAAa,UAAU,QAAA,KAAa,KAAA,IAAS,aAAa,YAAA,KAC3D,SAAA,CAAU,UAAA,CAAW,aAAa,CAAA,EAClC;AACA,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA,CAAS,SAAA;AAClB;AAEA,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AACA,EAAA,OAAO,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AACnC;AAEA,SAAS,YAAA,CAAa,GAAgB,CAAA,EAAyB;AAC7D,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,GAAgB,CAAA,EAAyB;AAClE,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAA,CACP,OACA,QAAA,EACM;AACN,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AAC5C,EAAA,KAAA,CAAM,cAAA,EAAe;AAErB,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,WAAW,QAAQ,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,EAAA,KAAA,CAAM,eAAe,KAAK,CAAA;AAC1B,EAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AACxB;AAEA,SAAS,qBAAqB,KAAA,EAA0B;AACtD,EAAA,MAAM,IAAA,GACJ,MAAM,uBAAA,CAAwB,QAAA,KAAa,KAAK,YAAA,GAC5C,KAAA,CAAM,uBAAA,GACN,KAAA,CAAM,uBAAA,CAAwB,UAAA;AAEpC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,SAAA,GAAY,UAAA;AAGlB,EAAA,MAAM,WAAW,SAAA,CAAU,kBAAA;AAC3B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,YAA+B,EAAC;AACtC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,YAAY,CAAA;AACtE,EAAA,IAAI,UAAU,MAAA,CAAO,WAAA;AAErB,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,KAAA,CAAM,eAAe,OAAO,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACN,MAAA,UAAA,GAAa,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,OAAA,GAAU,OAAA;AAChB,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACjD,QAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,cAAc,MAAM,CAAA;AACtD,QAAA,MAAM,YAAY,IAAA,CAAK,KAAA;AACvB,QAAA,MAAM,QAAA,GAA0B,CAAC,KAAA,KAAU;AACzC,UAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AACtC,UAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACf;AAAA,QACF,CAAA;AAEA,QAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAC5C,QAAA,OAAA,CAAQ,eAAA,CAAgB,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA;AACxC,QAAA,SAAA,CAAU,KAAK,MAAM,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,WAAW,SAAA,EAAW;AAC/B,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA;AACF;AAEA,SAAS,wBAAA,CAAyB,MAAY,KAAA,EAA4B;AACxE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AAC1C,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAC9C,MAAA,MAAM,SAAS,SAAA,CAAU,UAAA;AACzB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAC1C,MAAA,MAAA,CAAO,YAAA,CAAa,SAAS,KAAK,CAAA;AAClC,MAAA,MAAA,CAAO,YAAY,SAAS,CAAA;AAC5B,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,MAAY,KAAA,EAA6B;AACnE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAE3C,MAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,MAAA,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3B,MAAA,KAAA,CAAM,aAAa,MAAM,CAAA;AAEzB,MAAA,MAAA,CAAO,UAAA,EAAY,YAAY,MAAM,CAAA;AAErC,MAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC3B,QAAA,KAAA,CAAM,UAAA,EAAY,YAAY,KAAK,CAAA;AAAA,MACrC;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,6BAAA,CACP,WACA,KAAA,EACc;AACd,EAAA,MAAM,OAAO,SAAA,CAAU,uBAAA;AACvB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,SAAA,CAAU,eAAe,QAAQ,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AACN,MAAA,UAAA,GAAa,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAE3C,IAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,IAAA,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3B,IAAA,KAAA,CAAM,aAAa,MAAM,CAAA;AAEzB,IAAA,MAAA,CAAO,UAAA,EAAY,YAAY,MAAM,CAAA;AAErC,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC3B,MAAA,KAAA,CAAM,UAAA,EAAY,YAAY,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CACP,QACA,KAAA,EACc;AACd,EAAA,OAAO,MAAA,YAAkB,cACrB,kBAAA,CAAmB,MAAA,EAAQ,KAAK,CAAA,GAChC,6BAAA,CAA8B,QAAQ,KAAK,CAAA;AACjD;AAEA,SAAS,eAAA,CACP,UAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,KAAA,GAAqC,IAAA;AAEzC,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,MAAM,WAAA,GAAc,WAAW,KAAA,EAAM;AACrC,IAAA,QAAA,GAAW,WAAA,CAAY,QAAA;AACvB,IAAA,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,IAAA,QAAA,CAAS,YAAY,UAAA,CAAW,QAAA,GAAW,UAAA,CAAW,QAAA,CAAS,MAAK,GAAI,EAAA;AACxE,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA;AAAA,EACtB;AAEA,EAAA,MAAM,WAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,MAAM,QAAA,GACJ,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACpB,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACjB,wBAAA,CAAyB,QAAA,EAAU,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,QAAA,CAAS,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EACpB;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,MAAM,WACJ,KAAA,IAAS,KAAA,CAAM,QAAQ,EAAE,CAAA,GACrB,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAgB,IACjC,KAAA,CAAM,IAAA,CAAK,SAAS,gBAAA,CAA8B,GAAG,CAAC,CAAA,CAAE,MAAA;AAAA,MACtD,CAAC,OAAA,KAAY,OAAA,CAAQ,YAAA,CAAa,OAAA,CAAQ,IAAI,CAAA,KAAM;AAAA,KACtD;AAEN,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,QAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,OAAA,GACb,mBAAA,CAAoB,OAAA,CAAQ,GAAA,EAAK,CAAA,GACjC,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC1B,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,eAAA,CAAgB,QAAQ,IAAI,CAAA;AACpC,UAAA;AAAA,QACF;AAEA,QAAA,OAAA,CAAQ,YAAA,CAAa,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,MACzC,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,aAAA,EAAe;AAC9C,IAAA,MAAM,WAAW,CAAA,WAAA,EAAc,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,QAAQ,EAAE,CAAA,EAAA,CAAA;AAC3D,IAAA,MAAM,OAAA,GACJ,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACpB,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACjB,QAAA,CAAS,aAAA,CAA2B,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO,OAAA,CAAQ,gBAAgB,CAAA,UAAA,EAAa,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAEhE,IAAA,IAAI,cAAA;AACJ,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,cAAA,GAAiB,QAAQ,GAAA,EAAI;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,MAAM,QAAA,GAA0B,CAAC,KAAA,KAAU;AACzC,MAAA,IAAI,OAAO,mBAAmB,UAAA,EAAY;AACxC,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,OAAA,CAAQ,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAEhD,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,IAAA,EAAK;AACL,MAAA,OAAA,CAAQ,mBAAA,CAAoB,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,MAAA,CAAO,gBAAgB,QAAQ,CAAA;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,uBAAA,CAAwB,QAAQ,QAAQ,CAAA;AAAA,EAC1C;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,gBAAA;AACf,IAAA,IAAI,mBAAmB,MAAM;AAAA,IAAC,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AACrC,MAAA,IAAI,aAAa,QAAA,EAAU;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,GAAW,QAAA;AACX,MAAA,gBAAA,EAAiB;AACjB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AACtD,MAAA,YAAA,CAAa,SAAA,GAAY,QAAA;AACzB,MAAA,uBAAA,CAAwB,KAAA,EAAO,aAAa,OAAO,CAAA;AACnD,MAAA,gBAAA,GAAmB,qBAAqB,KAAK,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,gBAAA,EAAiB;AACjB,MAAA,IAAA,EAAK;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,iBAAiB,WAAA,EAAY;AACnC,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,cAAA,EAAgB,KAAA,EAAO,OAAO,OAAO,CAAA;AACzE,IAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,EAC3B;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,iBAAA,EAAmB;AAClD,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAe,MAAM;AAAA,IAAC,CAAA;AAC1B,IAAA,IAAI,aAAA,GAAuC,IAAA;AAC3C,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,SAAA;AAEJ,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,MAAM,aAAA,GAAgB,QAAQ,YAAA,EAAa;AAC3C,MAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,EAAS;AACnC,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,QAAA,GAAW,OAAA,CAAQ,UAAS,GAAI,WAAA;AAE1D,MAAA,IACE,aAAA,KAAkB,iBAClB,YAAA,CAAa,SAAA,EAAW,SAAS,CAAA,IACjC,iBAAA,CAAkB,SAAA,EAAW,SAAS,CAAA,EACtC;AACA,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,EAAa;AACb,MAAA,YAAA,GAAe,KAAA,CAAM,aAAA,EAAe,KAAA,EAAO,SAAA,EAAW,WAAW,OAAO,CAAA;AACxE,MAAA,aAAA,GAAgB,aAAA;AAChB,MAAA,SAAA,GAAY,EAAE,GAAG,SAAA,EAAU;AAC3B,MAAA,SAAA,GAAY,SAAA;AAAA,IACd,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,IAAA,EAAK;AACL,MAAA,YAAA,EAAa;AAAA,IACf,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,UAAA,EAAY;AAC3C,MAAA,MAAM,KAAA,GAAQ,CAAA,OAAA,EAAU,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AAClC,MAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,QAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,QAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,QAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,QAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,gBAAgB,MAAM;AAAA,MAAC,CAAA;AAC3B,MAAA,IAAI,aAAA,GAAqC,MAAA;AAEzC,MAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,QAAA,MAAM,SAAA,GAAY,CAAC,CAAC,OAAA,CAAQ,GAAA,EAAI;AAChC,QAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,UAAA;AAAA,QACF;AAEA,QAAA,aAAA,EAAc;AAEd,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAM,gBAAA,GAAmB,QAAQ,UAAA,EAAW;AAC5C,UAAA,aAAA,GAAgB,eAAA,CAAgB,gBAAA,EAAkB,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,QACzE,CAAA,MAAA,IAAW,QAAQ,WAAA,EAAa;AAC9B,UAAA,MAAM,gBAAA,GAAmB,QAAQ,WAAA,EAAY;AAC7C,UAAA,aAAA,GAAgB,eAAA,CAAgB,gBAAA,EAAkB,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,QACzE,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,aAAA,GAAgB,MAAM;AAAA,UAAC,CAAA;AAAA,QACzB;AAEA,QAAA,aAAA,GAAgB,SAAA;AAAA,MAClB,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,KAAK,MAAM;AAClB,QAAA,IAAA,EAAK;AACL,QAAA,aAAA,EAAc;AAAA,MAChB,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,eAAA,EAAgB;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,cAAA,EAAe;AAAA,EACxB,CAAA;AACF;AAEA,SAAS,wBAAwB,QAAA,EAAiC;AAChE,EAAA,MAAM,SAAA,GACJ,SAAS,SAAA,CAAU,cAAA,KAAmB,SAAS,SAAA,CAAU,cAAA,uBAAqB,GAAA,EAAI,CAAA;AACpF,EAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACxB;AAEA,SAAS,0BAA0B,QAAA,EAAiC;AAClE,EAAA,QAAA,CAAS,SAAA,CAAU,cAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA;AACpD;AAEA,SAAS,qBAAA,CACP,UACA,cAAA,EACM;AACN,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,QAAA,CAAS,aAAA,IAAiB,EAAE,CAAA;AACpD,EAAA,MAAM,eAAA,GAAkB,mBAAA;AACxB,EAAA,mBAAA,GAAsB,OAAA;AACtB,EAAA,oBAAA,CAAqB,cAAc,CAAA;AAEnC,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,QAAA,CAAS,SAAA,CAAU,MAAM,QAAA,CAAS,KAAA,EAAO,SAAS,KAAK,CAAA;AAC1E,IAAA,QAAA,CAAS,iBAAA,GAAoB,eAAA;AAAA,MAC3B,UAAA;AAAA,MACA,QAAA,CAAS,MAAA;AAAA,MACT,QAAA,CAAS,KAAA;AAAA,MACT;AAAA,KACF;AACA,IAAA,QAAA,CAAS,aAAa,kBAAA,EAAmB;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAA,kBAAA,EAAmB;AACnB,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,mBAAA,GAAsB,eAAA;AAAA,EACxB;AACF;AAEA,SAAS,uBACP,QAAA,EACyC;AACzC,EAAA,OAAO,SAAS,UAAA,CAAW,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,QAAO,MAAO;AAAA,IACnD,GAAA;AAAA,IACA,KAAA,EAAO,OAAO,IAAA;AAAK,GACrB,CAAE,CAAA;AACJ;AAEO,SAAS,gBAAA,CACd,SACA,IAAA,EACM;AACN,EAAA,MAAM,YAAY,OAAA,CAAQ,cAAA;AAE1B,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG;AACtC,IAAA,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,MAAA;AACzB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAC,QAAA,MAAc;AAAA,IACrD,QAAA;AAAA,IACA,cAAA,EAAgB,uBAAuB,QAAQ;AAAA,GACjD,CAAE,CAAA;AAEF,EAAA,IAAA,CAAK,cAAA,GAAiB,SAAA;AACtB,EAAA,OAAA,CAAQ,cAAA,GAAiB,MAAA;AAEzB,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,cAAA,EAAe,IAAK,SAAA,EAAW;AACpD,MAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AACrB,MAAA,QAAA,CAAS,iBAAA,EAAkB;AAC3B,MAAA,qBAAA,CAAsB,UAAU,cAAc,CAAA;AAAA,IAChD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,SAAA;AAEzB,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,cAAA,EAAe,IAAK,SAAA,EAAW;AACpD,MAAA,QAAA,CAAS,SAAA,GAAY,OAAA;AACrB,MAAA,QAAA,CAAS,iBAAA,EAAkB;AAC3B,MAAA,qBAAA,CAAsB,UAAU,cAAc,CAAA;AAAA,IAChD;AAEA,IAAA,OAAA,CAAQ,KAAA,CAAM,2DAA2D,KAAK,CAAA;AAC9E,IAAA;AAAA,EACF;AACF;AAEO,SAAS,eAAA,CAAgB,OAAgB,KAAA,EAAgC;AAC9E,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAM;AACjC;AAEO,SAAS,mBAAmB,KAAA,EAA+B;AAChE,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,IAAA;AAAA,IACjB,KAAA,EAAO,OAAO,KAAK;AAAA,GACrB;AACF;AAEO,SAAS,UAAA,CAAc,KAAc,KAAA,EAAa;AACvD,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AACtB,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAc,GAAA,EAAiB;AAC7C,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AACxB;AAEO,SAAS,WAAW,GAAA,EAAuB;AAChD,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AACxB;AAEO,SAAS,KAAA,CACd,WACA,MAAA,EACA,KAAA,GAAoB,EAAC,EACrB,KAAA,GAAoB,aACpB,aAAA,EACY;AACZ,EAAA,MAAM,QAAA,GAA4B;AAAA,IAChC,SAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAmB,MAAM;AAAA,IAAC,CAAA;AAAA,IAC1B,YAAY;AAAC,GACf;AAEA,EAAA,uBAAA,CAAwB,QAAQ,CAAA;AAChC,EAAA,qBAAA,CAAsB,QAAQ,CAAA;AAE9B,EAAA,OAAO,MAAM;AACX,IAAA,yBAAA,CAA0B,QAAQ,CAAA;AAClC,IAAA,QAAA,CAAS,iBAAA,EAAkB;AAAA,EAC7B,CAAA;AACF;AAEO,SAAS,UAAU,IAAA,EAExB;AACA,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,EAAQ;AACZ,MAAA,MAAM,UACJ,OAAO,MAAA,KAAW,WACb,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,GAC9B,MAAA;AAEN,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,MACvD;AAEA,MAAA,OAAO,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC5B;AAAA,GACF;AACF","file":"runtime.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n type Signal,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\r\n if (value === null || value === undefined) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toText).join(\"\");\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim().toLowerCase();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n attrValue.startsWith(\"javascript:\")\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\r\n if (value === null || value === undefined) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toHtml).join(\"\");\r\n }\r\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\r\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\r\n if (!handlers) {\r\n return () => {};\r\n }\r\n\r\n const listeners: Array<() => void> = [];\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.currentNode as Element | null;\r\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\r\n const handlerId = attr.value;\r\n const listener: EventListener = (event) => {\r\n const handler = handlers.get(handlerId);\r\n if (typeof handler === \"function\") {\r\n handler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\r\n for (const cleanup of listeners) {\r\n cleanup();\r\n }\r\n };\r\n}\r\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = effect(() => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = effect(() => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = effect(() => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = effect(() => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = slotFactory();\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: OlovaProps | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = effect(() => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = { ...nextProps };\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = effect(() => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = binding.trueBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = binding.falseBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n currentSetupContext = context;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n try {\r\n const descriptor = instance.component.setup(instance.props, instance.slots);\r\n instance.disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n renderMountedInstance(instance);\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n"]}
1
+ {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts"],"names":["preactEffect"],"mappings":"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","file":"runtime.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n type Signal,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toText).join(\"\");\n }\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim().toLowerCase();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n attrValue.startsWith(\"javascript:\")\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toHtml).join(\"\");\n }\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\n if (!handlers) {\n return () => {};\n }\n\n const listeners: Array<() => void> = [];\n const handlerIds = new Set<string>();\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n let current = walker.currentNode as Element | null;\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\n const handlerId = attr.value;\n handlerIds.add(handlerId);\n const listener: EventListener = (event) => {\n const handler = handlers.get(handlerId);\n if (typeof handler === \"function\") {\n handler(event);\n }\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\n for (const cleanup of listeners) {\n cleanup();\n }\n\n for (const handlerId of handlerIds) {\n handlers.delete(handlerId);\n }\n };\n}\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = effect(() => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = effect(() => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = effect(() => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = effect(() => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = slotFactory();\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: OlovaProps | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = effect(() => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = { ...nextProps };\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = effect(() => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = binding.trueBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = binding.falseBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n currentSetupContext = context;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n try {\r\n const descriptor = instance.component.setup(instance.props, instance.slots);\r\n instance.disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n renderMountedInstance(instance);\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n"]}
package/dist/vite.js CHANGED
@@ -1926,7 +1926,12 @@ ${exportHead}
1926
1926
  __olovaJsxHandlers.set(id, handler);
1927
1927
  return ' data-o-jsx-' + eventName + '="' + id + '" on' + eventName + '="window.__olovaDispatchJsxEvent(event, this)"';
1928
1928
  };
1929
- const __olovaToString = (value) => Array.isArray(value) ? value.map(__olovaToString).join('') : value == null ? '' : String(value);
1929
+ const __olovaToString = (value) =>
1930
+ Array.isArray(value)
1931
+ ? value.map(__olovaToString).join('')
1932
+ : value == null || value === false || value === true
1933
+ ? ''
1934
+ : String(value);
1930
1935
  const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });
1931
1936
  const __olovaNormalizeClassValue = (value) => {
1932
1937
  if (value == null || value === false) {
@@ -2167,6 +2172,9 @@ function readPackageJson(packageRoot) {
2167
2172
  }
2168
2173
  return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
2169
2174
  }
2175
+ function normalizeFilename(id) {
2176
+ return normalizePath(id.split("?", 1)[0]);
2177
+ }
2170
2178
  function olovaPlugin() {
2171
2179
  let config;
2172
2180
  const cssCache = /* @__PURE__ */ new Map();
@@ -2197,10 +2205,11 @@ function olovaPlugin() {
2197
2205
  const coreEntry = resolvePackageEntry("./core", "../core/index.ts");
2198
2206
  const globalEntry = resolvePackageEntry("./global", "../runtime/global.ts");
2199
2207
  const shouldRewriteRuntimeScript = (id, code) => {
2200
- if (id.includes("/node_modules/") || id.endsWith(".d.ts")) {
2208
+ const normalizedId = normalizeFilename(id);
2209
+ if (normalizedId.includes("/node_modules/") || normalizedId.endsWith(".d.ts")) {
2201
2210
  return false;
2202
2211
  }
2203
- if (!/\.(?:[cm]?[jt]sx?)$/.test(id)) {
2212
+ if (!/\.(?:[cm]?[jt]sx?)$/.test(normalizedId)) {
2204
2213
  return false;
2205
2214
  }
2206
2215
  return /from\s+['"]olova\/(?:core|global|state)['"]|import\s+['"]olova\/(?:core|global|state)['"]/.test(code);
@@ -2223,17 +2232,18 @@ function olovaPlugin() {
2223
2232
  if (id === CORE_MODULE_ID) return `export * from ${JSON.stringify(coreEntry)};`;
2224
2233
  if (id === GLOBAL_MODULE_ID) return `export * from ${JSON.stringify(globalEntry)};`;
2225
2234
  if (id.includes(`.css${STYLE_QUERY}`)) {
2226
- const filename = id.split("?")[0].replace(/\.css$/, "");
2235
+ const filename = normalizeFilename(id).replace(/\.css$/, "");
2227
2236
  return cssCache.get(filename) || "";
2228
2237
  }
2229
2238
  return null;
2230
2239
  },
2231
2240
  transform(code, id) {
2232
2241
  const [filename, query] = id.split("?", 2);
2233
- if (!filename.endsWith(".olova")) {
2234
- if (!query && shouldRewriteRuntimeScript(filename, code)) {
2242
+ const normalizedFilename = normalizePath(filename);
2243
+ if (!normalizedFilename.endsWith(".olova")) {
2244
+ if (!query && shouldRewriteRuntimeScript(normalizedFilename, code)) {
2235
2245
  const result = compileOlovaScriptModule(code, {
2236
- filename,
2246
+ filename: normalizedFilename,
2237
2247
  dev: !config.isProduction
2238
2248
  });
2239
2249
  return {
@@ -2246,14 +2256,14 @@ function olovaPlugin() {
2246
2256
  if (query && !query.includes("olova")) return null;
2247
2257
  if (query && query.includes("type=style")) return null;
2248
2258
  try {
2249
- const result = compileOlova(code, { filename, dev: !config.isProduction });
2259
+ const result = compileOlova(code, { filename: normalizedFilename, dev: !config.isProduction });
2250
2260
  let jsCode = result.code;
2251
2261
  if (result.css && result.css.trim()) {
2252
- cssCache.set(filename, result.css);
2253
- jsCode = `import ${JSON.stringify(filename + ".css" + STYLE_QUERY)};
2262
+ cssCache.set(normalizedFilename, result.css);
2263
+ jsCode = `import ${JSON.stringify(normalizedFilename + ".css" + STYLE_QUERY)};
2254
2264
  ` + jsCode;
2255
2265
  } else {
2256
- cssCache.delete(filename);
2266
+ cssCache.delete(normalizedFilename);
2257
2267
  }
2258
2268
  return {
2259
2269
  code: jsCode,