tldraw/packages/assets/urls.js
Steve Ruiz 5601d0ee22
Separate text-align property for shapes (#3627)
This PR creates a new "text align" property for text shapes. Its default
is left align.

This means that text shapes now have their own alignment prop, separate
from the vertical / horizontal alignment used in labels.

The style panel for text has no visual change:

<img width="400" alt="image"
src="https://github.com/tldraw/tldraw/assets/23072548/aac80d2a-a069-4388-870b-1e0917d88eda">

The style panel for labels has consistent icons for label position:

<img width="487" alt="image"
src="https://github.com/tldraw/tldraw/assets/23072548/0adf7f0e-8446-4d3e-b9ea-a61e43035207">

Both may be configured separately.

<img width="458" alt="image"
src="https://github.com/tldraw/tldraw/assets/23072548/698dcfac-6eb2-4a8c-afb8-d1e5761019ef">


# Icon refresh

This PR also removes many unused icons.

It adds a special toggle icon for the context menu.

<img width="571" alt="image"
src="https://github.com/tldraw/tldraw/assets/23072548/489551e6-a370-4528-9ad4-8f93e119f26b">
<img width="492" alt="image"
src="https://github.com/tldraw/tldraw/assets/23072548/cd3d77c7-8bae-4369-8b53-ca4685b2fd0e">


### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `improvement` — Improving existing features

### Test Plan

1. Load files.
2. Paste excalidraw content.
3. Load v1 files.
4. Use the app as usual.

- [x] Unit Tests

### Release Notes

- Separates the text align property for text shapes and labels.

---------

Co-authored-by: huppy-bot[bot] <128400622+huppy-bot[bot]@users.noreply.github.com>
2024-04-29 10:58:15 +00:00

564 lines
21 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-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-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),
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
),
'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
),
'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),
'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),
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),
},
}
}