chat-layout 1.2.0-3 → 1.2.0-4
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/example/chat.ts +20 -0
- package/index.d.mts +40 -18
- package/index.mjs +477 -282
- package/index.mjs.map +1 -1
- package/package.json +1 -1
package/example/chat.ts
CHANGED
|
@@ -253,6 +253,13 @@ class ItemDetector extends Wrapper<C> {
|
|
|
253
253
|
list.update(this.item, nextItem, {
|
|
254
254
|
duration: REPLACE_ANIMATION_DURATION,
|
|
255
255
|
});
|
|
256
|
+
} else if (test.type === "auxclick") {
|
|
257
|
+
if (!list.items.includes(this.item)) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
list.delete(this.item, {
|
|
261
|
+
duration: REPLACE_ANIMATION_DURATION,
|
|
262
|
+
});
|
|
256
263
|
}
|
|
257
264
|
return true;
|
|
258
265
|
}
|
|
@@ -555,6 +562,19 @@ canvas.addEventListener("click", (e) => {
|
|
|
555
562
|
}
|
|
556
563
|
});
|
|
557
564
|
|
|
565
|
+
canvas.addEventListener("contextmenu", (e) => {
|
|
566
|
+
e.preventDefault();
|
|
567
|
+
const { top, left } = canvas.getBoundingClientRect();
|
|
568
|
+
const result = renderer.hittest({
|
|
569
|
+
x: e.clientX - left,
|
|
570
|
+
y: e.clientY - top,
|
|
571
|
+
type: "auxclick",
|
|
572
|
+
});
|
|
573
|
+
if (!result) {
|
|
574
|
+
currentHover = undefined;
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
|
|
558
578
|
function randomEnglishText(words: number): string {
|
|
559
579
|
const out: string[] = [];
|
|
560
580
|
for (let i = 0; i < words; i += 1) {
|
package/index.d.mts
CHANGED
|
@@ -513,6 +513,10 @@ interface UpdateListItemAnimationOptions {
|
|
|
513
513
|
/** Animation duration in milliseconds. */
|
|
514
514
|
duration?: number;
|
|
515
515
|
}
|
|
516
|
+
interface DeleteListItemAnimationOptions {
|
|
517
|
+
/** Animation duration in milliseconds. */
|
|
518
|
+
duration?: number;
|
|
519
|
+
}
|
|
516
520
|
declare class ListState<T extends {}> {
|
|
517
521
|
#private;
|
|
518
522
|
/** Pixel offset from the anchored item edge. */
|
|
@@ -539,6 +543,14 @@ declare class ListState<T extends {}> {
|
|
|
539
543
|
* Updates an existing item by object identity.
|
|
540
544
|
*/
|
|
541
545
|
update(targetItem: T, nextItem: T, animation?: UpdateListItemAnimationOptions): void;
|
|
546
|
+
/**
|
|
547
|
+
* Starts deleting an existing item by object identity.
|
|
548
|
+
*/
|
|
549
|
+
delete(item: T, animation?: DeleteListItemAnimationOptions): void;
|
|
550
|
+
/**
|
|
551
|
+
* Finalizes a pending delete by removing the item from the list.
|
|
552
|
+
*/
|
|
553
|
+
finalizeDelete(item: T): void;
|
|
542
554
|
/**
|
|
543
555
|
* Sets the current anchor item and pixel offset.
|
|
544
556
|
*/
|
|
@@ -570,6 +582,13 @@ declare function memoRenderItemBy<C extends CanvasRenderingContext2D, T, K>(keyO
|
|
|
570
582
|
resetKey: (key: K) => boolean;
|
|
571
583
|
};
|
|
572
584
|
//#endregion
|
|
585
|
+
//#region src/renderer/virtualized/base-types.d.ts
|
|
586
|
+
/** Per-item draw/hittest callbacks produced by the resolver. */
|
|
587
|
+
type VirtualizedResolvedItem = {
|
|
588
|
+
draw: (y: number) => boolean;
|
|
589
|
+
hittest: (test: HitTest, y: number) => boolean;
|
|
590
|
+
};
|
|
591
|
+
//#endregion
|
|
573
592
|
//#region src/renderer/virtualized/solver.d.ts
|
|
574
593
|
interface VisibleListState {
|
|
575
594
|
position?: number;
|
|
@@ -589,6 +608,10 @@ interface VisibleWindow<T> {
|
|
|
589
608
|
drawList: VisibleWindowEntry<T>[];
|
|
590
609
|
shift: number;
|
|
591
610
|
}
|
|
611
|
+
interface VisibleWindowResult<T> {
|
|
612
|
+
normalizedState: NormalizedListState;
|
|
613
|
+
window: VisibleWindow<T>;
|
|
614
|
+
}
|
|
592
615
|
//#endregion
|
|
593
616
|
//#region src/renderer/virtualized/base.d.ts
|
|
594
617
|
/**
|
|
@@ -604,10 +627,6 @@ interface JumpToOptions {
|
|
|
604
627
|
/** Called after the jump completes or finishes animating. */
|
|
605
628
|
onComplete?: () => void;
|
|
606
629
|
}
|
|
607
|
-
type VirtualizedResolvedItem<C extends CanvasRenderingContext2D> = {
|
|
608
|
-
draw: (y: number) => boolean;
|
|
609
|
-
hittest: (test: HitTest, y: number) => boolean;
|
|
610
|
-
};
|
|
611
630
|
/**
|
|
612
631
|
* Shared base class for virtualized list renderers.
|
|
613
632
|
*/
|
|
@@ -636,9 +655,9 @@ declare abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T
|
|
|
636
655
|
/** Replaces the current item collection. */
|
|
637
656
|
set items(value: T[]);
|
|
638
657
|
/** Renders the current visible window. */
|
|
639
|
-
|
|
658
|
+
render(feedback?: RenderFeedback): boolean;
|
|
640
659
|
/** Hit-tests the current visible window. */
|
|
641
|
-
|
|
660
|
+
hittest(test: {
|
|
642
661
|
x: number;
|
|
643
662
|
y: number;
|
|
644
663
|
type: "click" | "auxclick" | "hover";
|
|
@@ -651,19 +670,26 @@ declare abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T
|
|
|
651
670
|
jumpTo(index: number, options?: JumpToOptions): void;
|
|
652
671
|
protected _resetRenderFeedback(feedback?: RenderFeedback): void;
|
|
653
672
|
protected _accumulateRenderFeedback(feedback: RenderFeedback, idx: number, top: number, height: number): void;
|
|
654
|
-
protected _renderDrawList(list: VisibleWindow<VirtualizedResolvedItem
|
|
655
|
-
protected _renderVisibleWindow(window: VisibleWindow<VirtualizedResolvedItem
|
|
656
|
-
protected
|
|
657
|
-
|
|
673
|
+
protected _renderDrawList(list: VisibleWindow<VirtualizedResolvedItem>["drawList"], shift: number, feedback?: RenderFeedback): boolean;
|
|
674
|
+
protected _renderVisibleWindow(window: VisibleWindow<VirtualizedResolvedItem>, feedback?: RenderFeedback): boolean;
|
|
675
|
+
protected _readVisibleRange(top: number, height: number): {
|
|
676
|
+
top: number;
|
|
677
|
+
bottom: number;
|
|
678
|
+
} | undefined;
|
|
679
|
+
protected _pruneReplacementAnimations(_window: VisibleWindow<unknown>): boolean;
|
|
680
|
+
protected _hittestVisibleWindow(window: VisibleWindow<VirtualizedResolvedItem>, test: HitTest): boolean;
|
|
681
|
+
protected _captureVisibleItemSnapshot(window: VisibleWindow<unknown>): void;
|
|
682
|
+
protected _prepareRender(now: number): boolean;
|
|
658
683
|
protected _finishRender(requestRedraw: boolean): boolean;
|
|
659
684
|
protected _clampItemIndex(index: number): number;
|
|
660
685
|
protected _getItemHeight(index: number): number;
|
|
661
686
|
protected _resolveItem(item: T, _index: number, now: number): {
|
|
662
|
-
value: VirtualizedResolvedItem
|
|
687
|
+
value: VirtualizedResolvedItem;
|
|
663
688
|
height: number;
|
|
664
689
|
};
|
|
665
690
|
protected _getAnchorAtOffset(index: number, offset: number): number;
|
|
666
691
|
protected abstract _normalizeListState(state: VisibleListState): NormalizedListState;
|
|
692
|
+
protected abstract _resolveVisibleWindow(now: number): VisibleWindowResult<VirtualizedResolvedItem>;
|
|
667
693
|
protected abstract _readAnchor(state: NormalizedListState): number;
|
|
668
694
|
protected abstract _applyAnchor(anchor: number): void;
|
|
669
695
|
protected abstract _getDefaultJumpBlock(): NonNullable<JumpToOptions["block"]>;
|
|
@@ -676,15 +702,13 @@ declare abstract class VirtualizedRenderer<C extends CanvasRenderingContext2D, T
|
|
|
676
702
|
* Virtualized renderer anchored to the bottom, suitable for chat-style UIs.
|
|
677
703
|
*/
|
|
678
704
|
declare class ChatRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {
|
|
679
|
-
|
|
705
|
+
protected _resolveVisibleWindow(now: number): VisibleWindowResult<VirtualizedResolvedItem>;
|
|
680
706
|
protected _getDefaultJumpBlock(): NonNullable<JumpToOptions["block"]>;
|
|
681
707
|
protected _normalizeListState(state: VisibleListState): NormalizedListState;
|
|
682
708
|
protected _readAnchor(state: NormalizedListState): number;
|
|
683
709
|
protected _applyAnchor(anchor: number): void;
|
|
684
710
|
protected _getTargetAnchor(index: number, block: NonNullable<JumpToOptions["block"]>): number;
|
|
685
711
|
protected _getAnimatedLayerOffset(slotHeight: number, nodeHeight: number): number;
|
|
686
|
-
render(feedback?: RenderFeedback): boolean;
|
|
687
|
-
hittest(test: HitTest): boolean;
|
|
688
712
|
}
|
|
689
713
|
//#endregion
|
|
690
714
|
//#region src/renderer/virtualized/timeline.d.ts
|
|
@@ -692,16 +716,14 @@ declare class ChatRenderer<C extends CanvasRenderingContext2D, T extends {}> ext
|
|
|
692
716
|
* Virtualized renderer anchored to the top, suitable for timeline-style UIs.
|
|
693
717
|
*/
|
|
694
718
|
declare class TimelineRenderer<C extends CanvasRenderingContext2D, T extends {}> extends VirtualizedRenderer<C, T> {
|
|
695
|
-
|
|
719
|
+
protected _resolveVisibleWindow(now: number): VisibleWindowResult<VirtualizedResolvedItem>;
|
|
696
720
|
protected _getDefaultJumpBlock(): NonNullable<JumpToOptions["block"]>;
|
|
697
721
|
protected _normalizeListState(state: VisibleListState): NormalizedListState;
|
|
698
722
|
protected _readAnchor(state: NormalizedListState): number;
|
|
699
723
|
protected _applyAnchor(anchor: number): void;
|
|
700
724
|
protected _getTargetAnchor(index: number, block: NonNullable<JumpToOptions["block"]>): number;
|
|
701
725
|
protected _getAnimatedLayerOffset(_slotHeight: number, _nodeHeight: number): number;
|
|
702
|
-
render(feedback?: RenderFeedback): boolean;
|
|
703
|
-
hittest(test: HitTest): boolean;
|
|
704
726
|
}
|
|
705
727
|
//#endregion
|
|
706
|
-
export { Axis, BaseRenderer, Box, ChatRenderer, ChildLayoutResult, Context, CrossAxisAlignment, DebugRenderer, DynValue, Fixed, Flex, FlexContainerOptions, FlexItem, FlexItemOptions, FlexLayoutResult, Group, HitTest, InlineSpan, JumpToOptions, LayoutConstraints, LayoutRect, ListState, MainAxisAlignment, MainAxisSize, MultilineText, MultilineTextOptions, Node, PaddingBox, PhysicalTextAlign, Place, RenderFeedback, RendererOptions, ShrinkWrap, Text, TextAlign, TextEllipsisPosition, TextJustifyMode, TextJustifyOptions, TextOptions, TextOverflowMode, TextOverflowWrapMode, TextStyleOptions, TextWhiteSpaceMode, TextWordBreakMode, TimelineRenderer, UpdateListItemAnimationOptions, VirtualizedRenderer, Wrapper, memoRenderItem, memoRenderItemBy };
|
|
728
|
+
export { Axis, BaseRenderer, Box, ChatRenderer, ChildLayoutResult, Context, CrossAxisAlignment, DebugRenderer, DeleteListItemAnimationOptions, DynValue, Fixed, Flex, FlexContainerOptions, FlexItem, FlexItemOptions, FlexLayoutResult, Group, HitTest, InlineSpan, JumpToOptions, LayoutConstraints, LayoutRect, ListState, MainAxisAlignment, MainAxisSize, MultilineText, MultilineTextOptions, Node, PaddingBox, PhysicalTextAlign, Place, RenderFeedback, RendererOptions, ShrinkWrap, Text, TextAlign, TextEllipsisPosition, TextJustifyMode, TextJustifyOptions, TextOptions, TextOverflowMode, TextOverflowWrapMode, TextStyleOptions, TextWhiteSpaceMode, TextWordBreakMode, TimelineRenderer, UpdateListItemAnimationOptions, VirtualizedRenderer, Wrapper, memoRenderItem, memoRenderItemBy };
|
|
707
729
|
//# sourceMappingURL=index.d.mts.map
|