animark-react 0.1.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.
- package/dist/Animark.d.ts +17 -0
- package/dist/Animark.d.ts.map +1 -0
- package/dist/Animark.js +66 -0
- package/dist/Animark.js.map +1 -0
- package/dist/AnimarkContext.d.ts +25 -0
- package/dist/AnimarkContext.d.ts.map +1 -0
- package/dist/AnimarkContext.js +75 -0
- package/dist/AnimarkContext.js.map +1 -0
- package/dist/AnimarkNodeRenderer.d.ts +20 -0
- package/dist/AnimarkNodeRenderer.d.ts.map +1 -0
- package/dist/AnimarkNodeRenderer.js +23 -0
- package/dist/AnimarkNodeRenderer.js.map +1 -0
- package/dist/Animarkcontrols.d.ts +15 -0
- package/dist/Animarkcontrols.d.ts.map +1 -0
- package/dist/Animarkcontrols.js +48 -0
- package/dist/Animarkcontrols.js.map +1 -0
- package/dist/Animarkplayer.d.ts +29 -0
- package/dist/Animarkplayer.d.ts.map +1 -0
- package/dist/Animarkplayer.js +24 -0
- package/dist/Animarkplayer.js.map +1 -0
- package/dist/CSSAnimatedWrapper.d.ts +15 -0
- package/dist/CSSAnimatedWrapper.d.ts.map +1 -0
- package/dist/CSSAnimatedWrapper.js +39 -0
- package/dist/CSSAnimatedWrapper.js.map +1 -0
- package/dist/MotionAnimatedWrapper-HT6ZXMNF.mjs +74 -0
- package/dist/MotionAnimatedWrapper.d.ts +10 -0
- package/dist/MotionAnimatedWrapper.d.ts.map +1 -0
- package/dist/MotionAnimatedWrapper.js +73 -0
- package/dist/MotionAnimatedWrapper.js.map +1 -0
- package/dist/StepBlock.d.ts +16 -0
- package/dist/StepBlock.d.ts.map +1 -0
- package/dist/StepBlock.js +28 -0
- package/dist/StepBlock.js.map +1 -0
- package/dist/StepCanvas.d.ts +17 -0
- package/dist/StepCanvas.d.ts.map +1 -0
- package/dist/StepCanvas.js +58 -0
- package/dist/StepCanvas.js.map +1 -0
- package/dist/StepContext.d.ts +33 -0
- package/dist/StepContext.d.ts.map +1 -0
- package/dist/StepContext.js +109 -0
- package/dist/StepContext.js.map +1 -0
- package/dist/StepControls.d.ts +20 -0
- package/dist/StepControls.d.ts.map +1 -0
- package/dist/StepControls.js +79 -0
- package/dist/StepControls.js.map +1 -0
- package/dist/StepPlayer.d.ts +53 -0
- package/dist/StepPlayer.d.ts.map +1 -0
- package/dist/StepPlayer.js +118 -0
- package/dist/StepPlayer.js.map +1 -0
- package/dist/canvasTypes.d.ts +28 -0
- package/dist/canvasTypes.d.ts.map +1 -0
- package/dist/canvasTypes.js +57 -0
- package/dist/canvasTypes.js.map +1 -0
- package/dist/index.d.mts +72 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +153 -0
- package/package.json +48 -0
- package/src/animark.css +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionAnimatedWrapper.js","sourceRoot":"","sources":["../src/MotionAnimatedWrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface StepBlockProps {
|
|
3
|
+
stepIndex: number;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* StepBlock — renders a single :::step slide.
|
|
8
|
+
*
|
|
9
|
+
* Visibility: only the active step is rendered (display:contents vs hidden).
|
|
10
|
+
* Animation replay: wraps children in a fresh AnimarkProvider keyed to
|
|
11
|
+
* stepPlayCount so every time this step becomes active, inner :::animate
|
|
12
|
+
* blocks replay their animations from scratch.
|
|
13
|
+
*/
|
|
14
|
+
export declare function StepBlock({ stepIndex, children }: StepBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=StepBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepBlock.d.ts","sourceRoot":"","sources":["../src/StepBlock.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAIzC,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA6BhE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { useStepContext } from "./StepContext";
|
|
5
|
+
import { AnimarkProvider } from "./AnimarkContext";
|
|
6
|
+
/**
|
|
7
|
+
* StepBlock — renders a single :::step slide.
|
|
8
|
+
*
|
|
9
|
+
* Visibility: only the active step is rendered (display:contents vs hidden).
|
|
10
|
+
* Animation replay: wraps children in a fresh AnimarkProvider keyed to
|
|
11
|
+
* stepPlayCount so every time this step becomes active, inner :::animate
|
|
12
|
+
* blocks replay their animations from scratch.
|
|
13
|
+
*/
|
|
14
|
+
export function StepBlock({ stepIndex, children }) {
|
|
15
|
+
const { currentStep, stepPlayCount, registerStep, unregisterStep } = useStepContext();
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
registerStep(stepIndex);
|
|
18
|
+
return () => unregisterStep(stepIndex);
|
|
19
|
+
}, [stepIndex, registerStep, unregisterStep]);
|
|
20
|
+
const isActive = currentStep === stepIndex;
|
|
21
|
+
// Each time this step becomes active, playKey increments → AnimarkProvider
|
|
22
|
+
// remounts → all inner CSS/Motion wrappers restart their animations
|
|
23
|
+
const playKey = stepPlayCount[stepIndex] ?? 0;
|
|
24
|
+
return (_jsx("div", { role: "tabpanel", "aria-hidden": !isActive, "data-step-index": stepIndex, style: {
|
|
25
|
+
display: isActive ? "block" : "none",
|
|
26
|
+
}, children: _jsx(AnimarkProvider, { children: children }, playKey) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=StepBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepBlock.js","sourceRoot":"","sources":["../src/StepBlock.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAkB;IAC/D,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;IAEtF,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS,CAAC;IAC3C,2EAA2E;IAC3E,oEAAoE;IACtE,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO,CACL,cACE,IAAI,EAAC,UAAU,iBACF,CAAC,QAAQ,qBACL,SAAS,EAC1B,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;SACrC,YAID,KAAC,eAAe,cACb,QAAQ,IADW,OAAO,CAEX,GACd,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { CanvasSize } from "./canvasTypes";
|
|
3
|
+
interface StepCanvasProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
canvasSize?: CanvasSize;
|
|
6
|
+
/** Control overflow behavior. Default: "hidden" */
|
|
7
|
+
overflow?: "hidden" | "auto" | "scroll" | "visible";
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* StepCanvas — wraps slide content in a sized container.
|
|
13
|
+
* Handles full-screen mode, aspect ratios, and custom dimensions.
|
|
14
|
+
*/
|
|
15
|
+
export declare function StepCanvas({ children, canvasSize, overflow, className, style, }: StepCanvasProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=StepCanvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepCanvas.d.ts","sourceRoot":"","sources":["../src/StepCanvas.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAsD,MAAM,eAAe,CAAC;AAGpG,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAyBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,UAAU,EACV,QAAmB,EACnB,SAAc,EACd,KAAU,GACX,EAAE,eAAe,2CA0CjB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { resolveCanvasSize } from "./canvasTypes";
|
|
4
|
+
/**
|
|
5
|
+
* Helper to convert alignment to flexbox values
|
|
6
|
+
*/
|
|
7
|
+
function getJustifyContent(align) {
|
|
8
|
+
switch (align) {
|
|
9
|
+
case "top": return "flex-start";
|
|
10
|
+
case "center": return "center";
|
|
11
|
+
case "bottom": return "flex-end";
|
|
12
|
+
case "stretch": return "stretch";
|
|
13
|
+
default: return "flex-start";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function getAlignItems(align) {
|
|
17
|
+
switch (align) {
|
|
18
|
+
case "left": return "flex-start";
|
|
19
|
+
case "center": return "center";
|
|
20
|
+
case "right": return "flex-end";
|
|
21
|
+
case "stretch": return "stretch";
|
|
22
|
+
default: return "flex-start";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* StepCanvas — wraps slide content in a sized container.
|
|
27
|
+
* Handles full-screen mode, aspect ratios, and custom dimensions.
|
|
28
|
+
*/
|
|
29
|
+
export function StepCanvas({ children, canvasSize, overflow = "hidden", className = "", style = {}, }) {
|
|
30
|
+
const resolved = resolveCanvasSize(canvasSize);
|
|
31
|
+
// No canvas sizing — render children directly
|
|
32
|
+
if (!resolved) {
|
|
33
|
+
return _jsx("div", { className: className, style: style, children: children });
|
|
34
|
+
}
|
|
35
|
+
const isAspectRatio = canvasSize?.preset === "16:9" || canvasSize?.preset === "4:3";
|
|
36
|
+
const aspectRatioValue = canvasSize?.preset === "16:9" ? "16 / 9" : "4 / 3";
|
|
37
|
+
const containerStyle = {
|
|
38
|
+
position: "relative",
|
|
39
|
+
width: resolved.width,
|
|
40
|
+
height: resolved.height === "0" ? "auto" : resolved.height,
|
|
41
|
+
...(isAspectRatio && { aspectRatio: aspectRatioValue }),
|
|
42
|
+
background: resolved.background,
|
|
43
|
+
overflow,
|
|
44
|
+
...style,
|
|
45
|
+
};
|
|
46
|
+
const contentStyle = {
|
|
47
|
+
padding: resolved.padding,
|
|
48
|
+
width: "100%",
|
|
49
|
+
height: "100%",
|
|
50
|
+
display: "flex",
|
|
51
|
+
flexDirection: "column",
|
|
52
|
+
justifyContent: getJustifyContent(resolved.verticalAlign),
|
|
53
|
+
alignItems: getAlignItems(resolved.horizontalAlign),
|
|
54
|
+
boxSizing: "border-box",
|
|
55
|
+
};
|
|
56
|
+
return (_jsx("div", { className: `animark-step-canvas ${className}`.trim(), style: containerStyle, children: _jsx("div", { className: "animark-step-canvas-content", style: contentStyle, children: children }) }));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=StepCanvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepCanvas.js","sourceRoot":"","sources":["../src/StepCanvas.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAWlD;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC;QAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,CAAC;QACjC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAsB;IAC3C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;QACjC,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC/B,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;QAChC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,UAAU,EACV,QAAQ,GAAG,QAAQ,EACnB,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,GACM;IAChB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAE/C,8CAA8C;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAO,CAAC;IACnE,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,EAAE,MAAM,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,KAAK,KAAK,CAAC;IACpF,MAAM,gBAAgB,GAAG,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAE5E,MAAM,cAAc,GAAwB;QAC1C,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;QAC1D,GAAG,CAAC,aAAa,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACvD,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ;QACR,GAAG,KAAK;KACT,CAAC;IAEF,MAAM,YAAY,GAAwB;QACxC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzD,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnD,SAAS,EAAE,YAAY;KACxB,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,uBAAuB,SAAS,EAAE,CAAC,IAAI,EAAE,EACpD,KAAK,EAAE,cAAc,YAErB,cAAK,SAAS,EAAC,6BAA6B,EAAC,KAAK,EAAE,YAAY,YAC7D,QAAQ,GACL,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface StepContextValue {
|
|
3
|
+
/** Currently active step index (1-based) */
|
|
4
|
+
currentStep: number;
|
|
5
|
+
/** Total number of registered steps */
|
|
6
|
+
totalSteps: number;
|
|
7
|
+
/** Go to next step */
|
|
8
|
+
next: () => void;
|
|
9
|
+
/** Go to previous step */
|
|
10
|
+
prev: () => void;
|
|
11
|
+
/** Jump to a specific step (1-based) */
|
|
12
|
+
goTo: (index: number) => void;
|
|
13
|
+
/** Replay animations for the current step */
|
|
14
|
+
replayCurrentStep: () => void;
|
|
15
|
+
/** Whether keyboard navigation is active */
|
|
16
|
+
keyboardEnabled: boolean;
|
|
17
|
+
/** Increments when a step becomes active — child animations use this to replay */
|
|
18
|
+
stepPlayCount: Record<number, number>;
|
|
19
|
+
/** Called by StepBlock on mount to register itself */
|
|
20
|
+
registerStep: (index: number) => void;
|
|
21
|
+
/** Called by StepBlock on unmount */
|
|
22
|
+
unregisterStep: (index: number) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function useStepContext(): StepContextValue;
|
|
25
|
+
export interface StepProviderProps {
|
|
26
|
+
children: React.ReactNode;
|
|
27
|
+
/** Enable left/right arrow key navigation. Default: true */
|
|
28
|
+
keyboardEnabled?: boolean;
|
|
29
|
+
/** Called whenever the active step changes */
|
|
30
|
+
onStepChange?: (index: number, total: number) => void;
|
|
31
|
+
}
|
|
32
|
+
export declare function StepProvider({ children, keyboardEnabled, onStepChange, }: StepProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=StepContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepContext.d.ts","sourceRoot":"","sources":["../src/StepContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wCAAwC;IACxC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,6CAA6C;IAC7C,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,4CAA4C;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,kFAAkF;IAClF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sDAAsD;IACtD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,qCAAqC;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAeD,wBAAgB,cAAc,qBAE7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,eAAsB,EACtB,YAAY,GACb,EAAE,iBAAiB,2CA4GnB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// packages/animark-react/src/StepContext.tsx
|
|
2
|
+
"use client";
|
|
3
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
+
import { createContext, useContext, useState, useCallback, useRef, useEffect, } from "react";
|
|
5
|
+
const StepContext = createContext({
|
|
6
|
+
currentStep: 1,
|
|
7
|
+
totalSteps: 0,
|
|
8
|
+
next: () => { },
|
|
9
|
+
prev: () => { },
|
|
10
|
+
goTo: () => { },
|
|
11
|
+
replayCurrentStep: () => { },
|
|
12
|
+
keyboardEnabled: true,
|
|
13
|
+
stepPlayCount: {},
|
|
14
|
+
registerStep: () => { },
|
|
15
|
+
unregisterStep: () => { },
|
|
16
|
+
});
|
|
17
|
+
export function useStepContext() {
|
|
18
|
+
return useContext(StepContext);
|
|
19
|
+
}
|
|
20
|
+
export function StepProvider({ children, keyboardEnabled = true, onStepChange, }) {
|
|
21
|
+
const [currentStep, setCurrentStep] = useState(1);
|
|
22
|
+
const [totalSteps, setTotalSteps] = useState(0);
|
|
23
|
+
// Track how many times each step has been activated so inner
|
|
24
|
+
// :::animate blocks know to replay their animations
|
|
25
|
+
const [stepPlayCount, setStepPlayCount] = useState({});
|
|
26
|
+
const registeredRef = useRef(new Set());
|
|
27
|
+
const registerStep = useCallback((index) => {
|
|
28
|
+
registeredRef.current.add(index);
|
|
29
|
+
setTotalSteps(registeredRef.current.size);
|
|
30
|
+
}, []);
|
|
31
|
+
const unregisterStep = useCallback((index) => {
|
|
32
|
+
registeredRef.current.delete(index);
|
|
33
|
+
setTotalSteps(registeredRef.current.size);
|
|
34
|
+
}, []);
|
|
35
|
+
const activateStep = useCallback((index) => {
|
|
36
|
+
setCurrentStep(index);
|
|
37
|
+
setStepPlayCount((prev) => ({
|
|
38
|
+
...prev,
|
|
39
|
+
[index]: (prev[index] ?? 0) + 1, // ← this increments
|
|
40
|
+
}));
|
|
41
|
+
}, []);
|
|
42
|
+
const replayCurrentStep = useCallback(() => {
|
|
43
|
+
// Only increment the play count for the current step
|
|
44
|
+
setStepPlayCount((prev) => ({
|
|
45
|
+
...prev,
|
|
46
|
+
[currentStep]: (prev[currentStep] ?? 0) + 1,
|
|
47
|
+
}));
|
|
48
|
+
}, [currentStep]);
|
|
49
|
+
const next = useCallback(() => {
|
|
50
|
+
setCurrentStep((cur) => {
|
|
51
|
+
const next = Math.min(cur + 1, registeredRef.current.size);
|
|
52
|
+
activateStep(next);
|
|
53
|
+
return next;
|
|
54
|
+
});
|
|
55
|
+
}, [activateStep]);
|
|
56
|
+
const prev = useCallback(() => {
|
|
57
|
+
setCurrentStep((cur) => {
|
|
58
|
+
const prev = Math.max(cur - 1, 1);
|
|
59
|
+
activateStep(prev);
|
|
60
|
+
return prev;
|
|
61
|
+
});
|
|
62
|
+
}, [activateStep]);
|
|
63
|
+
const goTo = useCallback((index) => {
|
|
64
|
+
const clamped = Math.max(1, Math.min(index, registeredRef.current.size));
|
|
65
|
+
activateStep(clamped);
|
|
66
|
+
}, [activateStep]);
|
|
67
|
+
// Initialise play count for step 1 on first render
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
setStepPlayCount({ 1: 1 });
|
|
70
|
+
}, []);
|
|
71
|
+
// Notify parent of step changes
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
onStepChange?.(currentStep, registeredRef.current.size);
|
|
74
|
+
}, [currentStep, onStepChange]);
|
|
75
|
+
// Keyboard navigation
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!keyboardEnabled)
|
|
78
|
+
return;
|
|
79
|
+
const handler = (e) => {
|
|
80
|
+
// Don't steal keys from inputs / textareas
|
|
81
|
+
const tag = e.target?.tagName;
|
|
82
|
+
if (tag === "INPUT" || tag === "TEXTAREA")
|
|
83
|
+
return;
|
|
84
|
+
if (e.key === "ArrowRight" || e.key === "ArrowDown") {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
next();
|
|
87
|
+
}
|
|
88
|
+
else if (e.key === "ArrowLeft" || e.key === "ArrowUp") {
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
prev();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
window.addEventListener("keydown", handler);
|
|
94
|
+
return () => window.removeEventListener("keydown", handler);
|
|
95
|
+
}, [keyboardEnabled, next, prev]);
|
|
96
|
+
return (_jsx(StepContext.Provider, { value: {
|
|
97
|
+
currentStep,
|
|
98
|
+
totalSteps,
|
|
99
|
+
next,
|
|
100
|
+
prev,
|
|
101
|
+
goTo,
|
|
102
|
+
replayCurrentStep,
|
|
103
|
+
keyboardEnabled,
|
|
104
|
+
stepPlayCount,
|
|
105
|
+
registerStep,
|
|
106
|
+
unregisterStep,
|
|
107
|
+
}, children: children }));
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=StepContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepContext.js","sourceRoot":"","sources":["../src/StepContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface StepControlsProps {
|
|
3
|
+
/** Show dot indicators for each step. Default: true */
|
|
4
|
+
showDots?: boolean;
|
|
5
|
+
/** Show prev / next buttons. Default: true */
|
|
6
|
+
showButtons?: boolean;
|
|
7
|
+
/** Show replay button between arrows. Default: true */
|
|
8
|
+
showReplayButton?: boolean;
|
|
9
|
+
/** Show "N / total" counter. Default: true */
|
|
10
|
+
showCounter?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
style?: React.CSSProperties;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* StepControls — prev/next buttons, replay button, dot nav, step counter.
|
|
16
|
+
* Uses currentColor so it inherits your app's colour scheme.
|
|
17
|
+
* Must be inside a StepProvider (i.e. inside <StepPlayer>).
|
|
18
|
+
*/
|
|
19
|
+
export declare function StepControls({ showDots, showButtons, showReplayButton, showCounter, className, style, }: StepControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=StepControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepControls.d.ts","sourceRoot":"","sources":["../src/StepControls.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAe,EACf,WAAkB,EAClB,gBAAuB,EACvB,WAAkB,EAClB,SAAc,EACd,KAAU,GACX,EAAE,iBAAiB,2CA8InB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// packages/animark-react/src/StepControls.tsx
|
|
2
|
+
"use client";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useStepContext } from "./StepContext";
|
|
5
|
+
/**
|
|
6
|
+
* StepControls — prev/next buttons, replay button, dot nav, step counter.
|
|
7
|
+
* Uses currentColor so it inherits your app's colour scheme.
|
|
8
|
+
* Must be inside a StepProvider (i.e. inside <StepPlayer>).
|
|
9
|
+
*/
|
|
10
|
+
export function StepControls({ showDots = true, showButtons = true, showReplayButton = true, showCounter = true, className = "", style = {}, }) {
|
|
11
|
+
const { currentStep, totalSteps, next, prev, goTo, replayCurrentStep } = useStepContext();
|
|
12
|
+
const isFirst = currentStep <= 1;
|
|
13
|
+
const isLast = currentStep >= totalSteps;
|
|
14
|
+
const btnStyle = (disabled) => ({
|
|
15
|
+
display: "inline-flex",
|
|
16
|
+
alignItems: "center",
|
|
17
|
+
justifyContent: "center",
|
|
18
|
+
width: 36,
|
|
19
|
+
height: 36,
|
|
20
|
+
border: "1px solid currentColor",
|
|
21
|
+
borderRadius: 6,
|
|
22
|
+
background: "transparent",
|
|
23
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
24
|
+
opacity: disabled ? 0.3 : 1,
|
|
25
|
+
fontSize: 16,
|
|
26
|
+
transition: "opacity 0.15s",
|
|
27
|
+
flexShrink: 0,
|
|
28
|
+
});
|
|
29
|
+
const replayBtnStyle = ({
|
|
30
|
+
display: "inline-flex",
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
justifyContent: "center",
|
|
33
|
+
width: 36,
|
|
34
|
+
height: 36,
|
|
35
|
+
border: "1px solid currentColor",
|
|
36
|
+
borderRadius: 6,
|
|
37
|
+
background: "transparent",
|
|
38
|
+
cursor: "pointer",
|
|
39
|
+
opacity: 1,
|
|
40
|
+
fontSize: 14,
|
|
41
|
+
transition: "opacity 0.15s, transform 0.15s",
|
|
42
|
+
flexShrink: 0,
|
|
43
|
+
});
|
|
44
|
+
const dotStyle = (active) => ({
|
|
45
|
+
width: active ? 20 : 8,
|
|
46
|
+
height: 8,
|
|
47
|
+
borderRadius: 4,
|
|
48
|
+
background: "currentColor",
|
|
49
|
+
opacity: active ? 1 : 0.25,
|
|
50
|
+
cursor: "pointer",
|
|
51
|
+
border: "none",
|
|
52
|
+
padding: 0,
|
|
53
|
+
transition: "width 0.2s ease, opacity 0.2s ease",
|
|
54
|
+
flexShrink: 0,
|
|
55
|
+
});
|
|
56
|
+
return (_jsxs("div", { className: `animark-step-controls ${className}`.trim(), style: {
|
|
57
|
+
display: "flex",
|
|
58
|
+
alignItems: "center",
|
|
59
|
+
justifyContent: "center",
|
|
60
|
+
gap: 12,
|
|
61
|
+
padding: "12px 0",
|
|
62
|
+
userSelect: "none",
|
|
63
|
+
...style,
|
|
64
|
+
}, children: [showButtons && (_jsx("button", { onClick: prev, disabled: isFirst, "aria-label": "Previous step", style: btnStyle(isFirst), children: "\u2190" })), showReplayButton && (_jsx("button", { onClick: replayCurrentStep, "aria-label": "Replay current step animations", title: "Replay animations", style: replayBtnStyle, onMouseEnter: (e) => {
|
|
65
|
+
e.currentTarget.style.transform = "scale(1.05)";
|
|
66
|
+
}, onMouseLeave: (e) => {
|
|
67
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
68
|
+
}, children: "\u21BB" })), showButtons && (_jsx("button", { onClick: next, disabled: isLast, "aria-label": "Next step", style: btnStyle(isLast), children: "\u2192" })), showDots && totalSteps > 0 && (_jsx("div", { style: { display: "flex", alignItems: "center", gap: 6, marginLeft: 8 }, children: Array.from({ length: totalSteps }, (_, i) => {
|
|
69
|
+
const idx = i + 1;
|
|
70
|
+
return (_jsx("button", { onClick: () => goTo(idx), "aria-label": `Go to step ${idx}`, "aria-current": idx === currentStep ? "step" : undefined, style: dotStyle(idx === currentStep) }, idx));
|
|
71
|
+
}) })), showCounter && (_jsxs("span", { "aria-live": "polite", "aria-atomic": true, style: {
|
|
72
|
+
fontSize: 13,
|
|
73
|
+
opacity: 0.5,
|
|
74
|
+
minWidth: 40,
|
|
75
|
+
textAlign: "center",
|
|
76
|
+
fontVariantNumeric: "tabular-nums",
|
|
77
|
+
}, children: [currentStep, " / ", totalSteps] }))] }));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=StepControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepControls.js","sourceRoot":"","sources":["../src/StepControls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import ReactMarkdown from "react-markdown";
|
|
3
|
+
import type { RemarkAnimarkOptions } from "animark-core";
|
|
4
|
+
import type { Components } from "react-markdown";
|
|
5
|
+
import { type StepProviderProps } from "./StepContext";
|
|
6
|
+
import { type StepControlsProps } from "./StepControls";
|
|
7
|
+
import type { CanvasSize } from "./canvasTypes";
|
|
8
|
+
export interface StepPlayerProps {
|
|
9
|
+
/** Markdown string containing :::step blocks */
|
|
10
|
+
children: string;
|
|
11
|
+
/** Use Framer Motion for inner :::animate blocks. Default: false */
|
|
12
|
+
useMotion?: boolean;
|
|
13
|
+
/** Show prev/next/dot controls. Default: true */
|
|
14
|
+
showControls?: boolean;
|
|
15
|
+
/** Position of controls relative to the slide. Default: "bottom" */
|
|
16
|
+
controlsPosition?: "top" | "bottom" | "fixed-bottom" | "fixed-top";
|
|
17
|
+
/** Canvas size configuration for slides */
|
|
18
|
+
canvasSize?: CanvasSize;
|
|
19
|
+
/** Props forwarded to StepControls */
|
|
20
|
+
controlsProps?: StepControlsProps;
|
|
21
|
+
/** Props forwarded to StepProvider */
|
|
22
|
+
playerProps?: Omit<StepProviderProps, "children">;
|
|
23
|
+
/** Additional remark plugins */
|
|
24
|
+
remarkPlugins?: NonNullable<Parameters<typeof ReactMarkdown>[0]["remarkPlugins"]>;
|
|
25
|
+
/** Additional rehype plugins */
|
|
26
|
+
rehypePlugins?: NonNullable<Parameters<typeof ReactMarkdown>[0]["rehypePlugins"]>;
|
|
27
|
+
/** Override react-markdown component renderers */
|
|
28
|
+
components?: Components;
|
|
29
|
+
/** Canvas overflow behavior. Default: "hidden" */
|
|
30
|
+
canvasOverflow?: "hidden" | "auto" | "scroll" | "visible";
|
|
31
|
+
/** Options for the remarkAnimark plugin */
|
|
32
|
+
pluginOptions?: RemarkAnimarkOptions;
|
|
33
|
+
className?: string;
|
|
34
|
+
style?: React.CSSProperties;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* StepPlayer — presentation-mode step player.
|
|
38
|
+
*
|
|
39
|
+
* Renders :::step blocks one at a time with keyboard navigation.
|
|
40
|
+
* Inner :::animate blocks replay their animations on each step entry.
|
|
41
|
+
*
|
|
42
|
+
* Usage:
|
|
43
|
+
* <StepPlayer>{markdown}</StepPlayer>
|
|
44
|
+
*
|
|
45
|
+
* With canvas sizing:
|
|
46
|
+
* <StepPlayer canvasSize={{ preset: "full-screen" }}>{markdown}</StepPlayer>
|
|
47
|
+
* <StepPlayer canvasSize={{ width: 1024, height: 768 }}>{markdown}</StepPlayer>
|
|
48
|
+
*
|
|
49
|
+
* Keyboard: ← → (or ↑ ↓) to navigate. Dots and buttons also work.
|
|
50
|
+
*/
|
|
51
|
+
export declare function StepPlayer({ children, useMotion, showControls, controlsPosition, canvasSize, controlsProps, playerProps, remarkPlugins, rehypePlugins, components, canvasOverflow, // ADD THIS
|
|
52
|
+
pluginOptions, className, style, }: StepPlayerProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
//# sourceMappingURL=StepPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepPlayer.d.ts","sourceRoot":"","sources":["../src/StepPlayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAK3C,OAAO,KAAK,EAAE,oBAAoB,EAAmB,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAC;IACnE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sCAAsC;IACtC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,sCAAsC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAClD,gCAAgC;IAChC,aAAa,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAClF,gCAAgC;IAChC,aAAa,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAClF,kDAAkD;IAClD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kDAAkD;IAClD,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1D,2CAA2C;IAC3C,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AA6FD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAiB,EACjB,YAAmB,EACnB,gBAA2B,EAC3B,UAAU,EACV,aAAkB,EAClB,WAAgB,EAChB,aAAkB,EAClB,aAAkB,EAClB,UAAe,EACf,cAAyB,EAAE,WAAW;AACtC,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,eAAe,2CA+EjB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import ReactMarkdown from "react-markdown";
|
|
5
|
+
import remarkDirective from "remark-directive";
|
|
6
|
+
import remarkMath from "remark-math";
|
|
7
|
+
import rehypeKatex from "rehype-katex";
|
|
8
|
+
import { remarkAnimark, remarkStep, remarkCleanDirectives } from "animark-core";
|
|
9
|
+
import { StepProvider } from "./StepContext";
|
|
10
|
+
import { StepBlock } from "./StepBlock";
|
|
11
|
+
import { StepControls } from "./StepControls";
|
|
12
|
+
import { StepCanvas } from "./StepCanvas";
|
|
13
|
+
import { AnimarkNodeRenderer } from "./AnimarkNodeRenderer";
|
|
14
|
+
// Plugin arrays stable outside component
|
|
15
|
+
const BASE_REMARK = [remarkDirective, remarkStep, remarkAnimark, remarkCleanDirectives, remarkMath];
|
|
16
|
+
const BASE_REHYPE = [rehypeKatex];
|
|
17
|
+
// ─── Inner renderer (needs access to useMotion) ───────────────────────────────
|
|
18
|
+
function StepMarkdown({ markdown, useMotion, remarkPluginList, rehypePluginList, extraComponents, }) {
|
|
19
|
+
const components = useMemo(() => ({
|
|
20
|
+
...extraComponents,
|
|
21
|
+
p(props) {
|
|
22
|
+
const { children } = props;
|
|
23
|
+
// A paragraph is "empty" if it has no children or only whitespace
|
|
24
|
+
const isEmpty = !children ||
|
|
25
|
+
children === "" ||
|
|
26
|
+
(Array.isArray(children) && children.every((c) => c === null || c === undefined || (typeof c === "string" && c.trim() === "")));
|
|
27
|
+
if (isEmpty)
|
|
28
|
+
return null;
|
|
29
|
+
return _jsx("p", { children: children });
|
|
30
|
+
},
|
|
31
|
+
// ── :::step blocks ────────────────────────────────────────────────────
|
|
32
|
+
div(props) {
|
|
33
|
+
const { children, "data-step": isStep, "data-step-index": stepIndexRaw, "data-animark": isAnimark, ...rest } = props;
|
|
34
|
+
// Step wrapper
|
|
35
|
+
if (isStep) {
|
|
36
|
+
const stepIndex = parseInt(stepIndexRaw ?? "1", 10);
|
|
37
|
+
return _jsx(StepBlock, { stepIndex: stepIndex, children: children });
|
|
38
|
+
}
|
|
39
|
+
// Animate wrapper (inside a step)
|
|
40
|
+
if (isAnimark) {
|
|
41
|
+
const toNum = (v) => v !== undefined && v !== "" && v !== null ? Number(v) : undefined;
|
|
42
|
+
const animation = {
|
|
43
|
+
type: rest["data-animark-type"] ?? "fade",
|
|
44
|
+
trigger: rest["data-animark-trigger"] ?? "auto",
|
|
45
|
+
delay: toNum(rest["data-animark-delay"]) ?? 0,
|
|
46
|
+
duration: toNum(rest["data-animark-duration"]) ?? 600,
|
|
47
|
+
stagger: toNum(rest["data-animark-stagger"]) ?? 0,
|
|
48
|
+
direction: rest["data-animark-direction"] ?? "up",
|
|
49
|
+
easing: rest["data-animark-easing"] ?? "ease-out",
|
|
50
|
+
};
|
|
51
|
+
return (_jsx(AnimarkNodeRenderer, { animation: animation, useMotion: useMotion, children: children }));
|
|
52
|
+
}
|
|
53
|
+
return _jsx("div", { ...rest, children: children });
|
|
54
|
+
},
|
|
55
|
+
}), [extraComponents, useMotion]);
|
|
56
|
+
return (_jsx(ReactMarkdown, { remarkPlugins: remarkPluginList, rehypePlugins: rehypePluginList, components: components, children: markdown }));
|
|
57
|
+
}
|
|
58
|
+
// ─── StepPlayer ───────────────────────────────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* StepPlayer — presentation-mode step player.
|
|
61
|
+
*
|
|
62
|
+
* Renders :::step blocks one at a time with keyboard navigation.
|
|
63
|
+
* Inner :::animate blocks replay their animations on each step entry.
|
|
64
|
+
*
|
|
65
|
+
* Usage:
|
|
66
|
+
* <StepPlayer>{markdown}</StepPlayer>
|
|
67
|
+
*
|
|
68
|
+
* With canvas sizing:
|
|
69
|
+
* <StepPlayer canvasSize={{ preset: "full-screen" }}>{markdown}</StepPlayer>
|
|
70
|
+
* <StepPlayer canvasSize={{ width: 1024, height: 768 }}>{markdown}</StepPlayer>
|
|
71
|
+
*
|
|
72
|
+
* Keyboard: ← → (or ↑ ↓) to navigate. Dots and buttons also work.
|
|
73
|
+
*/
|
|
74
|
+
export function StepPlayer({ children, useMotion = false, showControls = true, controlsPosition = "bottom", canvasSize, controlsProps = {}, playerProps = {}, remarkPlugins = [], rehypePlugins = [], components = {}, canvasOverflow = "hidden", // ADD THIS
|
|
75
|
+
pluginOptions, className, style, }) {
|
|
76
|
+
const remarkPluginList = useMemo(() => {
|
|
77
|
+
if (pluginOptions) {
|
|
78
|
+
return [
|
|
79
|
+
remarkDirective,
|
|
80
|
+
remarkStep,
|
|
81
|
+
[remarkAnimark, pluginOptions],
|
|
82
|
+
remarkMath,
|
|
83
|
+
...remarkPlugins,
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
return [...BASE_REMARK, ...remarkPlugins];
|
|
87
|
+
}, [pluginOptions, remarkPlugins]);
|
|
88
|
+
const rehypePluginList = useMemo(() => [...BASE_REHYPE, ...rehypePlugins], [rehypePlugins]);
|
|
89
|
+
const isFixed = controlsPosition === "fixed-bottom" || controlsPosition === "fixed-top";
|
|
90
|
+
const controlsAtTop = controlsPosition === "top" || controlsPosition === "fixed-top";
|
|
91
|
+
const controls = showControls ? (_jsx("div", { className: "animark-step-controls-wrapper", style: {
|
|
92
|
+
...(isFixed && {
|
|
93
|
+
position: "fixed",
|
|
94
|
+
left: 0,
|
|
95
|
+
right: 0,
|
|
96
|
+
[controlsAtTop ? "top" : "bottom"]: 0,
|
|
97
|
+
zIndex: 1000,
|
|
98
|
+
padding: "16px",
|
|
99
|
+
background: "rgba(255, 255, 255, 0.95)",
|
|
100
|
+
backdropFilter: "blur(10px)",
|
|
101
|
+
borderTop: controlsAtTop ? "none" : "1px solid rgba(0, 0, 0, 0.1)",
|
|
102
|
+
borderBottom: controlsAtTop ? "1px solid rgba(0, 0, 0, 0.1)" : "none",
|
|
103
|
+
}),
|
|
104
|
+
}, children: _jsx(StepControls, { ...controlsProps }) })) : null;
|
|
105
|
+
const playerStyle = {
|
|
106
|
+
...style,
|
|
107
|
+
...(canvasSize?.preset === "full-screen" && {
|
|
108
|
+
position: "fixed",
|
|
109
|
+
top: 0,
|
|
110
|
+
left: 0,
|
|
111
|
+
right: 0,
|
|
112
|
+
bottom: 0,
|
|
113
|
+
overflow: "hidden",
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
return (_jsx(StepProvider, { ...playerProps, children: _jsxs("div", { className: `animark-step-player ${className ?? ""}`.trim(), style: playerStyle, children: [!isFixed && controlsAtTop && controls, _jsx(StepCanvas, { canvasSize: canvasSize, overflow: canvasOverflow, children: _jsx(StepMarkdown, { markdown: children, useMotion: useMotion, remarkPluginList: remarkPluginList, rehypePluginList: rehypePluginList, extraComponents: components }) }), !isFixed && !controlsAtTop && controls, isFixed && controls] }) }));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=StepPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepPlayer.js","sourceRoot":"","sources":["../src/StepPlayer.tsx"],"names":[],"mappings":"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"}
|