hyperframes 0.8.103 → 0.8.104
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/{add-7YNDDJZM.js → add-KXAWOEZJ.js} +5 -5
- package/dist/{asset-QQGUOKN7.js → asset-QAIWASUI.js} +2 -2
- package/dist/{auth-ITO2U4DF.js → auth-2FQGBN5W.js} +1 -1
- package/dist/{autoUpdate-YA7T35TP.js → autoUpdate-UXMPQYUO.js} +2 -2
- package/dist/{backgroundChecks-C6JEBKPE.js → backgroundChecks-RPBCDLBU.js} +3 -3
- package/dist/backgroundChecksWorker.js +3 -3
- package/dist/{beats-P6S6UEOR.js → beats-F4PZIT7L.js} +4 -4
- package/dist/{benchmark-JIZAHWG4.js → benchmark-AIGZ6NZT.js} +5 -5
- package/dist/{browser-GFQ45FKN.js → browser-AQTVWA2I.js} +3 -3
- package/dist/{catalog-RPJ3NWVH.js → catalog-LVB5GLIS.js} +5 -5
- package/dist/{check-BJU7NGBL.js → check-ZMENBYIU.js} +9 -9
- package/dist/{checkBrowser-OXJCECZI.js → checkBrowser-26NJ47DY.js} +7 -7
- package/dist/{chunk-3XNY2WK4.js → chunk-2M6YQAMV.js} +1 -1
- package/dist/{chunk-IHMR2L3L.js → chunk-4V63UZIV.js} +1 -1
- package/dist/{chunk-E3JCMLAF.js → chunk-6CPVF7DM.js} +1 -1
- package/dist/{chunk-PQL3VANN.js → chunk-IEBXD6Y6.js} +2 -2
- package/dist/{chunk-J5MQ3GPK.js → chunk-JUDUP2IC.js} +2 -2
- package/dist/{chunk-2DHH45NV.js → chunk-MZWGD4IR.js} +1 -1
- package/dist/{chunk-P77GUHVY.js → chunk-PRWBZGQ5.js} +1 -1
- package/dist/{chunk-A4UUULN3.js → chunk-RUQUOWIV.js} +2 -2
- package/dist/{chunk-A5QSC7DM.js → chunk-S4EZWGRD.js} +2 -2
- package/dist/{chunk-CDLT2S5Y.js → chunk-SA4HX7OJ.js} +2 -2
- package/dist/{chunk-SFXDX5F6.js → chunk-TKZAN2AY.js} +2 -2
- package/dist/{chunk-ASSVFGUL.js → chunk-TVKKKJQT.js} +1 -1
- package/dist/{chunk-VQOZ3JO6.js → chunk-VAFKQ546.js} +1 -1
- package/dist/{chunk-G4WCIV45.js → chunk-XOBW5TFB.js} +2 -2
- package/dist/{chunk-2QRIIMGS.js → chunk-ZASIQRKO.js} +2 -2
- package/dist/{clean-FPXQNQQ2.js → clean-4NIBDW2Y.js} +3 -3
- package/dist/cli.js +44 -44
- package/dist/{cloud-BFMMRGJL.js → cloud-XONUMPVD.js} +4 -4
- package/dist/{compare-IKBMRXHF.js → compare-PLEGE2AB.js} +4 -4
- package/dist/{component-RN32W42O.js → component-YODSQLKS.js} +3 -3
- package/dist/{compositions-O2WKG7BC.js → compositions-ZYGETZWE.js} +5 -5
- package/dist/{delete-EF2RARRV.js → delete-2YR5ZDZI.js} +2 -2
- package/dist/{doctor-L6CV6YXV.js → doctor-WS4BOIAN.js} +3 -3
- package/dist/{events-M76TNXYH.js → events-AWJJTVYV.js} +2 -2
- package/dist/{events-ZCO6M2G6.js → events-QEEFQ76R.js} +3 -3
- package/dist/{feedback-2ACKQBUF.js → feedback-32I2DS3H.js} +4 -4
- package/dist/{figma-KZC2I2K7.js → figma-THXKL7C3.js} +3 -3
- package/dist/fontLocalizeCli.js +1 -1
- package/dist/{get-HSREOXQC.js → get-2RK36VX3.js} +2 -2
- package/dist/{grade-compare-HN5IRGL5.js → grade-compare-4R5XDPJU.js} +4 -4
- package/dist/{help-ACSFM5ZX.js → help-YKZ5HPQO.js} +1 -1
- package/dist/{history-THD5S55X.js → history-2IPTBA55.js} +5 -5
- package/dist/hyperframes-player.global.js +1 -1
- package/dist/{info-JGRSYW7U.js → info-H2ZIL5YN.js} +5 -5
- package/dist/{init-WULQFAB7.js → init-2ZEQAKSE.js} +6 -6
- package/dist/{inspect-QPT6PESN.js → inspect-FQEXVZUP.js} +6 -6
- package/dist/{keyframes-MD5JHEQG.js → keyframes-GHCATB4L.js} +5 -5
- package/dist/{layout-SAA5WUEQ.js → layout-JUAYXDNX.js} +6 -6
- package/dist/{lint-3TPZORDF.js → lint-45XP4TUK.js} +6 -6
- package/dist/{list-AURXVOVG.js → list-CKALQL3O.js} +2 -2
- package/dist/{login-GTLUEY2W.js → login-QQDJUIGO.js} +4 -4
- package/dist/{media-treatment-5S22MP33.js → media-treatment-CBQ2DANK.js} +5 -5
- package/dist/{normalize-audio-JSYJFSDX.js → normalize-audio-OVVPWEUL.js} +4 -4
- package/dist/{play-HVM27UXW.js → play-YIHX3DZX.js} +4 -4
- package/dist/{present-UKH4JT6K.js → present-FWJNW3Z3.js} +4 -4
- package/dist/{preview-IJ27BKQK.js → preview-TAICDDJL.js} +5 -5
- package/dist/{render-Q4IVNLDA.js → render-LHTKQD2G.js} +5 -5
- package/dist/{render-7QYVDEZ3.js → render-TSOLZGAK.js} +5 -5
- package/dist/{skills-2UKBANDP.js → skills-4M2LBGYL.js} +5 -5
- package/dist/{skillsUpdateCheck-Z7D7NR3G.js → skillsUpdateCheck-WDI32JU4.js} +3 -3
- package/dist/{snapshot-CJCGJCK2.js → snapshot-33SGYIF6.js} +4 -4
- package/dist/studio/assets/{hyperframes-player-DG795Hwu.js → hyperframes-player-DAoaajuM.js} +1 -1
- package/dist/studio/assets/{index-BiEtDkae.js → index-BDK4rTMb.js} +1 -1
- package/dist/studio/assets/{index-BPJRf2X9.js → index-De2aO4XM.js} +178 -178
- package/dist/studio/assets/{index-DuCZ3pQw.js → index-WV9LroAD.js} +1 -1
- package/dist/studio/index.d.ts +181 -168
- package/dist/studio/index.html +1 -1
- package/dist/studio/index.js +428 -305
- package/dist/studio/index.js.map +1 -1
- package/dist/{studioServer-DBBVNNRM.js → studioServer-CTDEYU7Q.js} +4 -4
- package/dist/{telemetry-36QQ3MV6.js → telemetry-7P3TXR5K.js} +3 -3
- package/dist/{timeline-JFW5OBO4.js → timeline-WOBSPT6V.js} +5 -5
- package/dist/{tokens-A3UY3JEB.js → tokens-2A4LMJYJ.js} +2 -2
- package/dist/{transcribe-C3KOJRCZ.js → transcribe-7VKKNU5N.js} +3 -3
- package/dist/{updateCheck-CM5G6C4C.js → updateCheck-5UKKIEDG.js} +2 -2
- package/dist/{upgrade-BHLYQC6T.js → upgrade-QZIZVUIX.js} +2 -2
- package/dist/{validate-SKGTQ6MA.js → validate-D2YZV5KV.js} +6 -6
- package/package.json +1 -1
package/dist/studio/index.d.ts
CHANGED
|
@@ -2285,6 +2285,8 @@ interface PropertyPanelProps {
|
|
|
2285
2285
|
onSetManualOffset: (element: DomEditSelection, next: {
|
|
2286
2286
|
x: number;
|
|
2287
2287
|
y: number;
|
|
2288
|
+
}, route?: {
|
|
2289
|
+
plainTranslate: boolean;
|
|
2288
2290
|
}) => void | Promise<void>;
|
|
2289
2291
|
onSetManualSize: (element: DomEditSelection, next: {
|
|
2290
2292
|
width: number;
|
|
@@ -2922,24 +2924,150 @@ interface InlineTextEditCommit {
|
|
|
2922
2924
|
previousHtml: string;
|
|
2923
2925
|
}
|
|
2924
2926
|
|
|
2927
|
+
/** Where a plain rotate draws its turn, read once at press: the element's own `rotate`, or, when its
|
|
2928
|
+
* transform translates it (often the translate(-50%, -50%) centring), a rotate() right after that
|
|
2929
|
+
* translate, so the box turns in place in screen space. `share` is what the rest already turns. */
|
|
2930
|
+
interface CssRotationTarget {
|
|
2931
|
+
property: "rotate" | "transform";
|
|
2932
|
+
before: string;
|
|
2933
|
+
after: string;
|
|
2934
|
+
share: number;
|
|
2935
|
+
/** -1 when a mirroring `scale` property flips a turn made inside the transform. */
|
|
2936
|
+
sign: number;
|
|
2937
|
+
/** An inline box does not transform, so the turn makes it inline-block. */
|
|
2938
|
+
inline: boolean;
|
|
2939
|
+
}
|
|
2940
|
+
type RotationCommit = {
|
|
2941
|
+
angle: number;
|
|
2942
|
+
plain?: CssRotationTarget;
|
|
2943
|
+
};
|
|
2944
|
+
|
|
2945
|
+
declare const SNAP_THRESHOLD_PX = 6;
|
|
2946
|
+
/** Whether a move of this size has travelled far enough for snapping to apply. */
|
|
2947
|
+
declare function snapEngagedForTravel(dx: number, dy: number): boolean;
|
|
2948
|
+
interface SnapEdge {
|
|
2949
|
+
position: number;
|
|
2950
|
+
source: "grid";
|
|
2951
|
+
id: string;
|
|
2952
|
+
}
|
|
2953
|
+
interface SnapTarget {
|
|
2954
|
+
left: number;
|
|
2955
|
+
top: number;
|
|
2956
|
+
right: number;
|
|
2957
|
+
bottom: number;
|
|
2958
|
+
centerX: number;
|
|
2959
|
+
centerY: number;
|
|
2960
|
+
id: string;
|
|
2961
|
+
}
|
|
2962
|
+
interface SnapGuide {
|
|
2963
|
+
axis: "x" | "y";
|
|
2964
|
+
position: number;
|
|
2965
|
+
/** Extent of the guide line (min of involved elements). */
|
|
2966
|
+
from: number;
|
|
2967
|
+
/** Extent of the guide line (max of involved elements). */
|
|
2968
|
+
to: number;
|
|
2969
|
+
}
|
|
2970
|
+
interface SpacingGuide {
|
|
2971
|
+
axis: "x" | "y";
|
|
2972
|
+
/** Position of the gap (start of gap). */
|
|
2973
|
+
position: number;
|
|
2974
|
+
/** Size of the gap in pixels. */
|
|
2975
|
+
size: number;
|
|
2976
|
+
/** Extent for rendering the indicator. */
|
|
2977
|
+
from: number;
|
|
2978
|
+
/** Extent for rendering the indicator. */
|
|
2979
|
+
to: number;
|
|
2980
|
+
}
|
|
2981
|
+
interface SnapResult {
|
|
2982
|
+
dx: number;
|
|
2983
|
+
dy: number;
|
|
2984
|
+
guides: SnapGuide[];
|
|
2985
|
+
spacingGuides: SpacingGuide[];
|
|
2986
|
+
}
|
|
2987
|
+
interface Rect {
|
|
2988
|
+
left: number;
|
|
2989
|
+
top: number;
|
|
2990
|
+
width: number;
|
|
2991
|
+
height: number;
|
|
2992
|
+
}
|
|
2925
2993
|
/**
|
|
2926
|
-
*
|
|
2927
|
-
*
|
|
2928
|
-
* `runDomEditCommit` resolves on persist failure by design (see its contract
|
|
2929
|
-
* above), so a caller cannot learn whether the write landed by awaiting it — a
|
|
2930
|
-
* failed persist and a successful one are indistinguishable. Capture and apply
|
|
2931
|
-
* bugs still reject. The human path does not need to ask about handled persist
|
|
2932
|
-
* failures, because `onError` already put a toast on screen. A programmatic
|
|
2933
|
-
* caller has no screen, so it has to be told.
|
|
2994
|
+
* Convert overlay rects to snap targets with precomputed edges & centers.
|
|
2934
2995
|
*/
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2996
|
+
declare function extractSnapTargets(entries: Array<{
|
|
2997
|
+
rect: Rect;
|
|
2998
|
+
id: string;
|
|
2999
|
+
}>): SnapTarget[];
|
|
3000
|
+
/**
|
|
3001
|
+
* Create a snap target from the composition/overlay boundary.
|
|
3002
|
+
*/
|
|
3003
|
+
declare function buildCompositionSnapTarget(rect: Rect): SnapTarget;
|
|
3004
|
+
/**
|
|
3005
|
+
* Generate grid-line snap edges.
|
|
3006
|
+
* `gridSpacing` is in composition pixels; `scale` converts to overlay pixels.
|
|
3007
|
+
* X edges are vertical grid lines; Y edges are horizontal grid lines.
|
|
3008
|
+
*/
|
|
3009
|
+
declare function buildGridSnapEdges(compositionRect: Rect, gridSpacing: number, scale: number): {
|
|
3010
|
+
x: SnapEdge[];
|
|
3011
|
+
y: SnapEdge[];
|
|
2942
3012
|
};
|
|
3013
|
+
declare function resolveSnapAdjustment(input: {
|
|
3014
|
+
movingRect: Rect;
|
|
3015
|
+
proposedDx: number;
|
|
3016
|
+
proposedDy: number;
|
|
3017
|
+
targets: SnapTarget[];
|
|
3018
|
+
gridEdges?: {
|
|
3019
|
+
x: SnapEdge[];
|
|
3020
|
+
y: SnapEdge[];
|
|
3021
|
+
};
|
|
3022
|
+
threshold: number;
|
|
3023
|
+
disabled: boolean;
|
|
3024
|
+
/** Set when the gesture has not travelled far enough for snapping yet. */
|
|
3025
|
+
disabledForTravel?: boolean;
|
|
3026
|
+
lockedAxis?: "x" | "y";
|
|
3027
|
+
}): SnapResult;
|
|
3028
|
+
/**
|
|
3029
|
+
* Full-length guide line spanning the composition: a vertical line (axis "x")
|
|
3030
|
+
* runs the composition's height at the snapped x position; a horizontal line
|
|
3031
|
+
* (axis "y") runs the composition's width. `composition` is the composition
|
|
3032
|
+
* rect in overlay space — guide positions are already overlay-space, so the
|
|
3033
|
+
* line must be offset by the composition's left/top (the canvas is usually
|
|
3034
|
+
* letterboxed inside the overlay).
|
|
3035
|
+
*/
|
|
3036
|
+
declare function resolveGuideLineRect(guide: SnapGuide, composition: Rect): Rect;
|
|
3037
|
+
declare function resolveEquidistanceGuides(input: {
|
|
3038
|
+
movingRect: Rect;
|
|
3039
|
+
targets: SnapTarget[];
|
|
3040
|
+
threshold: number;
|
|
3041
|
+
}): SpacingGuide[];
|
|
3042
|
+
|
|
3043
|
+
interface SnapContext {
|
|
3044
|
+
targets: SnapTarget[];
|
|
3045
|
+
compositionTarget: SnapTarget | null;
|
|
3046
|
+
gridEdges: {
|
|
3047
|
+
x: SnapEdge[];
|
|
3048
|
+
y: SnapEdge[];
|
|
3049
|
+
} | null;
|
|
3050
|
+
snapEnabled: boolean;
|
|
3051
|
+
}
|
|
3052
|
+
declare function collectSnapContext(input: {
|
|
3053
|
+
overlayEl: HTMLDivElement;
|
|
3054
|
+
iframe: HTMLIFrameElement;
|
|
3055
|
+
excludeElements: Set<HTMLElement>;
|
|
3056
|
+
}): SnapContext;
|
|
3057
|
+
|
|
3058
|
+
interface SnapGuidesState {
|
|
3059
|
+
guides: SnapGuide[];
|
|
3060
|
+
spacingGuides: SpacingGuide[];
|
|
3061
|
+
}
|
|
3062
|
+
interface SnapGuideOverlayProps {
|
|
3063
|
+
snapGuidesRef: RefObject<SnapGuidesState | null>;
|
|
3064
|
+
/** Composition rect in overlay space — guide lines span exactly this rect. */
|
|
3065
|
+
compositionLeft: number;
|
|
3066
|
+
compositionTop: number;
|
|
3067
|
+
compositionWidth: number;
|
|
3068
|
+
compositionHeight: number;
|
|
3069
|
+
}
|
|
3070
|
+
declare const SnapGuideOverlay: react.NamedExoticComponent<SnapGuideOverlayProps>;
|
|
2943
3071
|
|
|
2944
3072
|
interface ApplyDomSelectionOptions {
|
|
2945
3073
|
revealPanel?: boolean;
|
|
@@ -2974,6 +3102,38 @@ interface PreviewMouseDownOptions {
|
|
|
2974
3102
|
hoverSelection?: DomEditSelection | null;
|
|
2975
3103
|
}
|
|
2976
3104
|
|
|
3105
|
+
interface MoveCommitOptions {
|
|
3106
|
+
altKey?: boolean;
|
|
3107
|
+
plainTranslate?: boolean;
|
|
3108
|
+
}
|
|
3109
|
+
interface DomEditGroupPathOffsetCommit {
|
|
3110
|
+
selection: DomEditSelection;
|
|
3111
|
+
next: {
|
|
3112
|
+
x: number;
|
|
3113
|
+
y: number;
|
|
3114
|
+
};
|
|
3115
|
+
plainTranslate?: boolean;
|
|
3116
|
+
}
|
|
3117
|
+
|
|
3118
|
+
/**
|
|
3119
|
+
* Why a DOM edit commit did not change the file.
|
|
3120
|
+
*
|
|
3121
|
+
* `runDomEditCommit` resolves on persist failure by design (see its contract
|
|
3122
|
+
* above), so a caller cannot learn whether the write landed by awaiting it — a
|
|
3123
|
+
* failed persist and a successful one are indistinguishable. Capture and apply
|
|
3124
|
+
* bugs still reject. The human path does not need to ask about handled persist
|
|
3125
|
+
* failures, because `onError` already put a toast on screen. A programmatic
|
|
3126
|
+
* caller has no screen, so it has to be told.
|
|
3127
|
+
*/
|
|
3128
|
+
type DomEditCommitDeclineReason = "no-project" | "no-selection" | "geometry-property" | "styles-not-editable" | "not-text-editable" | "preview-stale" | "persist-failed";
|
|
3129
|
+
type DomEditCommitOutcome = {
|
|
3130
|
+
ok: true;
|
|
3131
|
+
persistence?: DomEditPersistOutcome;
|
|
3132
|
+
} | {
|
|
3133
|
+
ok: false;
|
|
3134
|
+
reason: DomEditCommitDeclineReason;
|
|
3135
|
+
};
|
|
3136
|
+
|
|
2977
3137
|
/**
|
|
2978
3138
|
* Which elements a delete acts on.
|
|
2979
3139
|
*
|
|
@@ -3056,9 +3216,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
|
|
|
3056
3216
|
handleDomPathOffsetCommit: (selection: DomEditSelection, next: {
|
|
3057
3217
|
x: number;
|
|
3058
3218
|
y: number;
|
|
3059
|
-
}, modifiers?:
|
|
3060
|
-
altKey?: boolean;
|
|
3061
|
-
}) => Promise<void>;
|
|
3219
|
+
}, modifiers?: MoveCommitOptions) => Promise<void>;
|
|
3062
3220
|
handleDomGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[]) => Promise<void>;
|
|
3063
3221
|
handleDomZIndexReorderCommit: (entries: Array<{
|
|
3064
3222
|
element: HTMLElement;
|
|
@@ -3076,9 +3234,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
|
|
|
3076
3234
|
x: number;
|
|
3077
3235
|
y: number;
|
|
3078
3236
|
}, restore?: () => void) => Promise<void>;
|
|
3079
|
-
handleDomRotationCommit: (selection: DomEditSelection, next:
|
|
3080
|
-
angle: number;
|
|
3081
|
-
}) => Promise<void>;
|
|
3237
|
+
handleDomRotationCommit: (selection: DomEditSelection, next: RotationCommit) => Promise<void>;
|
|
3082
3238
|
handleDomManualEditsReset: (selection: DomEditSelection) => Promise<void>;
|
|
3083
3239
|
handleDomTextCommit: (value: string, fieldKey?: string) => Promise<DomEditCommitOutcome>;
|
|
3084
3240
|
handleDomTextCommitForSelection: (selection: DomEditSelection, value: string, fieldKey?: string) => Promise<DomEditCommitOutcome>;
|
|
@@ -3244,141 +3400,6 @@ declare function PreviewReadOnlyProvider({ readOnly, reason, children, }: {
|
|
|
3244
3400
|
children: ReactNode;
|
|
3245
3401
|
}): react_jsx_runtime.JSX.Element;
|
|
3246
3402
|
|
|
3247
|
-
declare const SNAP_THRESHOLD_PX = 6;
|
|
3248
|
-
/** Whether a move of this size has travelled far enough for snapping to apply. */
|
|
3249
|
-
declare function snapEngagedForTravel(dx: number, dy: number): boolean;
|
|
3250
|
-
interface SnapEdge {
|
|
3251
|
-
position: number;
|
|
3252
|
-
source: "grid";
|
|
3253
|
-
id: string;
|
|
3254
|
-
}
|
|
3255
|
-
interface SnapTarget {
|
|
3256
|
-
left: number;
|
|
3257
|
-
top: number;
|
|
3258
|
-
right: number;
|
|
3259
|
-
bottom: number;
|
|
3260
|
-
centerX: number;
|
|
3261
|
-
centerY: number;
|
|
3262
|
-
id: string;
|
|
3263
|
-
}
|
|
3264
|
-
interface SnapGuide {
|
|
3265
|
-
axis: "x" | "y";
|
|
3266
|
-
position: number;
|
|
3267
|
-
/** Extent of the guide line (min of involved elements). */
|
|
3268
|
-
from: number;
|
|
3269
|
-
/** Extent of the guide line (max of involved elements). */
|
|
3270
|
-
to: number;
|
|
3271
|
-
}
|
|
3272
|
-
interface SpacingGuide {
|
|
3273
|
-
axis: "x" | "y";
|
|
3274
|
-
/** Position of the gap (start of gap). */
|
|
3275
|
-
position: number;
|
|
3276
|
-
/** Size of the gap in pixels. */
|
|
3277
|
-
size: number;
|
|
3278
|
-
/** Extent for rendering the indicator. */
|
|
3279
|
-
from: number;
|
|
3280
|
-
/** Extent for rendering the indicator. */
|
|
3281
|
-
to: number;
|
|
3282
|
-
}
|
|
3283
|
-
interface SnapResult {
|
|
3284
|
-
dx: number;
|
|
3285
|
-
dy: number;
|
|
3286
|
-
guides: SnapGuide[];
|
|
3287
|
-
spacingGuides: SpacingGuide[];
|
|
3288
|
-
}
|
|
3289
|
-
interface Rect {
|
|
3290
|
-
left: number;
|
|
3291
|
-
top: number;
|
|
3292
|
-
width: number;
|
|
3293
|
-
height: number;
|
|
3294
|
-
}
|
|
3295
|
-
/**
|
|
3296
|
-
* Convert overlay rects to snap targets with precomputed edges & centers.
|
|
3297
|
-
*/
|
|
3298
|
-
declare function extractSnapTargets(entries: Array<{
|
|
3299
|
-
rect: Rect;
|
|
3300
|
-
id: string;
|
|
3301
|
-
}>): SnapTarget[];
|
|
3302
|
-
/**
|
|
3303
|
-
* Create a snap target from the composition/overlay boundary.
|
|
3304
|
-
*/
|
|
3305
|
-
declare function buildCompositionSnapTarget(rect: Rect): SnapTarget;
|
|
3306
|
-
/**
|
|
3307
|
-
* Generate grid-line snap edges.
|
|
3308
|
-
* `gridSpacing` is in composition pixels; `scale` converts to overlay pixels.
|
|
3309
|
-
* X edges are vertical grid lines; Y edges are horizontal grid lines.
|
|
3310
|
-
*/
|
|
3311
|
-
declare function buildGridSnapEdges(compositionRect: Rect, gridSpacing: number, scale: number): {
|
|
3312
|
-
x: SnapEdge[];
|
|
3313
|
-
y: SnapEdge[];
|
|
3314
|
-
};
|
|
3315
|
-
declare function resolveSnapAdjustment(input: {
|
|
3316
|
-
movingRect: Rect;
|
|
3317
|
-
proposedDx: number;
|
|
3318
|
-
proposedDy: number;
|
|
3319
|
-
targets: SnapTarget[];
|
|
3320
|
-
gridEdges?: {
|
|
3321
|
-
x: SnapEdge[];
|
|
3322
|
-
y: SnapEdge[];
|
|
3323
|
-
};
|
|
3324
|
-
threshold: number;
|
|
3325
|
-
disabled: boolean;
|
|
3326
|
-
/** Set when the gesture has not travelled far enough for snapping yet. */
|
|
3327
|
-
disabledForTravel?: boolean;
|
|
3328
|
-
lockedAxis?: "x" | "y";
|
|
3329
|
-
}): SnapResult;
|
|
3330
|
-
/**
|
|
3331
|
-
* Full-length guide line spanning the composition: a vertical line (axis "x")
|
|
3332
|
-
* runs the composition's height at the snapped x position; a horizontal line
|
|
3333
|
-
* (axis "y") runs the composition's width. `composition` is the composition
|
|
3334
|
-
* rect in overlay space — guide positions are already overlay-space, so the
|
|
3335
|
-
* line must be offset by the composition's left/top (the canvas is usually
|
|
3336
|
-
* letterboxed inside the overlay).
|
|
3337
|
-
*/
|
|
3338
|
-
declare function resolveGuideLineRect(guide: SnapGuide, composition: Rect): Rect;
|
|
3339
|
-
declare function resolveEquidistanceGuides(input: {
|
|
3340
|
-
movingRect: Rect;
|
|
3341
|
-
targets: SnapTarget[];
|
|
3342
|
-
threshold: number;
|
|
3343
|
-
}): SpacingGuide[];
|
|
3344
|
-
|
|
3345
|
-
interface SnapContext {
|
|
3346
|
-
targets: SnapTarget[];
|
|
3347
|
-
compositionTarget: SnapTarget | null;
|
|
3348
|
-
gridEdges: {
|
|
3349
|
-
x: SnapEdge[];
|
|
3350
|
-
y: SnapEdge[];
|
|
3351
|
-
} | null;
|
|
3352
|
-
snapEnabled: boolean;
|
|
3353
|
-
}
|
|
3354
|
-
declare function collectSnapContext(input: {
|
|
3355
|
-
overlayEl: HTMLDivElement;
|
|
3356
|
-
iframe: HTMLIFrameElement;
|
|
3357
|
-
excludeElements: Set<HTMLElement>;
|
|
3358
|
-
}): SnapContext;
|
|
3359
|
-
|
|
3360
|
-
interface SnapGuidesState {
|
|
3361
|
-
guides: SnapGuide[];
|
|
3362
|
-
spacingGuides: SpacingGuide[];
|
|
3363
|
-
}
|
|
3364
|
-
interface SnapGuideOverlayProps {
|
|
3365
|
-
snapGuidesRef: RefObject<SnapGuidesState | null>;
|
|
3366
|
-
/** Composition rect in overlay space — guide lines span exactly this rect. */
|
|
3367
|
-
compositionLeft: number;
|
|
3368
|
-
compositionTop: number;
|
|
3369
|
-
compositionWidth: number;
|
|
3370
|
-
compositionHeight: number;
|
|
3371
|
-
}
|
|
3372
|
-
declare const SnapGuideOverlay: react.NamedExoticComponent<SnapGuideOverlayProps>;
|
|
3373
|
-
|
|
3374
|
-
interface DomEditGroupPathOffsetCommit {
|
|
3375
|
-
selection: DomEditSelection;
|
|
3376
|
-
next: {
|
|
3377
|
-
x: number;
|
|
3378
|
-
y: number;
|
|
3379
|
-
};
|
|
3380
|
-
}
|
|
3381
|
-
|
|
3382
3403
|
/**
|
|
3383
3404
|
* Pure z-order helpers for the canvas right-click context menu.
|
|
3384
3405
|
*
|
|
@@ -3455,9 +3476,7 @@ interface DomEditOverlayProps {
|
|
|
3455
3476
|
onPathOffsetCommit: (selection: DomEditSelection, next: {
|
|
3456
3477
|
x: number;
|
|
3457
3478
|
y: number;
|
|
3458
|
-
}, modifiers?:
|
|
3459
|
-
altKey?: boolean;
|
|
3460
|
-
}) => Promise<unknown> | void;
|
|
3479
|
+
}, modifiers?: MoveCommitOptions) => Promise<unknown> | void;
|
|
3461
3480
|
onGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[]) => Promise<unknown> | void;
|
|
3462
3481
|
onBoxSizeCommit: (selection: DomEditSelection, next: {
|
|
3463
3482
|
width: number;
|
|
@@ -3466,9 +3485,7 @@ interface DomEditOverlayProps {
|
|
|
3466
3485
|
x: number;
|
|
3467
3486
|
y: number;
|
|
3468
3487
|
}, restore?: () => void) => Promise<unknown> | void;
|
|
3469
|
-
onRotationCommit: (selection: DomEditSelection, next:
|
|
3470
|
-
angle: number;
|
|
3471
|
-
}) => Promise<unknown> | void;
|
|
3488
|
+
onRotationCommit: (selection: DomEditSelection, next: RotationCommit) => Promise<unknown> | void;
|
|
3472
3489
|
onStyleCommit?: (property: string, value: string) => Promise<unknown> | void;
|
|
3473
3490
|
recordingState?: GestureRecordingState;
|
|
3474
3491
|
onToggleRecording?: () => void;
|
|
@@ -3552,9 +3569,7 @@ interface DomGeometryCommits {
|
|
|
3552
3569
|
commitPathOffset: (selection: DomEditSelection, next: {
|
|
3553
3570
|
x: number;
|
|
3554
3571
|
y: number;
|
|
3555
|
-
}, modifiers?:
|
|
3556
|
-
altKey?: boolean;
|
|
3557
|
-
}) => Promise<DomEditCommitOutcome>;
|
|
3572
|
+
}, modifiers?: MoveCommitOptions) => Promise<DomEditCommitOutcome>;
|
|
3558
3573
|
commitGroupPathOffset: (updates: DomEditGroupPathOffsetCommit[]) => Promise<DomEditCommitOutcome>;
|
|
3559
3574
|
commitBoxSize: (selection: DomEditSelection, next: {
|
|
3560
3575
|
width: number;
|
|
@@ -3563,9 +3578,7 @@ interface DomGeometryCommits {
|
|
|
3563
3578
|
x: number;
|
|
3564
3579
|
y: number;
|
|
3565
3580
|
}, restore?: () => void) => Promise<DomEditCommitOutcome>;
|
|
3566
|
-
commitRotation: (selection: DomEditSelection, next:
|
|
3567
|
-
angle: number;
|
|
3568
|
-
}) => Promise<DomEditCommitOutcome>;
|
|
3581
|
+
commitRotation: (selection: DomEditSelection, next: RotationCommit) => Promise<DomEditCommitOutcome>;
|
|
3569
3582
|
waitForPendingSaves: () => Promise<void>;
|
|
3570
3583
|
}
|
|
3571
3584
|
/**
|
package/dist/studio/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
6
6
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
7
7
|
<title>HyperFrames Studio</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-De2aO4XM.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-CQN3M56N.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|