marqy 1.0.3 → 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/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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function r(t, e) {
|
|
2
|
+
return e > 0 ? Math.ceil(t / e) : 1;
|
|
3
|
+
}
|
|
4
|
+
function i(t, e, n) {
|
|
5
|
+
return `${(t ?? 0) * e / (100 * n)}s`;
|
|
6
|
+
}
|
|
7
|
+
function o(t, e) {
|
|
8
|
+
const n = new ResizeObserver(
|
|
9
|
+
([c]) => e({
|
|
10
|
+
width: c.contentRect.width,
|
|
11
|
+
height: c.contentRect.height
|
|
12
|
+
})
|
|
13
|
+
);
|
|
14
|
+
return n.observe(t), () => n.disconnect();
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
r as a,
|
|
18
|
+
o as b,
|
|
19
|
+
i as c
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=core-COOoOGpB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-COOoOGpB.js","sources":["../src/core.ts"],"sourcesContent":["export type MarqyDirection = 'left' | 'right' | 'up' | 'down'\n\nexport interface MarqyDimensions {\n width: number\n height: number\n}\n\nexport function calcReps(containerSize: number, itemSize: number): number {\n return itemSize > 0 ? Math.ceil(containerSize / itemSize) : 1\n}\n\nexport function calcAnimationDuration(\n itemDimension: number,\n reps: number,\n speed: number\n): string {\n return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`\n}\n\nexport function createResizeObserver(\n node: Element,\n callback: (dims: MarqyDimensions) => void\n): () => void {\n const ro = new ResizeObserver(([entry]) =>\n callback({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n )\n ro.observe(node)\n return () => ro.disconnect()\n}\n"],"names":["calcReps","containerSize","itemSize","calcAnimationDuration","itemDimension","reps","speed","createResizeObserver","node","callback","ro","entry"],"mappings":"AAOO,SAASA,EAASC,GAAuBC,GAA0B;AACxE,SAAOA,IAAW,IAAI,KAAK,KAAKD,IAAgBC,CAAQ,IAAI;AAC9D;AAEO,SAASC,EACdC,GACAC,GACAC,GACQ;AACR,SAAO,IAAKF,KAAiB,KAAKC,KAAS,MAAMC,EAAM;AACzD;AAEO,SAASC,EACdC,GACAC,GACY;AACZ,QAAMC,IAAK,IAAI;AAAA,IAAe,CAAC,CAACC,CAAK,MACnCF,EAAS;AAAA,MACP,OAAOE,EAAM,YAAY;AAAA,MACzB,QAAQA,EAAM,YAAY;AAAA,IAAA,CAC3B;AAAA,EAAA;AAEH,SAAAD,EAAG,QAAQF,CAAI,GACR,MAAME,EAAG,WAAA;AAClB;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function r(t,e){return e>0?Math.ceil(t/e):1}function i(t,e,c){return`${(t??0)*e/(100*c)}s`}function s(t,e){const c=new ResizeObserver(([n])=>e({width:n.contentRect.width,height:n.contentRect.height}));return c.observe(t),()=>c.disconnect()}exports.calcAnimationDuration=i;exports.calcReps=r;exports.createResizeObserver=s;
|
|
2
|
+
//# sourceMappingURL=core-CuZGUfsl.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-CuZGUfsl.cjs","sources":["../src/core.ts"],"sourcesContent":["export type MarqyDirection = 'left' | 'right' | 'up' | 'down'\n\nexport interface MarqyDimensions {\n width: number\n height: number\n}\n\nexport function calcReps(containerSize: number, itemSize: number): number {\n return itemSize > 0 ? Math.ceil(containerSize / itemSize) : 1\n}\n\nexport function calcAnimationDuration(\n itemDimension: number,\n reps: number,\n speed: number\n): string {\n return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`\n}\n\nexport function createResizeObserver(\n node: Element,\n callback: (dims: MarqyDimensions) => void\n): () => void {\n const ro = new ResizeObserver(([entry]) =>\n callback({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n )\n ro.observe(node)\n return () => ro.disconnect()\n}\n"],"names":["calcReps","containerSize","itemSize","calcAnimationDuration","itemDimension","reps","speed","createResizeObserver","node","callback","ro","entry"],"mappings":"aAOO,SAASA,EAASC,EAAuBC,EAA0B,CACxE,OAAOA,EAAW,EAAI,KAAK,KAAKD,EAAgBC,CAAQ,EAAI,CAC9D,CAEO,SAASC,EACdC,EACAC,EACAC,EACQ,CACR,MAAO,IAAKF,GAAiB,GAAKC,GAAS,IAAMC,EAAM,GACzD,CAEO,SAASC,EACdC,EACAC,EACY,CACZ,MAAMC,EAAK,IAAI,eAAe,CAAC,CAACC,CAAK,IACnCF,EAAS,CACP,MAAOE,EAAM,YAAY,MACzB,OAAQA,EAAM,YAAY,MAAA,CAC3B,CAAA,EAEH,OAAAD,EAAG,QAAQF,CAAI,EACR,IAAME,EAAG,WAAA,CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React_2 from 'react';
|
|
2
|
+
|
|
3
|
+
export declare function Marqy({ speed, direction, pauseOnHover, manual, children, ...rest }: MarqyProps): React_2.ReactElement;
|
|
4
|
+
|
|
5
|
+
export declare type MarqyDirection = 'left' | 'right' | 'up' | 'down';
|
|
6
|
+
|
|
7
|
+
export declare interface MarqyProps extends React_2.ComponentPropsWithoutRef<'div'> {
|
|
8
|
+
speed?: number;
|
|
9
|
+
direction?: MarqyDirection;
|
|
10
|
+
pauseOnHover?: boolean;
|
|
11
|
+
manual?: boolean;
|
|
12
|
+
children: React_2.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/marqy.css
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),v=require("react"),d=require("./core-CuZGUfsl.cjs");function D(t){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,a.get?a:{enumerable:!0,get:()=>t[e]})}}return i.default=t,Object.freeze(i)}const r=D(v);function O({speed:t=.5,direction:i="left",pauseOnHover:e,manual:a=!1,children:o,...u}){const[h,f]=r.useState(1),[j,s]=w(),[q,n]=w(),c=i==="up"||i==="down",m=r.useCallback(g=>d.calcAnimationDuration(g,h,t),[h,t]);return r.useEffect(()=>{!c&&s.width&&n.width&&f(d.calcReps(s.width,n.width)),c&&s.height&&n.height&&f(d.calcReps(s.height,n.height))},[c,s,n]),l.jsx("div",{ref:j,"data-marqy":"","data-direction":i,"data-pause-on-hover":e?"":null,...u,children:l.jsx("div",{"data-marqy-inner":"",children:new Array(2).fill(0).map((g,y)=>l.jsx("div",{"data-marqy-content":"",...a?{"data-marqy-static":m(c?n.height:n.width)}:{style:{animationDuration:m(c?n.height:n.width)}},children:new Array(h).fill(0).map((R,p)=>{const b=y===0&&p===0;return l.jsx("div",{ref:b?q:null,"aria-hidden":!b||void 0,"data-marqy-item":"",children:o},p)})},y))})})}function w(){const[t,i]=r.useState({width:0,height:0}),e=r.useRef(null);return[r.useCallback(o=>{var u;(u=e.current)==null||u.call(e),o&&(e.current=d.createResizeObserver(o,i))},[]),t]}exports.Marqy=O;
|
|
2
|
+
//# sourceMappingURL=react.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.cjs.js","sources":["../src/react/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n type MarqyDirection,\n type MarqyDimensions,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n} from '../core'\n\nexport type { MarqyDirection }\n\nexport interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {\n speed?: number\n direction?: MarqyDirection\n pauseOnHover?: boolean\n manual?: boolean\n children: React.ReactNode\n}\n\nexport function Marqy({\n speed = 0.5,\n direction = 'left',\n pauseOnHover,\n manual = false,\n children,\n ...rest\n}: MarqyProps): React.ReactElement {\n const [reps, setReps] = React.useState(1)\n\n const [container, containerDimensions] = useDimensions()\n const [item, itemDimensions] = useDimensions()\n\n const isVertical = direction === 'up' || direction === 'down'\n\n const getAnimationDuration = React.useCallback(\n (itemDimension: number) => calcAnimationDuration(itemDimension, reps, speed),\n [reps, speed]\n )\n\n React.useEffect(() => {\n if (!isVertical && containerDimensions.width && itemDimensions.width) {\n setReps(calcReps(containerDimensions.width, itemDimensions.width))\n }\n if (isVertical && containerDimensions.height && itemDimensions.height) {\n setReps(calcReps(containerDimensions.height, itemDimensions.height))\n }\n }, [isVertical, containerDimensions, itemDimensions])\n\n return (\n <div\n ref={container}\n data-marqy=\"\"\n data-direction={direction}\n data-pause-on-hover={pauseOnHover ? '' : null}\n {...rest}\n >\n <div data-marqy-inner=\"\">\n {new Array(2).fill(0).map((_, clone) => (\n <div\n key={clone}\n data-marqy-content=\"\"\n {...(manual\n ? { 'data-marqy-static': getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) }\n : { style: { animationDuration: getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) } }\n )}\n >\n {new Array(reps).fill(0).map((_, rep) => {\n const isFirstItem = clone === 0 && rep === 0\n return (\n <div\n key={rep}\n ref={isFirstItem ? item : null}\n aria-hidden={!isFirstItem || undefined}\n data-marqy-item=\"\"\n >\n {children}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction useDimensions() {\n const [dimensions, setDimensions] = React.useState<MarqyDimensions>({ width: 0, height: 0 })\n const cleanupRef = React.useRef<(() => void) | null>(null)\n\n const ref = React.useCallback((node: HTMLElement | null) => {\n cleanupRef.current?.()\n if (!node) return\n cleanupRef.current = createResizeObserver(node, setDimensions)\n }, [])\n\n return [ref, dimensions] as const\n}\n"],"names":["Marqy","speed","direction","pauseOnHover","manual","children","rest","reps","setReps","React","container","containerDimensions","useDimensions","item","itemDimensions","isVertical","getAnimationDuration","itemDimension","calcAnimationDuration","calcReps","jsx","_","clone","rep","isFirstItem","dimensions","setDimensions","cleanupRef","node","_a","createResizeObserver"],"mappings":"mcAmBO,SAASA,EAAM,CACpB,MAAAC,EAAQ,GACR,UAAAC,EAAY,OACZ,aAAAC,EACA,OAAAC,EAAS,GACT,SAAAC,EACA,GAAGC,CACL,EAAmC,CACjC,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAM,SAAS,CAAC,EAElC,CAACC,EAAWC,CAAmB,EAAIC,EAAA,EACnC,CAACC,EAAMC,CAAc,EAAIF,EAAA,EAEzBG,EAAab,IAAc,MAAQA,IAAc,OAEjDc,EAAuBP,EAAM,YAChCQ,GAA0BC,EAAAA,sBAAsBD,EAAeV,EAAMN,CAAK,EAC3E,CAACM,EAAMN,CAAK,CAAA,EAGdQ,OAAAA,EAAM,UAAU,IAAM,CAChB,CAACM,GAAcJ,EAAoB,OAASG,EAAe,OAC7DN,EAAQW,EAAAA,SAASR,EAAoB,MAAOG,EAAe,KAAK,CAAC,EAE/DC,GAAcJ,EAAoB,QAAUG,EAAe,QAC7DN,EAAQW,EAAAA,SAASR,EAAoB,OAAQG,EAAe,MAAM,CAAC,CAEvE,EAAG,CAACC,EAAYJ,EAAqBG,CAAc,CAAC,EAGlDM,EAAAA,IAAC,MAAA,CACC,IAAKV,EACL,aAAW,GACX,iBAAgBR,EAChB,sBAAqBC,EAAe,GAAK,KACxC,GAAGG,EAEJ,SAAAc,EAAAA,IAAC,MAAA,CAAI,mBAAiB,GACnB,aAAI,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAACC,EAAGC,IAC5BF,EAAAA,IAAC,MAAA,CAEC,qBAAmB,GAClB,GAAIhB,EACD,CAAE,oBAAqBY,EAAqBD,EAAaD,EAAe,OAASA,EAAe,KAAK,CAAA,EACrG,CAAE,MAAO,CAAE,kBAAmBE,EAAqBD,EAAaD,EAAe,OAASA,EAAe,KAAK,EAAE,EAGjH,SAAA,IAAI,MAAMP,CAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAACc,EAAGE,IAAQ,CACvC,MAAMC,EAAcF,IAAU,GAAKC,IAAQ,EAC3C,OACEH,EAAAA,IAAC,MAAA,CAEC,IAAKI,EAAcX,EAAO,KAC1B,cAAa,CAACW,GAAe,OAC7B,kBAAgB,GAEf,SAAAnB,CAAA,EALIkB,CAAA,CAQX,CAAC,CAAA,EAnBID,CAAA,CAqBR,CAAA,CACH,CAAA,CAAA,CAGN,CAEA,SAASV,GAAgB,CACvB,KAAM,CAACa,EAAYC,CAAa,EAAIjB,EAAM,SAA0B,CAAE,MAAO,EAAG,OAAQ,EAAG,EACrFkB,EAAalB,EAAM,OAA4B,IAAI,EAQzD,MAAO,CANKA,EAAM,YAAamB,GAA6B,QAC1DC,EAAAF,EAAW,UAAX,MAAAE,EAAA,KAAAF,GACKC,IACLD,EAAW,QAAUG,uBAAqBF,EAAMF,CAAa,EAC/D,EAAG,CAAA,CAAE,EAEQD,CAAU,CACzB"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React_2 from 'react';
|
|
2
|
+
|
|
3
|
+
export declare function Marqy({ speed, direction, pauseOnHover, manual, children, ...rest }: MarqyProps): React_2.ReactElement;
|
|
4
|
+
|
|
5
|
+
export declare type MarqyDirection = 'left' | 'right' | 'up' | 'down';
|
|
6
|
+
|
|
7
|
+
export declare interface MarqyProps extends React_2.ComponentPropsWithoutRef<'div'> {
|
|
8
|
+
speed?: number;
|
|
9
|
+
direction?: MarqyDirection;
|
|
10
|
+
pauseOnHover?: boolean;
|
|
11
|
+
manual?: boolean;
|
|
12
|
+
children: React_2.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { }
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as h } from "react/jsx-runtime";
|
|
2
|
+
import * as e from "react";
|
|
3
|
+
import { c as b, a as p, b as A } from "./core-COOoOGpB.js";
|
|
4
|
+
function C({
|
|
5
|
+
speed: s = 0.5,
|
|
6
|
+
direction: a = "left",
|
|
7
|
+
pauseOnHover: i,
|
|
8
|
+
manual: d = !1,
|
|
9
|
+
children: o,
|
|
10
|
+
...c
|
|
11
|
+
}) {
|
|
12
|
+
const [m, u] = e.useState(1), [D, n] = v(), [q, t] = v(), r = a === "up" || a === "down", l = e.useCallback(
|
|
13
|
+
(f) => b(f, m, s),
|
|
14
|
+
[m, s]
|
|
15
|
+
);
|
|
16
|
+
return e.useEffect(() => {
|
|
17
|
+
!r && n.width && t.width && u(p(n.width, t.width)), r && n.height && t.height && u(p(n.height, t.height));
|
|
18
|
+
}, [r, n, t]), /* @__PURE__ */ h(
|
|
19
|
+
"div",
|
|
20
|
+
{
|
|
21
|
+
ref: D,
|
|
22
|
+
"data-marqy": "",
|
|
23
|
+
"data-direction": a,
|
|
24
|
+
"data-pause-on-hover": i ? "" : null,
|
|
25
|
+
...c,
|
|
26
|
+
children: /* @__PURE__ */ h("div", { "data-marqy-inner": "", children: new Array(2).fill(0).map((f, w) => /* @__PURE__ */ h(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
"data-marqy-content": "",
|
|
30
|
+
...d ? { "data-marqy-static": l(r ? t.height : t.width) } : { style: { animationDuration: l(r ? t.height : t.width) } },
|
|
31
|
+
children: new Array(m).fill(0).map((R, y) => {
|
|
32
|
+
const g = w === 0 && y === 0;
|
|
33
|
+
return /* @__PURE__ */ h(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
ref: g ? q : null,
|
|
37
|
+
"aria-hidden": !g || void 0,
|
|
38
|
+
"data-marqy-item": "",
|
|
39
|
+
children: o
|
|
40
|
+
},
|
|
41
|
+
y
|
|
42
|
+
);
|
|
43
|
+
})
|
|
44
|
+
},
|
|
45
|
+
w
|
|
46
|
+
)) })
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function v() {
|
|
51
|
+
const [s, a] = e.useState({ width: 0, height: 0 }), i = e.useRef(null);
|
|
52
|
+
return [e.useCallback((o) => {
|
|
53
|
+
var c;
|
|
54
|
+
(c = i.current) == null || c.call(i), o && (i.current = A(o, a));
|
|
55
|
+
}, []), s];
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
C as Marqy
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=react.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.esm.js","sources":["../src/react/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n type MarqyDirection,\n type MarqyDimensions,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n} from '../core'\n\nexport type { MarqyDirection }\n\nexport interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {\n speed?: number\n direction?: MarqyDirection\n pauseOnHover?: boolean\n manual?: boolean\n children: React.ReactNode\n}\n\nexport function Marqy({\n speed = 0.5,\n direction = 'left',\n pauseOnHover,\n manual = false,\n children,\n ...rest\n}: MarqyProps): React.ReactElement {\n const [reps, setReps] = React.useState(1)\n\n const [container, containerDimensions] = useDimensions()\n const [item, itemDimensions] = useDimensions()\n\n const isVertical = direction === 'up' || direction === 'down'\n\n const getAnimationDuration = React.useCallback(\n (itemDimension: number) => calcAnimationDuration(itemDimension, reps, speed),\n [reps, speed]\n )\n\n React.useEffect(() => {\n if (!isVertical && containerDimensions.width && itemDimensions.width) {\n setReps(calcReps(containerDimensions.width, itemDimensions.width))\n }\n if (isVertical && containerDimensions.height && itemDimensions.height) {\n setReps(calcReps(containerDimensions.height, itemDimensions.height))\n }\n }, [isVertical, containerDimensions, itemDimensions])\n\n return (\n <div\n ref={container}\n data-marqy=\"\"\n data-direction={direction}\n data-pause-on-hover={pauseOnHover ? '' : null}\n {...rest}\n >\n <div data-marqy-inner=\"\">\n {new Array(2).fill(0).map((_, clone) => (\n <div\n key={clone}\n data-marqy-content=\"\"\n {...(manual\n ? { 'data-marqy-static': getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) }\n : { style: { animationDuration: getAnimationDuration(isVertical ? itemDimensions.height : itemDimensions.width) } }\n )}\n >\n {new Array(reps).fill(0).map((_, rep) => {\n const isFirstItem = clone === 0 && rep === 0\n return (\n <div\n key={rep}\n ref={isFirstItem ? item : null}\n aria-hidden={!isFirstItem || undefined}\n data-marqy-item=\"\"\n >\n {children}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction useDimensions() {\n const [dimensions, setDimensions] = React.useState<MarqyDimensions>({ width: 0, height: 0 })\n const cleanupRef = React.useRef<(() => void) | null>(null)\n\n const ref = React.useCallback((node: HTMLElement | null) => {\n cleanupRef.current?.()\n if (!node) return\n cleanupRef.current = createResizeObserver(node, setDimensions)\n }, [])\n\n return [ref, dimensions] as const\n}\n"],"names":["Marqy","speed","direction","pauseOnHover","manual","children","rest","reps","setReps","React","container","containerDimensions","useDimensions","item","itemDimensions","isVertical","getAnimationDuration","itemDimension","calcAnimationDuration","calcReps","jsx","_","clone","rep","isFirstItem","dimensions","setDimensions","cleanupRef","node","_a","createResizeObserver"],"mappings":";;;AAmBO,SAASA,EAAM;AAAA,EACpB,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,cAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,GAAGC;AACL,GAAmC;AACjC,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAM,SAAS,CAAC,GAElC,CAACC,GAAWC,CAAmB,IAAIC,EAAA,GACnC,CAACC,GAAMC,CAAc,IAAIF,EAAA,GAEzBG,IAAab,MAAc,QAAQA,MAAc,QAEjDc,IAAuBP,EAAM;AAAA,IACjC,CAACQ,MAA0BC,EAAsBD,GAAeV,GAAMN,CAAK;AAAA,IAC3E,CAACM,GAAMN,CAAK;AAAA,EAAA;AAGd,SAAAQ,EAAM,UAAU,MAAM;AACpB,IAAI,CAACM,KAAcJ,EAAoB,SAASG,EAAe,SAC7DN,EAAQW,EAASR,EAAoB,OAAOG,EAAe,KAAK,CAAC,GAE/DC,KAAcJ,EAAoB,UAAUG,EAAe,UAC7DN,EAAQW,EAASR,EAAoB,QAAQG,EAAe,MAAM,CAAC;AAAA,EAEvE,GAAG,CAACC,GAAYJ,GAAqBG,CAAc,CAAC,GAGlD,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKV;AAAA,MACL,cAAW;AAAA,MACX,kBAAgBR;AAAA,MAChB,uBAAqBC,IAAe,KAAK;AAAA,MACxC,GAAGG;AAAA,MAEJ,UAAA,gBAAAc,EAAC,OAAA,EAAI,oBAAiB,IACnB,cAAI,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAACC,GAAGC,MAC5B,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,sBAAmB;AAAA,UAClB,GAAIhB,IACD,EAAE,qBAAqBY,EAAqBD,IAAaD,EAAe,SAASA,EAAe,KAAK,EAAA,IACrG,EAAE,OAAO,EAAE,mBAAmBE,EAAqBD,IAAaD,EAAe,SAASA,EAAe,KAAK,IAAE;AAAA,UAGjH,UAAA,IAAI,MAAMP,CAAI,EAAE,KAAK,CAAC,EAAE,IAAI,CAACc,GAAGE,MAAQ;AACvC,kBAAMC,IAAcF,MAAU,KAAKC,MAAQ;AAC3C,mBACE,gBAAAH;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,KAAKI,IAAcX,IAAO;AAAA,gBAC1B,eAAa,CAACW,KAAe;AAAA,gBAC7B,mBAAgB;AAAA,gBAEf,UAAAnB;AAAA,cAAA;AAAA,cALIkB;AAAA,YAAA;AAAA,UAQX,CAAC;AAAA,QAAA;AAAA,QAnBID;AAAA,MAAA,CAqBR,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASV,IAAgB;AACvB,QAAM,CAACa,GAAYC,CAAa,IAAIjB,EAAM,SAA0B,EAAE,OAAO,GAAG,QAAQ,GAAG,GACrFkB,IAAalB,EAAM,OAA4B,IAAI;AAQzD,SAAO,CANKA,EAAM,YAAY,CAACmB,MAA6B;;AAE1D,KADAC,IAAAF,EAAW,YAAX,QAAAE,EAAA,KAAAF,IACKC,MACLD,EAAW,UAAUG,EAAqBF,GAAMF,CAAa;AAAA,EAC/D,GAAG,CAAA,CAAE,GAEQD,CAAU;AACzB;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("svelte/internal/disclose-version");const z=require("svelte/internal/client"),p=require("./core-CuZGUfsl.cjs");function x(a){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const i in a)if(i!=="default"){const n=Object.getOwnPropertyDescriptor(a,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:()=>a[i]})}}return t.default=a,Object.freeze(t)}const e=x(z);var M=e.from_html('<div data-marqy-item=""><!></div>'),H=e.from_html("<div></div>"),P=e.from_html('<div><div data-marqy-inner=""></div></div>');function R(a,t){e.push(t,!0);let i=e.prop(t,"speed",3,.5),n=e.prop(t,"direction",3,"left"),O=e.prop(t,"pauseOnHover",3,!1),q=e.prop(t,"manual",3,!1),w=e.rest_props(t,["$$slots","$$events","$$legacy","speed","direction","pauseOnHover","manual","children"]),l=e.state(null),v=e.state(e.proxy({width:0,height:0})),o=e.state(e.proxy({width:0,height:0})),h=e.state(1);const m=e.derived(()=>n()==="up"||n()==="down"),y=e.derived(()=>p.calcAnimationDuration(e.get(m)?e.get(o).height:e.get(o).width,e.get(h),i()));e.user_effect(()=>{if(e.get(l))return p.createResizeObserver(e.get(l),r=>{e.set(v,r,!0)})}),e.user_effect(()=>{const r=e.get(m)?e.get(v).height:e.get(v).width,d=e.get(m)?e.get(o).height:e.get(o).width;e.set(h,p.calcReps(r,d),!0)});function _(r,d){return d?{destroy:p.createResizeObserver(r,f=>{e.set(o,f,!0)})}:{}}var c=P();e.attribute_effect(c,()=>({"data-marqy":"","data-direction":n(),"data-pause-on-hover":O()?"":void 0,...w}));var b=e.child(c);e.each(b,20,()=>[0,1],e.index,(r,d)=>{var s=H();e.attribute_effect(s,()=>({"data-marqy-content":"",...q()?{"data-marqy-static":e.get(y)}:{style:`animation-duration: ${e.get(y)}`}})),e.each(s,21,()=>Array.from({length:e.get(h)},(f,g)=>g),e.index,(f,g)=>{var u=M(),D=e.child(u);e.snippet(D,()=>t.children),e.reset(u),e.action(u,(S,j)=>_==null?void 0:_(S,j),()=>d===0&&e.get(g)===0),e.template_effect(()=>e.set_attribute(u,"aria-hidden",!(d===0&&e.get(g)===0)||void 0)),e.append(f,u)}),e.reset(s),e.append(r,s)}),e.reset(b),e.reset(c),e.bind_this(c,r=>e.set(l,r),()=>e.get(l)),e.append(a,c),e.pop()}exports.Marqy=R;
|
|
2
|
+
//# sourceMappingURL=svelte.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.cjs.js","sources":["../src/svelte/Marqy.svelte"],"sourcesContent":["<script lang=\"ts\">\n import {\n type MarqyDirection,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n } from '../core'\n import type { Snippet } from 'svelte'\n\n interface Props {\n speed?: number\n direction?: MarqyDirection\n pauseOnHover?: boolean\n manual?: boolean\n children: Snippet\n [key: string]: unknown\n }\n\n let {\n speed = 0.5,\n direction = 'left' as MarqyDirection,\n pauseOnHover = false,\n manual = false,\n children,\n ...rest\n }: Props = $props()\n\n let containerEl = $state<HTMLElement | null>(null)\n let containerDims = $state({ width: 0, height: 0 })\n let itemDims = $state({ width: 0, height: 0 })\n let reps = $state(1)\n\n const isVertical = $derived(direction === 'up' || direction === 'down')\n\n const animationDuration = $derived(\n calcAnimationDuration(\n isVertical ? itemDims.height : itemDims.width,\n reps,\n speed\n )\n )\n\n $effect(() => {\n if (!containerEl) return\n return createResizeObserver(containerEl, (d) => {\n containerDims = d\n })\n })\n\n $effect(() => {\n const cSize = isVertical ? containerDims.height : containerDims.width\n const iSize = isVertical ? itemDims.height : itemDims.width\n reps = calcReps(cSize, iSize)\n })\n\n function observeFirstItem(node: HTMLElement, isFirst: boolean) {\n if (!isFirst) return {}\n const cleanup = createResizeObserver(node, (d) => {\n itemDims = d\n })\n return { destroy: cleanup }\n }\n</script>\n\n<div\n bind:this={containerEl}\n data-marqy=\"\"\n data-direction={direction}\n data-pause-on-hover={pauseOnHover ? '' : undefined}\n {...rest}\n>\n <div data-marqy-inner=\"\">\n {#each [0, 1] as clone}\n <div\n data-marqy-content=\"\"\n {...manual\n ? { 'data-marqy-static': animationDuration }\n : { style: `animation-duration: ${animationDuration}` }}\n >\n {#each Array.from({ length: reps }, (_, i) => i) as rep}\n <div\n use:observeFirstItem={clone === 0 && rep === 0}\n aria-hidden={!(clone === 0 && rep === 0) || undefined}\n data-marqy-item=\"\"\n >\n {@render children()}\n </div>\n {/each}\n </div>\n {/each}\n </div>\n</div>\n"],"names":["speed","direction","pauseOnHover","manual","rest","$","$$props","containerEl","containerDims","itemDims","reps","isVertical","animationDuration","calcAnimationDuration","createResizeObserver","d","cSize","iSize","calcReps","observeFirstItem","node","isFirst","div","root","div_1","clone","div_2","root_1","_","i","rep","div_3","root_2","$$value"],"mappings":"goBAAA,cAmBI,IAAAA,qBAAQ,EAAG,EACXC,yBAAY,MAAM,EAClBC,4BAAe,EAAK,EACpBC,sBAAS,EAAK,EAEXC,EAAIC,EAAA,WAAAC,EAAA,0FAGLC,EAAcF,EAAA,MAA2B,IAAI,EAC7CG,EAAgBH,QAAMA,EAAA,MAAA,CAAG,MAAO,EAAG,OAAQ,CAAC,CAAA,CAAA,EAC5CI,EAAWJ,QAAMA,EAAA,MAAA,CAAG,MAAO,EAAG,OAAQ,CAAC,CAAA,CAAA,EACvCK,EAAOL,EAAA,MAAO,CAAC,EAEb,MAAAM,gBAAsBV,EAAS,IAAK,MAAQA,EAAS,IAAK,MAAM,EAEhEW,EAAiBP,EAAA,QAAA,IACrBQ,EAAAA,sBAAqBR,EAAA,IACnBM,CAAU,QAAGF,CAAQ,EAAC,OAAMJ,EAAA,IAAGI,CAAQ,EAAC,MAAKJ,EAAA,IAC7CK,CAAI,EACJV,EAAK,CAAA,CAAA,EAITK,EAAA,gBAAc,UACPE,CAAW,EACT,OAAAO,EAAAA,qBAAoBT,EAAA,IAACE,CAAW,EAAGQ,GAAM,CAC9CV,EAAA,IAAAG,EAAgBO,EAAC,EAAA,CACnB,CAAC,CACH,CAAC,EAEDV,EAAA,gBAAc,CACN,MAAAW,QAAQL,CAAU,EAAGN,EAAA,IAAAG,CAAa,EAAC,OAASH,EAAA,IAAAG,CAAa,EAAC,MAC1DS,EAAKZ,EAAA,IAAGM,CAAU,EAAAN,EAAA,IAAGI,CAAQ,EAAC,OAAMJ,EAAA,IAAGI,CAAQ,EAAC,MACtDJ,EAAA,IAAAK,EAAOQ,EAAAA,SAASF,EAAOC,CAAK,EAAA,EAAA,CAC9B,CAAC,EAEQ,SAAAE,EAAiBC,EAAmBC,EAAkB,QACxDA,EAII,CAAA,QAHOP,EAAAA,qBAAqBM,EAAOL,GAAM,CAChDV,EAAA,IAAAI,EAAWM,EAAC,EAAA,CACd,CAAC,CACwB,EAJb,CAAA,CAKd,KAGDO,EAAGC,EAAA,qBAAHD,EAAG,KAAA,kCAGcrB,EAAS,wBACJC,IAAe,GAAK,UACrCE,KAEH,IAAAoB,UAPFF,CAAG,EAODjB,EAAA,KAAAmB,EAAG,GAAA,IAAA,CACM,EAAG,CAAC,aAAKC,IAAK,KACnBC,EAAGC,EAAA,qBAAHD,EAAG,KAAA,4BAEEvB,EAAM,EACJ,CAAA,0BAAqBS,CAAiB,CAAA,EACtC,CAAA,mCAA8BA,CAAiB,CAAA,EAAA,KAJtDP,EAAA,KAAAqB,EAAG,GAAA,IAMK,MAAM,MAAO,OAAMrB,EAAA,IAAEK,CAAI,GAAA,CAAKkB,EAAGC,IAAMA,CAAC,aAAKC,IAAG,KACpDC,EAAGC,EAAA,YAAHD,CAAG,sCAAHA,CAAG,EAAH1B,EAAA,OAAA0B,mCACuBN,IAAU,GAACpB,EAAA,IAAIyB,CAAG,IAAK,CAAC,wCAD/CC,EAAG,cAAA,EAEaN,IAAU,SAAKK,CAAG,IAAK,IAAM,MAAS,CAAA,aAFtDC,CAAG,YAPPL,CAAG,aAAHA,CAAG,YAFPF,CAAG,UAPLF,CAAG,cAAHA,EAAGW,GAAA5B,EAAA,IACSE,EAAW0B,CAAA,EAAA,IAAA5B,EAAA,IAAXE,CAAW,CAAA,aADvBe,CAAG,SAFI"}
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import { c as H, b as _, a as A } from "./core-COOoOGpB.js";
|
|
4
|
+
var R = e.from_html('<div data-marqy-item=""><!></div>'), S = e.from_html("<div></div>"), E = e.from_html('<div><div data-marqy-inner=""></div></div>');
|
|
5
|
+
function j(y, a) {
|
|
6
|
+
e.push(a, !0);
|
|
7
|
+
let q = e.prop(a, "speed", 3, 0.5), l = e.prop(a, "direction", 3, "left"), w = e.prop(a, "pauseOnHover", 3, !1), b = e.prop(a, "manual", 3, !1), x = e.rest_props(a, [
|
|
8
|
+
"$$slots",
|
|
9
|
+
"$$events",
|
|
10
|
+
"$$legacy",
|
|
11
|
+
"speed",
|
|
12
|
+
"direction",
|
|
13
|
+
"pauseOnHover",
|
|
14
|
+
"manual",
|
|
15
|
+
"children"
|
|
16
|
+
]), s = e.state(null), h = e.state(e.proxy({ width: 0, height: 0 })), r = e.state(e.proxy({ width: 0, height: 0 })), m = e.state(1);
|
|
17
|
+
const p = e.derived(() => l() === "up" || l() === "down"), f = e.derived(() => H(e.get(p) ? e.get(r).height : e.get(r).width, e.get(m), q()));
|
|
18
|
+
e.user_effect(() => {
|
|
19
|
+
if (e.get(s))
|
|
20
|
+
return _(e.get(s), (t) => {
|
|
21
|
+
e.set(h, t, !0);
|
|
22
|
+
});
|
|
23
|
+
}), e.user_effect(() => {
|
|
24
|
+
const t = e.get(p) ? e.get(h).height : e.get(h).width, i = e.get(p) ? e.get(r).height : e.get(r).width;
|
|
25
|
+
e.set(m, A(t, i), !0);
|
|
26
|
+
});
|
|
27
|
+
function v(t, i) {
|
|
28
|
+
return i ? { destroy: _(t, (c) => {
|
|
29
|
+
e.set(r, c, !0);
|
|
30
|
+
}) } : {};
|
|
31
|
+
}
|
|
32
|
+
var n = E();
|
|
33
|
+
e.attribute_effect(n, () => ({
|
|
34
|
+
"data-marqy": "",
|
|
35
|
+
"data-direction": l(),
|
|
36
|
+
"data-pause-on-hover": w() ? "" : void 0,
|
|
37
|
+
...x
|
|
38
|
+
}));
|
|
39
|
+
var g = e.child(n);
|
|
40
|
+
e.each(g, 20, () => [0, 1], e.index, (t, i) => {
|
|
41
|
+
var d = S();
|
|
42
|
+
e.attribute_effect(d, () => ({
|
|
43
|
+
"data-marqy-content": "",
|
|
44
|
+
...b() ? { "data-marqy-static": e.get(f) } : { style: `animation-duration: ${e.get(f)}` }
|
|
45
|
+
})), e.each(d, 21, () => Array.from({ length: e.get(m) }, (c, u) => u), e.index, (c, u) => {
|
|
46
|
+
var o = R(), D = e.child(o);
|
|
47
|
+
e.snippet(D, () => a.children), e.reset(o), e.action(o, (O, z) => v == null ? void 0 : v(O, z), () => i === 0 && e.get(u) === 0), e.template_effect(() => e.set_attribute(o, "aria-hidden", !(i === 0 && e.get(u) === 0) || void 0)), e.append(c, o);
|
|
48
|
+
}), e.reset(d), e.append(t, d);
|
|
49
|
+
}), e.reset(g), e.reset(n), e.bind_this(n, (t) => e.set(s, t), () => e.get(s)), e.append(y, n), e.pop();
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
j as Marqy
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=svelte.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.esm.js","sources":["../src/svelte/Marqy.svelte"],"sourcesContent":["<script lang=\"ts\">\n import {\n type MarqyDirection,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n } from '../core'\n import type { Snippet } from 'svelte'\n\n interface Props {\n speed?: number\n direction?: MarqyDirection\n pauseOnHover?: boolean\n manual?: boolean\n children: Snippet\n [key: string]: unknown\n }\n\n let {\n speed = 0.5,\n direction = 'left' as MarqyDirection,\n pauseOnHover = false,\n manual = false,\n children,\n ...rest\n }: Props = $props()\n\n let containerEl = $state<HTMLElement | null>(null)\n let containerDims = $state({ width: 0, height: 0 })\n let itemDims = $state({ width: 0, height: 0 })\n let reps = $state(1)\n\n const isVertical = $derived(direction === 'up' || direction === 'down')\n\n const animationDuration = $derived(\n calcAnimationDuration(\n isVertical ? itemDims.height : itemDims.width,\n reps,\n speed\n )\n )\n\n $effect(() => {\n if (!containerEl) return\n return createResizeObserver(containerEl, (d) => {\n containerDims = d\n })\n })\n\n $effect(() => {\n const cSize = isVertical ? containerDims.height : containerDims.width\n const iSize = isVertical ? itemDims.height : itemDims.width\n reps = calcReps(cSize, iSize)\n })\n\n function observeFirstItem(node: HTMLElement, isFirst: boolean) {\n if (!isFirst) return {}\n const cleanup = createResizeObserver(node, (d) => {\n itemDims = d\n })\n return { destroy: cleanup }\n }\n</script>\n\n<div\n bind:this={containerEl}\n data-marqy=\"\"\n data-direction={direction}\n data-pause-on-hover={pauseOnHover ? '' : undefined}\n {...rest}\n>\n <div data-marqy-inner=\"\">\n {#each [0, 1] as clone}\n <div\n data-marqy-content=\"\"\n {...manual\n ? { 'data-marqy-static': animationDuration }\n : { style: `animation-duration: ${animationDuration}` }}\n >\n {#each Array.from({ length: reps }, (_, i) => i) as rep}\n <div\n use:observeFirstItem={clone === 0 && rep === 0}\n aria-hidden={!(clone === 0 && rep === 0) || undefined}\n data-marqy-item=\"\"\n >\n {@render children()}\n </div>\n {/each}\n </div>\n {/each}\n </div>\n</div>\n"],"names":["speed","direction","pauseOnHover","manual","rest","$","$$props","containerEl","containerDims","itemDims","reps","isVertical","animationDuration","calcAnimationDuration","createResizeObserver","d","cSize","iSize","calcReps","observeFirstItem","node","isFirst","div","root","div_1","clone","div_2","root_1","_","i","rep","div_3","root_2","$$value"],"mappings":";;;;iBAAA;;AAmBI,MAAAA,0BAAQ,GAAG,GACXC,8BAAY,MAAM,GAClBC,iCAAe,EAAK,GACpBC,2BAAS,EAAK,GAEXC,IAAIC,EAAA,WAAAC,GAAA;AAAA;;;;;;;;MAGLC,IAAcF,EAAA,MAA2B,IAAI,GAC7CG,IAAgBH,QAAMA,EAAA,MAAA,EAAG,OAAO,GAAG,QAAQ,EAAC,CAAA,CAAA,GAC5CI,IAAWJ,QAAMA,EAAA,MAAA,EAAG,OAAO,GAAG,QAAQ,EAAC,CAAA,CAAA,GACvCK,IAAOL,EAAA,MAAO,CAAC;AAEb,QAAAM,oBAAsBV,EAAS,MAAK,QAAQA,EAAS,MAAK,MAAM,GAEhEW,IAAiBP,EAAA,QAAA,MACrBQ,EAAqBR,EAAA,IACnBM,CAAU,UAAGF,CAAQ,EAAC,SAAMJ,EAAA,IAAGI,CAAQ,EAAC,OAAKJ,EAAA,IAC7CK,CAAI,GACJV,EAAK,CAAA,CAAA;AAIT,EAAAK,EAAA,kBAAc;cACPE,CAAW;AACT,aAAAO,EAAoBT,EAAA,IAACE,CAAW,GAAA,CAAGQ,MAAM;AAC9C,QAAAV,EAAA,IAAAG,GAAgBO,GAAC,EAAA;AAAA,MACnB,CAAC;AAAA,EACH,CAAC,GAEDV,EAAA,kBAAc;AACN,UAAAW,UAAQL,CAAU,IAAGN,EAAA,IAAAG,CAAa,EAAC,SAASH,EAAA,IAAAG,CAAa,EAAC,OAC1DS,IAAKZ,EAAA,IAAGM,CAAU,IAAAN,EAAA,IAAGI,CAAQ,EAAC,SAAMJ,EAAA,IAAGI,CAAQ,EAAC;AACtD,IAAAJ,EAAA,IAAAK,GAAOQ,EAASF,GAAOC,CAAK,GAAA,EAAA;AAAA,EAC9B,CAAC;AAEQ,WAAAE,EAAiBC,GAAmBC,GAAkB;WACxDA,IAII,EAAA,SAHOP,EAAqBM,GAAI,CAAGL,MAAM;AAChD,MAAAV,EAAA,IAAAI,GAAWM,GAAC,EAAA;AAAA,IACd,CAAC,EACwB,IAJb,CAAA;AAAA,EAKd;MAGDO,IAAGC,EAAA;qBAAHD,GAAG,OAAA;AAAA;sBAGcrB,EAAS;AAAA,2BACJC,MAAe,KAAK;AAAA,OACrCE;AAAA;AAEH,MAAAoB,YAPFF,CAAG;AAOD,EAAAjB,EAAA,KAAAmB,GAAG,IAAA,MAAA,CACM,GAAG,CAAC,gBAAKC,MAAK;QACnBC,IAAGC,EAAA;uBAAHD,GAAG,OAAA;AAAA;SAEEvB,EAAM,IACJ,EAAA,2BAAqBS,CAAiB,EAAA,IACtC,EAAA,oCAA8BA,CAAiB,CAAA,GAAA;AAAA,SAJtDP,EAAA,KAAAqB,GAAG,IAAA,MAMK,MAAM,OAAO,QAAMrB,EAAA,IAAEK,CAAI,KAAA,CAAKkB,GAAGC,MAAMA,CAAC,gBAAKC,MAAG;UACpDC,IAAGC,EAAA,eAAHD,CAAG;8CAAHA,CAAG,GAAH1B,EAAA,OAAA0B,iDACuBN,MAAU,KAACpB,EAAA,IAAIyB,CAAG,MAAK,CAAC,2CAD/CC,GAAG,eAAA,EAEaN,MAAU,WAAKK,CAAG,MAAK,MAAM,MAAS,CAAA,eAFtDC,CAAG;AAAA,gBAPPL,CAAG,eAAHA,CAAG;AAAA,cAFPF,CAAG,WAPLF,CAAG,eAAHA,GAAG,CAAAW,MAAA5B,EAAA,IACSE,GAAW0B,CAAA,GAAA,MAAA5B,EAAA,IAAXE,CAAW,CAAA,eADvBe,CAAG;AAFI;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./core-CuZGUfsl.cjs"),o=2,h=class h extends HTMLElement{constructor(){super(...arguments),this._cleanupContainer=null,this._cleanupItem=null,this._containerDims={width:0,height:0},this._itemDims={width:0,height:0},this._reps=1,this._inner=null,this._slotHTML=""}get _speed(){return parseFloat(this.getAttribute("speed")??"0.5")}get _direction(){return this.getAttribute("direction")??"left"}get _pauseOnHover(){return this.hasAttribute("pause-on-hover")}get _manual(){return this.hasAttribute("manual")}get _isVertical(){return this._direction==="up"||this._direction==="down"}connectedCallback(){this._slotHTML=this.innerHTML,this._render(),this._observeResize()}disconnectedCallback(){this._cleanup()}attributeChangedCallback(){this._inner&&this._update()}_render(){this.setAttribute("data-marqy",""),this.setAttribute("data-direction",this._direction),this._pauseOnHover?this.setAttribute("data-pause-on-hover",""):this.removeAttribute("data-pause-on-hover"),this._inner=document.createElement("div"),this._inner.setAttribute("data-marqy-inner","");for(let t=0;t<o;t++){const e=document.createElement("div");e.setAttribute("data-marqy-content",""),this._inner.appendChild(e)}this.innerHTML="",this.appendChild(this._inner),this._buildItems()}_buildItems(){if(!this._inner)return;this._inner.querySelectorAll("[data-marqy-content]").forEach((e,i)=>{e.innerHTML="";for(let s=0;s<this._reps;s++){const a=document.createElement("div");a.setAttribute("data-marqy-item",""),(i!==0||s!==0)&&a.setAttribute("aria-hidden","true"),a.innerHTML=this._slotHTML,e.appendChild(a)}}),this._applyDuration()}_observeResize(){var e,i;(e=this._cleanupContainer)==null||e.call(this),this._cleanupContainer=r.createResizeObserver(this,s=>{this._containerDims=s,this._recalc()});const t=this.querySelector("[data-marqy-item]");t&&((i=this._cleanupItem)==null||i.call(this),this._cleanupItem=r.createResizeObserver(t,s=>{this._itemDims=s,this._recalc()}))}_recalc(){const t=this._isVertical?this._containerDims.height:this._containerDims.width,e=this._isVertical?this._itemDims.height:this._itemDims.width,i=r.calcReps(t,e);i!==this._reps?(this._reps=i,this._buildItems(),this._reObserveItem()):this._applyDuration()}_reObserveItem(){var e;(e=this._cleanupItem)==null||e.call(this);const t=this.querySelector("[data-marqy-item]");t&&(this._cleanupItem=r.createResizeObserver(t,i=>{this._itemDims=i,this._recalc()}))}_applyDuration(){if(!this._inner)return;const t=r.calcAnimationDuration(this._isVertical?this._itemDims.height:this._itemDims.width,this._reps,this._speed);this._inner.querySelectorAll("[data-marqy-content]").forEach(i=>{this._manual?(i.setAttribute("data-marqy-static",t),i.style.animationDuration=""):(i.removeAttribute("data-marqy-static"),i.style.animationDuration=t)})}_update(){this.setAttribute("data-direction",this._direction),this._pauseOnHover?this.setAttribute("data-pause-on-hover",""):this.removeAttribute("data-pause-on-hover"),this._applyDuration()}_cleanup(){var t,e;(t=this._cleanupContainer)==null||t.call(this),(e=this._cleanupItem)==null||e.call(this),this._cleanupContainer=null,this._cleanupItem=null}};h.observedAttributes=["speed","direction","pause-on-hover","manual"];let n=h;customElements.get("marqy-loop")||customElements.define("marqy-loop",n);exports.Marqy=n;exports.MarqyElement=n;
|
|
2
|
+
//# sourceMappingURL=vanilla.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla.cjs.js","sources":["../src/vanilla/index.ts"],"sourcesContent":["import {\n type MarqyDirection,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n} from '../core'\n\nexport type { MarqyDirection }\n\nconst CLONES = 2\n\nexport class MarqyElement extends HTMLElement {\n static observedAttributes = ['speed', 'direction', 'pause-on-hover', 'manual']\n\n private _cleanupContainer: (() => void) | null = null\n private _cleanupItem: (() => void) | null = null\n private _containerDims = { width: 0, height: 0 }\n private _itemDims = { width: 0, height: 0 }\n private _reps = 1\n private _inner: HTMLElement | null = null\n private _slotHTML = ''\n\n private get _speed() {\n return parseFloat(this.getAttribute('speed') ?? '0.5')\n }\n\n private get _direction(): MarqyDirection {\n return (this.getAttribute('direction') as MarqyDirection) ?? 'left'\n }\n\n private get _pauseOnHover() {\n return this.hasAttribute('pause-on-hover')\n }\n\n private get _manual() {\n return this.hasAttribute('manual')\n }\n\n private get _isVertical() {\n return this._direction === 'up' || this._direction === 'down'\n }\n\n connectedCallback() {\n this._slotHTML = this.innerHTML\n this._render()\n this._observeResize()\n }\n\n disconnectedCallback() {\n this._cleanup()\n }\n\n attributeChangedCallback() {\n if (this._inner) this._update()\n }\n\n private _render() {\n this.setAttribute('data-marqy', '')\n this.setAttribute('data-direction', this._direction)\n if (this._pauseOnHover) {\n this.setAttribute('data-pause-on-hover', '')\n } else {\n this.removeAttribute('data-pause-on-hover')\n }\n\n this._inner = document.createElement('div')\n this._inner.setAttribute('data-marqy-inner', '')\n\n for (let clone = 0; clone < CLONES; clone++) {\n const content = document.createElement('div')\n content.setAttribute('data-marqy-content', '')\n this._inner.appendChild(content)\n }\n\n this.innerHTML = ''\n this.appendChild(this._inner)\n this._buildItems()\n }\n\n private _buildItems() {\n if (!this._inner) return\n const contents = this._inner.querySelectorAll<HTMLElement>('[data-marqy-content]')\n contents.forEach((content, clone) => {\n content.innerHTML = ''\n for (let rep = 0; rep < this._reps; rep++) {\n const item = document.createElement('div')\n item.setAttribute('data-marqy-item', '')\n if (clone !== 0 || rep !== 0) item.setAttribute('aria-hidden', 'true')\n item.innerHTML = this._slotHTML\n content.appendChild(item)\n }\n })\n this._applyDuration()\n }\n\n private _observeResize() {\n this._cleanupContainer?.()\n this._cleanupContainer = createResizeObserver(this, (d) => {\n this._containerDims = d\n this._recalc()\n })\n\n const firstItem = this.querySelector<HTMLElement>('[data-marqy-item]')\n if (firstItem) {\n this._cleanupItem?.()\n this._cleanupItem = createResizeObserver(firstItem, (d) => {\n this._itemDims = d\n this._recalc()\n })\n }\n }\n\n private _recalc() {\n const cSize = this._isVertical ? this._containerDims.height : this._containerDims.width\n const iSize = this._isVertical ? this._itemDims.height : this._itemDims.width\n const newReps = calcReps(cSize, iSize)\n if (newReps !== this._reps) {\n this._reps = newReps\n this._buildItems()\n this._reObserveItem()\n } else {\n this._applyDuration()\n }\n }\n\n private _reObserveItem() {\n this._cleanupItem?.()\n const firstItem = this.querySelector<HTMLElement>('[data-marqy-item]')\n if (firstItem) {\n this._cleanupItem = createResizeObserver(firstItem, (d) => {\n this._itemDims = d\n this._recalc()\n })\n }\n }\n\n private _applyDuration() {\n if (!this._inner) return\n const duration = calcAnimationDuration(\n this._isVertical ? this._itemDims.height : this._itemDims.width,\n this._reps,\n this._speed\n )\n const contents = this._inner.querySelectorAll<HTMLElement>('[data-marqy-content]')\n contents.forEach((content) => {\n if (this._manual) {\n content.setAttribute('data-marqy-static', duration)\n content.style.animationDuration = ''\n } else {\n content.removeAttribute('data-marqy-static')\n content.style.animationDuration = duration\n }\n })\n }\n\n private _update() {\n this.setAttribute('data-direction', this._direction)\n if (this._pauseOnHover) {\n this.setAttribute('data-pause-on-hover', '')\n } else {\n this.removeAttribute('data-pause-on-hover')\n }\n this._applyDuration()\n }\n\n private _cleanup() {\n this._cleanupContainer?.()\n this._cleanupItem?.()\n this._cleanupContainer = null\n this._cleanupItem = null\n }\n}\n\nif (!customElements.get('marqy-loop')) {\n customElements.define('marqy-loop', MarqyElement)\n}\n\nexport { MarqyElement as Marqy }\n"],"names":["CLONES","_MarqyElement","clone","content","rep","item","_a","createResizeObserver","d","firstItem","_b","cSize","iSize","newReps","calcReps","duration","calcAnimationDuration","MarqyElement"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare type MarqyDirection = 'left' | 'right' | 'up' | 'down';
|
|
2
|
+
|
|
3
|
+
declare class MarqyElement extends HTMLElement {
|
|
4
|
+
static observedAttributes: string[];
|
|
5
|
+
private _cleanupContainer;
|
|
6
|
+
private _cleanupItem;
|
|
7
|
+
private _containerDims;
|
|
8
|
+
private _itemDims;
|
|
9
|
+
private _reps;
|
|
10
|
+
private _inner;
|
|
11
|
+
private _slotHTML;
|
|
12
|
+
private get _speed();
|
|
13
|
+
private get _direction();
|
|
14
|
+
private get _pauseOnHover();
|
|
15
|
+
private get _manual();
|
|
16
|
+
private get _isVertical();
|
|
17
|
+
connectedCallback(): void;
|
|
18
|
+
disconnectedCallback(): void;
|
|
19
|
+
attributeChangedCallback(): void;
|
|
20
|
+
private _render;
|
|
21
|
+
private _buildItems;
|
|
22
|
+
private _observeResize;
|
|
23
|
+
private _recalc;
|
|
24
|
+
private _reObserveItem;
|
|
25
|
+
private _applyDuration;
|
|
26
|
+
private _update;
|
|
27
|
+
private _cleanup;
|
|
28
|
+
}
|
|
29
|
+
export { MarqyElement as Marqy }
|
|
30
|
+
export { MarqyElement }
|
|
31
|
+
|
|
32
|
+
export { }
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { b as r, c as o, a as c } from "./core-COOoOGpB.js";
|
|
2
|
+
const u = 2, h = class h extends HTMLElement {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments), this._cleanupContainer = null, this._cleanupItem = null, this._containerDims = { width: 0, height: 0 }, this._itemDims = { width: 0, height: 0 }, this._reps = 1, this._inner = null, this._slotHTML = "";
|
|
5
|
+
}
|
|
6
|
+
get _speed() {
|
|
7
|
+
return parseFloat(this.getAttribute("speed") ?? "0.5");
|
|
8
|
+
}
|
|
9
|
+
get _direction() {
|
|
10
|
+
return this.getAttribute("direction") ?? "left";
|
|
11
|
+
}
|
|
12
|
+
get _pauseOnHover() {
|
|
13
|
+
return this.hasAttribute("pause-on-hover");
|
|
14
|
+
}
|
|
15
|
+
get _manual() {
|
|
16
|
+
return this.hasAttribute("manual");
|
|
17
|
+
}
|
|
18
|
+
get _isVertical() {
|
|
19
|
+
return this._direction === "up" || this._direction === "down";
|
|
20
|
+
}
|
|
21
|
+
connectedCallback() {
|
|
22
|
+
this._slotHTML = this.innerHTML, this._render(), this._observeResize();
|
|
23
|
+
}
|
|
24
|
+
disconnectedCallback() {
|
|
25
|
+
this._cleanup();
|
|
26
|
+
}
|
|
27
|
+
attributeChangedCallback() {
|
|
28
|
+
this._inner && this._update();
|
|
29
|
+
}
|
|
30
|
+
_render() {
|
|
31
|
+
this.setAttribute("data-marqy", ""), this.setAttribute("data-direction", this._direction), this._pauseOnHover ? this.setAttribute("data-pause-on-hover", "") : this.removeAttribute("data-pause-on-hover"), this._inner = document.createElement("div"), this._inner.setAttribute("data-marqy-inner", "");
|
|
32
|
+
for (let t = 0; t < u; t++) {
|
|
33
|
+
const e = document.createElement("div");
|
|
34
|
+
e.setAttribute("data-marqy-content", ""), this._inner.appendChild(e);
|
|
35
|
+
}
|
|
36
|
+
this.innerHTML = "", this.appendChild(this._inner), this._buildItems();
|
|
37
|
+
}
|
|
38
|
+
_buildItems() {
|
|
39
|
+
if (!this._inner) return;
|
|
40
|
+
this._inner.querySelectorAll("[data-marqy-content]").forEach((e, i) => {
|
|
41
|
+
e.innerHTML = "";
|
|
42
|
+
for (let s = 0; s < this._reps; s++) {
|
|
43
|
+
const n = document.createElement("div");
|
|
44
|
+
n.setAttribute("data-marqy-item", ""), (i !== 0 || s !== 0) && n.setAttribute("aria-hidden", "true"), n.innerHTML = this._slotHTML, e.appendChild(n);
|
|
45
|
+
}
|
|
46
|
+
}), this._applyDuration();
|
|
47
|
+
}
|
|
48
|
+
_observeResize() {
|
|
49
|
+
var e, i;
|
|
50
|
+
(e = this._cleanupContainer) == null || e.call(this), this._cleanupContainer = r(this, (s) => {
|
|
51
|
+
this._containerDims = s, this._recalc();
|
|
52
|
+
});
|
|
53
|
+
const t = this.querySelector("[data-marqy-item]");
|
|
54
|
+
t && ((i = this._cleanupItem) == null || i.call(this), this._cleanupItem = r(t, (s) => {
|
|
55
|
+
this._itemDims = s, this._recalc();
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
_recalc() {
|
|
59
|
+
const t = this._isVertical ? this._containerDims.height : this._containerDims.width, e = this._isVertical ? this._itemDims.height : this._itemDims.width, i = c(t, e);
|
|
60
|
+
i !== this._reps ? (this._reps = i, this._buildItems(), this._reObserveItem()) : this._applyDuration();
|
|
61
|
+
}
|
|
62
|
+
_reObserveItem() {
|
|
63
|
+
var e;
|
|
64
|
+
(e = this._cleanupItem) == null || e.call(this);
|
|
65
|
+
const t = this.querySelector("[data-marqy-item]");
|
|
66
|
+
t && (this._cleanupItem = r(t, (i) => {
|
|
67
|
+
this._itemDims = i, this._recalc();
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
_applyDuration() {
|
|
71
|
+
if (!this._inner) return;
|
|
72
|
+
const t = o(
|
|
73
|
+
this._isVertical ? this._itemDims.height : this._itemDims.width,
|
|
74
|
+
this._reps,
|
|
75
|
+
this._speed
|
|
76
|
+
);
|
|
77
|
+
this._inner.querySelectorAll("[data-marqy-content]").forEach((i) => {
|
|
78
|
+
this._manual ? (i.setAttribute("data-marqy-static", t), i.style.animationDuration = "") : (i.removeAttribute("data-marqy-static"), i.style.animationDuration = t);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
_update() {
|
|
82
|
+
this.setAttribute("data-direction", this._direction), this._pauseOnHover ? this.setAttribute("data-pause-on-hover", "") : this.removeAttribute("data-pause-on-hover"), this._applyDuration();
|
|
83
|
+
}
|
|
84
|
+
_cleanup() {
|
|
85
|
+
var t, e;
|
|
86
|
+
(t = this._cleanupContainer) == null || t.call(this), (e = this._cleanupItem) == null || e.call(this), this._cleanupContainer = null, this._cleanupItem = null;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
h.observedAttributes = ["speed", "direction", "pause-on-hover", "manual"];
|
|
90
|
+
let a = h;
|
|
91
|
+
customElements.get("marqy-loop") || customElements.define("marqy-loop", a);
|
|
92
|
+
export {
|
|
93
|
+
a as Marqy,
|
|
94
|
+
a as MarqyElement
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=vanilla.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vanilla.esm.js","sources":["../src/vanilla/index.ts"],"sourcesContent":["import {\n type MarqyDirection,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n} from '../core'\n\nexport type { MarqyDirection }\n\nconst CLONES = 2\n\nexport class MarqyElement extends HTMLElement {\n static observedAttributes = ['speed', 'direction', 'pause-on-hover', 'manual']\n\n private _cleanupContainer: (() => void) | null = null\n private _cleanupItem: (() => void) | null = null\n private _containerDims = { width: 0, height: 0 }\n private _itemDims = { width: 0, height: 0 }\n private _reps = 1\n private _inner: HTMLElement | null = null\n private _slotHTML = ''\n\n private get _speed() {\n return parseFloat(this.getAttribute('speed') ?? '0.5')\n }\n\n private get _direction(): MarqyDirection {\n return (this.getAttribute('direction') as MarqyDirection) ?? 'left'\n }\n\n private get _pauseOnHover() {\n return this.hasAttribute('pause-on-hover')\n }\n\n private get _manual() {\n return this.hasAttribute('manual')\n }\n\n private get _isVertical() {\n return this._direction === 'up' || this._direction === 'down'\n }\n\n connectedCallback() {\n this._slotHTML = this.innerHTML\n this._render()\n this._observeResize()\n }\n\n disconnectedCallback() {\n this._cleanup()\n }\n\n attributeChangedCallback() {\n if (this._inner) this._update()\n }\n\n private _render() {\n this.setAttribute('data-marqy', '')\n this.setAttribute('data-direction', this._direction)\n if (this._pauseOnHover) {\n this.setAttribute('data-pause-on-hover', '')\n } else {\n this.removeAttribute('data-pause-on-hover')\n }\n\n this._inner = document.createElement('div')\n this._inner.setAttribute('data-marqy-inner', '')\n\n for (let clone = 0; clone < CLONES; clone++) {\n const content = document.createElement('div')\n content.setAttribute('data-marqy-content', '')\n this._inner.appendChild(content)\n }\n\n this.innerHTML = ''\n this.appendChild(this._inner)\n this._buildItems()\n }\n\n private _buildItems() {\n if (!this._inner) return\n const contents = this._inner.querySelectorAll<HTMLElement>('[data-marqy-content]')\n contents.forEach((content, clone) => {\n content.innerHTML = ''\n for (let rep = 0; rep < this._reps; rep++) {\n const item = document.createElement('div')\n item.setAttribute('data-marqy-item', '')\n if (clone !== 0 || rep !== 0) item.setAttribute('aria-hidden', 'true')\n item.innerHTML = this._slotHTML\n content.appendChild(item)\n }\n })\n this._applyDuration()\n }\n\n private _observeResize() {\n this._cleanupContainer?.()\n this._cleanupContainer = createResizeObserver(this, (d) => {\n this._containerDims = d\n this._recalc()\n })\n\n const firstItem = this.querySelector<HTMLElement>('[data-marqy-item]')\n if (firstItem) {\n this._cleanupItem?.()\n this._cleanupItem = createResizeObserver(firstItem, (d) => {\n this._itemDims = d\n this._recalc()\n })\n }\n }\n\n private _recalc() {\n const cSize = this._isVertical ? this._containerDims.height : this._containerDims.width\n const iSize = this._isVertical ? this._itemDims.height : this._itemDims.width\n const newReps = calcReps(cSize, iSize)\n if (newReps !== this._reps) {\n this._reps = newReps\n this._buildItems()\n this._reObserveItem()\n } else {\n this._applyDuration()\n }\n }\n\n private _reObserveItem() {\n this._cleanupItem?.()\n const firstItem = this.querySelector<HTMLElement>('[data-marqy-item]')\n if (firstItem) {\n this._cleanupItem = createResizeObserver(firstItem, (d) => {\n this._itemDims = d\n this._recalc()\n })\n }\n }\n\n private _applyDuration() {\n if (!this._inner) return\n const duration = calcAnimationDuration(\n this._isVertical ? this._itemDims.height : this._itemDims.width,\n this._reps,\n this._speed\n )\n const contents = this._inner.querySelectorAll<HTMLElement>('[data-marqy-content]')\n contents.forEach((content) => {\n if (this._manual) {\n content.setAttribute('data-marqy-static', duration)\n content.style.animationDuration = ''\n } else {\n content.removeAttribute('data-marqy-static')\n content.style.animationDuration = duration\n }\n })\n }\n\n private _update() {\n this.setAttribute('data-direction', this._direction)\n if (this._pauseOnHover) {\n this.setAttribute('data-pause-on-hover', '')\n } else {\n this.removeAttribute('data-pause-on-hover')\n }\n this._applyDuration()\n }\n\n private _cleanup() {\n this._cleanupContainer?.()\n this._cleanupItem?.()\n this._cleanupContainer = null\n this._cleanupItem = null\n }\n}\n\nif (!customElements.get('marqy-loop')) {\n customElements.define('marqy-loop', MarqyElement)\n}\n\nexport { MarqyElement as Marqy }\n"],"names":["CLONES","_MarqyElement","clone","content","rep","item","_a","createResizeObserver","d","firstItem","_b","cSize","iSize","newReps","calcReps","duration","calcAnimationDuration","MarqyElement"],"mappings":"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"}
|
package/dist/vue.cjs.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),u=require("./core-CuZGUfsl.cjs"),p=["data-direction","data-pause-on-hover"],k={"data-marqy-inner":""},B=["aria-hidden"],q=e.defineComponent({__name:"Marqy",props:{speed:{default:.5},direction:{default:"left"},pauseOnHover:{type:Boolean,default:!1},manual:{type:Boolean,default:!1}},setup(i){const s=i,h=e.ref(null),y=e.ref(null),l=e.ref({width:0,height:0}),n=e.ref({width:0,height:0}),v=e.ref(1),d=e.computed(()=>s.direction==="up"||s.direction==="down"),g=e.computed(()=>u.calcAnimationDuration(d.value?n.value.height:n.value.width,v.value,s.speed));let a=null,r=null;return e.watch(h,t=>{a==null||a(),a=null,t&&(a=u.createResizeObserver(t,o=>{l.value=o}))}),e.watch(y,t=>{r==null||r(),r=null,t&&(r=u.createResizeObserver(t,o=>{n.value=o}))}),e.watch([l,n,d],()=>{const t=d.value?l.value.height:l.value.width,o=d.value?n.value.height:n.value.width;v.value=u.calcReps(t,o)}),e.onUnmounted(()=>{a==null||a(),r==null||r()}),(t,o)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({ref_key:"containerRef",ref:h,"data-marqy":"","data-direction":i.direction,"data-pause-on-hover":i.pauseOnHover?"":void 0},t.$attrs),[e.createElementVNode("div",k,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList([0,1],f=>e.createElementVNode("div",e.mergeProps({key:f,"data-marqy-content":""},{ref_for:!0},i.manual?{"data-marqy-static":g.value}:{style:`animation-duration: ${g.value}`}),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Array.from({length:v.value},(c,m)=>m),c=>(e.openBlock(),e.createElementBlock("div",{key:c,ref_for:!0,ref:m=>{f===0&&c===0&&(y.value=m)},"aria-hidden":!(f===0&&c===0)||void 0,"data-marqy-item":""},[e.renderSlot(t.$slots,"default")],8,B))),128))],16)),64))])],16,p))}});exports.Marqy=q;
|
|
2
|
+
//# sourceMappingURL=vue.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.cjs.js","sources":["../src/vue/Marqy.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, watch, onUnmounted } from 'vue'\nimport {\n type MarqyDirection,\n calcReps,\n calcAnimationDuration,\n createResizeObserver,\n} from '../core'\n\ninterface Props {\n speed?: number\n direction?: MarqyDirection\n pauseOnHover?: boolean\n manual?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n speed: 0.5,\n direction: 'left',\n pauseOnHover: false,\n manual: false,\n})\n\nconst containerRef = ref<HTMLElement | null>(null)\nconst itemRef = ref<HTMLElement | null>(null)\nconst containerDims = ref({ width: 0, height: 0 })\nconst itemDims = ref({ width: 0, height: 0 })\nconst reps = ref(1)\n\nconst isVertical = computed(\n () => props.direction === 'up' || props.direction === 'down'\n)\n\nconst animationDuration = computed(() =>\n calcAnimationDuration(\n isVertical.value ? itemDims.value.height : itemDims.value.width,\n reps.value,\n props.speed\n )\n)\n\nlet cleanupContainer: (() => void) | null = null\nlet cleanupItem: (() => void) | null = null\n\nwatch(containerRef, (el) => {\n cleanupContainer?.()\n cleanupContainer = null\n if (el) cleanupContainer = createResizeObserver(el, (d) => { containerDims.value = d })\n})\n\nwatch(itemRef, (el) => {\n cleanupItem?.()\n cleanupItem = null\n if (el) cleanupItem = createResizeObserver(el, (d) => { itemDims.value = d })\n})\n\nwatch([containerDims, itemDims, isVertical], () => {\n const cSize = isVertical.value ? containerDims.value.height : containerDims.value.width\n const iSize = isVertical.value ? itemDims.value.height : itemDims.value.width\n reps.value = calcReps(cSize, iSize)\n})\n\nonUnmounted(() => {\n cleanupContainer?.()\n cleanupItem?.()\n})\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n data-marqy=\"\"\n :data-direction=\"direction\"\n :data-pause-on-hover=\"pauseOnHover ? '' : undefined\"\n v-bind=\"$attrs\"\n >\n <div data-marqy-inner=\"\">\n <div\n v-for=\"clone in [0, 1]\"\n :key=\"clone\"\n data-marqy-content=\"\"\n v-bind=\"\n manual\n ? { 'data-marqy-static': animationDuration }\n : { style: `animation-duration: ${animationDuration}` }\n \"\n >\n <div\n v-for=\"rep in Array.from({ length: reps }, (_, i) => i)\"\n :key=\"rep\"\n :ref=\"(el) => { if (clone === 0 && rep === 0) itemRef = el as HTMLElement | null }\"\n :aria-hidden=\"!(clone === 0 && rep === 0) || undefined\"\n data-marqy-item=\"\"\n >\n <slot />\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","containerRef","ref","itemRef","containerDims","itemDims","reps","isVertical","computed","animationDuration","calcAnimationDuration","cleanupContainer","cleanupItem","watch","el","createResizeObserver","d","cSize","iSize","calcReps","onUnmounted","_openBlock","_createElementBlock","_mergeProps","$attrs","_createElementVNode","_hoisted_2","_Fragment","_renderList","clone","_","i","rep","_renderSlot","_ctx"],"mappings":"0YAgBA,MAAMA,EAAQC,EAORC,EAAeC,EAAAA,IAAwB,IAAI,EAC3CC,EAAUD,EAAAA,IAAwB,IAAI,EACtCE,EAAgBF,EAAAA,IAAI,CAAE,MAAO,EAAG,OAAQ,EAAG,EAC3CG,EAAWH,EAAAA,IAAI,CAAE,MAAO,EAAG,OAAQ,EAAG,EACtCI,EAAOJ,EAAAA,IAAI,CAAC,EAEZK,EAAaC,EAAAA,SACjB,IAAMT,EAAM,YAAc,MAAQA,EAAM,YAAc,MAAA,EAGlDU,EAAoBD,EAAAA,SAAS,IACjCE,EAAAA,sBACEH,EAAW,MAAQF,EAAS,MAAM,OAASA,EAAS,MAAM,MAC1DC,EAAK,MACLP,EAAM,KAAA,CACR,EAGF,IAAIY,EAAwC,KACxCC,EAAmC,KAEvCC,OAAAA,QAAMZ,EAAea,GAAO,CAC1BH,GAAA,MAAAA,IACAA,EAAmB,KACfG,IAAIH,EAAmBI,EAAAA,qBAAqBD,EAAKE,GAAM,CAAEZ,EAAc,MAAQY,CAAE,CAAC,EACxF,CAAC,EAEDH,QAAMV,EAAUW,GAAO,CACrBF,GAAA,MAAAA,IACAA,EAAc,KACVE,IAAIF,EAAcG,EAAAA,qBAAqBD,EAAKE,GAAM,CAAEX,EAAS,MAAQW,CAAE,CAAC,EAC9E,CAAC,EAEDH,EAAAA,MAAM,CAACT,EAAeC,EAAUE,CAAU,EAAG,IAAM,CACjD,MAAMU,EAAQV,EAAW,MAAQH,EAAc,MAAM,OAASA,EAAc,MAAM,MAC5Ec,EAAQX,EAAW,MAAQF,EAAS,MAAM,OAASA,EAAS,MAAM,MACxEC,EAAK,MAAQa,WAASF,EAAOC,CAAK,CACpC,CAAC,EAEDE,EAAAA,YAAY,IAAM,CAChBT,GAAA,MAAAA,IACAC,GAAA,MAAAA,GACF,CAAC,UAICS,YAAA,EAAAC,qBA6BM,MA7BNC,EAAAA,WA6BM,SA5BA,eAAJ,IAAItB,EACJ,aAAW,GACV,iBAAgBD,EAAA,UAChB,sBAAqBA,EAAA,aAAY,GAAQ,MAAA,EAClCwB,EAAAA,MAAM,EAAA,CAEdC,EAAAA,mBAqBM,MArBNC,EAqBM,gBApBJJ,qBAmBMK,EAAAA,SAAA,KAAAC,aAlBY,CAAA,EAAA,CAAA,EAATC,GADTJ,EAAAA,mBAmBM,MAnBNF,EAAAA,WAmBM,CAjBH,IAAKM,EACN,qBAAmB,EAAA,eACA7B,EAAA,4BAA4CS,EAAA,KAAA,gCAAkEA,EAAA,KAAiB,EAAA,CAAA,IAMlJY,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAQMK,EAAAA,SAAA,KAAAC,EAAAA,WAPU,MAAM,KAAI,CAAA,OAAWtB,EAAA,KAAA,EAAI,CAAKwB,EAAGC,IAAMA,CAAC,EAA/CC,kBADTV,EAAAA,mBAQM,MAAA,CANH,IAAKU,aACL,IAAMlB,GAAE,CAAWe,OAAeG,IAAG,MAAQ,MAAUlB,EAAE,EACzD,cAAW,EAAIe,IAAK,GAAUG,QAAc,OAC7C,kBAAgB,EAAA,GAEhBC,aAAQC,EAAA,OAAA,SAAA,CAAA"}
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ComponentOptionsMixin } from 'vue';
|
|
2
|
+
import { ComponentProvideOptions } from 'vue';
|
|
3
|
+
import { DefineComponent } from 'vue';
|
|
4
|
+
import { PublicProps } from 'vue';
|
|
5
|
+
|
|
6
|
+
declare const __VLS_component: DefineComponent<Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
7
|
+
speed: number;
|
|
8
|
+
direction: MarqyDirection;
|
|
9
|
+
pauseOnHover: boolean;
|
|
10
|
+
manual: boolean;
|
|
11
|
+
}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
12
|
+
containerRef: HTMLDivElement;
|
|
13
|
+
}, HTMLDivElement>;
|
|
14
|
+
|
|
15
|
+
declare function __VLS_template(): {
|
|
16
|
+
attrs: Partial<{}>;
|
|
17
|
+
slots: {
|
|
18
|
+
default?(_: {}): any;
|
|
19
|
+
};
|
|
20
|
+
refs: {
|
|
21
|
+
containerRef: HTMLDivElement;
|
|
22
|
+
};
|
|
23
|
+
rootEl: HTMLDivElement;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
27
|
+
|
|
28
|
+
declare type __VLS_WithTemplateSlots<T, S> = T & {
|
|
29
|
+
new (): {
|
|
30
|
+
$slots: S;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export declare const Marqy: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
35
|
+
|
|
36
|
+
export declare type MarqyDirection = 'left' | 'right' | 'up' | 'down';
|
|
37
|
+
|
|
38
|
+
declare interface Props {
|
|
39
|
+
speed?: number;
|
|
40
|
+
direction?: MarqyDirection;
|
|
41
|
+
pauseOnHover?: boolean;
|
|
42
|
+
manual?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { }
|
package/dist/vue.esm.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { defineComponent as z, ref as r, computed as q, watch as y, onUnmounted as O, openBlock as u, createElementBlock as c, mergeProps as w, createElementVNode as k, Fragment as R, renderList as B, renderSlot as S } from "vue";
|
|
2
|
+
import { c as $, b as D, a as b } from "./core-COOoOGpB.js";
|
|
3
|
+
const A = ["data-direction", "data-pause-on-hover"], E = { "data-marqy-inner": "" }, H = ["aria-hidden"], F = /* @__PURE__ */ z({
|
|
4
|
+
__name: "Marqy",
|
|
5
|
+
props: {
|
|
6
|
+
speed: { default: 0.5 },
|
|
7
|
+
direction: { default: "left" },
|
|
8
|
+
pauseOnHover: { type: Boolean, default: !1 },
|
|
9
|
+
manual: { type: Boolean, default: !1 }
|
|
10
|
+
},
|
|
11
|
+
setup(o) {
|
|
12
|
+
const v = o, p = r(null), g = r(null), d = r({ width: 0, height: 0 }), i = r({ width: 0, height: 0 }), f = r(1), l = q(
|
|
13
|
+
() => v.direction === "up" || v.direction === "down"
|
|
14
|
+
), _ = q(
|
|
15
|
+
() => $(
|
|
16
|
+
l.value ? i.value.height : i.value.width,
|
|
17
|
+
f.value,
|
|
18
|
+
v.speed
|
|
19
|
+
)
|
|
20
|
+
);
|
|
21
|
+
let t = null, a = null;
|
|
22
|
+
return y(p, (e) => {
|
|
23
|
+
t == null || t(), t = null, e && (t = D(e, (n) => {
|
|
24
|
+
d.value = n;
|
|
25
|
+
}));
|
|
26
|
+
}), y(g, (e) => {
|
|
27
|
+
a == null || a(), a = null, e && (a = D(e, (n) => {
|
|
28
|
+
i.value = n;
|
|
29
|
+
}));
|
|
30
|
+
}), y([d, i, l], () => {
|
|
31
|
+
const e = l.value ? d.value.height : d.value.width, n = l.value ? i.value.height : i.value.width;
|
|
32
|
+
f.value = b(e, n);
|
|
33
|
+
}), O(() => {
|
|
34
|
+
t == null || t(), a == null || a();
|
|
35
|
+
}), (e, n) => (u(), c("div", w({
|
|
36
|
+
ref_key: "containerRef",
|
|
37
|
+
ref: p,
|
|
38
|
+
"data-marqy": "",
|
|
39
|
+
"data-direction": o.direction,
|
|
40
|
+
"data-pause-on-hover": o.pauseOnHover ? "" : void 0
|
|
41
|
+
}, e.$attrs), [
|
|
42
|
+
k("div", E, [
|
|
43
|
+
(u(), c(R, null, B([0, 1], (m) => k("div", w(
|
|
44
|
+
{
|
|
45
|
+
key: m,
|
|
46
|
+
"data-marqy-content": ""
|
|
47
|
+
},
|
|
48
|
+
{ ref_for: !0 },
|
|
49
|
+
o.manual ? { "data-marqy-static": _.value } : { style: `animation-duration: ${_.value}` }
|
|
50
|
+
), [
|
|
51
|
+
(u(!0), c(R, null, B(Array.from({ length: f.value }, (s, h) => h), (s) => (u(), c("div", {
|
|
52
|
+
key: s,
|
|
53
|
+
ref_for: !0,
|
|
54
|
+
ref: (h) => {
|
|
55
|
+
m === 0 && s === 0 && (g.value = h);
|
|
56
|
+
},
|
|
57
|
+
"aria-hidden": !(m === 0 && s === 0) || void 0,
|
|
58
|
+
"data-marqy-item": ""
|
|
59
|
+
}, [
|
|
60
|
+
S(e.$slots, "default")
|
|
61
|
+
], 8, H))), 128))
|
|
62
|
+
], 16)), 64))
|
|
63
|
+
])
|
|
64
|
+
], 16, A));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
export {
|
|
68
|
+
F as Marqy
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=vue.esm.js.map
|