marqy 1.0.2 → 1.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/README.md +1 -1
- package/dist/core-COOoOGpB.js +21 -0
- package/dist/core-COOoOGpB.js.map +1 -0
- package/dist/core-CuZGUfsl.cjs +2 -0
- package/dist/core-CuZGUfsl.cjs.map +1 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.esm.js +5 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/marqy.css +4 -0
- package/dist/react.cjs.js +2 -0
- package/dist/react.cjs.js.map +1 -0
- package/dist/react.d.ts +15 -0
- package/dist/react.esm.js +60 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/svelte.cjs.js +2 -0
- package/dist/svelte.cjs.js.map +1 -0
- package/dist/svelte.d.ts +7 -0
- package/dist/svelte.esm.js +54 -0
- package/dist/svelte.esm.js.map +1 -0
- package/dist/vanilla.cjs.js +2 -0
- package/dist/vanilla.cjs.js.map +1 -0
- package/dist/vanilla.d.ts +32 -0
- package/dist/vanilla.esm.js +96 -0
- package/dist/vanilla.esm.js.map +1 -0
- package/dist/vue.cjs.js +2 -0
- package/dist/vue.cjs.js.map +1 -0
- package/dist/vue.d.ts +45 -0
- package/dist/vue.esm.js +70 -0
- package/dist/vue.esm.js.map +1 -0
- package/package.json +81 -19
- package/.claude/settings.local.json +0 -13
- package/.prettierrc +0 -6
- package/.vscode/settings.json +0 -3
- package/dist/marqy.d.ts +0 -9
- package/dist/marqy.esm.js +0 -2
- package/dist/marqy.esm.js.map +0 -1
- package/dist/marqy.js +0 -2
- package/dist/marqy.js.map +0 -1
- package/dist/marqy.umd.js +0 -2
- package/dist/marqy.umd.js.map +0 -1
- package/examples/.astro/content-assets.mjs +0 -1
- package/examples/.astro/content-modules.mjs +0 -1
- package/examples/.astro/content.d.ts +0 -154
- package/examples/.astro/data-store.json +0 -1
- package/examples/.astro/fonts/font-akkurat-mono-500-normal-40f4e0ea0b54adc5.woff2 +0 -0
- package/examples/.astro/fonts/font-akkurat-mono-700-normal-b9f40f1447b587bd.woff +0 -0
- package/examples/.astro/fonts/font-grtsk-300-normal-8ef14ca23be6893c.woff2 +0 -0
- package/examples/.astro/fonts/font-grtsk-400-normal-13ba8954073ee64a.woff2 +0 -0
- package/examples/.astro/fonts/font-grtsk-500-normal-d214468daf16245f.woff2 +0 -0
- package/examples/.astro/fonts/font-grtsk-wide-500-normal-6f8c2658b9c2ba8e.woff2 +0 -0
- package/examples/.astro/fonts/font-grtsk-wide-700-normal-17406f09c7b68ca3.woff2 +0 -0
- package/examples/.astro/fonts.d.ts +0 -4
- package/examples/.astro/settings.json +0 -5
- package/examples/.astro/types.d.ts +0 -3
- package/examples/.yarnrc +0 -1
- package/examples/astro.config.mjs +0 -101
- package/examples/package.json +0 -30
- package/examples/public/apple-touch-icon.png +0 -0
- package/examples/public/favicon.ico +0 -0
- package/examples/public/favicon.svg +0 -4
- package/examples/public/marqy-logo.svg +0 -35
- package/examples/src/assets/baggu.jpg +0 -0
- package/examples/src/assets/bluesky.jpg +0 -0
- package/examples/src/assets/clams-lol.jpg +0 -0
- package/examples/src/assets/coconut-club-2.jpg +0 -0
- package/examples/src/assets/coconut-club.jpg +0 -0
- package/examples/src/assets/lucci.jpg +0 -0
- package/examples/src/assets/phila-museum.jpg +0 -0
- package/examples/src/assets/red-rooster.jpg +0 -0
- package/examples/src/assets/sanity.jpg +0 -0
- package/examples/src/assets/usal.jpg +0 -0
- package/examples/src/assets/vacation.jpg +0 -0
- package/examples/src/components/CopyButton.tsx +0 -26
- package/examples/src/components/Divider.tsx +0 -3
- package/examples/src/components/Footer.astro +0 -7
- package/examples/src/components/InUse.astro +0 -89
- package/examples/src/components/InUseExamples.tsx +0 -60
- package/examples/src/components/MarqyCredits.tsx +0 -33
- package/examples/src/components/MarqyHero.tsx +0 -77
- package/examples/src/components/MarqyInteractiveDemo.tsx +0 -46
- package/examples/src/components/MarqyPlayground.tsx +0 -496
- package/examples/src/components/MarqySpeedDemo.tsx +0 -34
- package/examples/src/components/MarqyVerticalDemo.tsx +0 -44
- package/examples/src/components/Playground.astro +0 -11
- package/examples/src/components/QuickStart.astro +0 -59
- package/examples/src/components/SectionHeadline.tsx +0 -41
- package/examples/src/components/Tile.tsx +0 -32
- package/examples/src/content.config.ts +0 -3
- package/examples/src/fonts/Akkurat-Mono-Bold.woff +0 -0
- package/examples/src/fonts/Akkurat-Mono.woff +0 -0
- package/examples/src/fonts/Akkurat-Mono.woff2 +0 -0
- package/examples/src/fonts/Grtsk-Peta-Light.woff +0 -0
- package/examples/src/fonts/Grtsk-Peta-Light.woff2 +0 -0
- package/examples/src/fonts/Grtsk-Peta-Medium.woff +0 -0
- package/examples/src/fonts/Grtsk-Peta-Medium.woff2 +0 -0
- package/examples/src/fonts/Grtsk-Peta-Regular.woff +0 -0
- package/examples/src/fonts/Grtsk-Peta-Regular.woff2 +0 -0
- package/examples/src/fonts/Grtsk-Tera-Bold.woff +0 -0
- package/examples/src/fonts/Grtsk-Tera-Bold.woff2 +0 -0
- package/examples/src/fonts/Grtsk-Tera-Medium.woff +0 -0
- package/examples/src/fonts/Grtsk-Tera-Medium.woff2 +0 -0
- package/examples/src/layouts/layout.astro +0 -107
- package/examples/src/lib/cn.ts +0 -16
- package/examples/src/lib/helpers.ts +0 -13
- package/examples/src/lib/hooks/useCopyText.ts +0 -47
- package/examples/src/pages/index.astro +0 -56
- package/examples/src/styles/_base.css +0 -155
- package/examples/src/styles/_components.css +0 -123
- package/examples/src/styles/_utilities.css +0 -23
- package/examples/src/styles/app.css +0 -397
- package/examples/tsconfig.json +0 -3
- package/examples/yarn.lock +0 -3316
- package/marqy.css +0 -131
- package/src/marqy.tsx +0 -97
- package/tsconfig.json +0 -9
package/marqy.css
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
[data-marqy] {
|
|
2
|
-
position: relative;
|
|
3
|
-
width: 100%;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
[data-marqy][data-direction='left'],
|
|
7
|
-
[data-marqy][data-direction='right'] {
|
|
8
|
-
overflow-x: clip;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
[data-marqy][data-direction='up'],
|
|
12
|
-
[data-marqy][data-direction='down'] {
|
|
13
|
-
overflow-y: clip;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
[data-marqy-inner] {
|
|
17
|
-
display: flex;
|
|
18
|
-
-ms-overflow-style: none;
|
|
19
|
-
scrollbar-width: none;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
[data-marqy][data-direction='up'] [data-marqy-inner],
|
|
23
|
-
[data-marqy][data-direction='down'] [data-marqy-inner],
|
|
24
|
-
[data-marqy][data-direction='up'] [data-marqy-content],
|
|
25
|
-
[data-marqy][data-direction='down'] [data-marqy-content] {
|
|
26
|
-
flex-direction: column;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
[data-marqy-inner]::-webkit-scrollbar {
|
|
30
|
-
display: none;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
[data-marqy][data-direction='right'] [data-marqy-inner] {
|
|
34
|
-
justify-content: flex-end;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
[data-marqy][data-direction='down'] [data-marqy-inner],
|
|
38
|
-
[data-marqy][data-direction='down'] [data-marqy-content] {
|
|
39
|
-
justify-content: flex-end;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
[data-marqy-content] {
|
|
43
|
-
display: flex;
|
|
44
|
-
flex: 1 0 auto;
|
|
45
|
-
animation-timing-function: linear;
|
|
46
|
-
animation-iteration-count: infinite;
|
|
47
|
-
animation-play-state: running;
|
|
48
|
-
will-change: transform;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
[data-marqy-static] [data-marqy-content] {
|
|
52
|
-
animation: none !important;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
[data-marqy][data-direction='left'] [data-marqy-content] {
|
|
56
|
-
animation-name: marqyL;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
[data-marqy][data-direction='right'] [data-marqy-content] {
|
|
60
|
-
animation-name: marqyR;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
[data-marqy][data-direction='up'] [data-marqy-content] {
|
|
64
|
-
animation-name: marqyU;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
[data-marqy][data-direction='down'] [data-marqy-content] {
|
|
68
|
-
animation-name: marqyD;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
[data-marqy][data-pause-on-hover]:hover
|
|
72
|
-
> [data-marqy-inner]
|
|
73
|
-
> [data-marqy-content] {
|
|
74
|
-
animation-play-state: paused;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
[data-marqy-item] {
|
|
78
|
-
flex-grow: 0;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@keyframes marqyL {
|
|
82
|
-
0% {
|
|
83
|
-
transform: translate3d(0, 0, 0);
|
|
84
|
-
}
|
|
85
|
-
100% {
|
|
86
|
-
transform: translate3d(-100%, 0, 0);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
@keyframes marqyR {
|
|
91
|
-
0% {
|
|
92
|
-
transform: translate3d(0, 0, 0);
|
|
93
|
-
}
|
|
94
|
-
100% {
|
|
95
|
-
transform: translate3d(100%, 0, 0);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@keyframes marqyU {
|
|
100
|
-
0% {
|
|
101
|
-
transform: translate3d(0, 0, 0);
|
|
102
|
-
}
|
|
103
|
-
100% {
|
|
104
|
-
transform: translate3d(0, -100%, 0);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@keyframes marqyD {
|
|
109
|
-
0% {
|
|
110
|
-
transform: translate3d(0, -100%, 0);
|
|
111
|
-
}
|
|
112
|
-
100% {
|
|
113
|
-
transform: translate3d(0, 0, 0);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@media (prefers-reduced-motion) {
|
|
118
|
-
[data-marqy][data-direction='left'] [data-marqy-inner],
|
|
119
|
-
[data-marqy][data-direction='right'] [data-marqy-inner] {
|
|
120
|
-
overflow-x: scroll;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
[data-marqy][data-direction='up'],
|
|
124
|
-
[data-marqy][data-direction='down'] {
|
|
125
|
-
overflow-y: scroll;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
[data-marqy-content] {
|
|
129
|
-
animation: none !important;
|
|
130
|
-
}
|
|
131
|
-
}
|
package/src/marqy.tsx
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
|
|
3
|
-
export interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
4
|
-
speed?: number
|
|
5
|
-
direction?: 'left' | 'right' | 'up' | 'down'
|
|
6
|
-
pauseOnHover?: boolean
|
|
7
|
-
manual?: boolean
|
|
8
|
-
children: React.ReactNode
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function Marqy({
|
|
12
|
-
speed = 0.5,
|
|
13
|
-
direction = 'left',
|
|
14
|
-
pauseOnHover,
|
|
15
|
-
manual = false,
|
|
16
|
-
children,
|
|
17
|
-
...rest
|
|
18
|
-
}: MarqyProps): React.ReactElement {
|
|
19
|
-
const [reps, setReps] = React.useState(1)
|
|
20
|
-
|
|
21
|
-
const [container, containerDimensions] = useDimensions()
|
|
22
|
-
const [item, itemDimensions] = useDimensions()
|
|
23
|
-
|
|
24
|
-
const isVertical = direction === 'up' || direction === 'down'
|
|
25
|
-
|
|
26
|
-
const getAnimationDuration = React.useCallback(
|
|
27
|
-
(itemDimension: number) => {
|
|
28
|
-
return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`
|
|
29
|
-
},
|
|
30
|
-
[reps, speed]
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
React.useEffect(() => {
|
|
34
|
-
if (!isVertical && containerDimensions.width && itemDimensions.width) {
|
|
35
|
-
setReps(Math.ceil(containerDimensions.width / itemDimensions.width))
|
|
36
|
-
}
|
|
37
|
-
if (isVertical && containerDimensions.height && itemDimensions.height) {
|
|
38
|
-
setReps(Math.ceil(containerDimensions.height / itemDimensions.height))
|
|
39
|
-
}
|
|
40
|
-
}, [isVertical, containerDimensions, itemDimensions])
|
|
41
|
-
|
|
42
|
-
return (
|
|
43
|
-
<div
|
|
44
|
-
ref={container}
|
|
45
|
-
data-marqy=""
|
|
46
|
-
data-direction={direction}
|
|
47
|
-
data-pause-on-hover={pauseOnHover ? '' : null}
|
|
48
|
-
{...rest}
|
|
49
|
-
>
|
|
50
|
-
<div data-marqy-inner="">
|
|
51
|
-
{new Array(2).fill(0).map((_, clone) => (
|
|
52
|
-
<div
|
|
53
|
-
key={clone}
|
|
54
|
-
data-marqy-content=""
|
|
55
|
-
{...(manual
|
|
56
|
-
? { 'data-marqy-static': getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) }
|
|
57
|
-
: { style: { animationDuration: getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) } }
|
|
58
|
-
)}
|
|
59
|
-
>
|
|
60
|
-
{new Array(reps).fill(0).map((_, rep) => {
|
|
61
|
-
const isFirstItem = clone === 0 && rep === 0
|
|
62
|
-
return (
|
|
63
|
-
<div
|
|
64
|
-
key={rep}
|
|
65
|
-
ref={isFirstItem ? item : null}
|
|
66
|
-
aria-hidden={!isFirstItem || null}
|
|
67
|
-
data-marqy-item=""
|
|
68
|
-
>
|
|
69
|
-
{children}
|
|
70
|
-
</div>
|
|
71
|
-
)
|
|
72
|
-
})}
|
|
73
|
-
</div>
|
|
74
|
-
))}
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function useDimensions() {
|
|
81
|
-
const [dimensions, setDimensions] = React.useState({ width: 0, height: 0 })
|
|
82
|
-
const observer = React.useRef<ResizeObserver | null>(null)
|
|
83
|
-
|
|
84
|
-
const ref = React.useCallback((node: HTMLElement | null) => {
|
|
85
|
-
observer.current?.disconnect()
|
|
86
|
-
if (!node) return
|
|
87
|
-
observer.current = new ResizeObserver(([entry]) =>
|
|
88
|
-
setDimensions({
|
|
89
|
-
width: entry.contentRect.width,
|
|
90
|
-
height: entry.contentRect.height,
|
|
91
|
-
})
|
|
92
|
-
)
|
|
93
|
-
observer.current.observe(node)
|
|
94
|
-
}, [])
|
|
95
|
-
|
|
96
|
-
return [ref, dimensions] as const
|
|
97
|
-
}
|