@entur/travel 6.3.16 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TravelTag.d.ts +4 -0
- package/dist/styles.css +345 -336
- package/dist/travel.cjs.js +16 -37
- package/dist/travel.cjs.js.map +1 -1
- package/dist/travel.esm.js +17 -38
- package/dist/travel.esm.js.map +1 -1
- package/dist/utils.d.ts +3 -0
- package/package.json +6 -6
package/dist/travel.cjs.js
CHANGED
|
@@ -172,50 +172,28 @@ const TravelTag = ({
|
|
|
172
172
|
label,
|
|
173
173
|
labelPlacement = "right",
|
|
174
174
|
onClose = void 0,
|
|
175
|
+
details,
|
|
176
|
+
style,
|
|
175
177
|
...rest
|
|
176
178
|
}) => {
|
|
177
179
|
const isContrast = layout.useContrast();
|
|
178
|
-
const isClosable = onClose
|
|
180
|
+
const isClosable = Boolean(onClose);
|
|
179
181
|
const transportIsSet = transport !== "none";
|
|
180
182
|
const alertIsSet = alert !== "none";
|
|
181
|
-
const
|
|
183
|
+
const hasDetails = details !== void 0;
|
|
182
184
|
const numberOfChildren = React.Children.count(children);
|
|
183
185
|
const { Icon, ariaLabel: ariaLabelForTranportIcon } = getTransportStyle(transport);
|
|
184
|
-
const
|
|
186
|
+
const transportLower = transport.toLowerCase();
|
|
185
187
|
const IconWithAriaHidden = React.cloneElement(/* @__PURE__ */ jsxRuntime.jsx(Icon, {}), { "aria-hidden": "true" });
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (transportIsSet) {
|
|
194
|
-
let colorToSet;
|
|
195
|
-
let textColorToSet;
|
|
196
|
-
if (transport === "walk") {
|
|
197
|
-
tagRef.current?.style.setProperty(
|
|
198
|
-
"--text-color",
|
|
199
|
-
"var(--components-travel-traveltag-standard-icon-walk)"
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
if (alert === "error") {
|
|
203
|
-
colorToSet = isContrast ? errorContrastBackgroundColor : errorBackgroundColor;
|
|
204
|
-
textColorToSet = isContrast ? errorContrastTextColor : errorTextColor;
|
|
205
|
-
tagRef.current?.style.setProperty("--text-color", `${textColorToSet}`);
|
|
206
|
-
} else {
|
|
207
|
-
colorToSet = isContrast ? contrastBackgroundColor : backgroundColor;
|
|
208
|
-
}
|
|
209
|
-
tagRef.current?.style.setProperty("--background-color", `${colorToSet}`);
|
|
188
|
+
const colorTheme = isContrast ? "contrast" : "standard";
|
|
189
|
+
const colorModifier = alert === "error" ? "cancelled" : void 0;
|
|
190
|
+
const shouldModifyTextColor = alert === "error" || transport === "walk";
|
|
191
|
+
const dynamicCssVars = {
|
|
192
|
+
"--background-color": `var(--components-travel-traveltag-${colorTheme}-fill-${transportLower}${colorModifier ? `-${colorModifier}` : ""})`,
|
|
193
|
+
...shouldModifyTextColor && {
|
|
194
|
+
"--text-color": `var(--components-travel-traveltag-${colorTheme}-text-line-${transportLower}${colorModifier ? `-${colorModifier}` : ""})`
|
|
210
195
|
}
|
|
211
|
-
}
|
|
212
|
-
transportIsSet,
|
|
213
|
-
isContrast,
|
|
214
|
-
backgroundColor,
|
|
215
|
-
contrastBackgroundColor,
|
|
216
|
-
errorBackgroundColor,
|
|
217
|
-
alert
|
|
218
|
-
]);
|
|
196
|
+
};
|
|
219
197
|
const TravelTagWithoutLabel = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
220
198
|
"div",
|
|
221
199
|
{
|
|
@@ -227,8 +205,8 @@ const TravelTag = ({
|
|
|
227
205
|
"eds-travel-tag--icon-and-text": numberOfChildren > 1 || transportIsSet && numberOfChildren > 0,
|
|
228
206
|
className
|
|
229
207
|
}),
|
|
230
|
-
|
|
231
|
-
"aria-label":
|
|
208
|
+
style: { ...dynamicCssVars, ...style },
|
|
209
|
+
"aria-label": [ariaLabelForTranportIcon, children, alertIsSet ? alert : ""].filter(Boolean).join(" "),
|
|
232
210
|
role: "img",
|
|
233
211
|
...rest,
|
|
234
212
|
children: [
|
|
@@ -243,6 +221,7 @@ const TravelTag = ({
|
|
|
243
221
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseSmallIcon, { inline: true })
|
|
244
222
|
}
|
|
245
223
|
),
|
|
224
|
+
hasDetails && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "eds-travel-tag__details", children: details }),
|
|
246
225
|
alertIsSet && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "eds-travel-tag__alert", children: [
|
|
247
226
|
alert === "info" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
248
227
|
icons.ValidationInfoFilledIcon,
|
package/dist/travel.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"travel.cjs.js","sources":["../src/TravelHeader.tsx","../src/utils.ts","../src/TravelTag.tsx","../src/LegLine.tsx","../src/LegBone.tsx","../src/TravelLeg.tsx","../src/TravelSwitch.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './TravelHeader.scss';\n\nexport type TravelHeaderProps = {\n /** HTML-elementet eller React-komponenten som lager elementet\n * @default 'div'\n */\n as?: string | React.ElementType;\n /** Destinasjonen man reiser fra */\n from: React.ReactNode;\n /** Destinasjonen man reiser til */\n to: React.ReactNode;\n /**Størrelsen på komponenten\n * @default 'large'\n */\n size?: 'large' | 'medium';\n /** Plassere til og fra på samme linje */\n noWrap?: boolean;\n /**Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n};\n\nexport const TravelHeader: React.FC<TravelHeaderProps> = ({\n as: Element = 'div',\n from,\n to,\n size = 'large',\n className,\n noWrap,\n ...rest\n}) => {\n return (\n <Element\n className={classNames('eds-travel-header', className, {\n 'eds-travel-header--large': size === 'large',\n 'eds-travel-header--medium': size === 'medium',\n 'eds-travel-header--no-wrap': noWrap,\n })}\n aria-label={`Fra ${from}, til ${to}`}\n {...rest}\n >\n <span className=\"eds-travel-header__from\">{from}</span>\n <span className=\"eds-travel-header__to\">{to}</span>\n </Element>\n );\n};\n","import React from 'react';\n\nimport {\n BusIcon,\n FerryIcon,\n CarferryIcon,\n TramIcon,\n PlaneIcon,\n TrainIcon,\n BicycleIcon,\n MobilityIcon,\n MetroIcon,\n HelicopterIcon,\n FunicularIcon,\n CablewayIcon,\n TaxiIcon,\n WalkIcon,\n} from '@entur/icons';\n\nimport type { IconProps } from '@entur/icons';\n\nexport type Transport =\n | 'metro'\n | 'bus'\n | 'plane'\n | 'helicopter'\n | 'tram'\n | 'funicular'\n | 'cableway'\n | 'taxi'\n | 'bicycle'\n | 'walk'\n | 'train'\n | 'ferry'\n | 'carferry'\n | 'mobility'\n | 'airportLinkBus'\n | 'airportLinkRail'\n | 'rail'\n | 'water'\n | 'air'\n | 'none';\n\ntype transportStyleResult = {\n Icon: React.FC<IconProps>;\n backgroundColor?: string;\n contrastBackgroundColor?: string;\n errorBackgroundColor?: string;\n errorTextColor?: string;\n errorContrastTextColor?: string;\n errorContrastBackgroundColor?: string;\n pattern: 'line' | 'wave' | 'dashed' | 'dotted';\n ariaLabel: string;\n};\n\nexport const getTransportStyle = (mode: string): transportStyleResult => {\n switch (mode) {\n case 'metro':\n return {\n Icon: MetroIcon,\n pattern: 'line',\n ariaLabel: 'T-bane',\n };\n case 'bus':\n case 'neutral':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Buss',\n };\n case 'plane':\n case 'air':\n return {\n Icon: PlaneIcon,\n pattern: 'line',\n ariaLabel: 'Fly',\n };\n case 'helicopter':\n return {\n Icon: HelicopterIcon,\n pattern: 'line',\n ariaLabel: 'Helikopter',\n };\n case 'tram':\n return {\n Icon: TramIcon,\n pattern: 'line',\n ariaLabel: 'Trikk',\n };\n case 'funicular':\n return {\n Icon: FunicularIcon,\n pattern: 'line',\n ariaLabel: 'Taubane',\n };\n case 'cableway':\n return {\n Icon: CablewayIcon,\n pattern: 'line',\n ariaLabel: 'Gondol',\n };\n case 'taxi':\n return {\n Icon: TaxiIcon,\n pattern: 'dashed',\n ariaLabel: 'Taxi',\n };\n case 'bicycle':\n case 'citybike':\n return {\n Icon: BicycleIcon,\n pattern: 'dashed',\n ariaLabel: 'Sykkel',\n };\n case 'walk':\n return {\n Icon: WalkIcon,\n pattern: 'dotted',\n ariaLabel: 'Gange',\n };\n case 'train':\n case 'rail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Tog',\n };\n case 'ferry':\n case 'water':\n return {\n Icon: FerryIcon,\n pattern: 'wave',\n ariaLabel: 'Ferge',\n };\n case 'carferry':\n return {\n Icon: CarferryIcon,\n pattern: 'wave',\n ariaLabel: 'Bilferge',\n };\n case 'mobility':\n return {\n Icon: MobilityIcon,\n pattern: 'line',\n ariaLabel: 'El-sparkesykkel',\n };\n case 'airportLinkBus':\n case 'airportlinkbus':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Flybuss',\n };\n case 'airportLinkRail':\n case 'airportlinkrail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Flytog',\n };\n case 'none':\n return {\n Icon: React.Fragment,\n pattern: 'line',\n ariaLabel: '',\n };\n case 'scooter':\n throw Error(\n `transport type 'scooter' is deprecated: Please use 'mobility' instead.`,\n );\n case 'bike':\n throw Error(\n `transport type 'bike' is deprecated: Please use 'bicycle' instead.`,\n );\n case 'car':\n throw Error(\n `transport type 'car' is deprecated: Please use 'taxi' instead.`,\n );\n case 'foot':\n throw Error(\n `transport type 'foot' is deprecated: Please use 'walk' instead.`,\n );\n default:\n throw Error('Please select a transport for the Travel component.');\n }\n};\n","import React, { cloneElement, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport {\n CloseSmallIcon,\n ValidationInfoFilledIcon,\n ValidationErrorFilledIcon,\n ValidationExclamationCircleFilledIcon,\n} from '@entur/icons';\nimport { useContrast } from '@entur/layout';\n\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nimport './TravelTag.scss';\n\nexport type TravelTagProps = {\n /** Callback som kalles for når man skal lukke TravelTag-en\n * @default undefined\n */\n onClose?: () => void;\n /** Innholdet inne i TravelTag-en */\n children?: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Legger til et Valideringsikon i TravelTagen for å signalisere avvik, informasjon e.l.\n * @default \"none\"\n */\n alert?: 'none' | 'error' | 'warning' | 'info';\n /** Legger til farge og ikon tilpasset valgt transportmiddel */\n transport?: Transport;\n /** Element ved siden av eller under TravelTag. */\n label?: React.ReactNode;\n /** Posisjonen til label-en i forhold til TravelTag-en\n * @default \"right\"\n */\n labelPlacement?: 'bottom' | 'right';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelTag: React.FC<TravelTagProps> = ({\n children,\n className,\n alert = 'none',\n transport = 'none',\n label,\n labelPlacement = 'right',\n onClose = undefined,\n ...rest\n}) => {\n const isContrast = useContrast();\n const isClosable = onClose ? true : false;\n const transportIsSet = transport !== 'none';\n const alertIsSet = alert !== 'none';\n const tagRef = useRef<HTMLDivElement>(null);\n const numberOfChildren = React.Children.count(children);\n const { Icon, ariaLabel: ariaLabelForTranportIcon } =\n getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n const IconWithAriaHidden = cloneElement(<Icon />, { 'aria-hidden': 'true' });\n\n const backgroundColor =\n 'var(--components-travel-traveltag-standard-tagfill-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-traveltag-contrast-tagfill-' +\n deCapitalizeTransport +\n ')';\n // Error colors\n const errorBackgroundColor =\n 'var(--components-travel-traveltag-standard-tagfill-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorContrastBackgroundColor =\n 'var(--components-travel-traveltag-contrast-tagfill-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorContrastTextColor =\n 'var(--components-travel-traveltag-contrast-text-line-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorTextColor =\n 'var(--components-travel-traveltag-standard-text-line-' +\n deCapitalizeTransport +\n '-cancled)';\n\n useEffect(() => {\n if (transportIsSet) {\n let colorToSet;\n let textColorToSet;\n // Walk has another icon/text color then the other transports\n if (transport === 'walk') {\n tagRef.current?.style.setProperty(\n '--text-color',\n 'var(--components-travel-traveltag-standard-icon-walk)',\n );\n }\n // Error\n if (alert === 'error') {\n colorToSet = isContrast\n ? errorContrastBackgroundColor\n : errorBackgroundColor;\n textColorToSet = isContrast ? errorContrastTextColor : errorTextColor;\n tagRef.current?.style.setProperty('--text-color', `${textColorToSet}`);\n } else {\n colorToSet = isContrast ? contrastBackgroundColor : backgroundColor;\n }\n tagRef.current?.style.setProperty('--background-color', `${colorToSet}`);\n }\n }, [\n transportIsSet,\n isContrast,\n backgroundColor,\n contrastBackgroundColor,\n errorBackgroundColor,\n alert,\n ]);\n\n const TravelTagWithoutLabel: JSX.Element = (\n <div\n className={classNames('eds-travel-tag', {\n 'eds-travel-tag--closable': isClosable,\n 'eds-travel-tag--alert': alertIsSet,\n 'eds-travel-tag--alert--error': alert === 'error',\n 'eds-travel-tag--transport': transportIsSet,\n 'eds-travel-tag--icon-and-text':\n numberOfChildren > 1 || (transportIsSet && numberOfChildren > 0),\n className,\n })}\n ref={tagRef}\n aria-label={`${ariaLabelForTranportIcon} ${children} ${\n alertIsSet ? alert : ''\n }`}\n role=\"img\"\n {...rest}\n >\n {IconWithAriaHidden}\n {children}\n {isClosable && (\n <button\n onClick={onClose}\n type=\"button\"\n className=\"eds-travel-tag__close-button\"\n >\n <CloseSmallIcon inline />\n </button>\n )}\n {alertIsSet && (\n <span className=\"eds-travel-tag__alert\">\n {alert === 'info' && (\n <ValidationInfoFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-info-icon\"\n />\n )}\n {alert === 'error' && (\n <ValidationErrorFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-error-icon\"\n />\n )}\n {alert === 'warning' && (\n <ValidationExclamationCircleFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-exclamation-icon\"\n />\n )}\n </span>\n )}\n </div>\n );\n\n const Label: JSX.Element = (\n <div\n className={classNames('eds-travel-tag__label', {\n [`eds-travel-tag__label--${labelPlacement}`]: label,\n [`eds-travel-tag__label--${labelPlacement}--with-alert`]:\n label && alertIsSet,\n })}\n >\n {label}\n </div>\n );\n\n if (label) {\n return (\n <div\n className={classNames('eds-travel-tag__wrapper', {\n [`eds-travel-tag__wrapper--label-position-${labelPlacement}`]: label,\n })}\n >\n {TravelTagWithoutLabel}\n {Label}\n </div>\n );\n }\n\n return TravelTagWithoutLabel;\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport './LegLine.scss';\n\nexport type LegLineProps = {\n /** Farge på LegLine'n */\n color: string;\n /** Retningen til LegLine */\n direction: 'horizontal' | 'vertical';\n /** Hvilket linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegLine: React.FC<LegLineProps> = ({\n color,\n direction = 'horizontal',\n pattern,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames('eds-leg-line', className, {\n [`eds-leg-line--${pattern}`]: pattern,\n [`eds-leg-line--${direction}`]: direction,\n })}\n style={{ backgroundColor: color }}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { LegLine } from './LegLine';\nimport './LegBone.scss';\n\nexport type LegBoneProps = {\n /** Retning på komponenten */\n direction: 'horizontal' | 'vertical';\n /** Hvilke linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Farge på linja */\n color: string;\n /** Farge på startpunktet\n * @default Verdien til color\n */\n startColor?: string;\n /** Farge på endepunktet\n * @default Verdien til color\n */\n endColor?: string;\n /** Vis startpunkt\n * @default true\n */\n showStart?: boolean;\n /** Vis linke\n * @default true\n */\n showLine?: boolean;\n /** Vis endepunkt\n * @default true\n */\n showStop?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegBone: React.FC<LegBoneProps> = ({\n direction,\n pattern,\n color,\n startColor,\n endColor,\n showStart = true,\n showStop = true,\n showLine = true,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames(className, 'eds-leg-bone', [\n { 'eds-leg-bone--vertical': direction === 'vertical' },\n { 'eds-leg-bone--horizontal': direction === 'horizontal' },\n ])}\n {...rest}\n >\n {showStart && (\n <div\n className={`eds-leg-bone__start`}\n style={{ backgroundColor: startColor || color }}\n />\n )}\n\n {showLine && (\n <LegLine\n className={`eds-leg-bone__line`}\n direction={direction}\n color={color}\n pattern={pattern}\n />\n )}\n\n {showStop && (\n <div\n className={`eds-leg-bone__stop`}\n style={{ backgroundColor: endColor || color }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useContrast } from '@entur/layout';\nimport { LegBone } from './LegBone';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelLegProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Hviklen type reise som skal vises riktig farge og linjetype */\n transport: Transport;\n /** Retningen på komponenten */\n direction: 'horizontal' | 'vertical';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelLeg: React.FC<TravelLegProps> = ({\n className,\n transport,\n direction,\n ...rest\n}) => {\n const { pattern } = getTransportStyle(transport);\n const isContrast = useContrast();\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelleg-standard-' + deCapitalizeTransport + ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelleg-contrast-' + deCapitalizeTransport + ')';\n\n return (\n <LegBone\n direction={direction}\n pattern={pattern}\n color={isContrast ? contrastBackgroundColor : backgroundColor}\n className={className}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Switch } from '@entur/form';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelSwitchProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Om switch-en er checked eller ikke */\n checked?: boolean;\n /** Label for TravelSwitch-en. */\n children?: React.ReactNode;\n /** Posisjonen til label for TravelSwitch-en.\n * @default \"right\"\n */\n labelPlacement?: 'right' | 'bottom';\n /** Hvilken type reise som skal vises ikon og farge for */\n transport: Transport; // When adding a new submode, check https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/825393529/Norwegian+submodes+and+their+definitions for names\n /** Callback for når verdien endres */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Størrelsen på Switch-en\n * @default \"medium\"\n */\n size?: 'medium' | 'large';\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>;\n\nexport const TravelSwitch: React.FC<TravelSwitchProps> = ({\n className,\n children,\n labelPlacement = 'right',\n transport,\n size,\n ...rest\n}) => {\n const { Icon } = getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelswitch-standard-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelswitch-contrast-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n\n return (\n <Switch\n className={className}\n labelPlacement={labelPlacement}\n color={backgroundColor}\n contrastColor={contrastBackgroundColor}\n icon={<Icon />}\n size={size}\n {...rest}\n >\n {children}\n </Switch>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('travel');\n\nexport * from './TravelHeader';\nexport * from './TravelTag';\nexport * from './LegLine';\nexport * from './LegBone';\nexport * from './TravelLeg';\nexport * from './TravelSwitch';\n"],"names":["jsxs","jsx","MetroIcon","BusIcon","PlaneIcon","HelicopterIcon","TramIcon","FunicularIcon","CablewayIcon","TaxiIcon","BicycleIcon","WalkIcon","TrainIcon","FerryIcon","CarferryIcon","MobilityIcon","useContrast","useRef","cloneElement","useEffect","CloseSmallIcon","ValidationInfoFilledIcon","ValidationErrorFilledIcon","ValidationExclamationCircleFilledIcon","Switch","warnAboutMissingStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"travel.cjs.js","sources":["../src/TravelHeader.tsx","../src/utils.ts","../src/TravelTag.tsx","../src/LegLine.tsx","../src/LegBone.tsx","../src/TravelLeg.tsx","../src/TravelSwitch.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './TravelHeader.scss';\n\nexport type TravelHeaderProps = {\n /** HTML-elementet eller React-komponenten som lager elementet\n * @default 'div'\n */\n as?: string | React.ElementType;\n /** Destinasjonen man reiser fra */\n from: React.ReactNode;\n /** Destinasjonen man reiser til */\n to: React.ReactNode;\n /**Størrelsen på komponenten\n * @default 'large'\n */\n size?: 'large' | 'medium';\n /** Plassere til og fra på samme linje */\n noWrap?: boolean;\n /**Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n};\n\nexport const TravelHeader: React.FC<TravelHeaderProps> = ({\n as: Element = 'div',\n from,\n to,\n size = 'large',\n className,\n noWrap,\n ...rest\n}) => {\n return (\n <Element\n className={classNames('eds-travel-header', className, {\n 'eds-travel-header--large': size === 'large',\n 'eds-travel-header--medium': size === 'medium',\n 'eds-travel-header--no-wrap': noWrap,\n })}\n aria-label={`Fra ${from}, til ${to}`}\n {...rest}\n >\n <span className=\"eds-travel-header__from\">{from}</span>\n <span className=\"eds-travel-header__to\">{to}</span>\n </Element>\n );\n};\n","import React from 'react';\n\nimport {\n BusIcon,\n FerryIcon,\n CarferryIcon,\n TramIcon,\n PlaneIcon,\n TrainIcon,\n BicycleIcon,\n MobilityIcon,\n MetroIcon,\n HelicopterIcon,\n FunicularIcon,\n CablewayIcon,\n TaxiIcon,\n WalkIcon,\n} from '@entur/icons';\n\nimport type { IconProps } from '@entur/icons';\n\nexport type Transport =\n | 'metro'\n | 'bus'\n | 'plane'\n | 'helicopter'\n | 'tram'\n | 'funicular'\n | 'cableway'\n | 'taxi'\n | 'bicycle'\n | 'walk'\n | 'train'\n | 'ferry'\n | 'carferry'\n | 'mobility'\n | 'airportLinkBus'\n | 'airportLinkRail'\n | 'rail'\n | 'water'\n | 'air'\n | 'none';\n\nexport type CSSVars = { [key: `--${string}`]: string | number };\n\ntype transportStyleResult = {\n Icon: React.FC<IconProps>;\n backgroundColor?: string;\n contrastBackgroundColor?: string;\n errorBackgroundColor?: string;\n errorTextColor?: string;\n errorContrastTextColor?: string;\n errorContrastBackgroundColor?: string;\n pattern: 'line' | 'wave' | 'dashed' | 'dotted';\n ariaLabel: string;\n};\n\nexport const getTransportStyle = (mode: string): transportStyleResult => {\n switch (mode) {\n case 'metro':\n return {\n Icon: MetroIcon,\n pattern: 'line',\n ariaLabel: 'T-bane',\n };\n case 'bus':\n case 'neutral':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Buss',\n };\n case 'plane':\n case 'air':\n return {\n Icon: PlaneIcon,\n pattern: 'line',\n ariaLabel: 'Fly',\n };\n case 'helicopter':\n return {\n Icon: HelicopterIcon,\n pattern: 'line',\n ariaLabel: 'Helikopter',\n };\n case 'tram':\n return {\n Icon: TramIcon,\n pattern: 'line',\n ariaLabel: 'Trikk',\n };\n case 'funicular':\n return {\n Icon: FunicularIcon,\n pattern: 'line',\n ariaLabel: 'Taubane',\n };\n case 'cableway':\n return {\n Icon: CablewayIcon,\n pattern: 'line',\n ariaLabel: 'Gondol',\n };\n case 'taxi':\n return {\n Icon: TaxiIcon,\n pattern: 'dashed',\n ariaLabel: 'Taxi',\n };\n case 'bicycle':\n case 'citybike':\n return {\n Icon: BicycleIcon,\n pattern: 'dashed',\n ariaLabel: 'Sykkel',\n };\n case 'walk':\n return {\n Icon: WalkIcon,\n pattern: 'dotted',\n ariaLabel: 'Gange',\n };\n case 'train':\n case 'rail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Tog',\n };\n case 'ferry':\n case 'water':\n return {\n Icon: FerryIcon,\n pattern: 'wave',\n ariaLabel: 'Ferge',\n };\n case 'carferry':\n return {\n Icon: CarferryIcon,\n pattern: 'wave',\n ariaLabel: 'Bilferge',\n };\n case 'mobility':\n return {\n Icon: MobilityIcon,\n pattern: 'line',\n ariaLabel: 'El-sparkesykkel',\n };\n case 'airportLinkBus':\n case 'airportlinkbus':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Flybuss',\n };\n case 'airportLinkRail':\n case 'airportlinkrail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Flytog',\n };\n case 'none':\n return {\n Icon: React.Fragment,\n pattern: 'line',\n ariaLabel: '',\n };\n case 'scooter':\n throw Error(\n `transport type 'scooter' is deprecated: Please use 'mobility' instead.`,\n );\n case 'bike':\n throw Error(\n `transport type 'bike' is deprecated: Please use 'bicycle' instead.`,\n );\n case 'car':\n throw Error(\n `transport type 'car' is deprecated: Please use 'taxi' instead.`,\n );\n case 'foot':\n throw Error(\n `transport type 'foot' is deprecated: Please use 'walk' instead.`,\n );\n default:\n throw Error('Please select a transport for the Travel component.');\n }\n};\n","import React, { cloneElement } from 'react';\nimport classNames from 'classnames';\nimport {\n CloseSmallIcon,\n ValidationInfoFilledIcon,\n ValidationErrorFilledIcon,\n ValidationExclamationCircleFilledIcon,\n} from '@entur/icons';\nimport { useContrast } from '@entur/layout';\n\nimport { getTransportStyle } from './utils';\n\nimport type { CSSVars, Transport } from './utils';\n\nimport './TravelTag.scss';\n\nexport type TravelTagProps = {\n /** Callback som kalles for når man skal lukke TravelTag-en\n * @default undefined\n */\n onClose?: () => void;\n /** Innholdet inne i TravelTag-en */\n children?: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Legger til et Valideringsikon i TravelTagen for å signalisere avvik, informasjon e.l.\n * @default \"none\"\n */\n alert?: 'none' | 'error' | 'warning' | 'info';\n /** Legger til farge og ikon tilpasset valgt transportmiddel */\n transport?: Transport;\n /** Element ved siden av eller under TravelTag. */\n label?: React.ReactNode;\n /** Posisjonen til label-en i forhold til TravelTag-en\n * @default \"right\"\n */\n labelPlacement?: 'bottom' | 'right';\n /** Ekstrainnhold for tilleggsvisning i en separat boks.\n * @example Brukes ofte for å vise et tog/avgangsnummer\n */\n details?: React.ReactNode;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelTag: React.FC<TravelTagProps> = ({\n children,\n className,\n alert = 'none',\n transport = 'none',\n label,\n labelPlacement = 'right',\n onClose = undefined,\n details,\n style,\n ...rest\n}) => {\n const isContrast = useContrast();\n const isClosable = Boolean(onClose);\n const transportIsSet = transport !== 'none';\n const alertIsSet = alert !== 'none';\n const hasDetails = details !== undefined;\n const numberOfChildren = React.Children.count(children);\n const { Icon, ariaLabel: ariaLabelForTranportIcon } =\n getTransportStyle(transport);\n const transportLower = transport.toLowerCase();\n const IconWithAriaHidden = cloneElement(<Icon />, { 'aria-hidden': 'true' });\n\n const colorTheme = isContrast ? 'contrast' : 'standard';\n const colorModifier = alert === 'error' ? 'cancelled' : undefined;\n const shouldModifyTextColor = alert === 'error' || transport === 'walk';\n\n const dynamicCssVars: React.CSSProperties & CSSVars = {\n '--background-color': `var(--components-travel-traveltag-${colorTheme}-fill-${transportLower}${\n colorModifier ? `-${colorModifier}` : ''\n })`,\n ...(shouldModifyTextColor && {\n '--text-color': `var(--components-travel-traveltag-${colorTheme}-text-line-${transportLower}${\n colorModifier ? `-${colorModifier}` : ''\n })`,\n }),\n };\n\n const TravelTagWithoutLabel: JSX.Element = (\n <div\n className={classNames('eds-travel-tag', {\n 'eds-travel-tag--closable': isClosable,\n 'eds-travel-tag--alert': alertIsSet,\n 'eds-travel-tag--alert--error': alert === 'error',\n 'eds-travel-tag--transport': transportIsSet,\n 'eds-travel-tag--icon-and-text':\n numberOfChildren > 1 || (transportIsSet && numberOfChildren > 0),\n className,\n })}\n style={{ ...dynamicCssVars, ...style }}\n aria-label={[ariaLabelForTranportIcon, children, alertIsSet ? alert : '']\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n {...rest}\n >\n {IconWithAriaHidden}\n {children}\n {isClosable && (\n <button\n onClick={onClose}\n type=\"button\"\n className=\"eds-travel-tag__close-button\"\n >\n <CloseSmallIcon inline />\n </button>\n )}\n {hasDetails && <div className=\"eds-travel-tag__details\">{details}</div>}\n {alertIsSet && (\n <span className=\"eds-travel-tag__alert\">\n {alert === 'info' && (\n <ValidationInfoFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-info-icon\"\n />\n )}\n {alert === 'error' && (\n <ValidationErrorFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-error-icon\"\n />\n )}\n {alert === 'warning' && (\n <ValidationExclamationCircleFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-exclamation-icon\"\n />\n )}\n </span>\n )}\n </div>\n );\n\n const Label: JSX.Element = (\n <div\n className={classNames('eds-travel-tag__label', {\n [`eds-travel-tag__label--${labelPlacement}`]: label,\n [`eds-travel-tag__label--${labelPlacement}--with-alert`]:\n label && alertIsSet,\n })}\n >\n {label}\n </div>\n );\n\n if (label) {\n return (\n <div\n className={classNames('eds-travel-tag__wrapper', {\n [`eds-travel-tag__wrapper--label-position-${labelPlacement}`]: label,\n })}\n >\n {TravelTagWithoutLabel}\n {Label}\n </div>\n );\n }\n\n return TravelTagWithoutLabel;\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport './LegLine.scss';\n\nexport type LegLineProps = {\n /** Farge på LegLine'n */\n color: string;\n /** Retningen til LegLine */\n direction: 'horizontal' | 'vertical';\n /** Hvilket linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegLine: React.FC<LegLineProps> = ({\n color,\n direction = 'horizontal',\n pattern,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames('eds-leg-line', className, {\n [`eds-leg-line--${pattern}`]: pattern,\n [`eds-leg-line--${direction}`]: direction,\n })}\n style={{ backgroundColor: color }}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { LegLine } from './LegLine';\nimport './LegBone.scss';\n\nexport type LegBoneProps = {\n /** Retning på komponenten */\n direction: 'horizontal' | 'vertical';\n /** Hvilke linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Farge på linja */\n color: string;\n /** Farge på startpunktet\n * @default Verdien til color\n */\n startColor?: string;\n /** Farge på endepunktet\n * @default Verdien til color\n */\n endColor?: string;\n /** Vis startpunkt\n * @default true\n */\n showStart?: boolean;\n /** Vis linke\n * @default true\n */\n showLine?: boolean;\n /** Vis endepunkt\n * @default true\n */\n showStop?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegBone: React.FC<LegBoneProps> = ({\n direction,\n pattern,\n color,\n startColor,\n endColor,\n showStart = true,\n showStop = true,\n showLine = true,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames(className, 'eds-leg-bone', [\n { 'eds-leg-bone--vertical': direction === 'vertical' },\n { 'eds-leg-bone--horizontal': direction === 'horizontal' },\n ])}\n {...rest}\n >\n {showStart && (\n <div\n className={`eds-leg-bone__start`}\n style={{ backgroundColor: startColor || color }}\n />\n )}\n\n {showLine && (\n <LegLine\n className={`eds-leg-bone__line`}\n direction={direction}\n color={color}\n pattern={pattern}\n />\n )}\n\n {showStop && (\n <div\n className={`eds-leg-bone__stop`}\n style={{ backgroundColor: endColor || color }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useContrast } from '@entur/layout';\nimport { LegBone } from './LegBone';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelLegProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Hviklen type reise som skal vises riktig farge og linjetype */\n transport: Transport;\n /** Retningen på komponenten */\n direction: 'horizontal' | 'vertical';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelLeg: React.FC<TravelLegProps> = ({\n className,\n transport,\n direction,\n ...rest\n}) => {\n const { pattern } = getTransportStyle(transport);\n const isContrast = useContrast();\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelleg-standard-' + deCapitalizeTransport + ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelleg-contrast-' + deCapitalizeTransport + ')';\n\n return (\n <LegBone\n direction={direction}\n pattern={pattern}\n color={isContrast ? contrastBackgroundColor : backgroundColor}\n className={className}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Switch } from '@entur/form';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelSwitchProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Om switch-en er checked eller ikke */\n checked?: boolean;\n /** Label for TravelSwitch-en. */\n children?: React.ReactNode;\n /** Posisjonen til label for TravelSwitch-en.\n * @default \"right\"\n */\n labelPlacement?: 'right' | 'bottom';\n /** Hvilken type reise som skal vises ikon og farge for */\n transport: Transport; // When adding a new submode, check https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/825393529/Norwegian+submodes+and+their+definitions for names\n /** Callback for når verdien endres */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Størrelsen på Switch-en\n * @default \"medium\"\n */\n size?: 'medium' | 'large';\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>;\n\nexport const TravelSwitch: React.FC<TravelSwitchProps> = ({\n className,\n children,\n labelPlacement = 'right',\n transport,\n size,\n ...rest\n}) => {\n const { Icon } = getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelswitch-standard-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelswitch-contrast-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n\n return (\n <Switch\n className={className}\n labelPlacement={labelPlacement}\n color={backgroundColor}\n contrastColor={contrastBackgroundColor}\n icon={<Icon />}\n size={size}\n {...rest}\n >\n {children}\n </Switch>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('travel');\n\nexport * from './TravelHeader';\nexport * from './TravelTag';\nexport * from './LegLine';\nexport * from './LegBone';\nexport * from './TravelLeg';\nexport * from './TravelSwitch';\n"],"names":["jsxs","jsx","MetroIcon","BusIcon","PlaneIcon","HelicopterIcon","TramIcon","FunicularIcon","CablewayIcon","TaxiIcon","BicycleIcon","WalkIcon","TrainIcon","FerryIcon","CarferryIcon","MobilityIcon","useContrast","cloneElement","CloseSmallIcon","ValidationInfoFilledIcon","ValidationErrorFilledIcon","ValidationExclamationCircleFilledIcon","Switch","warnAboutMissingStyles"],"mappings":"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"}
|
package/dist/travel.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { warnAboutMissingStyles } from "@entur/utils";
|
|
2
2
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
3
|
import classNames from "classnames";
|
|
4
|
-
import React, {
|
|
4
|
+
import React, { cloneElement } from "react";
|
|
5
5
|
import { TrainIcon, BusIcon, MobilityIcon, CarferryIcon, FerryIcon, WalkIcon, BicycleIcon, TaxiIcon, CablewayIcon, FunicularIcon, TramIcon, HelicopterIcon, PlaneIcon, MetroIcon, CloseSmallIcon, ValidationInfoFilledIcon, ValidationErrorFilledIcon, ValidationExclamationCircleFilledIcon } from "@entur/icons";
|
|
6
6
|
import { useContrast } from "@entur/layout";
|
|
7
7
|
import { Switch } from "@entur/form";
|
|
@@ -170,50 +170,28 @@ const TravelTag = ({
|
|
|
170
170
|
label,
|
|
171
171
|
labelPlacement = "right",
|
|
172
172
|
onClose = void 0,
|
|
173
|
+
details,
|
|
174
|
+
style,
|
|
173
175
|
...rest
|
|
174
176
|
}) => {
|
|
175
177
|
const isContrast = useContrast();
|
|
176
|
-
const isClosable = onClose
|
|
178
|
+
const isClosable = Boolean(onClose);
|
|
177
179
|
const transportIsSet = transport !== "none";
|
|
178
180
|
const alertIsSet = alert !== "none";
|
|
179
|
-
const
|
|
181
|
+
const hasDetails = details !== void 0;
|
|
180
182
|
const numberOfChildren = React.Children.count(children);
|
|
181
183
|
const { Icon, ariaLabel: ariaLabelForTranportIcon } = getTransportStyle(transport);
|
|
182
|
-
const
|
|
184
|
+
const transportLower = transport.toLowerCase();
|
|
183
185
|
const IconWithAriaHidden = cloneElement(/* @__PURE__ */ jsx(Icon, {}), { "aria-hidden": "true" });
|
|
184
|
-
const
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (transportIsSet) {
|
|
192
|
-
let colorToSet;
|
|
193
|
-
let textColorToSet;
|
|
194
|
-
if (transport === "walk") {
|
|
195
|
-
tagRef.current?.style.setProperty(
|
|
196
|
-
"--text-color",
|
|
197
|
-
"var(--components-travel-traveltag-standard-icon-walk)"
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
if (alert === "error") {
|
|
201
|
-
colorToSet = isContrast ? errorContrastBackgroundColor : errorBackgroundColor;
|
|
202
|
-
textColorToSet = isContrast ? errorContrastTextColor : errorTextColor;
|
|
203
|
-
tagRef.current?.style.setProperty("--text-color", `${textColorToSet}`);
|
|
204
|
-
} else {
|
|
205
|
-
colorToSet = isContrast ? contrastBackgroundColor : backgroundColor;
|
|
206
|
-
}
|
|
207
|
-
tagRef.current?.style.setProperty("--background-color", `${colorToSet}`);
|
|
186
|
+
const colorTheme = isContrast ? "contrast" : "standard";
|
|
187
|
+
const colorModifier = alert === "error" ? "cancelled" : void 0;
|
|
188
|
+
const shouldModifyTextColor = alert === "error" || transport === "walk";
|
|
189
|
+
const dynamicCssVars = {
|
|
190
|
+
"--background-color": `var(--components-travel-traveltag-${colorTheme}-fill-${transportLower}${colorModifier ? `-${colorModifier}` : ""})`,
|
|
191
|
+
...shouldModifyTextColor && {
|
|
192
|
+
"--text-color": `var(--components-travel-traveltag-${colorTheme}-text-line-${transportLower}${colorModifier ? `-${colorModifier}` : ""})`
|
|
208
193
|
}
|
|
209
|
-
}
|
|
210
|
-
transportIsSet,
|
|
211
|
-
isContrast,
|
|
212
|
-
backgroundColor,
|
|
213
|
-
contrastBackgroundColor,
|
|
214
|
-
errorBackgroundColor,
|
|
215
|
-
alert
|
|
216
|
-
]);
|
|
194
|
+
};
|
|
217
195
|
const TravelTagWithoutLabel = /* @__PURE__ */ jsxs(
|
|
218
196
|
"div",
|
|
219
197
|
{
|
|
@@ -225,8 +203,8 @@ const TravelTag = ({
|
|
|
225
203
|
"eds-travel-tag--icon-and-text": numberOfChildren > 1 || transportIsSet && numberOfChildren > 0,
|
|
226
204
|
className
|
|
227
205
|
}),
|
|
228
|
-
|
|
229
|
-
"aria-label":
|
|
206
|
+
style: { ...dynamicCssVars, ...style },
|
|
207
|
+
"aria-label": [ariaLabelForTranportIcon, children, alertIsSet ? alert : ""].filter(Boolean).join(" "),
|
|
230
208
|
role: "img",
|
|
231
209
|
...rest,
|
|
232
210
|
children: [
|
|
@@ -241,6 +219,7 @@ const TravelTag = ({
|
|
|
241
219
|
children: /* @__PURE__ */ jsx(CloseSmallIcon, { inline: true })
|
|
242
220
|
}
|
|
243
221
|
),
|
|
222
|
+
hasDetails && /* @__PURE__ */ jsx("div", { className: "eds-travel-tag__details", children: details }),
|
|
244
223
|
alertIsSet && /* @__PURE__ */ jsxs("span", { className: "eds-travel-tag__alert", children: [
|
|
245
224
|
alert === "info" && /* @__PURE__ */ jsx(
|
|
246
225
|
ValidationInfoFilledIcon,
|
package/dist/travel.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"travel.esm.js","sources":["../src/TravelHeader.tsx","../src/utils.ts","../src/TravelTag.tsx","../src/LegLine.tsx","../src/LegBone.tsx","../src/TravelLeg.tsx","../src/TravelSwitch.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './TravelHeader.scss';\n\nexport type TravelHeaderProps = {\n /** HTML-elementet eller React-komponenten som lager elementet\n * @default 'div'\n */\n as?: string | React.ElementType;\n /** Destinasjonen man reiser fra */\n from: React.ReactNode;\n /** Destinasjonen man reiser til */\n to: React.ReactNode;\n /**Størrelsen på komponenten\n * @default 'large'\n */\n size?: 'large' | 'medium';\n /** Plassere til og fra på samme linje */\n noWrap?: boolean;\n /**Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n};\n\nexport const TravelHeader: React.FC<TravelHeaderProps> = ({\n as: Element = 'div',\n from,\n to,\n size = 'large',\n className,\n noWrap,\n ...rest\n}) => {\n return (\n <Element\n className={classNames('eds-travel-header', className, {\n 'eds-travel-header--large': size === 'large',\n 'eds-travel-header--medium': size === 'medium',\n 'eds-travel-header--no-wrap': noWrap,\n })}\n aria-label={`Fra ${from}, til ${to}`}\n {...rest}\n >\n <span className=\"eds-travel-header__from\">{from}</span>\n <span className=\"eds-travel-header__to\">{to}</span>\n </Element>\n );\n};\n","import React from 'react';\n\nimport {\n BusIcon,\n FerryIcon,\n CarferryIcon,\n TramIcon,\n PlaneIcon,\n TrainIcon,\n BicycleIcon,\n MobilityIcon,\n MetroIcon,\n HelicopterIcon,\n FunicularIcon,\n CablewayIcon,\n TaxiIcon,\n WalkIcon,\n} from '@entur/icons';\n\nimport type { IconProps } from '@entur/icons';\n\nexport type Transport =\n | 'metro'\n | 'bus'\n | 'plane'\n | 'helicopter'\n | 'tram'\n | 'funicular'\n | 'cableway'\n | 'taxi'\n | 'bicycle'\n | 'walk'\n | 'train'\n | 'ferry'\n | 'carferry'\n | 'mobility'\n | 'airportLinkBus'\n | 'airportLinkRail'\n | 'rail'\n | 'water'\n | 'air'\n | 'none';\n\ntype transportStyleResult = {\n Icon: React.FC<IconProps>;\n backgroundColor?: string;\n contrastBackgroundColor?: string;\n errorBackgroundColor?: string;\n errorTextColor?: string;\n errorContrastTextColor?: string;\n errorContrastBackgroundColor?: string;\n pattern: 'line' | 'wave' | 'dashed' | 'dotted';\n ariaLabel: string;\n};\n\nexport const getTransportStyle = (mode: string): transportStyleResult => {\n switch (mode) {\n case 'metro':\n return {\n Icon: MetroIcon,\n pattern: 'line',\n ariaLabel: 'T-bane',\n };\n case 'bus':\n case 'neutral':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Buss',\n };\n case 'plane':\n case 'air':\n return {\n Icon: PlaneIcon,\n pattern: 'line',\n ariaLabel: 'Fly',\n };\n case 'helicopter':\n return {\n Icon: HelicopterIcon,\n pattern: 'line',\n ariaLabel: 'Helikopter',\n };\n case 'tram':\n return {\n Icon: TramIcon,\n pattern: 'line',\n ariaLabel: 'Trikk',\n };\n case 'funicular':\n return {\n Icon: FunicularIcon,\n pattern: 'line',\n ariaLabel: 'Taubane',\n };\n case 'cableway':\n return {\n Icon: CablewayIcon,\n pattern: 'line',\n ariaLabel: 'Gondol',\n };\n case 'taxi':\n return {\n Icon: TaxiIcon,\n pattern: 'dashed',\n ariaLabel: 'Taxi',\n };\n case 'bicycle':\n case 'citybike':\n return {\n Icon: BicycleIcon,\n pattern: 'dashed',\n ariaLabel: 'Sykkel',\n };\n case 'walk':\n return {\n Icon: WalkIcon,\n pattern: 'dotted',\n ariaLabel: 'Gange',\n };\n case 'train':\n case 'rail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Tog',\n };\n case 'ferry':\n case 'water':\n return {\n Icon: FerryIcon,\n pattern: 'wave',\n ariaLabel: 'Ferge',\n };\n case 'carferry':\n return {\n Icon: CarferryIcon,\n pattern: 'wave',\n ariaLabel: 'Bilferge',\n };\n case 'mobility':\n return {\n Icon: MobilityIcon,\n pattern: 'line',\n ariaLabel: 'El-sparkesykkel',\n };\n case 'airportLinkBus':\n case 'airportlinkbus':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Flybuss',\n };\n case 'airportLinkRail':\n case 'airportlinkrail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Flytog',\n };\n case 'none':\n return {\n Icon: React.Fragment,\n pattern: 'line',\n ariaLabel: '',\n };\n case 'scooter':\n throw Error(\n `transport type 'scooter' is deprecated: Please use 'mobility' instead.`,\n );\n case 'bike':\n throw Error(\n `transport type 'bike' is deprecated: Please use 'bicycle' instead.`,\n );\n case 'car':\n throw Error(\n `transport type 'car' is deprecated: Please use 'taxi' instead.`,\n );\n case 'foot':\n throw Error(\n `transport type 'foot' is deprecated: Please use 'walk' instead.`,\n );\n default:\n throw Error('Please select a transport for the Travel component.');\n }\n};\n","import React, { cloneElement, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport {\n CloseSmallIcon,\n ValidationInfoFilledIcon,\n ValidationErrorFilledIcon,\n ValidationExclamationCircleFilledIcon,\n} from '@entur/icons';\nimport { useContrast } from '@entur/layout';\n\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nimport './TravelTag.scss';\n\nexport type TravelTagProps = {\n /** Callback som kalles for når man skal lukke TravelTag-en\n * @default undefined\n */\n onClose?: () => void;\n /** Innholdet inne i TravelTag-en */\n children?: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Legger til et Valideringsikon i TravelTagen for å signalisere avvik, informasjon e.l.\n * @default \"none\"\n */\n alert?: 'none' | 'error' | 'warning' | 'info';\n /** Legger til farge og ikon tilpasset valgt transportmiddel */\n transport?: Transport;\n /** Element ved siden av eller under TravelTag. */\n label?: React.ReactNode;\n /** Posisjonen til label-en i forhold til TravelTag-en\n * @default \"right\"\n */\n labelPlacement?: 'bottom' | 'right';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelTag: React.FC<TravelTagProps> = ({\n children,\n className,\n alert = 'none',\n transport = 'none',\n label,\n labelPlacement = 'right',\n onClose = undefined,\n ...rest\n}) => {\n const isContrast = useContrast();\n const isClosable = onClose ? true : false;\n const transportIsSet = transport !== 'none';\n const alertIsSet = alert !== 'none';\n const tagRef = useRef<HTMLDivElement>(null);\n const numberOfChildren = React.Children.count(children);\n const { Icon, ariaLabel: ariaLabelForTranportIcon } =\n getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n const IconWithAriaHidden = cloneElement(<Icon />, { 'aria-hidden': 'true' });\n\n const backgroundColor =\n 'var(--components-travel-traveltag-standard-tagfill-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-traveltag-contrast-tagfill-' +\n deCapitalizeTransport +\n ')';\n // Error colors\n const errorBackgroundColor =\n 'var(--components-travel-traveltag-standard-tagfill-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorContrastBackgroundColor =\n 'var(--components-travel-traveltag-contrast-tagfill-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorContrastTextColor =\n 'var(--components-travel-traveltag-contrast-text-line-' +\n deCapitalizeTransport +\n '-cancled)';\n const errorTextColor =\n 'var(--components-travel-traveltag-standard-text-line-' +\n deCapitalizeTransport +\n '-cancled)';\n\n useEffect(() => {\n if (transportIsSet) {\n let colorToSet;\n let textColorToSet;\n // Walk has another icon/text color then the other transports\n if (transport === 'walk') {\n tagRef.current?.style.setProperty(\n '--text-color',\n 'var(--components-travel-traveltag-standard-icon-walk)',\n );\n }\n // Error\n if (alert === 'error') {\n colorToSet = isContrast\n ? errorContrastBackgroundColor\n : errorBackgroundColor;\n textColorToSet = isContrast ? errorContrastTextColor : errorTextColor;\n tagRef.current?.style.setProperty('--text-color', `${textColorToSet}`);\n } else {\n colorToSet = isContrast ? contrastBackgroundColor : backgroundColor;\n }\n tagRef.current?.style.setProperty('--background-color', `${colorToSet}`);\n }\n }, [\n transportIsSet,\n isContrast,\n backgroundColor,\n contrastBackgroundColor,\n errorBackgroundColor,\n alert,\n ]);\n\n const TravelTagWithoutLabel: JSX.Element = (\n <div\n className={classNames('eds-travel-tag', {\n 'eds-travel-tag--closable': isClosable,\n 'eds-travel-tag--alert': alertIsSet,\n 'eds-travel-tag--alert--error': alert === 'error',\n 'eds-travel-tag--transport': transportIsSet,\n 'eds-travel-tag--icon-and-text':\n numberOfChildren > 1 || (transportIsSet && numberOfChildren > 0),\n className,\n })}\n ref={tagRef}\n aria-label={`${ariaLabelForTranportIcon} ${children} ${\n alertIsSet ? alert : ''\n }`}\n role=\"img\"\n {...rest}\n >\n {IconWithAriaHidden}\n {children}\n {isClosable && (\n <button\n onClick={onClose}\n type=\"button\"\n className=\"eds-travel-tag__close-button\"\n >\n <CloseSmallIcon inline />\n </button>\n )}\n {alertIsSet && (\n <span className=\"eds-travel-tag__alert\">\n {alert === 'info' && (\n <ValidationInfoFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-info-icon\"\n />\n )}\n {alert === 'error' && (\n <ValidationErrorFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-error-icon\"\n />\n )}\n {alert === 'warning' && (\n <ValidationExclamationCircleFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-exclamation-icon\"\n />\n )}\n </span>\n )}\n </div>\n );\n\n const Label: JSX.Element = (\n <div\n className={classNames('eds-travel-tag__label', {\n [`eds-travel-tag__label--${labelPlacement}`]: label,\n [`eds-travel-tag__label--${labelPlacement}--with-alert`]:\n label && alertIsSet,\n })}\n >\n {label}\n </div>\n );\n\n if (label) {\n return (\n <div\n className={classNames('eds-travel-tag__wrapper', {\n [`eds-travel-tag__wrapper--label-position-${labelPlacement}`]: label,\n })}\n >\n {TravelTagWithoutLabel}\n {Label}\n </div>\n );\n }\n\n return TravelTagWithoutLabel;\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport './LegLine.scss';\n\nexport type LegLineProps = {\n /** Farge på LegLine'n */\n color: string;\n /** Retningen til LegLine */\n direction: 'horizontal' | 'vertical';\n /** Hvilket linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegLine: React.FC<LegLineProps> = ({\n color,\n direction = 'horizontal',\n pattern,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames('eds-leg-line', className, {\n [`eds-leg-line--${pattern}`]: pattern,\n [`eds-leg-line--${direction}`]: direction,\n })}\n style={{ backgroundColor: color }}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { LegLine } from './LegLine';\nimport './LegBone.scss';\n\nexport type LegBoneProps = {\n /** Retning på komponenten */\n direction: 'horizontal' | 'vertical';\n /** Hvilke linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Farge på linja */\n color: string;\n /** Farge på startpunktet\n * @default Verdien til color\n */\n startColor?: string;\n /** Farge på endepunktet\n * @default Verdien til color\n */\n endColor?: string;\n /** Vis startpunkt\n * @default true\n */\n showStart?: boolean;\n /** Vis linke\n * @default true\n */\n showLine?: boolean;\n /** Vis endepunkt\n * @default true\n */\n showStop?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegBone: React.FC<LegBoneProps> = ({\n direction,\n pattern,\n color,\n startColor,\n endColor,\n showStart = true,\n showStop = true,\n showLine = true,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames(className, 'eds-leg-bone', [\n { 'eds-leg-bone--vertical': direction === 'vertical' },\n { 'eds-leg-bone--horizontal': direction === 'horizontal' },\n ])}\n {...rest}\n >\n {showStart && (\n <div\n className={`eds-leg-bone__start`}\n style={{ backgroundColor: startColor || color }}\n />\n )}\n\n {showLine && (\n <LegLine\n className={`eds-leg-bone__line`}\n direction={direction}\n color={color}\n pattern={pattern}\n />\n )}\n\n {showStop && (\n <div\n className={`eds-leg-bone__stop`}\n style={{ backgroundColor: endColor || color }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useContrast } from '@entur/layout';\nimport { LegBone } from './LegBone';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelLegProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Hviklen type reise som skal vises riktig farge og linjetype */\n transport: Transport;\n /** Retningen på komponenten */\n direction: 'horizontal' | 'vertical';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelLeg: React.FC<TravelLegProps> = ({\n className,\n transport,\n direction,\n ...rest\n}) => {\n const { pattern } = getTransportStyle(transport);\n const isContrast = useContrast();\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelleg-standard-' + deCapitalizeTransport + ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelleg-contrast-' + deCapitalizeTransport + ')';\n\n return (\n <LegBone\n direction={direction}\n pattern={pattern}\n color={isContrast ? contrastBackgroundColor : backgroundColor}\n className={className}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Switch } from '@entur/form';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelSwitchProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Om switch-en er checked eller ikke */\n checked?: boolean;\n /** Label for TravelSwitch-en. */\n children?: React.ReactNode;\n /** Posisjonen til label for TravelSwitch-en.\n * @default \"right\"\n */\n labelPlacement?: 'right' | 'bottom';\n /** Hvilken type reise som skal vises ikon og farge for */\n transport: Transport; // When adding a new submode, check https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/825393529/Norwegian+submodes+and+their+definitions for names\n /** Callback for når verdien endres */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Størrelsen på Switch-en\n * @default \"medium\"\n */\n size?: 'medium' | 'large';\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>;\n\nexport const TravelSwitch: React.FC<TravelSwitchProps> = ({\n className,\n children,\n labelPlacement = 'right',\n transport,\n size,\n ...rest\n}) => {\n const { Icon } = getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelswitch-standard-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelswitch-contrast-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n\n return (\n <Switch\n className={className}\n labelPlacement={labelPlacement}\n color={backgroundColor}\n contrastColor={contrastBackgroundColor}\n icon={<Icon />}\n size={size}\n {...rest}\n >\n {children}\n </Switch>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('travel');\n\nexport * from './TravelHeader';\nexport * from './TravelTag';\nexport * from './LegLine';\nexport * from './LegBone';\nexport * from './TravelLeg';\nexport * from './TravelSwitch';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"travel.esm.js","sources":["../src/TravelHeader.tsx","../src/utils.ts","../src/TravelTag.tsx","../src/LegLine.tsx","../src/LegBone.tsx","../src/TravelLeg.tsx","../src/TravelSwitch.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './TravelHeader.scss';\n\nexport type TravelHeaderProps = {\n /** HTML-elementet eller React-komponenten som lager elementet\n * @default 'div'\n */\n as?: string | React.ElementType;\n /** Destinasjonen man reiser fra */\n from: React.ReactNode;\n /** Destinasjonen man reiser til */\n to: React.ReactNode;\n /**Størrelsen på komponenten\n * @default 'large'\n */\n size?: 'large' | 'medium';\n /** Plassere til og fra på samme linje */\n noWrap?: boolean;\n /**Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n};\n\nexport const TravelHeader: React.FC<TravelHeaderProps> = ({\n as: Element = 'div',\n from,\n to,\n size = 'large',\n className,\n noWrap,\n ...rest\n}) => {\n return (\n <Element\n className={classNames('eds-travel-header', className, {\n 'eds-travel-header--large': size === 'large',\n 'eds-travel-header--medium': size === 'medium',\n 'eds-travel-header--no-wrap': noWrap,\n })}\n aria-label={`Fra ${from}, til ${to}`}\n {...rest}\n >\n <span className=\"eds-travel-header__from\">{from}</span>\n <span className=\"eds-travel-header__to\">{to}</span>\n </Element>\n );\n};\n","import React from 'react';\n\nimport {\n BusIcon,\n FerryIcon,\n CarferryIcon,\n TramIcon,\n PlaneIcon,\n TrainIcon,\n BicycleIcon,\n MobilityIcon,\n MetroIcon,\n HelicopterIcon,\n FunicularIcon,\n CablewayIcon,\n TaxiIcon,\n WalkIcon,\n} from '@entur/icons';\n\nimport type { IconProps } from '@entur/icons';\n\nexport type Transport =\n | 'metro'\n | 'bus'\n | 'plane'\n | 'helicopter'\n | 'tram'\n | 'funicular'\n | 'cableway'\n | 'taxi'\n | 'bicycle'\n | 'walk'\n | 'train'\n | 'ferry'\n | 'carferry'\n | 'mobility'\n | 'airportLinkBus'\n | 'airportLinkRail'\n | 'rail'\n | 'water'\n | 'air'\n | 'none';\n\nexport type CSSVars = { [key: `--${string}`]: string | number };\n\ntype transportStyleResult = {\n Icon: React.FC<IconProps>;\n backgroundColor?: string;\n contrastBackgroundColor?: string;\n errorBackgroundColor?: string;\n errorTextColor?: string;\n errorContrastTextColor?: string;\n errorContrastBackgroundColor?: string;\n pattern: 'line' | 'wave' | 'dashed' | 'dotted';\n ariaLabel: string;\n};\n\nexport const getTransportStyle = (mode: string): transportStyleResult => {\n switch (mode) {\n case 'metro':\n return {\n Icon: MetroIcon,\n pattern: 'line',\n ariaLabel: 'T-bane',\n };\n case 'bus':\n case 'neutral':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Buss',\n };\n case 'plane':\n case 'air':\n return {\n Icon: PlaneIcon,\n pattern: 'line',\n ariaLabel: 'Fly',\n };\n case 'helicopter':\n return {\n Icon: HelicopterIcon,\n pattern: 'line',\n ariaLabel: 'Helikopter',\n };\n case 'tram':\n return {\n Icon: TramIcon,\n pattern: 'line',\n ariaLabel: 'Trikk',\n };\n case 'funicular':\n return {\n Icon: FunicularIcon,\n pattern: 'line',\n ariaLabel: 'Taubane',\n };\n case 'cableway':\n return {\n Icon: CablewayIcon,\n pattern: 'line',\n ariaLabel: 'Gondol',\n };\n case 'taxi':\n return {\n Icon: TaxiIcon,\n pattern: 'dashed',\n ariaLabel: 'Taxi',\n };\n case 'bicycle':\n case 'citybike':\n return {\n Icon: BicycleIcon,\n pattern: 'dashed',\n ariaLabel: 'Sykkel',\n };\n case 'walk':\n return {\n Icon: WalkIcon,\n pattern: 'dotted',\n ariaLabel: 'Gange',\n };\n case 'train':\n case 'rail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Tog',\n };\n case 'ferry':\n case 'water':\n return {\n Icon: FerryIcon,\n pattern: 'wave',\n ariaLabel: 'Ferge',\n };\n case 'carferry':\n return {\n Icon: CarferryIcon,\n pattern: 'wave',\n ariaLabel: 'Bilferge',\n };\n case 'mobility':\n return {\n Icon: MobilityIcon,\n pattern: 'line',\n ariaLabel: 'El-sparkesykkel',\n };\n case 'airportLinkBus':\n case 'airportlinkbus':\n return {\n Icon: BusIcon,\n pattern: 'dashed',\n ariaLabel: 'Flybuss',\n };\n case 'airportLinkRail':\n case 'airportlinkrail':\n return {\n Icon: TrainIcon,\n pattern: 'line',\n ariaLabel: 'Flytog',\n };\n case 'none':\n return {\n Icon: React.Fragment,\n pattern: 'line',\n ariaLabel: '',\n };\n case 'scooter':\n throw Error(\n `transport type 'scooter' is deprecated: Please use 'mobility' instead.`,\n );\n case 'bike':\n throw Error(\n `transport type 'bike' is deprecated: Please use 'bicycle' instead.`,\n );\n case 'car':\n throw Error(\n `transport type 'car' is deprecated: Please use 'taxi' instead.`,\n );\n case 'foot':\n throw Error(\n `transport type 'foot' is deprecated: Please use 'walk' instead.`,\n );\n default:\n throw Error('Please select a transport for the Travel component.');\n }\n};\n","import React, { cloneElement } from 'react';\nimport classNames from 'classnames';\nimport {\n CloseSmallIcon,\n ValidationInfoFilledIcon,\n ValidationErrorFilledIcon,\n ValidationExclamationCircleFilledIcon,\n} from '@entur/icons';\nimport { useContrast } from '@entur/layout';\n\nimport { getTransportStyle } from './utils';\n\nimport type { CSSVars, Transport } from './utils';\n\nimport './TravelTag.scss';\n\nexport type TravelTagProps = {\n /** Callback som kalles for når man skal lukke TravelTag-en\n * @default undefined\n */\n onClose?: () => void;\n /** Innholdet inne i TravelTag-en */\n children?: React.ReactNode;\n /**Ekstra klassenavn */\n className?: string;\n /** Legger til et Valideringsikon i TravelTagen for å signalisere avvik, informasjon e.l.\n * @default \"none\"\n */\n alert?: 'none' | 'error' | 'warning' | 'info';\n /** Legger til farge og ikon tilpasset valgt transportmiddel */\n transport?: Transport;\n /** Element ved siden av eller under TravelTag. */\n label?: React.ReactNode;\n /** Posisjonen til label-en i forhold til TravelTag-en\n * @default \"right\"\n */\n labelPlacement?: 'bottom' | 'right';\n /** Ekstrainnhold for tilleggsvisning i en separat boks.\n * @example Brukes ofte for å vise et tog/avgangsnummer\n */\n details?: React.ReactNode;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelTag: React.FC<TravelTagProps> = ({\n children,\n className,\n alert = 'none',\n transport = 'none',\n label,\n labelPlacement = 'right',\n onClose = undefined,\n details,\n style,\n ...rest\n}) => {\n const isContrast = useContrast();\n const isClosable = Boolean(onClose);\n const transportIsSet = transport !== 'none';\n const alertIsSet = alert !== 'none';\n const hasDetails = details !== undefined;\n const numberOfChildren = React.Children.count(children);\n const { Icon, ariaLabel: ariaLabelForTranportIcon } =\n getTransportStyle(transport);\n const transportLower = transport.toLowerCase();\n const IconWithAriaHidden = cloneElement(<Icon />, { 'aria-hidden': 'true' });\n\n const colorTheme = isContrast ? 'contrast' : 'standard';\n const colorModifier = alert === 'error' ? 'cancelled' : undefined;\n const shouldModifyTextColor = alert === 'error' || transport === 'walk';\n\n const dynamicCssVars: React.CSSProperties & CSSVars = {\n '--background-color': `var(--components-travel-traveltag-${colorTheme}-fill-${transportLower}${\n colorModifier ? `-${colorModifier}` : ''\n })`,\n ...(shouldModifyTextColor && {\n '--text-color': `var(--components-travel-traveltag-${colorTheme}-text-line-${transportLower}${\n colorModifier ? `-${colorModifier}` : ''\n })`,\n }),\n };\n\n const TravelTagWithoutLabel: JSX.Element = (\n <div\n className={classNames('eds-travel-tag', {\n 'eds-travel-tag--closable': isClosable,\n 'eds-travel-tag--alert': alertIsSet,\n 'eds-travel-tag--alert--error': alert === 'error',\n 'eds-travel-tag--transport': transportIsSet,\n 'eds-travel-tag--icon-and-text':\n numberOfChildren > 1 || (transportIsSet && numberOfChildren > 0),\n className,\n })}\n style={{ ...dynamicCssVars, ...style }}\n aria-label={[ariaLabelForTranportIcon, children, alertIsSet ? alert : '']\n .filter(Boolean)\n .join(' ')}\n role=\"img\"\n {...rest}\n >\n {IconWithAriaHidden}\n {children}\n {isClosable && (\n <button\n onClick={onClose}\n type=\"button\"\n className=\"eds-travel-tag__close-button\"\n >\n <CloseSmallIcon inline />\n </button>\n )}\n {hasDetails && <div className=\"eds-travel-tag__details\">{details}</div>}\n {alertIsSet && (\n <span className=\"eds-travel-tag__alert\">\n {alert === 'info' && (\n <ValidationInfoFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-info-icon\"\n />\n )}\n {alert === 'error' && (\n <ValidationErrorFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-error-icon\"\n />\n )}\n {alert === 'warning' && (\n <ValidationExclamationCircleFilledIcon\n aria-hidden\n className=\"eds-travel-tag__alert-exclamation-icon\"\n />\n )}\n </span>\n )}\n </div>\n );\n\n const Label: JSX.Element = (\n <div\n className={classNames('eds-travel-tag__label', {\n [`eds-travel-tag__label--${labelPlacement}`]: label,\n [`eds-travel-tag__label--${labelPlacement}--with-alert`]:\n label && alertIsSet,\n })}\n >\n {label}\n </div>\n );\n\n if (label) {\n return (\n <div\n className={classNames('eds-travel-tag__wrapper', {\n [`eds-travel-tag__wrapper--label-position-${labelPlacement}`]: label,\n })}\n >\n {TravelTagWithoutLabel}\n {Label}\n </div>\n );\n }\n\n return TravelTagWithoutLabel;\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport './LegLine.scss';\n\nexport type LegLineProps = {\n /** Farge på LegLine'n */\n color: string;\n /** Retningen til LegLine */\n direction: 'horizontal' | 'vertical';\n /** Hvilket linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegLine: React.FC<LegLineProps> = ({\n color,\n direction = 'horizontal',\n pattern,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames('eds-leg-line', className, {\n [`eds-leg-line--${pattern}`]: pattern,\n [`eds-leg-line--${direction}`]: direction,\n })}\n style={{ backgroundColor: color }}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { LegLine } from './LegLine';\nimport './LegBone.scss';\n\nexport type LegBoneProps = {\n /** Retning på komponenten */\n direction: 'horizontal' | 'vertical';\n /** Hvilke linjemønster som skal brukes */\n pattern: 'line' | 'dashed' | 'dotted' | 'wave';\n /** Farge på linja */\n color: string;\n /** Farge på startpunktet\n * @default Verdien til color\n */\n startColor?: string;\n /** Farge på endepunktet\n * @default Verdien til color\n */\n endColor?: string;\n /** Vis startpunkt\n * @default true\n */\n showStart?: boolean;\n /** Vis linke\n * @default true\n */\n showLine?: boolean;\n /** Vis endepunkt\n * @default true\n */\n showStop?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const LegBone: React.FC<LegBoneProps> = ({\n direction,\n pattern,\n color,\n startColor,\n endColor,\n showStart = true,\n showStop = true,\n showLine = true,\n className,\n ...rest\n}) => {\n return (\n <div\n className={classNames(className, 'eds-leg-bone', [\n { 'eds-leg-bone--vertical': direction === 'vertical' },\n { 'eds-leg-bone--horizontal': direction === 'horizontal' },\n ])}\n {...rest}\n >\n {showStart && (\n <div\n className={`eds-leg-bone__start`}\n style={{ backgroundColor: startColor || color }}\n />\n )}\n\n {showLine && (\n <LegLine\n className={`eds-leg-bone__line`}\n direction={direction}\n color={color}\n pattern={pattern}\n />\n )}\n\n {showStop && (\n <div\n className={`eds-leg-bone__stop`}\n style={{ backgroundColor: endColor || color }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useContrast } from '@entur/layout';\nimport { LegBone } from './LegBone';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelLegProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Hviklen type reise som skal vises riktig farge og linjetype */\n transport: Transport;\n /** Retningen på komponenten */\n direction: 'horizontal' | 'vertical';\n} & React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport const TravelLeg: React.FC<TravelLegProps> = ({\n className,\n transport,\n direction,\n ...rest\n}) => {\n const { pattern } = getTransportStyle(transport);\n const isContrast = useContrast();\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelleg-standard-' + deCapitalizeTransport + ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelleg-contrast-' + deCapitalizeTransport + ')';\n\n return (\n <LegBone\n direction={direction}\n pattern={pattern}\n color={isContrast ? contrastBackgroundColor : backgroundColor}\n className={className}\n {...rest}\n />\n );\n};\n","import React from 'react';\nimport { Switch } from '@entur/form';\nimport { getTransportStyle } from './utils';\n\nimport type { Transport } from './utils';\n\nexport type TravelSwitchProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Om switch-en er checked eller ikke */\n checked?: boolean;\n /** Label for TravelSwitch-en. */\n children?: React.ReactNode;\n /** Posisjonen til label for TravelSwitch-en.\n * @default \"right\"\n */\n labelPlacement?: 'right' | 'bottom';\n /** Hvilken type reise som skal vises ikon og farge for */\n transport: Transport; // When adding a new submode, check https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/825393529/Norwegian+submodes+and+their+definitions for names\n /** Callback for når verdien endres */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** Størrelsen på Switch-en\n * @default \"medium\"\n */\n size?: 'medium' | 'large';\n} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>;\n\nexport const TravelSwitch: React.FC<TravelSwitchProps> = ({\n className,\n children,\n labelPlacement = 'right',\n transport,\n size,\n ...rest\n}) => {\n const { Icon } = getTransportStyle(transport);\n const deCapitalizeTransport = transport.toLowerCase();\n\n const backgroundColor =\n 'var(--components-travel-travelswitch-standard-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n const contrastBackgroundColor =\n 'var(--components-travel-travelswitch-contrast-backgroundtrue-' +\n deCapitalizeTransport +\n ')';\n\n return (\n <Switch\n className={className}\n labelPlacement={labelPlacement}\n color={backgroundColor}\n contrastColor={contrastBackgroundColor}\n icon={<Icon />}\n size={size}\n {...rest}\n >\n {children}\n </Switch>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('travel');\n\nexport * from './TravelHeader';\nexport * from './TravelTag';\nexport * from './LegLine';\nexport * from './LegBone';\nexport * from './TravelLeg';\nexport * from './TravelSwitch';\n"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { IconProps } from '../../icons';
|
|
3
3
|
export type Transport = 'metro' | 'bus' | 'plane' | 'helicopter' | 'tram' | 'funicular' | 'cableway' | 'taxi' | 'bicycle' | 'walk' | 'train' | 'ferry' | 'carferry' | 'mobility' | 'airportLinkBus' | 'airportLinkRail' | 'rail' | 'water' | 'air' | 'none';
|
|
4
|
+
export type CSSVars = {
|
|
5
|
+
[key: `--${string}`]: string | number;
|
|
6
|
+
};
|
|
4
7
|
type transportStyleResult = {
|
|
5
8
|
Icon: React.FC<IconProps>;
|
|
6
9
|
backgroundColor?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entur/travel",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"license": "EUPL-1.2",
|
|
5
5
|
"main": "dist/travel.cjs.js",
|
|
6
6
|
"module": "dist/travel.esm.js",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"react-dom": ">=16.8.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@entur/form": "^8.
|
|
31
|
-
"@entur/icons": "^8.0
|
|
32
|
-
"@entur/layout": "^3.
|
|
33
|
-
"@entur/tokens": "^3.
|
|
30
|
+
"@entur/form": "^8.4.0",
|
|
31
|
+
"@entur/icons": "^8.1.0",
|
|
32
|
+
"@entur/layout": "^3.2.0",
|
|
33
|
+
"@entur/tokens": "^3.20.0",
|
|
34
34
|
"@entur/utils": "^0.12.5",
|
|
35
35
|
"classnames": "^2.5.1"
|
|
36
36
|
},
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"vite": "^7.1.3",
|
|
48
48
|
"vite-plugin-dts": "^4.5.4"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "121225eb41428c01d02eeaa81669651cb9499456"
|
|
51
51
|
}
|