@embedpdf/utils 1.3.15 → 1.4.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.
@@ -0,0 +1,19 @@
1
+ import { Rect, Rotation } from '@embedpdf/models';
2
+ import { ReactNode, CSSProperties } from '../../react/adapter.ts';
3
+ interface CounterRotateProps {
4
+ rect: Rect;
5
+ rotation: Rotation;
6
+ }
7
+ export interface MenuWrapperProps {
8
+ style: CSSProperties;
9
+ ref: (el: HTMLDivElement | null) => void;
10
+ }
11
+ interface CounterRotateComponentProps extends CounterRotateProps {
12
+ children: (props: {
13
+ matrix: string;
14
+ rect: Rect;
15
+ menuWrapperProps: MenuWrapperProps;
16
+ }) => ReactNode;
17
+ }
18
+ export declare function CounterRotate({ children, ...props }: CounterRotateComponentProps): import("react/jsx-runtime").JSX.Element;
19
+ export {};
@@ -0,0 +1 @@
1
+ export * from './counter-rotate-container';
@@ -0,0 +1,3 @@
1
+ export * from './use-drag-resize';
2
+ export * from './use-interaction-handles';
3
+ export * from './use-double-press-props';
@@ -0,0 +1,11 @@
1
+ import { dblClickProp, PointerEvent } from '../../react/adapter.ts';
2
+ type DoublePressOptions = {
3
+ delay?: number;
4
+ tolerancePx?: number;
5
+ };
6
+ type DoubleHandler<T extends Element> = ((e: PointerEvent<T> | MouseEvent) => void) | undefined;
7
+ type DoubleProps<K extends string> = Partial<Record<K, (e: any) => void>> & {
8
+ onPointerUp?: (e: any) => void;
9
+ };
10
+ export declare function useDoublePressProps<T extends Element = Element, K extends string = typeof dblClickProp>(onDouble?: DoubleHandler<T>, { delay, tolerancePx }?: DoublePressOptions): DoubleProps<K>;
11
+ export {};
@@ -0,0 +1,27 @@
1
+ import { PointerEvent } from '../../react/adapter.ts';
2
+ import { DragResizeConfig, InteractionEvent, ResizeHandle } from '../plugin-interaction-primitives';
3
+ export interface UseDragResizeOptions extends DragResizeConfig {
4
+ onUpdate?: (event: InteractionEvent) => void;
5
+ enabled?: boolean;
6
+ }
7
+ export interface ResizeHandleEventProps {
8
+ onPointerDown: (e: PointerEvent) => void;
9
+ onPointerMove: (e: PointerEvent) => void;
10
+ onPointerUp: (e: PointerEvent) => void;
11
+ onPointerCancel: (e: PointerEvent) => void;
12
+ }
13
+ export declare function useDragResize(options: UseDragResizeOptions): {
14
+ dragProps: {
15
+ onPointerDown: (e: PointerEvent) => void;
16
+ onPointerMove: (e: PointerEvent) => void;
17
+ onPointerUp: (e: PointerEvent) => void;
18
+ onPointerCancel: (e: PointerEvent) => void;
19
+ } | {
20
+ onPointerDown?: undefined;
21
+ onPointerMove?: undefined;
22
+ onPointerUp?: undefined;
23
+ onPointerCancel?: undefined;
24
+ };
25
+ createResizeProps: (handle: ResizeHandle) => ResizeHandleEventProps;
26
+ createVertexProps: (vertexIndex: number) => ResizeHandleEventProps;
27
+ };
@@ -0,0 +1,33 @@
1
+ import { PointerEvent, CSSProperties } from '../../react/adapter.ts';
2
+ import { UseDragResizeOptions } from './use-drag-resize';
3
+ import { ResizeUI, VertexUI } from '../plugin-interaction-primitives/utils';
4
+ export type HandleElementProps = {
5
+ key: string | number;
6
+ style: CSSProperties;
7
+ onPointerDown: (e: PointerEvent) => void;
8
+ onPointerMove: (e: PointerEvent) => void;
9
+ onPointerUp: (e: PointerEvent) => void;
10
+ onPointerCancel: (e: PointerEvent) => void;
11
+ } & Record<string, any>;
12
+ export declare function useInteractionHandles(opts: {
13
+ controller: UseDragResizeOptions;
14
+ resizeUI?: ResizeUI;
15
+ vertexUI?: VertexUI;
16
+ includeVertices?: boolean;
17
+ handleAttrs?: (h: 'nw' | 'ne' | 'sw' | 'se' | 'n' | 'e' | 's' | 'w') => Record<string, any> | void;
18
+ vertexAttrs?: (i: number) => Record<string, any> | void;
19
+ }): {
20
+ dragProps: {
21
+ onPointerDown: (e: PointerEvent) => void;
22
+ onPointerMove: (e: PointerEvent) => void;
23
+ onPointerUp: (e: PointerEvent) => void;
24
+ onPointerCancel: (e: PointerEvent) => void;
25
+ } | {
26
+ onPointerDown?: undefined;
27
+ onPointerMove?: undefined;
28
+ onPointerUp?: undefined;
29
+ onPointerCancel?: undefined;
30
+ };
31
+ resize: HandleElementProps[];
32
+ vertices: HandleElementProps[];
33
+ };
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ export * from './hooks';
@@ -0,0 +1,68 @@
1
+ import { Position, Rect } from '@embedpdf/models';
2
+ export interface DragResizeConfig {
3
+ element: Rect;
4
+ vertices?: Position[];
5
+ constraints?: {
6
+ minWidth?: number;
7
+ minHeight?: number;
8
+ maxWidth?: number;
9
+ maxHeight?: number;
10
+ boundingBox?: {
11
+ width: number;
12
+ height: number;
13
+ };
14
+ };
15
+ maintainAspectRatio?: boolean;
16
+ pageRotation?: number;
17
+ scale?: number;
18
+ }
19
+ export type InteractionState = 'idle' | 'dragging' | 'resizing' | 'vertex-editing';
20
+ export type ResizeHandle = 'nw' | 'ne' | 'sw' | 'se' | 'n' | 'e' | 's' | 'w';
21
+ export interface TransformData {
22
+ type: 'move' | 'resize' | 'vertex-edit';
23
+ changes: {
24
+ rect?: Rect;
25
+ vertices?: Position[];
26
+ };
27
+ metadata?: {
28
+ handle?: ResizeHandle;
29
+ vertexIndex?: number;
30
+ maintainAspectRatio?: boolean;
31
+ };
32
+ }
33
+ export interface InteractionEvent {
34
+ state: 'start' | 'move' | 'end';
35
+ transformData?: TransformData;
36
+ }
37
+ /**
38
+ * Pure geometric controller that manages drag/resize/vertex-edit logic.
39
+ */
40
+ export declare class DragResizeController {
41
+ private config;
42
+ private onUpdate;
43
+ private state;
44
+ private startPoint;
45
+ private startElement;
46
+ private activeHandle;
47
+ private currentPosition;
48
+ private activeVertexIndex;
49
+ private startVertices;
50
+ private currentVertices;
51
+ constructor(config: DragResizeConfig, onUpdate: (event: InteractionEvent) => void);
52
+ updateConfig(config: Partial<DragResizeConfig>): void;
53
+ startDrag(clientX: number, clientY: number): void;
54
+ startResize(handle: ResizeHandle, clientX: number, clientY: number): void;
55
+ startVertexEdit(vertexIndex: number, clientX: number, clientY: number): void;
56
+ move(clientX: number, clientY: number): void;
57
+ end(): void;
58
+ cancel(): void;
59
+ private reset;
60
+ private getCurrentPosition;
61
+ private calculateDelta;
62
+ private transformDelta;
63
+ private clampPoint;
64
+ private calculateVertexPosition;
65
+ private calculateDragPosition;
66
+ private calculateResizePosition;
67
+ private applyConstraints;
68
+ }
@@ -0,0 +1,2 @@
1
+ export * from './drag-resize-controller';
2
+ export * from './utils';
@@ -0,0 +1,22 @@
1
+ import { Position } from '@embedpdf/models';
2
+ import { ResizeHandle, DragResizeConfig } from './drag-resize-controller';
3
+ export type QuarterTurns = 0 | 1 | 2 | 3;
4
+ export interface ResizeUI {
5
+ handleSize?: number;
6
+ spacing?: number;
7
+ offsetMode?: 'outside' | 'inside' | 'center';
8
+ includeSides?: boolean;
9
+ zIndex?: number;
10
+ rotationAwareCursor?: boolean;
11
+ }
12
+ export interface VertexUI {
13
+ vertexSize?: number;
14
+ zIndex?: number;
15
+ }
16
+ export interface HandleDescriptor {
17
+ handle: ResizeHandle;
18
+ style: Record<string, number | string>;
19
+ attrs?: Record<string, any>;
20
+ }
21
+ export declare function describeResizeFromConfig(cfg: DragResizeConfig, ui?: ResizeUI): HandleDescriptor[];
22
+ export declare function describeVerticesFromConfig(cfg: DragResizeConfig, ui?: VertexUI, liveVertices?: Position[]): HandleDescriptor[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/utils",
3
- "version": "1.3.15",
3
+ "version": "1.4.0",
4
4
  "private": false,
5
5
  "description": "Shared utility helpers (geometry, tasks, logging, PDF primitives) that underpin every package in the EmbedPDF ecosystem.",
6
6
  "type": "module",
@@ -47,8 +47,8 @@
47
47
  "devDependencies": {
48
48
  "typescript": "^5.0.0",
49
49
  "@types/react": "^18.2.0",
50
- "@embedpdf/build": "1.0.1",
51
- "@embedpdf/models": "1.3.15"
50
+ "@embedpdf/models": "1.4.0",
51
+ "@embedpdf/build": "1.1.0"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "react": ">=16.8.0",