sinwan 1.0.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.development.js +1012 -112
- package/dist/cjs/index.development.js.map +16 -14
- package/dist/cjs/index.production.min.js +2 -2
- package/dist/cjs/index.production.min.js.map +16 -14
- package/dist/cjs/renderer/index.development.js +467 -29
- package/dist/cjs/renderer/index.development.js.map +11 -9
- package/dist/cjs/renderer/index.production.min.js +2 -2
- package/dist/cjs/renderer/index.production.min.js.map +11 -9
- package/dist/cjs/server/index.development.js +573 -48
- package/dist/cjs/server/index.development.js.map +10 -7
- package/dist/cjs/server/index.production.min.js +2 -2
- package/dist/cjs/server/index.production.min.js.map +10 -7
- package/dist/component/control-flow.d.ts +54 -1
- package/dist/component/control-flow.d.ts.map +1 -1
- package/dist/component/index.d.ts +2 -2
- package/dist/component/index.d.ts.map +1 -1
- package/dist/esm/index.development.js +1010 -110
- package/dist/esm/index.development.js.map +16 -14
- package/dist/esm/index.production.min.js +2 -2
- package/dist/esm/index.production.min.js.map +16 -14
- package/dist/esm/renderer/index.development.js +467 -29
- package/dist/esm/renderer/index.development.js.map +11 -9
- package/dist/esm/renderer/index.production.min.js +2 -2
- package/dist/esm/renderer/index.production.min.js.map +11 -9
- package/dist/esm/server/index.development.js +573 -48
- package/dist/esm/server/index.development.js.map +10 -7
- package/dist/esm/server/index.production.min.js +2 -2
- package/dist/esm/server/index.production.min.js.map +10 -7
- package/dist/hydration/walk.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/reactivity/index.d.ts +1 -0
- package/dist/reactivity/index.d.ts.map +1 -1
- package/dist/reactivity/normalization.d.ts +19 -0
- package/dist/reactivity/normalization.d.ts.map +1 -0
- package/dist/renderer/attributes.d.ts +11 -0
- package/dist/renderer/attributes.d.ts.map +1 -1
- package/dist/renderer/index.d.ts +1 -1
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/render-children.d.ts.map +1 -1
- package/dist/renderer/render-control-flow.d.ts +3 -3
- package/dist/renderer/render-control-flow.d.ts.map +1 -1
- package/dist/renderer/render-element.d.ts.map +1 -1
- package/dist/renderer/types.d.ts +8 -1
- package/dist/renderer/types.d.ts.map +1 -1
- package/dist/renderer/unmount.d.ts.map +1 -1
- package/dist/server/attribute-utils.d.ts +2 -0
- package/dist/server/attribute-utils.d.ts.map +1 -0
- package/dist/server/hydration-markers.d.ts.map +1 -1
- package/dist/server/renderer.d.ts.map +1 -1
- package/dist/server/stream.d.ts.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ export { jsx, jsxs, jsxDEV, Fragment, raw, HtmlEscapedString, } from "./jsx/jsx-
|
|
|
3
3
|
export { escapeHtml, safeHtml, isSafeHtml } from "./escaper.ts";
|
|
4
4
|
export { signal, isSignal, computed, isComputed, effect, batch, nextTick, } from "./reactivity/index.ts";
|
|
5
5
|
export type { Signal, Computed, CleanupFn, EffectFn, } from "./reactivity/index.ts";
|
|
6
|
-
export { createComponent, createPage, createLayout, Show, For, } from "./component/index.ts";
|
|
6
|
+
export { createComponent, createPage, createLayout, Show, For, Switch, Match, Index, Key, Dynamic, Visible, Portal, } from "./component/index.ts";
|
|
7
7
|
export { onMounted, onUnmounted, onUpdated, onError, } from "./component/index.ts";
|
|
8
8
|
export { provide, inject, getCurrentInstance } from "./component/index.ts";
|
|
9
|
-
export type { ComponentInstance, InjectionKey, ShowProps, ForProps, } from "./component/index.ts";
|
|
9
|
+
export type { ComponentInstance, InjectionKey, ShowProps, ForProps, SwitchProps, MatchProps, IndexProps, KeyProps, DynamicProps, DynamicTag, VisibleProps, PortalProps, } from "./component/index.ts";
|
|
10
10
|
export { mount, render, unmountNode, renderNodeToDOM, renderElementToDOM, domOps, setDOMOps, resetDOMOps, } from "./renderer/index.ts";
|
|
11
11
|
export type { MountedNode, AppInstance, DOMOps } from "./renderer/index.ts";
|
|
12
12
|
export { hydrate } from "./hydration/index.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,cAAc,GACf,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,GAAG,EACH,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,UAAU,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,cAAc,GACf,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,GAAG,EACH,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,KAAK,EACL,GAAG,EACH,OAAO,EACP,OAAO,EACP,MAAM,GACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,OAAO,GACR,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,KAAK,EACL,MAAM,EACN,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAI5E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,OAAO,EACP,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC"}
|
|
@@ -12,4 +12,5 @@ export { effect } from "./effect.ts";
|
|
|
12
12
|
export type { CleanupFn, EffectFn } from "./effect.ts";
|
|
13
13
|
export { batch } from "./batch.ts";
|
|
14
14
|
export { nextTick } from "./scheduler.ts";
|
|
15
|
+
export { isReactive, resolve } from "./normalization.ts";
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SinwanJS Reactivity — Normalization
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified way to handle different types of reactive inputs:
|
|
5
|
+
* Signals, Computed values, and Function getters.
|
|
6
|
+
*/
|
|
7
|
+
import { type Signal } from "./signal.ts";
|
|
8
|
+
import { type Computed } from "./computed.ts";
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a value is reactive (Signal, Computed, or Function getter).
|
|
11
|
+
*/
|
|
12
|
+
export declare function isReactive(value: unknown): value is Signal<any> | Computed<any> | Function;
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the current value of a potentially reactive input.
|
|
15
|
+
* If the input is a signal, computed, or function, it returns its current value.
|
|
16
|
+
* Otherwise, it returns the input as-is.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolve<T>(value: T | Signal<T> | Computed<T> | (() => T)): T;
|
|
19
|
+
//# sourceMappingURL=normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../../src/reactivity/normalization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1D;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAM1F;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAQ5E"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import type { CleanupFn } from "../reactivity/index.ts";
|
|
2
|
+
export declare const DOM_PROPERTIES: Set<string>;
|
|
3
|
+
export declare const PROP_ALIASES: Record<string, string>;
|
|
4
|
+
interface AttributeBindingState {
|
|
5
|
+
previousStyleProps: Set<string>;
|
|
6
|
+
}
|
|
2
7
|
/**
|
|
3
8
|
* Apply all non-event props to a DOM element.
|
|
4
9
|
* Handles static values, reactive signals, and special cases.
|
|
5
10
|
* Returns an array of disposers for reactive attributes.
|
|
6
11
|
*/
|
|
7
12
|
export declare function applyAttributes(el: Element, props: Record<string, unknown>): CleanupFn[];
|
|
13
|
+
/**
|
|
14
|
+
* Set a single attribute/property on a DOM element.
|
|
15
|
+
*/
|
|
16
|
+
export declare function setSingleAttribute(el: Element, key: string, value: unknown, state?: AttributeBindingState): void;
|
|
17
|
+
export declare function resolveAttributeName(key: string): string;
|
|
18
|
+
export {};
|
|
8
19
|
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAUxD,eAAO,MAAM,cAAc,aAAiG,CAAC;AAG7H,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK/C,CAAC;AAEF,UAAU,qBAAqB;IAC7B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CAyBb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,KAAK,CAAC,EAAE,qBAAqB,GAC5B,IAAI,CA2DN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
package/dist/renderer/index.d.ts
CHANGED
|
@@ -8,5 +8,5 @@ export { domOps, setDOMOps, resetDOMOps } from "./dom-ops.ts";
|
|
|
8
8
|
export type { DOMOps } from "./dom-ops.ts";
|
|
9
9
|
export { applyAttributes } from "./attributes.ts";
|
|
10
10
|
export { bindEvents, bindEvent, isEventProp, toEventName } from "./events.ts";
|
|
11
|
-
export type { MountedNode, MountedText, MountedReactiveText, MountedElement, MountedFragment, MountedReactiveBlock, MountedComponent, AppInstance, } from "./types.ts";
|
|
11
|
+
export type { MountedNode, MountedText, MountedReactiveText, MountedElement, MountedFragment, MountedReactiveBlock, MountedComponent, MountedPortal, AppInstance, } from "./types.ts";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-children.d.ts","sourceRoot":"","sources":["../../src/renderer/render-children.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"render-children.d.ts","sourceRoot":"","sources":["../../src/renderer/render-children.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,YAAY,CAAC;AAYpE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,IAAI,EACZ,MAAM,GAAE,IAAI,GAAG,IAAW,EAC1B,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,WAAW,CA4Db;AAsBD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,UAAU,EAAE,EACtB,MAAM,EAAE,IAAI,EACZ,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,WAAW,EAAE,CAMf"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* move, or insert only the block-owned DOM nodes.
|
|
6
6
|
*/
|
|
7
7
|
import type { SinwanElement } from "../types.ts";
|
|
8
|
-
import type {
|
|
8
|
+
import type { MountedNode } from "./types.ts";
|
|
9
9
|
/**
|
|
10
|
-
* Render a
|
|
10
|
+
* Render a built-in reactive helper element.
|
|
11
11
|
*/
|
|
12
|
-
export declare function renderControlFlowToDOM(element: SinwanElement, parent: Node, anchor: Node | null, namespace: string | null):
|
|
12
|
+
export declare function renderControlFlowToDOM(element: SinwanElement, parent: Node, anchor: Node | null, namespace: string | null): MountedNode;
|
|
13
13
|
//# sourceMappingURL=render-control-flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-control-flow.d.ts","sourceRoot":"","sources":["../../src/renderer/render-control-flow.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"render-control-flow.d.ts","sourceRoot":"","sources":["../../src/renderer/render-control-flow.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAC;AAuCnF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,IAAI,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,WAAW,CAoCb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-element.d.ts","sourceRoot":"","sources":["../../src/renderer/render-element.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"render-element.d.ts","sourceRoot":"","sources":["../../src/renderer/render-element.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAsDhF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,GAAE,IAAI,GAAG,IAAW,EAC1B,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,WAAW,CAkDb"}
|
package/dist/renderer/types.d.ts
CHANGED
|
@@ -53,8 +53,15 @@ export interface MountedComponent {
|
|
|
53
53
|
/** The ComponentInstance for lifecycle hooks (null for anonymous renders). */
|
|
54
54
|
instance: ComponentInstance | null;
|
|
55
55
|
}
|
|
56
|
+
/** A mounted portal whose children live under a target outside its source tree. */
|
|
57
|
+
export interface MountedPortal {
|
|
58
|
+
type: "portal";
|
|
59
|
+
anchor: Comment;
|
|
60
|
+
children: MountedNode[];
|
|
61
|
+
dispose: CleanupFn;
|
|
62
|
+
}
|
|
56
63
|
/** Union of all mounted node types. */
|
|
57
|
-
export type MountedNode = MountedText | MountedReactiveText | MountedElement | MountedFragment | MountedReactiveBlock | MountedComponent;
|
|
64
|
+
export type MountedNode = MountedText | MountedReactiveText | MountedElement | MountedFragment | MountedReactiveBlock | MountedComponent | MountedPortal;
|
|
58
65
|
/** Handle returned by mount(). Allows unmounting the app. */
|
|
59
66
|
export interface AppInstance {
|
|
60
67
|
/** The root mounted node tree. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderer/types.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,wDAAwD;IACxD,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,wCAAwC;IACxC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,wDAAwD;IACxD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oBAAoB;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC;AAED,uCAAuC;AACvC,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,mBAAmB,GACnB,cAAc,GACd,eAAe,GACf,oBAAoB,GACpB,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderer/types.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,wDAAwD;IACxD,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,wCAAwC;IACxC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,wDAAwD;IACxD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,oBAAoB;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACpC;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,uCAAuC;AACvC,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,mBAAmB,GACnB,cAAc,GACd,eAAe,GACf,oBAAoB,GACpB,gBAAgB,GAChB,aAAa,CAAC;AAIlB,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unmount.d.ts","sourceRoot":"","sources":["../../src/renderer/unmount.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"unmount.d.ts","sourceRoot":"","sources":["../../src/renderer/unmount.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,CA4B5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAwDnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAQzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-utils.d.ts","sourceRoot":"","sources":["../../src/server/attribute-utils.ts"],"names":[],"mappings":"AASA,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAmBzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration-markers.d.ts","sourceRoot":"","sources":["../../src/server/hydration-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hydration-markers.d.ts","sourceRoot":"","sources":["../../src/server/hydration-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoD9E;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/server/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EAGV,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/server/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EAGV,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAgCrB;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAChD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAClB,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAC3C,IAAI,EAAE,MAAM,GACX,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAE3B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACpD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAyCtE;AA0KD;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,WAAW,CAOlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/server/stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,UAAU,EACV,eAAe,EAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/server/stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,UAAU,EACV,eAAe,EAChB,MAAM,aAAa,CAAC;AAkErB;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAC9C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,UAAU,CAAC,CAmB5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,cAAc,CAAC,UAAU,CAAC,CAqB5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,GACf,cAAc,CAAC,UAAU,CAAC,CAc5B"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,13 +11,13 @@ export type SinwanPrimitive = string | number | boolean | null | undefined;
|
|
|
11
11
|
* A value that may be plain `T` or a reactive container (`Signal<T>` /
|
|
12
12
|
* `Computed<T>`). Used by JSX attribute types so reactive props type-check.
|
|
13
13
|
*/
|
|
14
|
-
export type Reactive<T> = T | Signal<T> | Computed<T
|
|
14
|
+
export type Reactive<T> = T | Signal<T> | Computed<T> | (() => T);
|
|
15
15
|
export interface SinwanElement {
|
|
16
16
|
tag: string | symbol | SinwanComponent<any>;
|
|
17
17
|
props: Record<string, unknown>;
|
|
18
18
|
children: SinwanNode[];
|
|
19
19
|
}
|
|
20
|
-
export type SinwanNode = SinwanPrimitive | SinwanElement | Promise<SinwanElement> | HtmlEscapedString | Signal<unknown> | Computed<unknown> | SinwanNode[];
|
|
20
|
+
export type SinwanNode = SinwanPrimitive | SinwanElement | Promise<SinwanElement> | HtmlEscapedString | Signal<unknown> | Computed<unknown> | (() => unknown) | SinwanNode[];
|
|
21
21
|
export type SinwanSlots = Record<string, SinwanNode>;
|
|
22
22
|
export interface SinwanComponent<P extends object = {}> {
|
|
23
23
|
(props: P & {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAGlE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAID,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,aAAa,GACb,OAAO,CAAC,aAAa,CAAC,GACtB,iBAAiB,GACjB,MAAM,CAAC,OAAO,CAAC,GACf,QAAQ,CAAC,OAAO,CAAC,GACjB,CAAC,MAAM,OAAO,CAAC,GACf,UAAU,EAAE,CAAC;AAGjB,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAGrD,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IACpD,CACE,KAAK,EAAE,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAA;KAAE,GACjD,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IAC/C,CAAC,IAAI,EAAE,CAAC,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,IAAI,eAAe,CAC/D,CAAC,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,CAC7B,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAGlE,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAGtE,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAGpE,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sinwan",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Sinwan — Reactive UI library with SSR, hydration, and fine-grained reactivity",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"build": "bun run build.ts",
|
|
90
90
|
"build:types": "tsc -p tsconfig.build.json",
|
|
91
91
|
"clean": "rm -rf dist",
|
|
92
|
-
"prepublishOnly": "bun run build",
|
|
92
|
+
"prepublishOnly": "bun run typecheck && bun run build && bun run test",
|
|
93
93
|
"test": "bun test",
|
|
94
94
|
"typecheck": "tsc --noEmit"
|
|
95
95
|
},
|
|
@@ -107,12 +107,12 @@
|
|
|
107
107
|
],
|
|
108
108
|
"author": "Mohammed Ben Cheikh",
|
|
109
109
|
"license": "MIT",
|
|
110
|
-
"bugs": "https://github.com/sinwanjs/sinwan/issues",
|
|
110
|
+
"bugs": "https://github.com/sinwanjs/sinwan-ui/issues",
|
|
111
111
|
"homepage": "https://sinwanjs.com",
|
|
112
112
|
"repository": {
|
|
113
113
|
"type": "git",
|
|
114
|
-
"url": "https://github.com/sinwanjs/sinwan",
|
|
115
|
-
"directory": "sinwan"
|
|
114
|
+
"url": "https://github.com/sinwanjs/sinwan-ui",
|
|
115
|
+
"directory": "sinwan-ui"
|
|
116
116
|
},
|
|
117
117
|
"devDependencies": {
|
|
118
118
|
"@types/bun": "latest",
|