From 8db3bead13441a5882d8689dfc6a9f09c82375d9 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 25 Mar 2026 16:47:22 +0100 Subject: [PATCH] feat: masks, properties refactor, shaders, storage migrations, and more --- apps/web/content/changelog/0.3.0.md | 67 ++ apps/web/next.config.ts | 4 + apps/web/package.json | 14 +- apps/web/postcss.config.mjs | 7 +- apps/web/public/flags/ad.svg | 150 +++ apps/web/public/flags/ae.svg | 6 + apps/web/public/flags/af.svg | 81 ++ apps/web/public/flags/ag.svg | 14 + apps/web/public/flags/ai.svg | 29 + apps/web/public/flags/al.svg | 5 + apps/web/public/flags/am.svg | 5 + apps/web/public/flags/ao.svg | 13 + apps/web/public/flags/aq.svg | 5 + apps/web/public/flags/ar.svg | 32 + apps/web/public/flags/arab.svg | 109 +++ apps/web/public/flags/as.svg | 72 ++ apps/web/public/flags/asean.svg | 13 + apps/web/public/flags/at.svg | 4 + apps/web/public/flags/au.svg | 8 + apps/web/public/flags/aw.svg | 186 ++++ apps/web/public/flags/ax.svg | 18 + apps/web/public/flags/az.svg | 8 + apps/web/public/flags/ba.svg | 12 + apps/web/public/flags/bb.svg | 6 + apps/web/public/flags/bd.svg | 4 + apps/web/public/flags/be.svg | 7 + apps/web/public/flags/bf.svg | 7 + apps/web/public/flags/bg.svg | 5 + apps/web/public/flags/bh.svg | 4 + apps/web/public/flags/bi.svg | 15 + apps/web/public/flags/bj.svg | 14 + apps/web/public/flags/bl.svg | 5 + apps/web/public/flags/bm.svg | 97 ++ apps/web/public/flags/bn.svg | 36 + apps/web/public/flags/bo.svg | 673 +++++++++++++ apps/web/public/flags/bq.svg | 5 + apps/web/public/flags/br.svg | 45 + apps/web/public/flags/bs.svg | 13 + apps/web/public/flags/bt.svg | 89 ++ apps/web/public/flags/bv.svg | 13 + apps/web/public/flags/bw.svg | 7 + apps/web/public/flags/by.svg | 18 + apps/web/public/flags/bz.svg | 145 +++ apps/web/public/flags/ca.svg | 4 + apps/web/public/flags/cc.svg | 19 + apps/web/public/flags/cd.svg | 5 + apps/web/public/flags/cefta.svg | 13 + apps/web/public/flags/cf.svg | 15 + apps/web/public/flags/cg.svg | 12 + apps/web/public/flags/ch.svg | 9 + apps/web/public/flags/ci.svg | 7 + apps/web/public/flags/ck.svg | 9 + apps/web/public/flags/cl.svg | 13 + apps/web/public/flags/cm.svg | 15 + apps/web/public/flags/cn.svg | 11 + apps/web/public/flags/co.svg | 7 + apps/web/public/flags/cp.svg | 7 + apps/web/public/flags/cr.svg | 7 + apps/web/public/flags/cu.svg | 13 + apps/web/public/flags/cv.svg | 13 + apps/web/public/flags/cw.svg | 14 + apps/web/public/flags/cx.svg | 15 + apps/web/public/flags/cy.svg | 6 + apps/web/public/flags/cz.svg | 5 + apps/web/public/flags/de.svg | 5 + apps/web/public/flags/dg.svg | 130 +++ apps/web/public/flags/dj.svg | 13 + apps/web/public/flags/dk.svg | 5 + apps/web/public/flags/dm.svg | 152 +++ apps/web/public/flags/do.svg | 121 +++ apps/web/public/flags/dz.svg | 5 + apps/web/public/flags/eac.svg | 48 + apps/web/public/flags/ec.svg | 138 +++ apps/web/public/flags/ee.svg | 5 + apps/web/public/flags/eg.svg | 38 + apps/web/public/flags/eh.svg | 16 + apps/web/public/flags/er.svg | 8 + apps/web/public/flags/es-ct.svg | 4 + apps/web/public/flags/es-ga.svg | 187 ++++ apps/web/public/flags/es-pv.svg | 5 + apps/web/public/flags/es.svg | 544 +++++++++++ apps/web/public/flags/et.svg | 14 + apps/web/public/flags/eu.svg | 28 + apps/web/public/flags/fi.svg | 5 + apps/web/public/flags/fj.svg | 120 +++ apps/web/public/flags/fk.svg | 90 ++ apps/web/public/flags/fm.svg | 11 + apps/web/public/flags/fo.svg | 12 + apps/web/public/flags/fr.svg | 5 + apps/web/public/flags/ga.svg | 7 + apps/web/public/flags/gb-eng.svg | 5 + apps/web/public/flags/gb-nir.svg | 132 +++ apps/web/public/flags/gb-sct.svg | 4 + apps/web/public/flags/gb-wls.svg | 9 + apps/web/public/flags/gb.svg | 7 + apps/web/public/flags/gd.svg | 27 + apps/web/public/flags/ge.svg | 6 + apps/web/public/flags/gf.svg | 5 + apps/web/public/flags/gg.svg | 9 + apps/web/public/flags/gh.svg | 6 + apps/web/public/flags/gi.svg | 32 + apps/web/public/flags/gl.svg | 4 + apps/web/public/flags/gm.svg | 14 + apps/web/public/flags/gn.svg | 7 + apps/web/public/flags/gp.svg | 5 + apps/web/public/flags/gq.svg | 23 + apps/web/public/flags/gr.svg | 16 + apps/web/public/flags/gs.svg | 133 +++ apps/web/public/flags/gt.svg | 204 ++++ apps/web/public/flags/gu.svg | 19 + apps/web/public/flags/gw.svg | 13 + apps/web/public/flags/gy.svg | 9 + apps/web/public/flags/hk.svg | 8 + apps/web/public/flags/hm.svg | 8 + apps/web/public/flags/hn.svg | 18 + apps/web/public/flags/hr.svg | 58 ++ apps/web/public/flags/ht.svg | 116 +++ apps/web/public/flags/hu.svg | 7 + apps/web/public/flags/ic.svg | 7 + apps/web/public/flags/id.svg | 4 + apps/web/public/flags/ie.svg | 7 + apps/web/public/flags/il.svg | 14 + apps/web/public/flags/im.svg | 36 + apps/web/public/flags/in.svg | 25 + apps/web/public/flags/io.svg | 130 +++ apps/web/public/flags/iq.svg | 10 + apps/web/public/flags/ir.svg | 219 +++++ apps/web/public/flags/is.svg | 12 + apps/web/public/flags/it.svg | 7 + apps/web/public/flags/je.svg | 62 ++ apps/web/public/flags/jm.svg | 8 + apps/web/public/flags/jo.svg | 16 + apps/web/public/flags/jp.svg | 11 + apps/web/public/flags/ke.svg | 23 + apps/web/public/flags/kg.svg | 4 + apps/web/public/flags/kh.svg | 61 ++ apps/web/public/flags/ki.svg | 36 + apps/web/public/flags/km.svg | 16 + apps/web/public/flags/kn.svg | 14 + apps/web/public/flags/kp.svg | 15 + apps/web/public/flags/kr.svg | 24 + apps/web/public/flags/kw.svg | 13 + apps/web/public/flags/ky.svg | 103 ++ apps/web/public/flags/kz.svg | 36 + apps/web/public/flags/la.svg | 12 + apps/web/public/flags/lb.svg | 15 + apps/web/public/flags/lc.svg | 8 + apps/web/public/flags/li.svg | 43 + apps/web/public/flags/lk.svg | 22 + apps/web/public/flags/lr.svg | 14 + apps/web/public/flags/ls.svg | 8 + apps/web/public/flags/lt.svg | 7 + apps/web/public/flags/lu.svg | 5 + apps/web/public/flags/lv.svg | 6 + apps/web/public/flags/ly.svg | 13 + apps/web/public/flags/ma.svg | 4 + apps/web/public/flags/mc.svg | 6 + apps/web/public/flags/md.svg | 70 ++ apps/web/public/flags/me.svg | 116 +++ apps/web/public/flags/mf.svg | 5 + apps/web/public/flags/mg.svg | 7 + apps/web/public/flags/mh.svg | 7 + apps/web/public/flags/mk.svg | 5 + apps/web/public/flags/ml.svg | 7 + apps/web/public/flags/mm.svg | 12 + apps/web/public/flags/mn.svg | 14 + apps/web/public/flags/mo.svg | 9 + apps/web/public/flags/mp.svg | 86 ++ apps/web/public/flags/mq.svg | 5 + apps/web/public/flags/mr.svg | 6 + apps/web/public/flags/ms.svg | 29 + apps/web/public/flags/mt.svg | 58 ++ apps/web/public/flags/mu.svg | 8 + apps/web/public/flags/mv.svg | 6 + apps/web/public/flags/mw.svg | 10 + apps/web/public/flags/mx.svg | 382 ++++++++ apps/web/public/flags/my.svg | 26 + apps/web/public/flags/mz.svg | 21 + apps/web/public/flags/na.svg | 16 + apps/web/public/flags/nc.svg | 13 + apps/web/public/flags/ne.svg | 6 + apps/web/public/flags/nf.svg | 9 + apps/web/public/flags/ng.svg | 6 + apps/web/public/flags/ni.svg | 129 +++ apps/web/public/flags/nl.svg | 5 + apps/web/public/flags/no.svg | 7 + apps/web/public/flags/np.svg | 13 + apps/web/public/flags/nr.svg | 12 + apps/web/public/flags/nu.svg | 10 + apps/web/public/flags/nz.svg | 36 + apps/web/public/flags/om.svg | 115 +++ apps/web/public/flags/pa.svg | 14 + apps/web/public/flags/pc.svg | 33 + apps/web/public/flags/pe.svg | 4 + apps/web/public/flags/pf.svg | 19 + apps/web/public/flags/pg.svg | 9 + apps/web/public/flags/ph.svg | 6 + apps/web/public/flags/pk.svg | 15 + apps/web/public/flags/pl.svg | 6 + apps/web/public/flags/pm.svg | 5 + apps/web/public/flags/pn.svg | 53 + apps/web/public/flags/pr.svg | 13 + apps/web/public/flags/ps.svg | 6 + apps/web/public/flags/pt.svg | 57 ++ apps/web/public/flags/pw.svg | 11 + apps/web/public/flags/py.svg | 157 +++ apps/web/public/flags/qa.svg | 4 + apps/web/public/flags/re.svg | 5 + apps/web/public/flags/ro.svg | 7 + apps/web/public/flags/rs.svg | 292 ++++++ apps/web/public/flags/ru.svg | 5 + apps/web/public/flags/rw.svg | 13 + apps/web/public/flags/sa.svg | 25 + apps/web/public/flags/sb.svg | 13 + apps/web/public/flags/sc.svg | 7 + apps/web/public/flags/sd.svg | 13 + apps/web/public/flags/se.svg | 4 + apps/web/public/flags/sg.svg | 13 + apps/web/public/flags/sh-ac.svg | 689 +++++++++++++ apps/web/public/flags/sh-hl.svg | 164 ++++ apps/web/public/flags/sh-ta.svg | 76 ++ apps/web/public/flags/sh.svg | 7 + apps/web/public/flags/si.svg | 18 + apps/web/public/flags/sj.svg | 7 + apps/web/public/flags/sk.svg | 9 + apps/web/public/flags/sl.svg | 7 + apps/web/public/flags/sm.svg | 75 ++ apps/web/public/flags/sn.svg | 8 + apps/web/public/flags/so.svg | 11 + apps/web/public/flags/sr.svg | 6 + apps/web/public/flags/ss.svg | 8 + apps/web/public/flags/st.svg | 16 + apps/web/public/flags/sv.svg | 593 ++++++++++++ apps/web/public/flags/sx.svg | 56 ++ apps/web/public/flags/sy.svg | 6 + apps/web/public/flags/sz.svg | 34 + apps/web/public/flags/tc.svg | 50 + apps/web/public/flags/td.svg | 7 + apps/web/public/flags/tf.svg | 15 + apps/web/public/flags/tg.svg | 14 + apps/web/public/flags/th.svg | 7 + apps/web/public/flags/tj.svg | 22 + apps/web/public/flags/tk.svg | 5 + apps/web/public/flags/tl.svg | 13 + apps/web/public/flags/tm.svg | 204 ++++ apps/web/public/flags/tn.svg | 4 + apps/web/public/flags/to.svg | 10 + apps/web/public/flags/tr.svg | 8 + apps/web/public/flags/tt.svg | 5 + apps/web/public/flags/tv.svg | 9 + apps/web/public/flags/tw.svg | 34 + apps/web/public/flags/tz.svg | 13 + apps/web/public/flags/ua.svg | 6 + apps/web/public/flags/ug.svg | 30 + apps/web/public/flags/um.svg | 9 + apps/web/public/flags/un.svg | 16 + apps/web/public/flags/us.svg | 9 + apps/web/public/flags/uy.svg | 28 + apps/web/public/flags/uz.svg | 30 + apps/web/public/flags/va.svg | 190 ++++ apps/web/public/flags/vc.svg | 8 + apps/web/public/flags/ve.svg | 26 + apps/web/public/flags/vg.svg | 59 ++ apps/web/public/flags/vi.svg | 28 + apps/web/public/flags/vn.svg | 11 + apps/web/public/flags/vu.svg | 21 + apps/web/public/flags/wf.svg | 5 + apps/web/public/flags/ws.svg | 7 + apps/web/public/flags/xk.svg | 5 + apps/web/public/flags/xx.svg | 4 + apps/web/public/flags/ye.svg | 7 + apps/web/public/flags/yt.svg | 5 + apps/web/public/flags/za.svg | 17 + apps/web/public/flags/zm.svg | 27 + apps/web/public/flags/zw.svg | 21 + apps/web/public/shapes/circle.svg | 2 +- apps/web/public/shapes/diamond.svg | 2 +- apps/web/public/shapes/hexagon.svg | 5 +- apps/web/public/shapes/square.svg | 2 +- apps/web/public/shapes/star.svg | 5 +- apps/web/public/shapes/triangle.svg | 2 +- apps/web/src/app/blog/[slug]/page.tsx | 2 +- apps/web/src/app/blog/page.tsx | 2 +- apps/web/src/app/globals.css | 438 ++++----- apps/web/src/app/layout.tsx | 19 +- apps/web/src/app/privacy/page.tsx | 121 +-- apps/web/src/app/projects/page.tsx | 20 +- apps/web/src/app/projects/store.ts | 2 +- apps/web/src/app/terms/page.tsx | 100 +- apps/web/src/components/editable-timecode.tsx | 26 +- .../editor/dialogs/project-info-dialog.tsx | 2 +- .../editor/dialogs/shortcuts-dialog.tsx | 2 +- .../dialogs/storage-persistence-dialog.tsx | 41 + .../src/components/editor/editor-header.tsx | 7 +- .../src/components/editor/export-button.tsx | 63 +- .../web/src/components/editor/mobile-gate.tsx | 6 +- .../editor/panels/assets/drag-overlay.tsx | 2 +- .../editor/panels/assets/draggable-item.tsx | 17 +- .../editor/panels/assets/tabbar.tsx | 15 +- .../editor/panels/assets/views/assets.tsx | 153 +-- .../views/{base-view.tsx => base-panel.tsx} | 11 +- .../editor/panels/assets/views/captions.tsx | 141 +-- .../editor/panels/assets/views/effects.tsx | 15 +- .../panels/assets/views/settings-legacy.tsx | 332 ------- .../editor/panels/assets/views/settings.tsx | 168 ---- .../assets/views/settings/background.tsx | 227 +++++ .../panels/assets/views/settings/index.tsx | 369 +++++++ .../editor/panels/assets/views/sounds.tsx | 2 +- .../editor/panels/assets/views/stickers.tsx | 540 +++++++---- .../editor/panels/assets/views/text.tsx | 12 +- .../editor/panels/preview/context-menu.tsx | 39 +- .../editor/panels/preview/guide-overlay.tsx | 32 + .../editor/panels/preview/guide-popover.tsx | 100 ++ .../panels/preview/handle-primitives.tsx | 332 +++++++ .../editor/panels/preview/index.tsx | 266 +++-- .../panels/preview/layout-guide-overlay.tsx | 27 - .../editor/panels/preview/mask-handles.tsx | 238 +++++ .../preview/preview-interaction-overlay.tsx | 109 ++- .../panels/preview/preview-viewport.tsx | 576 +++++++++++ .../editor/panels/preview/snap-guides.tsx | 30 +- .../panels/preview/text-edit-overlay.tsx | 149 ++- .../editor/panels/preview/toolbar.tsx | 169 +++- .../panels/preview/transform-handles.tsx | 273 ++---- .../{ => components}/keyframe-toggle.tsx | 0 .../components/property-param-field.tsx | 194 ++++ .../hooks/use-keyframed-color-property.ts | 4 +- .../hooks/use-keyframed-number-property.ts | 26 +- .../hooks/use-keyframed-param-property.ts | 148 +++ .../hooks/use-keyframed-vector-property.ts | 190 ++++ .../editor/panels/properties/index.tsx | 141 +-- .../editor/panels/properties/registry.tsx | 303 ++++++ .../properties/stores/properties-store.ts | 18 + .../panels/properties/tabs/audio-tab.tsx | 109 +++ .../panels/properties/tabs/blending-tab.tsx | 230 +++++ .../panels/properties/tabs/effects-tab.tsx | 309 ++++++ .../panels/properties/tabs/graphic-tab.tsx | 238 +++++ .../panels/properties/tabs/masks-tab.tsx | 660 +++++++++++++ .../panels/properties/tabs/speed-tab.tsx | 137 +++ .../panels/properties/tabs/text-tab.tsx | 762 +++++++++++++++ .../panels/properties/tabs/transform-tab.tsx | 424 ++++++++ .../editor/panels/timeline/audio-waveform.tsx | 281 +++--- .../editor/panels/timeline/bookmarks.tsx | 27 +- .../editor/panels/timeline/drag-line.tsx | 5 +- .../editor/panels/timeline/index.tsx | 909 +++++++++++------- .../editor/panels/timeline/snap-indicator.tsx | 10 +- .../panels/timeline/timeline-element.tsx | 494 +++++----- .../panels/timeline/timeline-playhead.tsx | 38 +- .../editor/panels/timeline/timeline-ruler.tsx | 26 +- .../editor/panels/timeline/timeline-tick.tsx | 4 +- .../panels/timeline/timeline-toolbar.tsx | 16 +- .../editor/panels/timeline/timeline-track.tsx | 62 +- .../components/providers/editor-provider.tsx | 27 +- apps/web/src/components/section.tsx | 257 +++++ apps/web/src/components/ui/button.tsx | 2 +- apps/web/src/components/ui/color-picker.tsx | 13 +- apps/web/src/components/ui/context-menu.tsx | 14 +- apps/web/src/components/ui/dialog.tsx | 16 +- apps/web/src/components/ui/dropdown-menu.tsx | 23 +- apps/web/src/components/ui/font-picker.tsx | 107 +-- .../web/src/components/ui/input-with-back.tsx | 85 -- apps/web/src/components/ui/input.tsx | 7 +- apps/web/src/components/ui/number-field.tsx | 223 ++++- apps/web/src/components/ui/popover.tsx | 20 +- apps/web/src/components/ui/select.tsx | 16 +- apps/web/src/components/ui/sheet.tsx | 17 +- apps/web/src/components/ui/sonner.tsx | 2 +- apps/web/src/components/ui/tabs.tsx | 92 +- apps/web/src/components/ui/tooltip.tsx | 4 +- .../components/ui/use-overlay-open-change.ts | 78 ++ apps/web/src/constants/editor-constants.ts | 14 + apps/web/src/constants/export-constants.ts | 2 +- apps/web/src/constants/font-constants.ts | 2 - apps/web/src/constants/guide-constants.ts | 4 + apps/web/src/constants/language-constants.ts | 3 + apps/web/src/constants/mask-constants.ts | 4 + apps/web/src/constants/project-constants.ts | 10 +- apps/web/src/constants/retime-constants.ts | 30 + apps/web/src/constants/sticker-constants.ts | 4 +- apps/web/src/constants/text-constants.ts | 42 - apps/web/src/constants/timeline-constants.ts | 85 ++ apps/web/src/constants/timeline-constants.tsx | 102 -- .../src/constants/transcription-constants.ts | 4 +- apps/web/src/core/index.ts | 7 +- apps/web/src/core/managers/audio-manager.ts | 352 ++++++- apps/web/src/core/managers/media-manager.ts | 73 +- .../web/src/core/managers/playback-manager.ts | 15 +- apps/web/src/core/managers/project-manager.ts | 49 +- .../web/src/core/managers/renderer-manager.ts | 60 +- apps/web/src/core/managers/scenes-manager.ts | 6 +- .../src/core/managers/selection-manager.ts | 9 +- .../web/src/core/managers/timeline-manager.ts | 155 ++- apps/web/src/data/colors/syntax-ui.tsx | 2 - .../src/hooks/actions/use-editor-actions.ts | 89 +- .../element/use-element-interaction.ts | 83 +- .../timeline/element/use-element-resize.ts | 231 ++++- .../timeline/element/use-element-selection.ts | 35 +- .../timeline/element/use-keyframe-drag.ts | 18 +- .../element/use-keyframe-selection.ts | 2 +- .../src/hooks/timeline/use-bookmark-drag.ts | 2 +- .../timeline/use-initial-scroll-bottom.ts | 42 + .../timeline/use-snap-indicator-position.ts | 14 +- .../hooks/timeline/use-timeline-drag-drop.ts | 223 +++-- .../hooks/timeline/use-timeline-playhead.ts | 178 ++-- .../src/hooks/timeline/use-timeline-zoom.ts | 28 +- apps/web/src/hooks/use-container-size.ts | 24 +- apps/web/src/hooks/use-editor.ts | 63 +- apps/web/src/hooks/use-effect-preview.ts | 47 - apps/web/src/hooks/use-element-preview.ts | 38 + apps/web/src/hooks/use-file-upload.ts | 12 +- apps/web/src/hooks/use-font-atlas.ts | 53 + apps/web/src/hooks/use-keybindings.ts | 163 +++- apps/web/src/hooks/use-mask-handles.ts | 258 +++++ apps/web/src/hooks/use-menu-preview.ts | 26 + apps/web/src/hooks/use-paste-media.ts | 81 +- apps/web/src/hooks/use-preview-interaction.ts | 351 +++++-- apps/web/src/hooks/use-resize-observer.ts | 26 + apps/web/src/hooks/use-storage-persistence.ts | 45 + apps/web/src/hooks/use-transform-handles.ts | 465 ++++++--- apps/web/src/lib/actions/definitions.ts | 27 +- .../src/{types => lib/actions}/keybinding.ts | 2 +- apps/web/src/lib/actions/registry.ts | 27 +- apps/web/src/lib/actions/types.ts | 2 + .../__tests__/transform-keyframes.test.ts | 313 ------ apps/web/src/lib/animation/color-channel.ts | 2 +- .../src/lib/animation/effect-param-channel.ts | 55 +- .../lib/animation/graphic-param-channel.ts | 79 ++ apps/web/src/lib/animation/index.ts | 32 +- apps/web/src/lib/animation/interpolation.ts | 71 +- apps/web/src/lib/animation/keyframe-query.ts | 17 +- apps/web/src/lib/animation/keyframes.ts | 231 +++-- apps/web/src/lib/animation/number-channel.ts | 2 +- apps/web/src/lib/animation/property-groups.ts | 39 + .../src/lib/animation/property-registry.ts | 93 +- apps/web/src/lib/animation/resolve.ts | 75 +- apps/web/src/lib/animation/target-resolver.ts | 279 ++++++ .../animation.ts => lib/animation/types.ts} | 40 +- apps/web/src/lib/animation/vector-channel.ts | 72 ++ apps/web/src/lib/blog/query.ts | 2 +- .../src/{types/blog.ts => lib/blog/types.ts} | 0 apps/web/src/lib/cancel-interaction.ts | 24 + .../__tests__/keyframe-aware-commands.test.ts | 433 --------- apps/web/src/lib/commands/index.ts | 1 - .../src/lib/commands/media/add-media-asset.ts | 34 +- .../lib/commands/media/remove-media-asset.ts | 34 +- .../project/update-project-settings.ts | 2 +- .../src/lib/commands/scene/create-scene.ts | 2 +- .../src/lib/commands/scene/delete-scene.ts | 2 +- .../src/lib/commands/scene/move-bookmark.ts | 2 +- .../src/lib/commands/scene/remove-bookmark.ts | 2 +- .../src/lib/commands/scene/rename-scene.ts | 2 +- .../src/lib/commands/scene/toggle-bookmark.ts | 2 +- .../src/lib/commands/scene/update-bookmark.ts | 2 +- .../lib/commands/timeline/clipboard/paste.ts | 2 +- .../timeline/element/delete-elements.ts | 2 +- .../timeline/element/duplicate-elements.ts | 2 +- .../timeline/element/effects/add-effect.ts | 2 +- .../timeline/element/effects/remove-effect.ts | 2 +- .../element/effects/reorder-effect.ts | 2 +- .../timeline/element/effects/toggle-effect.ts | 2 +- .../element/effects/update-effect-params.ts | 22 +- .../lib/commands/timeline/element/index.ts | 2 + .../timeline/element/insert-element.ts | 20 +- .../keyframes/remove-effect-param-keyframe.ts | 2 +- .../element/keyframes/remove-keyframe.ts | 45 +- .../element/keyframes/retime-keyframe.ts | 20 +- .../keyframes/upsert-effect-param-keyframe.ts | 2 +- .../element/keyframes/upsert-keyframe.ts | 30 +- .../commands/timeline/element/masks/index.ts | 2 + .../timeline/element/masks/remove-mask.ts | 64 ++ .../element/masks/toggle-mask-inverted.ts | 75 ++ .../timeline/element/move-elements.ts | 2 +- .../commands/timeline/element/retime/index.ts | 1 + .../element/retime/update-element-retime.ts | 114 +++ .../timeline/element/split-elements.ts | 121 ++- .../timeline/element/toggle-elements-muted.ts | 2 +- .../element/toggle-elements-visibility.ts | 2 +- .../element/update-element-duration.ts | 2 +- .../element/update-element-start-time.ts | 2 +- .../timeline/element/update-element-trim.ts | 25 +- .../timeline/element/update-element.ts | 2 +- .../lib/commands/timeline/track/add-track.ts | 2 +- .../commands/timeline/track/remove-track.ts | 2 +- .../timeline/track/toggle-track-mute.ts | 2 +- .../timeline/track/toggle-track-visibility.ts | 2 +- .../lib/commands/timeline/tracks-snapshot.ts | 2 +- apps/web/src/lib/drag-data.ts | 2 +- .../lib/effects/definitions/blur.frag.glsl | 10 +- apps/web/src/lib/effects/definitions/blur.ts | 109 ++- apps/web/src/lib/effects/definitions/index.ts | 6 +- apps/web/src/lib/effects/index.ts | 45 +- apps/web/src/lib/effects/registry.ts | 33 +- apps/web/src/lib/effects/types.ts | 42 + apps/web/src/lib/export.ts | 33 +- apps/web/src/lib/fonts/google-fonts.ts | 26 +- .../{types/fonts.ts => lib/fonts/types.ts} | 0 .../src/lib/graphics/definitions/ellipse.ts | 73 ++ .../web/src/lib/graphics/definitions/index.ts | 29 + .../src/lib/graphics/definitions/polygon.ts | 211 ++++ .../src/lib/graphics/definitions/rectangle.ts | 85 ++ .../src/lib/graphics/definitions/shared.ts | 16 + apps/web/src/lib/graphics/definitions/star.ts | 109 +++ apps/web/src/lib/graphics/index.ts | 125 +++ apps/web/src/lib/graphics/registry.ts | 10 + apps/web/src/lib/graphics/stroke.ts | 102 ++ apps/web/src/lib/graphics/types.ts | 23 + .../web/src/lib/guides/definitions/custom.tsx | 24 + apps/web/src/lib/guides/definitions/grid.tsx | 125 +++ .../src/lib/guides/definitions/platforms.tsx | 65 ++ .../lib/guides/definitions/tiktok-layout.tsx | 335 +++++++ apps/web/src/lib/guides/index.ts | 13 + apps/web/src/lib/guides/registry.tsx | 28 + apps/web/src/lib/guides/types.ts | 20 + apps/web/src/lib/iconify-api.ts | 241 ----- apps/web/src/lib/masks/__tests__/snap.test.ts | 235 +++++ .../web/src/lib/masks/definitions/box-like.ts | 270 ++++++ apps/web/src/lib/masks/definitions/ellipse.ts | 72 ++ apps/web/src/lib/masks/definitions/index.ts | 39 + .../src/lib/masks/definitions/rectangle.ts | 94 ++ apps/web/src/lib/masks/definitions/split.ts | 347 +++++++ apps/web/src/lib/masks/geometry.ts | 112 +++ apps/web/src/lib/masks/handle-positions.ts | 382 ++++++++ apps/web/src/lib/masks/index.ts | 18 + apps/web/src/lib/masks/param-update.ts | 59 ++ apps/web/src/lib/masks/registry.ts | 70 ++ .../lib/masks/shaders/jfa-distance.frag.glsl | 36 + apps/web/src/lib/masks/snap.ts | 335 +++++++ apps/web/src/lib/masks/types.ts | 115 +++ apps/web/src/lib/masks/utils.ts | 64 ++ apps/web/src/lib/media/audio-mastering.ts | 103 ++ apps/web/src/lib/media/audio.ts | 249 ++++- apps/web/src/lib/media/media-utils.ts | 2 +- apps/web/src/lib/media/mediabunny.ts | 130 +-- apps/web/src/lib/media/processing.ts | 94 +- .../{types/assets.ts => lib/media/types.ts} | 0 apps/web/src/lib/media/upload-toast.ts | 51 + apps/web/src/lib/params.ts | 50 + apps/web/src/lib/preview/element-bounds.ts | 259 ++--- apps/web/src/lib/preview/hit-test.ts | 54 +- apps/web/src/lib/preview/preview-coords.ts | 99 +- apps/web/src/lib/preview/preview-snap.ts | 293 +++++- .../project.ts => lib/project/types.ts} | 4 +- apps/web/src/lib/registry.ts | 40 + apps/web/src/{types => lib}/rendering.ts | 3 +- .../src/lib/retime/__tests__/resolve.test.ts | 61 ++ .../src/lib/retime/__tests__/split.test.ts | 31 + apps/web/src/lib/retime/audio-stretch.ts | 182 ++++ apps/web/src/lib/retime/index.ts | 4 + apps/web/src/lib/retime/presets.ts | 12 + apps/web/src/lib/retime/resolve.ts | 48 + apps/web/src/lib/retime/split.ts | 34 + apps/web/src/lib/scenes.ts | 2 +- apps/web/src/lib/selection/constants.ts | 1 + apps/web/src/lib/selection/context.tsx | 52 + apps/web/src/lib/selection/hit-testing.ts | 50 + .../src/lib/selection/hooks/use-box-select.ts | 170 ++++ .../selection/hooks/use-selection-scope.ts | 28 + apps/web/src/lib/selection/index.ts | 4 + apps/web/src/lib/selection/scope.ts | 29 + .../web/src/lib/selection/selectable-item.tsx | 107 +++ .../src/lib/selection/selectable-surface.tsx | 288 ++++++ .../selection}/selection-box.tsx | 0 apps/web/src/lib/selection/state.ts | 165 ++++ apps/web/src/lib/selection/types.ts | 39 + apps/web/src/lib/shaders/jfa-init.frag.glsl | 25 + apps/web/src/lib/shaders/jfa-step.frag.glsl | 60 ++ .../{types/sounds.ts => lib/sounds/types.ts} | 0 .../lib/stickers/__tests__/sticker-id.test.ts | 14 +- apps/web/src/lib/stickers/index.ts | 234 ++++- .../lib/stickers/providers/countries-data.ts} | 57 +- apps/web/src/lib/stickers/providers/emoji.ts | 119 --- apps/web/src/lib/stickers/providers/flags.ts | 97 +- apps/web/src/lib/stickers/providers/icons.ts | 122 --- apps/web/src/lib/stickers/providers/index.ts | 14 +- apps/web/src/lib/stickers/providers/logos.ts | 31 + apps/web/src/lib/stickers/providers/shapes.ts | 160 ++- apps/web/src/lib/stickers/registry.ts | 33 +- apps/web/src/lib/stickers/resolver.ts | 8 +- apps/web/src/lib/stickers/types.ts | 79 +- apps/web/src/lib/text/layout.ts | 29 +- apps/web/src/lib/text/measure-element.ts | 132 +++ apps/web/src/lib/time.ts | 6 +- apps/web/src/lib/timeline/audio-constants.ts | 2 + apps/web/src/lib/timeline/audio-state.ts | 100 ++ apps/web/src/lib/timeline/bookmarks.ts | 2 +- apps/web/src/lib/timeline/defaults.ts | 77 ++ apps/web/src/{types => lib/timeline}/drag.ts | 12 +- apps/web/src/lib/timeline/drop-utils.ts | 4 +- apps/web/src/lib/timeline/element-utils.ts | 241 ++--- apps/web/src/lib/timeline/index.ts | 4 +- apps/web/src/lib/timeline/ripple-utils.ts | 2 +- .../src/lib/timeline/selection-hit-testing.ts | 133 +++ apps/web/src/lib/timeline/snap-utils.ts | 2 +- .../src/lib/timeline/track-element-update.ts | 2 +- apps/web/src/lib/timeline/track-utils.ts | 29 +- .../timeline.ts => lib/timeline/types.ts} | 90 +- apps/web/src/lib/transcription/caption.ts | 2 +- .../transcription/types.ts} | 2 +- .../src/services/renderer/effect-preview.ts | 345 ++++--- .../web/src/services/renderer/mask-feather.ts | 54 ++ .../renderer/nodes/blur-background-node.ts | 149 +++ .../renderer/nodes/composite-effect-node.ts | 77 -- .../renderer/nodes/effect-layer-node.ts | 29 +- .../services/renderer/nodes/graphic-node.ts | 92 ++ .../src/services/renderer/nodes/image-node.ts | 4 +- .../services/renderer/nodes/sticker-node.ts | 20 +- .../src/services/renderer/nodes/text-node.ts | 187 ++-- .../src/services/renderer/nodes/video-node.ts | 1 + .../services/renderer/nodes/visual-node.ts | 227 ++++- .../src/services/renderer/scene-builder.ts | 122 ++- .../src/services/renderer/scene-exporter.ts | 2 +- .../renderer/webgl-effect-renderer.ts | 73 -- apps/web/src/services/renderer/webgl/jfa.ts | 194 ++++ .../services/renderer/webgl/webgl-context.ts | 49 + .../renderer/webgl/webgl-effect-renderer.ts | 35 + .../renderer/{ => webgl}/webgl-utils.ts | 0 .../migrations/__tests__/v15-to-v16.test.ts | 93 ++ .../migrations/__tests__/v16-to-v17.test.ts | 132 +++ .../migrations/__tests__/v18-to-v19.test.ts | 63 ++ .../src/services/storage/migrations/index.ts | 22 +- .../storage/migrations/transformers/index.ts | 1 + .../migrations/transformers/v0-to-v1.ts | 13 +- .../migrations/transformers/v1-to-v2.ts | 144 ++- .../migrations/transformers/v10-to-v11.ts | 113 +++ .../migrations/transformers/v11-to-v12.ts | 196 ++++ .../migrations/transformers/v12-to-v13.ts | 102 ++ .../migrations/transformers/v13-to-v14.ts | 106 ++ .../migrations/transformers/v14-to-v15.ts | 67 ++ .../migrations/transformers/v15-to-v16.ts | 60 ++ .../migrations/transformers/v16-to-v17.ts | 107 +++ .../migrations/transformers/v17-to-v18.ts | 105 ++ .../migrations/transformers/v18-to-v19.ts | 46 + .../migrations/transformers/v2-to-v3.ts | 37 +- .../migrations/transformers/v9-to-v10.ts | 21 + .../services/storage/migrations/v10-to-v11.ts | 16 + .../services/storage/migrations/v11-to-v12.ts | 16 + .../services/storage/migrations/v12-to-v13.ts | 16 + .../services/storage/migrations/v13-to-v14.ts | 16 + .../services/storage/migrations/v14-to-v15.ts | 16 + .../services/storage/migrations/v15-to-v16.ts | 16 + .../services/storage/migrations/v16-to-v17.ts | 16 + .../services/storage/migrations/v17-to-v18.ts | 16 + .../services/storage/migrations/v18-to-v19.ts | 16 + .../services/storage/migrations/v9-to-v10.ts | 16 + apps/web/src/services/storage/quota.ts | 145 +++ apps/web/src/services/storage/service.ts | 52 +- apps/web/src/services/storage/types.ts | 7 +- .../web/src/services/transcription/service.ts | 2 +- apps/web/src/services/transcription/worker.ts | 2 +- apps/web/src/stores/editor-store.ts | 2 +- apps/web/src/stores/keybindings-store.ts | 158 ++- .../stores/keybindings/migrations/index.ts | 4 +- .../stores/keybindings/migrations/v2-to-v3.ts | 2 +- .../stores/keybindings/migrations/v3-to-v4.ts | 4 +- .../stores/keybindings/migrations/v4-to-v5.ts | 2 +- .../stores/keybindings/migrations/v5-to-v6.ts | 17 + apps/web/src/stores/preview-store.ts | 72 +- apps/web/src/stores/sounds-store.ts | 2 +- apps/web/src/stores/stickers-store.ts | 179 ++-- apps/web/src/stores/timeline-store.ts | 2 +- apps/web/src/types/editor.ts | 1 - apps/web/src/types/effects.ts | 69 -- apps/web/src/types/export.ts | 31 - apps/web/src/types/language.ts | 4 - apps/web/src/types/soundtouchjs.d.ts | 14 + apps/web/src/types/stickers.ts | 54 -- apps/web/src/types/time.ts | 1 - apps/web/src/utils/browser.ts | 14 + apps/web/src/utils/math.ts | 45 + apps/web/tsconfig.tsbuildinfo | 2 +- biome.json | 6 + bun.lock | 213 +--- docs/effects-renderer.md | 56 +- .../properties/audio-properties.tsx | 0 .../properties/clip-effects-properties.tsx | 0 .../properties/effect-param-field.tsx | 0 .../properties/effect-properties.tsx | 0 .../components/properties/keyframe-toggle.tsx | 32 + .../components}/properties/section.tsx | 0 .../properties/text-properties.tsx | 0 .../properties/video-properties.tsx | 0 .../sections/blending.tsx | 0 .../properties => legacy}/sections/index.tsx | 0 .../sections/transform.tsx | 0 .../timeline/use-selection-box.ts | 32 +- legacy/use-assets-selection-box.ts | 198 ++++ legacy/use-assets-selection.ts | 209 ++++ legacy/use-element-registry.ts | 31 + .../src/hooks => legacy}/use-reveal-item.ts | 18 +- package.json | 3 +- packages/ui/src/icons/ui.tsx | 144 +++ 690 files changed, 35621 insertions(+), 7340 deletions(-) create mode 100644 apps/web/public/flags/ad.svg create mode 100644 apps/web/public/flags/ae.svg create mode 100644 apps/web/public/flags/af.svg create mode 100644 apps/web/public/flags/ag.svg create mode 100644 apps/web/public/flags/ai.svg create mode 100644 apps/web/public/flags/al.svg create mode 100644 apps/web/public/flags/am.svg create mode 100644 apps/web/public/flags/ao.svg create mode 100644 apps/web/public/flags/aq.svg create mode 100644 apps/web/public/flags/ar.svg create mode 100644 apps/web/public/flags/arab.svg create mode 100644 apps/web/public/flags/as.svg create mode 100644 apps/web/public/flags/asean.svg create mode 100644 apps/web/public/flags/at.svg create mode 100644 apps/web/public/flags/au.svg create mode 100644 apps/web/public/flags/aw.svg create mode 100644 apps/web/public/flags/ax.svg create mode 100644 apps/web/public/flags/az.svg create mode 100644 apps/web/public/flags/ba.svg create mode 100644 apps/web/public/flags/bb.svg create mode 100644 apps/web/public/flags/bd.svg create mode 100644 apps/web/public/flags/be.svg create mode 100644 apps/web/public/flags/bf.svg create mode 100644 apps/web/public/flags/bg.svg create mode 100644 apps/web/public/flags/bh.svg create mode 100644 apps/web/public/flags/bi.svg create mode 100644 apps/web/public/flags/bj.svg create mode 100644 apps/web/public/flags/bl.svg create mode 100644 apps/web/public/flags/bm.svg create mode 100644 apps/web/public/flags/bn.svg create mode 100644 apps/web/public/flags/bo.svg create mode 100644 apps/web/public/flags/bq.svg create mode 100644 apps/web/public/flags/br.svg create mode 100644 apps/web/public/flags/bs.svg create mode 100644 apps/web/public/flags/bt.svg create mode 100644 apps/web/public/flags/bv.svg create mode 100644 apps/web/public/flags/bw.svg create mode 100644 apps/web/public/flags/by.svg create mode 100644 apps/web/public/flags/bz.svg create mode 100644 apps/web/public/flags/ca.svg create mode 100644 apps/web/public/flags/cc.svg create mode 100644 apps/web/public/flags/cd.svg create mode 100644 apps/web/public/flags/cefta.svg create mode 100644 apps/web/public/flags/cf.svg create mode 100644 apps/web/public/flags/cg.svg create mode 100644 apps/web/public/flags/ch.svg create mode 100644 apps/web/public/flags/ci.svg create mode 100644 apps/web/public/flags/ck.svg create mode 100644 apps/web/public/flags/cl.svg create mode 100644 apps/web/public/flags/cm.svg create mode 100644 apps/web/public/flags/cn.svg create mode 100644 apps/web/public/flags/co.svg create mode 100644 apps/web/public/flags/cp.svg create mode 100644 apps/web/public/flags/cr.svg create mode 100644 apps/web/public/flags/cu.svg create mode 100644 apps/web/public/flags/cv.svg create mode 100644 apps/web/public/flags/cw.svg create mode 100644 apps/web/public/flags/cx.svg create mode 100644 apps/web/public/flags/cy.svg create mode 100644 apps/web/public/flags/cz.svg create mode 100644 apps/web/public/flags/de.svg create mode 100644 apps/web/public/flags/dg.svg create mode 100644 apps/web/public/flags/dj.svg create mode 100644 apps/web/public/flags/dk.svg create mode 100644 apps/web/public/flags/dm.svg create mode 100644 apps/web/public/flags/do.svg create mode 100644 apps/web/public/flags/dz.svg create mode 100644 apps/web/public/flags/eac.svg create mode 100644 apps/web/public/flags/ec.svg create mode 100644 apps/web/public/flags/ee.svg create mode 100644 apps/web/public/flags/eg.svg create mode 100644 apps/web/public/flags/eh.svg create mode 100644 apps/web/public/flags/er.svg create mode 100644 apps/web/public/flags/es-ct.svg create mode 100644 apps/web/public/flags/es-ga.svg create mode 100644 apps/web/public/flags/es-pv.svg create mode 100644 apps/web/public/flags/es.svg create mode 100644 apps/web/public/flags/et.svg create mode 100644 apps/web/public/flags/eu.svg create mode 100644 apps/web/public/flags/fi.svg create mode 100644 apps/web/public/flags/fj.svg create mode 100644 apps/web/public/flags/fk.svg create mode 100644 apps/web/public/flags/fm.svg create mode 100644 apps/web/public/flags/fo.svg create mode 100644 apps/web/public/flags/fr.svg create mode 100644 apps/web/public/flags/ga.svg create mode 100644 apps/web/public/flags/gb-eng.svg create mode 100644 apps/web/public/flags/gb-nir.svg create mode 100644 apps/web/public/flags/gb-sct.svg create mode 100644 apps/web/public/flags/gb-wls.svg create mode 100644 apps/web/public/flags/gb.svg create mode 100644 apps/web/public/flags/gd.svg create mode 100644 apps/web/public/flags/ge.svg create mode 100644 apps/web/public/flags/gf.svg create mode 100644 apps/web/public/flags/gg.svg create mode 100644 apps/web/public/flags/gh.svg create mode 100644 apps/web/public/flags/gi.svg create mode 100644 apps/web/public/flags/gl.svg create mode 100644 apps/web/public/flags/gm.svg create mode 100644 apps/web/public/flags/gn.svg create mode 100644 apps/web/public/flags/gp.svg create mode 100644 apps/web/public/flags/gq.svg create mode 100644 apps/web/public/flags/gr.svg create mode 100644 apps/web/public/flags/gs.svg create mode 100644 apps/web/public/flags/gt.svg create mode 100644 apps/web/public/flags/gu.svg create mode 100644 apps/web/public/flags/gw.svg create mode 100644 apps/web/public/flags/gy.svg create mode 100644 apps/web/public/flags/hk.svg create mode 100644 apps/web/public/flags/hm.svg create mode 100644 apps/web/public/flags/hn.svg create mode 100644 apps/web/public/flags/hr.svg create mode 100644 apps/web/public/flags/ht.svg create mode 100644 apps/web/public/flags/hu.svg create mode 100644 apps/web/public/flags/ic.svg create mode 100644 apps/web/public/flags/id.svg create mode 100644 apps/web/public/flags/ie.svg create mode 100644 apps/web/public/flags/il.svg create mode 100644 apps/web/public/flags/im.svg create mode 100644 apps/web/public/flags/in.svg create mode 100644 apps/web/public/flags/io.svg create mode 100644 apps/web/public/flags/iq.svg create mode 100644 apps/web/public/flags/ir.svg create mode 100644 apps/web/public/flags/is.svg create mode 100644 apps/web/public/flags/it.svg create mode 100644 apps/web/public/flags/je.svg create mode 100644 apps/web/public/flags/jm.svg create mode 100644 apps/web/public/flags/jo.svg create mode 100644 apps/web/public/flags/jp.svg create mode 100644 apps/web/public/flags/ke.svg create mode 100644 apps/web/public/flags/kg.svg create mode 100644 apps/web/public/flags/kh.svg create mode 100644 apps/web/public/flags/ki.svg create mode 100644 apps/web/public/flags/km.svg create mode 100644 apps/web/public/flags/kn.svg create mode 100644 apps/web/public/flags/kp.svg create mode 100644 apps/web/public/flags/kr.svg create mode 100644 apps/web/public/flags/kw.svg create mode 100644 apps/web/public/flags/ky.svg create mode 100644 apps/web/public/flags/kz.svg create mode 100644 apps/web/public/flags/la.svg create mode 100644 apps/web/public/flags/lb.svg create mode 100644 apps/web/public/flags/lc.svg create mode 100644 apps/web/public/flags/li.svg create mode 100644 apps/web/public/flags/lk.svg create mode 100644 apps/web/public/flags/lr.svg create mode 100644 apps/web/public/flags/ls.svg create mode 100644 apps/web/public/flags/lt.svg create mode 100644 apps/web/public/flags/lu.svg create mode 100644 apps/web/public/flags/lv.svg create mode 100644 apps/web/public/flags/ly.svg create mode 100644 apps/web/public/flags/ma.svg create mode 100644 apps/web/public/flags/mc.svg create mode 100644 apps/web/public/flags/md.svg create mode 100644 apps/web/public/flags/me.svg create mode 100644 apps/web/public/flags/mf.svg create mode 100644 apps/web/public/flags/mg.svg create mode 100644 apps/web/public/flags/mh.svg create mode 100644 apps/web/public/flags/mk.svg create mode 100644 apps/web/public/flags/ml.svg create mode 100644 apps/web/public/flags/mm.svg create mode 100644 apps/web/public/flags/mn.svg create mode 100644 apps/web/public/flags/mo.svg create mode 100644 apps/web/public/flags/mp.svg create mode 100644 apps/web/public/flags/mq.svg create mode 100644 apps/web/public/flags/mr.svg create mode 100644 apps/web/public/flags/ms.svg create mode 100644 apps/web/public/flags/mt.svg create mode 100644 apps/web/public/flags/mu.svg create mode 100644 apps/web/public/flags/mv.svg create mode 100644 apps/web/public/flags/mw.svg create mode 100644 apps/web/public/flags/mx.svg create mode 100644 apps/web/public/flags/my.svg create mode 100644 apps/web/public/flags/mz.svg create mode 100644 apps/web/public/flags/na.svg create mode 100644 apps/web/public/flags/nc.svg create mode 100644 apps/web/public/flags/ne.svg create mode 100644 apps/web/public/flags/nf.svg create mode 100644 apps/web/public/flags/ng.svg create mode 100644 apps/web/public/flags/ni.svg create mode 100644 apps/web/public/flags/nl.svg create mode 100644 apps/web/public/flags/no.svg create mode 100644 apps/web/public/flags/np.svg create mode 100644 apps/web/public/flags/nr.svg create mode 100644 apps/web/public/flags/nu.svg create mode 100644 apps/web/public/flags/nz.svg create mode 100644 apps/web/public/flags/om.svg create mode 100644 apps/web/public/flags/pa.svg create mode 100644 apps/web/public/flags/pc.svg create mode 100644 apps/web/public/flags/pe.svg create mode 100644 apps/web/public/flags/pf.svg create mode 100644 apps/web/public/flags/pg.svg create mode 100644 apps/web/public/flags/ph.svg create mode 100644 apps/web/public/flags/pk.svg create mode 100644 apps/web/public/flags/pl.svg create mode 100644 apps/web/public/flags/pm.svg create mode 100644 apps/web/public/flags/pn.svg create mode 100644 apps/web/public/flags/pr.svg create mode 100644 apps/web/public/flags/ps.svg create mode 100644 apps/web/public/flags/pt.svg create mode 100644 apps/web/public/flags/pw.svg create mode 100644 apps/web/public/flags/py.svg create mode 100644 apps/web/public/flags/qa.svg create mode 100644 apps/web/public/flags/re.svg create mode 100644 apps/web/public/flags/ro.svg create mode 100644 apps/web/public/flags/rs.svg create mode 100644 apps/web/public/flags/ru.svg create mode 100644 apps/web/public/flags/rw.svg create mode 100644 apps/web/public/flags/sa.svg create mode 100644 apps/web/public/flags/sb.svg create mode 100644 apps/web/public/flags/sc.svg create mode 100644 apps/web/public/flags/sd.svg create mode 100644 apps/web/public/flags/se.svg create mode 100644 apps/web/public/flags/sg.svg create mode 100644 apps/web/public/flags/sh-ac.svg create mode 100644 apps/web/public/flags/sh-hl.svg create mode 100644 apps/web/public/flags/sh-ta.svg create mode 100644 apps/web/public/flags/sh.svg create mode 100644 apps/web/public/flags/si.svg create mode 100644 apps/web/public/flags/sj.svg create mode 100644 apps/web/public/flags/sk.svg create mode 100644 apps/web/public/flags/sl.svg create mode 100644 apps/web/public/flags/sm.svg create mode 100644 apps/web/public/flags/sn.svg create mode 100644 apps/web/public/flags/so.svg create mode 100644 apps/web/public/flags/sr.svg create mode 100644 apps/web/public/flags/ss.svg create mode 100644 apps/web/public/flags/st.svg create mode 100644 apps/web/public/flags/sv.svg create mode 100644 apps/web/public/flags/sx.svg create mode 100644 apps/web/public/flags/sy.svg create mode 100644 apps/web/public/flags/sz.svg create mode 100644 apps/web/public/flags/tc.svg create mode 100644 apps/web/public/flags/td.svg create mode 100644 apps/web/public/flags/tf.svg create mode 100644 apps/web/public/flags/tg.svg create mode 100644 apps/web/public/flags/th.svg create mode 100644 apps/web/public/flags/tj.svg create mode 100644 apps/web/public/flags/tk.svg create mode 100644 apps/web/public/flags/tl.svg create mode 100644 apps/web/public/flags/tm.svg create mode 100644 apps/web/public/flags/tn.svg create mode 100644 apps/web/public/flags/to.svg create mode 100644 apps/web/public/flags/tr.svg create mode 100644 apps/web/public/flags/tt.svg create mode 100644 apps/web/public/flags/tv.svg create mode 100644 apps/web/public/flags/tw.svg create mode 100644 apps/web/public/flags/tz.svg create mode 100644 apps/web/public/flags/ua.svg create mode 100644 apps/web/public/flags/ug.svg create mode 100644 apps/web/public/flags/um.svg create mode 100644 apps/web/public/flags/un.svg create mode 100644 apps/web/public/flags/us.svg create mode 100644 apps/web/public/flags/uy.svg create mode 100644 apps/web/public/flags/uz.svg create mode 100644 apps/web/public/flags/va.svg create mode 100644 apps/web/public/flags/vc.svg create mode 100644 apps/web/public/flags/ve.svg create mode 100644 apps/web/public/flags/vg.svg create mode 100644 apps/web/public/flags/vi.svg create mode 100644 apps/web/public/flags/vn.svg create mode 100644 apps/web/public/flags/vu.svg create mode 100644 apps/web/public/flags/wf.svg create mode 100644 apps/web/public/flags/ws.svg create mode 100644 apps/web/public/flags/xk.svg create mode 100644 apps/web/public/flags/xx.svg create mode 100644 apps/web/public/flags/ye.svg create mode 100644 apps/web/public/flags/yt.svg create mode 100644 apps/web/public/flags/za.svg create mode 100644 apps/web/public/flags/zm.svg create mode 100644 apps/web/public/flags/zw.svg create mode 100644 apps/web/src/components/editor/dialogs/storage-persistence-dialog.tsx rename apps/web/src/components/editor/panels/assets/views/{base-view.tsx => base-panel.tsx} (77%) delete mode 100644 apps/web/src/components/editor/panels/assets/views/settings-legacy.tsx delete mode 100644 apps/web/src/components/editor/panels/assets/views/settings.tsx create mode 100644 apps/web/src/components/editor/panels/assets/views/settings/background.tsx create mode 100644 apps/web/src/components/editor/panels/assets/views/settings/index.tsx create mode 100644 apps/web/src/components/editor/panels/preview/guide-overlay.tsx create mode 100644 apps/web/src/components/editor/panels/preview/guide-popover.tsx create mode 100644 apps/web/src/components/editor/panels/preview/handle-primitives.tsx delete mode 100644 apps/web/src/components/editor/panels/preview/layout-guide-overlay.tsx create mode 100644 apps/web/src/components/editor/panels/preview/mask-handles.tsx create mode 100644 apps/web/src/components/editor/panels/preview/preview-viewport.tsx rename apps/web/src/components/editor/panels/properties/{ => components}/keyframe-toggle.tsx (100%) create mode 100644 apps/web/src/components/editor/panels/properties/components/property-param-field.tsx create mode 100644 apps/web/src/components/editor/panels/properties/hooks/use-keyframed-param-property.ts create mode 100644 apps/web/src/components/editor/panels/properties/hooks/use-keyframed-vector-property.ts create mode 100644 apps/web/src/components/editor/panels/properties/registry.tsx create mode 100644 apps/web/src/components/editor/panels/properties/stores/properties-store.ts create mode 100644 apps/web/src/components/editor/panels/properties/tabs/audio-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/blending-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/effects-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/graphic-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/masks-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/speed-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/text-tab.tsx create mode 100644 apps/web/src/components/editor/panels/properties/tabs/transform-tab.tsx create mode 100644 apps/web/src/components/section.tsx delete mode 100644 apps/web/src/components/ui/input-with-back.tsx create mode 100644 apps/web/src/components/ui/use-overlay-open-change.ts create mode 100644 apps/web/src/constants/guide-constants.ts create mode 100644 apps/web/src/constants/mask-constants.ts create mode 100644 apps/web/src/constants/retime-constants.ts create mode 100644 apps/web/src/constants/timeline-constants.ts delete mode 100644 apps/web/src/constants/timeline-constants.tsx create mode 100644 apps/web/src/hooks/timeline/use-initial-scroll-bottom.ts delete mode 100644 apps/web/src/hooks/use-effect-preview.ts create mode 100644 apps/web/src/hooks/use-element-preview.ts create mode 100644 apps/web/src/hooks/use-font-atlas.ts create mode 100644 apps/web/src/hooks/use-mask-handles.ts create mode 100644 apps/web/src/hooks/use-menu-preview.ts create mode 100644 apps/web/src/hooks/use-resize-observer.ts create mode 100644 apps/web/src/hooks/use-storage-persistence.ts rename apps/web/src/{types => lib/actions}/keybinding.ts (94%) delete mode 100644 apps/web/src/lib/animation/__tests__/transform-keyframes.test.ts create mode 100644 apps/web/src/lib/animation/graphic-param-channel.ts create mode 100644 apps/web/src/lib/animation/property-groups.ts create mode 100644 apps/web/src/lib/animation/target-resolver.ts rename apps/web/src/{types/animation.ts => lib/animation/types.ts} (68%) create mode 100644 apps/web/src/lib/animation/vector-channel.ts rename apps/web/src/{types/blog.ts => lib/blog/types.ts} (100%) create mode 100644 apps/web/src/lib/cancel-interaction.ts delete mode 100644 apps/web/src/lib/commands/__tests__/keyframe-aware-commands.test.ts create mode 100644 apps/web/src/lib/commands/timeline/element/masks/index.ts create mode 100644 apps/web/src/lib/commands/timeline/element/masks/remove-mask.ts create mode 100644 apps/web/src/lib/commands/timeline/element/masks/toggle-mask-inverted.ts create mode 100644 apps/web/src/lib/commands/timeline/element/retime/index.ts create mode 100644 apps/web/src/lib/commands/timeline/element/retime/update-element-retime.ts create mode 100644 apps/web/src/lib/effects/types.ts rename apps/web/src/{types/fonts.ts => lib/fonts/types.ts} (100%) create mode 100644 apps/web/src/lib/graphics/definitions/ellipse.ts create mode 100644 apps/web/src/lib/graphics/definitions/index.ts create mode 100644 apps/web/src/lib/graphics/definitions/polygon.ts create mode 100644 apps/web/src/lib/graphics/definitions/rectangle.ts create mode 100644 apps/web/src/lib/graphics/definitions/shared.ts create mode 100644 apps/web/src/lib/graphics/definitions/star.ts create mode 100644 apps/web/src/lib/graphics/index.ts create mode 100644 apps/web/src/lib/graphics/registry.ts create mode 100644 apps/web/src/lib/graphics/stroke.ts create mode 100644 apps/web/src/lib/graphics/types.ts create mode 100644 apps/web/src/lib/guides/definitions/custom.tsx create mode 100644 apps/web/src/lib/guides/definitions/grid.tsx create mode 100644 apps/web/src/lib/guides/definitions/platforms.tsx create mode 100644 apps/web/src/lib/guides/definitions/tiktok-layout.tsx create mode 100644 apps/web/src/lib/guides/index.ts create mode 100644 apps/web/src/lib/guides/registry.tsx create mode 100644 apps/web/src/lib/guides/types.ts delete mode 100644 apps/web/src/lib/iconify-api.ts create mode 100644 apps/web/src/lib/masks/__tests__/snap.test.ts create mode 100644 apps/web/src/lib/masks/definitions/box-like.ts create mode 100644 apps/web/src/lib/masks/definitions/ellipse.ts create mode 100644 apps/web/src/lib/masks/definitions/index.ts create mode 100644 apps/web/src/lib/masks/definitions/rectangle.ts create mode 100644 apps/web/src/lib/masks/definitions/split.ts create mode 100644 apps/web/src/lib/masks/geometry.ts create mode 100644 apps/web/src/lib/masks/handle-positions.ts create mode 100644 apps/web/src/lib/masks/index.ts create mode 100644 apps/web/src/lib/masks/param-update.ts create mode 100644 apps/web/src/lib/masks/registry.ts create mode 100644 apps/web/src/lib/masks/shaders/jfa-distance.frag.glsl create mode 100644 apps/web/src/lib/masks/snap.ts create mode 100644 apps/web/src/lib/masks/types.ts create mode 100644 apps/web/src/lib/masks/utils.ts create mode 100644 apps/web/src/lib/media/audio-mastering.ts rename apps/web/src/{types/assets.ts => lib/media/types.ts} (100%) create mode 100644 apps/web/src/lib/media/upload-toast.ts create mode 100644 apps/web/src/lib/params.ts rename apps/web/src/{types/project.ts => lib/project/types.ts} (87%) create mode 100644 apps/web/src/lib/registry.ts rename apps/web/src/{types => lib}/rendering.ts (91%) create mode 100644 apps/web/src/lib/retime/__tests__/resolve.test.ts create mode 100644 apps/web/src/lib/retime/__tests__/split.test.ts create mode 100644 apps/web/src/lib/retime/audio-stretch.ts create mode 100644 apps/web/src/lib/retime/index.ts create mode 100644 apps/web/src/lib/retime/presets.ts create mode 100644 apps/web/src/lib/retime/resolve.ts create mode 100644 apps/web/src/lib/retime/split.ts create mode 100644 apps/web/src/lib/selection/constants.ts create mode 100644 apps/web/src/lib/selection/context.tsx create mode 100644 apps/web/src/lib/selection/hit-testing.ts create mode 100644 apps/web/src/lib/selection/hooks/use-box-select.ts create mode 100644 apps/web/src/lib/selection/hooks/use-selection-scope.ts create mode 100644 apps/web/src/lib/selection/index.ts create mode 100644 apps/web/src/lib/selection/scope.ts create mode 100644 apps/web/src/lib/selection/selectable-item.tsx create mode 100644 apps/web/src/lib/selection/selectable-surface.tsx rename apps/web/src/{components/editor => lib/selection}/selection-box.tsx (100%) create mode 100644 apps/web/src/lib/selection/state.ts create mode 100644 apps/web/src/lib/selection/types.ts create mode 100644 apps/web/src/lib/shaders/jfa-init.frag.glsl create mode 100644 apps/web/src/lib/shaders/jfa-step.frag.glsl rename apps/web/src/{types/sounds.ts => lib/sounds/types.ts} (100%) rename apps/web/{public/countries.json => src/lib/stickers/providers/countries-data.ts} (95%) delete mode 100644 apps/web/src/lib/stickers/providers/emoji.ts delete mode 100644 apps/web/src/lib/stickers/providers/icons.ts create mode 100644 apps/web/src/lib/stickers/providers/logos.ts create mode 100644 apps/web/src/lib/text/measure-element.ts create mode 100644 apps/web/src/lib/timeline/audio-constants.ts create mode 100644 apps/web/src/lib/timeline/audio-state.ts create mode 100644 apps/web/src/lib/timeline/defaults.ts rename apps/web/src/{types => lib/timeline}/drag.ts (65%) create mode 100644 apps/web/src/lib/timeline/selection-hit-testing.ts rename apps/web/src/{types/timeline.ts => lib/timeline/types.ts} (71%) rename apps/web/src/{types/transcription.ts => lib/transcription/types.ts} (92%) create mode 100644 apps/web/src/services/renderer/mask-feather.ts create mode 100644 apps/web/src/services/renderer/nodes/blur-background-node.ts delete mode 100644 apps/web/src/services/renderer/nodes/composite-effect-node.ts create mode 100644 apps/web/src/services/renderer/nodes/graphic-node.ts delete mode 100644 apps/web/src/services/renderer/webgl-effect-renderer.ts create mode 100644 apps/web/src/services/renderer/webgl/jfa.ts create mode 100644 apps/web/src/services/renderer/webgl/webgl-context.ts create mode 100644 apps/web/src/services/renderer/webgl/webgl-effect-renderer.ts rename apps/web/src/services/renderer/{ => webgl}/webgl-utils.ts (100%) create mode 100644 apps/web/src/services/storage/migrations/__tests__/v15-to-v16.test.ts create mode 100644 apps/web/src/services/storage/migrations/__tests__/v16-to-v17.test.ts create mode 100644 apps/web/src/services/storage/migrations/__tests__/v18-to-v19.test.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v10-to-v11.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v11-to-v12.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v12-to-v13.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v13-to-v14.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v14-to-v15.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v15-to-v16.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v16-to-v17.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v17-to-v18.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v18-to-v19.ts create mode 100644 apps/web/src/services/storage/migrations/transformers/v9-to-v10.ts create mode 100644 apps/web/src/services/storage/migrations/v10-to-v11.ts create mode 100644 apps/web/src/services/storage/migrations/v11-to-v12.ts create mode 100644 apps/web/src/services/storage/migrations/v12-to-v13.ts create mode 100644 apps/web/src/services/storage/migrations/v13-to-v14.ts create mode 100644 apps/web/src/services/storage/migrations/v14-to-v15.ts create mode 100644 apps/web/src/services/storage/migrations/v15-to-v16.ts create mode 100644 apps/web/src/services/storage/migrations/v16-to-v17.ts create mode 100644 apps/web/src/services/storage/migrations/v17-to-v18.ts create mode 100644 apps/web/src/services/storage/migrations/v18-to-v19.ts create mode 100644 apps/web/src/services/storage/migrations/v9-to-v10.ts create mode 100644 apps/web/src/services/storage/quota.ts create mode 100644 apps/web/src/stores/keybindings/migrations/v5-to-v6.ts delete mode 100644 apps/web/src/types/editor.ts delete mode 100644 apps/web/src/types/effects.ts delete mode 100644 apps/web/src/types/export.ts delete mode 100644 apps/web/src/types/language.ts create mode 100644 apps/web/src/types/soundtouchjs.d.ts delete mode 100644 apps/web/src/types/stickers.ts delete mode 100644 apps/web/src/types/time.ts rename {apps/web/src/components/editor/panels => legacy/components}/properties/audio-properties.tsx (100%) rename {apps/web/src/components/editor/panels => legacy/components}/properties/clip-effects-properties.tsx (100%) rename {apps/web/src/components/editor/panels => legacy/components}/properties/effect-param-field.tsx (100%) rename {apps/web/src/components/editor/panels => legacy/components}/properties/effect-properties.tsx (100%) create mode 100644 legacy/components/properties/keyframe-toggle.tsx rename {apps/web/src/components/editor/panels => legacy/components}/properties/section.tsx (100%) rename {apps/web/src/components/editor/panels => legacy/components}/properties/text-properties.tsx (100%) rename {apps/web/src/components/editor/panels => legacy/components}/properties/video-properties.tsx (100%) rename {apps/web/src/components/editor/panels/properties => legacy}/sections/blending.tsx (100%) rename {apps/web/src/components/editor/panels/properties => legacy}/sections/index.tsx (100%) rename {apps/web/src/components/editor/panels/properties => legacy}/sections/transform.tsx (100%) rename {apps/web/src/hooks => legacy}/timeline/use-selection-box.ts (88%) create mode 100644 legacy/use-assets-selection-box.ts create mode 100644 legacy/use-assets-selection.ts create mode 100644 legacy/use-element-registry.ts rename {apps/web/src/hooks => legacy}/use-reveal-item.ts (51%) diff --git a/apps/web/content/changelog/0.3.0.md b/apps/web/content/changelog/0.3.0.md index 09c7bfbd..345688fa 100644 --- a/apps/web/content/changelog/0.3.0.md +++ b/apps/web/content/changelog/0.3.0.md @@ -12,4 +12,71 @@ changes: text: "Added a changelog link to the footer." - type: fixed text: "Media asset cards in the grid view were larger than their thumbnails, leaving empty space around each item. Cards now size to their content." + - type: improved + text: "Playback performance is dramatically better. The editor used to slow to a crawl during playback, and audio would stutter when interacting with elements mid-play. Both are fixed. Playback now runs at a consistent 60fps." + - type: fixed + text: "Project thumbnails now generate correctly even when the timeline is empty. If you set a background color or gradient with no clips, the thumbnail reflects that instead of staying blank." + - type: fixed + text: "Clicking a selected element no longer keeps the rest of the selection." + - type: improved + text: "More vertical space between timeline tracks. Selection outlines on adjacent tracks no longer overlap each other." + - type: fixed + text: "Track labels on the left side of the timeline were misaligned with the tracks on the right." + - type: improved + text: "Holding Shift or Ctrl while drag-selecting in the timeline now adds to your existing selection instead of replacing it. Matches how Shift/Ctrl+click already worked." + - type: improved + text: "Timeline track rows now highlight when they contain a selected element, making it easier to see which tracks are active at a glance." + - type: fixed + text: "Clicking in the empty space below timeline tracks now seeks the playhead." + - type: fixed + text: "Timeline vertical scroll now works anywhere in the panel, not just over the track labels. The header no longer scrolls with the tracks." + - type: new + text: "Scale now has separate width and height controls. You can stretch or squash elements independently on each axis." + - type: improved + text: "System fonts (Arial, Helvetica, Times New Roman, and others) now appear in the font picker alongside Google Fonts." + - type: fixed + text: "MP4 exports with audio failed on Firefox. The export now completes successfully regardless of browser." + - type: improved + text: "Your projects can disappear if your disk runs low on space. OpenCut now asks the browser to protect them." + - type: fixed + text: "Opening the mask or effects panel for one element, then selecting a different element, would keep the wrong panel open and hide the transform handles for the new selection. Each element now remembers its own panel state independently." + - type: new + text: "Volume control for audio and video elements, both in the properties panel and inline on timeline clips." + - type: new + text: "Speed control for video and audio clips. Includes a maintain pitch option so audio doesn't chipmunk or deepen when you change the rate." + - type: improved + text: "Audio waveforms have gotten an upgrade. The old ones were inaccurate, prone to crashing, and not very useful. The new ones are RMS-based, properly scaled, and only render what's visible so they don't slow things down." + - type: improved + text: "The timeline now opens scrolled to the bottom, so your main video track is visible right away instead of being hidden above the fold." + - type: fixed + text: "Snap guides didn't show when moving a full-canvas element to the center of the frame." + - type: fixed + text: "The rotation handle could float above the editor UI when an element was near the top of the canvas. It now clips to the preview area." + - type: fixed + text: "Images with a blur effect at 0% intensity would disappear completely when a blurred background was also active. Now 0% blur correctly renders the image unchanged." + - type: fixed + text: "Section titles in the properties panel showed the wrong text color when the section wasn't collapsible. Non-collapsible titles now use the correct muted style." + - type: new + text: "Masks. Hide or reveal parts of any video or image layer. Choose from split, rectangle, ellipse, star, heart, diamond, text, and custom masks. Adjust position, size, rotation, feather, and stroke in the properties panel, or drag the handles in the preview." + - type: improved + text: "The settings panel has been redesigned with a cleaner layout and better organization." + - type: new + text: "Layout guides are back and expanded. TikTok was the only option before. Now includes a grid guide plus TikTok, Instagram Reels, YouTube Shorts, and Snapchat Spotlight." + - type: new + text: "Canvas backgrounds are back. Set a blur, solid color, or gradient as the canvas background from the new Background tab in the settings panel." + - type: fixed + text: "Blur looked pixelated at higher intensities instead of producing a real blur. Both the canvas background blur and the blur effect are now fixed." + - type: new + text: "Custom canvas size. Instead of being locked to a handful of presets, you can now enter any width and height you want." + - type: new + text: "Preview zoom and panning. Zoom into the canvas to work on fine details, and pan around to navigate when zoomed in." + - type: new + text: "Stickers panel now has content. Browse and add logos, country flags, and shapes." + - type: improved + text: "You can now select multiple assets in the assets panel. Useful for deleting several at once." + - type: fixed + text: "Auto-generated captions were sometimes inaccurate. The underlying issue has been fixed." + - type: new + text: "You can now import transcript files to generate captions instead of running auto-transcription." + --- diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts index 2f509d2a..334e486e 100644 --- a/apps/web/next.config.ts +++ b/apps/web/next.config.ts @@ -51,6 +51,10 @@ const nextConfig: NextConfig = { protocol: "https", hostname: "api.unisvg.com", }, + { + protocol: "https", + hostname: "cdn.brandfetch.io", + }, ], }, }; diff --git a/apps/web/package.json b/apps/web/package.json index a00c9671..9c8f229d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -16,13 +16,9 @@ "db:push:prod": "cross-env NODE_ENV=production drizzle-kit push" }, "dependencies": { - "@ffmpeg/core": "^0.12.10", - "@ffmpeg/ffmpeg": "^0.12.15", - "@ffmpeg/util": "^0.12.2", "@hello-pangea/dnd": "^18.0.1", - "@hookform/resolvers": "^3.9.1", "@hugeicons/core-free-icons": "^3.1.1", - "@hugeicons/react": "^1.1.4", + "@hugeicons/react": "^1.1.6", "@huggingface/transformers": "^3.8.1", "@opencut/env": "workspace:*", "@opencut/ui": "workspace:*", @@ -38,15 +34,12 @@ "@types/culori": "^4.0.1", "@upstash/ratelimit": "^2.0.6", "@upstash/redis": "^1.35.4", - "@vercel/analytics": "^1.4.1", - "aws4fetch": "^1.0.20", "better-auth": "^1.2.7", "botid": "^1.4.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.0.0", "culori": "^4.0.2", - "dayjs": "^1.11.13", "drizzle-orm": "^0.44.2", "embla-carousel-react": "^8.5.1", "eventemitter3": "^5.0.1", @@ -67,21 +60,19 @@ "react-hook-form": "^7.54.0", "react-icons": "^5.4.0", "react-markdown": "^10.1.0", - "react-phone-number-input": "^3.4.11", "react-resizable-panels": "^2.1.7", "react-window": "^2.2.7", - "recharts": "^2.14.1", "rehype-autolink-headings": "^7.1.0", "rehype-parse": "^9.0.1", "rehype-sanitize": "^6.0.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.1", "sonner": "^1.7.1", + "soundtouchjs": "^0.3.0", "tailwind-merge": "^3.5.0", "tailwindcss-animate": "^1.0.7", "unified": "^11.0.5", "use-deep-compare-effect": "^1.8.1", - "vaul": "^1.1.2", "wavesurfer.js": "^7.9.8", "zod": "^3.25.67", "zustand": "^5.0.2" @@ -104,7 +95,6 @@ "raw-loader": "^4.0.2", "sharp": "^0.34.5", "tailwindcss": "^4.2.1", - "tsx": "^4.7.1", "typescript": "^5.8.3" } } diff --git a/apps/web/postcss.config.mjs b/apps/web/postcss.config.mjs index 6ba14df9..61e36849 100644 --- a/apps/web/postcss.config.mjs +++ b/apps/web/postcss.config.mjs @@ -1,8 +1,7 @@ -/** @type {import('postcss-load-config').Config} */ const config = { - plugins: { - "@tailwindcss/postcss": {}, - }, + plugins: { + "@tailwindcss/postcss": {}, + }, }; export default config; diff --git a/apps/web/public/flags/ad.svg b/apps/web/public/flags/ad.svg new file mode 100644 index 00000000..199ff198 --- /dev/null +++ b/apps/web/public/flags/ad.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ae.svg b/apps/web/public/flags/ae.svg new file mode 100644 index 00000000..651ac852 --- /dev/null +++ b/apps/web/public/flags/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/af.svg b/apps/web/public/flags/af.svg new file mode 100644 index 00000000..4dbe4556 --- /dev/null +++ b/apps/web/public/flags/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ag.svg b/apps/web/public/flags/ag.svg new file mode 100644 index 00000000..243c3d8f --- /dev/null +++ b/apps/web/public/flags/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ai.svg b/apps/web/public/flags/ai.svg new file mode 100644 index 00000000..9c2ea339 --- /dev/null +++ b/apps/web/public/flags/ai.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/al.svg b/apps/web/public/flags/al.svg new file mode 100644 index 00000000..e85d95f0 --- /dev/null +++ b/apps/web/public/flags/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/am.svg b/apps/web/public/flags/am.svg new file mode 100644 index 00000000..99fa4dc5 --- /dev/null +++ b/apps/web/public/flags/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ao.svg b/apps/web/public/flags/ao.svg new file mode 100644 index 00000000..b73b1ec5 --- /dev/null +++ b/apps/web/public/flags/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/aq.svg b/apps/web/public/flags/aq.svg new file mode 100644 index 00000000..c7e35362 --- /dev/null +++ b/apps/web/public/flags/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ar.svg b/apps/web/public/flags/ar.svg new file mode 100644 index 00000000..c753da10 --- /dev/null +++ b/apps/web/public/flags/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/arab.svg b/apps/web/public/flags/arab.svg new file mode 100644 index 00000000..9ef079f6 --- /dev/null +++ b/apps/web/public/flags/arab.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/as.svg b/apps/web/public/flags/as.svg new file mode 100644 index 00000000..82459dec --- /dev/null +++ b/apps/web/public/flags/as.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/asean.svg b/apps/web/public/flags/asean.svg new file mode 100644 index 00000000..189ae020 --- /dev/null +++ b/apps/web/public/flags/asean.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/at.svg b/apps/web/public/flags/at.svg new file mode 100644 index 00000000..9d2775c0 --- /dev/null +++ b/apps/web/public/flags/at.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/au.svg b/apps/web/public/flags/au.svg new file mode 100644 index 00000000..96e80768 --- /dev/null +++ b/apps/web/public/flags/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/aw.svg b/apps/web/public/flags/aw.svg new file mode 100644 index 00000000..413b7c45 --- /dev/null +++ b/apps/web/public/flags/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ax.svg b/apps/web/public/flags/ax.svg new file mode 100644 index 00000000..0584d713 --- /dev/null +++ b/apps/web/public/flags/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/az.svg b/apps/web/public/flags/az.svg new file mode 100644 index 00000000..35575221 --- /dev/null +++ b/apps/web/public/flags/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/ba.svg b/apps/web/public/flags/ba.svg new file mode 100644 index 00000000..93bd9cf9 --- /dev/null +++ b/apps/web/public/flags/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/bb.svg b/apps/web/public/flags/bb.svg new file mode 100644 index 00000000..cecd5cc3 --- /dev/null +++ b/apps/web/public/flags/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/bd.svg b/apps/web/public/flags/bd.svg new file mode 100644 index 00000000..16b794de --- /dev/null +++ b/apps/web/public/flags/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/be.svg b/apps/web/public/flags/be.svg new file mode 100644 index 00000000..ac706a0b --- /dev/null +++ b/apps/web/public/flags/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/bf.svg b/apps/web/public/flags/bf.svg new file mode 100644 index 00000000..47138225 --- /dev/null +++ b/apps/web/public/flags/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/bg.svg b/apps/web/public/flags/bg.svg new file mode 100644 index 00000000..af2d0d07 --- /dev/null +++ b/apps/web/public/flags/bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/bh.svg b/apps/web/public/flags/bh.svg new file mode 100644 index 00000000..7a2ea549 --- /dev/null +++ b/apps/web/public/flags/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/bi.svg b/apps/web/public/flags/bi.svg new file mode 100644 index 00000000..a4434a95 --- /dev/null +++ b/apps/web/public/flags/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bj.svg b/apps/web/public/flags/bj.svg new file mode 100644 index 00000000..0846724d --- /dev/null +++ b/apps/web/public/flags/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bl.svg b/apps/web/public/flags/bl.svg new file mode 100644 index 00000000..f84cbbae --- /dev/null +++ b/apps/web/public/flags/bl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/bm.svg b/apps/web/public/flags/bm.svg new file mode 100644 index 00000000..f43a5ebc --- /dev/null +++ b/apps/web/public/flags/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bn.svg b/apps/web/public/flags/bn.svg new file mode 100644 index 00000000..f544c25e --- /dev/null +++ b/apps/web/public/flags/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bo.svg b/apps/web/public/flags/bo.svg new file mode 100644 index 00000000..7658e3f6 --- /dev/null +++ b/apps/web/public/flags/bo.svg @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bq.svg b/apps/web/public/flags/bq.svg new file mode 100644 index 00000000..0e6bc76e --- /dev/null +++ b/apps/web/public/flags/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/br.svg b/apps/web/public/flags/br.svg new file mode 100644 index 00000000..719a763c --- /dev/null +++ b/apps/web/public/flags/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bs.svg b/apps/web/public/flags/bs.svg new file mode 100644 index 00000000..5cc918e5 --- /dev/null +++ b/apps/web/public/flags/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bt.svg b/apps/web/public/flags/bt.svg new file mode 100644 index 00000000..20aef3a6 --- /dev/null +++ b/apps/web/public/flags/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bv.svg b/apps/web/public/flags/bv.svg new file mode 100644 index 00000000..40e16d94 --- /dev/null +++ b/apps/web/public/flags/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bw.svg b/apps/web/public/flags/bw.svg new file mode 100644 index 00000000..3435608d --- /dev/null +++ b/apps/web/public/flags/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/by.svg b/apps/web/public/flags/by.svg new file mode 100644 index 00000000..948784ff --- /dev/null +++ b/apps/web/public/flags/by.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/bz.svg b/apps/web/public/flags/bz.svg new file mode 100644 index 00000000..d81b16c2 --- /dev/null +++ b/apps/web/public/flags/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ca.svg b/apps/web/public/flags/ca.svg new file mode 100644 index 00000000..c9b23b49 --- /dev/null +++ b/apps/web/public/flags/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/cc.svg b/apps/web/public/flags/cc.svg new file mode 100644 index 00000000..a42dec66 --- /dev/null +++ b/apps/web/public/flags/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cd.svg b/apps/web/public/flags/cd.svg new file mode 100644 index 00000000..b9cf5289 --- /dev/null +++ b/apps/web/public/flags/cd.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/cefta.svg b/apps/web/public/flags/cefta.svg new file mode 100644 index 00000000..f748d08a --- /dev/null +++ b/apps/web/public/flags/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cf.svg b/apps/web/public/flags/cf.svg new file mode 100644 index 00000000..a6cd3670 --- /dev/null +++ b/apps/web/public/flags/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cg.svg b/apps/web/public/flags/cg.svg new file mode 100644 index 00000000..f5a0e42d --- /dev/null +++ b/apps/web/public/flags/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/ch.svg b/apps/web/public/flags/ch.svg new file mode 100644 index 00000000..b42d6709 --- /dev/null +++ b/apps/web/public/flags/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/ci.svg b/apps/web/public/flags/ci.svg new file mode 100644 index 00000000..e400f0c1 --- /dev/null +++ b/apps/web/public/flags/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/ck.svg b/apps/web/public/flags/ck.svg new file mode 100644 index 00000000..18e547b1 --- /dev/null +++ b/apps/web/public/flags/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/cl.svg b/apps/web/public/flags/cl.svg new file mode 100644 index 00000000..5b3c72fa --- /dev/null +++ b/apps/web/public/flags/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cm.svg b/apps/web/public/flags/cm.svg new file mode 100644 index 00000000..70adc8b6 --- /dev/null +++ b/apps/web/public/flags/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cn.svg b/apps/web/public/flags/cn.svg new file mode 100644 index 00000000..10d3489a --- /dev/null +++ b/apps/web/public/flags/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/co.svg b/apps/web/public/flags/co.svg new file mode 100644 index 00000000..ebd0a0fb --- /dev/null +++ b/apps/web/public/flags/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/cp.svg b/apps/web/public/flags/cp.svg new file mode 100644 index 00000000..b8aa9cfd --- /dev/null +++ b/apps/web/public/flags/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/cr.svg b/apps/web/public/flags/cr.svg new file mode 100644 index 00000000..5a409eeb --- /dev/null +++ b/apps/web/public/flags/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/cu.svg b/apps/web/public/flags/cu.svg new file mode 100644 index 00000000..053c9ee3 --- /dev/null +++ b/apps/web/public/flags/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cv.svg b/apps/web/public/flags/cv.svg new file mode 100644 index 00000000..aec89949 --- /dev/null +++ b/apps/web/public/flags/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cw.svg b/apps/web/public/flags/cw.svg new file mode 100644 index 00000000..bb0ece22 --- /dev/null +++ b/apps/web/public/flags/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cx.svg b/apps/web/public/flags/cx.svg new file mode 100644 index 00000000..3a83c23f --- /dev/null +++ b/apps/web/public/flags/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/cy.svg b/apps/web/public/flags/cy.svg new file mode 100644 index 00000000..ee4b0c78 --- /dev/null +++ b/apps/web/public/flags/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/cz.svg b/apps/web/public/flags/cz.svg new file mode 100644 index 00000000..7913de38 --- /dev/null +++ b/apps/web/public/flags/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/de.svg b/apps/web/public/flags/de.svg new file mode 100644 index 00000000..71aa2d2c --- /dev/null +++ b/apps/web/public/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/dg.svg b/apps/web/public/flags/dg.svg new file mode 100644 index 00000000..dfee2bb9 --- /dev/null +++ b/apps/web/public/flags/dg.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/dj.svg b/apps/web/public/flags/dj.svg new file mode 100644 index 00000000..9b00a820 --- /dev/null +++ b/apps/web/public/flags/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/dk.svg b/apps/web/public/flags/dk.svg new file mode 100644 index 00000000..563277f8 --- /dev/null +++ b/apps/web/public/flags/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/dm.svg b/apps/web/public/flags/dm.svg new file mode 100644 index 00000000..5aa9cea5 --- /dev/null +++ b/apps/web/public/flags/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/do.svg b/apps/web/public/flags/do.svg new file mode 100644 index 00000000..6de2b268 --- /dev/null +++ b/apps/web/public/flags/do.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/dz.svg b/apps/web/public/flags/dz.svg new file mode 100644 index 00000000..5ff29a74 --- /dev/null +++ b/apps/web/public/flags/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/eac.svg b/apps/web/public/flags/eac.svg new file mode 100644 index 00000000..59d02d21 --- /dev/null +++ b/apps/web/public/flags/eac.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ec.svg b/apps/web/public/flags/ec.svg new file mode 100644 index 00000000..88c50bf6 --- /dev/null +++ b/apps/web/public/flags/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ee.svg b/apps/web/public/flags/ee.svg new file mode 100644 index 00000000..8b98c2c4 --- /dev/null +++ b/apps/web/public/flags/ee.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/eg.svg b/apps/web/public/flags/eg.svg new file mode 100644 index 00000000..88e32b3a --- /dev/null +++ b/apps/web/public/flags/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/eh.svg b/apps/web/public/flags/eh.svg new file mode 100644 index 00000000..6aec7288 --- /dev/null +++ b/apps/web/public/flags/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/er.svg b/apps/web/public/flags/er.svg new file mode 100644 index 00000000..48a13b47 --- /dev/null +++ b/apps/web/public/flags/er.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/es-ct.svg b/apps/web/public/flags/es-ct.svg new file mode 100644 index 00000000..4d859114 --- /dev/null +++ b/apps/web/public/flags/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/es-ga.svg b/apps/web/public/flags/es-ga.svg new file mode 100644 index 00000000..573ca45d --- /dev/null +++ b/apps/web/public/flags/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/es-pv.svg b/apps/web/public/flags/es-pv.svg new file mode 100644 index 00000000..63c19f41 --- /dev/null +++ b/apps/web/public/flags/es-pv.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/es.svg b/apps/web/public/flags/es.svg new file mode 100644 index 00000000..a296ebf7 --- /dev/null +++ b/apps/web/public/flags/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/et.svg b/apps/web/public/flags/et.svg new file mode 100644 index 00000000..3f99be48 --- /dev/null +++ b/apps/web/public/flags/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/eu.svg b/apps/web/public/flags/eu.svg new file mode 100644 index 00000000..b0874c1e --- /dev/null +++ b/apps/web/public/flags/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/fi.svg b/apps/web/public/flags/fi.svg new file mode 100644 index 00000000..470be2d0 --- /dev/null +++ b/apps/web/public/flags/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/fj.svg b/apps/web/public/flags/fj.svg new file mode 100644 index 00000000..332ae61d --- /dev/null +++ b/apps/web/public/flags/fj.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/fk.svg b/apps/web/public/flags/fk.svg new file mode 100644 index 00000000..a0dace83 --- /dev/null +++ b/apps/web/public/flags/fk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/fm.svg b/apps/web/public/flags/fm.svg new file mode 100644 index 00000000..c1b7c977 --- /dev/null +++ b/apps/web/public/flags/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/fo.svg b/apps/web/public/flags/fo.svg new file mode 100644 index 00000000..f802d285 --- /dev/null +++ b/apps/web/public/flags/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/fr.svg b/apps/web/public/flags/fr.svg new file mode 100644 index 00000000..4110e59e --- /dev/null +++ b/apps/web/public/flags/fr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ga.svg b/apps/web/public/flags/ga.svg new file mode 100644 index 00000000..76edab42 --- /dev/null +++ b/apps/web/public/flags/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/gb-eng.svg b/apps/web/public/flags/gb-eng.svg new file mode 100644 index 00000000..12e3b67d --- /dev/null +++ b/apps/web/public/flags/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/gb-nir.svg b/apps/web/public/flags/gb-nir.svg new file mode 100644 index 00000000..e22190aa --- /dev/null +++ b/apps/web/public/flags/gb-nir.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gb-sct.svg b/apps/web/public/flags/gb-sct.svg new file mode 100644 index 00000000..f50cd322 --- /dev/null +++ b/apps/web/public/flags/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/gb-wls.svg b/apps/web/public/flags/gb-wls.svg new file mode 100644 index 00000000..d7f57912 --- /dev/null +++ b/apps/web/public/flags/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/gb.svg b/apps/web/public/flags/gb.svg new file mode 100644 index 00000000..79913831 --- /dev/null +++ b/apps/web/public/flags/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/gd.svg b/apps/web/public/flags/gd.svg new file mode 100644 index 00000000..b3d250db --- /dev/null +++ b/apps/web/public/flags/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ge.svg b/apps/web/public/flags/ge.svg new file mode 100644 index 00000000..ab08a9ab --- /dev/null +++ b/apps/web/public/flags/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/gf.svg b/apps/web/public/flags/gf.svg new file mode 100644 index 00000000..f8fe94c6 --- /dev/null +++ b/apps/web/public/flags/gf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/gg.svg b/apps/web/public/flags/gg.svg new file mode 100644 index 00000000..f8216c8b --- /dev/null +++ b/apps/web/public/flags/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/gh.svg b/apps/web/public/flags/gh.svg new file mode 100644 index 00000000..5c3e3e69 --- /dev/null +++ b/apps/web/public/flags/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/gi.svg b/apps/web/public/flags/gi.svg new file mode 100644 index 00000000..a5d7570d --- /dev/null +++ b/apps/web/public/flags/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gl.svg b/apps/web/public/flags/gl.svg new file mode 100644 index 00000000..eb5a52e9 --- /dev/null +++ b/apps/web/public/flags/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/gm.svg b/apps/web/public/flags/gm.svg new file mode 100644 index 00000000..8fe9d669 --- /dev/null +++ b/apps/web/public/flags/gm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gn.svg b/apps/web/public/flags/gn.svg new file mode 100644 index 00000000..40d6ad4f --- /dev/null +++ b/apps/web/public/flags/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/gp.svg b/apps/web/public/flags/gp.svg new file mode 100644 index 00000000..ee55c4bc --- /dev/null +++ b/apps/web/public/flags/gp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/gq.svg b/apps/web/public/flags/gq.svg new file mode 100644 index 00000000..64c8eb22 --- /dev/null +++ b/apps/web/public/flags/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gr.svg b/apps/web/public/flags/gr.svg new file mode 100644 index 00000000..599741ee --- /dev/null +++ b/apps/web/public/flags/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gs.svg b/apps/web/public/flags/gs.svg new file mode 100644 index 00000000..29db9b94 --- /dev/null +++ b/apps/web/public/flags/gs.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gt.svg b/apps/web/public/flags/gt.svg new file mode 100644 index 00000000..7df9df57 --- /dev/null +++ b/apps/web/public/flags/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gu.svg b/apps/web/public/flags/gu.svg new file mode 100644 index 00000000..3b95219a --- /dev/null +++ b/apps/web/public/flags/gu.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gw.svg b/apps/web/public/flags/gw.svg new file mode 100644 index 00000000..d470bac9 --- /dev/null +++ b/apps/web/public/flags/gw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/gy.svg b/apps/web/public/flags/gy.svg new file mode 100644 index 00000000..569fb562 --- /dev/null +++ b/apps/web/public/flags/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/hk.svg b/apps/web/public/flags/hk.svg new file mode 100644 index 00000000..4fd55bc1 --- /dev/null +++ b/apps/web/public/flags/hk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/hm.svg b/apps/web/public/flags/hm.svg new file mode 100644 index 00000000..815c4820 --- /dev/null +++ b/apps/web/public/flags/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/hn.svg b/apps/web/public/flags/hn.svg new file mode 100644 index 00000000..11fde67d --- /dev/null +++ b/apps/web/public/flags/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/hr.svg b/apps/web/public/flags/hr.svg new file mode 100644 index 00000000..dde825c3 --- /dev/null +++ b/apps/web/public/flags/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ht.svg b/apps/web/public/flags/ht.svg new file mode 100644 index 00000000..8e8efc46 --- /dev/null +++ b/apps/web/public/flags/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/hu.svg b/apps/web/public/flags/hu.svg new file mode 100644 index 00000000..baddf7f5 --- /dev/null +++ b/apps/web/public/flags/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/ic.svg b/apps/web/public/flags/ic.svg new file mode 100644 index 00000000..81e6ee2e --- /dev/null +++ b/apps/web/public/flags/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/id.svg b/apps/web/public/flags/id.svg new file mode 100644 index 00000000..3b7c8fcf --- /dev/null +++ b/apps/web/public/flags/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/ie.svg b/apps/web/public/flags/ie.svg new file mode 100644 index 00000000..049be14d --- /dev/null +++ b/apps/web/public/flags/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/il.svg b/apps/web/public/flags/il.svg new file mode 100644 index 00000000..f43be7e8 --- /dev/null +++ b/apps/web/public/flags/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/im.svg b/apps/web/public/flags/im.svg new file mode 100644 index 00000000..fe6a59a1 --- /dev/null +++ b/apps/web/public/flags/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/in.svg b/apps/web/public/flags/in.svg new file mode 100644 index 00000000..bc47d749 --- /dev/null +++ b/apps/web/public/flags/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/io.svg b/apps/web/public/flags/io.svg new file mode 100644 index 00000000..3058f7df --- /dev/null +++ b/apps/web/public/flags/io.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/iq.svg b/apps/web/public/flags/iq.svg new file mode 100644 index 00000000..80445147 --- /dev/null +++ b/apps/web/public/flags/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/flags/ir.svg b/apps/web/public/flags/ir.svg new file mode 100644 index 00000000..8c6d5162 --- /dev/null +++ b/apps/web/public/flags/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/is.svg b/apps/web/public/flags/is.svg new file mode 100644 index 00000000..a6588afa --- /dev/null +++ b/apps/web/public/flags/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/it.svg b/apps/web/public/flags/it.svg new file mode 100644 index 00000000..20a8bfdc --- /dev/null +++ b/apps/web/public/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/je.svg b/apps/web/public/flags/je.svg new file mode 100644 index 00000000..70a8754e --- /dev/null +++ b/apps/web/public/flags/je.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/jm.svg b/apps/web/public/flags/jm.svg new file mode 100644 index 00000000..269df038 --- /dev/null +++ b/apps/web/public/flags/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/jo.svg b/apps/web/public/flags/jo.svg new file mode 100644 index 00000000..d6f927d4 --- /dev/null +++ b/apps/web/public/flags/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/jp.svg b/apps/web/public/flags/jp.svg new file mode 100644 index 00000000..cc1c181c --- /dev/null +++ b/apps/web/public/flags/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/ke.svg b/apps/web/public/flags/ke.svg new file mode 100644 index 00000000..3a67ca3c --- /dev/null +++ b/apps/web/public/flags/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kg.svg b/apps/web/public/flags/kg.svg new file mode 100644 index 00000000..e26db953 --- /dev/null +++ b/apps/web/public/flags/kg.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/kh.svg b/apps/web/public/flags/kh.svg new file mode 100644 index 00000000..a7d52f2c --- /dev/null +++ b/apps/web/public/flags/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ki.svg b/apps/web/public/flags/ki.svg new file mode 100644 index 00000000..fda03f37 --- /dev/null +++ b/apps/web/public/flags/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/km.svg b/apps/web/public/flags/km.svg new file mode 100644 index 00000000..414d65e4 --- /dev/null +++ b/apps/web/public/flags/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kn.svg b/apps/web/public/flags/kn.svg new file mode 100644 index 00000000..47fe64d6 --- /dev/null +++ b/apps/web/public/flags/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kp.svg b/apps/web/public/flags/kp.svg new file mode 100644 index 00000000..ad1b713f --- /dev/null +++ b/apps/web/public/flags/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kr.svg b/apps/web/public/flags/kr.svg new file mode 100644 index 00000000..6947eab2 --- /dev/null +++ b/apps/web/public/flags/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kw.svg b/apps/web/public/flags/kw.svg new file mode 100644 index 00000000..3dd89e99 --- /dev/null +++ b/apps/web/public/flags/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ky.svg b/apps/web/public/flags/ky.svg new file mode 100644 index 00000000..aeaa7e08 --- /dev/null +++ b/apps/web/public/flags/ky.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/kz.svg b/apps/web/public/flags/kz.svg new file mode 100644 index 00000000..2fac45bd --- /dev/null +++ b/apps/web/public/flags/kz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/la.svg b/apps/web/public/flags/la.svg new file mode 100644 index 00000000..6aea6b72 --- /dev/null +++ b/apps/web/public/flags/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/lb.svg b/apps/web/public/flags/lb.svg new file mode 100644 index 00000000..bde2581d --- /dev/null +++ b/apps/web/public/flags/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/lc.svg b/apps/web/public/flags/lc.svg new file mode 100644 index 00000000..bb256541 --- /dev/null +++ b/apps/web/public/flags/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/li.svg b/apps/web/public/flags/li.svg new file mode 100644 index 00000000..7a4d1832 --- /dev/null +++ b/apps/web/public/flags/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/lk.svg b/apps/web/public/flags/lk.svg new file mode 100644 index 00000000..cbd660a5 --- /dev/null +++ b/apps/web/public/flags/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/lr.svg b/apps/web/public/flags/lr.svg new file mode 100644 index 00000000..e482ab9d --- /dev/null +++ b/apps/web/public/flags/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ls.svg b/apps/web/public/flags/ls.svg new file mode 100644 index 00000000..a7c01a98 --- /dev/null +++ b/apps/web/public/flags/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/lt.svg b/apps/web/public/flags/lt.svg new file mode 100644 index 00000000..90ec5d24 --- /dev/null +++ b/apps/web/public/flags/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/lu.svg b/apps/web/public/flags/lu.svg new file mode 100644 index 00000000..cc122068 --- /dev/null +++ b/apps/web/public/flags/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/lv.svg b/apps/web/public/flags/lv.svg new file mode 100644 index 00000000..6a9e75ec --- /dev/null +++ b/apps/web/public/flags/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/ly.svg b/apps/web/public/flags/ly.svg new file mode 100644 index 00000000..1eaa51e4 --- /dev/null +++ b/apps/web/public/flags/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ma.svg b/apps/web/public/flags/ma.svg new file mode 100644 index 00000000..7ce56eff --- /dev/null +++ b/apps/web/public/flags/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/mc.svg b/apps/web/public/flags/mc.svg new file mode 100644 index 00000000..9cb6c9e8 --- /dev/null +++ b/apps/web/public/flags/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/md.svg b/apps/web/public/flags/md.svg new file mode 100644 index 00000000..e9ba506a --- /dev/null +++ b/apps/web/public/flags/md.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/me.svg b/apps/web/public/flags/me.svg new file mode 100644 index 00000000..297888c7 --- /dev/null +++ b/apps/web/public/flags/me.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mf.svg b/apps/web/public/flags/mf.svg new file mode 100644 index 00000000..6305edc1 --- /dev/null +++ b/apps/web/public/flags/mf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/mg.svg b/apps/web/public/flags/mg.svg new file mode 100644 index 00000000..5fa2d244 --- /dev/null +++ b/apps/web/public/flags/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/mh.svg b/apps/web/public/flags/mh.svg new file mode 100644 index 00000000..7b9f4907 --- /dev/null +++ b/apps/web/public/flags/mh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/mk.svg b/apps/web/public/flags/mk.svg new file mode 100644 index 00000000..4f5cae77 --- /dev/null +++ b/apps/web/public/flags/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ml.svg b/apps/web/public/flags/ml.svg new file mode 100644 index 00000000..6f6b7169 --- /dev/null +++ b/apps/web/public/flags/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/mm.svg b/apps/web/public/flags/mm.svg new file mode 100644 index 00000000..42b4dee2 --- /dev/null +++ b/apps/web/public/flags/mm.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/mn.svg b/apps/web/public/flags/mn.svg new file mode 100644 index 00000000..6a38a71f --- /dev/null +++ b/apps/web/public/flags/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mo.svg b/apps/web/public/flags/mo.svg new file mode 100644 index 00000000..f638b6cb --- /dev/null +++ b/apps/web/public/flags/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/mp.svg b/apps/web/public/flags/mp.svg new file mode 100644 index 00000000..26bfa221 --- /dev/null +++ b/apps/web/public/flags/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mq.svg b/apps/web/public/flags/mq.svg new file mode 100644 index 00000000..b221951e --- /dev/null +++ b/apps/web/public/flags/mq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/mr.svg b/apps/web/public/flags/mr.svg new file mode 100644 index 00000000..d859972c --- /dev/null +++ b/apps/web/public/flags/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/ms.svg b/apps/web/public/flags/ms.svg new file mode 100644 index 00000000..4367505b --- /dev/null +++ b/apps/web/public/flags/ms.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mt.svg b/apps/web/public/flags/mt.svg new file mode 100644 index 00000000..5d5d7c80 --- /dev/null +++ b/apps/web/public/flags/mt.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mu.svg b/apps/web/public/flags/mu.svg new file mode 100644 index 00000000..82d7a3be --- /dev/null +++ b/apps/web/public/flags/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/mv.svg b/apps/web/public/flags/mv.svg new file mode 100644 index 00000000..10450f98 --- /dev/null +++ b/apps/web/public/flags/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/mw.svg b/apps/web/public/flags/mw.svg new file mode 100644 index 00000000..137ff878 --- /dev/null +++ b/apps/web/public/flags/mw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/flags/mx.svg b/apps/web/public/flags/mx.svg new file mode 100644 index 00000000..e3ec2bc5 --- /dev/null +++ b/apps/web/public/flags/mx.svg @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/my.svg b/apps/web/public/flags/my.svg new file mode 100644 index 00000000..115f864d --- /dev/null +++ b/apps/web/public/flags/my.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/mz.svg b/apps/web/public/flags/mz.svg new file mode 100644 index 00000000..0f94c3a1 --- /dev/null +++ b/apps/web/public/flags/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/na.svg b/apps/web/public/flags/na.svg new file mode 100644 index 00000000..35b9f783 --- /dev/null +++ b/apps/web/public/flags/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/nc.svg b/apps/web/public/flags/nc.svg new file mode 100644 index 00000000..fa155516 --- /dev/null +++ b/apps/web/public/flags/nc.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ne.svg b/apps/web/public/flags/ne.svg new file mode 100644 index 00000000..39a82b82 --- /dev/null +++ b/apps/web/public/flags/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/nf.svg b/apps/web/public/flags/nf.svg new file mode 100644 index 00000000..fd61b25c --- /dev/null +++ b/apps/web/public/flags/nf.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/ng.svg b/apps/web/public/flags/ng.svg new file mode 100644 index 00000000..81eb35f7 --- /dev/null +++ b/apps/web/public/flags/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/ni.svg b/apps/web/public/flags/ni.svg new file mode 100644 index 00000000..e4861f5a --- /dev/null +++ b/apps/web/public/flags/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/nl.svg b/apps/web/public/flags/nl.svg new file mode 100644 index 00000000..e90f5b03 --- /dev/null +++ b/apps/web/public/flags/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/no.svg b/apps/web/public/flags/no.svg new file mode 100644 index 00000000..a5f2a152 --- /dev/null +++ b/apps/web/public/flags/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/np.svg b/apps/web/public/flags/np.svg new file mode 100644 index 00000000..62428568 --- /dev/null +++ b/apps/web/public/flags/np.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/nr.svg b/apps/web/public/flags/nr.svg new file mode 100644 index 00000000..ff394c41 --- /dev/null +++ b/apps/web/public/flags/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/web/public/flags/nu.svg b/apps/web/public/flags/nu.svg new file mode 100644 index 00000000..4067baff --- /dev/null +++ b/apps/web/public/flags/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/flags/nz.svg b/apps/web/public/flags/nz.svg new file mode 100644 index 00000000..935d8a74 --- /dev/null +++ b/apps/web/public/flags/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/om.svg b/apps/web/public/flags/om.svg new file mode 100644 index 00000000..4f1461a0 --- /dev/null +++ b/apps/web/public/flags/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pa.svg b/apps/web/public/flags/pa.svg new file mode 100644 index 00000000..8dc03bc6 --- /dev/null +++ b/apps/web/public/flags/pa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pc.svg b/apps/web/public/flags/pc.svg new file mode 100644 index 00000000..5202d6d6 --- /dev/null +++ b/apps/web/public/flags/pc.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pe.svg b/apps/web/public/flags/pe.svg new file mode 100644 index 00000000..33e6cfd4 --- /dev/null +++ b/apps/web/public/flags/pe.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/pf.svg b/apps/web/public/flags/pf.svg new file mode 100644 index 00000000..bea0354d --- /dev/null +++ b/apps/web/public/flags/pf.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pg.svg b/apps/web/public/flags/pg.svg new file mode 100644 index 00000000..7b7e77aa --- /dev/null +++ b/apps/web/public/flags/pg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/ph.svg b/apps/web/public/flags/ph.svg new file mode 100644 index 00000000..b910e24c --- /dev/null +++ b/apps/web/public/flags/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/pk.svg b/apps/web/public/flags/pk.svg new file mode 100644 index 00000000..4ddc19f8 --- /dev/null +++ b/apps/web/public/flags/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pl.svg b/apps/web/public/flags/pl.svg new file mode 100644 index 00000000..0fa51452 --- /dev/null +++ b/apps/web/public/flags/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/pm.svg b/apps/web/public/flags/pm.svg new file mode 100644 index 00000000..19a9330a --- /dev/null +++ b/apps/web/public/flags/pm.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/pn.svg b/apps/web/public/flags/pn.svg new file mode 100644 index 00000000..209ea71a --- /dev/null +++ b/apps/web/public/flags/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pr.svg b/apps/web/public/flags/pr.svg new file mode 100644 index 00000000..ec51831d --- /dev/null +++ b/apps/web/public/flags/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ps.svg b/apps/web/public/flags/ps.svg new file mode 100644 index 00000000..362d4359 --- /dev/null +++ b/apps/web/public/flags/ps.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/pt.svg b/apps/web/public/flags/pt.svg new file mode 100644 index 00000000..2767cd4e --- /dev/null +++ b/apps/web/public/flags/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/pw.svg b/apps/web/public/flags/pw.svg new file mode 100644 index 00000000..9f89c5f1 --- /dev/null +++ b/apps/web/public/flags/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/py.svg b/apps/web/public/flags/py.svg new file mode 100644 index 00000000..abccd879 --- /dev/null +++ b/apps/web/public/flags/py.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/qa.svg b/apps/web/public/flags/qa.svg new file mode 100644 index 00000000..901f3fa7 --- /dev/null +++ b/apps/web/public/flags/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/re.svg b/apps/web/public/flags/re.svg new file mode 100644 index 00000000..64e788e0 --- /dev/null +++ b/apps/web/public/flags/re.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ro.svg b/apps/web/public/flags/ro.svg new file mode 100644 index 00000000..fda0f7be --- /dev/null +++ b/apps/web/public/flags/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/rs.svg b/apps/web/public/flags/rs.svg new file mode 100644 index 00000000..6d4f74d7 --- /dev/null +++ b/apps/web/public/flags/rs.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ru.svg b/apps/web/public/flags/ru.svg new file mode 100644 index 00000000..cf243011 --- /dev/null +++ b/apps/web/public/flags/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/rw.svg b/apps/web/public/flags/rw.svg new file mode 100644 index 00000000..06e26ae4 --- /dev/null +++ b/apps/web/public/flags/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sa.svg b/apps/web/public/flags/sa.svg new file mode 100644 index 00000000..596cf48b --- /dev/null +++ b/apps/web/public/flags/sa.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sb.svg b/apps/web/public/flags/sb.svg new file mode 100644 index 00000000..6066f94c --- /dev/null +++ b/apps/web/public/flags/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sc.svg b/apps/web/public/flags/sc.svg new file mode 100644 index 00000000..9a46b369 --- /dev/null +++ b/apps/web/public/flags/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/sd.svg b/apps/web/public/flags/sd.svg new file mode 100644 index 00000000..12818b41 --- /dev/null +++ b/apps/web/public/flags/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/se.svg b/apps/web/public/flags/se.svg new file mode 100644 index 00000000..8ba745ac --- /dev/null +++ b/apps/web/public/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/sg.svg b/apps/web/public/flags/sg.svg new file mode 100644 index 00000000..c4dd4ac9 --- /dev/null +++ b/apps/web/public/flags/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sh-ac.svg b/apps/web/public/flags/sh-ac.svg new file mode 100644 index 00000000..c43b301e --- /dev/null +++ b/apps/web/public/flags/sh-ac.svg @@ -0,0 +1,689 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sh-hl.svg b/apps/web/public/flags/sh-hl.svg new file mode 100644 index 00000000..2150bf60 --- /dev/null +++ b/apps/web/public/flags/sh-hl.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sh-ta.svg b/apps/web/public/flags/sh-ta.svg new file mode 100644 index 00000000..ba390631 --- /dev/null +++ b/apps/web/public/flags/sh-ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sh.svg b/apps/web/public/flags/sh.svg new file mode 100644 index 00000000..7aba0aec --- /dev/null +++ b/apps/web/public/flags/sh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/si.svg b/apps/web/public/flags/si.svg new file mode 100644 index 00000000..1bbdd94f --- /dev/null +++ b/apps/web/public/flags/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sj.svg b/apps/web/public/flags/sj.svg new file mode 100644 index 00000000..bb2799ce --- /dev/null +++ b/apps/web/public/flags/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/sk.svg b/apps/web/public/flags/sk.svg new file mode 100644 index 00000000..676018e6 --- /dev/null +++ b/apps/web/public/flags/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/sl.svg b/apps/web/public/flags/sl.svg new file mode 100644 index 00000000..a07baf75 --- /dev/null +++ b/apps/web/public/flags/sl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/sm.svg b/apps/web/public/flags/sm.svg new file mode 100644 index 00000000..e41d2f77 --- /dev/null +++ b/apps/web/public/flags/sm.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sn.svg b/apps/web/public/flags/sn.svg new file mode 100644 index 00000000..7c0673d6 --- /dev/null +++ b/apps/web/public/flags/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/so.svg b/apps/web/public/flags/so.svg new file mode 100644 index 00000000..a581ac63 --- /dev/null +++ b/apps/web/public/flags/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/sr.svg b/apps/web/public/flags/sr.svg new file mode 100644 index 00000000..5e71c400 --- /dev/null +++ b/apps/web/public/flags/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/ss.svg b/apps/web/public/flags/ss.svg new file mode 100644 index 00000000..b257aa0b --- /dev/null +++ b/apps/web/public/flags/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/st.svg b/apps/web/public/flags/st.svg new file mode 100644 index 00000000..1294bcb7 --- /dev/null +++ b/apps/web/public/flags/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sv.svg b/apps/web/public/flags/sv.svg new file mode 100644 index 00000000..cbc674a6 --- /dev/null +++ b/apps/web/public/flags/sv.svg @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sx.svg b/apps/web/public/flags/sx.svg new file mode 100644 index 00000000..ac785617 --- /dev/null +++ b/apps/web/public/flags/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/sy.svg b/apps/web/public/flags/sy.svg new file mode 100644 index 00000000..97c05cfc --- /dev/null +++ b/apps/web/public/flags/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/sz.svg b/apps/web/public/flags/sz.svg new file mode 100644 index 00000000..eb538e44 --- /dev/null +++ b/apps/web/public/flags/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tc.svg b/apps/web/public/flags/tc.svg new file mode 100644 index 00000000..12589710 --- /dev/null +++ b/apps/web/public/flags/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/td.svg b/apps/web/public/flags/td.svg new file mode 100644 index 00000000..fa3bd927 --- /dev/null +++ b/apps/web/public/flags/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/tf.svg b/apps/web/public/flags/tf.svg new file mode 100644 index 00000000..fba23356 --- /dev/null +++ b/apps/web/public/flags/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tg.svg b/apps/web/public/flags/tg.svg new file mode 100644 index 00000000..9d6ea6c5 --- /dev/null +++ b/apps/web/public/flags/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/th.svg b/apps/web/public/flags/th.svg new file mode 100644 index 00000000..1e93a61e --- /dev/null +++ b/apps/web/public/flags/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/tj.svg b/apps/web/public/flags/tj.svg new file mode 100644 index 00000000..f8c9a037 --- /dev/null +++ b/apps/web/public/flags/tj.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tk.svg b/apps/web/public/flags/tk.svg new file mode 100644 index 00000000..05d3e86c --- /dev/null +++ b/apps/web/public/flags/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/tl.svg b/apps/web/public/flags/tl.svg new file mode 100644 index 00000000..3d0701a2 --- /dev/null +++ b/apps/web/public/flags/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tm.svg b/apps/web/public/flags/tm.svg new file mode 100644 index 00000000..4154ed76 --- /dev/null +++ b/apps/web/public/flags/tm.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tn.svg b/apps/web/public/flags/tn.svg new file mode 100644 index 00000000..5735c198 --- /dev/null +++ b/apps/web/public/flags/tn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/to.svg b/apps/web/public/flags/to.svg new file mode 100644 index 00000000..d0723370 --- /dev/null +++ b/apps/web/public/flags/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/flags/tr.svg b/apps/web/public/flags/tr.svg new file mode 100644 index 00000000..b96da21f --- /dev/null +++ b/apps/web/public/flags/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/tt.svg b/apps/web/public/flags/tt.svg new file mode 100644 index 00000000..bc24938c --- /dev/null +++ b/apps/web/public/flags/tt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/tv.svg b/apps/web/public/flags/tv.svg new file mode 100644 index 00000000..675210ec --- /dev/null +++ b/apps/web/public/flags/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/tw.svg b/apps/web/public/flags/tw.svg new file mode 100644 index 00000000..57fd98b4 --- /dev/null +++ b/apps/web/public/flags/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/tz.svg b/apps/web/public/flags/tz.svg new file mode 100644 index 00000000..a2cfbca4 --- /dev/null +++ b/apps/web/public/flags/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/web/public/flags/ua.svg b/apps/web/public/flags/ua.svg new file mode 100644 index 00000000..a339eb1b --- /dev/null +++ b/apps/web/public/flags/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/flags/ug.svg b/apps/web/public/flags/ug.svg new file mode 100644 index 00000000..520eee5c --- /dev/null +++ b/apps/web/public/flags/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/um.svg b/apps/web/public/flags/um.svg new file mode 100644 index 00000000..9e9eddaa --- /dev/null +++ b/apps/web/public/flags/um.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/un.svg b/apps/web/public/flags/un.svg new file mode 100644 index 00000000..632bbb4a --- /dev/null +++ b/apps/web/public/flags/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/us.svg b/apps/web/public/flags/us.svg new file mode 100644 index 00000000..9cfd0c92 --- /dev/null +++ b/apps/web/public/flags/us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/flags/uy.svg b/apps/web/public/flags/uy.svg new file mode 100644 index 00000000..62c36f8e --- /dev/null +++ b/apps/web/public/flags/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/uz.svg b/apps/web/public/flags/uz.svg new file mode 100644 index 00000000..0ccca1b1 --- /dev/null +++ b/apps/web/public/flags/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/va.svg b/apps/web/public/flags/va.svg new file mode 100644 index 00000000..3e297d63 --- /dev/null +++ b/apps/web/public/flags/va.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/vc.svg b/apps/web/public/flags/vc.svg new file mode 100644 index 00000000..f26c2d8d --- /dev/null +++ b/apps/web/public/flags/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/flags/ve.svg b/apps/web/public/flags/ve.svg new file mode 100644 index 00000000..314e7f5f --- /dev/null +++ b/apps/web/public/flags/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/vg.svg b/apps/web/public/flags/vg.svg new file mode 100644 index 00000000..ac900888 --- /dev/null +++ b/apps/web/public/flags/vg.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/vi.svg b/apps/web/public/flags/vi.svg new file mode 100644 index 00000000..d88d68f9 --- /dev/null +++ b/apps/web/public/flags/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/vn.svg b/apps/web/public/flags/vn.svg new file mode 100644 index 00000000..7e4bac8f --- /dev/null +++ b/apps/web/public/flags/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/web/public/flags/vu.svg b/apps/web/public/flags/vu.svg new file mode 100644 index 00000000..326d29e9 --- /dev/null +++ b/apps/web/public/flags/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/wf.svg b/apps/web/public/flags/wf.svg new file mode 100644 index 00000000..054c57df --- /dev/null +++ b/apps/web/public/flags/wf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/ws.svg b/apps/web/public/flags/ws.svg new file mode 100644 index 00000000..0e758a7a --- /dev/null +++ b/apps/web/public/flags/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/xk.svg b/apps/web/public/flags/xk.svg new file mode 100644 index 00000000..0e8958d8 --- /dev/null +++ b/apps/web/public/flags/xk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/xx.svg b/apps/web/public/flags/xx.svg new file mode 100644 index 00000000..9333be36 --- /dev/null +++ b/apps/web/public/flags/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/flags/ye.svg b/apps/web/public/flags/ye.svg new file mode 100644 index 00000000..1c9e6d63 --- /dev/null +++ b/apps/web/public/flags/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/web/public/flags/yt.svg b/apps/web/public/flags/yt.svg new file mode 100644 index 00000000..e7776b30 --- /dev/null +++ b/apps/web/public/flags/yt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/flags/za.svg b/apps/web/public/flags/za.svg new file mode 100644 index 00000000..d563adb9 --- /dev/null +++ b/apps/web/public/flags/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/zm.svg b/apps/web/public/flags/zm.svg new file mode 100644 index 00000000..360f37aa --- /dev/null +++ b/apps/web/public/flags/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/flags/zw.svg b/apps/web/public/flags/zw.svg new file mode 100644 index 00000000..93aac4f6 --- /dev/null +++ b/apps/web/public/flags/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/shapes/circle.svg b/apps/web/public/shapes/circle.svg index adb837cf..2de141cd 100644 --- a/apps/web/public/shapes/circle.svg +++ b/apps/web/public/shapes/circle.svg @@ -1,3 +1,3 @@ - + diff --git a/apps/web/public/shapes/diamond.svg b/apps/web/public/shapes/diamond.svg index 4a039b5c..a0a31aa8 100644 --- a/apps/web/public/shapes/diamond.svg +++ b/apps/web/public/shapes/diamond.svg @@ -1,3 +1,3 @@ - + diff --git a/apps/web/public/shapes/hexagon.svg b/apps/web/public/shapes/hexagon.svg index e1eb087e..e50cd91f 100644 --- a/apps/web/public/shapes/hexagon.svg +++ b/apps/web/public/shapes/hexagon.svg @@ -1,3 +1,6 @@ - + diff --git a/apps/web/public/shapes/square.svg b/apps/web/public/shapes/square.svg index ed9b790f..58a0f6ad 100644 --- a/apps/web/public/shapes/square.svg +++ b/apps/web/public/shapes/square.svg @@ -1,3 +1,3 @@ - + diff --git a/apps/web/public/shapes/star.svg b/apps/web/public/shapes/star.svg index c49e0c53..f646764b 100644 --- a/apps/web/public/shapes/star.svg +++ b/apps/web/public/shapes/star.svg @@ -1,3 +1,6 @@ - + diff --git a/apps/web/public/shapes/triangle.svg b/apps/web/public/shapes/triangle.svg index a1bd6b0c..9c1c5a41 100644 --- a/apps/web/public/shapes/triangle.svg +++ b/apps/web/public/shapes/triangle.svg @@ -1,3 +1,3 @@ - + diff --git a/apps/web/src/app/blog/[slug]/page.tsx b/apps/web/src/app/blog/[slug]/page.tsx index e1afc3a8..90afd919 100644 --- a/apps/web/src/app/blog/[slug]/page.tsx +++ b/apps/web/src/app/blog/[slug]/page.tsx @@ -5,7 +5,7 @@ import { BasePage } from "@/app/base-page"; import Prose from "@/components/ui/prose"; import { Separator } from "@/components/ui/separator"; import { getPosts, getSinglePost, processHtmlContent } from "@/lib/blog/query"; -import type { Author, Post } from "@/types/blog"; +import type { Author, Post } from "@/lib/blog/types"; type PageProps = { params: Promise<{ slug: string }>; diff --git a/apps/web/src/app/blog/page.tsx b/apps/web/src/app/blog/page.tsx index 257a8f23..df0b195d 100644 --- a/apps/web/src/app/blog/page.tsx +++ b/apps/web/src/app/blog/page.tsx @@ -3,7 +3,7 @@ import Link from "next/link"; import { BasePage } from "@/app/base-page"; import { Separator } from "@/components/ui/separator"; import { getPosts } from "@/lib/blog/query"; -import type { Post } from "@/types/blog"; +import type { Post } from "@/lib/blog/types"; export const metadata: Metadata = { title: "Blog - OpenCut", diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index 6d3e984f..21219427 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -8,111 +8,111 @@ @plugin "tailwindcss-animate"; :root { - --background: hsl(0, 0%, 100%); - --foreground: hsl(0 0% 11%); - --card: hsl(0, 0%, 100%); - --card-foreground: hsl(0 0% 11%); - --popover: hsl(0, 0%, 100%); - --popover-hover: hsl(0, 0%, 96%); - --popover-foreground: hsl(0 0% 2%); - --primary: #009dff; - --primary-foreground: hsl(0, 0%, 100%); - --secondary: hsl(204, 100%, 97%); - --secondary-border: hsl(204, 100%, 94%); - --secondary-foreground: hsl(200, 98%, 39%); - --muted: hsl(0 0% 85.1%); - --muted-foreground: hsl(0 0% 50%); - --accent: hsl(0, 0%, 96%); - --accent-foreground: hsl(0 0% 2%); - --destructive: hsl(0, 83%, 50%); - --destructive-foreground: hsl(0, 0%, 100%); - --constructive: hsl(141, 71%, 48%); - --constructive-foreground: hsl(0, 0%, 100%); - --border: hsl(0 0% 91%); - --input: hsl(0, 0%, 100%); - --ring: hsl(0, 0%, 55%); - --chart-1: hsl(220 70% 50%); - --chart-2: hsl(160 60% 45%); - --chart-3: hsl(30 80% 55%); - --chart-4: hsl(280 65% 60%); - --chart-5: hsl(340 75% 55%); - --sidebar-background: hsl(0 0% 96.1%); - --sidebar-foreground: hsl(0 0% 2%); - --sidebar-primary: hsl(0 0% 2%); - --sidebar-primary-foreground: hsl(0 0% 91%); - --sidebar-accent: hsl(0 0% 85.1%); - --sidebar-accent-foreground: hsl(0 0% 2%); - --sidebar-border: hsl(0 0% 85.1%); - --sidebar-ring: hsl(0 0% 16.9%); - --sidebar: hsl(0 0% 98%); + --background: hsl(0, 0%, 100%); + --foreground: hsl(0 0% 11%); + --card: hsl(0, 0%, 100%); + --card-foreground: hsl(0 0% 11%); + --popover: hsl(0, 0%, 100%); + --popover-hover: hsl(0, 0%, 96%); + --popover-foreground: hsl(0 0% 2%); + --primary: hsl(200, 90%, 52%); + --primary-foreground: hsl(0, 0%, 100%); + --secondary: hsl(204, 100%, 97%); + --secondary-border: hsl(204, 100%, 94%); + --secondary-foreground: hsl(200, 98%, 39%); + --muted: hsl(0 0% 85.1%); + --muted-foreground: hsl(0 0% 50%); + --accent: hsl(0, 0%, 96%); + --accent-foreground: hsl(0 0% 2%); + --destructive: hsl(0, 83%, 50%); + --destructive-foreground: hsl(0, 0%, 100%); + --constructive: hsl(141, 71%, 48%); + --constructive-foreground: hsl(0, 0%, 100%); + --border: hsl(0 0% 91%); + --input: hsl(0, 0%, 100%); + --ring: hsl(0, 0%, 55%); + --chart-1: hsl(220 70% 50%); + --chart-2: hsl(160 60% 45%); + --chart-3: hsl(30 80% 55%); + --chart-4: hsl(280 65% 60%); + --chart-5: hsl(340 75% 55%); + --sidebar-background: hsl(0 0% 96.1%); + --sidebar-foreground: hsl(0 0% 2%); + --sidebar-primary: hsl(0 0% 2%); + --sidebar-primary-foreground: hsl(0 0% 91%); + --sidebar-accent: hsl(0 0% 85.1%); + --sidebar-accent-foreground: hsl(0 0% 2%); + --sidebar-border: hsl(0 0% 85.1%); + --sidebar-ring: hsl(0 0% 16.9%); + --sidebar: hsl(0 0% 98%); } .panel { - --background: hsl(216 13% 98%); - --foreground: hsl(0 0% 13%); - --card: hsl(0, 0%, 98%); - --card-foreground: hsl(0 0% 13%); - --primary-foreground: hsl(0, 0%, 98%); - --secondary: hsl(204, 100%, 95%); - --secondary-border: hsl(204, 100%, 92%); - --secondary-foreground: hsl(200, 98%, 37%); - --muted: hsl(0 0% 83.1%); - --muted-foreground: hsl(0 0% 48%); - --accent: hsl(0, 0%, 93%); - --accent-foreground: hsl(0 0% 5%); - --destructive-foreground: hsl(0, 0%, 98%); - --constructive-foreground: hsl(0, 0%, 98%); - --border: hsl(0 0% 89%); - --input: hsl(0 0% 93%); - --ring: hsl(0, 0%, 53%); + --background: hsl(210, 20%, 98%); + --foreground: hsl(0 0% 13%); + --card: hsl(0, 0%, 98%); + --card-foreground: hsl(0 0% 13%); + --primary-foreground: hsl(0, 0%, 98%); + --secondary: hsl(204, 100%, 95%); + --secondary-border: hsl(204, 100%, 92%); + --secondary-foreground: hsl(200, 98%, 37%); + --muted: hsl(0 0% 83.1%); + --muted-foreground: hsl(0 0% 48%); + --accent: hsl(0, 0%, 93%); + --accent-foreground: hsl(0 0% 5%); + --destructive-foreground: hsl(0, 0%, 98%); + --constructive-foreground: hsl(0, 0%, 98%); + --border: hsl(0 0% 87%); + --input: hsl(0 0% 93%); + --ring: hsl(0, 0%, 53%); } .dark { - --background: hsl(0, 0%, 5%); - --foreground: hsl(0 0% 87%); - --card: hsl(0, 0%, 5%); - --card-foreground: hsl(0 0% 87%); - --popover: hsl(0, 0%, 5%); - --popover-hover: hsl(0, 0%, 22%); - --popover-foreground: hsl(0 0% 95%); - --secondary: hsl(204, 100%, 12%); - --secondary-border: hsl(204, 100%, 15%); - --secondary-foreground: hsl(200, 98%, 61%); - --muted: hsl(0 0% 20%); - --accent: hsl(0, 0%, 14%); - --accent-foreground: hsl(0 0% 95%); - --border: hsl(0 0% 16%); - --input: hsl(0 0% 5%); - --ring: hsl(0, 0%, 50%); - --sidebar-background: hsl(0 0% 8%); - --sidebar-foreground: hsl(0 0% 95%); - --sidebar-primary: hsl(0 0% 95%); - --sidebar-primary-foreground: hsl(0 0% 15%); - --sidebar-accent: hsl(0 0% 20%); - --sidebar-accent-foreground: hsl(0 0% 95%); - --sidebar-border: hsl(0 0% 20%); - --sidebar-ring: hsl(0 0% 83.1%); - --sidebar: hsl(0 0% 6%); + --background: hsl(0, 0%, 5%); + --foreground: hsl(0 0% 87%); + --card: hsl(0, 0%, 5%); + --card-foreground: hsl(0 0% 87%); + --popover: hsl(0, 0%, 5%); + --popover-hover: hsl(0, 0%, 13%); + --popover-foreground: hsl(0 0% 95%); + --secondary: hsl(204, 100%, 12%); + --secondary-border: hsl(204, 100%, 15%); + --secondary-foreground: hsl(200, 98%, 61%); + --muted: hsl(0 0% 20%); + --accent: hsl(0, 0%, 14%); + --accent-foreground: hsl(0 0% 95%); + --border: hsl(0 0% 16%); + --input: hsl(0 0% 5%); + --ring: hsl(0, 0%, 50%); + --sidebar-background: hsl(0 0% 8%); + --sidebar-foreground: hsl(0 0% 95%); + --sidebar-primary: hsl(0 0% 95%); + --sidebar-primary-foreground: hsl(0 0% 15%); + --sidebar-accent: hsl(0 0% 20%); + --sidebar-accent-foreground: hsl(0 0% 95%); + --sidebar-border: hsl(0 0% 20%); + --sidebar-ring: hsl(0 0% 83.1%); + --sidebar: hsl(0 0% 6%); } .dark .panel { - --background: hsl(0 0% 10%); - --foreground: hsl(0 0% 85%); - --card: hsl(0, 0%, 10%); - --card-foreground: hsl(0 0% 85%); - --secondary: hsl(204, 67%, 9%); - --secondary-border: hsl(204, 100%, 14%); - --secondary-foreground: hsl(200, 98%, 63%); - --muted: hsl(0 0% 22%); - --accent: hsl(0, 0%, 15%); - --accent-foreground: hsl(0 0% 93%); - --border: hsl(0 0% 18%); - --input: hsl(0 0% 22%); - --ring: hsl(0, 0%, 52%); + --background: hsl(0 0% 10%); + --foreground: hsl(0 0% 85%); + --card: hsl(0, 0%, 10%); + --card-foreground: hsl(0 0% 85%); + --secondary: hsl(204, 67%, 9%); + --secondary-border: hsl(204, 100%, 14%); + --secondary-foreground: hsl(200, 98%, 63%); + --muted: hsl(0 0% 22%); + --accent: hsl(0, 0%, 15%); + --accent-foreground: hsl(0 0% 93%); + --border: hsl(0 0% 18%); + --input: hsl(0 0% 22%); + --ring: hsl(0, 0%, 52%); } @layer base { - /* + /* The default border color has changed to `currentcolor` in Tailwind CSS v4, so we've added these compatibility styles to make sure everything still looks the same as it did with Tailwind CSS v3. @@ -120,165 +120,165 @@ If we ever want to remove these styles, we need to add an explicit border color utility to any element that depends on these defaults. */ - *, - ::after, - ::before, - ::backdrop, - ::file-selector-button { - border-color: var(--color-gray-200, currentcolor); - } - /* Other default base styles */ - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - /* Prevent back/forward swipe */ - overscroll-behavior-x: contain; - } - ::selection { - @apply bg-primary/35 selection:text-primary-foreground; - } + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentcolor); + } + /* Other default base styles */ + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + /* Prevent back/forward swipe */ + overscroll-behavior-x: contain; + } + ::selection { + @apply bg-primary/35 selection:text-primary-foreground; + } } @theme inline { - /* Responsive breakpoints */ - --breakpoint-xs: 30rem; + /* Responsive breakpoints */ + --breakpoint-xs: 30rem; - /* Typography */ - --font-sans: var(--font-inter), sans-serif; + /* Typography */ + --font-sans: var(--font-inter), sans-serif; - /* Font sizes */ - --text-xs: 0.72rem; - --text-sm: 0.79rem; - --text-base: 0.92rem; - --text-base--line-height: calc(1.5 / 0.95); - --text-xs--line-height: calc(1 / 0.8); + /* Font sizes */ + --text-xs: 0.72rem; + --text-sm: 0.79rem; + --text-base: 0.92rem; + --text-base--line-height: calc(1.5 / 0.95); + --text-xs--line-height: calc(1 / 0.8); - /* Border radius */ - --radius-lg: 0.82rem; - --radius-md: 0.65rem; - --radius-sm: 0.35rem; + /* Border radius */ + --radius-lg: 0.82rem; + --radius-md: 0.65rem; + --radius-sm: 0.35rem; - /* Palette mapped to root design tokens */ - --color-background: var(--background); - --color-foreground: var(--foreground); + /* Palette mapped to root design tokens */ + --color-background: var(--background); + --color-foreground: var(--foreground); - --color-card: var(--card); - --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); - --color-popover: var(--popover); - --color-popover-hover: var(--popover-hover); - --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-popover-hover: var(--popover-hover); + --color-popover-foreground: var(--popover-foreground); - --color-primary: var(--primary); - --color-primary-foreground: var(--primary-foreground); - --color-secondary: var(--secondary); - --color-secondary-border: var(--secondary-border); - --color-secondary-foreground: var(--secondary-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-border: var(--secondary-border); + --color-secondary-foreground: var(--secondary-foreground); - --color-muted: var(--muted); - --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); - --color-accent: var(--accent); - --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); - --color-destructive: var(--destructive); - --color-destructive-foreground: var(--destructive-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); - --color-constructive: var(--constructive); - --color-constructive-foreground: var(--constructive-foreground); + --color-constructive: var(--constructive); + --color-constructive-foreground: var(--constructive-foreground); - --color-border: var(--border); - --color-input: var(--input); - --color-ring: var(--ring); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); - /* Chart colors */ - --color-chart-1: var(--chart-1); - --color-chart-2: var(--chart-2); - --color-chart-3: var(--chart-3); - --color-chart-4: var(--chart-4); - --color-chart-5: var(--chart-5); + /* Chart colors */ + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); - /* Sidebar */ - --color-sidebar: var(--sidebar-background); - --color-sidebar-foreground: var(--sidebar-foreground); - --color-sidebar-primary: var(--sidebar-primary); - --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); - --color-sidebar-accent: var(--sidebar-accent); - --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); - --color-sidebar-border: var(--sidebar-border); - --color-sidebar-ring: var(--sidebar-ring); + /* Sidebar */ + --color-sidebar: var(--sidebar-background); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); - /* Animations */ - --animate-accordion-down: accordion-down 0.2s ease-out; - --animate-accordion-up: accordion-up 0.2s ease-out; + /* Animations */ + --animate-accordion-down: accordion-down 0.2s ease-out; + --animate-accordion-up: accordion-up 0.2s ease-out; - @keyframes accordion-down { - from { - height: 0; - } - to { - height: var(--radix-accordion-content-height); - } - } + @keyframes accordion-down { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + } - @keyframes accordion-up { - from { - height: var(--radix-accordion-content-height); - } - to { - height: 0; - } - } + @keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + } } @utility scrollbar-hidden { - -ms-overflow-style: none; - scrollbar-width: none; - &::-webkit-scrollbar { - display: none; - } + -ms-overflow-style: none; + scrollbar-width: none; + &::-webkit-scrollbar { + display: none; + } } @utility scrollbar-x-hidden { - -ms-overflow-style: none; - scrollbar-width: none; - &::-webkit-scrollbar:horizontal { - display: none; - } + -ms-overflow-style: none; + scrollbar-width: none; + &::-webkit-scrollbar:horizontal { + display: none; + } } @utility scrollbar-y-hidden { - -ms-overflow-style: none; - scrollbar-width: none; - &::-webkit-scrollbar:vertical { - display: none; - } + -ms-overflow-style: none; + scrollbar-width: none; + &::-webkit-scrollbar:vertical { + display: none; + } } @utility scrollbar-thin { - &::-webkit-scrollbar { - width: 6px; - height: 8px; - } - &::-webkit-scrollbar-track { - background: transparent; - } - &::-webkit-scrollbar-thumb { - background: var(--border); - border-radius: 4px; - } - &::-webkit-scrollbar-thumb:hover { - background: var(--muted-foreground); - } + &::-webkit-scrollbar { + width: 7px; + height: 7px; + } + &::-webkit-scrollbar-track { + background: transparent; + } + &::-webkit-scrollbar-thumb { + background: var(--border); + border-radius: 4px; + } + &::-webkit-scrollbar-thumb:hover { + background: var(--muted-foreground); + } } @layer base { - * { - @apply border-border outline-ring/50; - } - body { - @apply bg-background text-foreground; - } + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } } diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index c2608bd9..f8e6040f 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -29,11 +29,20 @@ export default function RootLayout({ {process.env.NODE_ENV === "development" && ( -