marqy 0.0.9 → 1.0.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.
Files changed (93) hide show
  1. package/.claude/settings.local.json +13 -0
  2. package/.vscode/settings.json +3 -0
  3. package/README.md +43 -12
  4. package/dist/marqy.css +131 -0
  5. package/dist/marqy.d.ts +4 -3
  6. package/dist/marqy.esm.js +1 -1
  7. package/dist/marqy.esm.js.map +1 -1
  8. package/dist/marqy.js +1 -1
  9. package/dist/marqy.js.map +1 -1
  10. package/dist/marqy.umd.js +1 -1
  11. package/dist/marqy.umd.js.map +1 -1
  12. package/examples/.astro/content-assets.mjs +1 -0
  13. package/examples/.astro/content-modules.mjs +1 -0
  14. package/examples/.astro/content.d.ts +154 -0
  15. package/examples/.astro/data-store.json +1 -0
  16. package/examples/.astro/fonts/font-akkurat-mono-500-normal-40f4e0ea0b54adc5.woff2 +0 -0
  17. package/examples/.astro/fonts/font-akkurat-mono-700-normal-b9f40f1447b587bd.woff +0 -0
  18. package/examples/.astro/fonts/font-grtsk-300-normal-8ef14ca23be6893c.woff2 +0 -0
  19. package/examples/.astro/fonts/font-grtsk-400-normal-13ba8954073ee64a.woff2 +0 -0
  20. package/examples/.astro/fonts/font-grtsk-500-normal-d214468daf16245f.woff2 +0 -0
  21. package/examples/.astro/fonts/font-grtsk-wide-500-normal-6f8c2658b9c2ba8e.woff2 +0 -0
  22. package/examples/.astro/fonts/font-grtsk-wide-700-normal-17406f09c7b68ca3.woff2 +0 -0
  23. package/examples/.astro/fonts.d.ts +4 -0
  24. package/examples/.astro/settings.json +5 -0
  25. package/examples/.astro/types.d.ts +3 -0
  26. package/examples/.yarnrc +1 -0
  27. package/examples/astro.config.mjs +101 -0
  28. package/examples/package.json +30 -0
  29. package/examples/public/apple-touch-icon.png +0 -0
  30. package/examples/public/favicon.ico +0 -0
  31. package/examples/public/favicon.svg +4 -0
  32. package/examples/public/marqy-logo.svg +35 -0
  33. package/examples/src/assets/baggu.jpg +0 -0
  34. package/examples/src/assets/bluesky.jpg +0 -0
  35. package/examples/src/assets/clams-lol.jpg +0 -0
  36. package/examples/src/assets/coconut-club-2.jpg +0 -0
  37. package/examples/src/assets/coconut-club.jpg +0 -0
  38. package/examples/src/assets/lucci.jpg +0 -0
  39. package/examples/src/assets/phila-museum.jpg +0 -0
  40. package/examples/src/assets/red-rooster.jpg +0 -0
  41. package/examples/src/assets/sanity.jpg +0 -0
  42. package/examples/src/assets/usal.jpg +0 -0
  43. package/examples/src/assets/vacation.jpg +0 -0
  44. package/examples/src/components/CopyButton.tsx +26 -0
  45. package/examples/src/components/Divider.tsx +3 -0
  46. package/examples/src/components/Footer.astro +7 -0
  47. package/examples/src/components/InUse.astro +89 -0
  48. package/examples/src/components/InUseExamples.tsx +60 -0
  49. package/examples/src/components/MarqyCredits.tsx +33 -0
  50. package/examples/src/components/MarqyHero.tsx +77 -0
  51. package/examples/src/components/MarqyInteractiveDemo.tsx +46 -0
  52. package/examples/src/components/MarqyPlayground.tsx +496 -0
  53. package/examples/src/components/MarqySpeedDemo.tsx +34 -0
  54. package/examples/src/components/MarqyVerticalDemo.tsx +44 -0
  55. package/examples/src/components/Playground.astro +11 -0
  56. package/examples/src/components/QuickStart.astro +59 -0
  57. package/examples/src/components/SectionHeadline.tsx +41 -0
  58. package/examples/src/components/Tile.tsx +32 -0
  59. package/examples/src/content.config.ts +3 -0
  60. package/examples/src/fonts/Akkurat-Mono-Bold.woff +0 -0
  61. package/examples/src/fonts/Akkurat-Mono.woff +0 -0
  62. package/examples/src/fonts/Akkurat-Mono.woff2 +0 -0
  63. package/examples/src/fonts/Grtsk-Peta-Light.woff +0 -0
  64. package/examples/src/fonts/Grtsk-Peta-Light.woff2 +0 -0
  65. package/examples/src/fonts/Grtsk-Peta-Medium.woff +0 -0
  66. package/examples/src/fonts/Grtsk-Peta-Medium.woff2 +0 -0
  67. package/examples/src/fonts/Grtsk-Peta-Regular.woff +0 -0
  68. package/examples/src/fonts/Grtsk-Peta-Regular.woff2 +0 -0
  69. package/examples/src/fonts/Grtsk-Tera-Bold.woff +0 -0
  70. package/examples/src/fonts/Grtsk-Tera-Bold.woff2 +0 -0
  71. package/examples/src/fonts/Grtsk-Tera-Medium.woff +0 -0
  72. package/examples/src/fonts/Grtsk-Tera-Medium.woff2 +0 -0
  73. package/examples/src/layouts/layout.astro +107 -0
  74. package/examples/src/lib/cn.ts +16 -0
  75. package/examples/src/lib/helpers.ts +13 -0
  76. package/examples/src/lib/hooks/useCopyText.ts +47 -0
  77. package/examples/src/pages/index.astro +56 -0
  78. package/examples/src/styles/_base.css +155 -0
  79. package/examples/src/styles/_components.css +123 -0
  80. package/examples/src/styles/_utilities.css +23 -0
  81. package/examples/src/styles/app.css +397 -0
  82. package/examples/tsconfig.json +3 -0
  83. package/examples/yarn.lock +3316 -0
  84. package/marqy.css +131 -0
  85. package/package.json +26 -12
  86. package/src/marqy.tsx +63 -53
  87. package/tsconfig.json +5 -2
  88. package/dist/marqy.modern.js +0 -2
  89. package/dist/marqy.modern.js.map +0 -1
  90. package/examples/index.css +0 -96
  91. package/examples/index.html +0 -15
  92. package/examples/index.js +0 -62
  93. package/styles.css +0 -65
@@ -0,0 +1,13 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(yarn install:*)",
5
+ "Bash(node_modules/.bin/astro --version)",
6
+ "Bash(npx update-browserslist-db@latest)",
7
+ "Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\(json.dumps\\(d.get\\('exports', {}\\), indent=2\\)\\)\")",
8
+ "WebFetch(domain:base-ui.com)",
9
+ "Bash(yarn add:*)",
10
+ "Bash(md5 /Users/ndimatteo/code/plugins/marqy/examples/src/components/MarqyPlayground.tsx)"
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "markdown-preview-enhanced.codeBlockTheme": "default.css"
3
+ }
package/README.md CHANGED
@@ -1,28 +1,59 @@
1
1
  <p align="center">
2
- <img src="https://user-images.githubusercontent.com/737188/111051609-54b78580-8422-11eb-8b7a-e85e29382785.png" align="center" height="120" />
2
+ <img src="./examples/public/marqy-logo.svg" align="center" height="40" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>Accessible React Marquees done right</strong><br />
7
- Synchronizes speeds uses CSS animations ✨ render react components ✨
6
+ <strong>High-fidelity loops for modern interfaces</strong><br />
7
+ under 1kB gzipped // synchronized speeds // CSS-based animations
8
8
  </p>
9
9
 
10
+ [![npm](https://img.shields.io/npm/v/marqy?style=flat&colorA=000000&colorB=000000
11
+ )](https://www.npmjs.com/package/marqy)
12
+ [![downloads](https://img.shields.io/npm/dm/marqy?style=flat&colorA=000000&colorB=000000
13
+ )](https://www.npmjs.com/package/marqy)
14
+ [![size](https://img.shields.io/bundlephobia/minzip/marqy?style=flat&label=size&colorA=000000&colorB=000000)](https://bundlephobia.com/package/marqy)
15
+
16
+ # DEMO: [MARQY.PARTY](https://marqy.party)
17
+
10
18
  ## Install
11
19
 
12
- ```sh
13
- npm i marqy
14
- ```
15
- or using yarn
16
20
  ```sh
17
21
  yarn add marqy
18
22
  ```
19
23
 
20
- ## Development
24
+ or using npm
25
+
26
+ ```sh
27
+ npm i marqy
21
28
  ```
22
- yarn dev
29
+
30
+ ## Usage
31
+
32
+ #### Import React
33
+ ```tsx
34
+ import { Marqy } from 'marqy';
35
+
36
+ <Marqy speed={1} direction="left" pauseOnHover>
37
+ <span>Your content here</span>
38
+ </Marqy>
23
39
  ```
24
40
 
25
- ## Build
41
+ #### Import CSS
42
+ ```js
43
+ import 'marqy/dist/marqy.css';
26
44
  ```
27
- yarn build
28
- ```
45
+ **or add it manually:** [see marqy.css stylesheet](./marqy.css)
46
+
47
+ ### Properties
48
+
49
+ | Name | Type | Description |
50
+ | -------------- | ------------------------------- | ----------------------------------------- |
51
+ | `speed` | number **[default: 0.5]** | Scroll speed multiplier |
52
+ | `direction` | string **[default: 'left']** | Direction of scroll |
53
+ | `pauseOnHover` | boolean **[default: false]** | Pauses the animation on hover |
54
+ | `manual` | boolean **[default: false]** | Renders without applying CSS animations |
55
+ | `children` | React.ReactNode | Content to repeat inside the marqy |
56
+
57
+ ### License
58
+
59
+ MIT © [Nick DiMatteo](https://www.nickdimatteo.com) + [Mike Wagz](https://www.mikewagz.com)
package/dist/marqy.css ADDED
@@ -0,0 +1,131 @@
1
+ [data-marqy] {
2
+ position: relative;
3
+ width: 100%;
4
+ }
5
+
6
+ [data-marqy][data-direction='left'],
7
+ [data-marqy][data-direction='right'] {
8
+ overflow-x: clip;
9
+ }
10
+
11
+ [data-marqy][data-direction='up'],
12
+ [data-marqy][data-direction='down'] {
13
+ overflow-y: clip;
14
+ }
15
+
16
+ [data-marqy-inner] {
17
+ display: flex;
18
+ -ms-overflow-style: none;
19
+ scrollbar-width: none;
20
+ }
21
+
22
+ [data-marqy][data-direction='up'] [data-marqy-inner],
23
+ [data-marqy][data-direction='down'] [data-marqy-inner],
24
+ [data-marqy][data-direction='up'] [data-marqy-content],
25
+ [data-marqy][data-direction='down'] [data-marqy-content] {
26
+ flex-direction: column;
27
+ }
28
+
29
+ [data-marqy-inner]::-webkit-scrollbar {
30
+ display: none;
31
+ }
32
+
33
+ [data-marqy][data-direction='right'] [data-marqy-inner] {
34
+ justify-content: flex-end;
35
+ }
36
+
37
+ [data-marqy][data-direction='down'] [data-marqy-inner],
38
+ [data-marqy][data-direction='down'] [data-marqy-content] {
39
+ justify-content: flex-end;
40
+ }
41
+
42
+ [data-marqy-content] {
43
+ display: flex;
44
+ flex: 1 0 auto;
45
+ animation-timing-function: linear;
46
+ animation-iteration-count: infinite;
47
+ animation-play-state: running;
48
+ will-change: transform;
49
+ }
50
+
51
+ [data-marqy-static] [data-marqy-content] {
52
+ animation: none !important;
53
+ }
54
+
55
+ [data-marqy][data-direction='left'] [data-marqy-content] {
56
+ animation-name: marqyL;
57
+ }
58
+
59
+ [data-marqy][data-direction='right'] [data-marqy-content] {
60
+ animation-name: marqyR;
61
+ }
62
+
63
+ [data-marqy][data-direction='up'] [data-marqy-content] {
64
+ animation-name: marqyU;
65
+ }
66
+
67
+ [data-marqy][data-direction='down'] [data-marqy-content] {
68
+ animation-name: marqyD;
69
+ }
70
+
71
+ [data-marqy][data-pause-on-hover]:hover
72
+ > [data-marqy-inner]
73
+ > [data-marqy-content] {
74
+ animation-play-state: paused;
75
+ }
76
+
77
+ [data-marqy-item] {
78
+ flex-grow: 0;
79
+ }
80
+
81
+ @keyframes marqyL {
82
+ 0% {
83
+ transform: translate3d(0, 0, 0);
84
+ }
85
+ 100% {
86
+ transform: translate3d(-100%, 0, 0);
87
+ }
88
+ }
89
+
90
+ @keyframes marqyR {
91
+ 0% {
92
+ transform: translate3d(0, 0, 0);
93
+ }
94
+ 100% {
95
+ transform: translate3d(100%, 0, 0);
96
+ }
97
+ }
98
+
99
+ @keyframes marqyU {
100
+ 0% {
101
+ transform: translate3d(0, 0, 0);
102
+ }
103
+ 100% {
104
+ transform: translate3d(0, -100%, 0);
105
+ }
106
+ }
107
+
108
+ @keyframes marqyD {
109
+ 0% {
110
+ transform: translate3d(0, -100%, 0);
111
+ }
112
+ 100% {
113
+ transform: translate3d(0, 0, 0);
114
+ }
115
+ }
116
+
117
+ @media (prefers-reduced-motion) {
118
+ [data-marqy][data-direction='left'] [data-marqy-inner],
119
+ [data-marqy][data-direction='right'] [data-marqy-inner] {
120
+ overflow-x: scroll;
121
+ }
122
+
123
+ [data-marqy][data-direction='up'],
124
+ [data-marqy][data-direction='down'] {
125
+ overflow-y: scroll;
126
+ }
127
+
128
+ [data-marqy-content] {
129
+ animation: none !important;
130
+ }
131
+ }
package/dist/marqy.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react';
2
- export declare interface MarqyProps {
2
+ export interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {
3
3
  speed?: number;
4
- direction?: 'left' | 'right';
4
+ direction?: 'left' | 'right' | 'up' | 'down';
5
5
  pauseOnHover?: boolean;
6
+ manual?: boolean;
6
7
  children: React.ReactNode;
7
8
  }
8
- export declare function Marqy({ speed, direction, pauseOnHover, children, ...rest }: MarqyProps): JSX.Element;
9
+ export declare function Marqy({ speed, direction, pauseOnHover, manual, children, ...rest }: MarqyProps): React.ReactElement;
package/dist/marqy.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{useState as n,useEffect as r,createElement as e,useRef as t,useCallback as i}from"react";function a(t){var i=t.speed,a=void 0===i?.5:i,o=t.direction,c=void 0===o?"left":o,l=t.pauseOnHover,d=t.children,f=function(n,r){if(null==n)return{};var e,t,i={},a=Object.keys(n);for(t=0;t<a.length;t++)r.indexOf(e=a[t])>=0||(i[e]=n[e]);return i}(t,["speed","direction","pauseOnHover","children"]),v=n(1),s=v[0],m=v[1],y=u(),p=y[0],h=y[1],O=u(),b=O[0],q=O[1];return r(function(){h&&q&&m(Math.ceil(h/q))},[h,q]),e("div",Object.assign({ref:p,"data-marqy":"","data-direction":c,"data-pause-on-hover":l?"":null},f),e("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(n,r){return e("div",{key:r,"data-marqy-content":"",style:{animationDuration:(null!=q?q:0)*s/(100*a)+"s"}},new Array(s).fill(0).map(function(n,t){var i=0===r&&0===t;return e("div",{key:t,ref:i?b:null,"aria-hidden":!i||null,"data-marqy-item":""},d)}))})))}function u(){var e=n(0),a=e[0],u=e[1],o=n(null),c=o[0],l=o[1],d=t(null),f=i(function(){var n;return null==(n=d.current)?void 0:n.disconnect()},[]),v=i(function(){d.current=new ResizeObserver(function(n){return u(n[0].contentRect.width)}),c&&d.current.observe(c)},[c]);return r(function(){return v(),function(){return f()}},[f,v]),[l,a]}export{a as Marqy};
1
+ import*as e from"react";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},t.apply(null,arguments)}var n=["speed","direction","pauseOnHover","manual","children"];function r(r){var a=r.speed,u=void 0===a?.5:a,c=r.direction,l=void 0===c?"left":c,o=r.pauseOnHover,d=r.manual,h=void 0!==d&&d,f=r.children,s=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(r,n),v=e.useState(1),m=v[0],w=v[1],p=i(),y=p[0],g=p[1],O=i(),b=O[0],q=O[1],E="up"===l||"down"===l,k=e.useCallback(function(e){return(null!=e?e:0)*m/(100*u)+"s"},[m,u]);return e.useEffect(function(){!E&&g.width&&q.width&&w(Math.ceil(g.width/q.width)),E&&g.height&&q.height&&w(Math.ceil(g.height/q.height))},[E,g,q]),e.createElement("div",t({ref:y,"data-marqy":"","data-direction":l,"data-pause-on-hover":o?"":null},s),e.createElement("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(n,r){return e.createElement("div",t({key:r,"data-marqy-content":""},h?{"data-marqy-static":k(E?q.height:q.width)}:{style:{animationDuration:k(E?q.height:q.width)}}),new Array(m).fill(0).map(function(t,n){var i=0===r&&0===n;return e.createElement("div",{key:n,ref:i?b:null,"aria-hidden":!i||null,"data-marqy-item":""},f)}))})))}function i(){var t=e.useState({width:0,height:0}),n=t[0],r=t[1],i=e.useRef(null);return[e.useCallback(function(e){var t;null==(t=i.current)||t.disconnect(),e&&(i.current=new ResizeObserver(function(e){var t=e[0];return r({width:t.contentRect.width,height:t.contentRect.height})}),i.current.observe(e))},[]),n]}export{r as Marqy};
2
2
  //# sourceMappingURL=marqy.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marqy.esm.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport declare interface MarqyProps {\n speed?: number;\n direction?: 'left' | 'right';\n pauseOnHover?: boolean;\n children: React.ReactNode;\n}\n\nexport function Marqy({\n speed = 0.5,\n direction = 'left',\n pauseOnHover,\n children,\n ...rest\n}: MarqyProps): JSX.Element {\n const [reps, setReps] = React.useState(1)\n\n const [container, containerWidth] = useWidth()\n const [item, itemWidth] = useWidth()\n\n React.useEffect(() => {\n if (containerWidth && itemWidth) {\n setReps(Math.ceil(containerWidth / itemWidth))\n }\n }, [containerWidth, itemWidth])\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 return (\n <div\n key={clone}\n data-marqy-content=\"\"\n style={{\n animationDuration: `${\n ((itemWidth ?? 0) * reps) / (100 * speed)\n }s`,\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 || null}\n data-marqy-item=\"\"\n >\n {children}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction useWidth() {\n const [width, setWidth] = React.useState(0)\n const [node, setNode] = React.useState<HTMLElement | null>(null)\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const disconnect = React.useCallback(() => observer.current?.disconnect(), [])\n\n const observe = React.useCallback(() => {\n observer.current = new ResizeObserver(([entry]) => setWidth(entry.contentRect.width))\n if (node) observer.current.observe(node)\n }, [node])\n\n React.useEffect(() => {\n observe()\n return () => disconnect()\n }, [disconnect, observe])\n\n return [setNode, width] as const\n}\n"],"names":["Marqy","speed","direction","pauseOnHover","children","rest","React","reps","setReps","useWidth","container","containerWidth","item","itemWidth","Math","ceil","ref","Array","fill","map","_","clone","key","style","animationDuration","rep","isFirstItem","width","setWidth","node","setNode","observer","disconnect","current","_observer$current","observe","ResizeObserver","contentRect"],"mappings":"yGASgBA,aACdC,MAAAA,aAAQ,SACRC,UAAAA,aAAY,SACZC,IAAAA,aACAC,IAAAA,SACGC,0LAEqBC,EAAe,GAAhCC,OAAMC,SAEuBC,IAA7BC,OAAWC,SACQF,IAAnBG,OAAMC,OAQb,OANAP,EAAgB,WACVK,GAAkBE,GACpBL,EAAQM,KAAKC,KAAKJ,EAAiBE,KAEpC,CAACF,EAAgBE,IAGlBP,uBACEU,IAAKN,eACM,oBACKR,wBACKC,EAAe,GAAK,MACrCE,GAEJC,4BAAsB,IACnB,IAAIW,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OACEf,SACEgB,IAAKD,uBACc,GACnBE,MAAO,CACLC,yBACIX,EAAAA,EAAa,GAAKN,GAAS,IAAMN,SAItC,IAAIgB,MAAMV,GAAMW,KAAK,GAAGC,IAAI,SAACC,EAAGK,GAC/B,IAAMC,EAAwB,IAAVL,GAAuB,IAARI,EACnC,OACEnB,SACEgB,IAAKG,EACLT,IAAKU,EAAcd,EAAO,oBACZc,GAAe,uBACb,IAEftB,UAYrB,SAASK,UACmBH,EAAe,GAAlCqB,OAAOC,SACUtB,EAAmC,MAApDuB,OAAMC,OACPC,EAAWzB,EAAoC,MAE/C0B,EAAa1B,EAAkB,iCAAMyB,EAASE,gBAATC,EAAkBF,cAAc,IAErEG,EAAU7B,EAAkB,WAChCyB,EAASE,QAAU,IAAIG,eAAe,mBAAaR,OAAeS,YAAYV,SAC1EE,GAAME,EAASE,QAAQE,QAAQN,IAClC,CAACA,IAOJ,OALAvB,EAAgB,WAEd,OADA6B,sBACaH,MACZ,CAACA,EAAYG,IAET,CAACL,EAASH"}
1
+ {"version":3,"file":"marqy.esm.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {\n speed?: number\n direction?: 'left' | 'right' | 'up' | 'down'\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) => {\n return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`\n },\n [reps, speed]\n )\n\n React.useEffect(() => {\n if (!isVertical && containerDimensions.width && itemDimensions.width) {\n setReps(Math.ceil(containerDimensions.width / itemDimensions.width))\n }\n if (isVertical && containerDimensions.height && itemDimensions.height) {\n setReps(Math.ceil(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 || null}\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({ width: 0, height: 0 })\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const ref = React.useCallback((node: HTMLElement | null) => {\n observer.current?.disconnect()\n if (!node) return\n observer.current = new ResizeObserver(([entry]) =>\n setDimensions({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n )\n observer.current.observe(node)\n }, [])\n\n return [ref, dimensions] as const\n}\n"],"names":["_excluded","Marqy","_ref","_ref$speed","speed","_ref$direction","direction","pauseOnHover","_ref$manual","manual","children","rest","_objectWithoutPropertiesLoose","_React$useState","React","useState","reps","setReps","_useDimensions","useDimensions","container","containerDimensions","_useDimensions2","item","itemDimensions","isVertical","getAnimationDuration","useCallback","itemDimension","useEffect","width","Math","ceil","height","ref","createElement","Array","fill","map","_","clone","_extends","key","style","animationDuration","rep","isFirstItem","_React$useState2","dimensions","setDimensions","observer","useRef","node","_observer$current","current","disconnect","ResizeObserver","_ref2","entry","contentRect","observe"],"mappings":"gPAAA,IAAAA,EAAA,CAAA,QAAA,YAAA,eAAA,SAAA,YAUgB,SAAAC,EAAKC,OAORC,EAAAD,EANXE,MAAAA,OAAQ,IAAHD,EAAG,GAAGA,EAAAE,EAAAH,EACXI,UAAAA,OAAS,IAAAD,EAAG,OAAMA,EAClBE,EAAYL,EAAZK,aAAYC,EAAAN,EACZO,OAAAA,OAAM,IAAAD,GAAQA,EACdE,EAAQR,EAARQ,SACGC,6IAAIC,CAAAV,EAAAF,GAEPa,EAAwBC,EAAMC,SAAS,GAAhCC,EAAIH,EAAA,GAAEI,EAAOJ,EAAA,GAEpBK,EAAyCC,IAAlCC,EAASF,EAAEG,GAAAA,EAAmBH,EACrC,GAAAI,EAA+BH,IAAxBI,EAAID,EAAEE,GAAAA,EAAcF,EAAA,GAErBG,EAA2B,OAAdnB,GAAoC,SAAdA,EAEnCoB,EAAuBZ,EAAMa,YACjC,SAACC,GACC,OAAYA,MAAAA,EAAAA,EAAiB,GAAKZ,GAAS,IAAMZ,GACnD,GAAA,EACA,CAACY,EAAMZ,IAYT,OATAU,EAAMe,UAAU,YACTJ,GAAcJ,EAAoBS,OAASN,EAAeM,OAC7Db,EAAQc,KAAKC,KAAKX,EAAoBS,MAAQN,EAAeM,QAE3DL,GAAcJ,EAAoBY,QAAUT,EAAeS,QAC7DhB,EAAQc,KAAKC,KAAKX,EAAoBY,OAAST,EAAeS,QAElE,EAAG,CAACR,EAAYJ,EAAqBG,IAGnCV,yBACEoB,IAAKd,EACM,aAAA,oBACKd,EAAS,sBACJC,EAAe,GAAK,MACrCI,GAEJG,EAAAqB,cAAA,MAAA,CAAA,mBAAsB,IACnB,IAAIC,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OAAA1B,EAAAqB,cAAA,MAAAM,EACEC,CAAAA,IAAKF,EAAK,qBACS,IACd/B,EACD,CAAE,oBAAqBiB,EAAqBD,EAAaD,EAAeS,OAAST,EAAeM,QAChG,CAAEa,MAAO,CAAEC,kBAAmBlB,EAAqBD,EAAaD,EAAeS,OAAST,EAAeM,UAG1G,IAAIM,MAAMpB,GAAMqB,KAAK,GAAGC,IAAI,SAACC,EAAGM,GAC/B,IAAMC,EAAwB,IAAVN,GAAuB,IAARK,EACnC,OACE/B,EAAAqB,cAAA,MAAA,CACEO,IAAKG,EACLX,IAAKY,EAAcvB,EAAO,KAAI,eAChBuB,GAAe,KACb,kBAAA,IAEfpC,EAGP,GACI,IAKhB,CAEA,SAASS,IACP,IAAA4B,EAAoCjC,EAAMC,SAAS,CAAEe,MAAO,EAAGG,OAAQ,IAAhEe,EAAUD,EAAEE,GAAAA,EAAaF,KAC1BG,EAAWpC,EAAMqC,OAA8B,MAcrD,MAAO,CAZKrC,EAAMa,YAAY,SAACyB,GAA4BC,IAAAA,EACzDA,OAAAA,EAAAH,EAASI,UAATD,EAAkBE,aACbH,IACLF,EAASI,QAAU,IAAIE,eAAe,SAAAC,OAAEC,EAAKD,EAC3C,GAAA,OAAAR,EAAc,CACZnB,MAAO4B,EAAMC,YAAY7B,MACzBG,OAAQyB,EAAMC,YAAY1B,QAC1B,GAEJiB,EAASI,QAAQM,QAAQR,GAC3B,EAAG,IAEUJ,EACf"}
package/dist/marqy.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("react");function n(){var n=e.useState(0),t=n[0],r=n[1],a=e.useState(null),u=a[0],i=a[1],c=e.useRef(null),l=e.useCallback(function(){var e;return null==(e=c.current)?void 0:e.disconnect()},[]),o=e.useCallback(function(){c.current=new ResizeObserver(function(e){return r(e[0].contentRect.width)}),u&&c.current.observe(u)},[u]);return e.useEffect(function(){return o(),function(){return l()}},[l,o]),[i,t]}exports.Marqy=function(t){var r=t.speed,a=void 0===r?.5:r,u=t.direction,i=void 0===u?"left":u,c=t.pauseOnHover,l=t.children,o=function(e,n){if(null==e)return{};var t,r,a={},u=Object.keys(e);for(r=0;r<u.length;r++)n.indexOf(t=u[r])>=0||(a[t]=e[t]);return a}(t,["speed","direction","pauseOnHover","children"]),d=e.useState(1),f=d[0],s=d[1],v=n(),m=v[0],y=v[1],p=n(),h=p[0],b=p[1];return e.useEffect(function(){y&&b&&s(Math.ceil(y/b))},[y,b]),e.createElement("div",Object.assign({ref:m,"data-marqy":"","data-direction":i,"data-pause-on-hover":c?"":null},o),e.createElement("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(n,t){return e.createElement("div",{key:t,"data-marqy-content":"",style:{animationDuration:(null!=b?b:0)*f/(100*a)+"s"}},new Array(f).fill(0).map(function(n,r){var a=0===t&&0===r;return e.createElement("div",{key:r,ref:a?h:null,"aria-hidden":!a||null,"data-marqy-item":""},l)}))})))};
1
+ function e(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var t=/*#__PURE__*/e(require("react"));function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(null,arguments)}var r=["speed","direction","pauseOnHover","manual","children"];function a(){var e=t.useState({width:0,height:0}),n=e[0],r=e[1],a=t.useRef(null);return[t.useCallback(function(e){var t;null==(t=a.current)||t.disconnect(),e&&(a.current=new ResizeObserver(function(e){var t=e[0];return r({width:t.contentRect.width,height:t.contentRect.height})}),a.current.observe(e))},[]),n]}exports.Marqy=function(e){var i=e.speed,u=void 0===i?.5:i,c=e.direction,l=void 0===c?"left":c,o=e.pauseOnHover,d=e.manual,h=void 0!==d&&d,f=e.children,s=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,r),v=t.useState(1),y=v[0],m=v[1],p=a(),w=p[0],g=p[1],O=a(),b=O[0],q=O[1],j="up"===l||"down"===l,E=t.useCallback(function(e){return(null!=e?e:0)*y/(100*u)+"s"},[y,u]);return t.useEffect(function(){!j&&g.width&&q.width&&m(Math.ceil(g.width/q.width)),j&&g.height&&q.height&&m(Math.ceil(g.height/q.height))},[j,g,q]),t.createElement("div",n({ref:w,"data-marqy":"","data-direction":l,"data-pause-on-hover":o?"":null},s),t.createElement("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(e,r){return t.createElement("div",n({key:r,"data-marqy-content":""},h?{"data-marqy-static":E(j?q.height:q.width)}:{style:{animationDuration:E(j?q.height:q.width)}}),new Array(y).fill(0).map(function(e,n){var a=0===r&&0===n;return t.createElement("div",{key:n,ref:a?b:null,"aria-hidden":!a||null,"data-marqy-item":""},f)}))})))};
2
2
  //# sourceMappingURL=marqy.js.map
package/dist/marqy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"marqy.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport declare interface MarqyProps {\n speed?: number;\n direction?: 'left' | 'right';\n pauseOnHover?: boolean;\n children: React.ReactNode;\n}\n\nexport function Marqy({\n speed = 0.5,\n direction = 'left',\n pauseOnHover,\n children,\n ...rest\n}: MarqyProps): JSX.Element {\n const [reps, setReps] = React.useState(1)\n\n const [container, containerWidth] = useWidth()\n const [item, itemWidth] = useWidth()\n\n React.useEffect(() => {\n if (containerWidth && itemWidth) {\n setReps(Math.ceil(containerWidth / itemWidth))\n }\n }, [containerWidth, itemWidth])\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 return (\n <div\n key={clone}\n data-marqy-content=\"\"\n style={{\n animationDuration: `${\n ((itemWidth ?? 0) * reps) / (100 * speed)\n }s`,\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 || null}\n data-marqy-item=\"\"\n >\n {children}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction useWidth() {\n const [width, setWidth] = React.useState(0)\n const [node, setNode] = React.useState<HTMLElement | null>(null)\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const disconnect = React.useCallback(() => observer.current?.disconnect(), [])\n\n const observe = React.useCallback(() => {\n observer.current = new ResizeObserver(([entry]) => setWidth(entry.contentRect.width))\n if (node) observer.current.observe(node)\n }, [node])\n\n React.useEffect(() => {\n observe()\n return () => disconnect()\n }, [disconnect, observe])\n\n return [setNode, width] as const\n}\n"],"names":["useWidth","React","width","setWidth","node","setNode","observer","disconnect","current","_observer$current","observe","ResizeObserver","contentRect","speed","direction","pauseOnHover","children","rest","reps","setReps","container","containerWidth","item","itemWidth","Math","ceil","ref","Array","fill","map","_","clone","key","style","animationDuration","rep","isFirstItem"],"mappings":"uBAoEA,SAASA,UACmBC,WAAe,GAAlCC,OAAOC,SACUF,WAAmC,MAApDG,OAAMC,OACPC,EAAWL,SAAoC,MAE/CM,EAAaN,cAAkB,iCAAMK,EAASE,gBAATC,EAAkBF,cAAc,IAErEG,EAAUT,cAAkB,WAChCK,EAASE,QAAU,IAAIG,eAAe,mBAAaR,OAAeS,YAAYV,SAC1EE,GAAME,EAASE,QAAQE,QAAQN,IAClC,CAACA,IAOJ,OALAH,YAAgB,WAEd,OADAS,sBACaH,MACZ,CAACA,EAAYG,IAET,CAACL,EAASH,qCA3EjBW,MAAAA,aAAQ,SACRC,UAAAA,aAAY,SACZC,IAAAA,aACAC,IAAAA,SACGC,0LAEqBhB,WAAe,GAAhCiB,OAAMC,SAEuBnB,IAA7BoB,OAAWC,SACQrB,IAAnBsB,OAAMC,OAQb,OANAtB,YAAgB,WACVoB,GAAkBE,GACpBJ,EAAQK,KAAKC,KAAKJ,EAAiBE,KAEpC,CAACF,EAAgBE,IAGlBtB,qCACEyB,IAAKN,eACM,oBACKN,wBACKC,EAAe,GAAK,MACrCE,GAEJhB,0CAAsB,IACnB,IAAI0B,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OACE9B,uBACE+B,IAAKD,uBACc,GACnBE,MAAO,CACLC,yBACIX,EAAAA,EAAa,GAAKL,GAAS,IAAML,SAItC,IAAIc,MAAMT,GAAMU,KAAK,GAAGC,IAAI,SAACC,EAAGK,GAC/B,IAAMC,EAAwB,IAAVL,GAAuB,IAARI,EACnC,OACElC,uBACE+B,IAAKG,EACLT,IAAKU,EAAcd,EAAO,oBACZc,GAAe,uBACb,IAEfpB"}
1
+ {"version":3,"file":"marqy.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {\n speed?: number\n direction?: 'left' | 'right' | 'up' | 'down'\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) => {\n return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`\n },\n [reps, speed]\n )\n\n React.useEffect(() => {\n if (!isVertical && containerDimensions.width && itemDimensions.width) {\n setReps(Math.ceil(containerDimensions.width / itemDimensions.width))\n }\n if (isVertical && containerDimensions.height && itemDimensions.height) {\n setReps(Math.ceil(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 || null}\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({ width: 0, height: 0 })\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const ref = React.useCallback((node: HTMLElement | null) => {\n observer.current?.disconnect()\n if (!node) return\n observer.current = new ResizeObserver(([entry]) =>\n setDimensions({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n )\n observer.current.observe(node)\n }, [])\n\n return [ref, dimensions] as const\n}\n"],"names":["_excluded","useDimensions","_React$useState2","React","useState","width","height","dimensions","setDimensions","observer","useRef","useCallback","node","_observer$current","current","disconnect","ResizeObserver","_ref2","entry","contentRect","observe","_ref","_ref$speed","speed","_ref$direction","direction","pauseOnHover","_ref$manual","manual","children","rest","_objectWithoutPropertiesLoose","_React$useState","reps","setReps","_useDimensions","container","containerDimensions","_useDimensions2","item","itemDimensions","isVertical","getAnimationDuration","itemDimension","useEffect","Math","ceil","ref","createElement","Array","fill","map","_","clone","_extends","key","style","animationDuration","rep","isFirstItem"],"mappings":"6gBAAA,IAAAA,EAAA,CAAA,QAAA,YAAA,eAAA,SAAA,YA+EA,SAASC,IACP,IAAAC,EAAoCC,EAAMC,SAAS,CAAEC,MAAO,EAAGC,OAAQ,IAAhEC,EAAUL,EAAEM,GAAAA,EAAaN,KAC1BO,EAAWN,EAAMO,OAA8B,MAcrD,MAAO,CAZKP,EAAMQ,YAAY,SAACC,GAA4BC,IAAAA,EACzDA,OAAAA,EAAAJ,EAASK,UAATD,EAAkBE,aACbH,IACLH,EAASK,QAAU,IAAIE,eAAe,SAAAC,OAAEC,EAAKD,EAC3C,GAAA,OAAAT,EAAc,CACZH,MAAOa,EAAMC,YAAYd,MACzBC,OAAQY,EAAMC,YAAYb,QAC1B,GAEJG,EAASK,QAAQM,QAAQR,GAC3B,EAAG,IAEUL,EACf,eAtFgB,SAAKc,OAORC,EAAAD,EANXE,MAAAA,OAAQ,IAAHD,EAAG,GAAGA,EAAAE,EAAAH,EACXI,UAAAA,OAAS,IAAAD,EAAG,OAAMA,EAClBE,EAAYL,EAAZK,aAAYC,EAAAN,EACZO,OAAAA,OAAM,IAAAD,GAAQA,EACdE,EAAQR,EAARQ,SACGC,6IAAIC,CAAAV,EAAArB,GAEPgC,EAAwB7B,EAAMC,SAAS,GAAhC6B,EAAID,EAAA,GAAEE,EAAOF,EAAA,GAEpBG,EAAyClC,IAAlCmC,EAASD,EAAEE,GAAAA,EAAmBF,EACrC,GAAAG,EAA+BrC,IAAxBsC,EAAID,EAAEE,GAAAA,EAAcF,EAAA,GAErBG,EAA2B,OAAdhB,GAAoC,SAAdA,EAEnCiB,EAAuBvC,EAAMQ,YACjC,SAACgC,GACC,OAAYA,MAAAA,EAAAA,EAAiB,GAAKV,GAAS,IAAMV,GACnD,GAAA,EACA,CAACU,EAAMV,IAYT,OATApB,EAAMyC,UAAU,YACTH,GAAcJ,EAAoBhC,OAASmC,EAAenC,OAC7D6B,EAAQW,KAAKC,KAAKT,EAAoBhC,MAAQmC,EAAenC,QAE3DoC,GAAcJ,EAAoB/B,QAAUkC,EAAelC,QAC7D4B,EAAQW,KAAKC,KAAKT,EAAoB/B,OAASkC,EAAelC,QAElE,EAAG,CAACmC,EAAYJ,EAAqBG,IAGnCrC,yBACE4C,IAAKX,EACM,aAAA,oBACKX,EAAS,sBACJC,EAAe,GAAK,MACrCI,GAEJ3B,EAAA6C,cAAA,MAAA,CAAA,mBAAsB,IACnB,IAAIC,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OAAAlD,EAAA6C,cAAA,MAAAM,EACEC,CAAAA,IAAKF,EAAK,qBACS,IACdzB,EACD,CAAE,oBAAqBc,EAAqBD,EAAaD,EAAelC,OAASkC,EAAenC,QAChG,CAAEmD,MAAO,CAAEC,kBAAmBf,EAAqBD,EAAaD,EAAelC,OAASkC,EAAenC,UAG1G,IAAI4C,MAAMhB,GAAMiB,KAAK,GAAGC,IAAI,SAACC,EAAGM,GAC/B,IAAMC,EAAwB,IAAVN,GAAuB,IAARK,EACnC,OACEvD,EAAA6C,cAAA,MAAA,CACEO,IAAKG,EACLX,IAAKY,EAAcpB,EAAO,KAAI,eAChBoB,GAAe,KACb,kBAAA,IAEf9B,EAGP,GACI,IAKhB"}
package/dist/marqy.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],n):n((e||self).marqy={},e.react)}(this,function(e,n){function t(){var e=n.useState(0),t=e[0],r=e[1],a=n.useState(null),i=a[0],u=a[1],c=n.useRef(null),o=n.useCallback(function(){var e;return null==(e=c.current)?void 0:e.disconnect()},[]),l=n.useCallback(function(){c.current=new ResizeObserver(function(e){return r(e[0].contentRect.width)}),i&&c.current.observe(i)},[i]);return n.useEffect(function(){return l(),function(){return o()}},[o,l]),[u,t]}e.Marqy=function(e){var r=e.speed,a=void 0===r?.5:r,i=e.direction,u=void 0===i?"left":i,c=e.pauseOnHover,o=e.children,l=function(e,n){if(null==e)return{};var t,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n.indexOf(t=i[r])>=0||(a[t]=e[t]);return a}(e,["speed","direction","pauseOnHover","children"]),f=n.useState(1),d=f[0],s=f[1],v=t(),y=v[0],m=v[1],p=t(),h=p[0],b=p[1];return n.useEffect(function(){m&&b&&s(Math.ceil(m/b))},[m,b]),n.createElement("div",Object.assign({ref:y,"data-marqy":"","data-direction":u,"data-pause-on-hover":c?"":null},l),n.createElement("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(e,t){return n.createElement("div",{key:t,"data-marqy-content":"",style:{animationDuration:(null!=b?b:0)*d/(100*a)+"s"}},new Array(d).fill(0).map(function(e,r){var a=0===t&&0===r;return n.createElement("div",{key:r,ref:a?h:null,"aria-hidden":!a||null,"data-marqy-item":""},o)}))})))}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e||self).marqy={},e.react)}(this,function(e,t){function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var r=/*#__PURE__*/n(t);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(null,arguments)}var a=["speed","direction","pauseOnHover","manual","children"];function u(){var e=r.useState({width:0,height:0}),t=e[0],n=e[1],i=r.useRef(null);return[r.useCallback(function(e){var t;null==(t=i.current)||t.disconnect(),e&&(i.current=new ResizeObserver(function(e){var t=e[0];return n({width:t.contentRect.width,height:t.contentRect.height})}),i.current.observe(e))},[]),t]}e.Marqy=function(e){var t=e.speed,n=void 0===t?.5:t,c=e.direction,o=void 0===c?"left":c,l=e.pauseOnHover,d=e.manual,f=void 0!==d&&d,h=e.children,s=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,a),v=r.useState(1),p=v[0],y=v[1],m=u(),g=m[0],w=m[1],b=u(),O=b[0],q=b[1],j="up"===o||"down"===o,E=r.useCallback(function(e){return(null!=e?e:0)*p/(100*n)+"s"},[p,n]);return r.useEffect(function(){!j&&w.width&&q.width&&y(Math.ceil(w.width/q.width)),j&&w.height&&q.height&&y(Math.ceil(w.height/q.height))},[j,w,q]),r.createElement("div",i({ref:g,"data-marqy":"","data-direction":o,"data-pause-on-hover":l?"":null},s),r.createElement("div",{"data-marqy-inner":""},new Array(2).fill(0).map(function(e,t){return r.createElement("div",i({key:t,"data-marqy-content":""},f?{"data-marqy-static":E(j?q.height:q.width)}:{style:{animationDuration:E(j?q.height:q.width)}}),new Array(p).fill(0).map(function(e,n){var i=0===t&&0===n;return r.createElement("div",{key:n,ref:i?O:null,"aria-hidden":!i||null,"data-marqy-item":""},h)}))})))}});
2
2
  //# sourceMappingURL=marqy.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marqy.umd.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport declare interface MarqyProps {\n speed?: number;\n direction?: 'left' | 'right';\n pauseOnHover?: boolean;\n children: React.ReactNode;\n}\n\nexport function Marqy({\n speed = 0.5,\n direction = 'left',\n pauseOnHover,\n children,\n ...rest\n}: MarqyProps): JSX.Element {\n const [reps, setReps] = React.useState(1)\n\n const [container, containerWidth] = useWidth()\n const [item, itemWidth] = useWidth()\n\n React.useEffect(() => {\n if (containerWidth && itemWidth) {\n setReps(Math.ceil(containerWidth / itemWidth))\n }\n }, [containerWidth, itemWidth])\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 return (\n <div\n key={clone}\n data-marqy-content=\"\"\n style={{\n animationDuration: `${\n ((itemWidth ?? 0) * reps) / (100 * speed)\n }s`,\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 || null}\n data-marqy-item=\"\"\n >\n {children}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction useWidth() {\n const [width, setWidth] = React.useState(0)\n const [node, setNode] = React.useState<HTMLElement | null>(null)\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const disconnect = React.useCallback(() => observer.current?.disconnect(), [])\n\n const observe = React.useCallback(() => {\n observer.current = new ResizeObserver(([entry]) => setWidth(entry.contentRect.width))\n if (node) observer.current.observe(node)\n }, [node])\n\n React.useEffect(() => {\n observe()\n return () => disconnect()\n }, [disconnect, observe])\n\n return [setNode, width] as const\n}\n"],"names":["useWidth","React","width","setWidth","node","setNode","observer","disconnect","current","_observer$current","observe","ResizeObserver","contentRect","speed","direction","pauseOnHover","children","rest","reps","setReps","container","containerWidth","item","itemWidth","Math","ceil","ref","Array","fill","map","_","clone","key","style","animationDuration","rep","isFirstItem"],"mappings":"kQAoEA,SAASA,UACmBC,WAAe,GAAlCC,OAAOC,SACUF,WAAmC,MAApDG,OAAMC,OACPC,EAAWL,SAAoC,MAE/CM,EAAaN,cAAkB,iCAAMK,EAASE,gBAATC,EAAkBF,cAAc,IAErEG,EAAUT,cAAkB,WAChCK,EAASE,QAAU,IAAIG,eAAe,mBAAaR,OAAeS,YAAYV,SAC1EE,GAAME,EAASE,QAAQE,QAAQN,IAClC,CAACA,IAOJ,OALAH,YAAgB,WAEd,OADAS,sBACaH,MACZ,CAACA,EAAYG,IAET,CAACL,EAASH,+BA3EjBW,MAAAA,aAAQ,SACRC,UAAAA,aAAY,SACZC,IAAAA,aACAC,IAAAA,SACGC,0LAEqBhB,WAAe,GAAhCiB,OAAMC,SAEuBnB,IAA7BoB,OAAWC,SACQrB,IAAnBsB,OAAMC,OAQb,OANAtB,YAAgB,WACVoB,GAAkBE,GACpBJ,EAAQK,KAAKC,KAAKJ,EAAiBE,KAEpC,CAACF,EAAgBE,IAGlBtB,qCACEyB,IAAKN,eACM,oBACKN,wBACKC,EAAe,GAAK,MACrCE,GAEJhB,0CAAsB,IACnB,IAAI0B,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OACE9B,uBACE+B,IAAKD,uBACc,GACnBE,MAAO,CACLC,yBACIX,EAAAA,EAAa,GAAKL,GAAS,IAAML,SAItC,IAAIc,MAAMT,GAAMU,KAAK,GAAGC,IAAI,SAACC,EAAGK,GAC/B,IAAMC,EAAwB,IAAVL,GAAuB,IAARI,EACnC,OACElC,uBACE+B,IAAKG,EACLT,IAAKU,EAAcd,EAAO,oBACZc,GAAe,uBACb,IAEfpB"}
1
+ {"version":3,"file":"marqy.umd.js","sources":["../src/marqy.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport interface MarqyProps extends React.ComponentPropsWithoutRef<'div'> {\n speed?: number\n direction?: 'left' | 'right' | 'up' | 'down'\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) => {\n return `${((itemDimension ?? 0) * reps) / (100 * speed)}s`\n },\n [reps, speed]\n )\n\n React.useEffect(() => {\n if (!isVertical && containerDimensions.width && itemDimensions.width) {\n setReps(Math.ceil(containerDimensions.width / itemDimensions.width))\n }\n if (isVertical && containerDimensions.height && itemDimensions.height) {\n setReps(Math.ceil(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 || null}\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({ width: 0, height: 0 })\n const observer = React.useRef<ResizeObserver | null>(null)\n\n const ref = React.useCallback((node: HTMLElement | null) => {\n observer.current?.disconnect()\n if (!node) return\n observer.current = new ResizeObserver(([entry]) =>\n setDimensions({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n )\n observer.current.observe(node)\n }, [])\n\n return [ref, dimensions] as const\n}\n"],"names":["_excluded","useDimensions","_React$useState2","React","useState","width","height","dimensions","setDimensions","observer","useRef","useCallback","node","_observer$current","current","disconnect","ResizeObserver","_ref2","entry","contentRect","observe","_ref","_ref$speed","speed","_ref$direction","direction","pauseOnHover","_ref$manual","manual","children","rest","_objectWithoutPropertiesLoose","_React$useState","reps","setReps","_useDimensions","container","containerDimensions","_useDimensions2","item","itemDimensions","isVertical","getAnimationDuration","itemDimension","useEffect","Math","ceil","ref","createElement","Array","fill","map","_","clone","_extends","key","style","animationDuration","rep","isFirstItem"],"mappings":"gwBAAA,IAAAA,EAAA,CAAA,QAAA,YAAA,eAAA,SAAA,YA+EA,SAASC,IACP,IAAAC,EAAoCC,EAAMC,SAAS,CAAEC,MAAO,EAAGC,OAAQ,IAAhEC,EAAUL,EAAEM,GAAAA,EAAaN,KAC1BO,EAAWN,EAAMO,OAA8B,MAcrD,MAAO,CAZKP,EAAMQ,YAAY,SAACC,GAA4BC,IAAAA,EACzDA,OAAAA,EAAAJ,EAASK,UAATD,EAAkBE,aACbH,IACLH,EAASK,QAAU,IAAIE,eAAe,SAAAC,OAAEC,EAAKD,EAC3C,GAAA,OAAAT,EAAc,CACZH,MAAOa,EAAMC,YAAYd,MACzBC,OAAQY,EAAMC,YAAYb,QAC1B,GAEJG,EAASK,QAAQM,QAAQR,GAC3B,EAAG,IAEUL,EACf,SAtFgB,SAAKc,OAORC,EAAAD,EANXE,MAAAA,OAAQ,IAAHD,EAAG,GAAGA,EAAAE,EAAAH,EACXI,UAAAA,OAAS,IAAAD,EAAG,OAAMA,EAClBE,EAAYL,EAAZK,aAAYC,EAAAN,EACZO,OAAAA,OAAM,IAAAD,GAAQA,EACdE,EAAQR,EAARQ,SACGC,6IAAIC,CAAAV,EAAArB,GAEPgC,EAAwB7B,EAAMC,SAAS,GAAhC6B,EAAID,EAAA,GAAEE,EAAOF,EAAA,GAEpBG,EAAyClC,IAAlCmC,EAASD,EAAEE,GAAAA,EAAmBF,EACrC,GAAAG,EAA+BrC,IAAxBsC,EAAID,EAAEE,GAAAA,EAAcF,EAAA,GAErBG,EAA2B,OAAdhB,GAAoC,SAAdA,EAEnCiB,EAAuBvC,EAAMQ,YACjC,SAACgC,GACC,OAAYA,MAAAA,EAAAA,EAAiB,GAAKV,GAAS,IAAMV,GACnD,GAAA,EACA,CAACU,EAAMV,IAYT,OATApB,EAAMyC,UAAU,YACTH,GAAcJ,EAAoBhC,OAASmC,EAAenC,OAC7D6B,EAAQW,KAAKC,KAAKT,EAAoBhC,MAAQmC,EAAenC,QAE3DoC,GAAcJ,EAAoB/B,QAAUkC,EAAelC,QAC7D4B,EAAQW,KAAKC,KAAKT,EAAoB/B,OAASkC,EAAelC,QAElE,EAAG,CAACmC,EAAYJ,EAAqBG,IAGnCrC,yBACE4C,IAAKX,EACM,aAAA,oBACKX,EAAS,sBACJC,EAAe,GAAK,MACrCI,GAEJ3B,EAAA6C,cAAA,MAAA,CAAA,mBAAsB,IACnB,IAAIC,MAAM,GAAGC,KAAK,GAAGC,IAAI,SAACC,EAAGC,GAC5B,OAAAlD,EAAA6C,cAAA,MAAAM,EACEC,CAAAA,IAAKF,EAAK,qBACS,IACdzB,EACD,CAAE,oBAAqBc,EAAqBD,EAAaD,EAAelC,OAASkC,EAAenC,QAChG,CAAEmD,MAAO,CAAEC,kBAAmBf,EAAqBD,EAAaD,EAAelC,OAASkC,EAAenC,UAG1G,IAAI4C,MAAMhB,GAAMiB,KAAK,GAAGC,IAAI,SAACC,EAAGM,GAC/B,IAAMC,EAAwB,IAAVN,GAAuB,IAARK,EACnC,OACEvD,EAAA6C,cAAA,MAAA,CACEO,IAAKG,EACLX,IAAKY,EAAcpB,EAAO,KAAI,eAChBoB,GAAe,KACb,kBAAA,IAEf9B,EAGP,GACI,IAKhB"}
@@ -0,0 +1 @@
1
+ export default new Map();
@@ -0,0 +1 @@
1
+ export default new Map();
@@ -0,0 +1,154 @@
1
+ declare module 'astro:content' {
2
+ export interface RenderResult {
3
+ Content: import('astro/runtime/server/index.js').AstroComponentFactory;
4
+ headings: import('astro').MarkdownHeading[];
5
+ remarkPluginFrontmatter: Record<string, any>;
6
+ }
7
+ interface Render {
8
+ '.md': Promise<RenderResult>;
9
+ }
10
+
11
+ export interface RenderedContent {
12
+ html: string;
13
+ metadata?: {
14
+ imagePaths: Array<string>;
15
+ [key: string]: unknown;
16
+ };
17
+ }
18
+
19
+ type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
20
+
21
+ export type CollectionKey = keyof DataEntryMap;
22
+ export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
23
+
24
+ type AllValuesOf<T> = T extends any ? T[keyof T] : never;
25
+
26
+ export type ReferenceDataEntry<
27
+ C extends CollectionKey,
28
+ E extends keyof DataEntryMap[C] = string,
29
+ > = {
30
+ collection: C;
31
+ id: E;
32
+ };
33
+
34
+ export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
35
+ collection: C;
36
+ id: string;
37
+ };
38
+
39
+ export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
40
+ collection: C,
41
+ filter?: (entry: CollectionEntry<C>) => entry is E,
42
+ ): Promise<E[]>;
43
+ export function getCollection<C extends keyof DataEntryMap>(
44
+ collection: C,
45
+ filter?: (entry: CollectionEntry<C>) => unknown,
46
+ ): Promise<CollectionEntry<C>[]>;
47
+
48
+ export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
49
+ collection: C,
50
+ filter?: LiveLoaderCollectionFilterType<C>,
51
+ ): Promise<
52
+ import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
53
+ >;
54
+
55
+ export function getEntry<
56
+ C extends keyof DataEntryMap,
57
+ E extends keyof DataEntryMap[C] | (string & {}),
58
+ >(
59
+ entry: ReferenceDataEntry<C, E>,
60
+ ): E extends keyof DataEntryMap[C]
61
+ ? Promise<DataEntryMap[C][E]>
62
+ : Promise<CollectionEntry<C> | undefined>;
63
+ export function getEntry<
64
+ C extends keyof DataEntryMap,
65
+ E extends keyof DataEntryMap[C] | (string & {}),
66
+ >(
67
+ collection: C,
68
+ id: E,
69
+ ): E extends keyof DataEntryMap[C]
70
+ ? string extends keyof DataEntryMap[C]
71
+ ? Promise<DataEntryMap[C][E]> | undefined
72
+ : Promise<DataEntryMap[C][E]>
73
+ : Promise<CollectionEntry<C> | undefined>;
74
+ export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
75
+ collection: C,
76
+ filter: string | LiveLoaderEntryFilterType<C>,
77
+ ): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
78
+
79
+ /** Resolve an array of entry references from the same collection */
80
+ export function getEntries<C extends keyof DataEntryMap>(
81
+ entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
82
+ ): Promise<CollectionEntry<C>[]>;
83
+
84
+ export function render<C extends keyof DataEntryMap>(
85
+ entry: DataEntryMap[C][string],
86
+ ): Promise<RenderResult>;
87
+
88
+ export function reference<
89
+ C extends
90
+ | keyof DataEntryMap
91
+ // Allow generic `string` to avoid excessive type errors in the config
92
+ // if `dev` is not running to update as you edit.
93
+ // Invalid collection names will be caught at build time.
94
+ | (string & {}),
95
+ >(
96
+ collection: C,
97
+ ): import('astro/zod').ZodPipe<
98
+ import('astro/zod').ZodString,
99
+ import('astro/zod').ZodTransform<
100
+ C extends keyof DataEntryMap
101
+ ? {
102
+ collection: C;
103
+ id: string;
104
+ }
105
+ : never,
106
+ string
107
+ >
108
+ >;
109
+
110
+ type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
111
+ type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
112
+ ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
113
+ >;
114
+ type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
115
+ type InferLoaderSchema<
116
+ C extends keyof DataEntryMap,
117
+ L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
118
+ > = L extends { schema: import('astro/zod').ZodSchema }
119
+ ? import('astro/zod').infer<L['schema']>
120
+ : any;
121
+
122
+ type DataEntryMap = {
123
+
124
+ };
125
+
126
+ type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
127
+ infer TData,
128
+ infer TEntryFilter,
129
+ infer TCollectionFilter,
130
+ infer TError
131
+ >
132
+ ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
133
+ : { data: never; entryFilter: never; collectionFilter: never; error: never };
134
+ type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
135
+ type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
136
+ type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
137
+
138
+ type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
139
+ LiveContentConfig['collections'][C]['schema'] extends undefined
140
+ ? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
141
+ : import('astro/zod').infer<
142
+ Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
143
+ >;
144
+ type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
145
+ ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
146
+ type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
147
+ ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
148
+ type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
149
+ LiveContentConfig['collections'][C]['loader']
150
+ >;
151
+
152
+ export type ContentConfig = typeof import("../src/content.config.js");
153
+ export type LiveContentConfig = never;
154
+ }
@@ -0,0 +1 @@
1
+ [["Map",1,2],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":{\"backticks\":true,\"closingQuotes\":{\"double\":\"”\",\"single\":\"’\"},\"dashes\":true,\"ellipses\":true,\"openingQuotes\":{\"double\":\"“\",\"single\":\"‘\"},\"quotes\":true}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fonts\":[{\"name\":\"AkkuratMono\",\"cssVariable\":\"--font-akkurat-mono\",\"provider\":{\"name\":\"local\"},\"fallbacks\":[\"monospace\"],\"options\":{\"variants\":[{\"src\":[\"./src/fonts/Akkurat-Mono.woff2\",\"./src/fonts/Akkurat-Mono.woff\"],\"weight\":500,\"style\":\"normal\"},{\"src\":[\"./src/fonts/Akkurat-Mono-Bold.woff\"],\"weight\":700,\"style\":\"normal\"}]}},{\"name\":\"GrtskPeta\",\"cssVariable\":\"--font-grtsk\",\"provider\":{\"name\":\"local\"},\"options\":{\"variants\":[{\"src\":[\"./src/fonts/Grtsk-Peta-Light.woff2\",\"./src/fonts/Grtsk-Peta-Light.woff\"],\"weight\":300,\"style\":\"normal\"},{\"src\":[\"./src/fonts/Grtsk-Peta-Regular.woff2\",\"./src/fonts/Grtsk-Peta-Regular.woff\"],\"weight\":400,\"style\":\"normal\"},{\"src\":[\"./src/fonts/Grtsk-Peta-Medium.woff2\",\"./src/fonts/Grtsk-Peta-Medium.woff\"],\"weight\":500,\"style\":\"normal\"}]}},{\"name\":\"GrtskTera\",\"cssVariable\":\"--font-grtsk-wide\",\"provider\":{\"name\":\"local\"},\"options\":{\"variants\":[{\"src\":[\"./src/fonts/Grtsk-Tera-Medium.woff2\",\"./src/fonts/Grtsk-Tera-Medium.woff\"],\"weight\":500,\"style\":\"normal\"},{\"src\":[\"./src/fonts/Grtsk-Tera-Bold.woff2\",\"./src/fonts/Grtsk-Tera-Bold.woff\"],\"weight\":700,\"style\":\"normal\"}]}}],\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"svgo\":false,\"rustCompiler\":false,\"queuedRendering\":{\"enabled\":false}},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","6.1.8","content-config-digest","2603162b967e798a"]
@@ -0,0 +1,4 @@
1
+ declare module 'astro:assets' {
2
+ /** @internal */
3
+ export type CssVariable = (["--font-akkurat-mono","--font-grtsk","--font-grtsk-wide"])[number];
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "_variables": {
3
+ "lastUpdateCheck": 1776792031407
4
+ }
5
+ }
@@ -0,0 +1,3 @@
1
+ /// <reference types="astro/client" />
2
+ /// <reference path="content.d.ts" />
3
+ /// <reference path="fonts.d.ts" />
@@ -0,0 +1 @@
1
+ --install.ignore-engines true