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.
Files changed (80) hide show
  1. package/dist/{add-7YNDDJZM.js → add-KXAWOEZJ.js} +5 -5
  2. package/dist/{asset-QQGUOKN7.js → asset-QAIWASUI.js} +2 -2
  3. package/dist/{auth-ITO2U4DF.js → auth-2FQGBN5W.js} +1 -1
  4. package/dist/{autoUpdate-YA7T35TP.js → autoUpdate-UXMPQYUO.js} +2 -2
  5. package/dist/{backgroundChecks-C6JEBKPE.js → backgroundChecks-RPBCDLBU.js} +3 -3
  6. package/dist/backgroundChecksWorker.js +3 -3
  7. package/dist/{beats-P6S6UEOR.js → beats-F4PZIT7L.js} +4 -4
  8. package/dist/{benchmark-JIZAHWG4.js → benchmark-AIGZ6NZT.js} +5 -5
  9. package/dist/{browser-GFQ45FKN.js → browser-AQTVWA2I.js} +3 -3
  10. package/dist/{catalog-RPJ3NWVH.js → catalog-LVB5GLIS.js} +5 -5
  11. package/dist/{check-BJU7NGBL.js → check-ZMENBYIU.js} +9 -9
  12. package/dist/{checkBrowser-OXJCECZI.js → checkBrowser-26NJ47DY.js} +7 -7
  13. package/dist/{chunk-3XNY2WK4.js → chunk-2M6YQAMV.js} +1 -1
  14. package/dist/{chunk-IHMR2L3L.js → chunk-4V63UZIV.js} +1 -1
  15. package/dist/{chunk-E3JCMLAF.js → chunk-6CPVF7DM.js} +1 -1
  16. package/dist/{chunk-PQL3VANN.js → chunk-IEBXD6Y6.js} +2 -2
  17. package/dist/{chunk-J5MQ3GPK.js → chunk-JUDUP2IC.js} +2 -2
  18. package/dist/{chunk-2DHH45NV.js → chunk-MZWGD4IR.js} +1 -1
  19. package/dist/{chunk-P77GUHVY.js → chunk-PRWBZGQ5.js} +1 -1
  20. package/dist/{chunk-A4UUULN3.js → chunk-RUQUOWIV.js} +2 -2
  21. package/dist/{chunk-A5QSC7DM.js → chunk-S4EZWGRD.js} +2 -2
  22. package/dist/{chunk-CDLT2S5Y.js → chunk-SA4HX7OJ.js} +2 -2
  23. package/dist/{chunk-SFXDX5F6.js → chunk-TKZAN2AY.js} +2 -2
  24. package/dist/{chunk-ASSVFGUL.js → chunk-TVKKKJQT.js} +1 -1
  25. package/dist/{chunk-VQOZ3JO6.js → chunk-VAFKQ546.js} +1 -1
  26. package/dist/{chunk-G4WCIV45.js → chunk-XOBW5TFB.js} +2 -2
  27. package/dist/{chunk-2QRIIMGS.js → chunk-ZASIQRKO.js} +2 -2
  28. package/dist/{clean-FPXQNQQ2.js → clean-4NIBDW2Y.js} +3 -3
  29. package/dist/cli.js +44 -44
  30. package/dist/{cloud-BFMMRGJL.js → cloud-XONUMPVD.js} +4 -4
  31. package/dist/{compare-IKBMRXHF.js → compare-PLEGE2AB.js} +4 -4
  32. package/dist/{component-RN32W42O.js → component-YODSQLKS.js} +3 -3
  33. package/dist/{compositions-O2WKG7BC.js → compositions-ZYGETZWE.js} +5 -5
  34. package/dist/{delete-EF2RARRV.js → delete-2YR5ZDZI.js} +2 -2
  35. package/dist/{doctor-L6CV6YXV.js → doctor-WS4BOIAN.js} +3 -3
  36. package/dist/{events-M76TNXYH.js → events-AWJJTVYV.js} +2 -2
  37. package/dist/{events-ZCO6M2G6.js → events-QEEFQ76R.js} +3 -3
  38. package/dist/{feedback-2ACKQBUF.js → feedback-32I2DS3H.js} +4 -4
  39. package/dist/{figma-KZC2I2K7.js → figma-THXKL7C3.js} +3 -3
  40. package/dist/fontLocalizeCli.js +1 -1
  41. package/dist/{get-HSREOXQC.js → get-2RK36VX3.js} +2 -2
  42. package/dist/{grade-compare-HN5IRGL5.js → grade-compare-4R5XDPJU.js} +4 -4
  43. package/dist/{help-ACSFM5ZX.js → help-YKZ5HPQO.js} +1 -1
  44. package/dist/{history-THD5S55X.js → history-2IPTBA55.js} +5 -5
  45. package/dist/hyperframes-player.global.js +1 -1
  46. package/dist/{info-JGRSYW7U.js → info-H2ZIL5YN.js} +5 -5
  47. package/dist/{init-WULQFAB7.js → init-2ZEQAKSE.js} +6 -6
  48. package/dist/{inspect-QPT6PESN.js → inspect-FQEXVZUP.js} +6 -6
  49. package/dist/{keyframes-MD5JHEQG.js → keyframes-GHCATB4L.js} +5 -5
  50. package/dist/{layout-SAA5WUEQ.js → layout-JUAYXDNX.js} +6 -6
  51. package/dist/{lint-3TPZORDF.js → lint-45XP4TUK.js} +6 -6
  52. package/dist/{list-AURXVOVG.js → list-CKALQL3O.js} +2 -2
  53. package/dist/{login-GTLUEY2W.js → login-QQDJUIGO.js} +4 -4
  54. package/dist/{media-treatment-5S22MP33.js → media-treatment-CBQ2DANK.js} +5 -5
  55. package/dist/{normalize-audio-JSYJFSDX.js → normalize-audio-OVVPWEUL.js} +4 -4
  56. package/dist/{play-HVM27UXW.js → play-YIHX3DZX.js} +4 -4
  57. package/dist/{present-UKH4JT6K.js → present-FWJNW3Z3.js} +4 -4
  58. package/dist/{preview-IJ27BKQK.js → preview-TAICDDJL.js} +5 -5
  59. package/dist/{render-Q4IVNLDA.js → render-LHTKQD2G.js} +5 -5
  60. package/dist/{render-7QYVDEZ3.js → render-TSOLZGAK.js} +5 -5
  61. package/dist/{skills-2UKBANDP.js → skills-4M2LBGYL.js} +5 -5
  62. package/dist/{skillsUpdateCheck-Z7D7NR3G.js → skillsUpdateCheck-WDI32JU4.js} +3 -3
  63. package/dist/{snapshot-CJCGJCK2.js → snapshot-33SGYIF6.js} +4 -4
  64. package/dist/studio/assets/{hyperframes-player-DG795Hwu.js → hyperframes-player-DAoaajuM.js} +1 -1
  65. package/dist/studio/assets/{index-BiEtDkae.js → index-BDK4rTMb.js} +1 -1
  66. package/dist/studio/assets/{index-BPJRf2X9.js → index-De2aO4XM.js} +178 -178
  67. package/dist/studio/assets/{index-DuCZ3pQw.js → index-WV9LroAD.js} +1 -1
  68. package/dist/studio/index.d.ts +181 -168
  69. package/dist/studio/index.html +1 -1
  70. package/dist/studio/index.js +428 -305
  71. package/dist/studio/index.js.map +1 -1
  72. package/dist/{studioServer-DBBVNNRM.js → studioServer-CTDEYU7Q.js} +4 -4
  73. package/dist/{telemetry-36QQ3MV6.js → telemetry-7P3TXR5K.js} +3 -3
  74. package/dist/{timeline-JFW5OBO4.js → timeline-WOBSPT6V.js} +5 -5
  75. package/dist/{tokens-A3UY3JEB.js → tokens-2A4LMJYJ.js} +2 -2
  76. package/dist/{transcribe-C3KOJRCZ.js → transcribe-7VKKNU5N.js} +3 -3
  77. package/dist/{updateCheck-CM5G6C4C.js → updateCheck-5UKKIEDG.js} +2 -2
  78. package/dist/{upgrade-BHLYQC6T.js → upgrade-QZIZVUIX.js} +2 -2
  79. package/dist/{validate-SKGTQ6MA.js → validate-D2YZV5KV.js} +6 -6
  80. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import{n as Qi}from"./index-BPJRf2X9.js";/*!
1
+ import{n as Qi}from"./index-De2aO4XM.js";/*!
2
2
  * Copyright (c) 2026-present, Vanilagy and contributors
3
3
  *
4
4
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -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
- * Why a DOM edit commit did not change the file.
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
- type DomEditCommitDeclineReason = "no-project" | "no-selection" | "geometry-property" | "styles-not-editable" | "not-text-editable" | "preview-stale" | "persist-failed";
2936
- type DomEditCommitOutcome = {
2937
- ok: true;
2938
- persistence?: DomEditPersistOutcome;
2939
- } | {
2940
- ok: false;
2941
- reason: DomEditCommitDeclineReason;
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
  /**
@@ -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-BPJRf2X9.js"></script>
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>