diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 241da7085..7728a4cf3 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -101,6 +101,11 @@ const config = { position: 'right', label: 'Docs', }, + { + to: '/milestones', + position: 'right', + label: 'Milestones', + }, { to: '/docs/api', position: 'right', diff --git a/docs/package-lock.json b/docs/package-lock.json index 81dd021c0..df2ff7ebf 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -10,6 +10,8 @@ "dependencies": { "@docusaurus/core": "^2.4.3", "@docusaurus/preset-classic": "^2.4.3", + "@mdi/js": "^7.3.67", + "@mdi/react": "^1.6.1", "@mdx-js/react": "^1.6.22", "autoprefixer": "^10.4.13", "classnames": "^2.3.2", @@ -2862,6 +2864,19 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mdi/js": { + "version": "7.3.67", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.3.67.tgz", + "integrity": "sha512-MnRjknFqpTC6FifhGHjZ0+QYq2bAkZFQqIj8JA2AdPZbBxUvr8QSgB2yPAJ8/ob/XkR41xlg5majDR3c1JP1hw==" + }, + "node_modules/@mdi/react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", + "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", + "dependencies": { + "prop-types": "^15.7.2" + } + }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -16932,6 +16947,19 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@mdi/js": { + "version": "7.3.67", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.3.67.tgz", + "integrity": "sha512-MnRjknFqpTC6FifhGHjZ0+QYq2bAkZFQqIj8JA2AdPZbBxUvr8QSgB2yPAJ8/ob/XkR41xlg5majDR3c1JP1hw==" + }, + "@mdi/react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", + "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", + "requires": { + "prop-types": "^15.7.2" + } + }, "@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", diff --git a/docs/package.json b/docs/package.json index ffab7f7be..19c972fbb 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,6 +19,8 @@ "dependencies": { "@docusaurus/core": "^2.4.3", "@docusaurus/preset-classic": "^2.4.3", + "@mdi/js": "^7.3.67", + "@mdi/react": "^1.6.1", "@mdx-js/react": "^1.6.22", "autoprefixer": "^10.4.13", "classnames": "^2.3.2", diff --git a/docs/src/components/timeline.tsx b/docs/src/components/timeline.tsx new file mode 100644 index 000000000..292573603 --- /dev/null +++ b/docs/src/components/timeline.tsx @@ -0,0 +1,86 @@ +import React from 'react'; +import Icon from '@mdi/react'; +import { mdiCheckboxMarkedCircleOutline } from '@mdi/js'; +import useIsBrowser from '@docusaurus/useIsBrowser'; + +export interface Item { + icon: string; + title: string; + description?: string; + release: string; + tag?: string; + date: Date; +} + +interface Props { + items: Item[]; +} + +export default function Timeline({ items }: Props): JSX.Element { + const isBrowser = useIsBrowser(); + + return ( + + ); +} diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b66..000000000 --- a/docs/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/docs/src/pages/milestones.tsx b/docs/src/pages/milestones.tsx new file mode 100644 index 000000000..673c7251d --- /dev/null +++ b/docs/src/pages/milestones.tsx @@ -0,0 +1,509 @@ +import { + mdiAccountGroup, + mdiAndroid, + mdiAppleIos, + mdiArchiveOutline, + mdiBookSearchOutline, + mdiCheckAll, + mdiCheckboxMarked, + mdiCollage, + mdiDevices, + mdiFaceMan, + mdiFaceManOutline, + mdiFile, + mdiFileSearch, + mdiFolder, + mdiHeart, + mdiImage, + mdiImageAlbum, + mdiImageMultipleOutline, + mdiImageSearch, + mdiKeyboardSettingsOutline, + mdiMagnify, + mdiMap, + mdiMaterialDesign, + mdiMerge, + mdiMonitor, + mdiMotionPlayOutline, + mdiPanVertical, + mdiPartyPopper, + mdiRaw, + mdiRotate360, + mdiSecurity, + mdiServer, + mdiShareAll, + mdiShareCircle, + mdiStar, + mdiTag, + mdiText, + mdiThemeLightDark, + mdiTrashCanOutline, + mdiVideo, + mdiWeb, +} from '@mdi/js'; +import Layout from '@theme/Layout'; +import React from 'react'; +import Timeline, { Item } from '../components/timeline'; + +const items: Item[] = [ + { + icon: mdiTrashCanOutline, + title: 'Trash Feature', + description: 'Trash, restore from trash, and automatically empty the recycle bin after 30 days.', + release: 'v1.82.0', + tag: 'v1.82.0', + date: new Date(2023, 9, 17), + }, + { + icon: mdiBookSearchOutline, + title: 'External Libraries', + description: 'Automatically import media into Immich based on imports paths and ignore patterns.', + release: 'v1.79.0', + tag: 'v1.79.0', + date: new Date(2023, 8, 21), + }, + { + icon: mdiMap, + title: 'Map View (Mobile)', + description: 'Heat map implementation in the mobile app.', + release: 'v1.76.0', + tag: 'v1.76.0', + date: new Date(2023, 7, 29), + }, + { + icon: mdiFile, + title: 'Configuration File', + description: 'Auto-configure an Immich installation via a configuration file.', + release: 'v1.75.0', + tag: 'v1.75.0', + date: new Date(2023, 7, 26), + }, + { + icon: mdiMonitor, + title: 'Slideshow Mode (Web)', + description: 'Start a full-screen slideshow from an Album on the web.', + release: 'v1.75.0', + tag: 'v1.75.0', + date: new Date(2023, 7, 26), + }, + { + icon: mdiServer, + title: 'Hardware Transcoding', + description: 'Support hardware acceleration (QuickSync, VAAPI, and Nvidia) for video transcoding.', + release: 'v1.72.0', + tag: 'v1.72.0', + date: new Date(2023, 7, 6), + }, + { + icon: mdiImageAlbum, + title: 'View Albums via Time Buckets', + description: 'Upgrade albums to use time buckets, an optimized virtual viewport.', + release: 'v1.72.0', + tag: 'v1.72.0', + date: new Date(2023, 7, 6), + }, + { + icon: mdiImageAlbum, + title: 'Album Description', + description: 'Save an album description.', + release: 'v1.72.0', + tag: 'v1.72.0', + date: new Date(2023, 7, 6), + }, + { + icon: mdiRotate360, + title: '360° Photos (Web)', + description: 'View 360° Photos on the web.', + release: 'v1.71.0', + tag: 'v1.71.0', + date: new Date(2023, 6, 29), + }, + { + icon: mdiMotionPlayOutline, + title: 'Android Motion Photos', + description: 'Add support for Android Motion Photos.', + release: 'v1.69.0', + tag: 'v1.69.0', + date: new Date(2023, 6, 23), + }, + { + icon: mdiFaceManOutline, + title: 'Show/Hide Faces', + description: 'Add the options to show or hide faces.', + release: 'v1.68.0', + tag: 'v1.68.0', + date: new Date(2023, 6, 20), + }, + { + icon: mdiMerge, + title: 'Merge Faces', + description: 'Add the ability to merge multiple faces together.', + release: 'v1.67.0', + tag: 'v1.67.0', + date: new Date(2023, 6, 14), + }, + { + icon: mdiImage, + title: 'Feature Photo', + description: 'Add the option to change the feature photo for a person.', + release: 'v1.66.0', + tag: 'v1.66.0', + date: new Date(2023, 6, 4), + }, + { + icon: mdiKeyboardSettingsOutline, + title: 'Multi-Select via SHIFT', + description: 'Add the option to multi-select while holding SHIFT.', + release: 'v1.66.0', + tag: 'v1.66.0', + date: new Date(2023, 6, 4), + }, + { + icon: mdiImageMultipleOutline, + title: 'Memories (Mobile)', + description: 'View "On this day..." memories in the mobile app.', + release: 'v1.65.0', + tag: 'v1.65.0', + date: new Date(2023, 5, 30), + }, + { + icon: mdiFaceMan, + title: 'Facial Recognition (Mobile)', + description: 'View detected faces in the mobile app.', + release: 'v1.63.0', + tag: 'v1.63.0', + date: new Date(2023, 5, 24), + }, + { + icon: mdiImageMultipleOutline, + title: 'Memories (Web)', + description: 'View pictures taken in past years on this day on the web.', + release: 'v1.61.0', + tag: 'v1.61.0', + date: new Date(2023, 5, 16), + }, + { + icon: mdiCollage, + title: 'Justified Layout (Web)', + description: 'Implement justified layout (collage) on the web.', + release: 'v1.61.0', + tag: 'v1.61.0', + date: new Date(2023, 5, 16), + }, + { + icon: mdiRaw, + title: 'RAW File Formats', + description: 'Support for RAW file formats.', + release: 'v1.61.0', + tag: 'v1.61.0', + date: new Date(2023, 5, 16), + }, + { + icon: mdiShareAll, + title: 'Partner Sharing (Mobile)', + description: 'View shared partner photos in the mobile app.', + release: 'v1.58.0', + tag: 'v1.58.0', + date: new Date(2023, 4, 28), + }, + { + icon: mdiFile, + title: 'XMP Sidecar', + description: 'Attach XMP Sidecar files to assets.', + release: 'v1.58.0', + tag: 'v1.58.0', + date: new Date(2023, 4, 28), + }, + { + icon: mdiFolder, + title: 'Custom Storage Label', + description: 'Replace the user UUID in the storage template with a custom label.', + release: 'v1.57.0', + tag: 'v1.57.0', + date: new Date(2023, 4, 23), + }, + { + icon: mdiShareCircle, + title: 'Partner Sharing', + description: 'Share your entire collection with another user.', + release: 'v1.56.0', + tag: 'v1.56.0', + date: new Date(2023, 4, 18), + }, + { + icon: mdiFaceMan, + title: 'Facial Recognition', + description: 'Detect faces in pictures and cluster them together as people, which can be named.', + release: 'v1.56.0', + tag: 'v1.56.0', + date: new Date(2023, 4, 18), + }, + { + icon: mdiMap, + title: 'Map View (Web)', + description: 'View a global map, with clusters of photos based on corresponding GPS data.', + release: 'v1.55.0', + tag: 'v1.55.0', + date: new Date(2023, 4, 9), + }, + { + icon: mdiDevices, + title: 'Manage Auth Devices', + description: 'Manage logged-in devices and revoke access from User Settings.', + release: 'v1.55.0', + tag: 'v1.55.0', + date: new Date(2023, 4, 9), + }, + { + icon: mdiStar, + description: 'Reach 10K Starts on GitHub!', + title: '10,000 Stars', + release: 'v1.54.0', + tag: 'v1.54.0', + date: new Date(2023, 3, 18), + }, + { + icon: mdiText, + title: 'Asset Descriptions', + description: 'Save an asset description', + release: 'v1.54.0', + tag: 'v1.54.0', + date: new Date(2023, 3, 18), + }, + { + icon: mdiArchiveOutline, + title: 'Archiving', + description: 'Remove assets from the main timeline by archiving them.', + release: 'v1.54.0', + tag: 'v1.54.0', + date: new Date(2023, 3, 18), + }, + { + icon: mdiDevices, + title: 'Responsive Web App', + description: 'Optimize the web app for small screen.', + release: 'v1.54.0', + tag: 'v1.54.0', + date: new Date(2023, 3, 18), + }, + { + icon: mdiFileSearch, + title: 'Search By Metadata', + description: 'Search images by filename, description, tagged people, make, model, and other metadata.', + release: 'v1.52.0', + tag: 'v1.52.0', + date: new Date(2023, 2, 29), + }, + { + icon: mdiImageSearch, + title: 'CLIP Search', + description: 'Search images with free-form text like "Sunset at the beach".', + release: 'v1.51.0', + tag: 'v1.51.0', + date: new Date(2023, 2, 20), + }, + { + icon: mdiMagnify, + title: 'Explore Page', + description: 'View tagged places, object, and people.', + release: 'v1.51.0', + tag: 'v1.51.0', + date: new Date(2023, 2, 20), + }, + { + icon: mdiAppleIos, + title: 'iOS Background Uploads', + description: 'Automatically backup pictures in the background on iOS.', + release: 'v1.48.0', + tag: 'v1.48.0', + date: new Date(2023, 1, 21), + }, + { + icon: mdiMotionPlayOutline, + title: 'Auto-Link Live Photos', + description: 'Automatically link live photos, even when uploaded as separate files.', + release: 'v1.48.0', + tag: 'v1.48.0', + date: new Date(2023, 2, 21), + }, + { + icon: mdiMaterialDesign, + title: 'Material Design 3 (Mobile)', + description: 'Upgrade the mobile app to Material Design 3.', + release: 'v1.47.0', + tag: 'v1.47.0', + date: new Date(2023, 1, 13), + }, + { + icon: mdiHeart, + title: 'Favorites (Mobile)', + description: 'Show favorites on the mobile app.', + release: 'v1.46.0', + tag: 'v1.46.0', + date: new Date(2023, 1, 9), + }, + { + icon: mdiPartyPopper, + title: 'Immich Turns 1', + description: 'Immich is officially one year old.', + release: 'v1.43.0', + tag: 'v1.43.0', + date: new Date(2023, 0, 27), + }, + { + icon: mdiHeart, + title: 'Favorites Page (Web)', + description: 'Favorite and view favorites on the web.', + release: 'v1.43.0', + tag: 'v1.43.0', + date: new Date(2023, 0, 27), + }, + { + icon: mdiShareCircle, + title: 'Public Share Links', + description: 'Share photos and albums publicly via a shared link.', + release: 'v1.41.0', + tag: 'v1.41.1_64-dev', + date: new Date(2023, 0, 10), + }, + { + icon: mdiFolder, + title: 'User-Defined Storage Structure', + description: 'Support custom storage structures.', + release: 'v1.39.0', + tag: 'v1.39.0_61-dev', + date: new Date(2022, 11, 19), + }, + { + icon: mdiMotionPlayOutline, + title: 'iOS Live Photos', + description: 'Backup and display iOS Live Photos.', + release: 'v1.36.0', + tag: 'v1.36.0_55-dev', + date: new Date(2022, 10, 20), + }, + { + icon: mdiSecurity, + title: 'OAuth Integration', + description: 'Support OAuth2 and OIDC capable identity providers.', + release: 'v1.36.0', + tag: 'v1.36.0_55-dev', + date: new Date(2022, 10, 20), + }, + { + icon: mdiWeb, + title: 'Documentation Site', + description: 'Release an official documentation website.', + release: 'v1.33.1', + tag: 'v1.33.0_52-dev', + date: new Date(2022, 9, 26), + }, + { + icon: mdiThemeLightDark, + title: 'Dark Mode (Web)', + description: 'Dark mode on the web.', + release: 'v1.32.0', + tag: ' v1.32.0_50-dev', + date: new Date(2022, 9, 14), + }, + { + icon: mdiPanVertical, + title: 'Virtual Scrollbar (Web)', + description: 'View the main timeline with a virtual scrollbar, allowing to jump to any point in time, instantly.', + release: 'v1.27.0', + tag: 'v1.27.0_37-dev', + date: new Date(2022, 8, 6), + }, + { + icon: mdiCheckAll, + title: 'Checksum Duplication Check', + description: 'Enforce per user sha1 checksum uniqueness.', + release: 'v1.27.0', + tag: 'v1.27.0_37-dev', + date: new Date(2022, 8, 6), + }, + { + icon: mdiAndroid, + title: 'Android Background Backup', + description: 'Automatic backup in the background on Android.', + release: 'v1.24.0', + tag: 'v1.24.0_34-dev', + date: new Date(2022, 7, 19), + }, + { + icon: mdiAccountGroup, + title: 'Admin Portal', + description: 'Manage users and admin settings from the web.', + release: 'v1.10.0', + tag: 'v1.10.0_15-dev', + date: new Date(2022, 4, 29), + }, + { + icon: mdiShareCircle, + title: 'Album Sharing', + description: 'Share albums with other users.', + release: 'v1.7.0', + tag: 'v1.7.0_11-dev ', + date: new Date(2022, 3, 24), + }, + { + icon: mdiTag, + title: 'Image Tagging', + description: 'Tag images with custom values.', + release: 'v1.7.0', + tag: 'v1.7.0_11-dev ', + date: new Date(2022, 3, 24), + }, + { + icon: mdiImage, + title: 'View Exif', + description: 'View metadata about assets.', + release: 'v1.3.0', + tag: 'V1.3.0-dev ', + date: new Date(2022, 2, 22), + }, + { + icon: mdiCheckboxMarked, + title: 'Multi Select', + description: 'Select and execute actions on multiple assets at the same time.', + release: 'v1.2.0', + tag: 'V0.2-dev ', + date: new Date(2022, 1, 8), + }, + { + icon: mdiVideo, + title: 'Video Player', + description: 'Play videos in the web and on mobile.', + release: 'v1.2.0', + tag: 'v0.2-dev ', + date: new Date(2022, 1, 8), + }, + { + icon: mdiPartyPopper, + title: 'First Commit', + description: 'First commit on GitHub, Immich is born.', + release: 'v1.0.0', + date: new Date(2022, 2, 3), + }, +]; + +export default function MilestonePage(): JSX.Element { + return ( + +
+

+ Major Milestones +

+

+ A list of project achievements and milestones,
+ by release date. +

+
+
+ +
+
+
+
+ ); +}