@activecollab/components 2.0.372 → 2.0.373

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 (46) hide show
  1. package/dist/cjs/components/StackedCard/StackedCard.js +103 -19
  2. package/dist/cjs/components/StackedCard/StackedCard.js.map +1 -1
  3. package/dist/cjs/components/StackedCard/Styles.js +22 -17
  4. package/dist/cjs/components/StackedCard/Styles.js.map +1 -1
  5. package/dist/cjs/components/StackedCard/index.js +22 -0
  6. package/dist/cjs/components/StackedCard/index.js.map +1 -1
  7. package/dist/cjs/components/StackedCard/resizePolicy.js +238 -0
  8. package/dist/cjs/components/StackedCard/resizePolicy.js.map +1 -0
  9. package/dist/cjs/components/StackedCard/resizePolicy.test.js +474 -0
  10. package/dist/cjs/components/StackedCard/resizePolicy.test.js.map +1 -0
  11. package/dist/cjs/components/StackedCard/useStackedCardResize.js +145 -0
  12. package/dist/cjs/components/StackedCard/useStackedCardResize.js.map +1 -0
  13. package/dist/esm/components/StackedCard/StackedCard.d.ts +44 -3
  14. package/dist/esm/components/StackedCard/StackedCard.d.ts.map +1 -1
  15. package/dist/esm/components/StackedCard/StackedCard.js +102 -19
  16. package/dist/esm/components/StackedCard/StackedCard.js.map +1 -1
  17. package/dist/esm/components/StackedCard/Styles.d.ts +4 -1
  18. package/dist/esm/components/StackedCard/Styles.d.ts.map +1 -1
  19. package/dist/esm/components/StackedCard/Styles.js +22 -17
  20. package/dist/esm/components/StackedCard/Styles.js.map +1 -1
  21. package/dist/esm/components/StackedCard/index.d.ts +2 -0
  22. package/dist/esm/components/StackedCard/index.d.ts.map +1 -1
  23. package/dist/esm/components/StackedCard/index.js +2 -0
  24. package/dist/esm/components/StackedCard/index.js.map +1 -1
  25. package/dist/esm/components/StackedCard/resizePolicy.d.ts +111 -0
  26. package/dist/esm/components/StackedCard/resizePolicy.d.ts.map +1 -0
  27. package/dist/esm/{presentation/stackedCard → components/StackedCard}/resizePolicy.js +93 -48
  28. package/dist/esm/components/StackedCard/resizePolicy.js.map +1 -0
  29. package/dist/esm/components/StackedCard/resizePolicy.test.d.ts +2 -0
  30. package/dist/esm/components/StackedCard/resizePolicy.test.d.ts.map +1 -0
  31. package/dist/esm/components/StackedCard/resizePolicy.test.js +470 -0
  32. package/dist/esm/components/StackedCard/resizePolicy.test.js.map +1 -0
  33. package/dist/esm/components/StackedCard/useStackedCardResize.d.ts +62 -0
  34. package/dist/esm/components/StackedCard/useStackedCardResize.d.ts.map +1 -0
  35. package/dist/esm/components/StackedCard/useStackedCardResize.js +137 -0
  36. package/dist/esm/components/StackedCard/useStackedCardResize.js.map +1 -0
  37. package/dist/index.js +500 -36
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.min.js +1 -1
  40. package/dist/index.min.js.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/cjs/presentation/stackedCard/resizePolicy.js +0 -183
  43. package/dist/cjs/presentation/stackedCard/resizePolicy.js.map +0 -1
  44. package/dist/esm/presentation/stackedCard/resizePolicy.d.ts +0 -97
  45. package/dist/esm/presentation/stackedCard/resizePolicy.d.ts.map +0 -1
  46. package/dist/esm/presentation/stackedCard/resizePolicy.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ import { useCallback, useRef } from "react";
2
+ import { applyResize, isResizeKey, keyboardResize, makeStart, measurePercent } from "./resizePolicy";
3
+
4
+ /**
5
+ * The one place pointer and keyboard input meet the resize policy.
6
+ *
7
+ * `StackedCard`'s built-in grip reports raw deltas and knows no policy — enough
8
+ * for a host that just tracks a width. This hook is the full contract: it
9
+ * captures the gesture start, funnels both inputs through the pure policy in
10
+ * `resizePolicy.ts`, streams preview events and fires exactly ONE commit per
11
+ * gesture. It returns the props to spread on the grip, including the live
12
+ * separator ARIA.
13
+ *
14
+ * Preview versus commit (spec §7e): the continuous stream is live feedback
15
+ * only. A host creates an undo entry on the COMMIT, never on a preview — and a
16
+ * gesture that never changed the size commits nothing at all, so a bare click
17
+ * on the grip is not a change.
18
+ *
19
+ * The hook never touches the card's content: the intrinsic minimum is read
20
+ * through `contentMin`, which may be a getter so a card that measures its own
21
+ * footer can answer at the moment it is asked.
22
+ */
23
+
24
+ /** The props to spread on the grip — `StackedCard`'s `resizeHandleProps`. */
25
+
26
+ const sameSize = (a, b) => a.w === b.w && a.h === b.h;
27
+ export const useStackedCardResize = _ref => {
28
+ let size = _ref.size,
29
+ policy = _ref.policy,
30
+ cardId = _ref.cardId,
31
+ contentMin = _ref.contentMin,
32
+ _ref$axis = _ref.axis,
33
+ axis = _ref$axis === void 0 ? "both" : _ref$axis,
34
+ _ref$scale = _ref.scale,
35
+ scale = _ref$scale === void 0 ? 1 : _ref$scale,
36
+ _ref$label = _ref.label,
37
+ label = _ref$label === void 0 ? "Resize card" : _ref$label,
38
+ onResize = _ref.onResize,
39
+ onResizeCommit = _ref.onResizeCommit;
40
+ // The pointer gesture's anchor: the size + content-min captured on pointer
41
+ // down, plus the pointer origin the delta is measured from.
42
+ const pointerStart = useRef(null);
43
+ // Mirrors the latest emitted size so pointer-up / key-up can commit exactly
44
+ // what preview last showed, without a stale closure.
45
+ const latest = useRef(size);
46
+ latest.current = size;
47
+ // Whether this gesture actually moved the card. A bare click, or a Home on an
48
+ // axis with no floor, leaves it false and commits nothing.
49
+ const dirty = useRef(false);
50
+
51
+ // Read through refs so the handlers below can stay stable across renders
52
+ // while still seeing the current policy, axis and zoom.
53
+ const policyRef = useRef(policy);
54
+ policyRef.current = policy;
55
+ const axisRef = useRef(axis);
56
+ axisRef.current = axis;
57
+ const scaleRef = useRef(scale);
58
+ scaleRef.current = scale;
59
+ const contentMinRef = useRef(contentMin);
60
+ contentMinRef.current = contentMin;
61
+ const readContentMin = useCallback(() => {
62
+ const source = contentMinRef.current;
63
+ return typeof source === "function" ? source() : source;
64
+ }, []);
65
+ const emitPreview = useCallback((next, source) => {
66
+ // Nothing changed — not a preview, and not something to commit later.
67
+ if (sameSize(next, latest.current)) return;
68
+ latest.current = next;
69
+ dirty.current = true;
70
+ onResize(next, source);
71
+ }, [onResize]);
72
+ const handlePointerDown = useCallback(e => {
73
+ pointerStart.current = {
74
+ start: makeStart(latest.current, readContentMin()),
75
+ x: e.clientX,
76
+ y: e.clientY
77
+ };
78
+ dirty.current = false;
79
+ e.target.setPointerCapture == null || e.target.setPointerCapture(e.pointerId);
80
+ e.preventDefault();
81
+ }, [readContentMin]);
82
+ const handlePointerMove = useCallback(e => {
83
+ const ps = pointerStart.current;
84
+ if (!ps) return;
85
+ const z = scaleRef.current || 1;
86
+ const next = applyResize(ps.start, {
87
+ dx: (e.clientX - ps.x) / z,
88
+ dy: (e.clientY - ps.y) / z
89
+ }, policyRef.current,
90
+ // Shift held during a free-form drag = temporary proportional lock.
91
+ {
92
+ constrain: e.shiftKey,
93
+ axis: axisRef.current
94
+ });
95
+ emitPreview(next, "pointer");
96
+ }, [emitPreview]);
97
+ const endPointer = useCallback(() => {
98
+ if (!pointerStart.current) return;
99
+ pointerStart.current = null;
100
+ if (dirty.current) onResizeCommit(latest.current, "pointer");
101
+ dirty.current = false;
102
+ }, [onResizeCommit]);
103
+ const handleKeyDown = useCallback(e => {
104
+ const next = keyboardResize(e.key, latest.current, policyRef.current, readContentMin(), {
105
+ shiftKey: e.shiftKey,
106
+ axis: axisRef.current
107
+ });
108
+ if (!next) return;
109
+ // The key is ours even when it resolves to no movement (already pinned at
110
+ // a bound), so the browser must not also scroll the surface.
111
+ e.preventDefault();
112
+ emitPreview(next, "keyboard");
113
+ }, [emitPreview, readContentMin]);
114
+ const handleKeyUp = useCallback(e => {
115
+ if (!isResizeKey(e.key)) return;
116
+ // The gesture end for the keyboard is the key release: one commit per
117
+ // hold, mirroring pointer-up after a stream of moves.
118
+ if (dirty.current) onResizeCommit(latest.current, "keyboard");
119
+ dirty.current = false;
120
+ }, [onResizeCommit]);
121
+ return {
122
+ role: "separator",
123
+ tabIndex: 0,
124
+ "aria-label": label,
125
+ "aria-controls": cardId,
126
+ "aria-valuemin": 0,
127
+ "aria-valuemax": 100,
128
+ "aria-valuenow": measurePercent(size, policy, readContentMin()),
129
+ onPointerDown: handlePointerDown,
130
+ onPointerMove: handlePointerMove,
131
+ onPointerUp: endPointer,
132
+ onLostPointerCapture: endPointer,
133
+ onKeyDown: handleKeyDown,
134
+ onKeyUp: handleKeyUp
135
+ };
136
+ };
137
+ //# sourceMappingURL=useStackedCardResize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStackedCardResize.js","names":["useCallback","useRef","applyResize","isResizeKey","keyboardResize","makeStart","measurePercent","sameSize","a","b","w","h","useStackedCardResize","_ref","size","policy","cardId","contentMin","_ref$axis","axis","_ref$scale","scale","_ref$label","label","onResize","onResizeCommit","pointerStart","latest","current","dirty","policyRef","axisRef","scaleRef","contentMinRef","readContentMin","source","emitPreview","next","handlePointerDown","e","start","x","clientX","y","clientY","target","setPointerCapture","pointerId","preventDefault","handlePointerMove","ps","z","dx","dy","constrain","shiftKey","endPointer","handleKeyDown","key","handleKeyUp","role","tabIndex","onPointerDown","onPointerMove","onPointerUp","onLostPointerCapture","onKeyDown","onKeyUp"],"sources":["../../../../src/components/StackedCard/useStackedCardResize.ts"],"sourcesContent":["import React, { useCallback, useRef } from \"react\";\n\nimport {\n StackedCardContentMin,\n StackedCardResizeAxis,\n StackedCardResizePolicy,\n StackedCardResizeSource,\n StackedCardResizeStart,\n StackedCardSize,\n applyResize,\n isResizeKey,\n keyboardResize,\n makeStart,\n measurePercent,\n} from \"./resizePolicy\";\n\n/**\n * The one place pointer and keyboard input meet the resize policy.\n *\n * `StackedCard`'s built-in grip reports raw deltas and knows no policy — enough\n * for a host that just tracks a width. This hook is the full contract: it\n * captures the gesture start, funnels both inputs through the pure policy in\n * `resizePolicy.ts`, streams preview events and fires exactly ONE commit per\n * gesture. It returns the props to spread on the grip, including the live\n * separator ARIA.\n *\n * Preview versus commit (spec §7e): the continuous stream is live feedback\n * only. A host creates an undo entry on the COMMIT, never on a preview — and a\n * gesture that never changed the size commits nothing at all, so a bare click\n * on the grip is not a change.\n *\n * The hook never touches the card's content: the intrinsic minimum is read\n * through `contentMin`, which may be a getter so a card that measures its own\n * footer can answer at the moment it is asked.\n */\n\nexport interface UseStackedCardResizeArgs {\n /** The card's current size, owned by the host. */\n size: StackedCardSize;\n policy: StackedCardResizePolicy;\n /** Id of the element the grip resizes — becomes `aria-controls`. */\n cardId: string;\n /** The card's intrinsic minimum; a getter is read at the moment it is needed. */\n contentMin: StackedCardContentMin | (() => StackedCardContentMin);\n /** `width` locks the vertical axis (auto-height cards). Defaults to `both`. */\n axis?: StackedCardResizeAxis;\n /**\n * Pointer deltas are divided by this before they reach the policy, so a grip\n * inside a zoomed canvas tracks the cursor exactly. Keyboard nudges are\n * already in the host's units and pass straight through. Defaults to 1.\n */\n scale?: number;\n /** Accessible name for the grip. Defaults to \"Resize card\". */\n label?: string;\n /** Live feedback during the gesture. Never an undoable change. */\n onResize: (next: StackedCardSize, source: StackedCardResizeSource) => void;\n /** Fires once per gesture, and only if the size actually changed. */\n onResizeCommit: (\n final: StackedCardSize,\n source: StackedCardResizeSource\n ) => void;\n}\n\n/** The props to spread on the grip — `StackedCard`'s `resizeHandleProps`. */\nexport interface StackedCardResizeHandleProps {\n role: \"separator\";\n tabIndex: 0;\n \"aria-label\": string;\n \"aria-controls\": string;\n \"aria-valuemin\": number;\n \"aria-valuemax\": number;\n \"aria-valuenow\": number;\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerMove: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n onLostPointerCapture: (e: React.PointerEvent) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n onKeyUp: (e: React.KeyboardEvent) => void;\n}\n\nconst sameSize = (a: StackedCardSize, b: StackedCardSize): boolean =>\n a.w === b.w && a.h === b.h;\n\nexport const useStackedCardResize = ({\n size,\n policy,\n cardId,\n contentMin,\n axis = \"both\",\n scale = 1,\n label = \"Resize card\",\n onResize,\n onResizeCommit,\n}: UseStackedCardResizeArgs): StackedCardResizeHandleProps => {\n // The pointer gesture's anchor: the size + content-min captured on pointer\n // down, plus the pointer origin the delta is measured from.\n const pointerStart = useRef<{\n start: StackedCardResizeStart;\n x: number;\n y: number;\n } | null>(null);\n // Mirrors the latest emitted size so pointer-up / key-up can commit exactly\n // what preview last showed, without a stale closure.\n const latest = useRef<StackedCardSize>(size);\n latest.current = size;\n // Whether this gesture actually moved the card. A bare click, or a Home on an\n // axis with no floor, leaves it false and commits nothing.\n const dirty = useRef(false);\n\n // Read through refs so the handlers below can stay stable across renders\n // while still seeing the current policy, axis and zoom.\n const policyRef = useRef(policy);\n policyRef.current = policy;\n const axisRef = useRef(axis);\n axisRef.current = axis;\n const scaleRef = useRef(scale);\n scaleRef.current = scale;\n const contentMinRef = useRef(contentMin);\n contentMinRef.current = contentMin;\n\n const readContentMin = useCallback((): StackedCardContentMin => {\n const source = contentMinRef.current;\n return typeof source === \"function\" ? source() : source;\n }, []);\n\n const emitPreview = useCallback(\n (next: StackedCardSize, source: StackedCardResizeSource) => {\n // Nothing changed — not a preview, and not something to commit later.\n if (sameSize(next, latest.current)) return;\n latest.current = next;\n dirty.current = true;\n onResize(next, source);\n },\n [onResize]\n );\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n pointerStart.current = {\n start: makeStart(latest.current, readContentMin()),\n x: e.clientX,\n y: e.clientY,\n };\n dirty.current = false;\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n e.preventDefault();\n },\n [readContentMin]\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n const ps = pointerStart.current;\n if (!ps) return;\n const z = scaleRef.current || 1;\n const next = applyResize(\n ps.start,\n { dx: (e.clientX - ps.x) / z, dy: (e.clientY - ps.y) / z },\n policyRef.current,\n // Shift held during a free-form drag = temporary proportional lock.\n { constrain: e.shiftKey, axis: axisRef.current }\n );\n emitPreview(next, \"pointer\");\n },\n [emitPreview]\n );\n\n const endPointer = useCallback(() => {\n if (!pointerStart.current) return;\n pointerStart.current = null;\n if (dirty.current) onResizeCommit(latest.current, \"pointer\");\n dirty.current = false;\n }, [onResizeCommit]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const next = keyboardResize(\n e.key,\n latest.current,\n policyRef.current,\n readContentMin(),\n { shiftKey: e.shiftKey, axis: axisRef.current }\n );\n if (!next) return;\n // The key is ours even when it resolves to no movement (already pinned at\n // a bound), so the browser must not also scroll the surface.\n e.preventDefault();\n emitPreview(next, \"keyboard\");\n },\n [emitPreview, readContentMin]\n );\n\n const handleKeyUp = useCallback(\n (e: React.KeyboardEvent) => {\n if (!isResizeKey(e.key)) return;\n // The gesture end for the keyboard is the key release: one commit per\n // hold, mirroring pointer-up after a stream of moves.\n if (dirty.current) onResizeCommit(latest.current, \"keyboard\");\n dirty.current = false;\n },\n [onResizeCommit]\n );\n\n return {\n role: \"separator\",\n tabIndex: 0,\n \"aria-label\": label,\n \"aria-controls\": cardId,\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n \"aria-valuenow\": measurePercent(size, policy, readContentMin()),\n onPointerDown: handlePointerDown,\n onPointerMove: handlePointerMove,\n onPointerUp: endPointer,\n onLostPointerCapture: endPointer,\n onKeyDown: handleKeyDown,\n onKeyUp: handleKeyUp,\n };\n};\n"],"mappings":"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","ignoreList":[]}