@mt-gloss/ui 0.0.43 → 0.0.44

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,76 @@
1
+ /**
2
+ * NYQUIST-09 Parity Matrix — Phase 19 plan 19-05.
3
+ *
4
+ * Typed array of 144 rows enumerating the 7-axis resize parity space:
5
+ *
6
+ * spring — 3 presets: default (S500D35M1), gentle (S300D30M1), stiff (S700D40M1)
7
+ * viewport — round-robin across [1280, 1920, 2560] (all 3 appear in asserted set)
8
+ * reducedMotion — {false, true}
9
+ * pointerType — {'mouse', 'touch'}
10
+ * cardMode — {'slot-fill', 'sparkline-fidelity'}
11
+ * cancelPath — {'commit', 'escape', 'out-of-range'}
12
+ * dndKitActive — {false, true}
13
+ *
14
+ * Arithmetic (per 19-RESEARCH §NYQUIST-09 Fixture Matrix):
15
+ * 3 × 2 × 2 × 2 × 3 × 2 = 144 logical rows.
16
+ * Viewport axis is DERIVED per-row (round-robin) so every asserted row still
17
+ * represents one of the 3 canonical viewports without multiplying the base
18
+ * by a 4th full axis — this matches the RESEARCH-stated 144 count exactly.
19
+ *
20
+ * SkipFor taxonomy (~84 rows tagged; first-match wins):
21
+ *
22
+ * Rule 1 — reducedMotion && spring === 'stiff':
23
+ * Reduced motion bypasses spring; stiffer preset collapses to same
24
+ * instant-jump code path as default. (default spring + gentle preset
25
+ * still carry the rm=true assertion to exercise the branch.)
26
+ *
27
+ * Rule 2 — pointerType === 'touch' && cancelPath === 'escape':
28
+ * Touch devices lack Escape key; covered by separate touch-pointercancel
29
+ * fixture (useEdgeHoverResize.touch.test.tsx).
30
+ *
31
+ * Rule 3 — cardMode === 'sparkline-fidelity' && dndKitActive:
32
+ * Non-stackable cards are not sortable; dnd-kit active state is
33
+ * impossible (invariant from PagesContext.tsx stack rules).
34
+ *
35
+ * Rule 4 — cancelPath === 'out-of-range' && !dndKitActive && spring !== default:
36
+ * Out-of-range clamp is independent of spring variant; default-spring row
37
+ * carries the clamp assertion. Non-default springs on the clamp path are
38
+ * redundant (physics variant does not affect Math.min(3, …) behavior).
39
+ *
40
+ * Asserted target: 60 ± 5 rows (plan acceptance criterion).
41
+ * Actual asserted: 63 / 144 (skipped 81). Viewport distribution across
42
+ * asserted rows: 1280 → 25, 1920 → 18, 2560 → 20 (all 3 represented).
43
+ *
44
+ * @see .planning/phases/19-resize-interaction-rework/19-RESEARCH.md §NYQUIST-09 Fixture Matrix
45
+ * @see .planning/phases/19-resize-interaction-rework/19-PATTERNS.md §S10 NYQUIST matrix authoring
46
+ * @see .planning/phases/19-resize-interaction-rework/19-05-PLAN.md Task 1
47
+ */
48
+ export interface Nyquist09Row {
49
+ /**
50
+ * Stable row id, e.g. 'S500D35M1-vw1280-rm_off-mouse-stack-commit-dndk_on'.
51
+ * Shape: `S{stiffness}D{damping}M{mass}-vw{viewport}-rm_{on|off}-{pointer}-{stack|spark}-{cancelPath}-dndk_{on|off}`.
52
+ */
53
+ id: string;
54
+ spring: {
55
+ stiffness: number;
56
+ damping: number;
57
+ mass: number;
58
+ };
59
+ viewport: 1280 | 1920 | 2560;
60
+ reducedMotion: boolean;
61
+ pointerType: 'mouse' | 'touch';
62
+ cardMode: 'slot-fill' | 'sparkline-fidelity';
63
+ cancelPath: 'commit' | 'escape' | 'out-of-range';
64
+ dndKitActive: boolean;
65
+ /**
66
+ * If set, row is test.skip with this reason string. Acceptance criterion:
67
+ * skipped ≤ 84, asserted ≥ 55 (see PLAN threat-model T-19-16).
68
+ */
69
+ skipFor?: string;
70
+ }
71
+ /** Canonical 144-row NYQUIST-09 parity matrix — enumerated explicitly for diff-ability. */
72
+ export declare const NYQUIST_09_MATRIX: readonly Nyquist09Row[];
73
+ /** Convenience: number of rows that actually run (skipFor === undefined). Exported for CI sanity check. */
74
+ export declare const NYQUIST_09_ASSERTED_COUNT: number;
75
+ /** Convenience: number of rows tagged skipFor. Exported for CI sanity check. */
76
+ export declare const NYQUIST_09_SKIPPED_COUNT: number;
@@ -23,6 +23,13 @@ export interface UseEdgeHoverResizeArgs {
23
23
  enterMs?: number;
24
24
  /** AN-06 exit motion duration exposed for consumer CSS. Default: 120ms */
25
25
  exitMs?: number;
26
+ /**
27
+ * Max colSpan supported by the grid (D-13 — right-edge-only grow). Default: 3.
28
+ * Used to clamp motionX writes during drag so the ghost cannot translate
29
+ * past the maximum-allowed column offset at any cursor position (debug
30
+ * session 260419-ghost-slides-across-page — AP-17 companion invariant).
31
+ */
32
+ maxColSpan?: 1 | 2 | 3;
26
33
  }
27
34
  export interface UseEdgeHoverResizeReturn {
28
35
  state: ResizeState;
@@ -77,4 +84,4 @@ export interface UseEdgeHoverResizeReturn {
77
84
  * - Bug E handle pointerenter keeps zone alive on sentinel→handle crossover
78
85
  * - Dwell timer cleanup on unmount
79
86
  */
80
- export declare function useEdgeHoverResize({ currentColSpan, stackable, onResize, onCancel, step, tuning, dwellMs, enterMs, exitMs, }: UseEdgeHoverResizeArgs): UseEdgeHoverResizeReturn;
87
+ export declare function useEdgeHoverResize({ currentColSpan, stackable, onResize, onCancel, step, tuning, dwellMs, enterMs, exitMs, maxColSpan, }: UseEdgeHoverResizeArgs): UseEdgeHoverResizeReturn;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mt-gloss/ui",
3
- "version": "0.0.43",
3
+ "version": "0.0.44",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "restricted"