mirror of
https://github.com/suitenumerique/meet.git
synced 2026-11-14 14:12:45 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 896693c147 |
@@ -29,7 +29,6 @@ and this project adheres to
|
||||
- 🍱(frontend) add Portuguese glyphs to Marianne subsetted fonts
|
||||
- 🚸(frontend) bring new speakers to the top of the carousel
|
||||
- 🚸(frontend) bring raised hands into view in the carousel
|
||||
- ⚡️(frontend) serve illustrations as WebP with a PNG fallback
|
||||
|
||||
### Fixed
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ La Suite Meet is fully self-hostable and released under the MIT License, ensurin
|
||||
|
||||
We’re continuously adding new features to enhance your experience, with the latest updates coming soon!
|
||||
|
||||
⭐ **Find La Suite Meet useful?** Click the Star button at the top right of this page. It helps other people and public organisations discover the project.
|
||||
|
||||
### 🚀 Major roll out to all French public servants
|
||||
|
||||
On the 29th of January 2026, Prime Minister Sébastien Lecornu, announced the full deployment of Visio—the French government’s dedicated Meet platform—to all public servants. ([Source in English](https://www.nytimes.com/2026/01/29/world/europe/france-zoom-alternative-visio.html))
|
||||
|
||||
@@ -33,7 +33,7 @@ server {
|
||||
}
|
||||
|
||||
# Serve static files with caching
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|webp|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, max-age=2592000";
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ server {
|
||||
}
|
||||
|
||||
# Serve static files with caching
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|webp|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, max-age=2592000";
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ server {
|
||||
}
|
||||
|
||||
# Serve static files with caching
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|webp|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, max-age=2592000";
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 61 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 75 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 82 KiB |
@@ -1,6 +1,6 @@
|
||||
import { styled } from '@/styled-system/jsx'
|
||||
import { css } from '@/styled-system/css'
|
||||
import { Button, Picture } from '@/primitives'
|
||||
import { Button } from '@/primitives'
|
||||
import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react'
|
||||
import { useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
@@ -30,10 +30,12 @@ const Body = styled('p', {
|
||||
},
|
||||
})
|
||||
|
||||
const image = css({
|
||||
maxHeight: '362px',
|
||||
height: '100%',
|
||||
width: 'fit-content',
|
||||
const Image = styled('img', {
|
||||
base: {
|
||||
maxHeight: '362px',
|
||||
height: '100%',
|
||||
width: 'fit-content',
|
||||
},
|
||||
})
|
||||
|
||||
const Dot = styled('div', {
|
||||
@@ -163,6 +165,7 @@ const carouselNavButton = css({
|
||||
},
|
||||
})
|
||||
|
||||
// todo - optimize how images are imported
|
||||
const SLIDES: Slide[] = [
|
||||
{
|
||||
key: 'slide1',
|
||||
@@ -248,12 +251,7 @@ export const IntroSlider = () => {
|
||||
visible={index === slideIndex}
|
||||
key={index}
|
||||
>
|
||||
<Picture
|
||||
src={slide.src}
|
||||
alt=""
|
||||
role="presentation"
|
||||
className={image}
|
||||
/>
|
||||
<Image src={slide.src} alt="" role="presentation" />
|
||||
<TextAnimation visible={index == slideIndex}>
|
||||
<Heading>{t(`${slide.key}.title`)}</Heading>
|
||||
<Body>{t(`${slide.key}.body`)}</Body>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { A, Div, H, Picture, Text } from '@/primitives'
|
||||
import { A, Div, H, Text } from '@/primitives'
|
||||
import { css } from '@/styled-system/css'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { LoginPrompt } from './LoginPrompt'
|
||||
@@ -45,7 +45,7 @@ export const NoAccessView = ({
|
||||
flexDirection="column"
|
||||
alignItems="center"
|
||||
>
|
||||
<Picture
|
||||
<img
|
||||
src={imagePath}
|
||||
alt=""
|
||||
className={css({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Button, Div, Picture, Text } from '@/primitives'
|
||||
import { Button, Div, Text } from '@/primitives'
|
||||
|
||||
import { css } from '@/styled-system/css'
|
||||
import { useRoomId } from '@/features/rooms/livekit/hooks/useRoomId'
|
||||
@@ -169,7 +169,7 @@ export const ScreenRecordingSidePanel = () => {
|
||||
flexDirection="column"
|
||||
alignItems="center"
|
||||
>
|
||||
<Picture
|
||||
<img
|
||||
src="/assets/intro-slider/4.png"
|
||||
alt=""
|
||||
className={css({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { A, Button, Div, Picture, Text } from '@/primitives'
|
||||
import { A, Button, Div, Text } from '@/primitives'
|
||||
|
||||
import { css } from '@/styled-system/css'
|
||||
import { useRoomId } from '@/features/rooms/livekit/hooks/useRoomId'
|
||||
@@ -183,7 +183,7 @@ export const TranscriptSidePanel = () => {
|
||||
flexDirection="column"
|
||||
alignItems="center"
|
||||
>
|
||||
<Picture
|
||||
<img
|
||||
src="/assets/intro-slider/3.png"
|
||||
alt=""
|
||||
className={css({
|
||||
|
||||
@@ -9,7 +9,7 @@ import { mediaUrl } from '@/api/mediaUrl'
|
||||
import { useUser } from '@/features/auth/api/useUser'
|
||||
import { UserAware } from '@/features/auth/components/UserAware'
|
||||
import { Screen } from '@/layout/Screen'
|
||||
import { H, LinkButton, Picture, Text } from '@/primitives'
|
||||
import { H, LinkButton, Text } from '@/primitives'
|
||||
import { formatDate } from '@/utils/formatDate'
|
||||
import { ErrorScreen } from '@/components/ErrorScreen'
|
||||
import { LoadingScreen } from '@/components/LoadingScreen'
|
||||
@@ -118,7 +118,7 @@ const RecordingDownload = () => {
|
||||
<Screen layout="centered" footer={false}>
|
||||
<Center>
|
||||
<VStack>
|
||||
<Picture
|
||||
<img
|
||||
src="/assets/intro-slider/4.png"
|
||||
alt={''}
|
||||
className={css({
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
import { type ComponentPropsWithoutRef } from 'react'
|
||||
import { css } from '@/styled-system/css'
|
||||
|
||||
const WEBP_CONVERTIBLE_EXTENSION = /\.(png|jpe?g)$/i
|
||||
|
||||
export type PictureProps = Omit<ComponentPropsWithoutRef<'img'>, 'src'> & {
|
||||
src: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Serves the WebP version of an image, and falls back on the original file
|
||||
* for browsers that do not support WebP.
|
||||
*
|
||||
* The `<picture>` wrapper uses `display: contents`, so the `<img>` is laid out
|
||||
* exactly as if it was rendered alone: style it through the usual props.
|
||||
*/
|
||||
export const Picture = ({ src, alt, ...props }: PictureProps) => {
|
||||
const hasWebpVersion = WEBP_CONVERTIBLE_EXTENSION.test(src)
|
||||
return (
|
||||
<picture className={css({ display: 'contents' })}>
|
||||
{hasWebpVersion && (
|
||||
<source
|
||||
srcSet={src.replace(WEBP_CONVERTIBLE_EXTENSION, '.webp')}
|
||||
type="image/webp"
|
||||
/>
|
||||
)}
|
||||
<img src={src} alt={alt} {...props} />
|
||||
</picture>
|
||||
)
|
||||
}
|
||||
@@ -23,7 +23,6 @@ export { Link } from './Link'
|
||||
export { Menu } from './Menu'
|
||||
export { MenuList } from './MenuList'
|
||||
export { P } from './P'
|
||||
export { Picture } from './Picture'
|
||||
export { Popover } from './Popover'
|
||||
export { ScreenReaderAnnouncer } from './ScreenReaderAnnouncer'
|
||||
export { Text } from './Text'
|
||||
|
||||
@@ -80,7 +80,7 @@ data:
|
||||
}
|
||||
|
||||
# Serve static files with caching
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|webp|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
location ~* ^/assets/.*\.(css|js|json|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, max-age=2592000";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user