Merged in feat/SW-1711-switch-icons (pull request #1558)

Switches out all the old icons to new ones, and moves them to the design system. The new icons are of three different types: Materialise Symbol, Nucleo, and Customized. Also adds further mapping between facilities/amenities and icons.

Approved-by: Michael Zetterberg
Approved-by: Erik Tiekstra
This commit is contained in:
Matilda Landström
2025-03-27 09:42:52 +00:00
parent 93c7fe64bf
commit 5de2a993a7
524 changed files with 4442 additions and 6802 deletions

View File

@@ -2,6 +2,7 @@ import "@scandic-hotels/design-system/fonts.css"
import "@/app/globals.css" import "@/app/globals.css"
import "@/public/_static/css/design-system-new-deprecated.css" import "@/public/_static/css/design-system-new-deprecated.css"
import "@scandic-hotels/design-system/style.css" import "@scandic-hotels/design-system/style.css"
import "react-material-symbols/rounded"
import { ReactQueryDevtools } from "@tanstack/react-query-devtools" import { ReactQueryDevtools } from "@tanstack/react-query-devtools"
import Script from "next/script" import Script from "next/script"

View File

@@ -2,6 +2,7 @@ import "@scandic-hotels/design-system/fonts.css"
import "@/app/globals.css" import "@/app/globals.css"
import "@/public/_static/css/design-system-current-deprecated.css" import "@/public/_static/css/design-system-current-deprecated.css"
import "@scandic-hotels/design-system/style.css" import "@scandic-hotels/design-system/style.css"
import "react-material-symbols/rounded"
import Script from "next/script" import Script from "next/script"

View File

@@ -2,11 +2,11 @@
import Link from "next/link" import Link from "next/link"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { partnerSas } from "@/constants/routes/myPages" import { partnerSas } from "@/constants/routes/myPages"
import ErrorCircleFilledIcon from "@/components/Icons/ErrorCircleFilled"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
@@ -18,7 +18,7 @@ export function AlreadyLinkedError() {
return ( return (
<SASModal> <SASModal>
<ErrorCircleFilledIcon height={64} width={64} color="red" /> <MaterialIcon icon="cancel" isFilled size={64} />
<Typography variant="Title/Subtitle/lg"> <Typography variant="Title/Subtitle/lg">
<h1>{intl.formatMessage({ id: "Accounts are already linked" })}</h1> <h1>{intl.formatMessage({ id: "Accounts are already linked" })}</h1>
</Typography> </Typography>

View File

@@ -2,11 +2,11 @@
import { Link } from "react-aria-components" import { Link } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { profile } from "@/constants/routes/myPages" import { profile } from "@/constants/routes/myPages"
import ErrorCircleFilledIcon from "@/components/Icons/ErrorCircleFilled"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
@@ -18,7 +18,12 @@ export function DateOfBirthError() {
return ( return (
<SASModal> <SASModal>
<ErrorCircleFilledIcon height={64} width={64} color="red" /> <MaterialIcon
icon="cancel"
color="Icon/Feedback/Error"
isFilled
size={64}
/>
<Typography variant="Title/Subtitle/lg"> <Typography variant="Title/Subtitle/lg">
<h1>{intl.formatMessage({ id: "Date of birth not matching" })}</h1> <h1>{intl.formatMessage({ id: "Date of birth not matching" })}</h1>
</Typography> </Typography>

View File

@@ -1,10 +1,9 @@
"use client" "use client"
import Image from "next/image" import Image from "next/image"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import ErrorCircleFilledIcon from "@/components/Icons/ErrorCircleFilled"
import { SASModal } from "./SASModal" import { SASModal } from "./SASModal"
import type { ReactNode } from "react" import type { ReactNode } from "react"
@@ -21,7 +20,12 @@ export function GenericError({
return ( return (
<SASModal> <SASModal>
{variant === "error" ? ( {variant === "error" ? (
<ErrorCircleFilledIcon height={64} width={64} color="red" /> <MaterialIcon
icon="cancel"
isFilled
size={64}
color="Icon/Feedback/Error"
/>
) : ( ) : (
<Image <Image
src="/_static/img/scandic-loyalty-time.svg" src="/_static/img/scandic-loyalty-time.svg"

View File

@@ -6,11 +6,11 @@ import { useTransition } from "react"
import { FormProvider, useForm } from "react-hook-form" import { FormProvider, useForm } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { profileEdit } from "@/constants/routes/myPages" import { profileEdit } from "@/constants/routes/myPages"
import { ArrowRightIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Checkbox from "@/components/TempDesignSystem/Form/Checkbox" import Checkbox from "@/components/TempDesignSystem/Form/Checkbox"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -94,7 +94,8 @@ export function LinkAccountForm({
{intl.formatMessage({ {intl.formatMessage({
id: "Edit your personal details", id: "Edit your personal details",
})} })}
<ArrowRightIcon color="peach80" height={18} width={18} />
<MaterialIcon icon="arrow_forward" size={18} color="CurrentColor" />
</Link> </Link>
</div> </div>
<div className={styles.termsAndConditions}> <div className={styles.termsAndConditions}>

View File

@@ -1,10 +1,10 @@
import React from "react" import React from "react"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { partnerSas } from "@/constants/routes/myPages" import { partnerSas } from "@/constants/routes/myPages"
import CheckCircle from "@/components/Icons/CheckCircle"
import { Redirect } from "@/components/Redirect" import { Redirect } from "@/components/Redirect"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -20,7 +20,11 @@ export default async function SASxScandicLinkPage({
return ( return (
<SASModal> <SASModal>
<Redirect url={partnerSas[params.lang]} timeout={3000} /> <Redirect url={partnerSas[params.lang]} timeout={3000} />
<CheckCircle height={64} width={64} color="uiSemanticSuccess" /> <MaterialIcon
icon="check_circle"
size={64}
color="Icon/Feedback/Success"
/>
<Typography variant="Title/Subtitle/lg"> <Typography variant="Title/Subtitle/lg">
<h1>{intl.formatMessage({ id: "Your accounts are linked" })}</h1> <h1>{intl.formatMessage({ id: "Your accounts are linked" })}</h1>
</Typography> </Typography>

View File

@@ -6,11 +6,11 @@ import { useParams, useRouter } from "next/navigation"
import { type ReactNode, useState, useTransition } from "react" import { type ReactNode, useState, useTransition } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { trpc } from "@/lib/trpc/client" import { trpc } from "@/lib/trpc/client"
import ErrorCircleFilledIcon from "@/components/Icons/ErrorCircleFilled"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import { GenericError } from "../components/GenericError" import { GenericError } from "../components/GenericError"
@@ -170,7 +170,12 @@ export default function OneTimePasswordForm({
/> />
{errorMessage && ( {errorMessage && (
<div className={styles["error-message"]}> <div className={styles["error-message"]}>
<ErrorCircleFilledIcon height={20} width={20} color="red" /> <MaterialIcon
icon="cancel"
isFilled
size={20}
color="Icon/Feedback/Error"
/>
<Typography variant="Body/Supporting text (caption)/smRegular"> <Typography variant="Body/Supporting text (caption)/smRegular">
<p style={{ color: "var(--Scandic-Red-60)" }}>{errorMessage}</p> <p style={{ color: "var(--Scandic-Red-60)" }}>{errorMessage}</p>
</Typography> </Typography>

View File

@@ -1,13 +1,13 @@
import Link from "next/link" import Link from "next/link"
import React, { Suspense } from "react" import React, { Suspense } from "react"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { hotelreservation } from "@/constants/routes/hotelReservation" import { hotelreservation } from "@/constants/routes/hotelReservation"
import { partnerSas } from "@/constants/routes/myPages" import { partnerSas } from "@/constants/routes/myPages"
import { getProfileSafely } from "@/lib/trpc/memoizedRequests" import { getProfileSafely } from "@/lib/trpc/memoizedRequests"
import { CalendarAddIcon } from "@/components/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
@@ -129,7 +129,11 @@ async function TransactionCard({
{/* TODO correct link */} {/* TODO correct link */}
<Link href={hotelreservation(lang)} color="none"> <Link href={hotelreservation(lang)} color="none">
{intl.formatMessage({ id: "Book now" })}{" "} {intl.formatMessage({ id: "Book now" })}{" "}
<CalendarAddIcon width={20} height={20} color="currentColor" /> <MaterialIcon
icon="calendar_add_on"
size={20}
color="CurrentColor"
/>
</Link> </Link>
</Button> </Button>
</div> </div>

View File

@@ -1,10 +1,10 @@
import React from "react" import React from "react"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { overview } from "@/constants/routes/myPages" import { overview } from "@/constants/routes/myPages"
import CheckCircle from "@/components/Icons/CheckCircle"
import { Redirect } from "@/components/Redirect" import { Redirect } from "@/components/Redirect"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -20,7 +20,11 @@ export default async function SASxScandicUnlinkSuccessPage({
return ( return (
<SASModal> <SASModal>
<Redirect url={overview[params.lang]} timeout={3000} /> <Redirect url={overview[params.lang]} timeout={3000} />
<CheckCircle height={64} width={64} color="uiSemanticSuccess" /> <MaterialIcon
icon="check_circle"
size={64}
color="Icon/Feedback/Success"
/>
<Typography variant="Title/Subtitle/lg"> <Typography variant="Title/Subtitle/lg">
<h1>{intl.formatMessage({ id: "Your accounts are now unlinked" })}</h1> <h1>{intl.formatMessage({ id: "Your accounts are now unlinked" })}</h1>
</Typography> </Typography>

View File

@@ -2,9 +2,10 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { OpenInNewSmallIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
@@ -53,7 +54,7 @@ export default function JobylonCard({ job }: JobylonCardProps) {
> >
<a href={job.url} target="_blank" rel="noopener noreferrer"> <a href={job.url} target="_blank" rel="noopener noreferrer">
{intl.formatMessage({ id: "View & apply" })} {intl.formatMessage({ id: "View & apply" })}
<OpenInNewSmallIcon /> <MaterialIcon icon="open_in_new" size={20} />
</a> </a>
</Button> </Button>
</div> </div>

View File

@@ -1,6 +1,7 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { serverClient } from "@/lib/trpc/server" import { serverClient } from "@/lib/trpc/server"
import { CheckIcon } from "@/components/Icons"
import MembershipLevelIcon from "@/components/Levels/Icon" import MembershipLevelIcon from "@/components/Levels/Icon"
import BiroScript from "@/components/TempDesignSystem/Text/BiroScript" import BiroScript from "@/components/TempDesignSystem/Text/BiroScript"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -84,9 +85,10 @@ async function LevelCard({ level }: LevelCardProps) {
textAlign="center" textAlign="center"
color="textMediumContrast" color="textMediumContrast"
> >
<CheckIcon <MaterialIcon
icon="check"
className={styles.checkIcon} className={styles.checkIcon}
color="primaryLightOnSurfaceAccent" color="Icon/Interactive/Accent"
/> />
{reward.label} {reward.label}
</Caption> </Caption>

View File

@@ -2,7 +2,8 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import CopyIcon from "@/components/Icons/Copy" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import { toast } from "@/components/TempDesignSystem/Toasts" import { toast } from "@/components/TempDesignSystem/Toasts"
@@ -33,7 +34,7 @@ export default function CopyButton({ membershipNumber }: CopyButtonProps) {
size="small" size="small"
intent="tertiary" intent="tertiary"
> >
<CopyIcon color="pale" /> <MaterialIcon icon="content_copy" color="CurrentColor" />
</Button> </Button>
) )
} }

View File

@@ -1,6 +1,6 @@
import { Minus } from "react-feather" import { Minus } from "react-feather"
import CheckCircle from "@/components/Icons/CheckCircle" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import styles from "./rewardValue.module.css" import styles from "./rewardValue.module.css"
@@ -11,7 +11,13 @@ export default function RewardValue({ reward }: RewardValueProps) {
return <Minus color="var(--UI-Grey-40)" /> return <Minus color="var(--UI-Grey-40)" />
} }
if (!reward.value) { if (!reward.value) {
return <CheckCircle height={32} width={32} color="green" /> return (
<MaterialIcon
icon="check_circle"
size={32}
color="Icon/Feedback/Success"
/>
)
} }
return ( return (
<div className={styles.rewardValueContainer}> <div className={styles.rewardValueContainer}>

View File

@@ -3,7 +3,8 @@
import { motion } from "framer-motion" import { motion } from "framer-motion"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { CheckCircleIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
import styles from "./redeem.module.css" import styles from "./redeem.module.css"
@@ -23,7 +24,7 @@ export default function ActiveRedeemedBadge() {
ease: "easeInOut", ease: "easeInOut",
}} }}
> >
<CheckCircleIcon color="uiSemanticSuccess" /> <MaterialIcon icon="check_circle" color="Icon/Feedback/Success" />
</motion.div> </motion.div>
<Caption>{intl.formatMessage({ id: "Active" })}</Caption> <Caption>{intl.formatMessage({ id: "Active" })}</Caption>
</div> </div>

View File

@@ -2,7 +2,8 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import CopyIcon from "@/components/Icons/Copy" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -51,7 +52,7 @@ export default function Campaign({ reward }: { reward: Campaign }) {
theme="base" theme="base"
intent="primary" intent="primary"
> >
<CopyIcon color="pale" /> <MaterialIcon icon="content_copy" color="CurrentColor" />
{intl.formatMessage({ id: "Copy promotion code" })} {intl.formatMessage({ id: "Copy promotion code" })}
</Button> </Button>
</footer> </footer>

View File

@@ -2,10 +2,11 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import Countdown from "@/components/Countdown" import Countdown from "@/components/Countdown"
import { CheckCircleIcon } from "@/components/Icons"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
import useRedeemFlow from "./useRedeemFlow" import useRedeemFlow from "./useRedeemFlow"
@@ -20,7 +21,7 @@ export default function TimedRedeemedBadge() {
return ( return (
<> <>
<div className={styles.redeemed}> <div className={styles.redeemed}>
<CheckCircleIcon color="uiSemanticSuccess" /> <MaterialIcon icon="check_circle" color="Icon/Feedback/Success" />
<Caption> <Caption>
{intl.formatMessage({ {intl.formatMessage({
id: "Redeemed & valid through:", id: "Redeemed & valid through:",

View File

@@ -10,9 +10,10 @@ import {
} from "react-aria-components" } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { trpc } from "@/lib/trpc/client" import { trpc } from "@/lib/trpc/client"
import { CloseLargeIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
import { isRestaurantOnSiteTierReward } from "@/utils/rewards" import { isRestaurantOnSiteTierReward } from "@/utils/rewards"
@@ -117,7 +118,7 @@ export default function Redeem({ reward, membershipNumber }: RedeemProps) {
type="button" type="button"
className={styles.modalClose} className={styles.modalClose}
> >
<CloseLargeIcon /> <MaterialIcon icon="close" />
</button> </button>
</header> </header>

View File

@@ -1,11 +1,13 @@
import { type IconProps } from "@scandic-hotels/design-system/Icons"
import { REWARD_IDS } from "@/constants/rewards" import { REWARD_IDS } from "@/constants/rewards"
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconName } from "@/components/Icons/iconName"
import { IllustrationByIconName } from "@/components/Icons/IllustrationByIconName"
import { isValidRewardId } from "@/utils/rewards" import { isValidRewardId } from "@/utils/rewards"
import type { FC } from "react" import type { FC } from "react"
import { IconName, type IconProps } from "@/types/components/icon"
import type { RewardId } from "@/types/components/myPages/rewards" import type { RewardId } from "@/types/components/myPages/rewards"
function getIconForRewardId(rewardId: RewardId): IconName { function getIconForRewardId(rewardId: RewardId): IconName {
@@ -61,9 +63,9 @@ function getIconForRewardId(rewardId: RewardId): IconName {
export function mapRewardToIcon(rewardId: string): FC<IconProps> | null { export function mapRewardToIcon(rewardId: string): FC<IconProps> | null {
if (!isValidRewardId(rewardId)) { if (!isValidRewardId(rewardId)) {
// TODO: Update once UX has decided on fallback icon. // TODO: Update once UX has decided on fallback icon.
return getIconByIconName(IconName.GiftOpen) return IllustrationByIconName(IconName.GiftOpen)
} }
const iconName = getIconForRewardId(rewardId) const iconName = getIconForRewardId(rewardId)
return getIconByIconName(iconName) return IllustrationByIconName(iconName)
} }

View File

@@ -11,7 +11,7 @@ const sizeMap = {
export function RewardIcon({ export function RewardIcon({
rewardId, rewardId,
size = "medium", iconSize = "medium",
...props ...props
}: RewardIconProps) { }: RewardIconProps) {
const IconComponent = mapRewardToIcon(rewardId) const IconComponent = mapRewardToIcon(rewardId)
@@ -20,8 +20,8 @@ export function RewardIcon({
return ( return (
<IconComponent <IconComponent
{...props} {...props}
width={sizeMap[size].width} width={sizeMap[iconSize].width}
height={sizeMap[size].height} height={sizeMap[iconSize].height}
/> />
) )
} }

View File

@@ -3,8 +3,9 @@
import { useParams } from "next/navigation" import { useParams } from "next/navigation"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Dialog from "@/components/Dialog" import Dialog from "@/components/Dialog"
import { ChevronRightSmallIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import type { LangParams } from "@/types/params" import type { LangParams } from "@/types/params"
@@ -27,7 +28,7 @@ export function UnlinkSAS() {
trigger={ trigger={
<Button intent="text" theme="base"> <Button intent="text" theme="base">
{intl.formatMessage({ id: "Unlink accounts" })} {intl.formatMessage({ id: "Unlink accounts" })}
<ChevronRightSmallIcon color="burgundy" /> <MaterialIcon icon="chevron_right" size={20} color="CurrentColor" />
</Button> </Button>
} }
/> />

View File

@@ -1,13 +1,16 @@
import { cx } from "class-variance-authority" import { cx } from "class-variance-authority"
import { type ReactNode, Suspense } from "react" import { type ReactNode, Suspense } from "react"
import {
DiamondAddIcon,
MaterialIcon,
} from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { TIER_TO_FRIEND_MAP } from "@/constants/membershipLevels" import { TIER_TO_FRIEND_MAP } from "@/constants/membershipLevels"
import { env } from "@/env/server" import { env } from "@/env/server"
import { getProfile } from "@/lib/trpc/memoizedRequests" import { getProfile } from "@/lib/trpc/memoizedRequests"
import { DiamondIcon, InfoCircleIcon, LinkIcon } from "@/components/Icons"
import SectionContainer from "@/components/Section/Container" import SectionContainer from "@/components/Section/Container"
import SectionHeader from "@/components/Section/Header" import SectionHeader from "@/components/Section/Header"
import SectionLink from "@/components/Section/Link" import SectionLink from "@/components/Section/Link"
@@ -56,7 +59,7 @@ export default async function SASLinkedAccount({
<div className={styles.mutationSection}> <div className={styles.mutationSection}>
<Typography variant="Body/Supporting text (caption)/smRegular"> <Typography variant="Body/Supporting text (caption)/smRegular">
<p className={styles.caption}> <p className={styles.caption}>
<InfoCircleIcon height={20} width={20} /> <MaterialIcon icon="info" size={20} />
{intl.formatMessage({ {intl.formatMessage({
id: "Changes in tier match can take up to 24 hours to be displayed.", id: "Changes in tier match can take up to 24 hours to be displayed.",
})} })}
@@ -207,13 +210,9 @@ async function TierMatchMessage({
} }
const iconMap: Record<MatchState, ReactNode> = { const iconMap: Record<MatchState, ReactNode> = {
boostedBySAS: ( boostedBySAS: <DiamondAddIcon size={20} />,
<DiamondIcon height={20} width={20} color="uiTextMediumContrast" /> boostedByScandic: <DiamondAddIcon size={20} />,
), noBoost: <MaterialIcon icon="link" size={20} />,
boostedByScandic: (
<DiamondIcon height={20} width={20} color="uiTextMediumContrast" />
),
noBoost: <LinkIcon height={20} width={20} color="uiTextMediumContrast" />,
} }
return ( return (

View File

@@ -1,9 +1,8 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { getProfileSafely } from "@/lib/trpc/memoizedRequests" import { getProfileSafely } from "@/lib/trpc/memoizedRequests"
import ArrowFromIcon from "@/components/Icons/ArrowFrom"
import ArrowToIcon from "@/components/Icons/ArrowTo"
import Image from "@/components/Image" import Image from "@/components/Image"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -77,7 +76,7 @@ async function TransferPointsFormContent({
<Typography variant="Tag/sm"> <Typography variant="Tag/sm">
<p>{intl.formatMessage({ id: "Transfer from" })}</p> <p>{intl.formatMessage({ id: "Transfer from" })}</p>
</Typography> </Typography>
<ArrowFromIcon /> <MaterialIcon icon="upload" />
</div> </div>
<Typography variant="Title/Subtitle/md"> <Typography variant="Title/Subtitle/md">
<p>{intl.formatMessage({ id: "SAS EuroBonus" })}</p> <p>{intl.formatMessage({ id: "SAS EuroBonus" })}</p>
@@ -117,7 +116,7 @@ async function TransferPointsFormContent({
<div className={styles.transferTo}> <div className={styles.transferTo}>
<div> <div>
<div className={styles.labelWithIcon}> <div className={styles.labelWithIcon}>
<ArrowToIcon /> <MaterialIcon icon="download" />
<Typography variant="Tag/sm"> <Typography variant="Tag/sm">
<p>{intl.formatMessage({ id: "Transfer to" })}</p> <p>{intl.formatMessage({ id: "Transfer to" })}</p>
</Typography> </Typography>

View File

@@ -15,10 +15,10 @@ import {
import { FormProvider, useForm } from "react-hook-form" import { FormProvider, useForm } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { SAS_TRANSFER_POINT_KEY } from "@/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/sasUtils" import { SAS_TRANSFER_POINT_KEY } from "@/app/[lang]/(partner)/(sas)/(protected)/sas-x-scandic/sasUtils"
import SwipeIcon from "@/components/Icons/Swipe"
import Image from "@/components/Image" import Image from "@/components/Image"
import Modal from "@/components/Modal" import Modal from "@/components/Modal"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
@@ -77,7 +77,7 @@ export function TransferPointsFormClient({
<SliderFill /> <SliderFill />
<SliderThumb className={styles.sliderThumb}> <SliderThumb className={styles.sliderThumb}>
<SliderOutput className={styles.sliderOutput} /> <SliderOutput className={styles.sliderOutput} />
<SwipeIcon color="white" /> <MaterialIcon icon="swipe" color="Icon/Inverted" />
</SliderThumb> </SliderThumb>
</SliderTrack> </SliderTrack>
</Slider> </Slider>

View File

@@ -2,7 +2,8 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ChevronDownIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import styles from "./button.module.css" import styles from "./button.module.css"
@@ -24,7 +25,11 @@ export default function ShowMoreButton({
theme="base" theme="base"
intent="text" intent="text"
> >
<ChevronDownIcon width={20} height={20} /> <MaterialIcon
icon="keyboard_arrow_down"
size={20}
color="CurrentColor"
/>
{intl.formatMessage({ id: "Show more" })} {intl.formatMessage({ id: "Show more" })}
</Button> </Button>
</div> </div>

View File

@@ -1,7 +1,8 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { homeHrefs } from "@/constants/homeHrefs" import { homeHrefs } from "@/constants/homeHrefs"
import { env } from "@/env/server" import { env } from "@/env/server"
import { ArrowRightIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Title from "@/components/TempDesignSystem/Text/Title" import Title from "@/components/TempDesignSystem/Text/Title"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -33,7 +34,7 @@ export default async function EmptyUpcomingStaysBlock() {
color="peach80" color="peach80"
> >
{intl.formatMessage({ id: "Get inspired" })} {intl.formatMessage({ id: "Get inspired" })}
<ArrowRightIcon color="peach80" /> <MaterialIcon icon="arrow_forward" color="CurrentColor" />
</Link> </Link>
</section> </section>
) )

View File

@@ -2,9 +2,10 @@
import { useState } from "react" import { useState } from "react"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { CalendarIcon } from "@/components/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import LoadingSpinner from "@/components/LoadingSpinner" import LoadingSpinner from "@/components/LoadingSpinner"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -51,7 +52,10 @@ export default function StayCard({ stay }: StayCardProps) {
{hotelInformation.hotelName} {hotelInformation.hotelName}
</Title> </Title>
<div className={styles.date}> <div className={styles.date}>
<CalendarIcon color="burgundy" height={24} width={24} /> <MaterialIcon
icon="calendar_month"
color="Icon/Interactive/Default"
/>
<Caption asChild> <Caption asChild>
<time dateTime={arrivalDateTime}>{arrivalDate}</time> <time dateTime={arrivalDateTime}>{arrivalDate}</time>
</Caption> </Caption>

View File

@@ -1,7 +1,8 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { homeHrefs } from "@/constants/homeHrefs" import { homeHrefs } from "@/constants/homeHrefs"
import { env } from "@/env/server" import { env } from "@/env/server"
import { ArrowRightIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Title from "@/components/TempDesignSystem/Text/Title" import Title from "@/components/TempDesignSystem/Text/Title"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -33,7 +34,8 @@ export default async function EmptyUpcomingStaysBlock() {
color="peach80" color="peach80"
> >
{intl.formatMessage({ id: "Get inspired" })} {intl.formatMessage({ id: "Get inspired" })}
<ArrowRightIcon color="peach80" />
<MaterialIcon color="CurrentColor" icon="arrow_forward" />
</Link> </Link>
</section> </section>
) )

View File

@@ -1,4 +1,5 @@
import HotelLogo from "@/components/Icons/Logos" import { HotelLogo } from "@scandic-hotels/design-system/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"

View File

@@ -1,5 +1,6 @@
import { SurpriseIcon } from "@scandic-hotels/design-system/Icons"
import { auth } from "@/auth" import { auth } from "@/auth"
import { SurpriseIcon } from "@/components/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"

View File

@@ -1,4 +1,5 @@
import { ArrowRightIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -23,7 +24,7 @@ export default function ShortcutsListItems({
<Body textTransform="bold" color="burgundy"> <Body textTransform="bold" color="burgundy">
<span>{shortcut.text || shortcut.title}</span> <span>{shortcut.text || shortcut.title}</span>
</Body> </Body>
<ArrowRightIcon color="burgundy" width={24} height={24} /> <MaterialIcon color="CurrentColor" icon="arrow_forward" />
</Link> </Link>
</li> </li>
))} ))}

View File

@@ -1,4 +1,4 @@
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconByIconName } from "@/components/Icons/IconByIconName"
import JsonToHtml from "@/components/JsonToHtml" import JsonToHtml from "@/components/JsonToHtml"
import { renderOptions } from "./renderOptions" import { renderOptions } from "./renderOptions"
@@ -10,8 +10,9 @@ import type { UspGridProps, UspIcon } from "@/types/components/blocks/uspGrid"
function UspIcon({ icon }: { icon: UspIcon }) { function UspIcon({ icon }: { icon: UspIcon }) {
const iconName = getUspIconName(icon) const iconName = getUspIconName(icon)
const Icon = iconName ? getIconByIconName(iconName) : null return iconName ? (
return Icon ? <Icon color="red" /> : null <IconByIconName iconName={iconName} color="Icon/Interactive/Accent" />
) : null
} }
export default function UspGrid({ usp_grid }: UspGridProps) { export default function UspGrid({ usp_grid }: UspGridProps) {

View File

@@ -1,5 +1,6 @@
import { IconName } from "@/components/Icons/iconName"
import type { UspIcon } from "@/types/components/blocks/uspGrid" import type { UspIcon } from "@/types/components/blocks/uspGrid"
import { IconName } from "@/types/components/icon"
export function getUspIconName(icon?: UspIcon | null) { export function getUspIconName(icon?: UspIcon | null) {
switch (icon) { switch (icon) {

View File

@@ -4,6 +4,8 @@ import { zodResolver } from "@hookform/resolvers/zod"
import { use, useEffect, useRef, useState } from "react" import { use, useEffect, useRef, useState } from "react"
import { FormProvider, useForm } from "react-hook-form" import { FormProvider, useForm } from "react-hook-form"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { REDEMPTION } from "@/constants/booking" import { REDEMPTION } from "@/constants/booking"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { trpc } from "@/lib/trpc/client" import { trpc } from "@/lib/trpc/client"
@@ -13,7 +15,6 @@ import Form, {
BookingWidgetFormSkeleton, BookingWidgetFormSkeleton,
} from "@/components/Forms/BookingWidget" } from "@/components/Forms/BookingWidget"
import { bookingWidgetSchema } from "@/components/Forms/BookingWidget/schema" import { bookingWidgetSchema } from "@/components/Forms/BookingWidget/schema"
import { CloseLargeIcon } from "@/components/Icons"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
import useStickyPosition from "@/hooks/useStickyPosition" import useStickyPosition from "@/hooks/useStickyPosition"
import { debounce } from "@/utils/debounce" import { debounce } from "@/utils/debounce"
@@ -211,7 +212,7 @@ export default function BookingWidgetClient({
onClick={closeMobileSearch} onClick={closeMobileSearch}
type="button" type="button"
> >
<CloseLargeIcon /> <MaterialIcon icon="close" />
</button> </button>
<Form locations={locations} type={type} onClose={closeMobileSearch} /> <Form locations={locations} type={type} onClose={closeMobileSearch} />
</div> </div>

View File

@@ -3,9 +3,10 @@
import { useWatch } from "react-hook-form" import { useWatch } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { EditIcon, SearchIcon } from "@/components/Icons"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -115,7 +116,7 @@ export default function MobileToggleButton({
</Body> </Body>
</div> </div>
<div className={styles.icon}> <div className={styles.icon}>
<SearchIcon color="white" /> <MaterialIcon icon="search" color="Icon/Inverted" />
</div> </div>
</> </>
)} )}
@@ -139,7 +140,7 @@ export default function MobileToggleButton({
</Caption> </Caption>
</div> </div>
<div className={styles.icon}> <div className={styles.icon}>
<EditIcon color="white" /> <MaterialIcon icon="edit_square" color="Icon/Inverted" />
</div> </div>
</> </>
)} )}
@@ -169,7 +170,7 @@ export function MobileToggleButtonSkeleton() {
<SkeletonShimmer height="24px" /> <SkeletonShimmer height="24px" />
</div> </div>
<div className={styles.icon}> <div className={styles.icon}>
<SearchIcon color="white" /> <MaterialIcon icon="search" color="Icon/Inverted" />
</div> </div>
</div> </div>
) )

View File

@@ -3,7 +3,7 @@
import { cx } from "class-variance-authority" import { cx } from "class-variance-authority"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ArrowRightIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useCarousel } from "./CarouselContext" import { useCarousel } from "./CarouselContext"
@@ -25,7 +25,7 @@ export function CarouselPrevious({ className, ...props }: CarouselButtonProps) {
aria-label={intl.formatMessage({ id: "Previous slide" })} aria-label={intl.formatMessage({ id: "Previous slide" })}
{...props} {...props}
> >
<ArrowRightIcon color="burgundy" className={styles.prevIcon} /> <MaterialIcon color="Icon/Interactive/Default" icon="arrow_back" />
</button> </button>
) )
} }
@@ -44,7 +44,7 @@ export function CarouselNext({ className, ...props }: CarouselButtonProps) {
aria-label={intl.formatMessage({ id: "Next slide" })} aria-label={intl.formatMessage({ id: "Next slide" })}
{...props} {...props}
> >
<ArrowRightIcon color="burgundy" /> <MaterialIcon color="Icon/Interactive/Default" icon="arrow_forward" />
</button> </button>
) )
} }

View File

@@ -41,10 +41,6 @@
right: -20px; right: -20px;
} }
.prevIcon {
transform: rotate(180deg);
}
.dots { .dots {
display: flex; display: flex;
justify-content: center; justify-content: center;

View File

@@ -4,11 +4,11 @@ import Link from "next/link"
import { useCallback, useEffect, useRef } from "react" import { useCallback, useEffect, useRef } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { HotelLogo, TripadvisorIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map" import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map"
import { mapFacilityToIcon } from "@/components/ContentType/HotelPage/data" import { FacilityToIcon } from "@/components/ContentType/HotelPage/data"
import { TripAdvisorIcon } from "@/components/Icons"
import HotelLogo from "@/components/Icons/Logos"
import ImageGallery from "@/components/ImageGallery" import ImageGallery from "@/components/ImageGallery"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
@@ -76,7 +76,7 @@ export default function HotelListItem({ hotel, url }: HotelListItemProps) {
/> />
{hotel.ratings?.tripAdvisor.rating && ( {hotel.ratings?.tripAdvisor.rating && (
<div className={styles.tripAdvisor}> <div className={styles.tripAdvisor}>
<TripAdvisorIcon color="burgundy" /> <TripadvisorIcon color="Icon/Interactive/Default" />
<Caption color="burgundy"> <Caption color="burgundy">
{hotel.ratings.tripAdvisor.rating} {hotel.ratings.tripAdvisor.rating}
</Caption> </Caption>
@@ -110,12 +110,12 @@ export default function HotelListItem({ hotel, url }: HotelListItemProps) {
</div> </div>
<ul className={styles.amenityList}> <ul className={styles.amenityList}>
{amenities.map((amenity) => { {amenities.map((amenity) => {
const IconComponent = mapFacilityToIcon(amenity.id) const Icon = (
<FacilityToIcon id={amenity.id} color="Icon/Default" size={20} />
)
return ( return (
<li className={styles.amenityItem} key={amenity.id}> <li className={styles.amenityItem} key={amenity.id}>
{IconComponent && ( {Icon && Icon}
<IconComponent color="grey80" width={20} height={20} />
)}
<span className={styles.amenityName}>{amenity.name}</span> <span className={styles.amenityName}>{amenity.name}</span>
</li> </li>
) )

View File

@@ -1,4 +1,5 @@
import { ArrowRightIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem" import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -50,7 +51,7 @@ export default async function Destination({
}, },
{ country: country } { country: country }
)} )}
<ArrowRightIcon color="burgundy" /> <MaterialIcon icon="arrow_forward" color="CurrentColor" />
</Link> </Link>
)} )}
</div> </div>

View File

@@ -21,7 +21,7 @@ export default function ExperienceList({ experiences }: ExperienceListProps) {
{experienceList.map(({ Icon, name }) => ( {experienceList.map(({ Icon, name }) => (
<li key={name}> <li key={name}>
<Chip variant="tag"> <Chip variant="tag">
<Icon width={20} height={20} /> <Icon size={20} />
{name} {name}
</Chip> </Chip>
</li> </li>

View File

@@ -1,58 +0,0 @@
import {
BikeIcon,
CityIcon,
FamilyIcon,
KayakingIcon,
MuseumIcon,
NightlifeIcon,
StarFilledIcon,
} from "@/components/Icons"
import type { FC } from "react"
import type { IntlShape } from "react-intl"
import type { IconProps } from "@/types/components/icon"
export function mapExperiencesToListData(
experiences: string[],
intl: IntlShape
): { Icon: FC<IconProps>; name: string }[] {
return experiences.map((experience) => {
switch (experience) {
case "Hiking":
return {
Icon: StarFilledIcon,
name: intl.formatMessage({ id: "Hiking" }),
}
case "Kayaking":
return {
Icon: KayakingIcon,
name: intl.formatMessage({ id: "Kayaking" }),
}
case "Bike friendly":
return {
Icon: BikeIcon,
name: intl.formatMessage({ id: "Bike friendly" }),
}
case "Museums":
return { Icon: MuseumIcon, name: intl.formatMessage({ id: "Museums" }) }
case "Family friendly":
return {
Icon: FamilyIcon,
name: intl.formatMessage({ id: "Family friendly" }),
}
case "City pulse":
return {
Icon: CityIcon,
name: intl.formatMessage({ id: "City pulse" }),
}
case "Nightlife":
return {
Icon: NightlifeIcon,
name: intl.formatMessage({ id: "Nightlife" }),
}
default:
return { Icon: StarFilledIcon, name: experience }
}
})
}

View File

@@ -0,0 +1,73 @@
import {
MaterialIcon,
type MaterialIconSetIconProps,
} from "@scandic-hotels/design-system/Icons"
import type { FC } from "react"
import type { IntlShape } from "react-intl"
export function mapExperiencesToListData(
experiences: string[],
intl: IntlShape
): { Icon: FC<MaterialIconSetIconProps>; name: string }[] {
return experiences.map((experience) => {
switch (experience) {
case "Hiking":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="hiking" {...props} />
),
name: intl.formatMessage({ id: "Hiking" }),
}
case "Kayaking":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="kayaking" {...props} />
),
name: intl.formatMessage({ id: "Kayaking" }),
}
case "Bike friendly":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="pedal_bike" {...props} />
),
name: intl.formatMessage({ id: "Bike friendly" }),
}
case "Museums":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="museum" {...props} />
),
name: intl.formatMessage({ id: "Museums" }),
}
case "Family friendly":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="family_restroom" {...props} />
),
name: intl.formatMessage({ id: "Family friendly" }),
}
case "City pulse":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="location_city" {...props} />
),
name: intl.formatMessage({ id: "City pulse" }),
}
case "Nightlife":
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="nightlife" {...props} />
),
name: intl.formatMessage({ id: "Nightlife" }),
}
default:
return {
Icon: (props: MaterialIconSetIconProps) => (
<MaterialIcon icon="star" isFilled {...props} />
),
name: experience,
}
}
})
}

View File

@@ -5,11 +5,15 @@ import { useParams } from "next/navigation"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import {
HotelLogo,
MaterialIcon,
TripadvisorIcon,
} from "@scandic-hotels/design-system/Icons"
import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map" import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map"
import { mapFacilityToIcon } from "@/components/ContentType/HotelPage/data" import { FacilityToIcon } from "@/components/ContentType/HotelPage/data"
import { ChevronRightSmallIcon, TripAdvisorIcon } from "@/components/Icons"
import HotelLogo from "@/components/Icons/Logos"
import ImageGallery from "@/components/ImageGallery" import ImageGallery from "@/components/ImageGallery"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
@@ -59,7 +63,7 @@ export default function HotelListingItem({
/> />
{hotel.ratings?.tripAdvisor.rating && ( {hotel.ratings?.tripAdvisor.rating && (
<div className={styles.tripAdvisor}> <div className={styles.tripAdvisor}>
<TripAdvisorIcon color="burgundy" /> <TripadvisorIcon color="Icon/Interactive/Default" />
<Caption color="burgundy"> <Caption color="burgundy">
{hotel.ratings.tripAdvisor.rating} {hotel.ratings.tripAdvisor.rating}
</Caption> </Caption>
@@ -92,12 +96,12 @@ export default function HotelListingItem({
<Body>{hotel.hotelContent.texts.descriptions?.short}</Body> <Body>{hotel.hotelContent.texts.descriptions?.short}</Body>
<ul className={styles.amenityList}> <ul className={styles.amenityList}>
{amenities.map((amenity) => { {amenities.map((amenity) => {
const IconComponent = mapFacilityToIcon(amenity.id) const Icon = (
<FacilityToIcon id={amenity.id} color="Icon/Default" size={20} />
)
return ( return (
<li className={styles.amenityItem} key={amenity.id}> <li className={styles.amenityItem} key={amenity.id}>
{IconComponent && ( {Icon && Icon}
<IconComponent color="grey80" width={20} height={20} />
)}
{amenity.name} {amenity.name}
</li> </li>
) )
@@ -111,7 +115,11 @@ export default function HotelListingItem({
onClick={() => setActiveMarker(hotel.operaId)} onClick={() => setActiveMarker(hotel.operaId)}
> >
{intl.formatMessage({ id: "See on map" })} {intl.formatMessage({ id: "See on map" })}
<ChevronRightSmallIcon /> <MaterialIcon
icon="chevron_right"
size={20}
color="CurrentColor"
/>
</Link> </Link>
</Button> </Button>
)} )}

View File

@@ -5,10 +5,11 @@ import { useParams } from "next/navigation"
import { useEffect, useRef, useState } from "react" import { useEffect, useRef, useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationDataStore } from "@/stores/destination-data" import { useDestinationDataStore } from "@/stores/destination-data"
import DestinationFilterAndSort from "@/components/DestinationFilterAndSort" import DestinationFilterAndSort from "@/components/DestinationFilterAndSort"
import { MapIcon } from "@/components/Icons"
import Alert from "@/components/TempDesignSystem/Alert" import Alert from "@/components/TempDesignSystem/Alert"
import { BackToTopButton } from "@/components/TempDesignSystem/BackToTopButton" import { BackToTopButton } from "@/components/TempDesignSystem/BackToTopButton"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
@@ -66,7 +67,7 @@ export default function HotelListing() {
theme="base" theme="base"
> >
<Link href={mapUrl}> <Link href={mapUrl}>
<MapIcon /> <MaterialIcon icon="map" color="CurrentColor" />
{intl.formatMessage({ id: "See on map" })} {intl.formatMessage({ id: "See on map" })}
</Link> </Link>
</Button> </Button>

View File

@@ -1,4 +1,5 @@
import { TripAdvisorIcon } from "@/components/Icons" import { TripadvisorIcon } from "@scandic-hotels/design-system/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import Chip from "@/components/TempDesignSystem/Chip" import Chip from "@/components/TempDesignSystem/Chip"
@@ -32,7 +33,7 @@ export default function DialogImage({
)} )}
<div className={styles.tripAdvisor}> <div className={styles.tripAdvisor}>
<Chip className={styles.tripAdvisor}> <Chip className={styles.tripAdvisor}>
<TripAdvisorIcon color="burgundy" /> <TripadvisorIcon color="Icon/Interactive/Default" />
{ratings} {ratings}
</Chip> </Chip>
</div> </div>

View File

@@ -3,14 +3,15 @@ import Link from "next/link"
import { useState } from "react" import { useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map" import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map"
import CloseLargeIcon from "@/components/Icons/CloseLarge"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import Footnote from "@/components/TempDesignSystem/Text/Footnote" import Footnote from "@/components/TempDesignSystem/Text/Footnote"
import { mapFacilityToIcon } from "../../HotelPage/data" import { FacilityToIcon } from "../../HotelPage/data"
import { usePageType } from "../Map/PageTypeProvider" import { usePageType } from "../Map/PageTypeProvider"
import DialogImage from "./DialogImage" import DialogImage from "./DialogImage"
@@ -56,7 +57,12 @@ export default function HotelMapCard({
onClick={handleClose} onClick={handleClose}
aria-label={intl.formatMessage({ id: "Close" })} aria-label={intl.formatMessage({ id: "Close" })}
> >
<CloseLargeIcon className={styles.closeIcon} width={16} height={16} /> <MaterialIcon
icon="close"
size={16}
className={styles.closeIcon}
color="CurrentColor"
/>
</Button> </Button>
{image ? ( {image ? (
<DialogImage <DialogImage
@@ -84,12 +90,16 @@ export default function HotelMapCard({
} }
> >
{amenities.map((facility) => { {amenities.map((facility) => {
const IconComponent = mapFacilityToIcon(facility.id) const Icon = (
<FacilityToIcon
id={facility.id}
size={16}
color="Icon/Default"
/>
)
return ( return (
<div className={styles.facilitiesItem} key={facility.id}> <div className={styles.facilitiesItem} key={facility.id}>
{IconComponent && ( {Icon && Icon}
<IconComponent width={16} height={16} color="grey80" />
)}
<Footnote <Footnote
className={styles.iconFootnote} className={styles.iconFootnote}
color="uiTextMediumContrast" color="uiTextMediumContrast"

View File

@@ -6,10 +6,11 @@ import { Map, type MapProps, useMap } from "@vis.gl/react-google-maps"
import { type PropsWithChildren, useEffect, useRef } from "react" import { type PropsWithChildren, useEffect, useRef } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map" import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map"
import ErrorBoundary from "@/components/ErrorBoundary/ErrorBoundary" import ErrorBoundary from "@/components/ErrorBoundary/ErrorBoundary"
import { CloseLargeIcon, MinusIcon, PlusIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp" import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
@@ -118,7 +119,7 @@ export default function DynamicMap({
className={styles.closeButton} className={styles.closeButton}
onClick={onClose} onClick={onClose}
> >
<CloseLargeIcon color="burgundy" /> <MaterialIcon icon="close" color="CurrentColor" />
<span>{intl.formatMessage({ id: "Close the map" })}</span> <span>{intl.formatMessage({ id: "Close the map" })}</span>
</Button> </Button>
)} )}
@@ -132,7 +133,7 @@ export default function DynamicMap({
onClick={zoomIn} onClick={zoomIn}
aria-label={intl.formatMessage({ id: "Zoom out" })} aria-label={intl.formatMessage({ id: "Zoom out" })}
> >
<PlusIcon color="burgundy" width={20} height={20} /> <MaterialIcon icon="add" color="CurrentColor" size={20} />
</Button> </Button>
<Button <Button
theme="base" theme="base"
@@ -143,7 +144,7 @@ export default function DynamicMap({
onClick={zoomOut} onClick={zoomOut}
aria-label={intl.formatMessage({ id: "Zoom in" })} aria-label={intl.formatMessage({ id: "Zoom in" })}
> >
<MinusIcon color="burgundy" width={20} height={20} /> <MaterialIcon icon="remove" color="CurrentColor" size={20} />
</Button> </Button>
</div> </div>
</div> </div>

View File

@@ -12,11 +12,12 @@ import {
import { Dialog, Modal } from "react-aria-components" import { Dialog, Modal } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationDataStore } from "@/stores/destination-data" import { useDestinationDataStore } from "@/stores/destination-data"
import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map" import { useDestinationPageHotelsMapStore } from "@/stores/destination-page-hotels-map"
import DestinationFilterAndSort from "@/components/DestinationFilterAndSort" import DestinationFilterAndSort from "@/components/DestinationFilterAndSort"
import { ChevronLeftSmallIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import { debounce } from "@/utils/debounce" import { debounce } from "@/utils/debounce"
@@ -154,7 +155,11 @@ export default function Map({
variant="icon" variant="icon"
onClick={handleClose} onClick={handleClose}
> >
<ChevronLeftSmallIcon color="baseTextHighcontrast" /> <MaterialIcon
icon="chevron_left"
size={20}
color="CurrentColor"
/>
{intl.formatMessage({ id: "Back" })} {intl.formatMessage({ id: "Back" })}
</Button> </Button>
<DestinationFilterAndSort <DestinationFilterAndSort

View File

@@ -3,7 +3,8 @@
import { useState } from "react" import { useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ChevronRightSmallIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import JsonToHtml from "@/components/JsonToHtml" import JsonToHtml from "@/components/JsonToHtml"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import SidePeek from "@/components/TempDesignSystem/SidePeek" import SidePeek from "@/components/TempDesignSystem/SidePeek"
@@ -45,7 +46,7 @@ export default function DestinationPageSidepeek({
wrapping wrapping
> >
{buttonText || intl.formatMessage({ id: "Read more" })} {buttonText || intl.formatMessage({ id: "Read more" })}
<ChevronRightSmallIcon /> <MaterialIcon icon="chevron_right" size={20} color="CurrentColor" />
</Button> </Button>
<SidePeek <SidePeek
title={heading} title={heading}

View File

@@ -5,7 +5,8 @@ import { useParams } from "next/navigation"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MapIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
interface MapButtonProps { interface MapButtonProps {
@@ -37,7 +38,7 @@ export default function MapButton({ className = "" }: MapButtonProps) {
asChild asChild
> >
<Link href={mapUrl} scroll={true}> <Link href={mapUrl} scroll={true}>
<MapIcon /> <MaterialIcon icon="map" color="CurrentColor" />
{intl.formatMessage({ id: "See on map" })} {intl.formatMessage({ id: "See on map" })}
</Link> </Link>
</Button> </Button>

View File

@@ -1,7 +1,7 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { mapFacilityToIcon } from "@/components/ContentType/HotelPage/data" import { FacilityToIcon } from "@/components/ContentType/HotelPage/data"
import { ChevronRightSmallIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -23,17 +23,17 @@ export default async function AmenitiesList({
</Typography> </Typography>
<div className={styles.amenityItemList}> <div className={styles.amenityItemList}>
{facilities.map((facility) => { {facilities.map((facility) => {
const IconComponent = mapFacilityToIcon(facility.id) const Icon = (
<FacilityToIcon
id={facility.id}
className={styles.icon}
color="Icon/Feedback/Neutral"
size={20}
/>
)
return ( return (
<div className={styles.amenityItem} key={facility.id}> <div className={styles.amenityItem} key={facility.id}>
{IconComponent && ( {Icon && Icon}
<IconComponent
className={styles.icon}
color="grey80"
width={20}
height={20}
/>
)}
<Typography <Typography
variant="Body/Paragraph/mdRegular" variant="Body/Paragraph/mdRegular"
className={styles.facility} className={styles.facility}
@@ -53,7 +53,7 @@ export default async function AmenitiesList({
className={styles.showAllAmenities} className={styles.showAllAmenities}
> >
{intl.formatMessage({ id: "See all amenities" })} {intl.formatMessage({ id: "See all amenities" })}
<ChevronRightSmallIcon color="burgundy" /> <MaterialIcon icon="chevron_right" size={20} color="CurrentColor" />
</Link> </Link>
</section> </section>
) )

View File

@@ -1,6 +1,9 @@
import {
MaterialIcon,
TripadvisorIcon,
} from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { ChevronRightSmallIcon, TripAdvisorIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import { getSingleDecimal } from "@/utils/numberFormatting" import { getSingleDecimal } from "@/utils/numberFormatting"
@@ -54,7 +57,7 @@ export default async function IntroSection({
</Typography> </Typography>
{formattedTripAdvisorText && ( {formattedTripAdvisorText && (
<span className={styles.tripAdvisorText}> <span className={styles.tripAdvisorText}>
<TripAdvisorIcon /> <TripadvisorIcon color="Icon/Interactive/Secondary" />
{formattedTripAdvisorText} {formattedTripAdvisorText}
</span> </span>
)} )}
@@ -72,7 +75,12 @@ export default async function IntroSection({
scroll={false} scroll={false}
> >
{intl.formatMessage({ id: "Read more" })} {intl.formatMessage({ id: "Read more" })}
<ChevronRightSmallIcon color="burgundy" /> <MaterialIcon
icon="chevron_right"
size={20}
color="CurrentColor"
className={styles.introLink}
/>
</Link> </Link>
</div> </div>
</section> </section>

View File

@@ -5,7 +5,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import { Dialog, Modal } from "react-aria-components" import { Dialog, Modal } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import CloseLargeIcon from "@/components/Icons/CloseLarge" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import InteractiveMap from "@/components/Maps/InteractiveMap" import InteractiveMap from "@/components/Maps/InteractiveMap"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import { debounce } from "@/utils/debounce" import { debounce } from "@/utils/debounce"
@@ -92,7 +93,7 @@ export default function DynamicMap({
className={styles.closeButton} className={styles.closeButton}
onClick={handleClose} onClick={handleClose}
> >
<CloseLargeIcon color="burgundy" /> <MaterialIcon icon="close" color="CurrentColor" />
<span>{intl.formatMessage({ id: "Close the map" })}</span> <span>{intl.formatMessage({ id: "Close the map" })}</span>
</Button> </Button>
) )

View File

@@ -4,9 +4,9 @@ import { useParams, useSearchParams } from "next/navigation"
import { useEffect, useMemo, useState } from "react" import { useEffect, useMemo, useState } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { HouseIcon, MapIcon } from "@/components/Icons"
import { trackHotelMapClick } from "@/utils/tracking" import { trackHotelMapClick } from "@/utils/tracking"
import styles from "./mobileToggle.module.css" import styles from "./mobileToggle.module.css"
@@ -36,10 +36,9 @@ export default function MobileMapToggle() {
<span <span
className={`${styles.iconWrapper} ${!isMapView ? styles.active : ""}`} className={`${styles.iconWrapper} ${!isMapView ? styles.active : ""}`}
> >
<HouseIcon <MaterialIcon
color={!isMapView ? "white" : "red"} icon="home"
height={24} color={!isMapView ? "Icon/Inverted" : "Icon/Accent"}
width={24}
/> />
<Typography variant="Body/Supporting text (caption)/smBold"> <Typography variant="Body/Supporting text (caption)/smBold">
<span>{intl.formatMessage({ id: "Hotel" })}</span> <span>{intl.formatMessage({ id: "Hotel" })}</span>
@@ -54,7 +53,10 @@ export default function MobileMapToggle() {
scroll={true} scroll={true}
onClick={trackHotelMapClick} onClick={trackHotelMapClick}
> >
<MapIcon color={isMapView ? "white" : "red"} height={24} width={24} /> <MaterialIcon
icon="map"
color={isMapView ? "Icon/Inverted" : "Icon/Interactive/Accent"}
/>
<Typography variant="Body/Supporting text (caption)/smBold"> <Typography variant="Body/Supporting text (caption)/smBold">
<span>{intl.formatMessage({ id: "Map" })}</span> <span>{intl.formatMessage({ id: "Map" })}</span>
</Typography> </Typography>

View File

@@ -3,7 +3,8 @@
import Link from "next/link" import Link from "next/link"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ChevronRightSmallIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import ImageGallery from "@/components/ImageGallery" import ImageGallery from "@/components/ImageGallery"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -66,7 +67,7 @@ export function RoomCard({ room }: RoomCardProps) {
<Button intent="text" type="button" size="medium" theme="base" asChild> <Button intent="text" type="button" size="medium" theme="base" asChild>
<Link scroll={false} href={`#s-room-${getRoomNameAsParam(name)}`}> <Link scroll={false} href={`#s-room-${getRoomNameAsParam(name)}`}>
{intl.formatMessage({ id: "See room details" })} {intl.formatMessage({ id: "See room details" })}
<ChevronRightSmallIcon color="burgundy" width={20} height={20} /> <MaterialIcon icon="chevron_right" size={20} color="CurrentColor" />
</Link> </Link>
</Button> </Button>
</div> </div>

View File

@@ -62,12 +62,6 @@ export function Rooms({ rooms, preamble }: RoomsProps) {
<ShowMoreButton <ShowMoreButton
loadMoreData={handleShowMore} loadMoreData={handleShowMore}
showLess={allRoomsVisible} showLess={allRoomsVisible}
textShowMore={intl.formatMessage({
id: "Show more",
})}
textShowLess={intl.formatMessage({
id: "Show less",
})}
/> />
) : null} ) : null}
</SectionContainer> </SectionContainer>

View File

@@ -1,4 +1,8 @@
import { FacebookIcon, InstagramIcon } from "@/components/Icons" import {
FacebookIcon,
InstagramIcon,
} from "@scandic-hotels/design-system/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -81,12 +85,12 @@ export default async function ContactInformation({
<div className={styles.socialIcons}> <div className={styles.socialIcons}>
{socials.instagram && ( {socials.instagram && (
<Link href={socials.instagram}> <Link href={socials.instagram}>
<InstagramIcon color="burgundy" /> <InstagramIcon color="Icon/Interactive/Default" />
</Link> </Link>
)} )}
{socials.facebook && ( {socials.facebook && (
<Link href={socials.facebook}> <Link href={socials.facebook}>
<FacebookIcon color="burgundy" /> <FacebookIcon color="Icon/Interactive/Default" />
</Link> </Link>
)} )}
</div> </div>

View File

@@ -1,4 +1,7 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import ButtonLink from "@/components/ButtonLink" import ButtonLink from "@/components/ButtonLink"
import { IconName } from "@/components/Icons/iconName"
import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem" import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -6,7 +9,6 @@ import { getIntl } from "@/i18n"
import styles from "./accessibilityAmenity.module.css" import styles from "./accessibilityAmenity.module.css"
import type { AccessibilityAmenityProps } from "@/types/components/hotelPage/sidepeek/accessibility" import type { AccessibilityAmenityProps } from "@/types/components/hotelPage/sidepeek/accessibility"
import { IconName } from "@/types/components/icon"
export default async function AccessibilityAmenity({ export default async function AccessibilityAmenity({
elevatorPitch, elevatorPitch,
@@ -32,6 +34,8 @@ export default async function AccessibilityAmenity({
appendToCurrentPath appendToCurrentPath
> >
{intl.formatMessage({ id: "About accessibility" })} {intl.formatMessage({ id: "About accessibility" })}
<MaterialIcon icon="arrow_forward" color="CurrentColor" />
</ButtonLink> </ButtonLink>
)} )}
</div> </div>

View File

@@ -1,10 +1,10 @@
import { IconName } from "@/components/Icons/iconName"
import OpeningHours from "@/components/OpeningHours" import OpeningHours from "@/components/OpeningHours"
import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem" import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import type { BreakfastAmenityProps } from "@/types/components/hotelPage/sidepeek/amenities" import type { BreakfastAmenityProps } from "@/types/components/hotelPage/sidepeek/amenities"
import { IconName } from "@/types/components/icon"
import { HotelTypeEnum } from "@/types/enums/hotelType" import { HotelTypeEnum } from "@/types/enums/hotelType"
export default async function BreakfastAmenity({ export default async function BreakfastAmenity({

View File

@@ -1,9 +1,9 @@
import { IconName } from "@/components/Icons/iconName"
import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem" import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import type { CheckInAmenityProps } from "@/types/components/hotelPage/sidepeek/checkIn" import type { CheckInAmenityProps } from "@/types/components/hotelPage/sidepeek/checkIn"
import { IconName } from "@/types/components/icon"
export default async function CheckInAmenity({ export default async function CheckInAmenity({
checkInInformation, checkInInformation,

View File

@@ -1,4 +1,5 @@
import ButtonLink from "@/components/ButtonLink" import ButtonLink from "@/components/ButtonLink"
import { IconName } from "@/components/Icons/iconName"
import ParkingInformation from "@/components/ParkingInformation" import ParkingInformation from "@/components/ParkingInformation"
import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem" import AccordionItem from "@/components/TempDesignSystem/Accordion/AccordionItem"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -6,7 +7,6 @@ import { getIntl } from "@/i18n"
import styles from "./parkingAmenity.module.css" import styles from "./parkingAmenity.module.css"
import type { ParkingAmenityProps } from "@/types/components/hotelPage/sidepeek/parking" import type { ParkingAmenityProps } from "@/types/components/hotelPage/sidepeek/parking"
import { IconName } from "@/types/components/icon"
export default async function ParkingAmenity({ export default async function ParkingAmenity({
parking, parking,

View File

@@ -7,4 +7,5 @@
display: flex; display: flex;
gap: var(--Spacing-x1); gap: var(--Spacing-x1);
padding: var(--Spacing-x-one-and-half) var(--Spacing-x1); padding: var(--Spacing-x-one-and-half) var(--Spacing-x1);
align-items: center;
} }

View File

@@ -1,7 +1,8 @@
import { HeartIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
import { mapFacilityToIcon } from "../../../data" import { FacilityToIcon } from "../../../data"
import styles from "./filteredAmenities.module.css" import styles from "./filteredAmenities.module.css"
@@ -13,14 +14,23 @@ export default function FilteredAmenities({
return ( return (
<> <>
{filteredAmenities?.map((amenity) => { {filteredAmenities?.map((amenity) => {
const Icon = mapFacilityToIcon(amenity.id) const Icon = (
<FacilityToIcon
id={amenity.id}
color="Icon/Interactive/Default"
size={24}
/>
)
return ( return (
<li key={amenity.name} className={styles.wrapper}> <li key={amenity.name} className={styles.wrapper}>
<div className={styles.amenity}> <div className={styles.amenity}>
{Icon ? ( {Icon ? (
<Icon color="burgundy" width={24} height={24} /> Icon
) : ( ) : (
<HeartIcon color="burgundy" width={24} height={24} /> <MaterialIcon
icon="favorite"
color="Icon/Interactive/Default"
/>
)} )}
<Subtitle color="burgundy" type="two"> <Subtitle color="burgundy" type="two">
{amenity.name} {amenity.name}

View File

@@ -1,7 +1,8 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import ButtonLink from "@/components/ButtonLink" import ButtonLink from "@/components/ButtonLink"
import { OpenInNewSmallIcon } from "@/components/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import OpeningHours from "@/components/OpeningHours" import OpeningHours from "@/components/OpeningHours"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -85,7 +86,11 @@ export default async function RestaurantBarItem({
color="baseTextMediumContrast" color="baseTextMediumContrast"
> >
{name} {name}
<OpenInNewSmallIcon /> <MaterialIcon
icon="open_in_new"
size={20}
color="CurrentColor"
/>
</Link> </Link>
</li> </li>
))} ))}

View File

@@ -1,14 +1,15 @@
import { cx } from "class-variance-authority" import { cx } from "class-variance-authority"
import Link from "next/link" import Link from "next/link"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { selectRateWithParams } from "@/constants/routes/hotelReservation" import { selectRateWithParams } from "@/constants/routes/hotelReservation"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import ImageGallery from "@/components/ImageGallery" import ImageGallery from "@/components/ImageGallery"
import { getBedIcon } from "@/components/SidePeeks/RoomSidePeek/bedIcon" import { getBedIconName } from "@/components/SidePeeks/RoomSidePeek/bedIcon"
import { getFacilityIcon } from "@/components/SidePeeks/RoomSidePeek/facilityIcon" import { FacilityIcon } from "@/components/SidePeeks/RoomSidePeek/facilityIcon"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import SidePeek from "@/components/TempDesignSystem/SidePeek" import SidePeek from "@/components/TempDesignSystem/SidePeek"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
@@ -97,16 +98,16 @@ export default async function RoomSidePeek({
{room.roomFacilities {room.roomFacilities
.sort((a, b) => a.sortOrder - b.sortOrder) .sort((a, b) => a.sortOrder - b.sortOrder)
.map((facility) => { .map((facility) => {
const Icon = getFacilityIcon(facility.icon) const Icon = (
<FacilityIcon
name={facility.icon}
size={24}
color="Icon/Default"
/>
)
return ( return (
<li className={styles.listItem} key={facility.name}> <li className={styles.listItem} key={facility.name}>
{Icon && ( {Icon && Icon}
<Icon
width={24}
height={24}
color="uiTextMediumContrast"
/>
)}
<Typography <Typography
variant="Body/Paragraph/mdRegular" variant="Body/Paragraph/mdRegular"
className={cx(styles.iconText, { className={cx(styles.iconText, {
@@ -132,20 +133,14 @@ export default async function RoomSidePeek({
</div> </div>
<ul className={styles.bedOptions}> <ul className={styles.bedOptions}>
{room.roomTypes.map((roomType) => { {room.roomTypes.map((roomType) => {
const BedIcon = getBedIcon(roomType.mainBed.type) const bedIcon = getBedIconName(roomType.mainBed.type)
return ( return (
<li className={styles.listItem} key={roomType.code}> <li className={styles.listItem} key={roomType.code}>
{BedIcon && ( <MaterialIcon color="Icon/Default" icon={bedIcon} />
<BedIcon
color="uiTextMediumContrast"
width={24}
height={24}
/>
)}
<Typography <Typography
variant="Body/Paragraph/mdRegular" variant="Body/Paragraph/mdRegular"
className={cx(styles.iconText, { className={cx(styles.iconText, {
[styles.noIcon]: !BedIcon, [styles.noIcon]: !bedIcon,
})} })}
> >
<span>{roomType.mainBed.description}</span> <span>{roomType.mainBed.description}</span>

View File

@@ -1,69 +1,15 @@
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconByIconName } from "@/components/Icons/IconByIconName"
import { IconName } from "@/components/Icons/iconName"
import type { FC } from "react" import type {
IconProps,
MaterialIconSetIconProps,
NucleoIconProps,
} from "@scandic-hotels/design-system/Icons"
import { IconName, type IconProps } from "@/types/components/icon"
import { FacilityEnum } from "@/types/enums/facilities" import { FacilityEnum } from "@/types/enums/facilities"
const facilityToIconMap: Record<FacilityEnum, IconName> = { const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.Bar]: IconName.LocalBar,
[FacilityEnum.Skybar]: IconName.LocalBar,
[FacilityEnum.RooftopBar]: IconName.LocalBar,
[FacilityEnum.BikesForLoan]: IconName.Biking,
[FacilityEnum.Gym]: IconName.Fitness,
[FacilityEnum.GymTrainingFacilities]: IconName.Fitness,
[FacilityEnum.KeyAccessOnlyToHealthClubGym]: IconName.Fitness,
[FacilityEnum.FreeWiFi]: IconName.Wifi,
[FacilityEnum.MeetingArea]: IconName.Business,
[FacilityEnum.MeetingRooms]: IconName.Business,
[FacilityEnum.MeetingConferenceFacilities]: IconName.Business,
[FacilityEnum.PetFriendlyRooms]: IconName.Pets,
[FacilityEnum.Sauna]: IconName.Sauna,
[FacilityEnum.Restaurant]: IconName.Restaurant,
[FacilityEnum.ParkingGarage]: IconName.Garage,
[FacilityEnum.ParkingElectricCharging]: IconName.ElectricCar,
[FacilityEnum.ParkingFreeParking]: IconName.Parking,
[FacilityEnum.ParkingOutdoor]: IconName.Parking,
[FacilityEnum.ParkingAdditionalCost]: IconName.Parking,
[FacilityEnum.DisabledParking]: IconName.Parking,
[FacilityEnum.OutdoorTerrace]: IconName.OutdoorFurniture,
[FacilityEnum.RoomService]: IconName.RoomService,
[FacilityEnum.LateCheckOutUntil1400Guaranteed]: IconName.Business,
[FacilityEnum.LaundryRoom]: IconName.LaundryMachine,
[FacilityEnum.LaundryService]: IconName.LaundryMachine,
[FacilityEnum.LaundryServiceExpress]: IconName.LaundryMachine,
[FacilityEnum.ScandicShop24Hrs]: IconName.ConvenienceStore24h,
[FacilityEnum.ServesBreakfastAlwaysIncluded]: IconName.CoffeeAlt,
[FacilityEnum.ServesBreakfastNotAlwaysIncluded]: IconName.CoffeeAlt,
[FacilityEnum.ServesOrganicBreakfastAlwaysIncluded]: IconName.CoffeeAlt,
[FacilityEnum.ServesOrganicBreakfastNotAlwaysIncluded]: IconName.CoffeeAlt,
[FacilityEnum.Breakfast]: IconName.CoffeeAlt,
[FacilityEnum.EBikesChargingStation]: IconName.ElectricBike,
[FacilityEnum.Shopping]: IconName.Shopping,
[FacilityEnum.Golf]: IconName.Golf,
[FacilityEnum.GolfCourse0To30Km]: IconName.Golf,
[FacilityEnum.TVWithChromecast1]: IconName.TvCasting,
[FacilityEnum.TVWithChromecast2]: IconName.TvCasting,
[FacilityEnum.DJLiveMusic]: IconName.Nightlife,
[FacilityEnum.DiscoNightClub]: IconName.Nightlife,
[FacilityEnum.CoffeeInReceptionAtCharge]: IconName.CoffeeAlt,
[FacilityEnum.CoffeeShop]: IconName.CoffeeAlt,
[FacilityEnum.CoffeeTeaFacilities]: IconName.CoffeeAlt,
[FacilityEnum.SkateboardsForLoan]: IconName.Skateboarding,
[FacilityEnum.KayaksForLoan]: IconName.Kayaking,
[FacilityEnum.LifestyleConcierge]: IconName.Concierge,
[FacilityEnum.WellnessAndSaunaEntranceFeeAdmission16PlusYears]:
IconName.Sauna,
[FacilityEnum.WellnessPoolSaunaEntranceFeeAdmission16PlusYears]:
IconName.Sauna,
[FacilityEnum.Cafe]: IconName.Restaurant,
[FacilityEnum.Pool]: IconName.Swim,
[FacilityEnum.PoolSwimmingPoolJacuzziAtHotel]: IconName.Swim,
[FacilityEnum.VendingMachineWithNecessities]: IconName.Groceries,
[FacilityEnum.Jacuzzi]: IconName.StarFilled,
[FacilityEnum.JacuzziInRoom]: IconName.StarFilled,
[FacilityEnum.AccessibleBathingControls]: IconName.StarFilled, [FacilityEnum.AccessibleBathingControls]: IconName.StarFilled,
[FacilityEnum.AccessibleBathtubs]: IconName.StarFilled, [FacilityEnum.AccessibleBathtubs]: IconName.StarFilled,
[FacilityEnum.AccessibleElevators]: IconName.StarFilled, [FacilityEnum.AccessibleElevators]: IconName.StarFilled,
@@ -73,10 +19,10 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.AccessibleToilets]: IconName.StarFilled, [FacilityEnum.AccessibleToilets]: IconName.StarFilled,
[FacilityEnum.AccessibleWashBasins]: IconName.StarFilled, [FacilityEnum.AccessibleWashBasins]: IconName.StarFilled,
[FacilityEnum.AdaptedRoomDoors]: IconName.StarFilled, [FacilityEnum.AdaptedRoomDoors]: IconName.StarFilled,
[FacilityEnum.AdjoiningConventionCentre]: IconName.StarFilled, [FacilityEnum.AdjoiningConventionCentre]: IconName.ConventionCentre,
[FacilityEnum.AirConAirCooling]: IconName.StarFilled, [FacilityEnum.AirConAirCooling]: IconName.AirConAirCooling,
[FacilityEnum.AirConditioningInRoom]: IconName.StarFilled, [FacilityEnum.AirConditioningInRoom]: IconName.AirConditioningInRoom,
[FacilityEnum.AirportMaxDistance8Km]: IconName.StarFilled, [FacilityEnum.AirportMaxDistance8Km]: IconName.Airplane,
[FacilityEnum.AlarmsContinuouslyMonitored]: IconName.StarFilled, [FacilityEnum.AlarmsContinuouslyMonitored]: IconName.StarFilled,
[FacilityEnum.AlarmsHaveStrobeLightsForDeafHardHearingInAllGuestRooms]: [FacilityEnum.AlarmsHaveStrobeLightsForDeafHardHearingInAllGuestRooms]:
IconName.StarFilled, IconName.StarFilled,
@@ -92,7 +38,7 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.AllParkingAreasPatrolled]: IconName.StarFilled, [FacilityEnum.AllParkingAreasPatrolled]: IconName.StarFilled,
[FacilityEnum.AllParkingAreasWellLit]: IconName.StarFilled, [FacilityEnum.AllParkingAreasWellLit]: IconName.StarFilled,
[FacilityEnum.AllStairsWellsVentilated]: IconName.StarFilled, [FacilityEnum.AllStairsWellsVentilated]: IconName.StarFilled,
[FacilityEnum.ArmchairBed]: IconName.StarFilled, [FacilityEnum.ArmchairBed]: IconName.ArmChair,
[FacilityEnum.AudibleAlarms]: IconName.StarFilled, [FacilityEnum.AudibleAlarms]: IconName.StarFilled,
[FacilityEnum.AudibleSmokeAlarmsInAllHalls]: IconName.StarFilled, [FacilityEnum.AudibleSmokeAlarmsInAllHalls]: IconName.StarFilled,
[FacilityEnum.AudibleSmokeAlarmsInAllPublicAreas]: IconName.StarFilled, [FacilityEnum.AudibleSmokeAlarmsInAllPublicAreas]: IconName.StarFilled,
@@ -105,41 +51,53 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.BalconiesAccessibleToAdjoiningRooms]: IconName.StarFilled, [FacilityEnum.BalconiesAccessibleToAdjoiningRooms]: IconName.StarFilled,
[FacilityEnum.Ballroom]: IconName.StarFilled, [FacilityEnum.Ballroom]: IconName.StarFilled,
[FacilityEnum.Banquet]: IconName.StarFilled, [FacilityEnum.Banquet]: IconName.StarFilled,
[FacilityEnum.Bar]: IconName.LocalBar,
[FacilityEnum.BasicMedicalEquipmentOnSite]: IconName.StarFilled, [FacilityEnum.BasicMedicalEquipmentOnSite]: IconName.StarFilled,
[FacilityEnum.BathroomsAdaptedForDisabledGuests]: IconName.StarFilled, [FacilityEnum.BathroomsAdaptedForDisabledGuests]: IconName.StarFilled,
[FacilityEnum.Beach]: IconName.StarFilled, [FacilityEnum.Beach]: IconName.Beach,
[FacilityEnum.Beach0To1Km]: IconName.StarFilled, [FacilityEnum.Beach0To1Km]: IconName.Beach,
[FacilityEnum.BeautySalon]: IconName.StarFilled, [FacilityEnum.BeautySalon]: IconName.BeautySalon,
[FacilityEnum.BedroomsWithWheelchairAccess]: IconName.StarFilled, [FacilityEnum.BedroomsWithWheelchairAccess]: IconName.StarFilled,
[FacilityEnum.Bowling]: IconName.StarFilled, [FacilityEnum.BikesForLoan]: IconName.Bike,
[FacilityEnum.Bowling]: IconName.Bowling,
[FacilityEnum.BrailleLargePrintHotelLiterature]: IconName.StarFilled, [FacilityEnum.BrailleLargePrintHotelLiterature]: IconName.StarFilled,
[FacilityEnum.BrailleLargePrintMenus]: IconName.StarFilled, [FacilityEnum.BrailleLargePrintMenus]: IconName.StarFilled,
[FacilityEnum.Business1]: IconName.StarFilled, [FacilityEnum.Breakfast]: IconName.Breakfast,
[FacilityEnum.Business2]: IconName.StarFilled, [FacilityEnum.Business1]: IconName.BusinessCentre,
[FacilityEnum.BusinessCentre]: IconName.StarFilled, [FacilityEnum.Business2]: IconName.BusinessCentre,
[FacilityEnum.CashFree8pmTill6am]: IconName.StarFilled, [FacilityEnum.BusinessCentre]: IconName.BusinessCentre,
[FacilityEnum.CashFreeHotel]: IconName.StarFilled, [FacilityEnum.Cafe]: IconName.Restaurant,
[FacilityEnum.CashFree8pmTill6am]: IconName.CashFree,
[FacilityEnum.CashFreeHotel]: IconName.CashFree,
[FacilityEnum.ChildrenWelcome]: IconName.StarFilled, [FacilityEnum.ChildrenWelcome]: IconName.StarFilled,
[FacilityEnum.City]: IconName.StarFilled, [FacilityEnum.City]: IconName.City,
[FacilityEnum.CoffeeInReceptionAtCharge]: IconName.CoffeeInReceptionAtCharge,
[FacilityEnum.CoffeeShop]: IconName.CoffeeShop,
[FacilityEnum.CoffeeTeaFacilities]: IconName.CoffeeAlt,
[FacilityEnum.ColourTVInRoomsAllScandicHotels]: IconName.StarFilled, [FacilityEnum.ColourTVInRoomsAllScandicHotels]: IconName.StarFilled,
[FacilityEnum.ComplimentaryColdRefreshments]: IconName.StarFilled, [FacilityEnum.ComplimentaryColdRefreshments]:
IconName.ComplimentaryColdRefreshments,
[FacilityEnum.CongressHall]: IconName.StarFilled, [FacilityEnum.CongressHall]: IconName.StarFilled,
[FacilityEnum.ConventionCentre]: IconName.StarFilled, [FacilityEnum.ConventionCentre]: IconName.ConventionCentre,
[FacilityEnum.Couples]: IconName.StarFilled, [FacilityEnum.Couples]: IconName.StarFilled,
[FacilityEnum.DeadboltsOnConnectingDoors]: IconName.StarFilled, [FacilityEnum.DeadboltsOnConnectingDoors]: IconName.StarFilled,
[FacilityEnum.DeadboltsSecondaryLocksOnAllGuestRoomDoors]: [FacilityEnum.DeadboltsSecondaryLocksOnAllGuestRoomDoors]:
IconName.StarFilled, IconName.StarFilled,
[FacilityEnum.Defibrillator]: IconName.StarFilled, [FacilityEnum.Defibrillator]: IconName.StarFilled,
[FacilityEnum.Desk]: IconName.StarFilled, [FacilityEnum.Desk]: IconName.Desk,
[FacilityEnum.DirectDialPhoneInRoomsAllScandic]: IconName.StarFilled, [FacilityEnum.DirectDialPhoneInRoomsAllScandic]: IconName.DirectDial,
[FacilityEnum.DisabledEmergencyPlan1]: IconName.StarFilled, [FacilityEnum.DisabledEmergencyPlan1]: IconName.StarFilled,
[FacilityEnum.DisabledEmergencyPlan2]: IconName.StarFilled, [FacilityEnum.DisabledEmergencyPlan2]: IconName.StarFilled,
[FacilityEnum.DisabledParking]: IconName.Wheelchair,
[FacilityEnum.DiscoNightClub]: IconName.Nightlife,
[FacilityEnum.DJLiveMusic]: IconName.Nightlife,
[FacilityEnum.DO_NOT_USE_Restaurant]: IconName.StarFilled, [FacilityEnum.DO_NOT_USE_Restaurant]: IconName.StarFilled,
[FacilityEnum.Downtown]: IconName.StarFilled, [FacilityEnum.Downtown]: IconName.StarFilled,
[FacilityEnum.DrinkableTapWater]: IconName.StarFilled, [FacilityEnum.DrinkableTapWater]: IconName.StarFilled,
[FacilityEnum.DVDPlayer]: IconName.StarFilled, [FacilityEnum.DVDPlayer]: IconName.StarFilled,
[FacilityEnum.EBikesChargingStation]: IconName.ElectricBike,
[FacilityEnum.ElectronicKeyCards]: IconName.StarFilled, [FacilityEnum.ElectronicKeyCards]: IconName.StarFilled,
[FacilityEnum.Elevator]: IconName.StarFilled, [FacilityEnum.Elevator]: IconName.Elevator,
[FacilityEnum.EmergencyBackUpGenerators]: IconName.StarFilled, [FacilityEnum.EmergencyBackUpGenerators]: IconName.StarFilled,
[FacilityEnum.EmergencyCallButtonOnPhone]: IconName.StarFilled, [FacilityEnum.EmergencyCallButtonOnPhone]: IconName.StarFilled,
[FacilityEnum.EmergencyCodesOrButtonsInRooms]: IconName.StarFilled, [FacilityEnum.EmergencyCodesOrButtonsInRooms]: IconName.StarFilled,
@@ -150,14 +108,14 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.EmergencyLightingAllScandic]: IconName.StarFilled, [FacilityEnum.EmergencyLightingAllScandic]: IconName.StarFilled,
[FacilityEnum.EmergencyLightningInAllPublicAreas]: IconName.StarFilled, [FacilityEnum.EmergencyLightningInAllPublicAreas]: IconName.StarFilled,
[FacilityEnum.EmergencyServiceResponseTimeInMinutes]: IconName.StarFilled, [FacilityEnum.EmergencyServiceResponseTimeInMinutes]: IconName.StarFilled,
[FacilityEnum.Entertainment]: IconName.StarFilled, [FacilityEnum.Entertainment]: IconName.Theatre,
[FacilityEnum.EventVenue]: IconName.StarFilled, [FacilityEnum.EventVenue]: IconName.StarFilled,
[FacilityEnum.ExchangeFacility]: IconName.StarFilled, [FacilityEnum.ExchangeFacility]: IconName.StarFilled,
[FacilityEnum.ExitMapsInRooms]: IconName.StarFilled, [FacilityEnum.ExitMapsInRooms]: IconName.StarFilled,
[FacilityEnum.ExitSignsLit]: IconName.StarFilled, [FacilityEnum.ExitSignsLit]: IconName.StarFilled,
[FacilityEnum.ExtraFamilyFriendly]: IconName.StarFilled, [FacilityEnum.ExtraFamilyFriendly]: IconName.ExtraFamilyFriendly,
[FacilityEnum.Families]: IconName.StarFilled, [FacilityEnum.Families]: IconName.ExtraFamilyFriendly,
[FacilityEnum.FaxFacilityInRoom]: IconName.StarFilled, [FacilityEnum.FaxFacilityInRoom]: IconName.Fax,
[FacilityEnum.Financial]: IconName.StarFilled, [FacilityEnum.Financial]: IconName.StarFilled,
[FacilityEnum.FireDetectorsAllScandic]: IconName.StarFilled, [FacilityEnum.FireDetectorsAllScandic]: IconName.StarFilled,
[FacilityEnum.FireDetectorsInAllHalls]: IconName.StarFilled, [FacilityEnum.FireDetectorsInAllHalls]: IconName.StarFilled,
@@ -167,24 +125,29 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.FireExtinguishersInPublicAreasAllScandic]: IconName.StarFilled, [FacilityEnum.FireExtinguishersInPublicAreasAllScandic]: IconName.StarFilled,
[FacilityEnum.FireSafetyAllScandic]: IconName.StarFilled, [FacilityEnum.FireSafetyAllScandic]: IconName.StarFilled,
[FacilityEnum.FirstAidAvailable]: IconName.StarFilled, [FacilityEnum.FirstAidAvailable]: IconName.StarFilled,
[FacilityEnum.FoodDrinks247]: IconName.StarFilled, [FacilityEnum.FoodDrinks247]: IconName.FoodDrinks247,
[FacilityEnum.GiftShop]: IconName.StarFilled, [FacilityEnum.FreeWiFi]: IconName.Wifi,
[FacilityEnum.GiftShop]: IconName.Gift,
[FacilityEnum.Golf]: IconName.Golf,
[FacilityEnum.GolfCourse0To30Km]: IconName.Golf,
[FacilityEnum.GuestRoomDoorsHaveASecondLock]: IconName.StarFilled, [FacilityEnum.GuestRoomDoorsHaveASecondLock]: IconName.StarFilled,
[FacilityEnum.Hairdresser]: IconName.StarFilled, [FacilityEnum.Gym]: IconName.Fitness,
[FacilityEnum.HairdryerInRoomAllScandic]: IconName.StarFilled, [FacilityEnum.GymTrainingFacilities]: IconName.Fitness,
[FacilityEnum.Hairdresser]: IconName.Hairdresser,
[FacilityEnum.HairdryerInRoomAllScandic]: IconName.HairdryerInRoomAllScandic,
[FacilityEnum.HandicapFacilities]: IconName.StarFilled, [FacilityEnum.HandicapFacilities]: IconName.StarFilled,
[FacilityEnum.HandrailsInBathrooms]: IconName.StarFilled, [FacilityEnum.HandrailsInBathrooms]: IconName.StarFilled,
[FacilityEnum.HearingInductionLoops]: IconName.StarFilled, [FacilityEnum.HearingInductionLoops]: IconName.StarFilled,
[FacilityEnum.Highway1]: IconName.StarFilled, [FacilityEnum.Highway1]: IconName.StarFilled,
[FacilityEnum.Highway2]: IconName.StarFilled, [FacilityEnum.Highway2]: IconName.StarFilled,
[FacilityEnum.Hiking0To3Km]: IconName.StarFilled, [FacilityEnum.Hiking0To3Km]: IconName.Hiking,
[FacilityEnum.HotelCompliesWithAAASecurityStandards]: IconName.StarFilled, [FacilityEnum.HotelCompliesWithAAASecurityStandards]: IconName.StarFilled,
[FacilityEnum.HotelIsFollowingScandicsSafetySecurityPolicy]: [FacilityEnum.HotelIsFollowingScandicsSafetySecurityPolicy]:
IconName.StarFilled, IconName.StarFilled,
[FacilityEnum.HotelWorksAccordingToScandicsAccessibilityConcepts]: [FacilityEnum.HotelWorksAccordingToScandicsAccessibilityConcepts]:
IconName.StarFilled, IconName.StarFilled,
[FacilityEnum.IceMachine]: IconName.StarFilled, [FacilityEnum.IceMachine]: IconName.IceMachine,
[FacilityEnum.IceMachineReception]: IconName.StarFilled, [FacilityEnum.IceMachineReception]: IconName.IceMachine,
[FacilityEnum.IDRequiredToReplaceAGuestRoomKey]: IconName.StarFilled, [FacilityEnum.IDRequiredToReplaceAGuestRoomKey]: IconName.StarFilled,
[FacilityEnum.IfNoWhatAreTheHoursUse24ClockEx0000To0600]: IconName.StarFilled, [FacilityEnum.IfNoWhatAreTheHoursUse24ClockEx0000To0600]: IconName.StarFilled,
[FacilityEnum.InCountry]: IconName.StarFilled, [FacilityEnum.InCountry]: IconName.StarFilled,
@@ -192,60 +155,93 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.InternetHighSpeedInternetConnectionAllScandic]: [FacilityEnum.InternetHighSpeedInternetConnectionAllScandic]:
IconName.StarFilled, IconName.StarFilled,
[FacilityEnum.InternetHotSpotsAllScandic]: IconName.StarFilled, [FacilityEnum.InternetHotSpotsAllScandic]: IconName.StarFilled,
[FacilityEnum.IroningRoom]: IconName.StarFilled, [FacilityEnum.IroningRoom]: IconName.Ironing,
[FacilityEnum.IronIroningBoardAllScandic]: IconName.StarFilled, [FacilityEnum.IronIroningBoardAllScandic]: IconName.Ironing,
[FacilityEnum.Jacuzzi]: IconName.Jacuzzi,
[FacilityEnum.JacuzziInRoom]: IconName.Jacuzzi,
[FacilityEnum.KayaksForLoan]: IconName.Kayaking,
[FacilityEnum.KeyAccessOnlySecuredFloorsAvailable]: IconName.StarFilled, [FacilityEnum.KeyAccessOnlySecuredFloorsAvailable]: IconName.StarFilled,
[FacilityEnum.KeyAccessOnlyToHealthClubGym]: IconName.Fitness,
[FacilityEnum.KidsPlayRoom]: IconName.StarFilled, [FacilityEnum.KidsPlayRoom]: IconName.StarFilled,
[FacilityEnum.KidsUpToAndIncluding12YearsStayForFree]: IconName.StarFilled, [FacilityEnum.KidsUpToAndIncluding12YearsStayForFree]: IconName.StarFilled,
[FacilityEnum.KitchenInRoom]: IconName.StarFilled, [FacilityEnum.KitchenInRoom]: IconName.Kitchen,
[FacilityEnum.Lake0To1Km]: IconName.StarFilled, [FacilityEnum.Lake0To1Km]: IconName.StarFilled,
[FacilityEnum.LakeOrSea0To1Km]: IconName.StarFilled, [FacilityEnum.LakeOrSea0To1Km]: IconName.StarFilled,
[FacilityEnum.LaptopSafe]: IconName.StarFilled, [FacilityEnum.LaptopSafe]: IconName.LaptopSafe,
[FacilityEnum.LateCheckOutUntil1400Guaranteed]: IconName.Business,
[FacilityEnum.LaundryRoom]: IconName.LaundryMachine,
[FacilityEnum.LaundryService]: IconName.LaundryMachine,
[FacilityEnum.LaundryServiceExpress]: IconName.TshirtWash,
[FacilityEnum.Leisure]: IconName.StarFilled, [FacilityEnum.Leisure]: IconName.StarFilled,
[FacilityEnum.LuggageLockers]: IconName.StarFilled, [FacilityEnum.LifestyleConcierge]: IconName.Concierge,
[FacilityEnum.LuggageStorageAdditionalCost]: IconName.StarFilled, [FacilityEnum.LuggageLockers]: IconName.LuggageLockers,
[FacilityEnum.LuggageStorageNoCost]: IconName.StarFilled, [FacilityEnum.LuggageStorageAdditionalCost]: IconName.Luggage,
[FacilityEnum.Massage]: IconName.StarFilled, [FacilityEnum.LuggageStorageNoCost]: IconName.Luggage,
[FacilityEnum.MinibarInRoom]: IconName.StarFilled, [FacilityEnum.Massage]: IconName.Massage,
[FacilityEnum.MeetingArea]: IconName.Business,
[FacilityEnum.MeetingConferenceFacilities]: IconName.Business,
[FacilityEnum.MeetingRooms]: IconName.Business,
[FacilityEnum.MinibarInRoom]: IconName.Minibar,
[FacilityEnum.MobileLift]: IconName.StarFilled, [FacilityEnum.MobileLift]: IconName.StarFilled,
[FacilityEnum.Mountains0To1Km]: IconName.StarFilled, [FacilityEnum.Mountains0To1Km]: IconName.StarFilled,
[FacilityEnum.MovieChannelsInRoomAllScandic]: IconName.StarFilled, [FacilityEnum.MovieChannelsInRoomAllScandic]: IconName.TVRemote,
[FacilityEnum.MultipleExitsOnEachFloor]: IconName.StarFilled, [FacilityEnum.MultipleExitsOnEachFloor]: IconName.StarFilled,
[FacilityEnum.NonSmokingRoomsAllScandic]: IconName.StarFilled, [FacilityEnum.NonSmokingRoomsAllScandic]: IconName.NonSmoking,
[FacilityEnum.OnSiteTrainingFacilities]: IconName.StarFilled, [FacilityEnum.OnSiteTrainingFacilities]: IconName.Fitness,
[FacilityEnum.OtherExplainInBriefDescription]: IconName.StarFilled, [FacilityEnum.OtherExplainInBriefDescription]: IconName.StarFilled,
[FacilityEnum.OvernightSecurity]: IconName.StarFilled, [FacilityEnum.OutdoorTerrace]: IconName.Deck,
[FacilityEnum.OvernightSecurity]: IconName.Guard,
[FacilityEnum.ParkingAdditionalCost]: IconName.Parking,
[FacilityEnum.ParkingAttendant]: IconName.StarFilled, [FacilityEnum.ParkingAttendant]: IconName.StarFilled,
[FacilityEnum.ParkingElectricCharging]: IconName.ElectricCar,
[FacilityEnum.ParkingFreeParking]: IconName.Parking,
[FacilityEnum.ParkingGarage]: IconName.Garage,
[FacilityEnum.ParkingOutdoor]: IconName.ParkingOutdoor,
[FacilityEnum.PCHookUpInRoom]: IconName.StarFilled, [FacilityEnum.PCHookUpInRoom]: IconName.StarFilled,
[FacilityEnum.PetFriendlyRooms]: IconName.Pets,
[FacilityEnum.PillowAlarmsAvailable]: IconName.StarFilled, [FacilityEnum.PillowAlarmsAvailable]: IconName.StarFilled,
[FacilityEnum.PlayStationInPlayArea]: IconName.StarFilled, [FacilityEnum.PlayStationInPlayArea]: IconName.Gaming,
[FacilityEnum.Pool]: IconName.Swim,
[FacilityEnum.PoolSwimmingPoolJacuzziAtHotel]: IconName.Swim,
[FacilityEnum.PrintingService]: IconName.StarFilled, [FacilityEnum.PrintingService]: IconName.StarFilled,
[FacilityEnum.PropertyMeetsRequirementsFireSafety]: IconName.StarFilled, [FacilityEnum.PropertyMeetsRequirementsFireSafety]: IconName.StarFilled,
[FacilityEnum.PublicAddressSystem]: IconName.StarFilled, [FacilityEnum.PublicAddressSystem]: IconName.StarFilled,
[FacilityEnum.RelaxationSuite]: IconName.StarFilled, [FacilityEnum.RelaxationSuite]: IconName.StarFilled,
[FacilityEnum.Restaurant]: IconName.Restaurant,
[FacilityEnum.RestrictedRoomAccessAllScandic]: IconName.StarFilled, [FacilityEnum.RestrictedRoomAccessAllScandic]: IconName.StarFilled,
[FacilityEnum.RooftopBar]: IconName.Deck,
[FacilityEnum.RoomsAccessibleFromTheInterior]: IconName.StarFilled, [FacilityEnum.RoomsAccessibleFromTheInterior]: IconName.StarFilled,
[FacilityEnum.RoomService]: IconName.RoomService,
[FacilityEnum.RoomWindowsOpen]: IconName.StarFilled, [FacilityEnum.RoomWindowsOpen]: IconName.StarFilled,
[FacilityEnum.RoomWindowsThatOpenHaveLockingDevice]: IconName.StarFilled, [FacilityEnum.RoomWindowsThatOpenHaveLockingDevice]: IconName.StarFilled,
[FacilityEnum.Rural1]: IconName.StarFilled, [FacilityEnum.Rural1]: IconName.StarFilled,
[FacilityEnum.Rural2]: IconName.StarFilled, [FacilityEnum.Rural2]: IconName.StarFilled,
[FacilityEnum.SafeDepositBoxInRoomsAllScandic]: IconName.StarFilled, [FacilityEnum.SafeDepositBoxInRoomsAllScandic]: IconName.SafetyBox,
[FacilityEnum.SafeDepositBoxInRoomsCanHoldA17InchLaptop]: IconName.StarFilled, [FacilityEnum.SafeDepositBoxInRoomsCanHoldA17InchLaptop]: IconName.SafetyBox,
[FacilityEnum.SafeDepositBoxInRoomsCannotHoldALaptop]: IconName.StarFilled, [FacilityEnum.SafeDepositBoxInRoomsCannotHoldALaptop]: IconName.SafetyBox,
[FacilityEnum.SafetyChainsOnGuestRoomDoor]: IconName.StarFilled, [FacilityEnum.SafetyChainsOnGuestRoomDoor]: IconName.StarFilled,
[FacilityEnum.Sauna]: IconName.Sauna,
[FacilityEnum.ScandicShop24Hrs]: IconName.ConvenienceStore24h,
[FacilityEnum.SecondaryLocksOnSlidingGlassDoors]: IconName.StarFilled, [FacilityEnum.SecondaryLocksOnSlidingGlassDoors]: IconName.StarFilled,
[FacilityEnum.SecondaryLocksOnWindows]: IconName.StarFilled, [FacilityEnum.SecondaryLocksOnWindows]: IconName.StarFilled,
[FacilityEnum.Security24Hours]: IconName.StarFilled, [FacilityEnum.Security24Hours]: IconName.Guard,
[FacilityEnum.SecurityEscortsAvailableOnRequest]: IconName.StarFilled, [FacilityEnum.SecurityEscortsAvailableOnRequest]: IconName.Guard,
[FacilityEnum.SecurityPersonnelOnSite]: IconName.StarFilled, [FacilityEnum.SecurityPersonnelOnSite]: IconName.Guard,
[FacilityEnum.SeparateFloorsForWomen]: IconName.StarFilled, [FacilityEnum.SeparateFloorsForWomen]: IconName.StarFilled,
[FacilityEnum.ServesBreakfastAlwaysIncluded]: IconName.Breakfast,
[FacilityEnum.ServesBreakfastNotAlwaysIncluded]: IconName.Breakfast,
[FacilityEnum.ServesOrganicBreakfastAlwaysIncluded]: IconName.Breakfast,
[FacilityEnum.ServesOrganicBreakfastNotAlwaysIncluded]: IconName.Breakfast,
[FacilityEnum.ServiceGuideDogsAllowed]: IconName.StarFilled, [FacilityEnum.ServiceGuideDogsAllowed]: IconName.StarFilled,
[FacilityEnum.ServiceSecurity24Hrs]: IconName.StarFilled, [FacilityEnum.ServiceSecurity24Hrs]: IconName.Guard,
[FacilityEnum.Skiing0To1Km]: IconName.StarFilled, [FacilityEnum.Shopping]: IconName.Shopping,
[FacilityEnum.SkateboardsForLoan]: IconName.Skateboarding,
[FacilityEnum.Skiing0To1Km]: IconName.Skiing,
[FacilityEnum.Skybar]: IconName.LocalBar,
[FacilityEnum.SmokeDetectorsAllScandic]: IconName.StarFilled, [FacilityEnum.SmokeDetectorsAllScandic]: IconName.StarFilled,
[FacilityEnum.Solarium]: IconName.StarFilled, [FacilityEnum.Solarium]: IconName.StarFilled,
[FacilityEnum.SpecialNeedsMenus]: IconName.StarFilled, [FacilityEnum.SpecialNeedsMenus]: IconName.StarFilled,
[FacilityEnum.Sports]: IconName.StarFilled, [FacilityEnum.Sports]: IconName.Sports,
[FacilityEnum.SprinklersAllScandic]: IconName.StarFilled, [FacilityEnum.SprinklersAllScandic]: IconName.StarFilled,
[FacilityEnum.SprinklersInAllHalls]: IconName.StarFilled, [FacilityEnum.SprinklersInAllHalls]: IconName.StarFilled,
[FacilityEnum.SprinklersInAllPublicAreas]: IconName.StarFilled, [FacilityEnum.SprinklersInAllPublicAreas]: IconName.StarFilled,
@@ -264,13 +260,16 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.SwingboltLock]: IconName.StarFilled, [FacilityEnum.SwingboltLock]: IconName.StarFilled,
[FacilityEnum.TeleConferencingFacilitiesAvailable]: IconName.StarFilled, [FacilityEnum.TeleConferencingFacilitiesAvailable]: IconName.StarFilled,
[FacilityEnum.TelevisionsWithSubtitlesOrClosedCaptions]: IconName.StarFilled, [FacilityEnum.TelevisionsWithSubtitlesOrClosedCaptions]: IconName.StarFilled,
[FacilityEnum.Tennis1]: IconName.StarFilled, [FacilityEnum.Tennis1]: IconName.Sports,
[FacilityEnum.Tennis2]: IconName.StarFilled, [FacilityEnum.Tennis2]: IconName.Sports,
[FacilityEnum.TennisPadel]: IconName.StarFilled, [FacilityEnum.TennisPadel]: IconName.Sports,
[FacilityEnum.Theatre]: IconName.StarFilled, [FacilityEnum.Theatre]: IconName.Theatre,
[FacilityEnum.TrouserPress]: IconName.StarFilled, [FacilityEnum.TrouserPress]: IconName.Ironing,
[FacilityEnum.TVWithChromecast1]: IconName.TvCasting,
[FacilityEnum.TVWithChromecast2]: IconName.TvCasting,
[FacilityEnum.UniformSecurityOnPremises]: IconName.StarFilled, [FacilityEnum.UniformSecurityOnPremises]: IconName.StarFilled,
[FacilityEnum.UtilityRoomForIroning]: IconName.StarFilled, [FacilityEnum.UtilityRoomForIroning]: IconName.Ironing,
[FacilityEnum.VendingMachineWithNecessities]: IconName.Dining,
[FacilityEnum.VideoSurveillanceInHallways]: IconName.StarFilled, [FacilityEnum.VideoSurveillanceInHallways]: IconName.StarFilled,
[FacilityEnum.VideoSurveillanceInPublicAreas]: IconName.StarFilled, [FacilityEnum.VideoSurveillanceInPublicAreas]: IconName.StarFilled,
[FacilityEnum.VideoSurveillanceMonitored24HrsADay]: IconName.StarFilled, [FacilityEnum.VideoSurveillanceMonitored24HrsADay]: IconName.StarFilled,
@@ -278,16 +277,29 @@ const facilityToIconMap: Record<FacilityEnum, IconName> = {
[FacilityEnum.VideoSurveillanceOfExteriorFrontEntrance]: IconName.StarFilled, [FacilityEnum.VideoSurveillanceOfExteriorFrontEntrance]: IconName.StarFilled,
[FacilityEnum.VideoSurveillanceRecorded24HrsADayParkingArea]: [FacilityEnum.VideoSurveillanceRecorded24HrsADayParkingArea]:
IconName.StarFilled, IconName.StarFilled,
[FacilityEnum.WallMountedCycleRack]: IconName.StarFilled, [FacilityEnum.WallMountedCycleRack]: IconName.Bike,
[FacilityEnum.WellLitWalkways]: IconName.StarFilled, [FacilityEnum.WellLitWalkways]: IconName.StarFilled,
[FacilityEnum.WheelchairAccess]: IconName.StarFilled, [FacilityEnum.WellnessAndSaunaEntranceFeeAdmission16PlusYears]: IconName.Spa,
[FacilityEnum.WellnessPoolSaunaEntranceFeeAdmission16PlusYears]: IconName.Spa,
[FacilityEnum.WheelchairAccess]: IconName.Wheelchair,
[FacilityEnum.WideCorridors]: IconName.StarFilled, [FacilityEnum.WideCorridors]: IconName.StarFilled,
[FacilityEnum.WideEntrance]: IconName.StarFilled, [FacilityEnum.WideEntrance]: IconName.StarFilled,
[FacilityEnum.WideRestaurantEntrance]: IconName.StarFilled, [FacilityEnum.WideRestaurantEntrance]: IconName.StarFilled,
[FacilityEnum.WiFiWirelessInternetAccessAllScandic]: IconName.StarFilled, [FacilityEnum.WiFiWirelessInternetAccessAllScandic]: IconName.StarFilled,
} }
export function mapFacilityToIcon(id: FacilityEnum): FC<IconProps> | null { interface mapFacilityToIconProps {
const iconName = facilityToIconMap[id] id: FacilityEnum
return getIconByIconName(iconName) || null }
export function FacilityToIcon({
id,
...props
}: mapFacilityToIconProps &
(
| MaterialIconSetIconProps
| NucleoIconProps
| IconProps
)): JSX.Element | null {
const iconName = facilityToIconMap[id]
return <IconByIconName iconName={iconName} {...props} />
} }

View File

@@ -1,6 +1,5 @@
"use client" "use client"
import { useRef, useState } from "react" import { useRef, useState } from "react"
import { useIntl } from "react-intl"
import Grids from "@/components/TempDesignSystem/Grids" import Grids from "@/components/TempDesignSystem/Grids"
import MeetingRoomCard from "@/components/TempDesignSystem/MeetingRoomCard" import MeetingRoomCard from "@/components/TempDesignSystem/MeetingRoomCard"
@@ -17,7 +16,6 @@ interface MeetingsAdditionalContentProps {
export default function MeetingsAdditionalContent({ export default function MeetingsAdditionalContent({
rooms, rooms,
}: MeetingsAdditionalContentProps) { }: MeetingsAdditionalContentProps) {
const intl = useIntl()
const showToggleButton = rooms.length > 3 const showToggleButton = rooms.length > 3
const [allRoomsVisible, setAllRoomsVisible] = useState(!showToggleButton) const [allRoomsVisible, setAllRoomsVisible] = useState(!showToggleButton)
@@ -43,12 +41,6 @@ export default function MeetingsAdditionalContent({
<ShowMoreButton <ShowMoreButton
loadMoreData={handleShowMore} loadMoreData={handleShowMore}
showLess={allRoomsVisible} showLess={allRoomsVisible}
textShowMore={intl.formatMessage({
id: "Show more",
})}
textShowLess={intl.formatMessage({
id: "Show less",
})}
/> />
) : null} ) : null}
</div> </div>

View File

@@ -95,6 +95,7 @@ function renderNode(domNode: Node, idx: number) {
return <br key={domNode.name + idx} /> return <br key={domNode.name + idx} />
case NodeNames.a: case NodeNames.a:
console.log(domNode.attribs.target)
return ( return (
<Link <Link
key={domNode.name + idx} key={domNode.name + idx}

View File

@@ -1,6 +1,6 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { OpenInNewSmallIcon } from "@/components/Icons"
import OpeningHours from "@/components/OpeningHours" import OpeningHours from "@/components/OpeningHours"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -66,7 +66,11 @@ export default async function RestaurantSidebar({
variant="icon" variant="icon"
> >
{name} {name}
<OpenInNewSmallIcon color="peach80" /> <MaterialIcon
icon="open_in_new"
size={20}
color="CurrentColor"
/>
</Link> </Link>
</li> </li>
))} ))}

View File

@@ -4,10 +4,11 @@ import { useState } from "react"
import { DayPicker } from "react-day-picker" import { DayPicker } from "react-day-picker"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Lang } from "@/constants/languages" import { Lang } from "@/constants/languages"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { ChevronLeftIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -88,10 +89,10 @@ export default function DatePickerRangeDesktop({
components={{ components={{
Chevron(props) { Chevron(props) {
return ( return (
<ChevronLeftIcon <MaterialIcon
icon="chevron_left"
className={props.className} className={props.className}
height={20} size={20}
width={20}
/> />
) )
}, },

View File

@@ -2,10 +2,11 @@
import { DayPicker } from "react-day-picker" import { DayPicker } from "react-day-picker"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Lang } from "@/constants/languages" import { Lang } from "@/constants/languages"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { CloseLargeIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
@@ -38,7 +39,7 @@ export default function DatePickerRangeMobile({
<div className={styles.container}> <div className={styles.container}>
<header className={styles.header}> <header className={styles.header}>
<button className={styles.close} onClick={close} type="button"> <button className={styles.close} onClick={close} type="button">
<CloseLargeIcon /> <MaterialIcon icon="close" />
</button> </button>
</header> </header>
<DayPicker <DayPicker

View File

@@ -4,10 +4,11 @@ import { useState } from "react"
import { DayPicker } from "react-day-picker" import { DayPicker } from "react-day-picker"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Lang } from "@/constants/languages" import { Lang } from "@/constants/languages"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { ChevronLeftIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -89,10 +90,10 @@ export default function DatePickerSingleDesktop({
components={{ components={{
Chevron(props) { Chevron(props) {
return ( return (
<ChevronLeftIcon <MaterialIcon
icon="chevron_left"
className={props.className} className={props.className}
height={20} size={20}
width={20}
/> />
) )
}, },

View File

@@ -2,6 +2,8 @@
import { DayPicker } from "react-day-picker" import { DayPicker } from "react-day-picker"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { Lang } from "@/constants/languages" import { Lang } from "@/constants/languages"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"

View File

@@ -2,7 +2,8 @@
import { Checkbox as AriaCheckbox } from "react-aria-components" import { Checkbox as AriaCheckbox } from "react-aria-components"
import CheckIcon from "@/components/Icons/Check" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import styles from "./checkbox.module.css" import styles from "./checkbox.module.css"
@@ -29,7 +30,7 @@ export default function Checkbox({
{({ isSelected }) => ( {({ isSelected }) => (
<> <>
<span className={styles.checkbox}> <span className={styles.checkbox}>
{isSelected && <CheckIcon color="white" />} {isSelected && <MaterialIcon icon="check" color="Icon/Inverted" />}
</span> </span>
<Body asChild> <Body asChild>
<span>{name}</span> <span>{name}</span>

View File

@@ -10,9 +10,10 @@ import {
} from "react-aria-components" } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { useDestinationDataStore } from "@/stores/destination-data" import { useDestinationDataStore } from "@/stores/destination-data"
import { CloseLargeIcon, FilterIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Footnote from "@/components/TempDesignSystem/Text/Footnote" import Footnote from "@/components/TempDesignSystem/Text/Footnote"
@@ -114,7 +115,7 @@ export default function DestinationFilterAndSort({
<DialogTrigger onOpenChange={handleClose}> <DialogTrigger onOpenChange={handleClose}>
<div className={styles.buttonWrapper}> <div className={styles.buttonWrapper}>
<Button intent="text" theme="base" variant="icon"> <Button intent="text" theme="base" variant="icon">
<FilterIcon color="baseTextHighcontrast" /> <MaterialIcon icon="filter_alt" color="CurrentColor" />
{intl.formatMessage({ id: "Filter and sort" })} {intl.formatMessage({ id: "Filter and sort" })}
</Button> </Button>
{activeFilters.length > 0 && ( {activeFilters.length > 0 && (
@@ -145,7 +146,7 @@ export default function DestinationFilterAndSort({
type="button" type="button"
className={styles.close} className={styles.close}
> >
<CloseLargeIcon /> <MaterialIcon icon="close" />
</button> </button>
</header> </header>
<div className={styles.content}> <div className={styles.content}>

View File

@@ -1,15 +1,17 @@
"use client" "use client"
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconByIconName } from "@/components/Icons/IconByIconName"
import { trackSocialMediaClick } from "@/utils/tracking" import { trackSocialMediaClick } from "@/utils/tracking"
import type { SocialIconsProps } from "@/types/components/footer/socialIcons" import type { SocialIconsProps } from "@/types/components/footer/socialIcons"
import type { SocialLinkProps } from "@/types/components/footer/socialLink" import type { SocialLinkProps } from "@/types/components/footer/socialLink"
import type { IconName } from "@/types/components/icon" import type { IconName } from "@/components/Icons/iconName"
function SocialIcon({ iconName }: SocialIconsProps) { function SocialIcon({ iconName }: SocialIconsProps) {
const SocialIcon = getIconByIconName(iconName as IconName) const SocialIcon = (
return SocialIcon ? <SocialIcon color="white" /> : <span>{iconName}</span> <IconByIconName iconName={iconName} color="Icon/Inverted" />
)
return SocialIcon ? SocialIcon : <span>{iconName}</span>
} }
export default function SocialLink({ link }: SocialLinkProps) { export default function SocialLink({ link }: SocialLinkProps) {
@@ -23,7 +25,7 @@ export default function SocialLink({ link }: SocialLinkProps) {
aria-label={title} aria-label={title}
onClick={() => trackSocialMediaClick(title)} onClick={() => trackSocialMediaClick(title)}
> >
<SocialIcon iconName={title} /> <SocialIcon iconName={title as IconName} />
</a> </a>
) )
} }

View File

@@ -1,6 +1,7 @@
"use client" "use client"
import { ArrowRightIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
@@ -25,7 +26,10 @@ export default function FooterMainNav({ mainLinks }: FooterMainNavProps) {
onClick={() => trackFooterClick("main", link.title)} onClick={() => trackFooterClick("main", link.title)}
> >
{link.title} {link.title}
<ArrowRightIcon color="peach80" /> <MaterialIcon
icon="arrow_forward"
color="Icon/Interactive/Secondary"
/>
</Link> </Link>
</Subtitle> </Subtitle>
</li> </li>
@@ -46,7 +50,10 @@ export function FooterMainNavSkeleton() {
<Subtitle color="baseTextHighContrast" type="two" asChild> <Subtitle color="baseTextHighContrast" type="two" asChild>
<span className={styles.mainNavigationLink}> <span className={styles.mainNavigationLink}>
<SkeletonShimmer width="80%" /> <SkeletonShimmer width="80%" />
<ArrowRightIcon color="peach80" /> <MaterialIcon
icon="arrow_forward"
color="Icon/Interactive/Secondary"
/>
</span> </span>
</Subtitle> </Subtitle>
</li> </li>

View File

@@ -4,9 +4,10 @@ import { type FieldError, useFormContext } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { useMediaQuery } from "usehooks-ts" import { useMediaQuery } from "usehooks-ts"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { REDEMPTION } from "@/constants/booking" import { REDEMPTION } from "@/constants/booking"
import { ErrorCircleIcon, InfoCircleIcon } from "@/components/Icons"
import Modal from "@/components/Modal" import Modal from "@/components/Modal"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Checkbox from "@/components/TempDesignSystem/Form/Checkbox" import Checkbox from "@/components/TempDesignSystem/Form/Checkbox"
@@ -212,7 +213,11 @@ function CodeRulesModal() {
<Modal <Modal
trigger={ trigger={
<Button intent="text"> <Button intent="text">
<InfoCircleIcon color="uiTextPlaceholder" height={20} width={20} /> <MaterialIcon
icon="info"
color="Icon/Interactive/Placeholder"
size={20}
/>
</Button> </Button>
} }
title={codeVoucher} title={codeVoucher}
@@ -257,8 +262,11 @@ function BookingCodeError({ codeError }: { codeError: FieldError }) {
return ( return (
<div className={styles.errorContainer}> <div className={styles.errorContainer}>
<Caption color={isInvalidErr ? "red" : "blue"} className={styles.error}> <Caption color={isInvalidErr ? "red" : "blue"} className={styles.error}>
<ErrorCircleIcon <MaterialIcon
color={isInvalidErr ? "red" : "blue"} icon="error"
color={
isInvalidErr ? "Icon/Feedback/Information" : "Icon/Feedback/Error"
}
className={styles.errorIcon} className={styles.errorIcon}
/> />
{intl.formatMessage({ id: codeError.message })} {intl.formatMessage({ id: codeError.message })}

View File

@@ -4,9 +4,10 @@ import { useCallback, useEffect, useRef } from "react"
import { useFormContext } from "react-hook-form" import { useFormContext } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { REDEMPTION } from "@/constants/booking" import { REDEMPTION } from "@/constants/booking"
import { InfoCircleIcon } from "@/components/Icons"
import Checkbox from "@/components/TempDesignSystem/Form/Checkbox" import Checkbox from "@/components/TempDesignSystem/Form/Checkbox"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -87,7 +88,12 @@ export default function RewardNight() {
{redemptionErr && ( {redemptionErr && (
<div className={styles.errorContainer}> <div className={styles.errorContainer}>
<Caption className={styles.error} type="regular" color="blue"> <Caption className={styles.error} type="regular" color="blue">
<InfoCircleIcon color="blue" className={styles.errorIcon} /> <MaterialIcon
icon="error"
size={24}
color="Icon/Feedback/Information"
className={styles.errorIcon}
/>
{intl.formatMessage({ id: redemptionErr.message })} {intl.formatMessage({ id: redemptionErr.message })}
</Caption> </Caption>
{isMultiRoomError ? <RemoveExtraRooms /> : null} {isMultiRoomError ? <RemoveExtraRooms /> : null}

View File

@@ -1,7 +1,8 @@
"use client" "use client"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { DeleteIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
import { buttonVariants } from "./variants" import { buttonVariants } from "./variants"
@@ -32,7 +33,7 @@ export default function ClearSearchButton({
tabIndex={0} tabIndex={0}
type="button" type="button"
> >
<DeleteIcon color="burgundy" height={20} width={20} /> <MaterialIcon icon="delete" color="Icon/Interactive/Default" size={20} />
<Caption color="burgundy" type="bold" asChild> <Caption color="burgundy" type="bold" asChild>
<span>{intl.formatMessage({ id: "Clear searches" })}</span> <span>{intl.formatMessage({ id: "Clear searches" })}</span>
</Caption> </Caption>

View File

@@ -3,7 +3,8 @@ import { useEffect, useState } from "react"
import { useFormContext } from "react-hook-form" import { useFormContext } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ErrorCircleIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -71,7 +72,7 @@ export default function SearchList({
variant="error" variant="error"
> >
<Caption className={styles.heading} color="red"> <Caption className={styles.heading} color="red">
<ErrorCircleIcon color="red" /> <MaterialIcon icon="error" color="Icon/Interactive/Accent" />
{intl.formatMessage({ id: "Enter destination or hotel" })} {intl.formatMessage({ id: "Enter destination or hotel" })}
</Caption> </Caption>
<Body> <Body>
@@ -89,7 +90,7 @@ export default function SearchList({
variant="error" variant="error"
> >
<Caption className={styles.heading} color="red"> <Caption className={styles.heading} color="red">
<ErrorCircleIcon color="red" /> <MaterialIcon icon="error" color="Icon/Interactive/Accent" />
{intl.formatMessage({ id: "No results" })} {intl.formatMessage({ id: "No results" })}
</Caption> </Caption>
<Body> <Body>

View File

@@ -2,11 +2,12 @@
import { useFormContext, useWatch } from "react-hook-form" import { useFormContext, useWatch } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import DatePicker from "@/components/DatePicker" import DatePicker from "@/components/DatePicker"
import GuestsRoomsPickerForm from "@/components/GuestsRoomsPicker" import GuestsRoomsPickerForm from "@/components/GuestsRoomsPicker"
import { SearchIcon } from "@/components/Icons"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -77,7 +78,7 @@ export default function FormContent({
type="submit" type="submit"
> >
<span className={styles.icon}> <span className={styles.icon}>
<SearchIcon color="white" width={28} height={28} /> <MaterialIcon icon="search" color="Icon/Inverted" size={28} />
</span> </span>
</Button> </Button>
</div> </div>
@@ -109,7 +110,7 @@ export default function FormContent({
<span>{intl.formatMessage({ id: "Search" })}</span> <span>{intl.formatMessage({ id: "Search" })}</span>
</Caption> </Caption>
<span className={styles.icon}> <span className={styles.icon}>
<SearchIcon color="white" width={28} height={28} /> <MaterialIcon icon="search" color="Icon/Inverted" size={28} />
</span> </span>
</Button> </Button>
</div> </div>
@@ -163,7 +164,7 @@ export function BookingWidgetFormContentSkeleton() {
<span>{intl.formatMessage({ id: "Search" })}</span> <span>{intl.formatMessage({ id: "Search" })}</span>
</Caption> </Caption>
<span className={styles.icon}> <span className={styles.icon}>
<SearchIcon color="white" width={28} height={28} /> <MaterialIcon icon="search" color="Icon/Inverted" size={28} />
</span> </span>
</Button> </Button>
</div> </div>

View File

@@ -3,7 +3,8 @@
import { useFormContext } from "react-hook-form" import { useFormContext } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ErrorCircleIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Select from "@/components/TempDesignSystem/Select" import Select from "@/components/TempDesignSystem/Select"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -120,14 +121,14 @@ export default function ChildInfoSelector({
{roomErrors && roomErrors.message ? ( {roomErrors && roomErrors.message ? (
<Caption color="red" className={styles.error}> <Caption color="red" className={styles.error}>
<ErrorCircleIcon color="red" /> <MaterialIcon icon="error" color="Icon/Interactive/Accent" />
{roomErrors.message} {roomErrors.message}
</Caption> </Caption>
) : null} ) : null}
{ageError || bedError ? ( {ageError || bedError ? (
<Caption color="red" className={styles.error}> <Caption color="red" className={styles.error}>
<ErrorCircleIcon color="red" /> <MaterialIcon icon="error" color="Icon/Interactive/Accent" />
{errorMessage} {errorMessage}
</Caption> </Caption>
) : null} ) : null}

View File

@@ -1,6 +1,7 @@
"use client" "use client"
import { MinusIcon, PlusIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -27,7 +28,7 @@ export default function Counter({
wrapping={true} wrapping={true}
disabled={disableDecrease} disabled={disableDecrease}
> >
<MinusIcon color="burgundy" /> <MaterialIcon icon="remove" color="CurrentColor" />
</Button> </Button>
<Body color="baseTextHighContrast" textAlign="center"> <Body color="baseTextHighContrast" textAlign="center">
{count} {count}
@@ -42,7 +43,7 @@ export default function Counter({
size="small" size="small"
disabled={disableIncrease} disabled={disableIncrease}
> >
<PlusIcon color="burgundy" /> <MaterialIcon icon="add" color="CurrentColor" />
</Button> </Button>
</div> </div>
) )

View File

@@ -4,9 +4,10 @@ import { useCallback, useEffect } from "react"
import { useFormContext, useWatch } from "react-hook-form" import { useFormContext, useWatch } from "react-hook-form"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { REDEMPTION } from "@/constants/booking" import { REDEMPTION } from "@/constants/booking"
import { CloseLargeIcon, PlusCircleIcon, PlusIcon } from "../Icons"
import Button from "../TempDesignSystem/Button" import Button from "../TempDesignSystem/Button"
import { Tooltip } from "../TempDesignSystem/Tooltip" import { Tooltip } from "../TempDesignSystem/Tooltip"
import { GuestsRoom } from "./GuestsRoom" import { GuestsRoom } from "./GuestsRoom"
@@ -83,7 +84,7 @@ export default function GuestsRoomsPickerDialog({
<section className={styles.contentWrapper}> <section className={styles.contentWrapper}>
<header className={styles.header}> <header className={styles.header}>
<button type="button" className={styles.close} onClick={onClose}> <button type="button" className={styles.close} onClick={onClose}>
<CloseLargeIcon /> <MaterialIcon icon="close" />
</button> </button>
</header> </header>
@@ -113,7 +114,7 @@ export default function GuestsRoomsPickerDialog({
onPress={handleAddRoom} onPress={handleAddRoom}
disabled disabled
> >
<PlusIcon /> <MaterialIcon icon="add" color="CurrentColor" />
{addRoomLabel} {addRoomLabel}
</Button> </Button>
</Tooltip> </Tooltip>
@@ -129,7 +130,7 @@ export default function GuestsRoomsPickerDialog({
fullWidth fullWidth
onPress={handleAddRoom} onPress={handleAddRoom}
> >
<PlusIcon /> <MaterialIcon icon="add" color="CurrentColor" />
{addRoomLabel} {addRoomLabel}
</Button> </Button>
</div> </div>
@@ -153,7 +154,7 @@ export default function GuestsRoomsPickerDialog({
disabled disabled
onPress={handleAddRoom} onPress={handleAddRoom}
> >
<PlusCircleIcon /> <MaterialIcon icon="add_circle" color="CurrentColor" />
{addRoomLabel} {addRoomLabel}
</Button> </Button>
</Tooltip> </Tooltip>
@@ -168,7 +169,7 @@ export default function GuestsRoomsPickerDialog({
theme="base" theme="base"
onPress={handleAddRoom} onPress={handleAddRoom}
> >
<PlusCircleIcon /> <MaterialIcon icon="add_circle" color="CurrentColor" />
{addRoomLabel} {addRoomLabel}
</Button> </Button>
</div> </div>

View File

@@ -1,6 +1,7 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { DeleteIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
@@ -63,7 +64,7 @@ export function GuestsRoom({
size="small" size="small"
className={styles.roomActionsButton} className={styles.roomActionsButton}
> >
<DeleteIcon color="red" /> <MaterialIcon icon="delete" color="CurrentColor" />
<span className={styles.roomActionsLabel}> <span className={styles.roomActionsLabel}>
{intl.formatMessage({ id: "Remove room" })} {intl.formatMessage({ id: "Remove room" })}
</span> </span>

View File

@@ -2,7 +2,7 @@
import Link from "next/link" import Link from "next/link"
import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconByIconName } from "@/components/Icons/IconByIconName"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
import styles from "./headerLink.module.css" import styles from "./headerLink.module.css"
@@ -16,12 +16,15 @@ export default function HeaderLink({
iconSize = 20, iconSize = 20,
onClick = () => undefined, onClick = () => undefined,
}: HeaderLinkProps) { }: HeaderLinkProps) {
const Icon = getIconByIconName(iconName)
return ( return (
<Caption type="regular" color="textMediumContrast" asChild> <Caption type="regular" color="textMediumContrast" asChild>
<Link href={href} className={styles.headerLink} onClick={onClick}> <Link href={href} className={styles.headerLink} onClick={onClick}>
{Icon ? ( {iconName ? (
<Icon className={styles.icon} width={iconSize} height={iconSize} /> <IconByIconName
iconName={iconName}
className={styles.icon}
size={iconSize}
/>
) : null} ) : null}
{children} {children}
</Link> </Link>

View File

@@ -1,4 +1,5 @@
import { PersonIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Image from "@/components/Image" import Image from "@/components/Image"
import Footnote from "@/components/TempDesignSystem/Text/Footnote" import Footnote from "@/components/TempDesignSystem/Text/Footnote"
@@ -8,7 +9,7 @@ import type { AvatarProps } from "@/types/components/header/avatar"
export default function Avatar({ image, initials }: AvatarProps) { export default function Avatar({ image, initials }: AvatarProps) {
let classNames = [styles.avatar] let classNames = [styles.avatar]
let element = <PersonIcon color="white" /> let element = <MaterialIcon icon="person" color="Icon/Inverted" />
if (image) { if (image) {
classNames.push(styles.image) classNames.push(styles.image)
element = <Image src={image.src} alt={image.alt} width={28} height={28} /> element = <Image src={image.src} alt={image.alt} width={28} height={28} />

View File

@@ -2,9 +2,10 @@
import NextLink from "next/link" import NextLink from "next/link"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { ScandicLogoIcon } from "@scandic-hotels/design-system/Icons"
import useDropdownStore from "@/stores/main-menu" import useDropdownStore from "@/stores/main-menu"
import { ScandicLogoIcon } from "@/components/Icons"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
import styles from "./logoLink.module.css" import styles from "./logoLink.module.css"
@@ -29,7 +30,11 @@ export function LogoLink() {
onClick={handleNavigate} onClick={handleNavigate}
aria-label={intl.formatMessage({ id: "Back to scandichotels.com" })} aria-label={intl.formatMessage({ id: "Back to scandichotels.com" })}
> >
<ScandicLogoIcon width="103px" height="22px" color="red" /> <ScandicLogoIcon
width="103px"
height="22px"
color="Icon/Interactive/Accent"
/>
</NextLink> </NextLink>
) )
} }

View File

@@ -9,6 +9,7 @@ import { customerService } from "@/constants/currentWebHrefs"
import { findMyBooking } from "@/constants/routes/findMyBooking" import { findMyBooking } from "@/constants/routes/findMyBooking"
import useDropdownStore from "@/stores/main-menu" import useDropdownStore from "@/stores/main-menu"
import { IconName } from "@/components/Icons/iconName"
import LanguageSwitcher from "@/components/LanguageSwitcher" import LanguageSwitcher from "@/components/LanguageSwitcher"
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp" import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
@@ -20,7 +21,6 @@ import styles from "./mobileMenu.module.css"
import { DropdownTypeEnum } from "@/types/components/dropdown/dropdown" import { DropdownTypeEnum } from "@/types/components/dropdown/dropdown"
import type { MobileMenuProps } from "@/types/components/header/mobileMenu" import type { MobileMenuProps } from "@/types/components/header/mobileMenu"
import { IconName } from "@/types/components/icon"
export default function MobileMenu({ export default function MobileMenu({
children, children,

View File

@@ -3,9 +3,10 @@
import { useRef } from "react" import { useRef } from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import useDropdownStore from "@/stores/main-menu" import useDropdownStore from "@/stores/main-menu"
import { ChevronDownSmallIcon } from "@/components/Icons"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
import useClickOutside from "@/hooks/useClickOutside" import useClickOutside from "@/hooks/useClickOutside"
@@ -65,9 +66,11 @@ export default function MyPagesMenu({
)} )}
</span> </span>
</Body> </Body>
<ChevronDownSmallIcon <MaterialIcon
icon="keyboard_arrow_down"
size={20}
className={`${styles.chevron} ${isMyPagesMenuOpen ? styles.isExpanded : ""}`} className={`${styles.chevron} ${isMyPagesMenuOpen ? styles.isExpanded : ""}`}
color="red" color="Icon/Interactive/Accent"
/> />
</MainMenuButton> </MainMenuButton>
{isMyPagesMenuOpen ? ( {isMyPagesMenuOpen ? (
@@ -92,7 +95,12 @@ export function MyPagesMenuSkeleton() {
<MainMenuButton> <MainMenuButton>
<Avatar /> <Avatar />
<SkeletonShimmer width="10ch" /> <SkeletonShimmer width="10ch" />
<ChevronDownSmallIcon className={`${styles.chevron}`} color="red" /> <MaterialIcon
icon="keyboard_arrow_down"
size={20}
className={`${styles.chevron}`}
color="Icon/Interactive/Accent"
/>
</MainMenuButton> </MainMenuButton>
</div> </div>
) )

View File

@@ -3,10 +3,11 @@
import FocusLock from "react-focus-lock" import FocusLock from "react-focus-lock"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { logout } from "@/constants/routes/handleAuth" import { logout } from "@/constants/routes/handleAuth"
import { trpc } from "@/lib/trpc/client" import { trpc } from "@/lib/trpc/client"
import { ArrowRightIcon } from "@/components/Icons"
import Divider from "@/components/TempDesignSystem/Divider" import Divider from "@/components/TempDesignSystem/Divider"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -100,7 +101,11 @@ function PrimaryLinks({
className={styles.link} className={styles.link}
> >
{link.text} {link.text}
<ArrowRightIcon className={styles.arrow} color="burgundy" /> <MaterialIcon
icon="arrow_forward"
className={styles.arrow}
color="CurrentColor"
/>
</Link> </Link>
</li> </li>
))} ))}
@@ -130,7 +135,11 @@ function SecondaryLinks({
className={styles.link} className={styles.link}
> >
{link.text} {link.text}
<ArrowRightIcon className={styles.arrow} color="burgundy" /> <MaterialIcon
icon="arrow_forward"
className={styles.arrow}
color="Icon/Interactive/Default"
/>
</Link> </Link>
</li> </li>
))} ))}

View File

@@ -2,9 +2,10 @@
import FocusLock from "react-focus-lock" import FocusLock from "react-focus-lock"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import useDropdownStore from "@/stores/main-menu" import useDropdownStore from "@/stores/main-menu"
import { ArrowRightIcon, ChevronLeftIcon } from "@/components/Icons"
import Card from "@/components/TempDesignSystem/Card" import Card from "@/components/TempDesignSystem/Card"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -43,7 +44,11 @@ export default function MegaMenu({
className={styles.backButton} className={styles.backButton}
onClick={() => toggleMegaMenu(false)} onClick={() => toggleMegaMenu(false)}
> >
<ChevronLeftIcon color="red" height={20} width={20} /> <MaterialIcon
icon="chevron_left"
size={20}
color="Icon/Interactive/Accent"
/>
<Subtitle type="one" color="burgundy" asChild> <Subtitle type="one" color="burgundy" asChild>
<span>{title}</span> <span>{title}</span>
</Subtitle> </Subtitle>
@@ -61,7 +66,7 @@ export default function MegaMenu({
onClick={handleNavigate} onClick={handleNavigate}
> >
{seeAllLink.title} {seeAllLink.title}
<ArrowRightIcon color="burgundy" /> <MaterialIcon icon="arrow_forward" color="CurrentColor" />
</Link> </Link>
) : null} ) : null}
</div> </div>
@@ -87,8 +92,9 @@ export default function MegaMenu({
onClick={handleNavigate} onClick={handleNavigate}
> >
{title} {title}
<ArrowRightIcon <MaterialIcon
color="burgundy" icon="arrow_forward"
color="Icon/Interactive/Default"
className={styles.arrow} className={styles.arrow}
/> />
</Link> </Link>

View File

@@ -2,9 +2,10 @@
import { useRef } from "react" import { useRef } from "react"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import useDropdownStore from "@/stores/main-menu" import useDropdownStore from "@/stores/main-menu"
import { ChevronDownSmallIcon, ChevronRightIcon } from "@/components/Icons"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
import useClickOutside from "@/hooks/useClickOutside" import useClickOutside from "@/hooks/useClickOutside"
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp" import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
@@ -49,16 +50,18 @@ export default function MenuItem({ item, isMobile }: NavigationMenuItemProps) {
> >
{title} {title}
{isMobile ? ( {isMobile ? (
<ChevronRightIcon <MaterialIcon
icon="chevron_right"
size={20}
className={`${styles.chevron}`} className={`${styles.chevron}`}
color="red" color="Icon/Interactive/Accent"
height={20}
width={20}
/> />
) : ( ) : (
<ChevronDownSmallIcon <MaterialIcon
icon="keyboard_arrow_down"
size={20}
className={`${styles.chevron} ${isMegaMenuOpen ? styles.isExpanded : ""}`} className={`${styles.chevron} ${isMegaMenuOpen ? styles.isExpanded : ""}`}
color="red" color="Icon/Interactive/Accent"
/> />
)} )}
</MainMenuButton> </MainMenuButton>

View File

@@ -1,7 +1,8 @@
import { IconName } from "@/components/Icons/iconName"
import HeaderLink from "../HeaderLink" import HeaderLink from "../HeaderLink"
import type { TopLinkProps } from "@/types/components/header/topLink" import type { TopLinkProps } from "@/types/components/header/topLink"
import { IconName } from "@/types/components/icon"
export default function TopLink({ export default function TopLink({
isLoggedIn, isLoggedIn,

View File

@@ -2,6 +2,7 @@ import { findMyBooking } from "@/constants/routes/findMyBooking"
import { getHeader } from "@/lib/trpc/memoizedRequests" import { getHeader } from "@/lib/trpc/memoizedRequests"
import { auth } from "@/auth" import { auth } from "@/auth"
import { IconName } from "@/components/Icons/iconName"
import LanguageSwitcher from "@/components/LanguageSwitcher" import LanguageSwitcher from "@/components/LanguageSwitcher"
import SkeletonShimmer from "@/components/SkeletonShimmer" import SkeletonShimmer from "@/components/SkeletonShimmer"
import Caption from "@/components/TempDesignSystem/Text/Caption" import Caption from "@/components/TempDesignSystem/Text/Caption"
@@ -14,8 +15,6 @@ import TopLink from "../TopLink"
import styles from "./topMenu.module.css" import styles from "./topMenu.module.css"
import { IconName } from "@/types/components/icon"
export default async function TopMenu() { export default async function TopMenu() {
// cached // cached
const intl = await getIntl() const intl = await getIntl()

View File

@@ -1,7 +1,8 @@
"use client" "use client"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { CalendarAddIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
export default function AddToCalendarButton({ export default function AddToCalendarButton({
@@ -13,7 +14,7 @@ export default function AddToCalendarButton({
return ( return (
<Button intent="text" size="small" theme="base" wrapping onPress={onPress}> <Button intent="text" size="small" theme="base" wrapping onPress={onPress}>
<CalendarAddIcon /> <MaterialIcon icon="calendar_add_on" color="CurrentColor" />
{intl.formatMessage({ id: "Add to calendar" })} {intl.formatMessage({ id: "Add to calendar" })}
</Button> </Button>
) )

View File

@@ -2,7 +2,8 @@
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { useReactToPrint } from "react-to-print" import { useReactToPrint } from "react-to-print"
import { DownloadIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import type { DownloadInvoiceProps } from "@/types/components/hotelReservation/bookingConfirmation/actions/downloadInvoice" import type { DownloadInvoiceProps } from "@/types/components/hotelReservation/bookingConfirmation/actions/downloadInvoice"
@@ -24,7 +25,7 @@ export default function DownloadInvoice({ mainRef }: DownloadInvoiceProps) {
variant="icon" variant="icon"
wrapping wrapping
> >
<DownloadIcon /> <MaterialIcon icon="download" color="CurrentColor" />
{intl.formatMessage({ id: "Download invoice" })} {intl.formatMessage({ id: "Download invoice" })}
</Button> </Button>
) )

View File

@@ -1,7 +1,8 @@
"use client" "use client"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { EditIcon } from "@/components/Icons" import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Link from "@/components/TempDesignSystem/Link" import Link from "@/components/TempDesignSystem/Link"
@@ -20,7 +21,7 @@ export default function ManageBooking({ bookingUrl }: ManageBookingProps) {
wrapping wrapping
> >
<Link color="none" href={bookingUrl} weight="bold"> <Link color="none" href={bookingUrl} weight="bold">
<EditIcon /> <MaterialIcon icon="edit_square" color="CurrentColor" />
{intl.formatMessage({ id: "Manage booking" })} {intl.formatMessage({ id: "Manage booking" })}
</Link> </Link>
</Button> </Button>

View File

@@ -2,11 +2,11 @@
import React from "react" import React from "react"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons"
import { dt } from "@/lib/dt" import { dt } from "@/lib/dt"
import { useBookingConfirmationStore } from "@/stores/booking-confirmation" import { useBookingConfirmationStore } from "@/stores/booking-confirmation"
import { PriceTagIcon } from "@/components/Icons"
import ChevronRightSmallIcon from "@/components/Icons/ChevronRightSmall"
import Modal from "@/components/Modal" import Modal from "@/components/Modal"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
import Body from "@/components/TempDesignSystem/Text/Body" import Body from "@/components/TempDesignSystem/Text/Body"
@@ -106,7 +106,7 @@ export default function PriceDetailsModal() {
<Caption color="burgundy"> <Caption color="burgundy">
{intl.formatMessage({ id: "Price details" })} {intl.formatMessage({ id: "Price details" })}
</Caption> </Caption>
<ChevronRightSmallIcon color="burgundy" height="20px" width="20px" /> <MaterialIcon icon="chevron_right" color="CurrentColor" size={20} />
</Button> </Button>
} }
> >
@@ -220,7 +220,7 @@ export default function PriceDetailsModal() {
{bookingCode && ( {bookingCode && (
<tr className={styles.row}> <tr className={styles.row}>
<td> <td>
<PriceTagIcon /> <MaterialIcon icon="sell" />
{bookingCode} {bookingCode}
</td> </td>
<td></td> <td></td>

Some files were not shown because too many files have changed in this diff Show More