@viewfly/core 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -191,22 +191,6 @@ declare class ReflectiveInjector implements Injector {
191
191
 
192
192
  declare function makeError(name: string): (message: string) => Error;
193
193
 
194
- interface Props {
195
- children?: JSXNode | JSXNode[];
196
- }
197
- declare function Fragment(props: Props): () => JSXNode | JSXNode[];
198
- type Key = number | string;
199
- declare function jsx(type: string | ComponentSetup, props: Props & Record<string, any>, key?: Key): ViewFlyNode;
200
- declare const jsxs: typeof jsx;
201
- interface ViewFlyNode<T = string | ComponentSetup> {
202
- type: T;
203
- props: Props & Record<string, any>;
204
- key?: Key;
205
- }
206
- declare const JSXNodeFactory: {
207
- createNode<T = string | ComponentSetup<any>>(type: T, props: Props & Record<string, any>, key?: Key): ViewFlyNode<T>;
208
- };
209
-
210
194
  declare function comparePropsWithCallbacks(oldProps: Record<string, any>, newProps: Record<string, any>, onDeleted: (key: string, oldValue: any) => void, onAdded: (key: string, value: any) => void, onUpdated: (key: string, newValue: any, oldValue: any) => void): void;
211
195
  declare const TextAtomType: unique symbol;
212
196
  declare const ElementAtomType: unique symbol;
@@ -267,6 +251,63 @@ declare abstract class NativeRenderer<ElementNode = NativeNode, TextNode = Nativ
267
251
  abstract getNameSpace(type: string, namespace: ElementNamespace): string | void;
268
252
  }
269
253
 
254
+ interface Props {
255
+ children?: JSXNode | JSXNode[];
256
+ }
257
+ declare function Fragment(props: Props): () => JSXNode | JSXNode[];
258
+ type Key = number | string;
259
+ declare function jsx(type: string | ComponentSetup, props: Props & Record<string, any>, key?: Key): ViewFlyNode;
260
+ declare const jsxs: typeof jsx;
261
+ interface ViewFlyNode<T = string | ComponentSetup> {
262
+ type: T;
263
+ props: Props & Record<string, any>;
264
+ key?: Key;
265
+ }
266
+ declare const JSXNodeFactory: {
267
+ createNode<T = string | ComponentSetup<any>>(type: T, props: Props & Record<string, any>, key?: Key): ViewFlyNode<T>;
268
+ };
269
+ /**
270
+ * 给组件的视图元素节点添加自定义属性标记
271
+ * @param marks
272
+ * @param setup
273
+ * @example
274
+ * ```tsx
275
+ * const App = withMark('mark', function(props) {
276
+ * return () => {
277
+ * return <div>...</div>
278
+ * }
279
+ * })
280
+ * ```
281
+ */
282
+ declare function withMark<T extends ComponentSetup>(marks: string | string[], setup: T): T;
283
+ declare function applyMark(mark: string | string[], render: () => JSXNode): JSXNode;
284
+ interface PortalProps<T extends NativeNode> extends Props {
285
+ host: T;
286
+ }
287
+ /**
288
+ * 将子节点渲染到指定节点
289
+ * @param props
290
+ * @example
291
+ * ```tsx
292
+ * function App() {
293
+ * const modal = document.getElementById('modal')!
294
+ * return () => {
295
+ * return (
296
+ * <div>
297
+ * <Portal host={modal}>
298
+ * 这里的内容将渲染到 modal 节点
299
+ * </Portal>
300
+ * </div>
301
+ * )
302
+ * }
303
+ * }
304
+ * ```
305
+ */
306
+ declare function Portal<T extends NativeNode>(props: PortalProps<T>): {
307
+ $portalHost: T;
308
+ $render(): JSXNode | JSXNode[];
309
+ };
310
+
270
311
  interface RefListener<T> {
271
312
  (current: T): void | (() => void);
272
313
  }
@@ -490,6 +531,11 @@ declare function getDepContext(): Dep | undefined;
490
531
  declare function pushDepContext(dep: Dep): void;
491
532
  declare function popDepContext(): void;
492
533
 
534
+ /**
535
+ * @deprecated 即将弃用,Viewfly 默认就有 memo 的效果
536
+ * @param canUseMemo
537
+ * @param render
538
+ */
493
539
  declare function withMemo<T extends Props = Props>(canUseMemo: ComponentInstance<T>['$useMemo'], render: () => JSXNode): ComponentInstance<T>;
494
540
 
495
541
  declare function createRenderer(component: Component, nativeRenderer: NativeRenderer, namespace: ElementNamespace): (host: NativeNode) => void;
@@ -719,4 +765,4 @@ declare function createEffect<T, T1, T2, T3, T4, T5, T6, T7>(deps: [Signal<T>, S
719
765
  declare function createEffect<T>(deps: () => T, callback: EffectCallback<T>): () => void;
720
766
  declare function createEffect<T = any>(deps: Signal<any>[], callback: EffectCallback<T[]>): () => void;
721
767
 
722
- export { type AbstractInstanceType, type AbstractProvider, type AbstractType, type Application, ArrayReactiveHandler, type Atom, type ClassNames, type ClassProvider, Component, type ComponentAnnotation, type ComponentInstance, type ComponentSetup, type ComponentViewMetadata, type Computed, type Config, type ConstructorProvider, type ContextProvider, type ContextProviderParams, Dep, DynamicRef, type EffectCallback, type ElementNamespace, type ExistingProvider, type ExtractInstanceType, type ExtractValueType, type FactoryProvider, ForwardRef, Fragment, Inject, type InjectDecorator, InjectFlags, Injectable, type InjectableDecorator, type InjectableOptions, InjectionToken, Injector, JSX, type JSXNode, JSXNodeFactory, type Key, type LifeCycleCallback, MapReactiveHandler, type Module, type NativeNode, NativeRenderer, type NormalizedProvider, NullInjector, ObjectReactiveHandler, Optional, type OptionalDecorator, Prop, type PropDecorator, type Props, type ProvideScope, type Provider, type ReactiveConfig, type RefListener, type ReflectiveDependency, ReflectiveInjector, RootComponent, Scope, Self, type SelfDecorator, SetReactiveHandler, type Signal, SkipSelf, type SkipSelfDecorator, type StaticProvider, StaticRef, THROW_IF_NOT_FOUND, TrackOpTypes, TriggerOpTypes, Type, type TypeProvider, type ValueProvider, type ViewFlyNode, comparePropsWithCallbacks, computed, createContext, createContextProvider, createDerived, createDynamicRef, createEffect, createRef, createRenderer, createSignal, defaultArrayReactiveHandler, defaultMapReactiveHandler, defaultObjectReactiveHandler, defaultSetReactiveHandler, defaultShallowArrayReactiveHandler, defaultShallowMapReactiveHandler, defaultShallowObjectReactiveHandler, defaultShallowSetReactiveHandler, forwardRef, getCurrentInstance, getDepContext, getSetupContext, inject, internalWrite, isReactive, jsx, jsxs, makeError, normalizeProvider, onMounted, onUnmounted, onUpdated, popDepContext, proxyToRawCache, pushDepContext, rawToProxyCache, reactive, readonlyProxyHandler, registryComponentDestroyCallback, shallowReactive, toRaw, track, trigger, viewfly, watch, withAnnotation, withMemo };
768
+ export { type AbstractInstanceType, type AbstractProvider, type AbstractType, type Application, ArrayReactiveHandler, type Atom, type ClassNames, type ClassProvider, Component, type ComponentAnnotation, type ComponentInstance, type ComponentSetup, type ComponentViewMetadata, type Computed, type Config, type ConstructorProvider, type ContextProvider, type ContextProviderParams, Dep, DynamicRef, type EffectCallback, type ElementNamespace, type ExistingProvider, type ExtractInstanceType, type ExtractValueType, type FactoryProvider, ForwardRef, Fragment, Inject, type InjectDecorator, InjectFlags, Injectable, type InjectableDecorator, type InjectableOptions, InjectionToken, Injector, JSX, type JSXNode, JSXNodeFactory, type Key, type LifeCycleCallback, MapReactiveHandler, type Module, type NativeNode, NativeRenderer, type NormalizedProvider, NullInjector, ObjectReactiveHandler, Optional, type OptionalDecorator, Portal, type PortalProps, Prop, type PropDecorator, type Props, type ProvideScope, type Provider, type ReactiveConfig, type RefListener, type ReflectiveDependency, ReflectiveInjector, RootComponent, Scope, Self, type SelfDecorator, SetReactiveHandler, type Signal, SkipSelf, type SkipSelfDecorator, type StaticProvider, StaticRef, THROW_IF_NOT_FOUND, TrackOpTypes, TriggerOpTypes, Type, type TypeProvider, type ValueProvider, type ViewFlyNode, applyMark, comparePropsWithCallbacks, computed, createContext, createContextProvider, createDerived, createDynamicRef, createEffect, createRef, createRenderer, createSignal, defaultArrayReactiveHandler, defaultMapReactiveHandler, defaultObjectReactiveHandler, defaultSetReactiveHandler, defaultShallowArrayReactiveHandler, defaultShallowMapReactiveHandler, defaultShallowObjectReactiveHandler, defaultShallowSetReactiveHandler, forwardRef, getCurrentInstance, getDepContext, getSetupContext, inject, internalWrite, isReactive, jsx, jsxs, makeError, normalizeProvider, onMounted, onUnmounted, onUpdated, popDepContext, proxyToRawCache, pushDepContext, rawToProxyCache, reactive, readonlyProxyHandler, registryComponentDestroyCallback, shallowReactive, toRaw, track, trigger, viewfly, watch, withAnnotation, withMark, withMemo };
@@ -1645,6 +1645,80 @@ const JSXNodeFactory = {
1645
1645
  };
1646
1646
  }
1647
1647
  };
1648
+ /**
1649
+ * 给组件的视图元素节点添加自定义属性标记
1650
+ * @param marks
1651
+ * @param setup
1652
+ * @example
1653
+ * ```tsx
1654
+ * const App = withMark('mark', function(props) {
1655
+ * return () => {
1656
+ * return <div>...</div>
1657
+ * }
1658
+ * })
1659
+ * ```
1660
+ */
1661
+ function withMark(marks, setup) {
1662
+ if (!marks) {
1663
+ return setup;
1664
+ }
1665
+ return function (props) {
1666
+ const componentRenderFn = setup(props);
1667
+ const isFn = typeof componentRenderFn === 'function';
1668
+ if (isFn) {
1669
+ return function () {
1670
+ return applyMark(marks, componentRenderFn);
1671
+ };
1672
+ }
1673
+ const oldRender = componentRenderFn.$render;
1674
+ componentRenderFn.$render = function () {
1675
+ return applyMark(marks, () => {
1676
+ return oldRender.call(componentRenderFn);
1677
+ });
1678
+ };
1679
+ return componentRenderFn;
1680
+ };
1681
+ }
1682
+ function applyMark(mark, render) {
1683
+ const oldCreateNote = JSXNodeFactory.createNode;
1684
+ const spaces = Array.isArray(mark) ? mark : [mark];
1685
+ JSXNodeFactory.createNode = function (name, props, key) {
1686
+ for (const scopedId of spaces) {
1687
+ props[scopedId] = '';
1688
+ }
1689
+ return oldCreateNote.apply(JSXNodeFactory, [name, props, key]);
1690
+ };
1691
+ const vDom = render();
1692
+ JSXNodeFactory.createNode = oldCreateNote;
1693
+ return vDom;
1694
+ }
1695
+ /**
1696
+ * 将子节点渲染到指定节点
1697
+ * @param props
1698
+ * @example
1699
+ * ```tsx
1700
+ * function App() {
1701
+ * const modal = document.getElementById('modal')!
1702
+ * return () => {
1703
+ * return (
1704
+ * <div>
1705
+ * <Portal host={modal}>
1706
+ * 这里的内容将渲染到 modal 节点
1707
+ * </Portal>
1708
+ * </div>
1709
+ * )
1710
+ * }
1711
+ * }
1712
+ * ```
1713
+ */
1714
+ function Portal(props) {
1715
+ return {
1716
+ $portalHost: props.host,
1717
+ $render() {
1718
+ return props.children;
1719
+ }
1720
+ };
1721
+ }
1648
1722
 
1649
1723
  function watch(trigger, callback) {
1650
1724
  let prevFn;
@@ -1753,6 +1827,11 @@ function withAnnotation(annotation, componentSetup) {
1753
1827
  class NativeRenderer {
1754
1828
  }
1755
1829
 
1830
+ /**
1831
+ * @deprecated 即将弃用,Viewfly 默认就有 memo 的效果
1832
+ * @param canUseMemo
1833
+ * @param render
1834
+ */
1756
1835
  function withMemo(canUseMemo, render) {
1757
1836
  return {
1758
1837
  $useMemo: canUseMemo,
@@ -2618,4 +2697,4 @@ function createEffect(deps, callback) {
2618
2697
  return unWatch;
2619
2698
  }
2620
2699
 
2621
- export { ArrayReactiveHandler, Component, Dep, DynamicRef, ForwardRef, Fragment, Inject, InjectFlags, Injectable, InjectionToken, Injector, JSXNodeFactory, MapReactiveHandler, NativeRenderer, NullInjector, ObjectReactiveHandler, Optional, Prop, ReflectiveInjector, RootComponent, Scope, Self, SetReactiveHandler, SkipSelf, StaticRef, THROW_IF_NOT_FOUND, TrackOpTypes, TriggerOpTypes, Type, comparePropsWithCallbacks, computed, createContext, createContextProvider, createDerived, createDynamicRef, createEffect, createRef, createRenderer, createSignal, defaultArrayReactiveHandler, defaultMapReactiveHandler, defaultObjectReactiveHandler, defaultSetReactiveHandler, defaultShallowArrayReactiveHandler, defaultShallowMapReactiveHandler, defaultShallowObjectReactiveHandler, defaultShallowSetReactiveHandler, forwardRef, getCurrentInstance, getDepContext, getSetupContext, inject, internalWrite, isReactive, jsx, jsxs, makeError, normalizeProvider, onMounted, onUnmounted, onUpdated, popDepContext, proxyToRawCache, pushDepContext, rawToProxyCache, reactive, readonlyProxyHandler, registryComponentDestroyCallback, shallowReactive, toRaw, track, trigger, viewfly, watch, withAnnotation, withMemo };
2700
+ export { ArrayReactiveHandler, Component, Dep, DynamicRef, ForwardRef, Fragment, Inject, InjectFlags, Injectable, InjectionToken, Injector, JSXNodeFactory, MapReactiveHandler, NativeRenderer, NullInjector, ObjectReactiveHandler, Optional, Portal, Prop, ReflectiveInjector, RootComponent, Scope, Self, SetReactiveHandler, SkipSelf, StaticRef, THROW_IF_NOT_FOUND, TrackOpTypes, TriggerOpTypes, Type, applyMark, comparePropsWithCallbacks, computed, createContext, createContextProvider, createDerived, createDynamicRef, createEffect, createRef, createRenderer, createSignal, defaultArrayReactiveHandler, defaultMapReactiveHandler, defaultObjectReactiveHandler, defaultSetReactiveHandler, defaultShallowArrayReactiveHandler, defaultShallowMapReactiveHandler, defaultShallowObjectReactiveHandler, defaultShallowSetReactiveHandler, forwardRef, getCurrentInstance, getDepContext, getSetupContext, inject, internalWrite, isReactive, jsx, jsxs, makeError, normalizeProvider, onMounted, onUnmounted, onUpdated, popDepContext, proxyToRawCache, pushDepContext, rawToProxyCache, reactive, readonlyProxyHandler, registryComponentDestroyCallback, shallowReactive, toRaw, track, trigger, viewfly, watch, withAnnotation, withMark, withMemo };
package/bundles/index.js CHANGED
@@ -1647,6 +1647,80 @@ const JSXNodeFactory = {
1647
1647
  };
1648
1648
  }
1649
1649
  };
1650
+ /**
1651
+ * 给组件的视图元素节点添加自定义属性标记
1652
+ * @param marks
1653
+ * @param setup
1654
+ * @example
1655
+ * ```tsx
1656
+ * const App = withMark('mark', function(props) {
1657
+ * return () => {
1658
+ * return <div>...</div>
1659
+ * }
1660
+ * })
1661
+ * ```
1662
+ */
1663
+ function withMark(marks, setup) {
1664
+ if (!marks) {
1665
+ return setup;
1666
+ }
1667
+ return function (props) {
1668
+ const componentRenderFn = setup(props);
1669
+ const isFn = typeof componentRenderFn === 'function';
1670
+ if (isFn) {
1671
+ return function () {
1672
+ return applyMark(marks, componentRenderFn);
1673
+ };
1674
+ }
1675
+ const oldRender = componentRenderFn.$render;
1676
+ componentRenderFn.$render = function () {
1677
+ return applyMark(marks, () => {
1678
+ return oldRender.call(componentRenderFn);
1679
+ });
1680
+ };
1681
+ return componentRenderFn;
1682
+ };
1683
+ }
1684
+ function applyMark(mark, render) {
1685
+ const oldCreateNote = JSXNodeFactory.createNode;
1686
+ const spaces = Array.isArray(mark) ? mark : [mark];
1687
+ JSXNodeFactory.createNode = function (name, props, key) {
1688
+ for (const scopedId of spaces) {
1689
+ props[scopedId] = '';
1690
+ }
1691
+ return oldCreateNote.apply(JSXNodeFactory, [name, props, key]);
1692
+ };
1693
+ const vDom = render();
1694
+ JSXNodeFactory.createNode = oldCreateNote;
1695
+ return vDom;
1696
+ }
1697
+ /**
1698
+ * 将子节点渲染到指定节点
1699
+ * @param props
1700
+ * @example
1701
+ * ```tsx
1702
+ * function App() {
1703
+ * const modal = document.getElementById('modal')!
1704
+ * return () => {
1705
+ * return (
1706
+ * <div>
1707
+ * <Portal host={modal}>
1708
+ * 这里的内容将渲染到 modal 节点
1709
+ * </Portal>
1710
+ * </div>
1711
+ * )
1712
+ * }
1713
+ * }
1714
+ * ```
1715
+ */
1716
+ function Portal(props) {
1717
+ return {
1718
+ $portalHost: props.host,
1719
+ $render() {
1720
+ return props.children;
1721
+ }
1722
+ };
1723
+ }
1650
1724
 
1651
1725
  function watch(trigger, callback) {
1652
1726
  let prevFn;
@@ -1755,6 +1829,11 @@ function withAnnotation(annotation, componentSetup) {
1755
1829
  class NativeRenderer {
1756
1830
  }
1757
1831
 
1832
+ /**
1833
+ * @deprecated 即将弃用,Viewfly 默认就有 memo 的效果
1834
+ * @param canUseMemo
1835
+ * @param render
1836
+ */
1758
1837
  function withMemo(canUseMemo, render) {
1759
1838
  return {
1760
1839
  $useMemo: canUseMemo,
@@ -2636,6 +2715,7 @@ exports.NativeRenderer = NativeRenderer;
2636
2715
  exports.NullInjector = NullInjector;
2637
2716
  exports.ObjectReactiveHandler = ObjectReactiveHandler;
2638
2717
  exports.Optional = Optional;
2718
+ exports.Portal = Portal;
2639
2719
  exports.Prop = Prop;
2640
2720
  exports.ReflectiveInjector = ReflectiveInjector;
2641
2721
  exports.RootComponent = RootComponent;
@@ -2646,6 +2726,7 @@ exports.SkipSelf = SkipSelf;
2646
2726
  exports.StaticRef = StaticRef;
2647
2727
  exports.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
2648
2728
  exports.Type = Type;
2729
+ exports.applyMark = applyMark;
2649
2730
  exports.comparePropsWithCallbacks = comparePropsWithCallbacks;
2650
2731
  exports.computed = computed;
2651
2732
  exports.createContext = createContext;
@@ -2692,4 +2773,5 @@ exports.trigger = trigger;
2692
2773
  exports.viewfly = viewfly;
2693
2774
  exports.watch = watch;
2694
2775
  exports.withAnnotation = withAnnotation;
2776
+ exports.withMark = withMark;
2695
2777
  exports.withMemo = withMemo;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viewfly/core",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Viewfly is a simple and easy-to-use JavaScript framework with an intuitive development experience.",
5
5
  "main": "./bundles/index.js",
6
6
  "module": "./bundles/index.esm.js",