tldraw/packages/assets/urls.js
Steve Ruiz ac149c1014
Dynamic size mode + fill fill (#3835)
This PR adds a user preference for "dynamic size mode" where the scale
of shapes (text size, stroke width) is relative to the current zoom
level. This means that the stroke width in screen pixels (or text size
in screen pixels) is identical regardless of zoom level.

![Kapture 2024-05-27 at 05 23
21](https://github.com/tldraw/tldraw/assets/23072548/f247ecce-bfcd-4f85-b7a5-d7677b38e4d8)

- [x] Draw shape
- [x] Text shape
- [x] Highlighter shape
- [x] Geo shape
- [x] Arrow shape
- [x] Note shape
- [x] Line shape

Embed shape?

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `feature` — New feature

### Test Plan

1. Use the tools.
2. Change zoom

- [ ] Unit Tests

### Release Notes

- Adds a dynamic size user preferences.
- Removes double click to reset scale on text shapes.
- Removes double click to reset autosize on text shapes.

---------

Co-authored-by: Taha <98838967+Taha-Hassan-Git@users.noreply.github.com>
Co-authored-by: huppy-bot[bot] <128400622+huppy-bot[bot]@users.noreply.github.com>
2024-06-16 16:58:13 +00:00

584 lines
22 KiB
JavaScript

// This file is automatically generated by scripts/refresh-assets.ts.
// Do not edit manually. Or do, I'm a comment, not a cop.
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference path="./modules.d.ts" />
import { formatAssetUrl } from './utils.js'
/**
* @param {AssetUrlOptions} [opts]
* @public
*/
export function getAssetUrlsByMetaUrl(opts) {
return {
fonts: {
monospace: formatAssetUrl(
new URL('./fonts/IBMPlexMono-Medium.woff2', import.meta.url).href,
opts
),
sansSerif: formatAssetUrl(
new URL('./fonts/IBMPlexSans-Medium.woff2', import.meta.url).href,
opts
),
serif: formatAssetUrl(
new URL('./fonts/IBMPlexSerif-Medium.woff2', import.meta.url).href,
opts
),
draw: formatAssetUrl(
new URL('./fonts/Shantell_Sans-Tldrawish.woff2', import.meta.url).href,
opts
),
},
icons: {
'align-bottom': formatAssetUrl(
new URL('./icons/icon/align-bottom.svg', import.meta.url).href,
opts
),
'align-center-horizontal': formatAssetUrl(
new URL('./icons/icon/align-center-horizontal.svg', import.meta.url).href,
opts
),
'align-center-vertical': formatAssetUrl(
new URL('./icons/icon/align-center-vertical.svg', import.meta.url).href,
opts
),
'align-left': formatAssetUrl(
new URL('./icons/icon/align-left.svg', import.meta.url).href,
opts
),
'align-right': formatAssetUrl(
new URL('./icons/icon/align-right.svg', import.meta.url).href,
opts
),
'align-top': formatAssetUrl(
new URL('./icons/icon/align-top.svg', import.meta.url).href,
opts
),
'arrow-left': formatAssetUrl(
new URL('./icons/icon/arrow-left.svg', import.meta.url).href,
opts
),
'arrowhead-arrow': formatAssetUrl(
new URL('./icons/icon/arrowhead-arrow.svg', import.meta.url).href,
opts
),
'arrowhead-bar': formatAssetUrl(
new URL('./icons/icon/arrowhead-bar.svg', import.meta.url).href,
opts
),
'arrowhead-diamond': formatAssetUrl(
new URL('./icons/icon/arrowhead-diamond.svg', import.meta.url).href,
opts
),
'arrowhead-dot': formatAssetUrl(
new URL('./icons/icon/arrowhead-dot.svg', import.meta.url).href,
opts
),
'arrowhead-none': formatAssetUrl(
new URL('./icons/icon/arrowhead-none.svg', import.meta.url).href,
opts
),
'arrowhead-square': formatAssetUrl(
new URL('./icons/icon/arrowhead-square.svg', import.meta.url).href,
opts
),
'arrowhead-triangle-inverted': formatAssetUrl(
new URL('./icons/icon/arrowhead-triangle-inverted.svg', import.meta.url).href,
opts
),
'arrowhead-triangle': formatAssetUrl(
new URL('./icons/icon/arrowhead-triangle.svg', import.meta.url).href,
opts
),
blob: formatAssetUrl(new URL('./icons/icon/blob.svg', import.meta.url).href, opts),
'bring-forward': formatAssetUrl(
new URL('./icons/icon/bring-forward.svg', import.meta.url).href,
opts
),
'bring-to-front': formatAssetUrl(
new URL('./icons/icon/bring-to-front.svg', import.meta.url).href,
opts
),
broken: formatAssetUrl(new URL('./icons/icon/broken.svg', import.meta.url).href, opts),
'check-circle': formatAssetUrl(
new URL('./icons/icon/check-circle.svg', import.meta.url).href,
opts
),
check: formatAssetUrl(new URL('./icons/icon/check.svg', import.meta.url).href, opts),
'chevron-down': formatAssetUrl(
new URL('./icons/icon/chevron-down.svg', import.meta.url).href,
opts
),
'chevron-left': formatAssetUrl(
new URL('./icons/icon/chevron-left.svg', import.meta.url).href,
opts
),
'chevron-right': formatAssetUrl(
new URL('./icons/icon/chevron-right.svg', import.meta.url).href,
opts
),
'chevron-up': formatAssetUrl(
new URL('./icons/icon/chevron-up.svg', import.meta.url).href,
opts
),
'chevrons-ne': formatAssetUrl(
new URL('./icons/icon/chevrons-ne.svg', import.meta.url).href,
opts
),
'chevrons-sw': formatAssetUrl(
new URL('./icons/icon/chevrons-sw.svg', import.meta.url).href,
opts
),
'clipboard-copied': formatAssetUrl(
new URL('./icons/icon/clipboard-copied.svg', import.meta.url).href,
opts
),
'clipboard-copy': formatAssetUrl(
new URL('./icons/icon/clipboard-copy.svg', import.meta.url).href,
opts
),
color: formatAssetUrl(new URL('./icons/icon/color.svg', import.meta.url).href, opts),
'cross-2': formatAssetUrl(new URL('./icons/icon/cross-2.svg', import.meta.url).href, opts),
'cross-circle': formatAssetUrl(
new URL('./icons/icon/cross-circle.svg', import.meta.url).href,
opts
),
'dash-dashed': formatAssetUrl(
new URL('./icons/icon/dash-dashed.svg', import.meta.url).href,
opts
),
'dash-dotted': formatAssetUrl(
new URL('./icons/icon/dash-dotted.svg', import.meta.url).href,
opts
),
'dash-draw': formatAssetUrl(
new URL('./icons/icon/dash-draw.svg', import.meta.url).href,
opts
),
'dash-solid': formatAssetUrl(
new URL('./icons/icon/dash-solid.svg', import.meta.url).href,
opts
),
disconnected: formatAssetUrl(
new URL('./icons/icon/disconnected.svg', import.meta.url).href,
opts
),
discord: formatAssetUrl(new URL('./icons/icon/discord.svg', import.meta.url).href, opts),
'distribute-horizontal': formatAssetUrl(
new URL('./icons/icon/distribute-horizontal.svg', import.meta.url).href,
opts
),
'distribute-vertical': formatAssetUrl(
new URL('./icons/icon/distribute-vertical.svg', import.meta.url).href,
opts
),
dot: formatAssetUrl(new URL('./icons/icon/dot.svg', import.meta.url).href, opts),
'dots-horizontal': formatAssetUrl(
new URL('./icons/icon/dots-horizontal.svg', import.meta.url).href,
opts
),
'dots-vertical': formatAssetUrl(
new URL('./icons/icon/dots-vertical.svg', import.meta.url).href,
opts
),
'drag-handle-dots': formatAssetUrl(
new URL('./icons/icon/drag-handle-dots.svg', import.meta.url).href,
opts
),
duplicate: formatAssetUrl(new URL('./icons/icon/duplicate.svg', import.meta.url).href, opts),
edit: formatAssetUrl(new URL('./icons/icon/edit.svg', import.meta.url).href, opts),
'external-link': formatAssetUrl(
new URL('./icons/icon/external-link.svg', import.meta.url).href,
opts
),
'fill-fill': formatAssetUrl(
new URL('./icons/icon/fill-fill.svg', import.meta.url).href,
opts
),
'fill-none': formatAssetUrl(
new URL('./icons/icon/fill-none.svg', import.meta.url).href,
opts
),
'fill-pattern': formatAssetUrl(
new URL('./icons/icon/fill-pattern.svg', import.meta.url).href,
opts
),
'fill-semi': formatAssetUrl(
new URL('./icons/icon/fill-semi.svg', import.meta.url).href,
opts
),
'fill-solid': formatAssetUrl(
new URL('./icons/icon/fill-solid.svg', import.meta.url).href,
opts
),
follow: formatAssetUrl(new URL('./icons/icon/follow.svg', import.meta.url).href, opts),
following: formatAssetUrl(new URL('./icons/icon/following.svg', import.meta.url).href, opts),
'font-draw': formatAssetUrl(
new URL('./icons/icon/font-draw.svg', import.meta.url).href,
opts
),
'font-mono': formatAssetUrl(
new URL('./icons/icon/font-mono.svg', import.meta.url).href,
opts
),
'font-sans': formatAssetUrl(
new URL('./icons/icon/font-sans.svg', import.meta.url).href,
opts
),
'font-serif': formatAssetUrl(
new URL('./icons/icon/font-serif.svg', import.meta.url).href,
opts
),
'geo-arrow-down': formatAssetUrl(
new URL('./icons/icon/geo-arrow-down.svg', import.meta.url).href,
opts
),
'geo-arrow-left': formatAssetUrl(
new URL('./icons/icon/geo-arrow-left.svg', import.meta.url).href,
opts
),
'geo-arrow-right': formatAssetUrl(
new URL('./icons/icon/geo-arrow-right.svg', import.meta.url).href,
opts
),
'geo-arrow-up': formatAssetUrl(
new URL('./icons/icon/geo-arrow-up.svg', import.meta.url).href,
opts
),
'geo-check-box': formatAssetUrl(
new URL('./icons/icon/geo-check-box.svg', import.meta.url).href,
opts
),
'geo-cloud': formatAssetUrl(
new URL('./icons/icon/geo-cloud.svg', import.meta.url).href,
opts
),
'geo-diamond': formatAssetUrl(
new URL('./icons/icon/geo-diamond.svg', import.meta.url).href,
opts
),
'geo-ellipse': formatAssetUrl(
new URL('./icons/icon/geo-ellipse.svg', import.meta.url).href,
opts
),
'geo-heart': formatAssetUrl(
new URL('./icons/icon/geo-heart.svg', import.meta.url).href,
opts
),
'geo-hexagon': formatAssetUrl(
new URL('./icons/icon/geo-hexagon.svg', import.meta.url).href,
opts
),
'geo-octagon': formatAssetUrl(
new URL('./icons/icon/geo-octagon.svg', import.meta.url).href,
opts
),
'geo-oval': formatAssetUrl(new URL('./icons/icon/geo-oval.svg', import.meta.url).href, opts),
'geo-pentagon': formatAssetUrl(
new URL('./icons/icon/geo-pentagon.svg', import.meta.url).href,
opts
),
'geo-rectangle': formatAssetUrl(
new URL('./icons/icon/geo-rectangle.svg', import.meta.url).href,
opts
),
'geo-rhombus-2': formatAssetUrl(
new URL('./icons/icon/geo-rhombus-2.svg', import.meta.url).href,
opts
),
'geo-rhombus': formatAssetUrl(
new URL('./icons/icon/geo-rhombus.svg', import.meta.url).href,
opts
),
'geo-star': formatAssetUrl(new URL('./icons/icon/geo-star.svg', import.meta.url).href, opts),
'geo-trapezoid': formatAssetUrl(
new URL('./icons/icon/geo-trapezoid.svg', import.meta.url).href,
opts
),
'geo-triangle': formatAssetUrl(
new URL('./icons/icon/geo-triangle.svg', import.meta.url).href,
opts
),
'geo-x-box': formatAssetUrl(
new URL('./icons/icon/geo-x-box.svg', import.meta.url).href,
opts
),
github: formatAssetUrl(new URL('./icons/icon/github.svg', import.meta.url).href, opts),
group: formatAssetUrl(new URL('./icons/icon/group.svg', import.meta.url).href, opts),
'horizontal-align-end': formatAssetUrl(
new URL('./icons/icon/horizontal-align-end.svg', import.meta.url).href,
opts
),
'horizontal-align-middle': formatAssetUrl(
new URL('./icons/icon/horizontal-align-middle.svg', import.meta.url).href,
opts
),
'horizontal-align-start': formatAssetUrl(
new URL('./icons/icon/horizontal-align-start.svg', import.meta.url).href,
opts
),
'info-circle': formatAssetUrl(
new URL('./icons/icon/info-circle.svg', import.meta.url).href,
opts
),
leading: formatAssetUrl(new URL('./icons/icon/leading.svg', import.meta.url).href, opts),
link: formatAssetUrl(new URL('./icons/icon/link.svg', import.meta.url).href, opts),
lock: formatAssetUrl(new URL('./icons/icon/lock.svg', import.meta.url).href, opts),
menu: formatAssetUrl(new URL('./icons/icon/menu.svg', import.meta.url).href, opts),
minus: formatAssetUrl(new URL('./icons/icon/minus.svg', import.meta.url).href, opts),
mixed: formatAssetUrl(new URL('./icons/icon/mixed.svg', import.meta.url).href, opts),
pack: formatAssetUrl(new URL('./icons/icon/pack.svg', import.meta.url).href, opts),
plus: formatAssetUrl(new URL('./icons/icon/plus.svg', import.meta.url).href, opts),
'question-mark-circle': formatAssetUrl(
new URL('./icons/icon/question-mark-circle.svg', import.meta.url).href,
opts
),
'question-mark': formatAssetUrl(
new URL('./icons/icon/question-mark.svg', import.meta.url).href,
opts
),
redo: formatAssetUrl(new URL('./icons/icon/redo.svg', import.meta.url).href, opts),
'reset-zoom': formatAssetUrl(
new URL('./icons/icon/reset-zoom.svg', import.meta.url).href,
opts
),
'rotate-ccw': formatAssetUrl(
new URL('./icons/icon/rotate-ccw.svg', import.meta.url).href,
opts
),
'rotate-cw': formatAssetUrl(
new URL('./icons/icon/rotate-cw.svg', import.meta.url).href,
opts
),
'send-backward': formatAssetUrl(
new URL('./icons/icon/send-backward.svg', import.meta.url).href,
opts
),
'send-to-back': formatAssetUrl(
new URL('./icons/icon/send-to-back.svg', import.meta.url).href,
opts
),
'share-1': formatAssetUrl(new URL('./icons/icon/share-1.svg', import.meta.url).href, opts),
'size-extra-large': formatAssetUrl(
new URL('./icons/icon/size-extra-large.svg', import.meta.url).href,
opts
),
'size-large': formatAssetUrl(
new URL('./icons/icon/size-large.svg', import.meta.url).href,
opts
),
'size-medium': formatAssetUrl(
new URL('./icons/icon/size-medium.svg', import.meta.url).href,
opts
),
'size-small': formatAssetUrl(
new URL('./icons/icon/size-small.svg', import.meta.url).href,
opts
),
'spline-cubic': formatAssetUrl(
new URL('./icons/icon/spline-cubic.svg', import.meta.url).href,
opts
),
'spline-line': formatAssetUrl(
new URL('./icons/icon/spline-line.svg', import.meta.url).href,
opts
),
'stack-horizontal': formatAssetUrl(
new URL('./icons/icon/stack-horizontal.svg', import.meta.url).href,
opts
),
'stack-vertical': formatAssetUrl(
new URL('./icons/icon/stack-vertical.svg', import.meta.url).href,
opts
),
'stretch-horizontal': formatAssetUrl(
new URL('./icons/icon/stretch-horizontal.svg', import.meta.url).href,
opts
),
'stretch-vertical': formatAssetUrl(
new URL('./icons/icon/stretch-vertical.svg', import.meta.url).href,
opts
),
'text-align-center': formatAssetUrl(
new URL('./icons/icon/text-align-center.svg', import.meta.url).href,
opts
),
'text-align-left': formatAssetUrl(
new URL('./icons/icon/text-align-left.svg', import.meta.url).href,
opts
),
'text-align-right': formatAssetUrl(
new URL('./icons/icon/text-align-right.svg', import.meta.url).href,
opts
),
'toggle-off': formatAssetUrl(
new URL('./icons/icon/toggle-off.svg', import.meta.url).href,
opts
),
'toggle-on': formatAssetUrl(
new URL('./icons/icon/toggle-on.svg', import.meta.url).href,
opts
),
'tool-arrow': formatAssetUrl(
new URL('./icons/icon/tool-arrow.svg', import.meta.url).href,
opts
),
'tool-eraser': formatAssetUrl(
new URL('./icons/icon/tool-eraser.svg', import.meta.url).href,
opts
),
'tool-frame': formatAssetUrl(
new URL('./icons/icon/tool-frame.svg', import.meta.url).href,
opts
),
'tool-hand': formatAssetUrl(
new URL('./icons/icon/tool-hand.svg', import.meta.url).href,
opts
),
'tool-highlight': formatAssetUrl(
new URL('./icons/icon/tool-highlight.svg', import.meta.url).href,
opts
),
'tool-laser': formatAssetUrl(
new URL('./icons/icon/tool-laser.svg', import.meta.url).href,
opts
),
'tool-line': formatAssetUrl(
new URL('./icons/icon/tool-line.svg', import.meta.url).href,
opts
),
'tool-media': formatAssetUrl(
new URL('./icons/icon/tool-media.svg', import.meta.url).href,
opts
),
'tool-note': formatAssetUrl(
new URL('./icons/icon/tool-note.svg', import.meta.url).href,
opts
),
'tool-pencil': formatAssetUrl(
new URL('./icons/icon/tool-pencil.svg', import.meta.url).href,
opts
),
'tool-pointer': formatAssetUrl(
new URL('./icons/icon/tool-pointer.svg', import.meta.url).href,
opts
),
'tool-screenshot': formatAssetUrl(
new URL('./icons/icon/tool-screenshot.svg', import.meta.url).href,
opts
),
'tool-text': formatAssetUrl(
new URL('./icons/icon/tool-text.svg', import.meta.url).href,
opts
),
trash: formatAssetUrl(new URL('./icons/icon/trash.svg', import.meta.url).href, opts),
twitter: formatAssetUrl(new URL('./icons/icon/twitter.svg', import.meta.url).href, opts),
undo: formatAssetUrl(new URL('./icons/icon/undo.svg', import.meta.url).href, opts),
ungroup: formatAssetUrl(new URL('./icons/icon/ungroup.svg', import.meta.url).href, opts),
unlock: formatAssetUrl(new URL('./icons/icon/unlock.svg', import.meta.url).href, opts),
'vertical-align-end': formatAssetUrl(
new URL('./icons/icon/vertical-align-end.svg', import.meta.url).href,
opts
),
'vertical-align-middle': formatAssetUrl(
new URL('./icons/icon/vertical-align-middle.svg', import.meta.url).href,
opts
),
'vertical-align-start': formatAssetUrl(
new URL('./icons/icon/vertical-align-start.svg', import.meta.url).href,
opts
),
'warning-triangle': formatAssetUrl(
new URL('./icons/icon/warning-triangle.svg', import.meta.url).href,
opts
),
'zoom-in': formatAssetUrl(new URL('./icons/icon/zoom-in.svg', import.meta.url).href, opts),
'zoom-out': formatAssetUrl(new URL('./icons/icon/zoom-out.svg', import.meta.url).href, opts),
},
translations: {
ar: formatAssetUrl(new URL('./translations/ar.json', import.meta.url).href, opts),
ca: formatAssetUrl(new URL('./translations/ca.json', import.meta.url).href, opts),
cs: formatAssetUrl(new URL('./translations/cs.json', import.meta.url).href, opts),
da: formatAssetUrl(new URL('./translations/da.json', import.meta.url).href, opts),
de: formatAssetUrl(new URL('./translations/de.json', import.meta.url).href, opts),
en: formatAssetUrl(new URL('./translations/en.json', import.meta.url).href, opts),
es: formatAssetUrl(new URL('./translations/es.json', import.meta.url).href, opts),
fa: formatAssetUrl(new URL('./translations/fa.json', import.meta.url).href, opts),
fi: formatAssetUrl(new URL('./translations/fi.json', import.meta.url).href, opts),
fr: formatAssetUrl(new URL('./translations/fr.json', import.meta.url).href, opts),
gl: formatAssetUrl(new URL('./translations/gl.json', import.meta.url).href, opts),
he: formatAssetUrl(new URL('./translations/he.json', import.meta.url).href, opts),
'hi-in': formatAssetUrl(new URL('./translations/hi-in.json', import.meta.url).href, opts),
hr: formatAssetUrl(new URL('./translations/hr.json', import.meta.url).href, opts),
hu: formatAssetUrl(new URL('./translations/hu.json', import.meta.url).href, opts),
id: formatAssetUrl(new URL('./translations/id.json', import.meta.url).href, opts),
it: formatAssetUrl(new URL('./translations/it.json', import.meta.url).href, opts),
ja: formatAssetUrl(new URL('./translations/ja.json', import.meta.url).href, opts),
'ko-kr': formatAssetUrl(new URL('./translations/ko-kr.json', import.meta.url).href, opts),
ku: formatAssetUrl(new URL('./translations/ku.json', import.meta.url).href, opts),
languages: formatAssetUrl(
new URL('./translations/languages.json', import.meta.url).href,
opts
),
main: formatAssetUrl(new URL('./translations/main.json', import.meta.url).href, opts),
my: formatAssetUrl(new URL('./translations/my.json', import.meta.url).href, opts),
ne: formatAssetUrl(new URL('./translations/ne.json', import.meta.url).href, opts),
no: formatAssetUrl(new URL('./translations/no.json', import.meta.url).href, opts),
pl: formatAssetUrl(new URL('./translations/pl.json', import.meta.url).href, opts),
'pt-br': formatAssetUrl(new URL('./translations/pt-br.json', import.meta.url).href, opts),
'pt-pt': formatAssetUrl(new URL('./translations/pt-pt.json', import.meta.url).href, opts),
ro: formatAssetUrl(new URL('./translations/ro.json', import.meta.url).href, opts),
ru: formatAssetUrl(new URL('./translations/ru.json', import.meta.url).href, opts),
sl: formatAssetUrl(new URL('./translations/sl.json', import.meta.url).href, opts),
sv: formatAssetUrl(new URL('./translations/sv.json', import.meta.url).href, opts),
te: formatAssetUrl(new URL('./translations/te.json', import.meta.url).href, opts),
th: formatAssetUrl(new URL('./translations/th.json', import.meta.url).href, opts),
tr: formatAssetUrl(new URL('./translations/tr.json', import.meta.url).href, opts),
uk: formatAssetUrl(new URL('./translations/uk.json', import.meta.url).href, opts),
vi: formatAssetUrl(new URL('./translations/vi.json', import.meta.url).href, opts),
'zh-cn': formatAssetUrl(new URL('./translations/zh-cn.json', import.meta.url).href, opts),
'zh-tw': formatAssetUrl(new URL('./translations/zh-tw.json', import.meta.url).href, opts),
},
embedIcons: {
codepen: formatAssetUrl(new URL('./embed-icons/codepen.png', import.meta.url).href, opts),
codesandbox: formatAssetUrl(
new URL('./embed-icons/codesandbox.png', import.meta.url).href,
opts
),
desmos: formatAssetUrl(new URL('./embed-icons/desmos.png', import.meta.url).href, opts),
excalidraw: formatAssetUrl(
new URL('./embed-icons/excalidraw.png', import.meta.url).href,
opts
),
felt: formatAssetUrl(new URL('./embed-icons/felt.png', import.meta.url).href, opts),
figma: formatAssetUrl(new URL('./embed-icons/figma.png', import.meta.url).href, opts),
github_gist: formatAssetUrl(
new URL('./embed-icons/github_gist.png', import.meta.url).href,
opts
),
google_calendar: formatAssetUrl(
new URL('./embed-icons/google_calendar.png', import.meta.url).href,
opts
),
google_maps: formatAssetUrl(
new URL('./embed-icons/google_maps.png', import.meta.url).href,
opts
),
google_slides: formatAssetUrl(
new URL('./embed-icons/google_slides.png', import.meta.url).href,
opts
),
observable: formatAssetUrl(
new URL('./embed-icons/observable.png', import.meta.url).href,
opts
),
replit: formatAssetUrl(new URL('./embed-icons/replit.png', import.meta.url).href, opts),
scratch: formatAssetUrl(new URL('./embed-icons/scratch.png', import.meta.url).href, opts),
spotify: formatAssetUrl(new URL('./embed-icons/spotify.png', import.meta.url).href, opts),
tldraw: formatAssetUrl(new URL('./embed-icons/tldraw.png', import.meta.url).href, opts),
val_town: formatAssetUrl(new URL('./embed-icons/val_town.png', import.meta.url).href, opts),
vimeo: formatAssetUrl(new URL('./embed-icons/vimeo.png', import.meta.url).href, opts),
youtube: formatAssetUrl(new URL('./embed-icons/youtube.png', import.meta.url).href, opts),
},
}
}