@dreamtree-org/twreact-ui 2.1.2 → 2.2.1
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/README.md +47 -4
- package/ai-skills/dreamtree-ui.md +20 -3
- package/dist/_shared/{cn-DPPQUJu1.js → cn-TMJ-_w1a.js} +14 -1
- package/dist/_shared/useLatestRef-CdtlnPUz.js +21 -0
- package/dist/_shared/useReducedMotion-B_PMM5ER.js +77 -0
- package/dist/ai-schema.json +513 -0
- package/dist/charts/index.js +6 -76
- package/dist/components/motion/BentoExpandGrid.d.ts +10 -0
- package/dist/components/motion/BentoExpandGrid.d.ts.map +1 -0
- package/dist/components/motion/CountUp.d.ts +9 -0
- package/dist/components/motion/CountUp.d.ts.map +1 -0
- package/dist/components/motion/DeviceFrame.d.ts +8 -0
- package/dist/components/motion/DeviceFrame.d.ts.map +1 -0
- package/dist/components/motion/DeviceMorphHero.d.ts +11 -0
- package/dist/components/motion/DeviceMorphHero.d.ts.map +1 -0
- package/dist/components/motion/LogoMarquee.d.ts +9 -0
- package/dist/components/motion/LogoMarquee.d.ts.map +1 -0
- package/dist/components/motion/PhotoCollage.d.ts +9 -0
- package/dist/components/motion/PhotoCollage.d.ts.map +1 -0
- package/dist/components/motion/Reveal.d.ts +9 -0
- package/dist/components/motion/Reveal.d.ts.map +1 -0
- package/dist/components/motion/RevealGroup.d.ts +5 -0
- package/dist/components/motion/RevealGroup.d.ts.map +1 -0
- package/dist/components/motion/RotatingBadge.d.ts +9 -0
- package/dist/components/motion/RotatingBadge.d.ts.map +1 -0
- package/dist/components/motion/ScrollStage.d.ts +11 -0
- package/dist/components/motion/ScrollStage.d.ts.map +1 -0
- package/dist/components/motion/SmoothScrollProvider.d.ts +18 -0
- package/dist/components/motion/SmoothScrollProvider.d.ts.map +1 -0
- package/dist/components/motion/StackedCards.d.ts +10 -0
- package/dist/components/motion/StackedCards.d.ts.map +1 -0
- package/dist/components/motion/StatStrip.d.ts +8 -0
- package/dist/components/motion/StatStrip.d.ts.map +1 -0
- package/dist/components/motion/TestimonialSpotlight.d.ts +10 -0
- package/dist/components/motion/TestimonialSpotlight.d.ts.map +1 -0
- package/dist/components/motion/storyData.d.ts +52 -0
- package/dist/components/motion/storyData.d.ts.map +1 -0
- package/dist/esm/components/motion/BentoExpandGrid.js +144 -0
- package/dist/esm/components/motion/CountUp.js +97 -0
- package/dist/esm/components/motion/DeviceFrame.js +102 -0
- package/dist/esm/components/motion/DeviceMorphHero.js +228 -0
- package/dist/esm/components/motion/LogoMarquee.js +144 -0
- package/dist/esm/components/motion/PhotoCollage.js +92 -0
- package/dist/esm/components/motion/Reveal.js +115 -0
- package/dist/esm/components/motion/RevealGroup.js +43 -0
- package/dist/esm/components/motion/RotatingBadge.js +66 -0
- package/dist/esm/components/motion/ScrollStage.js +62 -0
- package/dist/esm/components/motion/SmoothScrollProvider.js +63 -0
- package/dist/esm/components/motion/StackedCards.js +166 -0
- package/dist/esm/components/motion/StatStrip.js +58 -0
- package/dist/esm/components/motion/TestimonialSpotlight.js +209 -0
- package/dist/esm/hooks/useScrollProgress.js +107 -0
- package/dist/esm/hooks/useSmoothScroll.js +33 -0
- package/dist/esm/motion/engine/inView.js +54 -0
- package/dist/esm/motion/engine/progress.js +45 -0
- package/dist/esm/motion/engine/scheduler.js +67 -0
- package/dist/esm/motion/engine/useHydrated.js +17 -0
- package/dist/esm/motion/engine/useIsomorphicLayoutEffect.js +7 -0
- package/dist/esm/motion/engine/useMergedRef.js +12 -0
- package/dist/esm/motion/index.js +16 -0
- package/dist/esm/motion/tokens.js +10 -0
- package/dist/hooks/useScrollProgress.d.ts +17 -0
- package/dist/hooks/useScrollProgress.d.ts.map +1 -0
- package/dist/hooks/useSmoothScroll.d.ts +11 -0
- package/dist/hooks/useSmoothScroll.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/motion/engine/inView.d.ts +5 -0
- package/dist/motion/engine/inView.d.ts.map +1 -0
- package/dist/motion/engine/progress.d.ts +18 -0
- package/dist/motion/engine/progress.d.ts.map +1 -0
- package/dist/motion/engine/scheduler.d.ts +10 -0
- package/dist/motion/engine/scheduler.d.ts.map +1 -0
- package/dist/motion/engine/useHydrated.d.ts +3 -0
- package/dist/motion/engine/useHydrated.d.ts.map +1 -0
- package/dist/motion/engine/useIsomorphicLayoutEffect.d.ts +4 -0
- package/dist/motion/engine/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/dist/motion/engine/useMergedRef.d.ts +3 -0
- package/dist/motion/engine/useMergedRef.d.ts.map +1 -0
- package/dist/motion/index.d.ts +20 -0
- package/dist/motion/index.d.ts.map +1 -0
- package/dist/motion/index.js +1813 -0
- package/dist/motion/tokens.d.ts +6 -0
- package/dist/motion/tokens.d.ts.map +1 -0
- package/dist/rich-text/index.js +3 -18
- package/dist/tokens/tokens.json +21 -0
- package/dist/types/motion.d.ts +290 -0
- package/dist/types/motion.d.ts.map +1 -0
- package/doc/README.md +17 -1
- package/mcp/catalog.snapshot.json +952 -5
- package/motion/package.json +5 -0
- package/package.json +14 -3
- package/tokens/tokens.json +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/motion/tokens.js"],"names":[],"mappings":"AAGA,gCAAiC,EAAE,CAAC;AACpC,2BAA4B,GAAG,CAAC;AAChC,kCAAmC,GAAG,CAAC;AAEvC,wCAAwC;AACxC,2BAA4B,oBAAoB,CAAC"}
|
package/dist/rich-text/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var cn = require('../_shared/cn-
|
|
3
|
+
var cn = require('../_shared/cn-TMJ-_w1a.js');
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var react = require('@tiptap/react');
|
|
7
7
|
var StarterKit = require('@tiptap/starter-kit');
|
|
8
8
|
var lucideReact = require('lucide-react');
|
|
9
|
+
var useLatestRef = require('../_shared/useLatestRef-CdtlnPUz.js');
|
|
9
10
|
require('clsx');
|
|
10
11
|
require('tailwind-merge');
|
|
11
12
|
|
|
@@ -14,22 +15,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
14
15
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
15
16
|
var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
|
|
16
17
|
|
|
17
|
-
// useLayoutEffect warns during SSR; fall back to useEffect on the server.
|
|
18
|
-
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
19
|
-
/**
|
|
20
|
-
* Internal (not exported from the package): a ref that always holds the latest
|
|
21
|
-
* `value`. Lets an effect call the newest consumer callback (e.g. `onChange`)
|
|
22
|
-
* without listing it as a dependency, so a parent passing an inline function
|
|
23
|
-
* does not re-run the effect on every render.
|
|
24
|
-
*/
|
|
25
|
-
function useLatestRef(value) {
|
|
26
|
-
var ref = React.useRef(value);
|
|
27
|
-
useIsomorphicLayoutEffect(function () {
|
|
28
|
-
ref.current = value;
|
|
29
|
-
});
|
|
30
|
-
return ref;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
18
|
// Internal (not exported). Grows an icon-only control to the 44×44 px minimum
|
|
34
19
|
// touch target (WCAG 2.5.5, Apple HIG) on coarse pointers only, so desktop
|
|
35
20
|
// layouts keep their compact size. Pair with inline-flex centering.
|
|
@@ -498,7 +483,7 @@ var RichTextEditor = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
498
483
|
var helperId = "".concat(editorId, "-helper");
|
|
499
484
|
var editable = !disabled && !readOnly;
|
|
500
485
|
var rootRef = React.useRef(null);
|
|
501
|
-
var callbacks = useLatestRef({
|
|
486
|
+
var callbacks = useLatestRef.useLatestRef({
|
|
502
487
|
onChange: onChange,
|
|
503
488
|
onFocus: onFocus,
|
|
504
489
|
onBlur: onBlur,
|
package/dist/tokens/tokens.json
CHANGED
|
@@ -551,5 +551,26 @@
|
|
|
551
551
|
],
|
|
552
552
|
"$description": "Small overshoot for sheets settling and toggles."
|
|
553
553
|
}
|
|
554
|
+
},
|
|
555
|
+
"scroll": {
|
|
556
|
+
"$description": "Scroll-storytelling defaults read by the /motion components (ScrollStage, StackedCards, DeviceMorphHero).",
|
|
557
|
+
"stickyTop": {
|
|
558
|
+
"$type": "dimension",
|
|
559
|
+
"$value": {
|
|
560
|
+
"value": 80,
|
|
561
|
+
"unit": "px"
|
|
562
|
+
},
|
|
563
|
+
"$description": "Offset from the top of the viewport where stacked cards stick (clears a floating nav)."
|
|
564
|
+
},
|
|
565
|
+
"sceneLength": {
|
|
566
|
+
"$type": "number",
|
|
567
|
+
"$value": 300,
|
|
568
|
+
"$description": "Default pinned scene length on desktop, in vh (viewport heights)."
|
|
569
|
+
},
|
|
570
|
+
"sceneLengthMobile": {
|
|
571
|
+
"$type": "number",
|
|
572
|
+
"$value": 150,
|
|
573
|
+
"$description": "Default pinned scene length below the md breakpoint, in vh."
|
|
574
|
+
}
|
|
554
575
|
}
|
|
555
576
|
}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import type { BaseComponentProps } from './index';
|
|
3
|
+
/** A live 0–1 value that does not re-render React (MotionValue-like). */
|
|
4
|
+
export interface ScrollProgress {
|
|
5
|
+
/** The current value (1 on the server, under reduced motion and before the first frame). */
|
|
6
|
+
get(): number;
|
|
7
|
+
/** Called with every new value; returns the unsubscribe function. */
|
|
8
|
+
subscribe(listener: (value: number) => void): () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseScrollProgressOptions {
|
|
11
|
+
/**
|
|
12
|
+
* `"view"` (default): 0 when the element's top meets the viewport bottom, 1 when its bottom leaves the top.
|
|
13
|
+
* `"pin"`: 0 when its top meets the viewport top, 1 when its bottom meets the viewport bottom (the span a sticky child is pinned).
|
|
14
|
+
*/
|
|
15
|
+
mode?: 'view' | 'pin';
|
|
16
|
+
/** Start of the range to re-map to 0–1 (0–1, default 0). */
|
|
17
|
+
start?: number;
|
|
18
|
+
/** End of the range to re-map to 0–1 (0–1, default 1). */
|
|
19
|
+
end?: number;
|
|
20
|
+
/** CSS custom property written on the element (default `"--dt-p"`); `""` writes none. */
|
|
21
|
+
cssVar?: string;
|
|
22
|
+
/** `false` stops tracking and removes the CSS variable (e.g. under reduced motion). Default `true`. */
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
/** Called with each new value (on the frame loop, not in render). */
|
|
25
|
+
onChange?: (progress: number) => void;
|
|
26
|
+
}
|
|
27
|
+
export interface ScrollStageProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLElement>, 'className' | 'children' | 'onProgress'> {
|
|
28
|
+
/** Scroll distance of the scene in vh (viewport heights) on desktop. Default 300 (token `scroll.sceneLength`). */
|
|
29
|
+
length?: number;
|
|
30
|
+
/** Scene length below `md`. Default 150 (token `scroll.sceneLengthMobile`). */
|
|
31
|
+
mobileLength?: number;
|
|
32
|
+
/** Pin the content (`sticky top-0 h-screen`) while the scene scrolls. `false` renders it in normal flow. Default `true`. */
|
|
33
|
+
pin?: boolean;
|
|
34
|
+
/** Content, or a function that receives the live `ScrollProgress`. Inside, CSS can read `var(--dt-p, 1)`. */
|
|
35
|
+
children?: ReactNode | ((progress: ScrollProgress) => ReactNode);
|
|
36
|
+
/** Called with the scene progress (0–1) on the frame loop. */
|
|
37
|
+
onProgress?: (progress: number) => void;
|
|
38
|
+
/** Classes for the pinned inner box. */
|
|
39
|
+
contentClassName?: string;
|
|
40
|
+
/** Root element. Default `"section"`. */
|
|
41
|
+
as?: ElementType;
|
|
42
|
+
}
|
|
43
|
+
export type RevealEffect = 'fade-up' | 'fade' | 'scale' | 'clip' | 'split-words';
|
|
44
|
+
export interface RevealProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLElement>, 'className'> {
|
|
45
|
+
/** Entrance effect. `split-words` needs a string child. Default `"fade-up"`. */
|
|
46
|
+
effect?: RevealEffect;
|
|
47
|
+
/** Delay before the entrance, in ms. */
|
|
48
|
+
delay?: number;
|
|
49
|
+
/** Delay between words for `split-words`, in ms. Default 40. */
|
|
50
|
+
stagger?: number;
|
|
51
|
+
/** Reveal once (default) or every time the element re-enters the viewport. */
|
|
52
|
+
once?: boolean;
|
|
53
|
+
/** Root element. Default `"div"`. */
|
|
54
|
+
as?: ElementType;
|
|
55
|
+
children?: ReactNode;
|
|
56
|
+
}
|
|
57
|
+
export interface RevealGroupProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLElement>, 'className'> {
|
|
58
|
+
effect?: RevealEffect;
|
|
59
|
+
/** Delay before the first child, in ms. */
|
|
60
|
+
delay?: number;
|
|
61
|
+
/** Delay added per child, in ms. Default 80. */
|
|
62
|
+
stagger?: number;
|
|
63
|
+
once?: boolean;
|
|
64
|
+
/** Group element. Default `"div"`. */
|
|
65
|
+
as?: ElementType;
|
|
66
|
+
/** Element wrapping each child. Default `"div"`. */
|
|
67
|
+
itemAs?: ElementType;
|
|
68
|
+
children?: ReactNode;
|
|
69
|
+
}
|
|
70
|
+
export interface MarqueeLogo {
|
|
71
|
+
src: string;
|
|
72
|
+
alt: string;
|
|
73
|
+
href?: string;
|
|
74
|
+
}
|
|
75
|
+
export type MarqueeItem = string | MarqueeLogo | ReactNode;
|
|
76
|
+
export interface LogoMarqueeProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
77
|
+
/** Logos (`{ src, alt, href? }`), names (strings) or any node. */
|
|
78
|
+
items: MarqueeItem[];
|
|
79
|
+
/** Scroll speed in px per second. Default 40. */
|
|
80
|
+
speed?: number;
|
|
81
|
+
/** Direction of the first row. Default `"left"`. */
|
|
82
|
+
direction?: 'left' | 'right';
|
|
83
|
+
/** Pause while the pointer is over the strip. Default `true`. (It always pauses while focus is inside.) */
|
|
84
|
+
pauseOnHover?: boolean;
|
|
85
|
+
/** Fade the strip's left and right edges. Default `true`. */
|
|
86
|
+
fadeEdges?: boolean;
|
|
87
|
+
/** 1, or 2 rows running in opposite directions. Default 1. */
|
|
88
|
+
rows?: 1 | 2;
|
|
89
|
+
/** Accessible name of the region. Default `"Clients"`. */
|
|
90
|
+
label?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface CountUpProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLSpanElement>, 'className' | 'prefix'> {
|
|
93
|
+
/** The final number (rendered as-is on the server and under reduced motion). */
|
|
94
|
+
value: number;
|
|
95
|
+
/** Number the animation starts from. Default 0. */
|
|
96
|
+
from?: number;
|
|
97
|
+
/** Text before the number, e.g. `"₹"`. */
|
|
98
|
+
prefix?: ReactNode;
|
|
99
|
+
/** Text after the number, e.g. `"+"`, `"%"`, `" Cr"`. */
|
|
100
|
+
suffix?: ReactNode;
|
|
101
|
+
/** Animation length in ms. Default 1600. */
|
|
102
|
+
duration?: number;
|
|
103
|
+
/** Fraction digits. Default: as many as `value` has. */
|
|
104
|
+
decimals?: number;
|
|
105
|
+
/** `Intl.NumberFormat` locale. Default `"en-IN"` (1,00,000 grouping). */
|
|
106
|
+
locale?: string;
|
|
107
|
+
/** Custom formatter; overrides `locale` / `decimals`. */
|
|
108
|
+
format?: (value: number) => string;
|
|
109
|
+
}
|
|
110
|
+
export interface StatItem {
|
|
111
|
+
value: number;
|
|
112
|
+
label: ReactNode;
|
|
113
|
+
prefix?: ReactNode;
|
|
114
|
+
suffix?: ReactNode;
|
|
115
|
+
decimals?: number;
|
|
116
|
+
format?: (value: number) => string;
|
|
117
|
+
}
|
|
118
|
+
export interface StatStripProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLDListElement>, 'className'> {
|
|
119
|
+
items: StatItem[];
|
|
120
|
+
/** `"cards"` (bordered tiles) or `"band"` (one row with dividers). Default `"cards"`. */
|
|
121
|
+
variant?: 'cards' | 'band';
|
|
122
|
+
/** Passed to every CountUp. */
|
|
123
|
+
duration?: number;
|
|
124
|
+
locale?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface StackedCardMedia {
|
|
127
|
+
src: string;
|
|
128
|
+
alt: string;
|
|
129
|
+
}
|
|
130
|
+
export interface StackedCardItem {
|
|
131
|
+
/** Stable key (falls back to the index). */
|
|
132
|
+
id?: string | number;
|
|
133
|
+
kicker?: ReactNode;
|
|
134
|
+
title: ReactNode;
|
|
135
|
+
body?: ReactNode;
|
|
136
|
+
bullets?: ReactNode[];
|
|
137
|
+
metric?: {
|
|
138
|
+
value: ReactNode;
|
|
139
|
+
label: ReactNode;
|
|
140
|
+
};
|
|
141
|
+
cta?: ReactNode;
|
|
142
|
+
media?: StackedCardMedia | ReactNode;
|
|
143
|
+
}
|
|
144
|
+
export interface StackedCardsProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLOListElement>, 'className'> {
|
|
145
|
+
items: StackedCardItem[];
|
|
146
|
+
/** px from the viewport top where cards stick. Default 80 (token `scroll.stickyTop`). */
|
|
147
|
+
stickyTop?: number;
|
|
148
|
+
/** Alternating tilt in degrees (card 1 −tilt, card 2 +tilt…). 0 disables. Off below `md` and under reduced motion. Default 1. */
|
|
149
|
+
tilt?: number;
|
|
150
|
+
/** Scale of a card fully covered by the next one. 1 disables. Default 0.94. */
|
|
151
|
+
scaleBack?: number;
|
|
152
|
+
/** How much a covered card darkens (0–1). 0 disables. Default 0.15. */
|
|
153
|
+
dimBack?: number;
|
|
154
|
+
/** Media on the right of every card, or alternating sides. Default `"alternate"`. */
|
|
155
|
+
mediaSide?: 'alternate' | 'right';
|
|
156
|
+
/** Replace the default card body. */
|
|
157
|
+
renderItem?: (item: StackedCardItem, index: number) => ReactNode;
|
|
158
|
+
}
|
|
159
|
+
export type DeviceKind = 'phone' | 'tablet' | 'laptop' | 'browser';
|
|
160
|
+
export interface DeviceFrameProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
161
|
+
/** Default `"phone"`. */
|
|
162
|
+
device?: DeviceKind;
|
|
163
|
+
/** Screen content. */
|
|
164
|
+
children?: ReactNode;
|
|
165
|
+
/** Address shown in the `browser` frame's bar. */
|
|
166
|
+
url?: string;
|
|
167
|
+
/** Classes for the screen box. */
|
|
168
|
+
screenClassName?: string;
|
|
169
|
+
}
|
|
170
|
+
export interface DeviceMorphMedia {
|
|
171
|
+
/** Video URL (muted, looping, inline). */
|
|
172
|
+
video?: string;
|
|
173
|
+
/** Image URL (used when there is no video). */
|
|
174
|
+
image?: string;
|
|
175
|
+
/** Poster for the video. */
|
|
176
|
+
poster?: string;
|
|
177
|
+
/** Text alternative. Empty string marks the media decorative. */
|
|
178
|
+
alt?: string;
|
|
179
|
+
}
|
|
180
|
+
export interface DeviceMorphHeroProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLElement>, 'className' | 'content'> {
|
|
181
|
+
media: DeviceMorphMedia;
|
|
182
|
+
/** Default `"phone"`. */
|
|
183
|
+
device?: DeviceKind;
|
|
184
|
+
/** Scene length in vh on desktop (capped at 400). Default 300. */
|
|
185
|
+
length?: number;
|
|
186
|
+
/** Scene length in vh below `md`. Default 150. */
|
|
187
|
+
mobileLength?: number;
|
|
188
|
+
/** Side the device slides to. Default `"right"`. */
|
|
189
|
+
side?: 'right' | 'left';
|
|
190
|
+
/** Copy that fades in beside the device: logo, headline, CTAs, stats. */
|
|
191
|
+
content?: ReactNode;
|
|
192
|
+
/** Label of the skip-ahead button, or `false` to hide it. Default `"Scroll to explore"`. */
|
|
193
|
+
scrollHint?: ReactNode | false;
|
|
194
|
+
}
|
|
195
|
+
export interface BentoItem {
|
|
196
|
+
id?: string | number;
|
|
197
|
+
media: {
|
|
198
|
+
src: string;
|
|
199
|
+
alt: string;
|
|
200
|
+
} | ReactNode;
|
|
201
|
+
title: ReactNode;
|
|
202
|
+
tag?: ReactNode;
|
|
203
|
+
client?: ReactNode;
|
|
204
|
+
/** Makes the tile a link. */
|
|
205
|
+
href?: string;
|
|
206
|
+
}
|
|
207
|
+
export interface BentoExpandGridProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLUListElement>, 'className'> {
|
|
208
|
+
items: BentoItem[];
|
|
209
|
+
/** Columns from `md` up (2–4). Default 3. */
|
|
210
|
+
cols?: 2 | 3 | 4;
|
|
211
|
+
/** Track size of the active tile's row and column, in fr. Default 2. */
|
|
212
|
+
expand?: number;
|
|
213
|
+
/** What expands a tile: hover (and focus), focus only, or click/tap. Default `"hover"`. */
|
|
214
|
+
trigger?: 'hover' | 'focus' | 'click';
|
|
215
|
+
/** Accessible name of the list. */
|
|
216
|
+
label?: string;
|
|
217
|
+
}
|
|
218
|
+
/** The subset of a Lenis instance the provider uses. */
|
|
219
|
+
export interface LenisLike {
|
|
220
|
+
raf(time: number): void;
|
|
221
|
+
destroy(): void;
|
|
222
|
+
scrollTo(target: number | string | HTMLElement, options?: Record<string, unknown>): void;
|
|
223
|
+
}
|
|
224
|
+
export interface SmoothScrollProviderProps {
|
|
225
|
+
/** The Lenis class: `import Lenis from 'lenis'` and pass it. Without it, native scroll is used. */
|
|
226
|
+
lenis?: new (options?: Record<string, unknown>) => LenisLike;
|
|
227
|
+
/** Options for `new Lenis(options)`. */
|
|
228
|
+
options?: Record<string, unknown>;
|
|
229
|
+
/** Default `true`. Always off when the user prefers reduced motion. */
|
|
230
|
+
enabled?: boolean;
|
|
231
|
+
children?: ReactNode;
|
|
232
|
+
}
|
|
233
|
+
export interface SmoothScrollContextValue {
|
|
234
|
+
/** The live Lenis instance, or `null` when native scroll is in use. */
|
|
235
|
+
lenis: LenisLike | null;
|
|
236
|
+
/** Scroll to a y offset, selector or element (Lenis when active, else `window.scrollTo` / `scrollIntoView`). */
|
|
237
|
+
scrollTo(target: number | string | HTMLElement, options?: {
|
|
238
|
+
offset?: number;
|
|
239
|
+
immediate?: boolean;
|
|
240
|
+
}): void;
|
|
241
|
+
}
|
|
242
|
+
export interface TestimonialItem {
|
|
243
|
+
id?: string | number;
|
|
244
|
+
quote: ReactNode;
|
|
245
|
+
name: ReactNode;
|
|
246
|
+
role?: ReactNode;
|
|
247
|
+
/** `{ src, alt }` or a node. */
|
|
248
|
+
logo?: {
|
|
249
|
+
src: string;
|
|
250
|
+
alt: string;
|
|
251
|
+
} | ReactNode;
|
|
252
|
+
}
|
|
253
|
+
export interface TestimonialSpotlightProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLElement>, 'className'> {
|
|
254
|
+
items: TestimonialItem[];
|
|
255
|
+
/** Auto-advance interval in ms; 0 disables. Pauses on hover, focus, off screen and under reduced motion. Default 6000. */
|
|
256
|
+
autoplay?: number;
|
|
257
|
+
/** Show the 3×3 logo tile grid. Default `true`. */
|
|
258
|
+
grid?: boolean;
|
|
259
|
+
/** Accessible name. Default `"Testimonials"`. */
|
|
260
|
+
label?: string;
|
|
261
|
+
}
|
|
262
|
+
export interface CollageImage {
|
|
263
|
+
src: string;
|
|
264
|
+
alt: string;
|
|
265
|
+
}
|
|
266
|
+
export interface CollageChip {
|
|
267
|
+
value: ReactNode;
|
|
268
|
+
label: ReactNode;
|
|
269
|
+
}
|
|
270
|
+
export interface PhotoCollageProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
271
|
+
/** 1–4 photos, placed in overlapping offsets. */
|
|
272
|
+
images: CollageImage[];
|
|
273
|
+
/** Floating stat chips (up to 2). */
|
|
274
|
+
chips?: CollageChip[];
|
|
275
|
+
/** Parallax strength (0–1). 0 disables; off under reduced motion. Default 0.15. */
|
|
276
|
+
parallax?: number;
|
|
277
|
+
/** A node pinned to the top-right corner, e.g. a RotatingBadge. */
|
|
278
|
+
badge?: ReactNode;
|
|
279
|
+
}
|
|
280
|
+
export interface RotatingBadgeProps extends BaseComponentProps, Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
281
|
+
/** Text set around the circle (repeat it with separators: `"DREAMTREE • SINCE 2012 • "`). */
|
|
282
|
+
text: string;
|
|
283
|
+
/** Seconds per turn. Default 14. Stops under reduced motion. */
|
|
284
|
+
speed?: number;
|
|
285
|
+
/** Diameter in px. Default 120. */
|
|
286
|
+
size?: number;
|
|
287
|
+
/** Node in the middle (decorative). */
|
|
288
|
+
icon?: ReactNode;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=motion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../src/types/motion.ts"],"names":[],"mappings":"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"}
|
package/doc/README.md
CHANGED
|
@@ -138,7 +138,7 @@ function App() {
|
|
|
138
138
|
|
|
139
139
|
### Optional entry points (need an optional peer dependency)
|
|
140
140
|
|
|
141
|
-
These are **not** exported from the root package. Import them from their subpath, after installing the peer. Apps that never import them install and bundle nothing extra.
|
|
141
|
+
These are **not** exported from the root package. Import them from their subpath, after installing the peer (if any). Apps that never import them install and bundle nothing extra. The `/motion` components need no peer; see [Motion.md](Motion.md).
|
|
142
142
|
|
|
143
143
|
| Component | Import from | Peer to install | Description | Doc |
|
|
144
144
|
|-----------|-------------|-----------------|-------------|-----|
|
|
@@ -149,6 +149,22 @@ These are **not** exported from the root package. Import them from their subpath
|
|
|
149
149
|
| [Sparkline](Sparkline.md) | `@dreamtree-org/twreact-ui/charts` | `recharts` | Word-sized trend line for cards and cells | [Sparkline.md](Sparkline.md) |
|
|
150
150
|
| [ScatterChart](ScatterChart.md) | `@dreamtree-org/twreact-ui/charts` | `recharts` | Two numeric axes, one point per entity, optional series | [ScatterChart.md](ScatterChart.md) |
|
|
151
151
|
| [RichTextEditor](RichTextEditor.md) | `@dreamtree-org/twreact-ui/rich-text` | `@tiptap/react @tiptap/pm @tiptap/starter-kit` | Tiptap WYSIWYG field with accessible toolbar | [RichTextEditor.md](RichTextEditor.md) |
|
|
152
|
+
| [ScrollStage](ScrollStage.md) | `@dreamtree-org/twreact-ui/motion` | — | Pinned scroll scene; progress in `--dt-p` | [ScrollStage.md](ScrollStage.md) |
|
|
153
|
+
| [Reveal](Reveal.md) | `@dreamtree-org/twreact-ui/motion` | — | Entrance (fade, scale, clip, split words) on scroll-in | [Reveal.md](Reveal.md) |
|
|
154
|
+
| [RevealGroup](RevealGroup.md) | `@dreamtree-org/twreact-ui/motion` | — | Reveals children one after another | [RevealGroup.md](RevealGroup.md) |
|
|
155
|
+
| [LogoMarquee](LogoMarquee.md) | `@dreamtree-org/twreact-ui/motion` | — | Endless logo strip, clone hidden from screen readers | [LogoMarquee.md](LogoMarquee.md) |
|
|
156
|
+
| [CountUp](CountUp.md) | `@dreamtree-org/twreact-ui/motion` | — | Number that counts up on view; final value on the server | [CountUp.md](CountUp.md) |
|
|
157
|
+
| [StatStrip](StatStrip.md) | `@dreamtree-org/twreact-ui/motion` | — | Row of CountUp stats as cards or a band | [StatStrip.md](StatStrip.md) |
|
|
158
|
+
| [StackedCards](StackedCards.md) | `@dreamtree-org/twreact-ui/motion` | — | Sticky cards that stack, shrink and dim on scroll | [StackedCards.md](StackedCards.md) |
|
|
159
|
+
| [DeviceFrame](DeviceFrame.md) | `@dreamtree-org/twreact-ui/motion` | — | CSS phone / tablet / laptop / browser mock-up | [DeviceFrame.md](DeviceFrame.md) |
|
|
160
|
+
| [DeviceMorphHero](DeviceMorphHero.md) | `@dreamtree-org/twreact-ui/motion` | — | Hero: full-bleed media shrinks into a device, copy fades in | [DeviceMorphHero.md](DeviceMorphHero.md) |
|
|
161
|
+
| [BentoExpandGrid](BentoExpandGrid.md) | `@dreamtree-org/twreact-ui/motion` | — | Photo grid whose hovered or focused tile grows | [BentoExpandGrid.md](BentoExpandGrid.md) |
|
|
162
|
+
| [SmoothScrollProvider](SmoothScrollProvider.md) | `@dreamtree-org/twreact-ui/motion` | `lenis` (optional) | Opt-in Lenis smooth scroll; native without it | [SmoothScrollProvider.md](SmoothScrollProvider.md) |
|
|
163
|
+
| [TestimonialSpotlight](TestimonialSpotlight.md) | `@dreamtree-org/twreact-ui/motion` | — | Quotes with a logo tile grid, tabs and pausable autoplay | [TestimonialSpotlight.md](TestimonialSpotlight.md) |
|
|
164
|
+
| [PhotoCollage](PhotoCollage.md) | `@dreamtree-org/twreact-ui/motion` | — | Overlapping photos with stat chips and parallax | [PhotoCollage.md](PhotoCollage.md) |
|
|
165
|
+
| [RotatingBadge](RotatingBadge.md) | `@dreamtree-org/twreact-ui/motion` | — | Circular text badge that slowly turns | [RotatingBadge.md](RotatingBadge.md) |
|
|
166
|
+
| [useScrollProgress](useScrollProgress.md) | `@dreamtree-org/twreact-ui/motion` | — | Hook: 0–1 scroll progress of an element, no re-renders | [useScrollProgress.md](useScrollProgress.md) |
|
|
167
|
+
| [useSmoothScroll](useSmoothScroll.md) | `@dreamtree-org/twreact-ui/motion` | — | Hook: `{ lenis, scrollTo }` from SmoothScrollProvider | [useSmoothScroll.md](useSmoothScroll.md) |
|
|
152
168
|
|
|
153
169
|
---
|
|
154
170
|
|