chat-layout 1.2.0-9 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -194,6 +194,24 @@ Type-check:
194
194
  bun run typecheck
195
195
  ```
196
196
 
197
+ Run tests:
198
+
199
+ ```bash
200
+ bun run test
201
+ ```
202
+
203
+ Run tests with coverage:
204
+
205
+ ```bash
206
+ bun run test:coverage
207
+ ```
208
+
209
+ Run the local verification bundle:
210
+
211
+ ```bash
212
+ bun run check
213
+ ```
214
+
197
215
  Build distributable files:
198
216
 
199
217
  ```bash
package/example/chat.ts CHANGED
@@ -10,13 +10,13 @@ import {
10
10
  ShrinkWrap,
11
11
  Text,
12
12
  Wrapper,
13
+ initRenderFeedback,
13
14
  memoRenderItem,
14
15
  type Context,
15
16
  type DynValue,
16
17
  type HitTest,
17
18
  type InlineSpan,
18
19
  type Node,
19
- type RenderFeedback,
20
20
  } from "chat-layout";
21
21
 
22
22
  const sampleWords = [
@@ -507,16 +507,9 @@ const renderer = new ListRenderer(ctx, {
507
507
  });
508
508
  renderer.padding = { top: 32, bottom: 32 };
509
509
  let nextMessageId = list.items.length + 1;
510
+ const feedback = initRenderFeedback();
510
511
 
511
512
  function drawFrame(): void {
512
- const feedback: RenderFeedback = {
513
- minIdx: Number.NaN,
514
- maxIdx: Number.NaN,
515
- min: Number.NaN,
516
- max: Number.NaN,
517
- canAutoFollowTop: false,
518
- canAutoFollowBottom: false,
519
- };
520
513
  renderer.render(feedback);
521
514
 
522
515
  ctx.save();
package/index.d.mts CHANGED
@@ -24,6 +24,10 @@ interface RenderFeedback {
24
24
  /** Whether the current viewport may auto-follow inserts at the visual bottom edge. */
25
25
  canAutoFollowBottom: boolean;
26
26
  }
27
+ /**
28
+ * Creates or resets a render feedback object to its default empty state.
29
+ */
30
+ declare function initRenderFeedback(feedback?: Partial<RenderFeedback>): RenderFeedback;
27
31
  /**
28
32
  * The main axis direction used by flex containers.
29
33
  */
@@ -779,5 +783,5 @@ declare class ListRenderer<C extends CanvasRenderingContext2D, T extends {}> ext
779
783
  protected _getTargetAnchor(index: number, block: NonNullable<JumpToOptions["block"]>): number;
780
784
  }
781
785
  //#endregion
782
- export { Axis, BaseRenderer, Box, ChildLayoutResult, Context, CrossAxisAlignment, DebugRenderer, DeleteListItemAnimationOptions, DynValue, Fixed, Flex, FlexContainerOptions, FlexItem, FlexItemOptions, FlexLayoutResult, Group, HitTest, InlineSpan, InsertListItemsAnimationOptions, JumpToOptions, LayoutConstraints, LayoutRect, ListAnchorMode, ListLayoutOptions, ListPadding, ListRenderer, ListRendererOptions, ListState, ListUnderflowAlign, MainAxisAlignment, MainAxisSize, MultilineText, MultilineTextOptions, Node, PaddingBox, PhysicalTextAlign, Place, PushListItemsAnimationOptions, RenderFeedback, RendererOptions, ShrinkWrap, Text, TextAlign, TextEllipsisPosition, TextJustifyMode, TextJustifyOptions, TextOptions, TextOverflowMode, TextOverflowWrapMode, TextStyleOptions, TextWhiteSpaceMode, TextWordBreakMode, UnshiftListItemsAnimationOptions, UpdateListItemAnimationOptions, VirtualizedRenderer, Wrapper, memoRenderItem, memoRenderItemBy };
786
+ export { Axis, BaseRenderer, Box, ChildLayoutResult, Context, CrossAxisAlignment, DebugRenderer, DeleteListItemAnimationOptions, DynValue, Fixed, Flex, FlexContainerOptions, FlexItem, FlexItemOptions, FlexLayoutResult, Group, HitTest, InlineSpan, InsertListItemsAnimationOptions, JumpToOptions, LayoutConstraints, LayoutRect, ListAnchorMode, ListLayoutOptions, ListPadding, ListRenderer, ListRendererOptions, ListState, ListUnderflowAlign, MainAxisAlignment, MainAxisSize, MultilineText, MultilineTextOptions, Node, PaddingBox, PhysicalTextAlign, Place, PushListItemsAnimationOptions, RenderFeedback, RendererOptions, ShrinkWrap, Text, TextAlign, TextEllipsisPosition, TextJustifyMode, TextJustifyOptions, TextOptions, TextOverflowMode, TextOverflowWrapMode, TextStyleOptions, TextWhiteSpaceMode, TextWordBreakMode, UnshiftListItemsAnimationOptions, UpdateListItemAnimationOptions, VirtualizedRenderer, Wrapper, initRenderFeedback, memoRenderItem, memoRenderItemBy };
783
787
  //# sourceMappingURL=index.d.mts.map
package/index.mjs CHANGED
@@ -3918,6 +3918,21 @@ function memoRenderItemBy(keyOf, renderItem, options = {}) {
3918
3918
  });
3919
3919
  }
3920
3920
  //#endregion
3921
+ //#region src/types.ts
3922
+ /**
3923
+ * Creates or resets a render feedback object to its default empty state.
3924
+ */
3925
+ function initRenderFeedback(feedback = {}) {
3926
+ const target = feedback;
3927
+ target.minIdx = NaN;
3928
+ target.maxIdx = NaN;
3929
+ target.min = NaN;
3930
+ target.max = NaN;
3931
+ target.canAutoFollowTop = false;
3932
+ target.canAutoFollowBottom = false;
3933
+ return target;
3934
+ }
3935
+ //#endregion
3921
3936
  //#region src/renderer/virtualized/frame-session.ts
3922
3937
  function prepareFrameSession(params) {
3923
3938
  let solution = params.resolveVisibleWindow(params.now);
@@ -5459,12 +5474,7 @@ var VirtualizedRenderer = class VirtualizedRenderer extends BaseRenderer {
5459
5474
  }
5460
5475
  _resetRenderFeedback(feedback) {
5461
5476
  if (feedback == null) return;
5462
- feedback.minIdx = NaN;
5463
- feedback.maxIdx = NaN;
5464
- feedback.min = NaN;
5465
- feedback.max = NaN;
5466
- feedback.canAutoFollowTop = false;
5467
- feedback.canAutoFollowBottom = false;
5477
+ initRenderFeedback(feedback);
5468
5478
  }
5469
5479
  _accumulateRenderFeedback(feedback, idx, top, height) {
5470
5480
  const visibleRange = this._readVisibleRange(top, height);
@@ -5780,6 +5790,6 @@ var ListRenderer = class extends VirtualizedRenderer {
5780
5790
  }
5781
5791
  };
5782
5792
  //#endregion
5783
- export { BaseRenderer, DebugRenderer, Fixed, Flex, FlexItem, Group, ListRenderer, ListState, MultilineText, PaddingBox, Place, ShrinkWrap, Text, VirtualizedRenderer, Wrapper, memoRenderItem, memoRenderItemBy };
5793
+ export { BaseRenderer, DebugRenderer, Fixed, Flex, FlexItem, Group, ListRenderer, ListState, MultilineText, PaddingBox, Place, ShrinkWrap, Text, VirtualizedRenderer, Wrapper, initRenderFeedback, memoRenderItem, memoRenderItemBy };
5784
5794
 
5785
5795
  //# sourceMappingURL=index.mjs.map