marqy 1.0.3 → 1.1.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/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 +59 -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 +47 -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 +93 -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 u=require("react/jsx-runtime"),v=require("react"),l=require("./core-CuZGUfsl.cjs");function D(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const r=D(v);function R({speed:e=.5,direction:t="left",pauseOnHover:n,manual:a=!1,children:o,...w}){const[d,f]=r.useState(1),[j,s]=b(),[q,i]=b(),c=t==="up"||t==="down",h=r.useCallback(m=>l.calcAnimationDuration(m,d,e),[d,e]);return r.useEffect(()=>{!c&&s.width&&i.width&&f(l.calcReps(s.width,i.width)),c&&s.height&&i.height&&f(l.calcReps(s.height,i.height))},[c,s,i]),u.jsx("div",{ref:j,"data-marqy":"","data-direction":t,"data-pause-on-hover":n?"":null,...w,children:u.jsx("div",{"data-marqy-inner":"",children:new Array(2).fill(0).map((m,g)=>u.jsx("div",{"data-marqy-content":"",...a?{"data-marqy-static":h(c?i.height:i.width)}:{style:{animationDuration:h(c?i.height:i.width)}},children:new Array(d).fill(0).map((O,y)=>{const p=g===0&&y===0;return u.jsx("div",{ref:p?q:null,"aria-hidden":!p||void 0,"data-marqy-item":"",children:o},y)})},g))})})}function b(){const[e,t]=r.useState({width:0,height:0}),n=r.useRef(null);return[r.useCallback(o=>{n.current?.(),o&&(n.current=l.createResizeObserver(o,t))},[]),e]}exports.Marqy=R;
|
|
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","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,CAC1DD,EAAW,UAAA,EACNC,IACLD,EAAW,QAAUE,uBAAqBD,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,59 @@
|
|
|
1
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import * as e from "react";
|
|
3
|
+
import { c as R, a as y, b } from "./core-COOoOGpB.js";
|
|
4
|
+
function C({
|
|
5
|
+
speed: r = 0.5,
|
|
6
|
+
direction: i = "left",
|
|
7
|
+
pauseOnHover: s,
|
|
8
|
+
manual: m = !1,
|
|
9
|
+
children: o,
|
|
10
|
+
...v
|
|
11
|
+
}) {
|
|
12
|
+
const [h, u] = e.useState(1), [D, a] = g(), [q, t] = g(), n = i === "up" || i === "down", d = e.useCallback(
|
|
13
|
+
(l) => R(l, h, r),
|
|
14
|
+
[h, r]
|
|
15
|
+
);
|
|
16
|
+
return e.useEffect(() => {
|
|
17
|
+
!n && a.width && t.width && u(y(a.width, t.width)), n && a.height && t.height && u(y(a.height, t.height));
|
|
18
|
+
}, [n, a, t]), /* @__PURE__ */ c(
|
|
19
|
+
"div",
|
|
20
|
+
{
|
|
21
|
+
ref: D,
|
|
22
|
+
"data-marqy": "",
|
|
23
|
+
"data-direction": i,
|
|
24
|
+
"data-pause-on-hover": s ? "" : null,
|
|
25
|
+
...v,
|
|
26
|
+
children: /* @__PURE__ */ c("div", { "data-marqy-inner": "", children: new Array(2).fill(0).map((l, f) => /* @__PURE__ */ c(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
"data-marqy-content": "",
|
|
30
|
+
...m ? { "data-marqy-static": d(n ? t.height : t.width) } : { style: { animationDuration: d(n ? t.height : t.width) } },
|
|
31
|
+
children: new Array(h).fill(0).map((A, p) => {
|
|
32
|
+
const w = f === 0 && p === 0;
|
|
33
|
+
return /* @__PURE__ */ c(
|
|
34
|
+
"div",
|
|
35
|
+
{
|
|
36
|
+
ref: w ? q : null,
|
|
37
|
+
"aria-hidden": !w || void 0,
|
|
38
|
+
"data-marqy-item": "",
|
|
39
|
+
children: o
|
|
40
|
+
},
|
|
41
|
+
p
|
|
42
|
+
);
|
|
43
|
+
})
|
|
44
|
+
},
|
|
45
|
+
f
|
|
46
|
+
)) })
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
function g() {
|
|
51
|
+
const [r, i] = e.useState({ width: 0, height: 0 }), s = e.useRef(null);
|
|
52
|
+
return [e.useCallback((o) => {
|
|
53
|
+
s.current?.(), o && (s.current = b(o, i));
|
|
54
|
+
}, []), r];
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
C as Marqy
|
|
58
|
+
};
|
|
59
|
+
//# 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","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,IADAD,EAAW,UAAA,GACNC,MACLD,EAAW,UAAUE,EAAqBD,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 S=require("svelte/internal/client"),v=require("./core-CuZGUfsl.cjs");function j(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const a in r)if(a!=="default"){const i=Object.getOwnPropertyDescriptor(r,a);Object.defineProperty(t,a,i.get?i:{enumerable:!0,get:()=>r[a]})}}return t.default=r,Object.freeze(t)}const e=j(S);var z=e.from_html('<div data-marqy-item=""><!></div>'),x=e.from_html("<div></div>"),M=e.from_html('<div><div data-marqy-inner=""></div></div>');function H(r,t){e.push(t,!0);let a=e.prop(t,"speed",3,.5),i=e.prop(t,"direction",3,"left"),y=e.prop(t,"pauseOnHover",3,!1),b=e.prop(t,"manual",3,!1),O=e.rest_props(t,["$$slots","$$events","$$legacy","speed","direction","pauseOnHover","manual","children"]),h=e.state(e.proxy({width:0,height:0})),d=e.state(e.proxy({width:0,height:0})),m=e.derived(()=>{const c=e.get(g)?e.get(h).height:e.get(h).width,n=e.get(g)?e.get(d).height:e.get(d).width;return v.calcReps(c,n)});const g=e.derived(()=>i()==="up"||i()==="down"),p=e.derived(()=>v.calcAnimationDuration(e.get(g)?e.get(d).height:e.get(d).width,e.get(m),a()));var o=M();e.attribute_effect(o,()=>({"data-marqy":"","data-direction":i(),"data-pause-on-hover":y()?"":void 0,...O}));var f=e.child(o);e.each(f,20,()=>[0,1],e.index,(c,n)=>{var u=x();e.attribute_effect(u,()=>({"data-marqy-content":"",...b()?{"data-marqy-static":e.get(p)}:{style:`animation-duration: ${e.get(p)}`}})),e.each(u,21,()=>Array.from({length:e.get(m)},(_,l)=>l),e.index,(_,l)=>{var s=z(),q=e.child(s);e.snippet(q,()=>t.children),e.reset(s),e.attach(s,()=>n===0&&e.get(l)===0?void 0:w=>v.createResizeObserver(w,D=>{e.set(d,D,!0)})),e.template_effect(()=>e.set_attribute(s,"aria-hidden",!(n===0&&e.get(l)===0)||void 0)),e.append(_,s)}),e.reset(u),e.append(c,u)}),e.reset(f),e.reset(o),e.attach(o,()=>c=>v.createResizeObserver(c,n=>{e.set(h,n,!0)})),e.append(r,o),e.pop()}exports.Marqy=H;
|
|
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 containerDims = $state({ width: 0, height: 0 })\n let itemDims = $state({ width: 0, height: 0 })\n\n let reps = $derived.by(() => {\n const cSize = isVertical ? containerDims.height : containerDims.width\n const iSize = isVertical ? itemDims.height : itemDims.width\n return calcReps(cSize, iSize)\n })\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</script>\n\n<div\n {@attach (containerEl) => {\n return createResizeObserver(containerEl, (d) => {\n containerDims = d\n })\n }}\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 {@attach clone === 0 && rep === 0\n ? undefined\n : (node) => {\n return createResizeObserver(node, (d) => {\n itemDims = d\n })\n }}\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","containerDims","itemDims","reps","cSize","isVertical","iSize","calcReps","animationDuration","calcAnimationDuration","div","root","div_1","clone","div_2","root_1","i","rep","div_3","root_2","node","createResizeObserver","d","containerEl"],"mappings":"goBAAA,cAmBI,IAAAA,qBAAQ,EAAG,EACXC,yBAAY,MAAM,EAClBC,4BAAe,EAAK,EACpBC,sBAAS,EAAK,EAEXC,EAAIC,EAAA,WAAAC,EAAA,0FAGLC,EAAgBF,QAAMA,EAAA,MAAA,CAAG,MAAO,EAAG,OAAQ,CAAC,CAAA,CAAA,EAC5CG,EAAWH,QAAMA,EAAA,MAAA,CAAG,MAAO,EAAG,OAAQ,CAAC,CAAA,CAAA,EAEvCI,gBAAyB,CACrB,MAAAC,QAAQC,CAAU,EAAGN,EAAA,IAAAE,CAAa,EAAC,OAASF,EAAA,IAAAE,CAAa,EAAC,MAC1DK,EAAKP,EAAA,IAAGM,CAAU,EAAAN,EAAA,IAAGG,CAAQ,EAAC,OAAMH,EAAA,IAAGG,CAAQ,EAAC,aAC/CK,EAAAA,SAASH,EAAOE,CAAK,CAC9B,CAAC,EAEK,MAAAD,gBAAsBV,EAAS,IAAK,MAAQA,EAAS,IAAK,MAAM,EAEhEa,EAAiBT,EAAA,QAAA,IACrBU,EAAAA,sBAAqBV,EAAA,IACnBM,CAAU,QAAGH,CAAQ,EAAC,OAAMH,EAAA,IAAGG,CAAQ,EAAC,MAAKH,EAAA,IAC7CI,CAAI,EACJT,EAAK,CAAA,CAAA,MAKVgB,EAAGC,EAAA,qBAAHD,EAAG,KAAA,kCAOcf,EAAS,wBACJC,IAAe,GAAK,UACrCE,KAEH,IAAAc,UAXFF,CAAG,EAWDX,EAAA,KAAAa,EAAG,GAAA,IAAA,CACM,EAAG,CAAC,aAAKC,IAAK,KACnBC,EAAGC,EAAA,qBAAHD,EAAG,KAAA,4BAEEjB,EAAM,EACJ,CAAA,0BAAqBW,CAAiB,CAAA,EACtC,CAAA,mCAA8BA,CAAiB,CAAA,EAAA,KAJtDT,EAAA,KAAAe,EAAG,GAAA,IAMK,MAAM,MAAO,OAAMf,EAAA,IAAEI,CAAI,GAAA,CAAK,EAAGa,IAAMA,CAAC,aAAKC,IAAG,KACpDC,EAAGC,EAAA,YAAHD,CAAG,sCAAHA,CAAG,EAAHnB,EAAA,OAAAmB,MACUL,IAAU,GAACd,EAAA,IAAIkB,CAAG,IAAK,EAC5B,OACCG,GACQC,EAAAA,qBAAqBD,EAAOE,GAAM,CACvCvB,EAAA,IAAAG,EAAWoB,EAAC,EAAA,CACd,CAAC,CACF,wCAPNJ,EAAG,cAAA,EAQaL,IAAU,SAAKI,CAAG,IAAK,IAAM,MAAS,CAAA,aARtDC,CAAG,YAPPJ,CAAG,aAAHA,CAAG,YAFPF,CAAG,UAXLF,CAAG,WAAHA,EAAG,IACQa,GACDF,EAAAA,qBAAqBE,EAAcD,GAAM,CAC9CvB,EAAA,IAAAE,EAAgBqB,EAAC,EAAA,CACnB,CAAC,CACF,aALFZ,CAAG,SAFI"}
|
package/dist/svelte.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import { a as O, c as z, b as g } from "./core-COOoOGpB.js";
|
|
4
|
+
var H = e.from_html('<div data-marqy-item=""><!></div>'), A = e.from_html("<div></div>"), R = e.from_html('<div><div data-marqy-inner=""></div></div>');
|
|
5
|
+
function V(f, t) {
|
|
6
|
+
e.push(t, !0);
|
|
7
|
+
let _ = e.prop(t, "speed", 3, 0.5), c = e.prop(t, "direction", 3, "left"), y = e.prop(t, "pauseOnHover", 3, !1), q = e.prop(t, "manual", 3, !1), w = e.rest_props(t, [
|
|
8
|
+
"$$slots",
|
|
9
|
+
"$$events",
|
|
10
|
+
"$$legacy",
|
|
11
|
+
"speed",
|
|
12
|
+
"direction",
|
|
13
|
+
"pauseOnHover",
|
|
14
|
+
"manual",
|
|
15
|
+
"children"
|
|
16
|
+
]), h = e.state(e.proxy({ width: 0, height: 0 })), i = e.state(e.proxy({ width: 0, height: 0 })), m = e.derived(() => {
|
|
17
|
+
const d = e.get(v) ? e.get(h).height : e.get(h).width, a = e.get(v) ? e.get(i).height : e.get(i).width;
|
|
18
|
+
return O(d, a);
|
|
19
|
+
});
|
|
20
|
+
const v = e.derived(() => c() === "up" || c() === "down"), p = e.derived(() => z(e.get(v) ? e.get(i).height : e.get(i).width, e.get(m), _()));
|
|
21
|
+
var r = R();
|
|
22
|
+
e.attribute_effect(r, () => ({
|
|
23
|
+
"data-marqy": "",
|
|
24
|
+
"data-direction": c(),
|
|
25
|
+
"data-pause-on-hover": y() ? "" : void 0,
|
|
26
|
+
...w
|
|
27
|
+
}));
|
|
28
|
+
var u = e.child(r);
|
|
29
|
+
e.each(u, 20, () => [0, 1], e.index, (d, a) => {
|
|
30
|
+
var o = A();
|
|
31
|
+
e.attribute_effect(o, () => ({
|
|
32
|
+
"data-marqy-content": "",
|
|
33
|
+
...q() ? { "data-marqy-static": e.get(p) } : { style: `animation-duration: ${e.get(p)}` }
|
|
34
|
+
})), e.each(o, 21, () => Array.from({ length: e.get(m) }, (l, s) => s), e.index, (l, s) => {
|
|
35
|
+
var n = H(), b = e.child(n);
|
|
36
|
+
e.snippet(b, () => t.children), e.reset(n), e.attach(n, () => a === 0 && e.get(s) === 0 ? void 0 : (x) => g(x, (D) => {
|
|
37
|
+
e.set(i, D, !0);
|
|
38
|
+
})), e.template_effect(() => e.set_attribute(n, "aria-hidden", !(a === 0 && e.get(s) === 0) || void 0)), e.append(l, n);
|
|
39
|
+
}), e.reset(o), e.append(d, o);
|
|
40
|
+
}), e.reset(u), e.reset(r), e.attach(r, () => (d) => g(d, (a) => {
|
|
41
|
+
e.set(h, a, !0);
|
|
42
|
+
})), e.append(f, r), e.pop();
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
V as Marqy
|
|
46
|
+
};
|
|
47
|
+
//# 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 containerDims = $state({ width: 0, height: 0 })\n let itemDims = $state({ width: 0, height: 0 })\n\n let reps = $derived.by(() => {\n const cSize = isVertical ? containerDims.height : containerDims.width\n const iSize = isVertical ? itemDims.height : itemDims.width\n return calcReps(cSize, iSize)\n })\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</script>\n\n<div\n {@attach (containerEl) => {\n return createResizeObserver(containerEl, (d) => {\n containerDims = d\n })\n }}\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 {@attach clone === 0 && rep === 0\n ? undefined\n : (node) => {\n return createResizeObserver(node, (d) => {\n itemDims = d\n })\n }}\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","containerDims","itemDims","reps","cSize","isVertical","iSize","calcReps","animationDuration","calcAnimationDuration","div","root","div_1","clone","div_2","root_1","_","i","rep","div_3","root_2","node","createResizeObserver","d","containerEl"],"mappings":";;;;iBAAA;;AAmBI,MAAAA,0BAAQ,GAAG,GACXC,8BAAY,MAAM,GAClBC,iCAAe,EAAK,GACpBC,2BAAS,EAAK,GAEXC,IAAIC,EAAA,WAAAC,GAAA;AAAA;;;;;;;;MAGLC,IAAgBF,QAAMA,EAAA,MAAA,EAAG,OAAO,GAAG,QAAQ,EAAC,CAAA,CAAA,GAC5CG,IAAWH,QAAMA,EAAA,MAAA,EAAG,OAAO,GAAG,QAAQ,EAAC,CAAA,CAAA,GAEvCI,oBAAyB;AACrB,UAAAC,UAAQC,CAAU,IAAGN,EAAA,IAAAE,CAAa,EAAC,SAASF,EAAA,IAAAE,CAAa,EAAC,OAC1DK,IAAKP,EAAA,IAAGM,CAAU,IAAAN,EAAA,IAAGG,CAAQ,EAAC,SAAMH,EAAA,IAAGG,CAAQ,EAAC;WAC/CK,EAASH,GAAOE,CAAK;AAAA,EAC9B,CAAC;AAEK,QAAAD,oBAAsBV,EAAS,MAAK,QAAQA,EAAS,MAAK,MAAM,GAEhEa,IAAiBT,EAAA,QAAA,MACrBU,EAAqBV,EAAA,IACnBM,CAAU,UAAGH,CAAQ,EAAC,SAAMH,EAAA,IAAGG,CAAQ,EAAC,OAAKH,EAAA,IAC7CI,CAAI,GACJT,EAAK,CAAA,CAAA;MAKVgB,IAAGC,EAAA;qBAAHD,GAAG,OAAA;AAAA;sBAOcf,EAAS;AAAA,2BACJC,MAAe,KAAK;AAAA,OACrCE;AAAA;AAEH,MAAAc,YAXFF,CAAG;AAWD,EAAAX,EAAA,KAAAa,GAAG,IAAA,MAAA,CACM,GAAG,CAAC,gBAAKC,MAAK;QACnBC,IAAGC,EAAA;uBAAHD,GAAG,OAAA;AAAA;SAEEjB,EAAM,IACJ,EAAA,2BAAqBW,CAAiB,EAAA,IACtC,EAAA,oCAA8BA,CAAiB,CAAA,GAAA;AAAA,SAJtDT,EAAA,KAAAe,GAAG,IAAA,MAMK,MAAM,OAAO,QAAMf,EAAA,IAAEI,CAAI,KAAA,CAAKa,GAAGC,MAAMA,CAAC,gBAAKC,MAAG;UACpDC,IAAGC,EAAA,eAAHD,CAAG;8CAAHA,CAAG,GAAHpB,EAAA,OAAAoB,SACUN,MAAU,KAACd,EAAA,IAAImB,CAAG,MAAK,IAC5B,SACC,CAAAG,MACQC,EAAqBD,GAAI,CAAGE,MAAM;AACvC,QAAAxB,EAAA,IAAAG,GAAWqB,GAAC,EAAA;AAAA,MACd,CAAC,CACF,2CAPNJ,GAAG,eAAA,EAQaN,MAAU,WAAKK,CAAG,MAAK,MAAM,MAAS,CAAA,eARtDC,CAAG;AAAA,gBAPPL,CAAG,eAAHA,CAAG;AAAA,cAFPF,CAAG,WAXLF,CAAG,YAAHA,GAAG,MAAA,CACQc,MACDF,EAAqBE,GAAW,CAAGD,MAAM;AAC9C,IAAAxB,EAAA,IAAAE,GAAgBsB,GAAC,EAAA;AAAA,EACnB,CAAC,CACF,eALFb,CAAG;AAFI;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=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 a=0;a<this._reps;a++){const n=document.createElement("div");n.setAttribute("data-marqy-item",""),(i!==0||a!==0)&&n.setAttribute("aria-hidden","true"),n.innerHTML=this._slotHTML,e.appendChild(n)}}),this._applyDuration()}_observeResize(){this._cleanupContainer?.(),this._cleanupContainer=s.createResizeObserver(this,e=>{this._containerDims=e,this._recalc()});const t=this.querySelector("[data-marqy-item]");t&&(this._cleanupItem?.(),this._cleanupItem=s.createResizeObserver(t,e=>{this._itemDims=e,this._recalc()}))}_recalc(){const t=this._isVertical?this._containerDims.height:this._containerDims.width,e=this._isVertical?this._itemDims.height:this._itemDims.width,i=s.calcReps(t,e);i!==this._reps?(this._reps=i,this._buildItems(),this._reObserveItem()):this._applyDuration()}_reObserveItem(){this._cleanupItem?.();const t=this.querySelector("[data-marqy-item]");t&&(this._cleanupItem=s.createResizeObserver(t,e=>{this._itemDims=e,this._recalc()}))}_applyDuration(){if(!this._inner)return;const t=s.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(){this._cleanupContainer?.(),this._cleanupItem?.(),this._cleanupContainer=null,this._cleanupItem=null}};h.observedAttributes=["speed","direction","pause-on-hover","manual"];let r=h;customElements.get("marqy-loop")||customElements.define("marqy-loop",r);exports.Marqy=r;exports.MarqyElement=r;
|
|
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","createResizeObserver","d","firstItem","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,93 @@
|
|
|
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 n = 0; n < this._reps; n++) {
|
|
43
|
+
const s = document.createElement("div");
|
|
44
|
+
s.setAttribute("data-marqy-item", ""), (i !== 0 || n !== 0) && s.setAttribute("aria-hidden", "true"), s.innerHTML = this._slotHTML, e.appendChild(s);
|
|
45
|
+
}
|
|
46
|
+
}), this._applyDuration();
|
|
47
|
+
}
|
|
48
|
+
_observeResize() {
|
|
49
|
+
this._cleanupContainer?.(), this._cleanupContainer = r(this, (e) => {
|
|
50
|
+
this._containerDims = e, this._recalc();
|
|
51
|
+
});
|
|
52
|
+
const t = this.querySelector("[data-marqy-item]");
|
|
53
|
+
t && (this._cleanupItem?.(), this._cleanupItem = r(t, (e) => {
|
|
54
|
+
this._itemDims = e, this._recalc();
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
_recalc() {
|
|
58
|
+
const t = this._isVertical ? this._containerDims.height : this._containerDims.width, e = this._isVertical ? this._itemDims.height : this._itemDims.width, i = c(t, e);
|
|
59
|
+
i !== this._reps ? (this._reps = i, this._buildItems(), this._reObserveItem()) : this._applyDuration();
|
|
60
|
+
}
|
|
61
|
+
_reObserveItem() {
|
|
62
|
+
this._cleanupItem?.();
|
|
63
|
+
const t = this.querySelector("[data-marqy-item]");
|
|
64
|
+
t && (this._cleanupItem = r(t, (e) => {
|
|
65
|
+
this._itemDims = e, this._recalc();
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
_applyDuration() {
|
|
69
|
+
if (!this._inner) return;
|
|
70
|
+
const t = o(
|
|
71
|
+
this._isVertical ? this._itemDims.height : this._itemDims.width,
|
|
72
|
+
this._reps,
|
|
73
|
+
this._speed
|
|
74
|
+
);
|
|
75
|
+
this._inner.querySelectorAll("[data-marqy-content]").forEach((i) => {
|
|
76
|
+
this._manual ? (i.setAttribute("data-marqy-static", t), i.style.animationDuration = "") : (i.removeAttribute("data-marqy-static"), i.style.animationDuration = t);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
_update() {
|
|
80
|
+
this.setAttribute("data-direction", this._direction), this._pauseOnHover ? this.setAttribute("data-pause-on-hover", "") : this.removeAttribute("data-pause-on-hover"), this._applyDuration();
|
|
81
|
+
}
|
|
82
|
+
_cleanup() {
|
|
83
|
+
this._cleanupContainer?.(), this._cleanupItem?.(), this._cleanupContainer = null, this._cleanupItem = null;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
h.observedAttributes = ["speed", "direction", "pause-on-hover", "manual"];
|
|
87
|
+
let a = h;
|
|
88
|
+
customElements.get("marqy-loop") || customElements.define("marqy-loop", a);
|
|
89
|
+
export {
|
|
90
|
+
a as Marqy,
|
|
91
|
+
a as MarqyElement
|
|
92
|
+
};
|
|
93
|
+
//# 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","createResizeObserver","d","firstItem","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"),d=require("./core-CuZGUfsl.cjs"),g=["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(r){const s=r,h=e.ref(null),p=e.ref(null),o=e.ref({width:0,height:0}),a=e.ref({width:0,height:0}),m=e.ref(1),i=e.computed(()=>s.direction==="up"||s.direction==="down"),y=e.computed(()=>d.calcAnimationDuration(i.value?a.value.height:a.value.width,m.value,s.speed));let l=null,c=null;return e.watch(h,t=>{l?.(),l=null,t&&(l=d.createResizeObserver(t,n=>{o.value=n}))}),e.watch(p,t=>{c?.(),c=null,t&&(c=d.createResizeObserver(t,n=>{a.value=n}))}),e.watch([o,a,i],()=>{const t=i.value?o.value.height:o.value.width,n=i.value?a.value.height:a.value.width;m.value=d.calcReps(t,n)}),e.onUnmounted(()=>{l?.(),c?.()}),(t,n)=>(e.openBlock(),e.createElementBlock("div",e.mergeProps({ref_key:"containerRef",ref:h,"data-marqy":"","data-direction":r.direction,"data-pause-on-hover":r.pauseOnHover?"":void 0},t.$attrs),[e.createElementVNode("div",k,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList([0,1],v=>e.createElementVNode("div",e.mergeProps({key:v,"data-marqy-content":""},{ref_for:!0},r.manual?{"data-marqy-static":y.value}:{style:`animation-duration: ${y.value}`}),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Array.from({length:m.value},(u,f)=>f),u=>(e.openBlock(),e.createElementBlock("div",{key:u,ref_for:!0,ref:f=>{v===0&&u===0&&(p.value=f)},"aria-hidden":!(v===0&&u===0)||void 0,"data-marqy-item":""},[e.renderSlot(t.$slots,"default")],8,B))),128))],16)),64))])],16,g))}});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,IAAA,EACAA,EAAmB,KACfG,IAAIH,EAAmBI,EAAAA,qBAAqBD,EAAKE,GAAM,CAAEZ,EAAc,MAAQY,CAAE,CAAC,EACxF,CAAC,EAEDH,QAAMV,EAAUW,GAAO,CACrBF,IAAA,EACAA,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,IAAA,EACAC,IAAA,CACF,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 n, computed as q, watch as p, onUnmounted as O, openBlock as s, 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"], C = { "data-marqy-inner": "" }, E = ["aria-hidden"], V = /* @__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(i) {
|
|
12
|
+
const m = i, y = n(null), g = n(null), r = n({ width: 0, height: 0 }), t = n({ width: 0, height: 0 }), v = n(1), o = q(
|
|
13
|
+
() => m.direction === "up" || m.direction === "down"
|
|
14
|
+
), _ = q(
|
|
15
|
+
() => $(
|
|
16
|
+
o.value ? t.value.height : t.value.width,
|
|
17
|
+
v.value,
|
|
18
|
+
m.speed
|
|
19
|
+
)
|
|
20
|
+
);
|
|
21
|
+
let l = null, u = null;
|
|
22
|
+
return p(y, (e) => {
|
|
23
|
+
l?.(), l = null, e && (l = D(e, (a) => {
|
|
24
|
+
r.value = a;
|
|
25
|
+
}));
|
|
26
|
+
}), p(g, (e) => {
|
|
27
|
+
u?.(), u = null, e && (u = D(e, (a) => {
|
|
28
|
+
t.value = a;
|
|
29
|
+
}));
|
|
30
|
+
}), p([r, t, o], () => {
|
|
31
|
+
const e = o.value ? r.value.height : r.value.width, a = o.value ? t.value.height : t.value.width;
|
|
32
|
+
v.value = b(e, a);
|
|
33
|
+
}), O(() => {
|
|
34
|
+
l?.(), u?.();
|
|
35
|
+
}), (e, a) => (s(), c("div", w({
|
|
36
|
+
ref_key: "containerRef",
|
|
37
|
+
ref: y,
|
|
38
|
+
"data-marqy": "",
|
|
39
|
+
"data-direction": i.direction,
|
|
40
|
+
"data-pause-on-hover": i.pauseOnHover ? "" : void 0
|
|
41
|
+
}, e.$attrs), [
|
|
42
|
+
k("div", C, [
|
|
43
|
+
(s(), c(R, null, B([0, 1], (f) => k("div", w(
|
|
44
|
+
{
|
|
45
|
+
key: f,
|
|
46
|
+
"data-marqy-content": ""
|
|
47
|
+
},
|
|
48
|
+
{ ref_for: !0 },
|
|
49
|
+
i.manual ? { "data-marqy-static": _.value } : { style: `animation-duration: ${_.value}` }
|
|
50
|
+
), [
|
|
51
|
+
(s(!0), c(R, null, B(Array.from({ length: v.value }, (d, h) => h), (d) => (s(), c("div", {
|
|
52
|
+
key: d,
|
|
53
|
+
ref_for: !0,
|
|
54
|
+
ref: (h) => {
|
|
55
|
+
f === 0 && d === 0 && (g.value = h);
|
|
56
|
+
},
|
|
57
|
+
"aria-hidden": !(f === 0 && d === 0) || void 0,
|
|
58
|
+
"data-marqy-item": ""
|
|
59
|
+
}, [
|
|
60
|
+
S(e.$slots, "default")
|
|
61
|
+
], 8, E))), 128))
|
|
62
|
+
], 16)), 64))
|
|
63
|
+
])
|
|
64
|
+
], 16, A));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
export {
|
|
68
|
+
V as Marqy
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=vue.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.esm.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":";;;;;;;;;;;AAgBA,UAAMA,IAAQC,GAORC,IAAeC,EAAwB,IAAI,GAC3CC,IAAUD,EAAwB,IAAI,GACtCE,IAAgBF,EAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,GAC3CG,IAAWH,EAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,GACtCI,IAAOJ,EAAI,CAAC,GAEZK,IAAaC;AAAA,MACjB,MAAMT,EAAM,cAAc,QAAQA,EAAM,cAAc;AAAA,IAAA,GAGlDU,IAAoBD;AAAA,MAAS,MACjCE;AAAA,QACEH,EAAW,QAAQF,EAAS,MAAM,SAASA,EAAS,MAAM;AAAA,QAC1DC,EAAK;AAAA,QACLP,EAAM;AAAA,MAAA;AAAA,IACR;AAGF,QAAIY,IAAwC,MACxCC,IAAmC;AAEvC,WAAAC,EAAMZ,GAAc,CAACa,MAAO;AAC1B,MAAAH,IAAA,GACAA,IAAmB,MACfG,MAAIH,IAAmBI,EAAqBD,GAAI,CAACE,MAAM;AAAE,QAAAZ,EAAc,QAAQY;AAAA,MAAE,CAAC;AAAA,IACxF,CAAC,GAEDH,EAAMV,GAAS,CAACW,MAAO;AACrB,MAAAF,IAAA,GACAA,IAAc,MACVE,MAAIF,IAAcG,EAAqBD,GAAI,CAACE,MAAM;AAAE,QAAAX,EAAS,QAAQW;AAAA,MAAE,CAAC;AAAA,IAC9E,CAAC,GAEDH,EAAM,CAACT,GAAeC,GAAUE,CAAU,GAAG,MAAM;AACjD,YAAMU,IAAQV,EAAW,QAAQH,EAAc,MAAM,SAASA,EAAc,MAAM,OAC5Ec,IAAQX,EAAW,QAAQF,EAAS,MAAM,SAASA,EAAS,MAAM;AACxE,MAAAC,EAAK,QAAQa,EAASF,GAAOC,CAAK;AAAA,IACpC,CAAC,GAEDE,EAAY,MAAM;AAChB,MAAAT,IAAA,GACAC,IAAA;AAAA,IACF,CAAC,cAICS,EAAA,GAAAC,EA6BM,OA7BNC,EA6BM;AAAA,eA5BA;AAAA,MAAJ,KAAItB;AAAA,MACJ,cAAW;AAAA,MACV,kBAAgBD,EAAA;AAAA,MAChB,uBAAqBA,EAAA,eAAY,KAAQ;AAAA,IAAA,GAClCwB,EAAAA,MAAM,GAAA;AAAA,MAEdC,EAqBM,OArBNC,GAqBM;AAAA,cApBJJ,EAmBMK,GAAA,MAAAC,EAlBY,CAAA,GAAA,CAAA,GAAM,CAAfC,MADTJ,EAmBM,OAnBNF;AAAAA,UAmBM;AAAA,YAjBH,KAAKM;AAAA,YACN,sBAAmB;AAAA,UAAA;AAAA;UACA7B,EAAA,gCAA4CS,EAAA,MAAA,oCAAkEA,EAAA,KAAiB,GAAA;AAAA,QAAA;WAMlJY,EAAA,EAAA,GAAAC,EAQMK,GAAA,MAAAC,EAPU,MAAM,KAAI,EAAA,QAAWtB,EAAA,MAAA,GAAI,CAAKwB,GAAGC,MAAMA,CAAC,IAA/CC,YADTV,EAQM,OAAA;AAAA,YANH,KAAKU;AAAA;YACL,KAAG,CAAGlB,MAAE;AAAA,cAAWe,WAAeG,MAAG,QAAQ,QAAUlB;AAAA,YAAE;AAAA,YACzD,eAAW,EAAIe,MAAK,KAAUG,YAAc;AAAA,YAC7C,mBAAgB;AAAA,UAAA;YAEhBC,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;;;;;;"}
|