├── .gitignore ├── .npmignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── images └── svelte-textcircle.jpg ├── package.json ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── lib │ └── svelte-textcircle │ │ ├── index.ts │ │ └── textcircle.svelte └── routes │ └── +page.svelte ├── static └── favicon.png ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | .netlify 7 | .wrangler 8 | /.svelte-kit 9 | /build 10 | /dist 11 | 12 | # OS 13 | .DS_Store 14 | Thumbs.db 15 | 16 | # Env 17 | .env 18 | .env.* 19 | !.env.example 20 | !.env.test 21 | 22 | # Vite 23 | vite.config.js.timestamp-* 24 | vite.config.ts.timestamp-* 25 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | images 2 | node_modules -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock 5 | bun.lock 6 | bun.lockb 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "overrides": [ 8 | { 9 | "files": "*.svelte", 10 | "options": { 11 | "parser": "svelte" 12 | } 13 | }, 14 | { 15 | "files": "README.md", 16 | "options": { 17 | "proseWrap": "never" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # svelte-textcircle 2 | 3 | A Svelte component that displays text in a circular layout with customizable animations and styling. 4 | 5 | ![](./images/svelte-textcircle.jpg) 6 | 7 | ### You can check out the [Demo](https://svelte.dev/playground/a0daad6ee5204737aae3511184c9e335?version=5.28.2) in a Svelte Playground! 8 | 9 | ## Features 10 | 11 | - Display text strings in a circular arrangement. 12 | - Customize circle size, typography (font size, weight, transform), and appearance. 13 | - Add a custom divider character between words. 14 | - Set initial rotation. 15 | - Control animation: duration, easing, delay, direction, iteration count. 16 | - Trigger animation on component hover or when it enters the viewport. 17 | - Option to stop animation on hover. 18 | - Place custom content (like images, icons, or other components) in the center. 19 | - Highly customizable via props. 20 | - Automatically pauses animation when the component scrolls out of view and resumes it upon re-entry, leveraging `IntersectionObserver` for improved performance. 21 | - Built for Svelte 5 using runes. 22 | - Respects `prefers-reduced-motion`. 23 | 24 | ## Installation 25 | 26 | ```bash 27 | # npm 28 | npm install @lostisworld/svelte-textcircle 29 | 30 | # pnpm 31 | pnpm add @lostisworld/svelte-textcircle 32 | ``` 33 | 34 | ## Basic Usage 35 | 36 | ```svelte 37 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | Logo 47 | 48 | ``` 49 | 50 | ## Props 51 | 52 | ### Main Props 53 | 54 | | Property | Type | Default | Description | 55 | | --------- | -------- | -------- | -------------------------------------------------- | 56 | | text | string[] | Required | An array of text strings to display in the circle. | 57 | | class | string | '' | Additional CSS class(es) for the main container. | 58 | | options | object | {} | Object for visual customization options. | 59 | | animation | object | {} | Object for animation settings. | 60 | | children | Snippet | null | Svelte Snippet for content in the center. | 61 | 62 | ### Options Props (`options={{...}}`) 63 | 64 | | Property | Type | Default | Description | 65 | | --- | --- | --- | --- | 66 | | circlesize | string | '250px' | Size (width & height) of the circle. | 67 | | textTransform | 'uppercase' \| 'lowercase' \| 'none' | 'uppercase' | CSS `text-transform` for the text. | 68 | | fontSize | string | '1em' | CSS `font-size` for the text. | 69 | | fontWeight | 'lighter' \| 'normal' \| 'bold' \| 'bolder' \| string | 'normal' | CSS `font-weight` for the text. | 70 | | divider | string | '♦' | HTML entity or character to place between words. Set to `''` or `undefined` to disable. | 71 | | dividerColor | string | currentColor | CSS color for the divider character. Defaults to text color. | 72 | | rotate | number | undefined | Initial rotation offset in degrees. | 73 | 74 | ### Animation Props (`animation={{...}}`) 75 | 76 | | Property | Type | Default | Description | 77 | | --- | --- | --- | --- | 78 | | duration | string | '30s' | CSS `animation-duration`. | 79 | | easing | 'ease' \| 'ease-in' \| 'ease-out' \| 'ease-in-out' \| 'linear' \| string | 'linear' | CSS `animation-timing-function`. | 80 | | delay | string | '0s' | CSS `animation-delay`. | 81 | | direction | 'normal' \| 'reverse' | 'normal' | CSS `animation-direction`. | 82 | | count | 'infinite' \| number | 'infinite' | CSS `animation-iteration-count`. | 83 | | animateInView | boolean | true | Start animation only when component is in viewport. Overridden by `animateOnHover`. | 84 | | animateOnHover | boolean | false | Pause animation initially, play only on hover. | 85 | | stopAnimateOnHover | boolean | false | If animating by default (`animateInView` is true and `animateOnHover` is false), pause animation on hover. | 86 | 87 | ## Examples 88 | 89 | ### Custom Options 90 | 91 | ```svelte 92 | 103 | ``` 104 | 105 | ### Custom Animation 106 | 107 | ```svelte 108 | 118 | ``` 119 | 120 | ### Stop Animation on Hover 121 | 122 | ```svelte 123 | 130 | ``` 131 | 132 | ### Central Content 133 | 134 | ```svelte 135 | 136 |
139 | Logo 140 |
141 |
142 | ``` 143 | 144 | ## CSS Customization 145 | 146 | You can target the component's elements using these CSS classes for further styling: 147 | 148 | - `.textcircle`: The main container `div`. 149 | - `.textcircle-container`: The `p` element holding the rotating text. 150 | - `.textcircle-char`: Individual `span` elements for each character. 151 | - `.textcircle-char-divider`: The `span` element for the divider character. 152 | - `.textcircle-children`: The `div` containing the slotted central content. 153 | 154 | You can also override the CSS variables used internally, although using the props is recommended: 155 | 156 | - `--s`: Circle size 157 | - `--fs`: Font size 158 | - `--fw`: Font weight 159 | - `--tt`: Text transform 160 | - `--ro`: Initial rotation (in degrees, applied via style) 161 | - `--du`: Animation duration 162 | - `--ti`: Animation timing function (easing) 163 | - `--de`: Animation delay 164 | - `--di`: Animation direction 165 | - `--c`: Animation iteration count 166 | - `--dc`: Divider color 167 | - `--aoh`: Animation play state (controlled internally) 168 | 169 | ## Notes 170 | 171 | - For optimal appearance with longer text, you might need to decrease `fontSize` or increase `circlesize`. 172 | - The component maintains its aspect ratio, but ensure the `circlesize` is appropriate for different screen sizes. 173 | 174 | ## Contributing 175 | 176 | Contributions are welcome! Please ensure all changes are well-documented and tested. 177 | 178 | 1. Fork the repository. 179 | 2. Create a new branch for your feature or bugfix. 180 | 3. Commit your changes with clear and descriptive messages. 181 | 4. Submit a pull request. 182 | 183 | ## License 184 | 185 | MIT 186 | -------------------------------------------------------------------------------- /images/svelte-textcircle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoStis-World/svelte-textcircle/c80daff6e8f2bc4de692da80390ca6ba88d99bab/images/svelte-textcircle.jpg -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lostisworld/svelte-textcircle", 3 | "version": "0.0.3", 4 | "keywords": [ 5 | "svelte", 6 | "svelte component", 7 | "svelte text circle", 8 | "svelte text circle component", 9 | "animation", 10 | "css", 11 | "css animation", 12 | "css text circle" 13 | ], 14 | "author": "LoSti's World", 15 | "license": "MIT", 16 | "homepage": "https://github.com/LoStis-World/svelte-textcircle#readme", 17 | "bugs": { 18 | "url": "https://github.com/LoStis-World/svelte-textcircle/issues" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/LoStis-World/svelte-textcircle.git" 23 | }, 24 | "scripts": { 25 | "dev": "vite dev", 26 | "build": "vite build && npm run prepack", 27 | "preview": "vite preview", 28 | "prepare": "svelte-kit sync || echo ''", 29 | "prepack": "svelte-kit sync && svelte-package && publint", 30 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 31 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 32 | "format": "prettier --write .", 33 | "lint": "prettier --check ." 34 | }, 35 | "files": [ 36 | "dist/svelte-textcircle", 37 | "!dist/**/*.test.*", 38 | "!dist/**/*.spec.*" 39 | ], 40 | "sideEffects": [ 41 | "**/*.css" 42 | ], 43 | "svelte": "./dist/svelte-textcircle/index.js", 44 | "types": "./dist/svelte-textcircle/index.d.ts", 45 | "type": "module", 46 | "exports": { 47 | ".": { 48 | "types": "./dist/svelte-textcircle/index.d.ts", 49 | "svelte": "./dist/svelte-textcircle/index.js" 50 | } 51 | }, 52 | "peerDependencies": { 53 | "svelte": "^5.16.0" 54 | }, 55 | "devDependencies": { 56 | "@sveltejs/adapter-auto": "^6.0.0", 57 | "@sveltejs/kit": "^2.16.0", 58 | "@sveltejs/package": "^2.0.0", 59 | "@sveltejs/vite-plugin-svelte": "^5.0.0", 60 | "prettier": "^3.4.2", 61 | "prettier-plugin-svelte": "^3.3.3", 62 | "publint": "^0.3.2", 63 | "svelte": "^5.0.0", 64 | "svelte-check": "^4.0.0", 65 | "typescript": "^5.0.0", 66 | "vite": "^6.2.6" 67 | }, 68 | "pnpm": { 69 | "onlyBuiltDependencies": [ 70 | "esbuild" 71 | ] 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@sveltejs/adapter-auto': 12 | specifier: ^6.0.0 13 | version: 6.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)) 14 | '@sveltejs/kit': 15 | specifier: ^2.16.0 16 | version: 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 17 | '@sveltejs/package': 18 | specifier: ^2.0.0 19 | version: 2.3.11(svelte@5.28.2)(typescript@5.8.3) 20 | '@sveltejs/vite-plugin-svelte': 21 | specifier: ^5.0.0 22 | version: 5.0.3(svelte@5.28.2)(vite@6.3.4) 23 | prettier: 24 | specifier: ^3.4.2 25 | version: 3.5.3 26 | prettier-plugin-svelte: 27 | specifier: ^3.3.3 28 | version: 3.3.3(prettier@3.5.3)(svelte@5.28.2) 29 | publint: 30 | specifier: ^0.3.2 31 | version: 0.3.12 32 | svelte: 33 | specifier: ^5.0.0 34 | version: 5.28.2 35 | svelte-check: 36 | specifier: ^4.0.0 37 | version: 4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3) 38 | typescript: 39 | specifier: ^5.0.0 40 | version: 5.8.3 41 | vite: 42 | specifier: ^6.2.6 43 | version: 6.3.4 44 | 45 | packages: 46 | 47 | '@ampproject/remapping@2.3.0': 48 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 49 | engines: {node: '>=6.0.0'} 50 | 51 | '@esbuild/aix-ppc64@0.25.3': 52 | resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} 53 | engines: {node: '>=18'} 54 | cpu: [ppc64] 55 | os: [aix] 56 | 57 | '@esbuild/android-arm64@0.25.3': 58 | resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} 59 | engines: {node: '>=18'} 60 | cpu: [arm64] 61 | os: [android] 62 | 63 | '@esbuild/android-arm@0.25.3': 64 | resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} 65 | engines: {node: '>=18'} 66 | cpu: [arm] 67 | os: [android] 68 | 69 | '@esbuild/android-x64@0.25.3': 70 | resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} 71 | engines: {node: '>=18'} 72 | cpu: [x64] 73 | os: [android] 74 | 75 | '@esbuild/darwin-arm64@0.25.3': 76 | resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} 77 | engines: {node: '>=18'} 78 | cpu: [arm64] 79 | os: [darwin] 80 | 81 | '@esbuild/darwin-x64@0.25.3': 82 | resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} 83 | engines: {node: '>=18'} 84 | cpu: [x64] 85 | os: [darwin] 86 | 87 | '@esbuild/freebsd-arm64@0.25.3': 88 | resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} 89 | engines: {node: '>=18'} 90 | cpu: [arm64] 91 | os: [freebsd] 92 | 93 | '@esbuild/freebsd-x64@0.25.3': 94 | resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} 95 | engines: {node: '>=18'} 96 | cpu: [x64] 97 | os: [freebsd] 98 | 99 | '@esbuild/linux-arm64@0.25.3': 100 | resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} 101 | engines: {node: '>=18'} 102 | cpu: [arm64] 103 | os: [linux] 104 | 105 | '@esbuild/linux-arm@0.25.3': 106 | resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} 107 | engines: {node: '>=18'} 108 | cpu: [arm] 109 | os: [linux] 110 | 111 | '@esbuild/linux-ia32@0.25.3': 112 | resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} 113 | engines: {node: '>=18'} 114 | cpu: [ia32] 115 | os: [linux] 116 | 117 | '@esbuild/linux-loong64@0.25.3': 118 | resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} 119 | engines: {node: '>=18'} 120 | cpu: [loong64] 121 | os: [linux] 122 | 123 | '@esbuild/linux-mips64el@0.25.3': 124 | resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} 125 | engines: {node: '>=18'} 126 | cpu: [mips64el] 127 | os: [linux] 128 | 129 | '@esbuild/linux-ppc64@0.25.3': 130 | resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} 131 | engines: {node: '>=18'} 132 | cpu: [ppc64] 133 | os: [linux] 134 | 135 | '@esbuild/linux-riscv64@0.25.3': 136 | resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} 137 | engines: {node: '>=18'} 138 | cpu: [riscv64] 139 | os: [linux] 140 | 141 | '@esbuild/linux-s390x@0.25.3': 142 | resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} 143 | engines: {node: '>=18'} 144 | cpu: [s390x] 145 | os: [linux] 146 | 147 | '@esbuild/linux-x64@0.25.3': 148 | resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} 149 | engines: {node: '>=18'} 150 | cpu: [x64] 151 | os: [linux] 152 | 153 | '@esbuild/netbsd-arm64@0.25.3': 154 | resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} 155 | engines: {node: '>=18'} 156 | cpu: [arm64] 157 | os: [netbsd] 158 | 159 | '@esbuild/netbsd-x64@0.25.3': 160 | resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} 161 | engines: {node: '>=18'} 162 | cpu: [x64] 163 | os: [netbsd] 164 | 165 | '@esbuild/openbsd-arm64@0.25.3': 166 | resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} 167 | engines: {node: '>=18'} 168 | cpu: [arm64] 169 | os: [openbsd] 170 | 171 | '@esbuild/openbsd-x64@0.25.3': 172 | resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} 173 | engines: {node: '>=18'} 174 | cpu: [x64] 175 | os: [openbsd] 176 | 177 | '@esbuild/sunos-x64@0.25.3': 178 | resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} 179 | engines: {node: '>=18'} 180 | cpu: [x64] 181 | os: [sunos] 182 | 183 | '@esbuild/win32-arm64@0.25.3': 184 | resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} 185 | engines: {node: '>=18'} 186 | cpu: [arm64] 187 | os: [win32] 188 | 189 | '@esbuild/win32-ia32@0.25.3': 190 | resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} 191 | engines: {node: '>=18'} 192 | cpu: [ia32] 193 | os: [win32] 194 | 195 | '@esbuild/win32-x64@0.25.3': 196 | resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} 197 | engines: {node: '>=18'} 198 | cpu: [x64] 199 | os: [win32] 200 | 201 | '@jridgewell/gen-mapping@0.3.8': 202 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 203 | engines: {node: '>=6.0.0'} 204 | 205 | '@jridgewell/resolve-uri@3.1.2': 206 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 207 | engines: {node: '>=6.0.0'} 208 | 209 | '@jridgewell/set-array@1.2.1': 210 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 211 | engines: {node: '>=6.0.0'} 212 | 213 | '@jridgewell/sourcemap-codec@1.5.0': 214 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 215 | 216 | '@jridgewell/trace-mapping@0.3.25': 217 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 218 | 219 | '@polka/url@1.0.0-next.29': 220 | resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 221 | 222 | '@publint/pack@0.1.2': 223 | resolution: {integrity: sha512-S+9ANAvUmjutrshV4jZjaiG8XQyuJIZ8a4utWmN/vW1sgQ9IfBnPndwkmQYw53QmouOIytT874u65HEmu6H5jw==} 224 | engines: {node: '>=18'} 225 | 226 | '@rollup/rollup-android-arm-eabi@4.40.1': 227 | resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} 228 | cpu: [arm] 229 | os: [android] 230 | 231 | '@rollup/rollup-android-arm64@4.40.1': 232 | resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} 233 | cpu: [arm64] 234 | os: [android] 235 | 236 | '@rollup/rollup-darwin-arm64@4.40.1': 237 | resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} 238 | cpu: [arm64] 239 | os: [darwin] 240 | 241 | '@rollup/rollup-darwin-x64@4.40.1': 242 | resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} 243 | cpu: [x64] 244 | os: [darwin] 245 | 246 | '@rollup/rollup-freebsd-arm64@4.40.1': 247 | resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} 248 | cpu: [arm64] 249 | os: [freebsd] 250 | 251 | '@rollup/rollup-freebsd-x64@4.40.1': 252 | resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} 253 | cpu: [x64] 254 | os: [freebsd] 255 | 256 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 257 | resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} 258 | cpu: [arm] 259 | os: [linux] 260 | 261 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 262 | resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} 263 | cpu: [arm] 264 | os: [linux] 265 | 266 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 267 | resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} 268 | cpu: [arm64] 269 | os: [linux] 270 | 271 | '@rollup/rollup-linux-arm64-musl@4.40.1': 272 | resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} 273 | cpu: [arm64] 274 | os: [linux] 275 | 276 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 277 | resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} 278 | cpu: [loong64] 279 | os: [linux] 280 | 281 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 282 | resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} 283 | cpu: [ppc64] 284 | os: [linux] 285 | 286 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 287 | resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} 288 | cpu: [riscv64] 289 | os: [linux] 290 | 291 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 292 | resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} 293 | cpu: [riscv64] 294 | os: [linux] 295 | 296 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 297 | resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} 298 | cpu: [s390x] 299 | os: [linux] 300 | 301 | '@rollup/rollup-linux-x64-gnu@4.40.1': 302 | resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} 303 | cpu: [x64] 304 | os: [linux] 305 | 306 | '@rollup/rollup-linux-x64-musl@4.40.1': 307 | resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} 308 | cpu: [x64] 309 | os: [linux] 310 | 311 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 312 | resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} 313 | cpu: [arm64] 314 | os: [win32] 315 | 316 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 317 | resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} 318 | cpu: [ia32] 319 | os: [win32] 320 | 321 | '@rollup/rollup-win32-x64-msvc@4.40.1': 322 | resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} 323 | cpu: [x64] 324 | os: [win32] 325 | 326 | '@sveltejs/acorn-typescript@1.0.5': 327 | resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} 328 | peerDependencies: 329 | acorn: ^8.9.0 330 | 331 | '@sveltejs/adapter-auto@6.0.0': 332 | resolution: {integrity: sha512-7mR2/G7vlXakaOj6QBSG9dwBfTgWjV+UnEMB5Z6Xu0ZbdXda6c0su1fNkg0ab0zlilSkloMA2NjCna02/DR7sA==} 333 | peerDependencies: 334 | '@sveltejs/kit': ^2.0.0 335 | 336 | '@sveltejs/kit@2.20.8': 337 | resolution: {integrity: sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==} 338 | engines: {node: '>=18.13'} 339 | hasBin: true 340 | peerDependencies: 341 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 342 | svelte: ^4.0.0 || ^5.0.0-next.0 343 | vite: ^5.0.3 || ^6.0.0 344 | 345 | '@sveltejs/package@2.3.11': 346 | resolution: {integrity: sha512-DSMt2U0XNAdoQBYksrmgQi5dKy7jUTVDJLiagS/iXF7AShjAmTbGJQKruBuT/FfYAWvNxfQTSjkXU8eAIjVeNg==} 347 | engines: {node: ^16.14 || >=18} 348 | hasBin: true 349 | peerDependencies: 350 | svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 351 | 352 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1': 353 | resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} 354 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 355 | peerDependencies: 356 | '@sveltejs/vite-plugin-svelte': ^5.0.0 357 | svelte: ^5.0.0 358 | vite: ^6.0.0 359 | 360 | '@sveltejs/vite-plugin-svelte@5.0.3': 361 | resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==} 362 | engines: {node: ^18.0.0 || ^20.0.0 || >=22} 363 | peerDependencies: 364 | svelte: ^5.0.0 365 | vite: ^6.0.0 366 | 367 | '@types/cookie@0.6.0': 368 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 369 | 370 | '@types/estree@1.0.7': 371 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 372 | 373 | acorn@8.14.1: 374 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 375 | engines: {node: '>=0.4.0'} 376 | hasBin: true 377 | 378 | aria-query@5.3.2: 379 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 380 | engines: {node: '>= 0.4'} 381 | 382 | axobject-query@4.1.0: 383 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 384 | engines: {node: '>= 0.4'} 385 | 386 | chokidar@4.0.3: 387 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 388 | engines: {node: '>= 14.16.0'} 389 | 390 | clsx@2.1.1: 391 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 392 | engines: {node: '>=6'} 393 | 394 | cookie@0.6.0: 395 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 396 | engines: {node: '>= 0.6'} 397 | 398 | debug@4.4.0: 399 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 400 | engines: {node: '>=6.0'} 401 | peerDependencies: 402 | supports-color: '*' 403 | peerDependenciesMeta: 404 | supports-color: 405 | optional: true 406 | 407 | dedent-js@1.0.1: 408 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 409 | 410 | deepmerge@4.3.1: 411 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 412 | engines: {node: '>=0.10.0'} 413 | 414 | devalue@5.1.1: 415 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 416 | 417 | esbuild@0.25.3: 418 | resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} 419 | engines: {node: '>=18'} 420 | hasBin: true 421 | 422 | esm-env@1.2.2: 423 | resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 424 | 425 | esrap@1.4.6: 426 | resolution: {integrity: sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==} 427 | 428 | fdir@6.4.4: 429 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 430 | peerDependencies: 431 | picomatch: ^3 || ^4 432 | peerDependenciesMeta: 433 | picomatch: 434 | optional: true 435 | 436 | fsevents@2.3.3: 437 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 438 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 439 | os: [darwin] 440 | 441 | import-meta-resolve@4.1.0: 442 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 443 | 444 | is-reference@3.0.3: 445 | resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 446 | 447 | kleur@4.1.5: 448 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 449 | engines: {node: '>=6'} 450 | 451 | locate-character@3.0.0: 452 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 453 | 454 | lower-case@2.0.2: 455 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 456 | 457 | magic-string@0.30.17: 458 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 459 | 460 | mri@1.2.0: 461 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 462 | engines: {node: '>=4'} 463 | 464 | mrmime@2.0.1: 465 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 466 | engines: {node: '>=10'} 467 | 468 | ms@2.1.3: 469 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 470 | 471 | nanoid@3.3.11: 472 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 473 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 474 | hasBin: true 475 | 476 | no-case@3.0.4: 477 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 478 | 479 | package-manager-detector@1.2.0: 480 | resolution: {integrity: sha512-PutJepsOtsqVfUsxCzgTTpyXmiAgvKptIgY4th5eq5UXXFhj5PxfQ9hnGkypMeovpAvVshFRItoFHYO18TCOqA==} 481 | 482 | pascal-case@3.1.2: 483 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 484 | 485 | picocolors@1.1.1: 486 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 487 | 488 | picomatch@4.0.2: 489 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 490 | engines: {node: '>=12'} 491 | 492 | postcss@8.5.3: 493 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 494 | engines: {node: ^10 || ^12 || >=14} 495 | 496 | prettier-plugin-svelte@3.3.3: 497 | resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==} 498 | peerDependencies: 499 | prettier: ^3.0.0 500 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 501 | 502 | prettier@3.5.3: 503 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 504 | engines: {node: '>=14'} 505 | hasBin: true 506 | 507 | publint@0.3.12: 508 | resolution: {integrity: sha512-1w3MMtL9iotBjm1mmXtG3Nk06wnq9UhGNRpQ2j6n1Zq7YAD6gnxMMZMIxlRPAydVjVbjSm+n0lhwqsD1m4LD5w==} 509 | engines: {node: '>=18'} 510 | hasBin: true 511 | 512 | readdirp@4.1.2: 513 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 514 | engines: {node: '>= 14.18.0'} 515 | 516 | rollup@4.40.1: 517 | resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} 518 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 519 | hasBin: true 520 | 521 | sade@1.8.1: 522 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 523 | engines: {node: '>=6'} 524 | 525 | semver@7.7.1: 526 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 527 | engines: {node: '>=10'} 528 | hasBin: true 529 | 530 | set-cookie-parser@2.7.1: 531 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 532 | 533 | sirv@3.0.1: 534 | resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} 535 | engines: {node: '>=18'} 536 | 537 | source-map-js@1.2.1: 538 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 539 | engines: {node: '>=0.10.0'} 540 | 541 | svelte-check@4.1.7: 542 | resolution: {integrity: sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==} 543 | engines: {node: '>= 18.0.0'} 544 | hasBin: true 545 | peerDependencies: 546 | svelte: ^4.0.0 || ^5.0.0-next.0 547 | typescript: '>=5.0.0' 548 | 549 | svelte2tsx@0.7.37: 550 | resolution: {integrity: sha512-uQCWibXwUNPGQBGTZP1axIpFGFHTXXN30/ppodLVXCnX23U1nzEhqiVtFSEQjtUK3pFVxPhdnfyxD6ikxMCzPQ==} 551 | peerDependencies: 552 | svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 553 | typescript: ^4.9.4 || ^5.0.0 554 | 555 | svelte@5.28.2: 556 | resolution: {integrity: sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==} 557 | engines: {node: '>=18'} 558 | 559 | tinyglobby@0.2.13: 560 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} 561 | engines: {node: '>=12.0.0'} 562 | 563 | totalist@3.0.1: 564 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 565 | engines: {node: '>=6'} 566 | 567 | tslib@2.8.1: 568 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 569 | 570 | typescript@5.8.3: 571 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 572 | engines: {node: '>=14.17'} 573 | hasBin: true 574 | 575 | vite@6.3.4: 576 | resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} 577 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 578 | hasBin: true 579 | peerDependencies: 580 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 581 | jiti: '>=1.21.0' 582 | less: '*' 583 | lightningcss: ^1.21.0 584 | sass: '*' 585 | sass-embedded: '*' 586 | stylus: '*' 587 | sugarss: '*' 588 | terser: ^5.16.0 589 | tsx: ^4.8.1 590 | yaml: ^2.4.2 591 | peerDependenciesMeta: 592 | '@types/node': 593 | optional: true 594 | jiti: 595 | optional: true 596 | less: 597 | optional: true 598 | lightningcss: 599 | optional: true 600 | sass: 601 | optional: true 602 | sass-embedded: 603 | optional: true 604 | stylus: 605 | optional: true 606 | sugarss: 607 | optional: true 608 | terser: 609 | optional: true 610 | tsx: 611 | optional: true 612 | yaml: 613 | optional: true 614 | 615 | vitefu@1.0.6: 616 | resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} 617 | peerDependencies: 618 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 619 | peerDependenciesMeta: 620 | vite: 621 | optional: true 622 | 623 | zimmerframe@1.1.2: 624 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 625 | 626 | snapshots: 627 | 628 | '@ampproject/remapping@2.3.0': 629 | dependencies: 630 | '@jridgewell/gen-mapping': 0.3.8 631 | '@jridgewell/trace-mapping': 0.3.25 632 | 633 | '@esbuild/aix-ppc64@0.25.3': 634 | optional: true 635 | 636 | '@esbuild/android-arm64@0.25.3': 637 | optional: true 638 | 639 | '@esbuild/android-arm@0.25.3': 640 | optional: true 641 | 642 | '@esbuild/android-x64@0.25.3': 643 | optional: true 644 | 645 | '@esbuild/darwin-arm64@0.25.3': 646 | optional: true 647 | 648 | '@esbuild/darwin-x64@0.25.3': 649 | optional: true 650 | 651 | '@esbuild/freebsd-arm64@0.25.3': 652 | optional: true 653 | 654 | '@esbuild/freebsd-x64@0.25.3': 655 | optional: true 656 | 657 | '@esbuild/linux-arm64@0.25.3': 658 | optional: true 659 | 660 | '@esbuild/linux-arm@0.25.3': 661 | optional: true 662 | 663 | '@esbuild/linux-ia32@0.25.3': 664 | optional: true 665 | 666 | '@esbuild/linux-loong64@0.25.3': 667 | optional: true 668 | 669 | '@esbuild/linux-mips64el@0.25.3': 670 | optional: true 671 | 672 | '@esbuild/linux-ppc64@0.25.3': 673 | optional: true 674 | 675 | '@esbuild/linux-riscv64@0.25.3': 676 | optional: true 677 | 678 | '@esbuild/linux-s390x@0.25.3': 679 | optional: true 680 | 681 | '@esbuild/linux-x64@0.25.3': 682 | optional: true 683 | 684 | '@esbuild/netbsd-arm64@0.25.3': 685 | optional: true 686 | 687 | '@esbuild/netbsd-x64@0.25.3': 688 | optional: true 689 | 690 | '@esbuild/openbsd-arm64@0.25.3': 691 | optional: true 692 | 693 | '@esbuild/openbsd-x64@0.25.3': 694 | optional: true 695 | 696 | '@esbuild/sunos-x64@0.25.3': 697 | optional: true 698 | 699 | '@esbuild/win32-arm64@0.25.3': 700 | optional: true 701 | 702 | '@esbuild/win32-ia32@0.25.3': 703 | optional: true 704 | 705 | '@esbuild/win32-x64@0.25.3': 706 | optional: true 707 | 708 | '@jridgewell/gen-mapping@0.3.8': 709 | dependencies: 710 | '@jridgewell/set-array': 1.2.1 711 | '@jridgewell/sourcemap-codec': 1.5.0 712 | '@jridgewell/trace-mapping': 0.3.25 713 | 714 | '@jridgewell/resolve-uri@3.1.2': {} 715 | 716 | '@jridgewell/set-array@1.2.1': {} 717 | 718 | '@jridgewell/sourcemap-codec@1.5.0': {} 719 | 720 | '@jridgewell/trace-mapping@0.3.25': 721 | dependencies: 722 | '@jridgewell/resolve-uri': 3.1.2 723 | '@jridgewell/sourcemap-codec': 1.5.0 724 | 725 | '@polka/url@1.0.0-next.29': {} 726 | 727 | '@publint/pack@0.1.2': {} 728 | 729 | '@rollup/rollup-android-arm-eabi@4.40.1': 730 | optional: true 731 | 732 | '@rollup/rollup-android-arm64@4.40.1': 733 | optional: true 734 | 735 | '@rollup/rollup-darwin-arm64@4.40.1': 736 | optional: true 737 | 738 | '@rollup/rollup-darwin-x64@4.40.1': 739 | optional: true 740 | 741 | '@rollup/rollup-freebsd-arm64@4.40.1': 742 | optional: true 743 | 744 | '@rollup/rollup-freebsd-x64@4.40.1': 745 | optional: true 746 | 747 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 748 | optional: true 749 | 750 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 751 | optional: true 752 | 753 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 754 | optional: true 755 | 756 | '@rollup/rollup-linux-arm64-musl@4.40.1': 757 | optional: true 758 | 759 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 760 | optional: true 761 | 762 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 763 | optional: true 764 | 765 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 766 | optional: true 767 | 768 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 769 | optional: true 770 | 771 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 772 | optional: true 773 | 774 | '@rollup/rollup-linux-x64-gnu@4.40.1': 775 | optional: true 776 | 777 | '@rollup/rollup-linux-x64-musl@4.40.1': 778 | optional: true 779 | 780 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 781 | optional: true 782 | 783 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 784 | optional: true 785 | 786 | '@rollup/rollup-win32-x64-msvc@4.40.1': 787 | optional: true 788 | 789 | '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.1)': 790 | dependencies: 791 | acorn: 8.14.1 792 | 793 | '@sveltejs/adapter-auto@6.0.0(@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4))': 794 | dependencies: 795 | '@sveltejs/kit': 2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 796 | import-meta-resolve: 4.1.0 797 | 798 | '@sveltejs/kit@2.20.8(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)': 799 | dependencies: 800 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4) 801 | '@types/cookie': 0.6.0 802 | cookie: 0.6.0 803 | devalue: 5.1.1 804 | esm-env: 1.2.2 805 | import-meta-resolve: 4.1.0 806 | kleur: 4.1.5 807 | magic-string: 0.30.17 808 | mrmime: 2.0.1 809 | sade: 1.8.1 810 | set-cookie-parser: 2.7.1 811 | sirv: 3.0.1 812 | svelte: 5.28.2 813 | vite: 6.3.4 814 | 815 | '@sveltejs/package@2.3.11(svelte@5.28.2)(typescript@5.8.3)': 816 | dependencies: 817 | chokidar: 4.0.3 818 | kleur: 4.1.5 819 | sade: 1.8.1 820 | semver: 7.7.1 821 | svelte: 5.28.2 822 | svelte2tsx: 0.7.37(svelte@5.28.2)(typescript@5.8.3) 823 | transitivePeerDependencies: 824 | - typescript 825 | 826 | '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4)': 827 | dependencies: 828 | '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.2)(vite@6.3.4) 829 | debug: 4.4.0 830 | svelte: 5.28.2 831 | vite: 6.3.4 832 | transitivePeerDependencies: 833 | - supports-color 834 | 835 | '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4)': 836 | dependencies: 837 | '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.2)(vite@6.3.4))(svelte@5.28.2)(vite@6.3.4) 838 | debug: 4.4.0 839 | deepmerge: 4.3.1 840 | kleur: 4.1.5 841 | magic-string: 0.30.17 842 | svelte: 5.28.2 843 | vite: 6.3.4 844 | vitefu: 1.0.6(vite@6.3.4) 845 | transitivePeerDependencies: 846 | - supports-color 847 | 848 | '@types/cookie@0.6.0': {} 849 | 850 | '@types/estree@1.0.7': {} 851 | 852 | acorn@8.14.1: {} 853 | 854 | aria-query@5.3.2: {} 855 | 856 | axobject-query@4.1.0: {} 857 | 858 | chokidar@4.0.3: 859 | dependencies: 860 | readdirp: 4.1.2 861 | 862 | clsx@2.1.1: {} 863 | 864 | cookie@0.6.0: {} 865 | 866 | debug@4.4.0: 867 | dependencies: 868 | ms: 2.1.3 869 | 870 | dedent-js@1.0.1: {} 871 | 872 | deepmerge@4.3.1: {} 873 | 874 | devalue@5.1.1: {} 875 | 876 | esbuild@0.25.3: 877 | optionalDependencies: 878 | '@esbuild/aix-ppc64': 0.25.3 879 | '@esbuild/android-arm': 0.25.3 880 | '@esbuild/android-arm64': 0.25.3 881 | '@esbuild/android-x64': 0.25.3 882 | '@esbuild/darwin-arm64': 0.25.3 883 | '@esbuild/darwin-x64': 0.25.3 884 | '@esbuild/freebsd-arm64': 0.25.3 885 | '@esbuild/freebsd-x64': 0.25.3 886 | '@esbuild/linux-arm': 0.25.3 887 | '@esbuild/linux-arm64': 0.25.3 888 | '@esbuild/linux-ia32': 0.25.3 889 | '@esbuild/linux-loong64': 0.25.3 890 | '@esbuild/linux-mips64el': 0.25.3 891 | '@esbuild/linux-ppc64': 0.25.3 892 | '@esbuild/linux-riscv64': 0.25.3 893 | '@esbuild/linux-s390x': 0.25.3 894 | '@esbuild/linux-x64': 0.25.3 895 | '@esbuild/netbsd-arm64': 0.25.3 896 | '@esbuild/netbsd-x64': 0.25.3 897 | '@esbuild/openbsd-arm64': 0.25.3 898 | '@esbuild/openbsd-x64': 0.25.3 899 | '@esbuild/sunos-x64': 0.25.3 900 | '@esbuild/win32-arm64': 0.25.3 901 | '@esbuild/win32-ia32': 0.25.3 902 | '@esbuild/win32-x64': 0.25.3 903 | 904 | esm-env@1.2.2: {} 905 | 906 | esrap@1.4.6: 907 | dependencies: 908 | '@jridgewell/sourcemap-codec': 1.5.0 909 | 910 | fdir@6.4.4(picomatch@4.0.2): 911 | optionalDependencies: 912 | picomatch: 4.0.2 913 | 914 | fsevents@2.3.3: 915 | optional: true 916 | 917 | import-meta-resolve@4.1.0: {} 918 | 919 | is-reference@3.0.3: 920 | dependencies: 921 | '@types/estree': 1.0.7 922 | 923 | kleur@4.1.5: {} 924 | 925 | locate-character@3.0.0: {} 926 | 927 | lower-case@2.0.2: 928 | dependencies: 929 | tslib: 2.8.1 930 | 931 | magic-string@0.30.17: 932 | dependencies: 933 | '@jridgewell/sourcemap-codec': 1.5.0 934 | 935 | mri@1.2.0: {} 936 | 937 | mrmime@2.0.1: {} 938 | 939 | ms@2.1.3: {} 940 | 941 | nanoid@3.3.11: {} 942 | 943 | no-case@3.0.4: 944 | dependencies: 945 | lower-case: 2.0.2 946 | tslib: 2.8.1 947 | 948 | package-manager-detector@1.2.0: {} 949 | 950 | pascal-case@3.1.2: 951 | dependencies: 952 | no-case: 3.0.4 953 | tslib: 2.8.1 954 | 955 | picocolors@1.1.1: {} 956 | 957 | picomatch@4.0.2: {} 958 | 959 | postcss@8.5.3: 960 | dependencies: 961 | nanoid: 3.3.11 962 | picocolors: 1.1.1 963 | source-map-js: 1.2.1 964 | 965 | prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.28.2): 966 | dependencies: 967 | prettier: 3.5.3 968 | svelte: 5.28.2 969 | 970 | prettier@3.5.3: {} 971 | 972 | publint@0.3.12: 973 | dependencies: 974 | '@publint/pack': 0.1.2 975 | package-manager-detector: 1.2.0 976 | picocolors: 1.1.1 977 | sade: 1.8.1 978 | 979 | readdirp@4.1.2: {} 980 | 981 | rollup@4.40.1: 982 | dependencies: 983 | '@types/estree': 1.0.7 984 | optionalDependencies: 985 | '@rollup/rollup-android-arm-eabi': 4.40.1 986 | '@rollup/rollup-android-arm64': 4.40.1 987 | '@rollup/rollup-darwin-arm64': 4.40.1 988 | '@rollup/rollup-darwin-x64': 4.40.1 989 | '@rollup/rollup-freebsd-arm64': 4.40.1 990 | '@rollup/rollup-freebsd-x64': 4.40.1 991 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 992 | '@rollup/rollup-linux-arm-musleabihf': 4.40.1 993 | '@rollup/rollup-linux-arm64-gnu': 4.40.1 994 | '@rollup/rollup-linux-arm64-musl': 4.40.1 995 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 996 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 997 | '@rollup/rollup-linux-riscv64-gnu': 4.40.1 998 | '@rollup/rollup-linux-riscv64-musl': 4.40.1 999 | '@rollup/rollup-linux-s390x-gnu': 4.40.1 1000 | '@rollup/rollup-linux-x64-gnu': 4.40.1 1001 | '@rollup/rollup-linux-x64-musl': 4.40.1 1002 | '@rollup/rollup-win32-arm64-msvc': 4.40.1 1003 | '@rollup/rollup-win32-ia32-msvc': 4.40.1 1004 | '@rollup/rollup-win32-x64-msvc': 4.40.1 1005 | fsevents: 2.3.3 1006 | 1007 | sade@1.8.1: 1008 | dependencies: 1009 | mri: 1.2.0 1010 | 1011 | semver@7.7.1: {} 1012 | 1013 | set-cookie-parser@2.7.1: {} 1014 | 1015 | sirv@3.0.1: 1016 | dependencies: 1017 | '@polka/url': 1.0.0-next.29 1018 | mrmime: 2.0.1 1019 | totalist: 3.0.1 1020 | 1021 | source-map-js@1.2.1: {} 1022 | 1023 | svelte-check@4.1.7(picomatch@4.0.2)(svelte@5.28.2)(typescript@5.8.3): 1024 | dependencies: 1025 | '@jridgewell/trace-mapping': 0.3.25 1026 | chokidar: 4.0.3 1027 | fdir: 6.4.4(picomatch@4.0.2) 1028 | picocolors: 1.1.1 1029 | sade: 1.8.1 1030 | svelte: 5.28.2 1031 | typescript: 5.8.3 1032 | transitivePeerDependencies: 1033 | - picomatch 1034 | 1035 | svelte2tsx@0.7.37(svelte@5.28.2)(typescript@5.8.3): 1036 | dependencies: 1037 | dedent-js: 1.0.1 1038 | pascal-case: 3.1.2 1039 | svelte: 5.28.2 1040 | typescript: 5.8.3 1041 | 1042 | svelte@5.28.2: 1043 | dependencies: 1044 | '@ampproject/remapping': 2.3.0 1045 | '@jridgewell/sourcemap-codec': 1.5.0 1046 | '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) 1047 | '@types/estree': 1.0.7 1048 | acorn: 8.14.1 1049 | aria-query: 5.3.2 1050 | axobject-query: 4.1.0 1051 | clsx: 2.1.1 1052 | esm-env: 1.2.2 1053 | esrap: 1.4.6 1054 | is-reference: 3.0.3 1055 | locate-character: 3.0.0 1056 | magic-string: 0.30.17 1057 | zimmerframe: 1.1.2 1058 | 1059 | tinyglobby@0.2.13: 1060 | dependencies: 1061 | fdir: 6.4.4(picomatch@4.0.2) 1062 | picomatch: 4.0.2 1063 | 1064 | totalist@3.0.1: {} 1065 | 1066 | tslib@2.8.1: {} 1067 | 1068 | typescript@5.8.3: {} 1069 | 1070 | vite@6.3.4: 1071 | dependencies: 1072 | esbuild: 0.25.3 1073 | fdir: 6.4.4(picomatch@4.0.2) 1074 | picomatch: 4.0.2 1075 | postcss: 8.5.3 1076 | rollup: 4.40.1 1077 | tinyglobby: 0.2.13 1078 | optionalDependencies: 1079 | fsevents: 2.3.3 1080 | 1081 | vitefu@1.0.6(vite@6.3.4): 1082 | optionalDependencies: 1083 | vite: 6.3.4 1084 | 1085 | zimmerframe@1.1.2: {} 1086 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://svelte.dev/docs/kit/types#app.d.ts 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/svelte-textcircle/index.ts: -------------------------------------------------------------------------------- 1 | import type { Snippet } from 'svelte'; 2 | import Textcircle from './textcircle.svelte'; 3 | 4 | type TextcircleProps = { 5 | class?: string; 6 | text: string[]; 7 | options?: TextcircleOptions; 8 | animation?: TextcircleAnimation; 9 | children?: Snippet; 10 | }; 11 | 12 | type TextcircleOptions = { 13 | circlesize?: '250px' | '300px' | string | null | undefined; 14 | textTransform?: 'uppercase' | 'lowercase' | 'none' | null | undefined; 15 | fontSize?: '1em' | '1.5em' | '1rem' | string | null | undefined; 16 | fontWeight?: 'lighter' | 'normal' | 'bold' | 'bolder' | null | undefined; 17 | divider?: string | null | undefined; 18 | dividerColor?: string | null | undefined; 19 | rotate?: number | null | undefined; 20 | }; 21 | 22 | type TextcircleAnimation = { 23 | duration?: string | null | undefined; 24 | easing?: 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear' | string | null | undefined; 25 | delay?: string | null | undefined; 26 | direction?: 'normal' | 'reverse' | null | undefined; 27 | count?: 'infinite' | number | null | undefined; 28 | animateOnHover?: boolean | null | undefined; 29 | stopAnimateOnHover?: boolean | null | undefined; 30 | animateInView?: boolean | null | undefined; 31 | }; 32 | 33 | export { Textcircle, type TextcircleProps, type TextcircleAnimation, type TextcircleOptions }; 34 | -------------------------------------------------------------------------------- /src/lib/svelte-textcircle/textcircle.svelte: -------------------------------------------------------------------------------- 1 | 60 | 61 |
73 |

86 | {text.join(' ')} 87 | {#each textArray as char, idx} 88 | {#if char === ' '} 89 | 96 | {:else if char === divider?.trim()} 97 | 104 | {:else} 105 | 112 | {/if} 113 | {/each} 114 |

115 | 116 | {#if children} 117 |
118 | {@render children()} 119 |
120 | {/if} 121 |
122 | 123 | 217 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 |
7 |

Basic Usage

8 |

Display an array of words in a simple circular layout with default settings.

9 | 10 |
11 | 12 | 13 |
14 |

Custom Options

15 |

Adjust size, typography, divider, and initial rotation for unique styles.

16 | 28 |
29 | 30 | 31 |
32 |

Animation on hover

33 |

Fine-tune animation duration, easing, delay, direction, and iteration count.

34 | 45 |
46 | 47 | 48 |
49 |

Stop Animation on Hover

50 |

Pause the ongoing animation when the user hovers over the component.

51 | 58 |
59 | 60 | 61 |
62 |

Central Content

63 |

Embed custom content like images or icons in the circle’s center.

64 | 65 | 70 | 71 |
72 | 73 | 125 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoStis-World/svelte-textcircle/c80daff6e8f2bc4de692da80390ca6ba88d99bab/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://svelte.dev/docs/kit/integrations 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 12 | // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 13 | // See https://svelte.dev/docs/kit/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "module": "NodeNext", 13 | "moduleResolution": "NodeNext" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | --------------------------------------------------------------------------------