@helsenorge/designsystem-react 2.11.3 → 2.13.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/CHANGELOG.md +27 -2
- package/Panel.js +1 -1
- package/Panel.js.map +1 -1
- package/components/Duolist/Duolist.d.ts +10 -1
- package/components/Duolist/Duolist.d.ts.map +1 -1
- package/components/Duolist/componentdata.json +1 -1
- package/components/Duolist/index.js +1 -1
- package/components/Duolist/index.js.map +1 -1
- package/components/Duolist/styles.module.scss +20 -0
- package/components/Duolist/styles.module.scss.d.ts +4 -0
- package/components/Logo/Logo.d.ts +1 -2
- package/components/Logo/Logo.d.ts.map +1 -1
- package/components/Logo/componentdata.json +1 -1
- package/components/Logo/index.js.map +1 -1
- package/components/Panel/Panel.d.ts.map +1 -1
- package/components/Panel/styles.module.scss +19 -7
- package/components/Panel/styles.module.scss.d.ts +2 -0
- package/components/RadioButton/styles.module.scss +23 -0
- package/components/Slider/Slider.d.ts +3 -3
- package/components/Slider/Slider.d.ts.map +1 -1
- package/components/Slider/componentdata.json +1 -1
- package/components/Slider/index.js +1 -1
- package/components/Slider/index.js.map +1 -1
- package/components/Slider/styles.module.scss +22 -25
- package/components/Slider/styles.module.scss.d.ts +2 -5
- package/components/TagList/TagList.d.ts.map +1 -1
- package/components/TagList/index.js +1 -1
- package/components/TagList/index.js.map +1 -1
- package/components/TagList/styles.module.scss +5 -0
- package/components/TagList/styles.module.scss.d.ts +1 -0
- package/hooks/useOutsideEvent.js +1 -1
- package/hooks/useOutsideEvent.js.map +1 -1
- package/package.json +1 -1
- package/utils/accessibility.d.ts +1 -0
- package/utils/accessibility.d.ts.map +1 -1
- package/utils/accessibility.js +1 -1
- package/utils/accessibility.js.map +1 -1
- package/components/Slider/SliderUtils.d.ts +0 -38
- package/components/Slider/SliderUtils.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## [2.12.0](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/branchCompare?baseVersion=GTv2.11.3&targetVersion=GTv2.12.0) (2023-01-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* gir vertikaler mulighet til å hente reset styling for radio button fra designsystemet ([868df37](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/868df372ab03638f25d2747d829e99248436528e)), closes [#292456](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/292456)
|
|
7
|
+
* panel med buttonAriaLabel bruker det som aria-label selv om title er satt ([23caab9](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/23caab91b8b4ac50df54dc34930618b2fd3583be)), closes [#293470](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/293470) [#293729](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/293729)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* duolist null child kaster ikke feilmelding ([7668bd2](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/7668bd26ffc077727fae2e1f1eaf2b371b81af80)), closes [#292617](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/292617)
|
|
13
|
+
* logo kan bare være hvit og svart ([c46dcc1](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/c46dcc17e13189973fef4691ab1b75c3442f6ab4)), closes [#293148](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/293148)
|
|
14
|
+
* panel detail button pil plassert riktig ([21782d8](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/21782d80502afdd9415c1e3ba9eca092f063157e)), closes [#287921](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/287921)
|
|
15
|
+
* taglist har nå role=list med listitems ([62be09d](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/62be09de17a946e1339f27792878c19c9e72be7f)), closes [#290367](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/290367)
|
|
16
|
+
* useOutsideEvent fungerer i web components ([ffe9b7f](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/ffe9b7ffc67e04f6b8d7232b0a6829a380d112d6)), closes [#293729](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/293729)
|
|
17
|
+
* vis slider på utskrift ([aa60206](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/aa60206364af351c33045f22d5a9379276e814bf)), closes [#281560](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/281560)
|
|
18
|
+
|
|
19
|
+
## [2.11.3](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/branchCompare?baseVersion=GTv2.11.2&targetVersion=GTv2.11.3) (2023-01-17)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* legger til header sematikk på expanderlist ([2918461](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/29184614d218b50461c79e41d609d0c4917fd873)), closes [#291046](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/291046)
|
|
25
|
+
|
|
1
26
|
## [2.11.2](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/branchCompare?baseVersion=GTv2.11.1&targetVersion=GTv2.11.2) (2023-01-12)
|
|
2
27
|
|
|
3
28
|
|
|
@@ -254,7 +279,7 @@
|
|
|
254
279
|
|
|
255
280
|
## 2.0.0-beta.1 (2022-09-15)
|
|
256
281
|
|
|
257
|
-
## 2.0.0-beta.0 (2022-09-
|
|
282
|
+
## 2.0.0-beta.0 (2022-09-15)
|
|
258
283
|
|
|
259
284
|
|
|
260
285
|
### Features
|
|
@@ -356,8 +381,8 @@
|
|
|
356
381
|
|
|
357
382
|
### Bug Fixes
|
|
358
383
|
|
|
359
|
-
* økt kontrast på understreking av lenker ([50b7fa4](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/50b7fa47fb44cb7d75fb877bd53e2309b35e1e21)), closes [#229049](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/229049)
|
|
360
384
|
* panel har avstand fra tittel til badge ([09034c4](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/09034c4844408c7cfe8f65d7a1a0d82a7828c2ef)), closes [#282359](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/282359)
|
|
385
|
+
* økt kontrast på understreking av lenker ([50b7fa4](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/commit/50b7fa47fb44cb7d75fb877bd53e2309b35e1e21)), closes [#229049](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/issues/229049)
|
|
361
386
|
|
|
362
387
|
## [1.2.2](https://dev.azure.com/nhnfelles/Helsenorge/_git/HN-Designsystem/branchCompare?baseVersion=GTv1.2.1&targetVersion=GTv1.2.2) (2022-08-31)
|
|
363
388
|
|
package/Panel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t,{useState as
|
|
1
|
+
import t,{useState as ce,useEffect as D}from"react";import o from"classnames";import e from"./components/Panel/styles.module.scss";import{T as pe}from"./Title.js";import{B as $}from"./Button.js";import{AnalyticsId as me,IconSize as B}from"./constants.js";import{Icon as u}from"./components/Icons/Icon.js";import de from"./components/Icons/ChevronDown.js";import ue from"./components/Icons/ChevronUp.js";import fe from"./components/Icons/ArrowRight.js";import _e from"./components/Icons/AlertSignFill.js";import{palette as j}from"./theme/palette.js";import ye from"./components/Icons/Pencil.js";import be from"./components/Icons/Calendar.js";import Ee from"./components/Icons/Watch.js";import{useBreakpoint as ge,Breakpoint as W}from"./hooks/useBreakpoint.js";import{useUuid as X}from"./hooks/useUuid.js";import{usePrevious as ve}from"./hooks/usePrevious.js";import{getAriaLabelAttributes as he}from"./utils/accessibility.js";import{B as Ce}from"./Badge.js";var we=(a=>(a.normal="normal",a.new="new",a.error="error",a.draft="draft",a))(we||{}),Ne=(a=>(a.fill="fill",a.white="white",a.stroke="stroke",a.line="line",a))(Ne||{}),Ie=(a=>(a.layout1="layout1",a.layout2="layout2",a.layout3a="layout3a",a.layout3b="layout3b",a.layout3c="layout3c",a))(Ie||{});const ke=({status:a,statusMessage:s})=>{const g=()=>a==="error"?{color:j.cherry500,svgIcon:_e}:{color:j.black,svgIcon:ye},i=o(e["status-message"],{[e["status-message--new"]]:a==="new"});return(a==="error"||a==="draft")&&s?t.createElement("div",{className:i,"data-testid":"display-status"},t.createElement(u,{...g(),size:B.XSmall})," ",t.createElement("span",null,s)):null},F=({date:a,time:s})=>a||s?t.createElement("div",{className:e["datetime-container"],"data-testid":"datetime"},a&&t.createElement("div",{className:e["datetime-container__icon"]},t.createElement(u,{svgIcon:be,size:B.XSmall}),t.createElement("span",null,a)),s&&t.createElement("div",{className:e["datetime-container__icon"]},t.createElement(u,{svgIcon:Ee,size:B.XSmall}),t.createElement("span",null,s))):null,Je=t.forwardRef(function(s,g){const{children:i,contentA:H,contentB:r,className:U,testId:L,title:v,titleHtmlMarkup:O="h2",url:f,target:q="_self",icon:c,iconRight:x=!1,variant:p="fill",status:m="normal",statusMessage:h,buttonText:A="Se detaljer",buttonTextClose:G="Skjul detaljer",buttonAriaLabelledById:S,buttonAriaLabel:J,layout:n="layout2",containerAsButton:C=!1,date:w,time:N,noTopBorder:K,buttonOnClick:d,buttonHtmlMarkup:Q="a",expanded:_=!1,onExpand:y,renderChildrenWhenClosed:Y=!1}=s,[l,T]=ce(_),Z=ve(l),I=X(),b=X(),R=ge(),M=h&&m==="new";D(()=>{_!==l&&T(_)},[_]),D(()=>{y&&l!==!!Z&&y(l)},[l,y]);const E=["layout3a".toString(),"layout3b".toString(),"layout3c".toString()].includes(n),P=o(e["panel-wrapper"],U),V=o(e.panel,{[e["panel--fill"]]:p==="fill",[e["panel--stroke"]]:p==="stroke",[e["panel--white"]]:p==="white",[e["panel--line"]]:p==="line",[e["panel--no-top-border"]]:p==="line"&&K,[e["panel--selected"]]:l,[e["panel--new"]]:m==="new",[e["panel--draft"]]:m==="draft",[e["panel--error"]]:m==="error",[e["panel--status"]]:m&&m!=="normal",[e["panel--with-icon"]]:c,[e["panel--button"]]:C,[e["panel--clickable"]]:i||f||y||d||C}),ee=o({[e.panel__container]:n==="layout2"&&r,[e["panel__container--layout3"]]:E&&r,[e["panel__container--grow"]]:c}),te=o({[e["panel-content-a"]]:n==="layout2",[e["panel-content-a--layout3a"]]:n==="layout3a",[e["panel-content-a--layout3b"]]:n==="layout3b",[e["panel-content-a--layout3c"]]:n==="layout3c"}),ae=o({[e["panel__content-right--layout1"]]:r&&n==="layout1",[e["panel__content-right--layout2"]]:r&&n==="layout2",[e["panel__content-right--layout3"]]:r&&E,[e["panel__content-right--layout3a"]]:r&&n==="layout3a",[e["panel__content-right--layout3b"]]:r&&n==="layout3b",[e["panel__content-right--layout3c"]]:r&&n==="layout3c"}),ne=o(e["panel-content-b"],{[e["panel-content-b--layout1"]]:n==="layout1",[e["panel-content-b--layout3"]]:E}),le=o(e["panel__details-btn"]),re=o(e["panel-content-a__title"],{[e["panel-content-a__title--badge"]]:M}),oe=()=>{const k=he({label:J,id:S&&`${b} ${S}`||v&&I&&`${b} ${I}`,prefer:"label"}),z={onClick:d||(()=>T(!l)),className:C?e.panel__expand:void 0,variant:"borderless",ellipsis:!0,...k};return i?t.createElement($,{testId:"expand","aria-expanded":l,...z},t.createElement("span",{id:b},l?G:A),t.createElement(u,{svgIcon:l?ue:de})):t.createElement($,{testId:"url",htmlMarkup:Q,href:f,target:q,...z},t.createElement("span",{id:b},A),t.createElement(u,{svgIcon:fe}))},se=o(e["panel__btn-container"],{[e["panel__btn-container--layout3"]]:E,[e["panel__btn-container--padding-top"]]:r}),ie=()=>{if(!i||!Y&&!l)return null;const k=o(e["panel-details"],{[e["panel-details--open"]]:l,[e["panel-details--line"]]:p==="line",[e["panel-details--white"]]:p==="white",[e["panel-details--with-icon"]]:c});return t.createElement("div",{className:k,"data-testid":"panel-details"},t.createElement("div",null,i))};return t.createElement("div",{ref:g,"data-testid":L,className:P,"data-analyticsid":me.Panel},t.createElement("div",{className:V},c&&!x&&t.createElement("div",{className:e.panel__icon},c),t.createElement("div",{className:ee},t.createElement("div",{className:te},t.createElement(ke,{status:m,statusMessage:h}),v&&t.createElement("div",{className:e["panel-content-a__title-container"]},t.createElement(pe,{appearance:"title3",htmlMarkup:O,id:I,className:re},v),M&&t.createElement("div",{className:e.panel__badge},t.createElement(Ce,{color:"blueberry",testId:"badge-status"},h))),H,R>=W.lg&&t.createElement(F,{date:w,time:N})),t.createElement("div",{className:ae},r&&t.createElement("div",{className:ne},r),(i||f||w||N||d)&&t.createElement("div",{className:se},R<W.lg&&t.createElement(F,{date:w,time:N}),(i||f||d)&&t.createElement("div",{className:le},oe())))),c&&x&&t.createElement("div",{className:e["panel__icon--right"]},c)),ie())});export{Je as P,we as a,Ne as b,Ie as c};
|
|
2
2
|
//# sourceMappingURL=Panel.js.map
|
package/Panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","sources":["../src/components/Panel/Panel.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport classNames from 'classnames';\n\nimport panelStyles from './styles.module.scss';\nimport Title, { TitleTags } from '../Title';\nimport Button, { ButtonProps, ButtonTags } from '../Button';\nimport { AnchorTarget, AnalyticsId } from '../../constants';\n\nimport Icon, { IconSize, SvgPathProps } from '../Icons';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport ArrowRight from '../Icons/ArrowRight';\nimport AlertSignFill from '../Icons/AlertSignFill';\nimport { palette } from '../../theme/palette';\nimport Pencil from '../Icons/Pencil';\nimport Calendar from '../Icons/Calendar';\nimport Watch from '../Icons/Watch';\nimport { Breakpoint, useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useUuid } from '../../hooks/useUuid';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { AriaLabelAttributes, getAriaLabelAttributes } from '../../utils/accessibility';\nimport Badge from '../Badge';\n\nexport enum PanelStatus {\n normal = 'normal',\n new = 'new',\n error = 'error',\n draft = 'draft',\n}\n\nexport enum PanelVariant {\n fill = 'fill',\n white = 'white',\n stroke = 'stroke',\n line = 'line',\n}\n\nexport enum PanelLayout {\n layout1 = 'layout1',\n layout2 = 'layout2',\n layout3a = 'layout3a',\n layout3b = 'layout3b',\n layout3c = 'layout3c',\n}\n\nexport interface PanelProps {\n children?: React.ReactNode;\n /** Title of the panel */\n title?: string;\n /** Changes the underlying element of the title. Default: h2*/\n titleHtmlMarkup?: TitleTags;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Displays a status on the left side: defualt normal */\n status?: keyof typeof PanelStatus;\n /** Displayed on top of the panel with a status icon */\n statusMessage?: string;\n /** Changes the visual representation of the panel. */\n variant?: keyof typeof PanelVariant;\n /** Url to details, renders as a button with anchor tag */\n url?: string;\n /** target used in the button: default is _self */\n target?: AnchorTarget;\n /** Icon displayed in title */\n icon?: React.ReactNode;\n /** Display icon on right */\n iconRight?: boolean;\n /** Panel section A content */\n contentA?: React.ReactNode | string;\n /** Panel section B content*/\n contentB?: React.ReactNode | string;\n /** Panel button text */\n buttonText?: string;\n /** Panel button close text */\n buttonTextClose?: string;\n /** HTML markup for panel button. Default: a */\n buttonHtmlMarkup?: ButtonTags;\n /** Callback when panel button is clicked */\n buttonOnClick?: ButtonProps['onClick'];\n /** Panel button is aria-labelledby the text in the button itself + the element set in buttonAriaLabelledById. Default: auto-generated id for title (if title is set). */\n buttonAriaLabelledById?: string;\n /** Panel button aria label */\n buttonAriaLabel?: string;\n /** Show close button in bottom of Panel Expand */\n /** @deprecated Has no effect anymore due to accessbility reasons. No close button is shown in expanded content. Will be removed in 2.0.0 */\n showCloseButtonInExpand?: boolean;\n /** Layout (see description) */\n layout?: keyof typeof PanelLayout;\n /** Clicking anywhere on the container will trigger a click on the panel's button */\n containerAsButton?: boolean;\n /** Displays time with icon */\n time?: string;\n /** Displays date with icon */\n date?: string;\n /** Removes top border when variant is \"line\" */\n noTopBorder?: boolean;\n /** Opens or closes the panel */\n expanded?: boolean;\n /** Called when panel is open/closed. */\n onExpand?: (isExpanded: boolean) => void;\n /** Whether to render children when closed (in which case they are hidden with CSS). Default: false */\n renderChildrenWhenClosed?: boolean;\n}\n\nconst StatusText: React.FC<{ status?: keyof typeof PanelStatus; statusMessage?: string }> = ({ status, statusMessage }) => {\n const statusIcon = (): { color: string; svgIcon: React.FC<SvgPathProps> } => {\n if (status === PanelStatus.error) {\n return { color: palette.cherry500, svgIcon: AlertSignFill };\n }\n\n return { color: palette.black, svgIcon: Pencil };\n };\n\n const statusMessageClass = classNames(panelStyles['status-message'], {\n [panelStyles['status-message--new']]: status === PanelStatus.new,\n });\n\n if ((status === PanelStatus.error || status === PanelStatus.draft) && statusMessage) {\n return (\n <div className={statusMessageClass} data-testid=\"display-status\">\n {<Icon {...statusIcon()} size={IconSize.XSmall} />} <span>{statusMessage}</span>\n </div>\n );\n }\n\n return null;\n};\n\nconst DateTime: React.FC<{ date?: string; time?: string }> = ({ date, time }) => {\n if (date || time) {\n return (\n <div className={panelStyles['datetime-container']} data-testid=\"datetime\">\n {date && (\n <div className={panelStyles['datetime-container__icon']}>\n <Icon svgIcon={Calendar} size={IconSize.XSmall} />\n <span>{date}</span>\n </div>\n )}\n {time && (\n <div className={panelStyles['datetime-container__icon']}>\n <Icon svgIcon={Watch} size={IconSize.XSmall} />\n <span>{time}</span>\n </div>\n )}\n </div>\n );\n }\n\n return null;\n};\n\nconst Panel = React.forwardRef(function PanelForwardedRef(props: PanelProps, ref: React.ForwardedRef<HTMLHeadingElement>) {\n const {\n children,\n contentA,\n contentB,\n className,\n testId,\n title,\n titleHtmlMarkup = 'h2',\n url,\n target = '_self',\n icon,\n iconRight = false,\n variant = PanelVariant.fill,\n status = PanelStatus.normal,\n statusMessage,\n buttonText = 'Se detaljer',\n buttonTextClose = 'Skjul detaljer',\n buttonAriaLabelledById,\n buttonAriaLabel,\n layout = PanelLayout.layout2,\n containerAsButton = false,\n date,\n time,\n noTopBorder,\n buttonOnClick,\n buttonHtmlMarkup = 'a',\n expanded = false,\n onExpand,\n renderChildrenWhenClosed = false,\n } = props;\n\n const [isExpanded, setIsExpanded] = useState<boolean>(expanded);\n const previousIsExpanded = usePrevious(isExpanded);\n const titleId = useUuid();\n const buttonTextId = useUuid();\n const breakpoint = useBreakpoint();\n\n useEffect(() => {\n if (expanded !== isExpanded) {\n setIsExpanded(expanded);\n }\n }, [expanded]);\n\n useEffect(() => {\n if (onExpand && isExpanded !== !!previousIsExpanded) {\n onExpand(isExpanded);\n }\n }, [isExpanded, onExpand]);\n\n const layout3 = [PanelLayout.layout3a.toString(), PanelLayout.layout3b.toString(), PanelLayout.layout3c.toString()].includes(layout);\n\n const panelWrapperClass = classNames(panelStyles['panel-wrapper'], className);\n\n const panelClasses = classNames(panelStyles.panel, {\n [panelStyles['panel--fill']]: variant === PanelVariant.fill,\n [panelStyles['panel--stroke']]: variant === PanelVariant.stroke,\n [panelStyles['panel--white']]: variant === PanelVariant.white,\n [panelStyles['panel--line']]: variant === PanelVariant.line,\n [panelStyles['panel--no-top-border']]: variant === PanelVariant.line && noTopBorder,\n [panelStyles['panel--selected']]: isExpanded,\n [panelStyles['panel--new']]: status === PanelStatus.new,\n [panelStyles['panel--draft']]: status === PanelStatus.draft,\n [panelStyles['panel--error']]: status === PanelStatus.error,\n [panelStyles['panel--status']]: status && status !== PanelStatus.normal,\n [panelStyles['panel--with-icon']]: icon,\n [panelStyles['panel--button']]: containerAsButton,\n [panelStyles['panel--clickable']]: children || url || onExpand || buttonOnClick || containerAsButton,\n });\n\n const panelContainer = classNames({\n [panelStyles['panel__container']]: layout === PanelLayout.layout2 && contentB,\n [panelStyles['panel__container--layout3']]: layout3 && contentB,\n [panelStyles['panel__container--grow']]: icon,\n });\n\n const panelContentLeftClass = classNames({\n [panelStyles['panel-content-a']]: layout === PanelLayout.layout2,\n [panelStyles['panel-content-a--layout3a']]: layout === PanelLayout.layout3a,\n [panelStyles['panel-content-a--layout3b']]: layout === PanelLayout.layout3b,\n [panelStyles['panel-content-a--layout3c']]: layout === PanelLayout.layout3c,\n });\n\n const panelContentRightClass = classNames({\n [panelStyles['panel__content-right--layout1']]: contentB && layout === PanelLayout.layout1,\n [panelStyles['panel__content-right--layout2']]: contentB && layout === PanelLayout.layout2,\n [panelStyles['panel__content-right--layout3']]: contentB && layout3,\n [panelStyles['panel__content-right--layout3a']]: contentB && layout === PanelLayout.layout3a,\n [panelStyles['panel__content-right--layout3b']]: contentB && layout === PanelLayout.layout3b,\n [panelStyles['panel__content-right--layout3c']]: contentB && layout === PanelLayout.layout3c,\n });\n\n const panelContentBClass = classNames(panelStyles['panel-content-b'], {\n [panelStyles['panel-content-b--layout1']]: layout === PanelLayout.layout1,\n [panelStyles['panel-content-b--layout3']]: layout3,\n });\n\n const panelActionBtnClass = classNames(panelStyles['panel__details-btn']);\n\n const renderDetailsButton = (): JSX.Element => {\n const ariaLabelAttributes = getAriaLabelAttributes({\n label: buttonAriaLabel,\n id: (buttonAriaLabelledById && `${buttonTextId} ${buttonAriaLabelledById}`) || (title && titleId && `${buttonTextId} ${titleId}`),\n });\n\n const commonProps: Partial<ButtonProps> & AriaLabelAttributes = {\n onClick: buttonOnClick ? buttonOnClick : () => setIsExpanded(!isExpanded),\n className: containerAsButton ? panelStyles['panel__expand'] : undefined,\n variant: 'borderless',\n ellipsis: true,\n ...ariaLabelAttributes,\n };\n\n if (!!children) {\n return (\n <Button testId=\"expand\" aria-expanded={isExpanded} {...commonProps}>\n <span id={buttonTextId}>{isExpanded ? buttonTextClose : buttonText}</span>\n <Icon svgIcon={isExpanded ? ChevronUp : ChevronDown} />\n </Button>\n );\n }\n\n return (\n <Button testId=\"url\" htmlMarkup={buttonHtmlMarkup} href={url} target={target} {...commonProps}>\n <span id={buttonTextId}>{buttonText}</span>\n <Icon svgIcon={ArrowRight} />\n </Button>\n );\n };\n\n const btnContainerClass = classNames(panelStyles['panel__btn-container'], {\n [panelStyles['panel__btn-container--layout3']]: layout3,\n [panelStyles['panel__btn-container--padding-top']]: contentB,\n });\n\n const renderContent = () => {\n if (!children) {\n return null;\n }\n if (!renderChildrenWhenClosed && !isExpanded) {\n return null;\n }\n\n const panelDetailsClasses = classNames(panelStyles['panel-details'], {\n [panelStyles['panel-details--open']]: isExpanded,\n [panelStyles['panel-details--line']]: variant === PanelVariant.line,\n [panelStyles['panel-details--white']]: variant === PanelVariant.white,\n [panelStyles['panel-details--with-icon']]: icon,\n });\n\n return (\n <div className={panelDetailsClasses} data-testid=\"panel-details\">\n <div>{children}</div>\n </div>\n );\n };\n\n return (\n <div ref={ref} data-testid={testId} className={panelWrapperClass} data-analyticsid={AnalyticsId.Panel}>\n <div className={panelClasses}>\n {icon && !iconRight && <div className={panelStyles.panel__icon}>{icon}</div>}\n <div className={panelContainer}>\n <div className={panelContentLeftClass}>\n <StatusText status={status} statusMessage={statusMessage} />\n {title && (\n <div className={panelStyles['panel-content-a__title-container']}>\n <Title appearance=\"title3\" htmlMarkup={titleHtmlMarkup} id={titleId}>\n {title}\n </Title>\n {statusMessage && status === PanelStatus.new && (\n <Badge color=\"blueberry\" testId=\"badge-status\" className={panelStyles.panel__badge}>\n {statusMessage}\n </Badge>\n )}\n </div>\n )}\n {contentA}\n {breakpoint >= Breakpoint.lg && <DateTime date={date} time={time} />}\n </div>\n <div className={panelContentRightClass}>\n {contentB && <div className={panelContentBClass}>{contentB}</div>}\n {(children || url || date || time || buttonOnClick) && (\n <div className={btnContainerClass}>\n {breakpoint < Breakpoint.lg && <DateTime date={date} time={time} />}\n {(children || url || buttonOnClick) && <div className={panelActionBtnClass}>{renderDetailsButton()}</div>}\n </div>\n )}\n </div>\n </div>\n {icon && iconRight && <div className={panelStyles['panel__icon--right']}>{icon}</div>}\n </div>\n {renderContent()}\n </div>\n );\n});\n\nexport default Panel;\n"],"names":["PanelStatus","PanelVariant","PanelLayout","StatusText","status","statusMessage","statusIcon","palette","AlertSignFill","Pencil","statusMessageClass","classNames","panelStyles","React","Icon","IconSize","DateTime","date","time","Calendar","Watch","Panel","props","ref","children","contentA","contentB","className","testId","title","titleHtmlMarkup","url","target","icon","iconRight","variant","buttonText","buttonTextClose","buttonAriaLabelledById","buttonAriaLabel","layout","containerAsButton","noTopBorder","buttonOnClick","buttonHtmlMarkup","expanded","onExpand","renderChildrenWhenClosed","isExpanded","setIsExpanded","useState","previousIsExpanded","usePrevious","titleId","useUuid","buttonTextId","breakpoint","useBreakpoint","useEffect","layout3","panelWrapperClass","panelClasses","panelContainer","panelContentLeftClass","panelContentRightClass","panelContentBClass","panelActionBtnClass","renderDetailsButton","ariaLabelAttributes","getAriaLabelAttributes","commonProps","Button","ChevronUp","ChevronDown","ArrowRight","btnContainerClass","renderContent","panelDetailsClasses","AnalyticsId","Title","Badge","Breakpoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Panel.js","sources":["../src/components/Panel/Panel.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport classNames from 'classnames';\n\nimport panelStyles from './styles.module.scss';\nimport Title, { TitleTags } from '../Title';\nimport Button, { ButtonProps, ButtonTags } from '../Button';\nimport { AnchorTarget, AnalyticsId } from '../../constants';\n\nimport Icon, { IconSize, SvgPathProps } from '../Icons';\nimport ChevronDown from '../Icons/ChevronDown';\nimport ChevronUp from '../Icons/ChevronUp';\nimport ArrowRight from '../Icons/ArrowRight';\nimport AlertSignFill from '../Icons/AlertSignFill';\nimport { palette } from '../../theme/palette';\nimport Pencil from '../Icons/Pencil';\nimport Calendar from '../Icons/Calendar';\nimport Watch from '../Icons/Watch';\nimport { Breakpoint, useBreakpoint } from '../../hooks/useBreakpoint';\nimport { useUuid } from '../../hooks/useUuid';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { AriaLabelAttributes, getAriaLabelAttributes } from '../../utils/accessibility';\nimport Badge from '../Badge';\n\nexport enum PanelStatus {\n normal = 'normal',\n new = 'new',\n error = 'error',\n draft = 'draft',\n}\n\nexport enum PanelVariant {\n fill = 'fill',\n white = 'white',\n stroke = 'stroke',\n line = 'line',\n}\n\nexport enum PanelLayout {\n layout1 = 'layout1',\n layout2 = 'layout2',\n layout3a = 'layout3a',\n layout3b = 'layout3b',\n layout3c = 'layout3c',\n}\n\nexport interface PanelProps {\n children?: React.ReactNode;\n /** Title of the panel */\n title?: string;\n /** Changes the underlying element of the title. Default: h2*/\n titleHtmlMarkup?: TitleTags;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Displays a status on the left side: defualt normal */\n status?: keyof typeof PanelStatus;\n /** Displayed on top of the panel with a status icon */\n statusMessage?: string;\n /** Changes the visual representation of the panel. */\n variant?: keyof typeof PanelVariant;\n /** Url to details, renders as a button with anchor tag */\n url?: string;\n /** target used in the button: default is _self */\n target?: AnchorTarget;\n /** Icon displayed in title */\n icon?: React.ReactNode;\n /** Display icon on right */\n iconRight?: boolean;\n /** Panel section A content */\n contentA?: React.ReactNode | string;\n /** Panel section B content*/\n contentB?: React.ReactNode | string;\n /** Panel button text */\n buttonText?: string;\n /** Panel button close text */\n buttonTextClose?: string;\n /** HTML markup for panel button. Default: a */\n buttonHtmlMarkup?: ButtonTags;\n /** Callback when panel button is clicked */\n buttonOnClick?: ButtonProps['onClick'];\n /** Panel button is aria-labelledby the text in the button itself + the element set in buttonAriaLabelledById. Default: auto-generated id for title (if title is set). */\n buttonAriaLabelledById?: string;\n /** Panel button aria label */\n buttonAriaLabel?: string;\n /** Show close button in bottom of Panel Expand */\n /** @deprecated Has no effect anymore due to accessbility reasons. No close button is shown in expanded content. Will be removed in 2.0.0 */\n showCloseButtonInExpand?: boolean;\n /** Layout (see description) */\n layout?: keyof typeof PanelLayout;\n /** Clicking anywhere on the container will trigger a click on the panel's button */\n containerAsButton?: boolean;\n /** Displays time with icon */\n time?: string;\n /** Displays date with icon */\n date?: string;\n /** Removes top border when variant is \"line\" */\n noTopBorder?: boolean;\n /** Opens or closes the panel */\n expanded?: boolean;\n /** Called when panel is open/closed. */\n onExpand?: (isExpanded: boolean) => void;\n /** Whether to render children when closed (in which case they are hidden with CSS). Default: false */\n renderChildrenWhenClosed?: boolean;\n}\n\nconst StatusText: React.FC<{ status?: keyof typeof PanelStatus; statusMessage?: string }> = ({ status, statusMessage }) => {\n const statusIcon = (): { color: string; svgIcon: React.FC<SvgPathProps> } => {\n if (status === PanelStatus.error) {\n return { color: palette.cherry500, svgIcon: AlertSignFill };\n }\n\n return { color: palette.black, svgIcon: Pencil };\n };\n\n const statusMessageClass = classNames(panelStyles['status-message'], {\n [panelStyles['status-message--new']]: status === PanelStatus.new,\n });\n\n if ((status === PanelStatus.error || status === PanelStatus.draft) && statusMessage) {\n return (\n <div className={statusMessageClass} data-testid=\"display-status\">\n {<Icon {...statusIcon()} size={IconSize.XSmall} />} <span>{statusMessage}</span>\n </div>\n );\n }\n\n return null;\n};\n\nconst DateTime: React.FC<{ date?: string; time?: string }> = ({ date, time }) => {\n if (date || time) {\n return (\n <div className={panelStyles['datetime-container']} data-testid=\"datetime\">\n {date && (\n <div className={panelStyles['datetime-container__icon']}>\n <Icon svgIcon={Calendar} size={IconSize.XSmall} />\n <span>{date}</span>\n </div>\n )}\n {time && (\n <div className={panelStyles['datetime-container__icon']}>\n <Icon svgIcon={Watch} size={IconSize.XSmall} />\n <span>{time}</span>\n </div>\n )}\n </div>\n );\n }\n\n return null;\n};\n\nconst Panel = React.forwardRef(function PanelForwardedRef(props: PanelProps, ref: React.ForwardedRef<HTMLHeadingElement>) {\n const {\n children,\n contentA,\n contentB,\n className,\n testId,\n title,\n titleHtmlMarkup = 'h2',\n url,\n target = '_self',\n icon,\n iconRight = false,\n variant = PanelVariant.fill,\n status = PanelStatus.normal,\n statusMessage,\n buttonText = 'Se detaljer',\n buttonTextClose = 'Skjul detaljer',\n buttonAriaLabelledById,\n buttonAriaLabel,\n layout = PanelLayout.layout2,\n containerAsButton = false,\n date,\n time,\n noTopBorder,\n buttonOnClick,\n buttonHtmlMarkup = 'a',\n expanded = false,\n onExpand,\n renderChildrenWhenClosed = false,\n } = props;\n\n const [isExpanded, setIsExpanded] = useState<boolean>(expanded);\n const previousIsExpanded = usePrevious(isExpanded);\n const titleId = useUuid();\n const buttonTextId = useUuid();\n const breakpoint = useBreakpoint();\n const hasBadge = statusMessage && status === PanelStatus.new;\n\n useEffect(() => {\n if (expanded !== isExpanded) {\n setIsExpanded(expanded);\n }\n }, [expanded]);\n\n useEffect(() => {\n if (onExpand && isExpanded !== !!previousIsExpanded) {\n onExpand(isExpanded);\n }\n }, [isExpanded, onExpand]);\n\n const layout3 = [PanelLayout.layout3a.toString(), PanelLayout.layout3b.toString(), PanelLayout.layout3c.toString()].includes(layout);\n\n const panelWrapperClass = classNames(panelStyles['panel-wrapper'], className);\n\n const panelClasses = classNames(panelStyles.panel, {\n [panelStyles['panel--fill']]: variant === PanelVariant.fill,\n [panelStyles['panel--stroke']]: variant === PanelVariant.stroke,\n [panelStyles['panel--white']]: variant === PanelVariant.white,\n [panelStyles['panel--line']]: variant === PanelVariant.line,\n [panelStyles['panel--no-top-border']]: variant === PanelVariant.line && noTopBorder,\n [panelStyles['panel--selected']]: isExpanded,\n [panelStyles['panel--new']]: status === PanelStatus.new,\n [panelStyles['panel--draft']]: status === PanelStatus.draft,\n [panelStyles['panel--error']]: status === PanelStatus.error,\n [panelStyles['panel--status']]: status && status !== PanelStatus.normal,\n [panelStyles['panel--with-icon']]: icon,\n [panelStyles['panel--button']]: containerAsButton,\n [panelStyles['panel--clickable']]: children || url || onExpand || buttonOnClick || containerAsButton,\n });\n\n const panelContainer = classNames({\n [panelStyles['panel__container']]: layout === PanelLayout.layout2 && contentB,\n [panelStyles['panel__container--layout3']]: layout3 && contentB,\n [panelStyles['panel__container--grow']]: icon,\n });\n\n const panelContentLeftClass = classNames({\n [panelStyles['panel-content-a']]: layout === PanelLayout.layout2,\n [panelStyles['panel-content-a--layout3a']]: layout === PanelLayout.layout3a,\n [panelStyles['panel-content-a--layout3b']]: layout === PanelLayout.layout3b,\n [panelStyles['panel-content-a--layout3c']]: layout === PanelLayout.layout3c,\n });\n\n const panelContentRightClass = classNames({\n [panelStyles['panel__content-right--layout1']]: contentB && layout === PanelLayout.layout1,\n [panelStyles['panel__content-right--layout2']]: contentB && layout === PanelLayout.layout2,\n [panelStyles['panel__content-right--layout3']]: contentB && layout3,\n [panelStyles['panel__content-right--layout3a']]: contentB && layout === PanelLayout.layout3a,\n [panelStyles['panel__content-right--layout3b']]: contentB && layout === PanelLayout.layout3b,\n [panelStyles['panel__content-right--layout3c']]: contentB && layout === PanelLayout.layout3c,\n });\n\n const panelContentBClass = classNames(panelStyles['panel-content-b'], {\n [panelStyles['panel-content-b--layout1']]: layout === PanelLayout.layout1,\n [panelStyles['panel-content-b--layout3']]: layout3,\n });\n\n const panelActionBtnClass = classNames(panelStyles['panel__details-btn']);\n const titleClasses = classNames(panelStyles['panel-content-a__title'], { [panelStyles['panel-content-a__title--badge']]: hasBadge });\n\n const renderDetailsButton = (): JSX.Element => {\n const ariaLabelAttributes = getAriaLabelAttributes({\n label: buttonAriaLabel,\n id: (buttonAriaLabelledById && `${buttonTextId} ${buttonAriaLabelledById}`) || (title && titleId && `${buttonTextId} ${titleId}`),\n prefer: 'label',\n });\n\n const commonProps: Partial<ButtonProps> & AriaLabelAttributes = {\n onClick: buttonOnClick ? buttonOnClick : () => setIsExpanded(!isExpanded),\n className: containerAsButton ? panelStyles['panel__expand'] : undefined,\n variant: 'borderless',\n ellipsis: true,\n ...ariaLabelAttributes,\n };\n\n if (!!children) {\n return (\n <Button testId=\"expand\" aria-expanded={isExpanded} {...commonProps}>\n <span id={buttonTextId}>{isExpanded ? buttonTextClose : buttonText}</span>\n <Icon svgIcon={isExpanded ? ChevronUp : ChevronDown} />\n </Button>\n );\n }\n\n return (\n <Button testId=\"url\" htmlMarkup={buttonHtmlMarkup} href={url} target={target} {...commonProps}>\n <span id={buttonTextId}>{buttonText}</span>\n <Icon svgIcon={ArrowRight} />\n </Button>\n );\n };\n\n const btnContainerClass = classNames(panelStyles['panel__btn-container'], {\n [panelStyles['panel__btn-container--layout3']]: layout3,\n [panelStyles['panel__btn-container--padding-top']]: contentB,\n });\n\n const renderContent = () => {\n if (!children) {\n return null;\n }\n if (!renderChildrenWhenClosed && !isExpanded) {\n return null;\n }\n\n const panelDetailsClasses = classNames(panelStyles['panel-details'], {\n [panelStyles['panel-details--open']]: isExpanded,\n [panelStyles['panel-details--line']]: variant === PanelVariant.line,\n [panelStyles['panel-details--white']]: variant === PanelVariant.white,\n [panelStyles['panel-details--with-icon']]: icon,\n });\n\n return (\n <div className={panelDetailsClasses} data-testid=\"panel-details\">\n <div>{children}</div>\n </div>\n );\n };\n\n return (\n <div ref={ref} data-testid={testId} className={panelWrapperClass} data-analyticsid={AnalyticsId.Panel}>\n <div className={panelClasses}>\n {icon && !iconRight && <div className={panelStyles.panel__icon}>{icon}</div>}\n <div className={panelContainer}>\n <div className={panelContentLeftClass}>\n <StatusText status={status} statusMessage={statusMessage} />\n {title && (\n <div className={panelStyles['panel-content-a__title-container']}>\n <Title appearance=\"title3\" htmlMarkup={titleHtmlMarkup} id={titleId} className={titleClasses}>\n {title}\n </Title>\n {hasBadge && (\n <div className={panelStyles.panel__badge}>\n <Badge color=\"blueberry\" testId=\"badge-status\">\n {statusMessage}\n </Badge>\n </div>\n )}\n </div>\n )}\n {contentA}\n {breakpoint >= Breakpoint.lg && <DateTime date={date} time={time} />}\n </div>\n <div className={panelContentRightClass}>\n {contentB && <div className={panelContentBClass}>{contentB}</div>}\n {(children || url || date || time || buttonOnClick) && (\n <div className={btnContainerClass}>\n {breakpoint < Breakpoint.lg && <DateTime date={date} time={time} />}\n {(children || url || buttonOnClick) && <div className={panelActionBtnClass}>{renderDetailsButton()}</div>}\n </div>\n )}\n </div>\n </div>\n {icon && iconRight && <div className={panelStyles['panel__icon--right']}>{icon}</div>}\n </div>\n {renderContent()}\n </div>\n );\n});\n\nexport default Panel;\n"],"names":["PanelStatus","PanelVariant","PanelLayout","StatusText","status","statusMessage","statusIcon","palette","AlertSignFill","Pencil","statusMessageClass","classNames","panelStyles","React","Icon","IconSize","DateTime","date","time","Calendar","Watch","Panel","props","ref","children","contentA","contentB","className","testId","title","titleHtmlMarkup","url","target","icon","iconRight","variant","buttonText","buttonTextClose","buttonAriaLabelledById","buttonAriaLabel","layout","containerAsButton","noTopBorder","buttonOnClick","buttonHtmlMarkup","expanded","onExpand","renderChildrenWhenClosed","isExpanded","setIsExpanded","useState","previousIsExpanded","usePrevious","titleId","useUuid","buttonTextId","breakpoint","useBreakpoint","hasBadge","useEffect","layout3","panelWrapperClass","panelClasses","panelContainer","panelContentLeftClass","panelContentRightClass","panelContentBClass","panelActionBtnClass","titleClasses","renderDetailsButton","ariaLabelAttributes","getAriaLabelAttributes","commonProps","Button","ChevronUp","ChevronDown","ArrowRight","btnContainerClass","renderContent","panelDetailsClasses","AnalyticsId","Title","Badge","Breakpoint"],"mappings":"67BAuBY,IAAAA,IAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAJEA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,KAAO,OAJGA,IAAAA,IAAA,CAAA,CAAA,EAOAC,IAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,SAAW,WALDA,IAAAA,IAAA,CAAA,CAAA,EAqEZ,MAAMC,GAAsF,CAAC,CAAE,OAAAC,EAAQ,cAAAC,KAAoB,CACzH,MAAMC,EAAa,IACbF,IAAW,QACN,CAAE,MAAOG,EAAQ,UAAW,QAASC,EAAc,EAGrD,CAAE,MAAOD,EAAQ,MAAO,QAASE,EAAO,EAG3CC,EAAqBC,EAAWC,EAAY,kBAAmB,CACnE,CAACA,EAAY,wBAAyBR,IAAW,KAAA,CAClD,EAED,OAAKA,IAAW,SAAqBA,IAAW,UAAsBC,EAEjEQ,EAAA,cAAA,MAAA,CAAI,UAAWH,EAAoB,cAAY,gBAAA,EAC5CG,EAAA,cAAAC,EAAA,CAAM,GAAGR,EAAW,EAAG,KAAMS,EAAS,MAAA,CAAQ,EAAG,IAAEF,EAAA,cAAA,OAAA,KAAMR,CAAc,CAC3E,EAIG,IACT,EAEMW,EAAuD,CAAC,CAAE,KAAAC,EAAM,KAAAC,KAChED,GAAQC,EAEPL,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,sBAAuB,cAAY,UAAA,EAC5DK,GACEJ,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,2BAAA,EACzBC,EAAA,cAAAC,EAAA,CAAK,QAASK,GAAU,KAAMJ,EAAS,MAAQ,CAAA,EAC/CF,EAAA,cAAA,OAAA,KAAMI,CAAK,CACd,EAEDC,GACEL,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,2BAAA,EACzBC,EAAA,cAAAC,EAAA,CAAK,QAASM,GAAO,KAAML,EAAS,MAAA,CAAQ,EAC7CF,EAAA,cAAC,OAAM,KAAAK,CAAK,CACd,CAEJ,EAIG,KAGHG,GAAQR,EAAM,WAAW,SAA2BS,EAAmBC,EAA6C,CAClH,KAAA,CACJ,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,OAAAC,EACA,MAAAC,EACA,gBAAAC,EAAkB,KAClB,IAAAC,EACA,OAAAC,EAAS,QACT,KAAAC,EACA,UAAAC,EAAY,GACZ,QAAAC,EAAU,OACV,OAAA/B,EAAS,SACT,cAAAC,EACA,WAAA+B,EAAa,cACb,gBAAAC,EAAkB,iBAClB,uBAAAC,EACA,gBAAAC,EACA,OAAAC,EAAS,UACT,kBAAAC,EAAoB,GACpB,KAAAxB,EACA,KAAAC,EACA,YAAAwB,EACA,cAAAC,EACA,iBAAAC,EAAmB,IACnB,SAAAC,EAAW,GACX,SAAAC,EACA,yBAAAC,EAA2B,EACzB,EAAAzB,EAEE,CAAC0B,EAAYC,CAAa,EAAIC,GAAkBL,CAAQ,EACxDM,EAAqBC,GAAYJ,CAAU,EAC3CK,EAAUC,IACVC,EAAeD,IACfE,EAAaC,KACbC,EAAWrD,GAAiBD,IAAW,MAE7CuD,EAAU,IAAM,CACVd,IAAaG,GACfC,EAAcJ,CAAQ,CACxB,EACC,CAACA,CAAQ,CAAC,EAEbc,EAAU,IAAM,CACVb,GAAYE,IAAe,CAAC,CAACG,GAC/BL,EAASE,CAAU,CACrB,EACC,CAACA,EAAYF,CAAQ,CAAC,EAEzB,MAAMc,EAAU,CAAC,WAAqB,SAAA,EAAY,WAAqB,WAAY,WAAqB,SAAU,CAAA,EAAE,SAASpB,CAAM,EAE7HqB,EAAoBlD,EAAWC,EAAY,iBAAkBe,CAAS,EAEtEmC,EAAenD,EAAWC,EAAY,MAAO,CACjD,CAACA,EAAY,gBAAiBuB,IAAY,OAC1C,CAACvB,EAAY,kBAAmBuB,IAAY,SAC5C,CAACvB,EAAY,iBAAkBuB,IAAY,QAC3C,CAACvB,EAAY,gBAAiBuB,IAAY,OAC1C,CAACvB,EAAY,yBAA0BuB,IAAY,QAAqBO,EACxE,CAAC9B,EAAY,oBAAqBoC,EAClC,CAACpC,EAAY,eAAgBR,IAAW,MACxC,CAACQ,EAAY,iBAAkBR,IAAW,QAC1C,CAACQ,EAAY,iBAAkBR,IAAW,QAC1C,CAACQ,EAAY,kBAAmBR,GAAUA,IAAW,SACrD,CAACQ,EAAY,qBAAsBqB,EACnC,CAACrB,EAAY,kBAAmB6B,EAChC,CAAC7B,EAAY,qBAAsBY,GAAYO,GAAOe,GAAYH,GAAiBF,CAAA,CACpF,EAEKsB,GAAiBpD,EAAW,CAChC,CAACC,EAAY,kBAAsB4B,IAAW,WAAuBd,EACrE,CAACd,EAAY,8BAA+BgD,GAAWlC,EACvD,CAACd,EAAY,2BAA4BqB,CAAA,CAC1C,EAEK+B,GAAwBrD,EAAW,CACvC,CAACC,EAAY,oBAAqB4B,IAAW,UAC7C,CAAC5B,EAAY,8BAA+B4B,IAAW,WACvD,CAAC5B,EAAY,8BAA+B4B,IAAW,WACvD,CAAC5B,EAAY,8BAA+B4B,IAAW,UAAA,CACxD,EAEKyB,GAAyBtD,EAAW,CACxC,CAACC,EAAY,kCAAmCc,GAAYc,IAAW,UACvE,CAAC5B,EAAY,kCAAmCc,GAAYc,IAAW,UACvE,CAAC5B,EAAY,kCAAmCc,GAAYkC,EAC5D,CAAChD,EAAY,mCAAoCc,GAAYc,IAAW,WACxE,CAAC5B,EAAY,mCAAoCc,GAAYc,IAAW,WACxE,CAAC5B,EAAY,mCAAoCc,GAAYc,IAAW,UAAA,CACzE,EAEK0B,GAAqBvD,EAAWC,EAAY,mBAAoB,CACpE,CAACA,EAAY,6BAA8B4B,IAAW,UACtD,CAAC5B,EAAY,6BAA8BgD,CAAA,CAC5C,EAEKO,GAAsBxD,EAAWC,EAAY,qBAAqB,EAClEwD,GAAezD,EAAWC,EAAY,0BAA2B,CAAE,CAACA,EAAY,kCAAmC8C,CAAA,CAAU,EAE7HW,GAAsB,IAAmB,CAC7C,MAAMC,EAAsBC,GAAuB,CACjD,MAAOhC,EACP,GAAKD,GAA0B,GAAGiB,KAAgBjB,KAA8BT,GAASwB,GAAW,GAAGE,KAAgBF,IACvH,OAAQ,OAAA,CACT,EAEKmB,EAA0D,CAC9D,QAAS7B,IAAgC,IAAMM,EAAc,CAACD,CAAU,GACxE,UAAWP,EAAoB7B,EAAY,cAAmB,OAC9D,QAAS,aACT,SAAU,GACV,GAAG0D,CAAA,EAGD,OAAE9C,EAEDX,EAAA,cAAA4D,EAAA,CAAO,OAAO,SAAS,gBAAezB,EAAa,GAAGwB,CAAA,EACpD3D,EAAA,cAAA,OAAA,CAAK,GAAI0C,CAAA,EAAeP,EAAaX,EAAkBD,CAAW,EAClEvB,EAAA,cAAAC,EAAA,CAAK,QAASkC,EAAa0B,GAAYC,EAAa,CAAA,CACvD,EAKD9D,EAAA,cAAA4D,EAAA,CAAO,OAAO,MAAM,WAAY7B,EAAkB,KAAMb,EAAK,OAAAC,EAAiB,GAAGwC,CAAA,EAC/E3D,EAAA,cAAA,OAAA,CAAK,GAAI0C,CAAe,EAAAnB,CAAW,EACnCvB,EAAA,cAAAC,EAAA,CAAK,QAAS8D,EAAY,CAAA,CAC7B,CAAA,EAIEC,GAAoBlE,EAAWC,EAAY,wBAAyB,CACxE,CAACA,EAAY,kCAAmCgD,EAChD,CAAChD,EAAY,sCAAuCc,CAAA,CACrD,EAEKoD,GAAgB,IAAM,CAItB,GAHA,CAACtD,GAGD,CAACuB,GAA4B,CAACC,EACzB,OAAA,KAGH,MAAA+B,EAAsBpE,EAAWC,EAAY,iBAAkB,CACnE,CAACA,EAAY,wBAAyBoC,EACtC,CAACpC,EAAY,wBAAyBuB,IAAY,OAClD,CAACvB,EAAY,yBAA0BuB,IAAY,QACnD,CAACvB,EAAY,6BAA8BqB,CAAA,CAC5C,EAED,OACGpB,EAAA,cAAA,MAAA,CAAI,UAAWkE,EAAqB,cAAY,eAAA,EAC/ClE,EAAA,cAAC,MAAK,KAAAW,CAAS,CACjB,CAAA,EAIJ,OACGX,EAAA,cAAA,MAAA,CAAI,IAAAU,EAAU,cAAaK,EAAQ,UAAWiC,EAAmB,mBAAkBmB,GAAY,KAAA,EAC7FnE,EAAA,cAAA,MAAA,CAAI,UAAWiD,CACb,EAAA7B,GAAQ,CAACC,GAAcrB,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,WAAc,EAAAqB,CAAK,EACrEpB,EAAA,cAAA,MAAA,CAAI,UAAWkD,EAAA,EACblD,EAAA,cAAA,MAAA,CAAI,UAAWmD,EAAA,EACbnD,EAAA,cAAAV,GAAA,CAAW,OAAAC,EAAgB,cAAAC,CAA8B,CAAA,EACzDwB,GACEhB,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,mCAAA,EACzBC,EAAA,cAAAoE,GAAA,CAAM,WAAW,SAAS,WAAYnD,EAAiB,GAAIuB,EAAS,UAAWe,EAC7E,EAAAvC,CACH,EACC6B,GACE7C,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,YAAA,EACzBC,EAAA,cAAAqE,GAAA,CAAM,MAAM,YAAY,OAAO,cAAA,EAC7B7E,CACH,CACF,CAEJ,EAEDoB,EACA+B,GAAc2B,EAAW,IAAOtE,EAAA,cAAAG,EAAA,CAAS,KAAAC,EAAY,KAAAC,CAAY,CAAA,CACpE,EACCL,EAAA,cAAA,MAAA,CAAI,UAAWoD,EAAA,EACbvC,GAAab,EAAA,cAAA,MAAA,CAAI,UAAWqD,EAAA,EAAqBxC,CAAS,GACzDF,GAAYO,GAAOd,GAAQC,GAAQyB,IAClC9B,EAAA,cAAA,MAAA,CAAI,UAAWgE,EAAA,EACbrB,EAAa2B,EAAW,IAAOtE,EAAA,cAAAG,EAAA,CAAS,KAAAC,EAAY,KAAAC,CAAA,CAAY,GAC/DM,GAAYO,GAAOY,IAAmB9B,EAAA,cAAA,MAAA,CAAI,UAAWsD,EAAA,EAAsBE,GAAA,CAAsB,CACrG,CAEJ,CACF,EACCpC,GAAQC,GAAcrB,EAAA,cAAA,MAAA,CAAI,UAAWD,EAAY,qBAAA,EAAwBqB,CAAK,CACjF,EACC6C,GAAA,CACH,CAEJ,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TitleProps } from '../Title';
|
|
3
3
|
export declare type DuolistVariants = 'normal' | 'line';
|
|
4
|
-
export declare type BoldColumn = 'first' | 'second';
|
|
4
|
+
export declare type BoldColumn = 'first' | 'second' | 'none';
|
|
5
5
|
export declare type Border = 'no-border' | 'border';
|
|
6
|
+
export declare type Formats = 'formatted' | 'non-formatted';
|
|
6
7
|
interface DuolistProps {
|
|
7
8
|
/** Determines which column is bold */
|
|
8
9
|
boldColumn?: BoldColumn;
|
|
@@ -10,6 +11,10 @@ interface DuolistProps {
|
|
|
10
11
|
border?: Border;
|
|
11
12
|
/** Label of the Duolist */
|
|
12
13
|
label?: TitleProps;
|
|
14
|
+
/** Formatted or non-formatted visual variants */
|
|
15
|
+
format?: Formats;
|
|
16
|
+
/** Character separator for non-formatted format */
|
|
17
|
+
separator?: string;
|
|
13
18
|
/** Sets the visual variant of the Duolist. */
|
|
14
19
|
variant?: DuolistVariants;
|
|
15
20
|
/** Sets the content of the Duolist. */
|
|
@@ -26,6 +31,10 @@ interface DuolistGroupProps {
|
|
|
26
31
|
boldColumn?: BoldColumn;
|
|
27
32
|
/** Sets content of the <dd> tag. */
|
|
28
33
|
description: React.ReactNode;
|
|
34
|
+
/** Formatted or non-formatted visual variants */
|
|
35
|
+
format?: Formats;
|
|
36
|
+
/** Character separator for non-formatted format */
|
|
37
|
+
separator?: string;
|
|
29
38
|
/** Sets content of the <dt> tag. */
|
|
30
39
|
term: React.ReactNode;
|
|
31
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Duolist.d.ts","sourceRoot":"","sources":["../../../src/components/Duolist/Duolist.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,oBAAY,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChD,oBAAY,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"Duolist.d.ts","sourceRoot":"","sources":["../../../src/components/Duolist/Duolist.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,oBAAY,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChD,oBAAY,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AACrD,oBAAY,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC5C,oBAAY,OAAO,GAAG,WAAW,GAAG,eAAe,CAAC;AAEpD,UAAU,YAAY;IACpB,sCAAsC;IACtC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,iBAAiB;IACzB,sCAAsC;IACtC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oCAAoC;IACpC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4BpD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyD1C,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"props":{"boldColumn":{"defaultValue":null,"description":"Determines which column is bold","name":"boldColumn","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":false,"type":{"name":"enum","raw":"BoldColumn","value":[{"value":"\"first\""},{"value":"\"second\""}]}},"description":{"defaultValue":null,"description":"Sets content of the <dd> tag.","name":"description","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":true,"type":{"name":"ReactNode"}},"term":{"defaultValue":null,"description":"Sets content of the <dt> tag.","name":"term","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":true,"type":{"name":"ReactNode"}}}}
|
|
1
|
+
{"props":{"boldColumn":{"defaultValue":null,"description":"Determines which column is bold","name":"boldColumn","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":false,"type":{"name":"enum","raw":"BoldColumn","value":[{"value":"\"first\""},{"value":"\"second\""},{"value":"\"none\""}]}},"description":{"defaultValue":null,"description":"Sets content of the <dd> tag.","name":"description","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":true,"type":{"name":"ReactNode"}},"format":{"defaultValue":null,"description":"Formatted or non-formatted visual variants","name":"format","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":false,"type":{"name":"enum","raw":"Formats","value":[{"value":"\"formatted\""},{"value":"\"non-formatted\""}]}},"separator":{"defaultValue":null,"description":"Character separator for non-formatted format","name":"separator","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":false,"type":{"name":"string"}},"term":{"defaultValue":null,"description":"Sets content of the <dt> tag.","name":"term","parent":{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"},"declarations":[{"fileName":"src/components/Duolist/Duolist.tsx","name":"DuolistGroupProps"}],"required":true,"type":{"name":"ReactNode"}}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t from"react";import
|
|
1
|
+
import t from"react";import c from"classnames";import o from"./styles.module.scss";import{AnalyticsId as S}from"../../constants.js";import{S as B}from"../../Spacer.js";import"../Spacer/styles.module.scss";const D=u=>{const{format:n="formatted",boldColumn:a=n==="non-formatted"?"none":"first",description:d,separator:r=": ",term:l}=u,p=a==="first",f=a==="second",e=n==="non-formatted",_=c(o.duolist__dt,{[o["duolist__dt--bold"]]:p,[o["duolist__dt--non-formatted"]]:e}),C=c(o.duolist__dd,{[o["duolist__dd--bold"]]:f,[o["duolist__dd--non-formatted"]]:e}),s=()=>t.createElement(t.Fragment,null,t.createElement("dt",{"data-separator":e?r:void 0,className:_},l),t.createElement("dd",{className:C},d));return e?t.createElement("div",{className:o["duolist__content-wrapper"]},s()):t.createElement(t.Fragment,null,s())},L=u=>{const{boldColumn:n,border:a="no-border",descriptionWidth:d,label:r,format:l="formatted",separator:p,variant:f="normal",children:e,className:_,testId:C}=u,s=a==="border",b=f==="line",v=s&&(r||b),E=l==="non-formatted",F=c(o["duolist-wrapper"],{[o["duolist-wrapper--border"]]:s,[o["duolist-wrapper--extra-padding-top"]]:v},_),w=c(o.duolist,{[o["duolist--line"]]:b,[o["duolist--non-formatted"]]:E}),x=d?d+"%":"minmax(60%, 1fr)";return t.createElement("div",{className:F,"data-testid":C,"data-analyticsid":S.Duolist},r&&t.createElement(t.Fragment,null,r,t.createElement(B,null)),t.createElement("dl",{style:E?void 0:{gridTemplateColumns:`auto ${x}`},className:w},t.Children.map(e,m=>{var N,y,g;if(m===null||typeof m>"u")return;const i=m;if(i.type===D)return t.cloneElement(m,{boldColumn:(N=i.props.boldColumn)!=null?N:n,format:(y=i.props.format)!=null?y:l,separator:(g=i.props.separator)!=null?g:p})})))};export{L as Duolist,D as DuolistGroup,L as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Duolist/Duolist.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\n\nimport duolistStyles from './styles.module.scss';\nimport { AnalyticsId } from '../../constants';\nimport { TitleProps } from '../Title';\nimport Spacer from '../Spacer';\n\nexport type DuolistVariants = 'normal' | 'line';\nexport type BoldColumn = 'first' | 'second';\nexport type Border = 'no-border' | 'border';\n\ninterface DuolistProps {\n /** Determines which column is bold */\n boldColumn?: BoldColumn;\n /** Label of the Duolist */\n border?: Border;\n /** Label of the Duolist */\n label?: TitleProps;\n /** Sets the visual variant of the Duolist. */\n variant?: DuolistVariants;\n /** Sets the content of the Duolist. */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Width of the description column in percentage */\n descriptionWidth?: number;\n}\n\ninterface DuolistGroupProps {\n /** Determines which column is bold */\n boldColumn?: BoldColumn;\n /** Sets content of the <dd> tag. */\n description: React.ReactNode;\n /** Sets content of the <dt> tag. */\n term: React.ReactNode;\n}\n\nexport const DuolistGroup: React.FC<DuolistGroupProps> = props => {\n const { boldColumn = 'first', description, term } = props;\n\n const firstBold = boldColumn === 'first';\n\n const dtClassNames = classNames(duolistStyles['duolist__dt'], {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Duolist/Duolist.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\n\nimport duolistStyles from './styles.module.scss';\nimport { AnalyticsId } from '../../constants';\nimport { TitleProps } from '../Title';\nimport Spacer from '../Spacer';\n\nexport type DuolistVariants = 'normal' | 'line';\nexport type BoldColumn = 'first' | 'second' | 'none';\nexport type Border = 'no-border' | 'border';\nexport type Formats = 'formatted' | 'non-formatted';\n\ninterface DuolistProps {\n /** Determines which column is bold */\n boldColumn?: BoldColumn;\n /** Label of the Duolist */\n border?: Border;\n /** Label of the Duolist */\n label?: TitleProps;\n /** Formatted or non-formatted visual variants */\n format?: Formats;\n /** Character separator for non-formatted format */\n separator?: string;\n /** Sets the visual variant of the Duolist. */\n variant?: DuolistVariants;\n /** Sets the content of the Duolist. */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Width of the description column in percentage */\n descriptionWidth?: number;\n}\n\ninterface DuolistGroupProps {\n /** Determines which column is bold */\n boldColumn?: BoldColumn;\n /** Sets content of the <dd> tag. */\n description: React.ReactNode;\n /** Formatted or non-formatted visual variants */\n format?: Formats;\n /** Character separator for non-formatted format */\n separator?: string;\n /** Sets content of the <dt> tag. */\n term: React.ReactNode;\n}\n\nexport const DuolistGroup: React.FC<DuolistGroupProps> = props => {\n const { format = 'formatted', boldColumn = format === 'non-formatted' ? 'none' : 'first', description, separator = ': ', term } = props;\n\n const firstBold = boldColumn === 'first';\n const secondBold = boldColumn === 'second';\n const nonFormatted = format === 'non-formatted';\n\n const dtClassNames = classNames(duolistStyles['duolist__dt'], {\n [duolistStyles['duolist__dt--bold']]: firstBold,\n [duolistStyles['duolist__dt--non-formatted']]: nonFormatted,\n });\n const ddClassNames = classNames(duolistStyles['duolist__dd'], {\n [duolistStyles['duolist__dd--bold']]: secondBold,\n [duolistStyles['duolist__dd--non-formatted']]: nonFormatted,\n });\n\n const renderContent = () => {\n return (\n <>\n <dt data-separator={nonFormatted ? separator : undefined} className={dtClassNames}>\n {term}\n </dt>\n <dd className={ddClassNames}>{description}</dd>\n </>\n );\n };\n\n return nonFormatted ? <div className={duolistStyles['duolist__content-wrapper']}>{renderContent()}</div> : <>{renderContent()}</>;\n};\n\nexport const Duolist: React.FC<DuolistProps> = props => {\n const {\n boldColumn,\n border = 'no-border',\n descriptionWidth,\n label,\n format = 'formatted',\n separator,\n variant = 'normal',\n children,\n className,\n testId,\n } = props;\n\n const hasBorder = border === 'border';\n const hasLines = variant === 'line';\n const extraPaddingTop = hasBorder && (label || hasLines);\n const nonFormatted = format === 'non-formatted';\n\n const duolistWrapperClasses = classNames(\n duolistStyles['duolist-wrapper'],\n {\n [duolistStyles['duolist-wrapper--border']]: hasBorder,\n [duolistStyles['duolist-wrapper--extra-padding-top']]: extraPaddingTop,\n },\n className\n );\n\n const duolistClasses = classNames(duolistStyles.duolist, {\n [duolistStyles['duolist--line']]: hasLines,\n [duolistStyles['duolist--non-formatted']]: nonFormatted,\n });\n const duolistColumnStyle = descriptionWidth ? descriptionWidth + '%' : 'minmax(60%, 1fr)';\n\n return (\n <div className={duolistWrapperClasses} data-testid={testId} data-analyticsid={AnalyticsId.Duolist}>\n {label && (\n <>\n {label}\n <Spacer />\n </>\n )}\n <dl style={!nonFormatted ? { gridTemplateColumns: `auto ${duolistColumnStyle}` } : undefined} className={duolistClasses}>\n {React.Children.map(children, (child: React.ReactNode | React.ReactElement<DuolistGroupProps>) => {\n if (child === null || typeof child === 'undefined') return;\n const duolistGroup = child as React.ReactElement<DuolistGroupProps>;\n if (duolistGroup.type === DuolistGroup) {\n return React.cloneElement(child as React.ReactElement<DuolistGroupProps>, {\n boldColumn: duolistGroup.props.boldColumn ?? boldColumn,\n format: duolistGroup.props.format ?? format,\n separator: duolistGroup.props.separator ?? separator,\n });\n }\n })}\n </dl>\n </div>\n );\n};\n\nexport default Duolist;\n"],"names":["DuolistGroup","props","format","boldColumn","description","separator","term","firstBold","secondBold","nonFormatted","dtClassNames","classNames","duolistStyles","ddClassNames","renderContent","React","Duolist","border","descriptionWidth","label","variant","children","className","testId","hasBorder","hasLines","extraPaddingTop","duolistWrapperClasses","duolistClasses","duolistColumnStyle","AnalyticsId","Spacer","child","duolistGroup","_a","_b","_c"],"mappings":"6MAiDO,MAAMA,EAAqDC,GAAA,CAChE,KAAM,CAAE,OAAAC,EAAS,YAAa,WAAAC,EAAaD,IAAW,gBAAkB,OAAS,QAAS,YAAAE,EAAa,UAAAC,EAAY,KAAM,KAAAC,CAAA,EAASL,EAE5HM,EAAYJ,IAAe,QAC3BK,EAAaL,IAAe,SAC5BM,EAAeP,IAAW,gBAE1BQ,EAAeC,EAAWC,EAAc,YAAgB,CAC5D,CAACA,EAAc,sBAAuBL,EACtC,CAACK,EAAc,+BAAgCH,CAAA,CAChD,EACKI,EAAeF,EAAWC,EAAc,YAAgB,CAC5D,CAACA,EAAc,sBAAuBJ,EACtC,CAACI,EAAc,+BAAgCH,CAAA,CAChD,EAEKK,EAAgB,oCAGfC,EAAA,cAAA,KAAA,CAAG,iBAAgBN,EAAeJ,EAAY,OAAW,UAAWK,CAClE,EAAAJ,CACH,EACCS,EAAA,cAAA,KAAA,CAAG,UAAWF,CAAA,EAAeT,CAAY,CAC5C,EAIJ,OAAOK,EAAgBM,EAAA,cAAA,MAAA,CAAI,UAAWH,EAAc,2BAAA,EAA8BE,EAAc,CAAE,EAASC,EAAA,cAAAA,EAAA,SAAA,KAAGD,GAAgB,CAChI,EAEaE,EAA2Cf,GAAA,CAChD,KAAA,CACJ,WAAAE,EACA,OAAAc,EAAS,YACT,iBAAAC,EACA,MAAAC,EACA,OAAAjB,EAAS,YACT,UAAAG,EACA,QAAAe,EAAU,SACV,SAAAC,EACA,UAAAC,EACA,OAAAC,CACE,EAAAtB,EAEEuB,EAAYP,IAAW,SACvBQ,EAAWL,IAAY,OACvBM,EAAkBF,IAAcL,GAASM,GACzChB,EAAeP,IAAW,gBAE1ByB,EAAwBhB,EAC5BC,EAAc,mBACd,CACE,CAACA,EAAc,4BAA6BY,EAC5C,CAACZ,EAAc,uCAAwCc,CACzD,EACAJ,CAAA,EAGIM,EAAiBjB,EAAWC,EAAc,QAAS,CACvD,CAACA,EAAc,kBAAmBa,EAClC,CAACb,EAAc,2BAA4BH,CAAA,CAC5C,EACKoB,EAAqBX,EAAmBA,EAAmB,IAAM,mBAEvE,OACGH,EAAA,cAAA,MAAA,CAAI,UAAWY,EAAuB,cAAaJ,EAAQ,mBAAkBO,EAAY,OAAA,EACvFX,GAEIJ,EAAA,cAAAA,EAAA,SAAA,KAAAI,kBACAY,EAAO,IAAA,CACV,EAEDhB,EAAA,cAAA,KAAA,CAAG,MAAQN,EAAuE,OAAxD,CAAE,oBAAqB,QAAQoB,GAAyB,EAAW,UAAWD,CAAA,EACtGb,EAAM,SAAS,IAAIM,EAAWW,GAAmE,WAC5F,GAAAA,IAAU,MAAQ,OAAOA,EAAU,IAAa,OACpD,MAAMC,EAAeD,EACjB,GAAAC,EAAa,OAASjC,EACjB,OAAAe,EAAM,aAAaiB,EAAgD,CACxE,YAAYE,EAAAD,EAAa,MAAM,aAAnB,KAAAC,EAAiC/B,EAC7C,QAAQgC,EAAAF,EAAa,MAAM,SAAnB,KAAAE,EAA6BjC,EACrC,WAAWkC,EAAAH,EAAa,MAAM,YAAnB,KAAAG,EAAgC/B,CAAA,CAC5C,CAEJ,CAAA,CACH,CACF,CAEJ"}
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
font-size: $font-size-md;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
&__content-wrapper {
|
|
27
|
+
display: inline-block;
|
|
28
|
+
}
|
|
29
|
+
|
|
26
30
|
&__dt,
|
|
27
31
|
&__dd {
|
|
28
32
|
line-height: $lineheight-size-md;
|
|
@@ -36,6 +40,10 @@
|
|
|
36
40
|
font-weight: 600;
|
|
37
41
|
line-height: $lineheight-size-sm;
|
|
38
42
|
}
|
|
43
|
+
|
|
44
|
+
&--non-formatted {
|
|
45
|
+
display: inline;
|
|
46
|
+
}
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
&__dt {
|
|
@@ -44,6 +52,14 @@
|
|
|
44
52
|
@media (min-width: map-get($grid-breakpoints, sm)) {
|
|
45
53
|
padding-right: 2.6669rem;
|
|
46
54
|
}
|
|
55
|
+
|
|
56
|
+
&--non-formatted {
|
|
57
|
+
padding-right: 0;
|
|
58
|
+
}
|
|
59
|
+
&--non-formatted#{&}::after {
|
|
60
|
+
content: attr(data-separator);
|
|
61
|
+
font-weight: 400;
|
|
62
|
+
}
|
|
47
63
|
}
|
|
48
64
|
|
|
49
65
|
&__dd {
|
|
@@ -61,4 +77,8 @@
|
|
|
61
77
|
border-bottom: 0.062rem solid $neutral200;
|
|
62
78
|
}
|
|
63
79
|
}
|
|
80
|
+
|
|
81
|
+
&--non-formatted {
|
|
82
|
+
display: unset;
|
|
83
|
+
}
|
|
64
84
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export type Styles = {
|
|
2
2
|
duolist: string;
|
|
3
|
+
'duolist__content-wrapper': string;
|
|
3
4
|
duolist__dd: string;
|
|
4
5
|
'duolist__dd--bold': string;
|
|
6
|
+
'duolist__dd--non-formatted': string;
|
|
5
7
|
duolist__dt: string;
|
|
6
8
|
'duolist__dt--bold': string;
|
|
9
|
+
'duolist__dt--non-formatted': string;
|
|
7
10
|
'duolist--line': string;
|
|
11
|
+
'duolist--non-formatted': string;
|
|
8
12
|
'duolist-wrapper--border': string;
|
|
9
13
|
'duolist-wrapper--extra-padding-top': string;
|
|
10
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logo.d.ts","sourceRoot":"","sources":["../../../src/components/Logo/Logo.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Logo.d.ts","sourceRoot":"","sources":["../../../src/components/Logo/Logo.tsx"],"names":[],"mappings":";AAKA,aAAK,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnC,UAAU,SAAS;IACjB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyDD,iBAAS,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAG3C;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"props":{"size":{"defaultValue":{"value":"300"},"description":"Changes the size of the logo.","name":"size","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"number"}},"className":{"defaultValue":{"value":""},"description":"Adds custom classes to the element.","name":"className","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"string"}},"color":{"defaultValue":{"value":"black"},"description":"Changes the color of the logo.","name":"color","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"enum","raw":"
|
|
1
|
+
{"props":{"size":{"defaultValue":{"value":"300"},"description":"Changes the size of the logo.","name":"size","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"number"}},"className":{"defaultValue":{"value":""},"description":"Adds custom classes to the element.","name":"className","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"string"}},"color":{"defaultValue":{"value":"black"},"description":"Changes the color of the logo.","name":"color","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"enum","raw":"LogoColor","value":[{"value":"\"black\""},{"value":"\"white\""}]}},"byline":{"defaultValue":null,"description":"Changes to the byline variant of the logo.","name":"byline","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"boolean"}},"testId":{"defaultValue":null,"description":"Sets the data-testid attribute.","name":"testId","parent":{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"},"declarations":[{"fileName":"src/components/Logo/Logo.tsx","name":"LogoProps"}],"required":false,"type":{"name":"string"}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Logo/Logo.tsx"],"sourcesContent":["import React from 'react';\nimport { AnalyticsId } from '../../constants';\nimport { getColor } from '../../theme/currys/color';\nimport { PaletteNames } from '../../theme/palette';\n\ntype LogoColor =
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Logo/Logo.tsx"],"sourcesContent":["import React from 'react';\nimport { AnalyticsId } from '../../constants';\nimport { getColor } from '../../theme/currys/color';\nimport { PaletteNames } from '../../theme/palette';\n\ntype LogoColor = 'black' | 'white';\n\ninterface LogoProps {\n /** Changes the size of the logo. */\n size?: number;\n /** Adds custom classes to the element. */\n className?: string;\n /**\tChanges the color of the logo. */\n color?: LogoColor;\n /** Changes to the byline variant of the logo. */\n byline?: boolean;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst Original = ({\n size = 300,\n color = 'black',\n className = '',\n testId,\n}: {\n size?: number;\n color?: LogoColor;\n className?: string;\n testId?: string;\n}): JSX.Element => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n role={'img'}\n aria-labelledby=\"logo-title\"\n viewBox=\"0 0 502 220\"\n className={className}\n data-testid={testId}\n data-analyticsid={AnalyticsId.Logo}\n >\n <title id={'logo-title'}>Helsenorge</title>\n <g fill={getColor(color, 500)}>\n <path d=\"M39.8 2.5v26.9H17V2.5H1v69.9h16V43.6h22.8v28.8h16.1V2.5zM250.3 58.6V2.5h-16v69.9h43.5V58.6zM142.9 122.5c-16.1 0-27.4 13.6-27.4 33.1s11.2 33.1 27.4 33.1 27.4-13.6 27.4-33.1-11.3-33.1-27.4-33.1zm19 33.1c0 11.9-5 25.9-19 25.9s-19-13.9-19-25.9c0-11.9 5-25.9 19-25.9s19 14 19 25.9zM501 40c0-19.1-11.1-32.4-27-32.4-16.4 0-27.4 13.3-27.4 33.1 0 19.5 11.5 33.1 28 33.1 12.2 0 21.4-6 24.7-16.2l.5-1.6h-8.3l-.3.7c-2.8 6.2-8.8 9.8-16.6 9.8-12.9 0-18.5-11.5-19.5-22.7H501V40zm-8.3-3.2h-37.6c1-10.8 6.5-21.9 18.9-21.9 13.2 0 18.3 12.6 18.7 21.9zM30.4 122.4c-10.8 0-16.6 6.7-19.5 11.8v-9.9H3.3v62.6h8.1v-31.4c0-8.4 4.4-25.7 18.1-25.7 14 0 15.9 12 15.9 25v32.1h8.1v-32.1c.1-16.1-2.7-32.4-23.1-32.4zM134.3 59V43H157V30h-22.7V15.9H165V2.5h-46.4v69.9h47.3V59zM466.7 173.4v-16h22.7v-13h-22.7v-14.1h30.7v-13.4H451v69.9h47.3v-13.4zM246.7 140.5v-16.3h-7.6v62.6h8.1v-37.6l27.3-19.6v-9zM393.5 120.6l-14.7 10.5c-4.4-5.6-11.2-8.7-18.8-8.7-13.6 0-23.6 9.8-23.6 23.3 0 10.6 6.2 19.1 16 22.2l-16 17.5c-4 4.6-5.7 8.3-5.7 12.7 0 12.6 11.1 20.7 28.2 20.7 16.9 0 28.3-8.3 28.3-20.7 0-12.5-11.1-20.6-28.3-20.6-1.7 0-3.9.2-5.6.5l8-9c12.9-.7 22.2-10.4 22.2-23.3 0-2.8-.4-5.5-1.2-7.8 0-.1-.1-.2-.1-.3l11.2-8.1v-8.9zm-34.4 64.2c12.1 0 20 5.2 20 13.4s-7.8 13.5-20 13.5c-12.1 0-19.9-5.3-19.9-13.5 0-7.8 8.3-13.4 19.9-13.4zm.9-23c-8.8 0-15.2-6.8-15.2-16 0-9.3 6.4-16 15.2-16s15.2 6.7 15.2 16c0 9.2-6.4 16-15.2 16zM366.7 30.3c-6.6-2.3-13.5-4.7-13.5-9.2 0-4.8 4.2-7 9.3-7 5.4 0 9 4.5 9 8.5v.8h16.2v-.6c0-13-10.2-21.7-25.4-21.7-15.3 0-24.9 7.8-24.9 20.4 0 14.7 13.1 18.4 22.9 21.9 6.5 2.4 13.6 4.3 13.6 8.7 0 4.6-3.4 8-10.6 8-6.5 0-10.9-3.8-10.9-9.4v-.8h-16.7v.8c0 14.5 10.3 23.1 27.5 23.1 16.5 0 26-7.6 26-21.5 0-14.4-12.5-18.5-22.5-22z\" />\n </g>\n </svg>\n);\n\nconst Byline = ({\n size = 300,\n color = 'black',\n className = '',\n testId,\n}: {\n size?: number;\n color?: LogoColor;\n className?: string;\n testId?: string;\n}): JSX.Element => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n role={'img'}\n aria-labelledby=\"logo-title\"\n viewBox=\"0 0 87 12\"\n className={className}\n data-testid={testId}\n >\n <title id={'logo-title'}>Helsenorge</title>\n <g fill={getColor(color, 500)}>\n <path d=\"M5 .8v2.8H2.6V.8H1V8h1.6V5.1H5V8h1.6V.8zM20.9 6.6V.8h-1.6V8h4.5V6.6zM57.9 1.4c-1.7 0-2.8 1.4-2.8 3.4s1.2 3.4 2.8 3.4 2.8-1.4 2.8-3.4-1.1-3.4-2.8-3.4zm2 3.4c0 1.2-.5 2.7-2 2.7-1.4 0-2-1.4-2-2.7s.5-2.7 2-2.7 2 1.5 2 2.7zM86 4.7c0-2-1.1-3.3-2.8-3.3-1.7 0-2.8 1.4-2.8 3.4s1.2 3.4 2.9 3.4c1.2 0 2.2-.6 2.5-1.7l.1-.2H85v.1c-.3.6-.9 1-1.7 1-1.3 0-1.9-1.2-2-2.3H86v-.4zm-.9-.3h-3.9c.1-1.1.7-2.3 1.9-2.3 1.5 0 2 1.3 2 2.3zM49.2 1.4c-1.1 0-1.7.7-2 1.2v-1h-.8V8h.8V4.8c0-.9.5-2.6 1.9-2.6s1.6 1.2 1.6 2.6V8h.8V4.7c0-1.6-.2-3.3-2.3-3.3zM12.1 6.6V5h2.4V3.7h-2.4V2.2h3.2V.8h-4.8V8h4.9V6.6zM38.3 6.6V5h2.3V3.7h-2.3V2.2h3.2V.8h-4.8V8h4.9V6.6zM65.5 3.3V1.6h-.8V8h.8V4.1l2.8-2v-.9zM77.6 1.2l-1.5 1.1c-.5-.6-1.1-.9-1.9-.9-1.4 0-2.4 1-2.4 2.4 0 1.1.6 2 1.6 2.3l-1.6 1.8c-.4.5-.6.9-.6 1.3 0 1.3 1.1 2.1 2.9 2.1 1.7 0 2.9-.9 2.9-2.1 0-1.3-1.1-2.1-2.9-2.1h-.6l.8-.9c1.3-.1 2.3-1.1 2.3-2.4 0-.3 0-.6-.1-.8l1.2-.8v-1zM74 7.8c1.2 0 2.1.5 2.1 1.4 0 .8-.8 1.4-2.1 1.4-1.2 0-2-.5-2-1.4 0-.8.8-1.4 2-1.4zm.1-2.4c-.9 0-1.6-.7-1.6-1.7s.7-1.6 1.6-1.6c.9 0 1.6.7 1.6 1.6 0 1-.7 1.7-1.6 1.7zM30.4 3.7c-.7-.2-1.4-.5-1.4-1s.4-.7 1-.7.9.5.9.9V3h1.7v-.1c0-1.3-1.1-2.2-2.6-2.2-1.6 0-2.6.8-2.6 2.1 0 1.5 1.3 1.9 2.4 2.3.7.2 1.4.4 1.4.9s-.3.8-1.1.8c-.7 0-1.1-.4-1.1-1v-.1h-1.7v.1c0 1.5 1.1 2.4 2.8 2.4 1.7 0 2.7-.8 2.7-2.2-.1-1.5-1.4-2-2.4-2.3z\" />\n </g>\n </svg>\n);\n\nfunction Logo(props: LogoProps): JSX.Element {\n const { byline = false, ...restProps } = props;\n return byline ? <Byline {...restProps} /> : <Original {...restProps} />;\n}\n\nexport default Logo;\n"],"names":["Original","size","color","className","testId","React","AnalyticsId","getColor","Byline","Logo","props","byline","restProps"],"mappings":"oPAoBA,MAAMA,EAAW,CAAC,CAChB,KAAAC,EAAO,IACP,MAAAC,EAAQ,QACR,UAAAC,EAAY,GACZ,OAAAC,CACF,IAMGC,EAAA,cAAA,MAAA,CACC,MAAM,6BACN,MAAOJ,EACP,KAAM,MACN,kBAAgB,aAChB,QAAQ,cACR,UAAAE,EACA,cAAaC,EACb,mBAAkBE,EAAY,IAAA,EAE7BD,EAAA,cAAA,QAAA,CAAM,GAAI,YAAA,EAAc,YAAU,EAClCA,EAAA,cAAA,IAAA,CAAE,KAAME,EAASL,EAAO,GAAG,CAAA,EACzBG,EAAA,cAAA,OAAA,CAAK,EAAE,+pDAAA,CAAgqD,CAC1qD,CACF,EAGIG,EAAS,CAAC,CACd,KAAAP,EAAO,IACP,MAAAC,EAAQ,QACR,UAAAC,EAAY,GACZ,OAAAC,CACF,IAMGC,EAAA,cAAA,MAAA,CACC,MAAM,6BACN,MAAOJ,EACP,KAAM,MACN,kBAAgB,aAChB,QAAQ,YACR,UAAAE,EACA,cAAaC,CAAA,EAEZC,EAAA,cAAA,QAAA,CAAM,GAAI,YAAA,EAAc,YAAU,EAClCA,EAAA,cAAA,IAAA,CAAE,KAAME,EAASL,EAAO,GAAG,CAAA,EACzBG,EAAA,cAAA,OAAA,CAAK,EAAE,uxCAAA,CAAwxC,CAClyC,CACF,EAGF,SAASI,EAAKC,EAA+B,CAC3C,KAAM,CAAE,OAAAC,EAAS,MAAUC,CAAA,EAAcF,EACzC,OAAOC,EAAUN,EAAA,cAAAG,EAAA,CAAQ,GAAGI,CAAA,CAAW,EAAMP,EAAA,cAAAL,EAAA,CAAU,GAAGY,CAAA,CAAW,CACvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../src/components/Panel/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAiB5D,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IAClC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,OAAO,YAAY,CAAC;IACpC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACpC,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,yKAAyK;IACzK,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,4IAA4I;IAC5I,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IAClC,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,sGAAsG;IACtG,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAiDD,QAAA,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../src/components/Panel/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAiB5D,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IAClC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,OAAO,YAAY,CAAC;IACpC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACpC,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,yKAAyK;IACzK,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,4IAA4I;IAC5I,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IAClC,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,sGAAsG;IACtG,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAiDD,QAAA,MAAM,KAAK,uFAuMT,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
|
@@ -20,9 +20,6 @@
|
|
|
20
20
|
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
21
21
|
padding: getSpacer(m) getSpacer(m) getSpacer(l) getSpacer(m);
|
|
22
22
|
}
|
|
23
|
-
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
24
|
-
padding: getSpacer(l) getSpacer(m) getSpacer(l) getSpacer(m);
|
|
25
|
-
}
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
@mixin hover-and-focus-effects($background-color, $box-shadow-color) {
|
|
@@ -43,7 +40,7 @@
|
|
|
43
40
|
box-sizing: border-box;
|
|
44
41
|
|
|
45
42
|
&__container {
|
|
46
|
-
@media (min-width: map-get($grid-breakpoints,
|
|
43
|
+
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
47
44
|
display: flex;
|
|
48
45
|
flex-direction: row;
|
|
49
46
|
flex: 1;
|
|
@@ -69,13 +66,19 @@
|
|
|
69
66
|
|
|
70
67
|
&__icon {
|
|
71
68
|
padding-right: getSpacer(s);
|
|
69
|
+
|
|
70
|
+
@media (min-width: map-get($grid-breakpoints, md)) {
|
|
71
|
+
padding-right: getSpacer(l);
|
|
72
|
+
}
|
|
73
|
+
|
|
72
74
|
&--right {
|
|
73
75
|
padding-left: getSpacer(s);
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
&__badge {
|
|
78
|
-
|
|
80
|
+
display: inline-block;
|
|
81
|
+
vertical-align: text-bottom;
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
&__content-left {
|
|
@@ -143,6 +146,7 @@
|
|
|
143
146
|
}
|
|
144
147
|
|
|
145
148
|
&__details-btn {
|
|
149
|
+
align-self: flex-start;
|
|
146
150
|
@media (min-width: map-get($grid-breakpoints, lg)) {
|
|
147
151
|
align-self: flex-end;
|
|
148
152
|
}
|
|
@@ -311,11 +315,19 @@
|
|
|
311
315
|
}
|
|
312
316
|
|
|
313
317
|
&__title-container {
|
|
314
|
-
display:
|
|
315
|
-
align-items: center;
|
|
318
|
+
display: inline-block;
|
|
316
319
|
padding-bottom: getSpacer(s);
|
|
317
320
|
}
|
|
318
321
|
|
|
322
|
+
&__title {
|
|
323
|
+
vertical-align: top;
|
|
324
|
+
display: inline;
|
|
325
|
+
|
|
326
|
+
&--badge {
|
|
327
|
+
padding-right: getSpacer(2xs);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
319
331
|
&--layout3a {
|
|
320
332
|
flex: 0.6;
|
|
321
333
|
}
|
|
@@ -34,6 +34,8 @@ export type Styles = {
|
|
|
34
34
|
'panel--white': string;
|
|
35
35
|
'panel--with-icon': string;
|
|
36
36
|
'panel-content-a': string;
|
|
37
|
+
'panel-content-a__title': string;
|
|
38
|
+
'panel-content-a__title--badge': string;
|
|
37
39
|
'panel-content-a__title-container': string;
|
|
38
40
|
'panel-content-a--layout3a': string;
|
|
39
41
|
'panel-content-a--layout3b': string;
|
|
@@ -235,3 +235,26 @@
|
|
|
235
235
|
background-color: $cherry600;
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
+
/******** RESET *********/
|
|
239
|
+
@mixin reset-radio-button() {
|
|
240
|
+
border: 0;
|
|
241
|
+
clip: rect(0 0 0 0);
|
|
242
|
+
height: 1px;
|
|
243
|
+
margin: -1px;
|
|
244
|
+
overflow: hidden;
|
|
245
|
+
padding: 0;
|
|
246
|
+
position: absolute;
|
|
247
|
+
width: 1px;
|
|
248
|
+
|
|
249
|
+
& + label {
|
|
250
|
+
cursor: pointer;
|
|
251
|
+
display: block;
|
|
252
|
+
font-size: 18px;
|
|
253
|
+
font-weight: 400;
|
|
254
|
+
margin: 0;
|
|
255
|
+
word-break: break-word;
|
|
256
|
+
-webkit-hyphens: auto;
|
|
257
|
+
-ms-hyphens: auto;
|
|
258
|
+
hyphens: auto;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
@@ -6,8 +6,8 @@ interface SliderProps {
|
|
|
6
6
|
labelLeft?: string;
|
|
7
7
|
/** Adds the right hand label to the element. */
|
|
8
8
|
labelRight?: string;
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/** Sets aria-label of the slider. */
|
|
10
|
+
ariaLabel?: string;
|
|
11
11
|
/** Disables the slider element. */
|
|
12
12
|
disabled?: boolean;
|
|
13
13
|
/** Function to be called when the value state has changed. */
|
|
@@ -15,6 +15,6 @@ interface SliderProps {
|
|
|
15
15
|
/** Sets the data-testid attribute. */
|
|
16
16
|
testId?: string;
|
|
17
17
|
}
|
|
18
|
-
export declare const Slider: React.
|
|
18
|
+
export declare const Slider: React.FC<SliderProps>;
|
|
19
19
|
export default Slider;
|
|
20
20
|
//# sourceMappingURL=Slider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../../src/components/Slider/Slider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../../src/components/Slider/Slider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AA2B3D,UAAU,WAAW;IACnB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA4KxC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"props":{"title":{"defaultValue":null,"description":"Sets the title of the slider.","name":"title","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"labelLeft":{"defaultValue":null,"description":"Adds the left hand label to the element.","name":"labelLeft","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"labelRight":{"defaultValue":null,"description":"Adds the right hand label to the element.","name":"labelRight","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"
|
|
1
|
+
{"props":{"title":{"defaultValue":null,"description":"Sets the title of the slider.","name":"title","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"labelLeft":{"defaultValue":null,"description":"Adds the left hand label to the element.","name":"labelLeft","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"labelRight":{"defaultValue":null,"description":"Adds the right hand label to the element.","name":"labelRight","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"ariaLabel":{"defaultValue":null,"description":"Sets aria-label of the slider.","name":"ariaLabel","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}},"disabled":{"defaultValue":{"value":"false"},"description":"Disables the slider element.","name":"disabled","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"boolean"}},"onChange":{"defaultValue":null,"description":"Function to be called when the value state has changed.","name":"onChange","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"((value: number) => void)"}},"testId":{"defaultValue":null,"description":"Sets the data-testid attribute.","name":"testId","parent":{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"},"declarations":[{"fileName":"src/components/Slider/Slider.tsx","name":"SliderProps"}],"required":false,"type":{"name":"string"}}}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import s,{useState as U,useRef as M,useEffect as h}from"react";import P from"classnames";import{T as C}from"../../Title.js";import i from"./styles.module.scss";import{AnalyticsId as K}from"../../constants.js";import{useSize as N}from"../../hooks/useSize.js";import{useUuid as g}from"../../hooks/useUuid.js";import{getAriaLabelAttributes as W}from"../../utils/accessibility.js";import"../Title/styles.module.scss";import"../../utils/debounce.js";import"../../uuid.js";import"../../utils/environment.js";const z=(a,k,c)=>{const[u,r]=U(a);return[u,f=>{f>c?r(c):f<k?r(k):r(f)}]},m=100,d=0,V=1,b=10,ae=({title:a,ariaLabel:k,labelLeft:c,labelRight:u,disabled:r=!1,onChange:E,testId:f})=>{const[L,y]=U(!1),[n,o]=z((m-d)/2,d,m),p=g(),w=g(),_=g(),A=M(null),v=M(null),{width:I}=N(A)||{width:0},{width:R}=N(v)||{width:0};h(()=>{const e=()=>{y(!1)};return document.addEventListener("pointerup",e),()=>{document.removeEventListener("pointerup",e)}},[]);const S=e=>{var l,D;const t=(D=(l=A.current)==null?void 0:l.getBoundingClientRect().x)!=null?D:0;return Math.round((e-t)/I*(m-d))};h(()=>{const e=t=>{if(!r&&L){const l=S(t.clientX);o(l)}};return document.addEventListener("pointermove",e),()=>{document.removeEventListener("pointermove",e)}},[L]),h(()=>{!r&&E&&E(n)},[n]);const T=e=>{if(r)return;let t=!1;switch(e.key){case"ArrowLeft":case"ArrowDown":o(n-V),t=!0;break;case"PageDown":o(n-b),t=!0;break;case"ArrowRight":case"ArrowUp":o(n+V),t=!0;break;case"PageUp":o(n+b),t=!0;break;case"Home":o(d),t=!0;break;case"End":o(m),t=!0;break}t&&(e.preventDefault(),e.stopPropagation())},x=e=>{var l;if(r)return;const t=S(e.clientX);o(t),(l=v.current)==null||l.focus()},B=e=>{var t;r||(y(!0),e.preventDefault(),e.stopPropagation(),(t=v.current)==null||t.focus())},X=(I-R)/(m-d)*n,j=W({label:k,id:(()=>{if(a&&c&&u)return[p,w,_].join(" ");if(a&&c)return[p,w].join(" ");if(a&&u)return[p,_].join(" ");if(a)return p})(),prefer:"label"});return s.createElement("div",{className:i.slider,"data-testid":f,"data-analyticsid":K.Slider},a&&s.createElement(C,{htmlMarkup:"h3",margin:1.5,appearance:"title3",id:p},a),s.createElement("div",{ref:A,className:P(i["slider__track-wrapper"],r&&i["slider__track-wrapper--disabled"]),onClick:x,onPointerDown:B},s.createElement("div",{className:P(i.slider__track,r&&i["slider__track--disabled"])}),s.createElement("div",{role:"slider",ref:v,className:P(i.slider__marker,r&&i["slider__marker--disabled"]),style:{left:`${X}px`},onKeyDown:T,"aria-valuenow":n,"aria-valuemin":d,"aria-valuemax":m,tabIndex:r?void 0:0,"aria-disabled":r,...j})),(c||u)&&s.createElement("span",{className:i.slider__options},s.createElement("span",{id:w},c),s.createElement("span",{id:_},u)))};export{ae as Slider,ae as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Slider/SliderUtils.tsx","../../../src/components/Slider/Slider.tsx"],"sourcesContent":["/** Stopper MouseEvent eller TouchEvent parameter e som sendes inn fra å nå videre.*/\nexport const stopEvent = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): boolean => {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n};\n\n/** Henter ut x posisjon til MouseEvent eller TouchEvent e */\nexport const getMousePosition = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): number => {\n if (isTouchEvent(e)) {\n const touch: Touch = (e as TouchEvent).touches[0];\n return touch.pageX;\n }\n return (e as MouseEvent).pageX;\n};\n\n/** Returnerer en boolean på om innsendte event e er en TouchEvent */\nexport const isTouchEvent = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): boolean => {\n if (\n e.type === 'touchcancel' ||\n e.type === 'touchend' ||\n e.type === 'touchenter' ||\n e.type === 'touchleave' ||\n e.type === 'touchmove' ||\n e.type === 'touchstart'\n ) {\n return !((e as TouchEvent).touches.length === 0);\n }\n return false;\n};\n\n/** Kalkulerer x posisjonen til slideren basert på value som sendes inn,\n * trackerWidth - bredden til trackeren, sliderWidth - bredden på slideren,\n * og min og max verdier som er satt på slider komponentet. */\nexport const calculateSliderPositionBasedOnValue = (\n value: number,\n trackerWidth: number,\n sliderWidth: number,\n min: number,\n max: number\n): number => {\n const size: number = max - min;\n const pixelPerSize: number = (trackerWidth - sliderWidth) / size;\n return pixelPerSize * value;\n};\n\n/** Kalkulerer verdi basert på sliderPosition som sendes inn,\n * trackerWidth - bredden til trackeren, sliderWidth - bredden på slideren,\n * og min og max verdier som er satt på slider komponentet. */\nexport const calculateValueBasedOnSliderPosition = (\n sliderPosition: number,\n trackerWidth: number,\n sliderWidth: number,\n step: number,\n min: number,\n max: number\n): number => {\n const size: number = max - min;\n const pixelPerSize: number = (trackerWidth - sliderWidth) / size;\n const newValue: number = Math.round(sliderPosition / pixelPerSize);\n return alignValue(newValue, step, max);\n};\n\n/** Kalkulerer modifisert value basert på step parameteret,\n * med hensyn til max verdi til slideren.\n * Med en step på 10 vil da value gå fra 0 til 10 til 20 osv. */\nexport const alignValue = (value: number, step: number, max: number): number => {\n const valModStep: number = value % step;\n let alignedValue: number = value - valModStep;\n\n const possibleMaxValueWithCurrentStep: number = Math.floor(max / step) * step;\n if (value > possibleMaxValueWithCurrentStep) {\n const diff: number = max - possibleMaxValueWithCurrentStep;\n if (value > possibleMaxValueWithCurrentStep + diff / 2) {\n alignedValue = max;\n }\n }\n\n return Math.round(alignedValue);\n};\n\n/** Kalkulerer ny x posisjon til slider basert på innsendt differanse diff,\n * nåværende sliderXPos, bredden til tracker - TrackerWidth og bredden til\n * slider - sliderWidth. */\nexport const calculateChangeOfPosition = (diff: number, trackerWidth: number, sliderWidth: number, sliderXPos: number): number => {\n let newSliderPos: number = sliderXPos + diff;\n if (newSliderPos < 0) {\n newSliderPos = 0;\n }\n if (newSliderPos > trackerWidth - sliderWidth) {\n newSliderPos = trackerWidth - sliderWidth;\n }\n return newSliderPos;\n};\n\n/** Kalkulerer posisjon til slider basert på xPos, nåværende sliderELement og\n * bredden til slider - sliderWidth */\nexport const calculateSliderTranslate = (\n xPos: number,\n sliderElement: HTMLDivElement | null,\n sliderWidth: number,\n cb: (a: number) => void\n) => {\n const elementViewportPosition = sliderElement ? sliderElement.getBoundingClientRect() : undefined;\n const sliderPageXPos = elementViewportPosition ? elementViewportPosition.left : 0;\n const diff: number = sliderPageXPos ? xPos - (sliderPageXPos + sliderWidth / 2) : 0;\n cb(diff);\n};\n\n/** Legger til mousemove og mouseup event listeners,\n * basert på moveMouseEvent og mouseUpEvent eventene */\nexport const addMouseListeners = (moveMouseEvent: (evt: MouseEvent) => void, mouseUpEvent: (evt: MouseEvent) => void): void => {\n document.addEventListener('mousemove', moveMouseEvent, false);\n document.addEventListener('mouseup', mouseUpEvent, false);\n};\n\n/** Fjerner mousemove og mouseup event listeners,\n * basert på moveMouseEvent og mouseUpEvent eventene */\nexport const removeMouseListeners = (moveMouseEvent: (evt: MouseEvent) => void, mouseUpEvent: (evt: MouseEvent) => void): void => {\n document.removeEventListener('mousemove', moveMouseEvent, false);\n document.removeEventListener('mouseup', mouseUpEvent, false);\n};\n\n/** Legger til touchmove og touchend event listeners,\n * basert på moveTouchEvent og touchUpEvent eventene */\nexport const addTouchListeners = (moveTouchEvent: (evt: TouchEvent) => void, touchUpEvent: (evt: TouchEvent) => void): void => {\n document.addEventListener('touchmove', moveTouchEvent, false);\n document.addEventListener('touchend', touchUpEvent, false);\n};\n\n/** Fjerner touchmove og touchup event listeners,\n * basert på moveTouchEvent og touchUpEvent eventene */\nexport const removeTouchListeners = (moveTouchEvent: (evt: TouchEvent) => void, touchUpEvent: (evt: TouchEvent) => void): void => {\n document.removeEventListener('touchmove', moveTouchEvent, false);\n document.removeEventListener('touchend', touchUpEvent, false);\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport classNames from 'classnames';\n\nimport Title from '../Title';\n\nimport {\n stopEvent,\n getMousePosition,\n calculateSliderPositionBasedOnValue,\n calculateValueBasedOnSliderPosition,\n calculateChangeOfPosition,\n calculateSliderTranslate,\n addMouseListeners,\n addTouchListeners,\n removeMouseListeners,\n removeTouchListeners,\n} from './SliderUtils';\n\nimport SliderStyles from './styles.module.scss';\nimport { AnalyticsId } from '../../constants';\nimport { useSize } from '../../hooks/useSize';\n\ninterface SliderProps {\n /**\tSets the title of the slider. */\n title?: string;\n /** Adds the left hand label to the element. */\n labelLeft?: string;\n /** Adds the right hand label to the element. */\n labelRight?: string;\n /**\tDecides the number of steps for each movement of the slider. */\n step?: number;\n /** Disables the slider element. */\n disabled?: boolean;\n /** Function to be called when the value state has changed. */\n onChange?: (value: number) => void;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nexport const Slider = React.forwardRef(function SliderForwardedRef(props: SliderProps, ref: React.ForwardedRef<HTMLElement>) {\n const { title, labelLeft, labelRight, disabled = false, step = 1, onChange, testId } = props;\n const [value, setValue] = useState(50);\n const [isMouseDown, setIsMouseDown] = useState(false);\n\n const [sliderXPos, setSliderXPos] = useState(0);\n const [sliderTemporaryXPos, setSliderTemporaryXPos] = useState(0);\n const trackerRef = ref ? (ref as React.RefObject<HTMLDivElement>) : useRef<HTMLDivElement>(null);\n const sliderRef = useRef<HTMLDivElement>(null);\n const { width: trackerWidth } = useSize(trackerRef) || { width: 0 };\n const { width: sliderWidth } = useSize(sliderRef) || { width: 0 };\n const min = 0;\n const max = 100;\n\n const moveMouseEvent = (evt: MouseEvent) => {\n onMouseMove(evt);\n };\n const mouseUpEvent = (evt: MouseEvent) => {\n onMouseUp(evt);\n };\n const moveTouchEvent = (evt: TouchEvent) => {\n onMouseMove(evt);\n };\n const touchUpEvent = (evt: TouchEvent) => {\n onMouseUp(evt);\n };\n\n useEffect(() => {\n setSliderXPos(calculateSliderPositionBasedOnValue(value, trackerWidth, sliderWidth, min, max));\n }, [value, trackerWidth, sliderWidth]);\n\n useEffect(() => {\n if (isMouseDown) {\n addMouseListeners(moveMouseEvent, mouseUpEvent);\n addTouchListeners(moveTouchEvent, touchUpEvent);\n }\n }, [isMouseDown]);\n\n useEffect(() => {\n if (!disabled && onChange) {\n onChange(value);\n }\n }, [value]);\n\n const onKeyDown = (evt: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n const size: number = max - min;\n const pixelPerSize: number = (trackerWidth - sliderWidth) / size;\n if (evt.key === 'ArrowRight' || evt.key === 'ArrowDown') {\n updateSliderPosition(step * pixelPerSize);\n }\n if (evt.key === 'ArrowLeft' || evt.key === 'ArrowUp') {\n updateSliderPosition(-step * pixelPerSize);\n }\n };\n\n const onMouseOrTouchDown = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): void => {\n if (disabled) return;\n const updatedMousePosition: number = getMousePosition(e);\n calculateSliderTranslate(updatedMousePosition, sliderRef.current, sliderWidth, updateSliderPosition);\n setIsMouseDown(true);\n setSliderTemporaryXPos(updatedMousePosition);\n sliderRef.current?.focus();\n stopEvent(e);\n };\n\n const onMouseUp = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): void => {\n if (disabled) return;\n setIsMouseDown(false);\n removeMouseListeners(moveMouseEvent, mouseUpEvent);\n removeTouchListeners(moveTouchEvent, touchUpEvent);\n stopEvent(e);\n };\n\n const onMouseMove = (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>): void => {\n if (disabled || !isMouseDown) return;\n const updatedMousePosition: number = getMousePosition(e);\n const diff: number = updatedMousePosition - sliderTemporaryXPos;\n updateSliderPosition(diff);\n stopEvent(e);\n };\n\n const updateSliderPosition = (diff: number): void => {\n if (diff === 0) return;\n const updatedSliderPos: number = calculateChangeOfPosition(diff, trackerWidth, sliderWidth, sliderXPos);\n setSliderXPos(updatedSliderPos);\n setSliderTemporaryXPos(updatedSliderPos + diff);\n setValue(calculateValueBasedOnSliderPosition(updatedSliderPos, trackerWidth, sliderWidth, step, min, max));\n };\n\n return (\n <div className={SliderStyles.slider} data-testid={testId} data-analyticsid={AnalyticsId.Slider}>\n {title && (\n <Title htmlMarkup={'h3'} margin={1.5} appearance={'title3'}>\n {title}\n </Title>\n )}\n <div\n ref={trackerRef}\n className={classNames(SliderStyles['slider__track-wrapper'], disabled ? SliderStyles['slider__track-wrapper--disabled'] : '')}\n onMouseDown={onMouseOrTouchDown}\n onTouchStart={onMouseOrTouchDown}\n data-testid={'tracker'}\n >\n <div className={classNames(SliderStyles.slider__track, disabled ? SliderStyles['slider__track--disabled'] : '')} />\n <div\n ref={sliderRef}\n className={classNames(SliderStyles.slider__trigger, disabled ? SliderStyles['slider__trigger--disabled'] : '')}\n style={{\n left: `${sliderXPos}px`,\n }}\n onKeyDown={onKeyDown}\n role={'slider'}\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-label={`${title ? title + ' ' : ''}${labelLeft ? labelLeft + ' ' : ''}${labelRight ? labelRight + ' ' : ''}`}\n tabIndex={disabled ? -1 : 0}\n >\n <div\n className={classNames(SliderStyles['slider__trigger-inner'], disabled ? SliderStyles['slider__trigger-inner--disabled'] : '')}\n />\n </div>\n </div>\n {(labelLeft || labelRight) && (\n <span className={SliderStyles.slider__options}>\n <p className={SliderStyles.slider__text} aria-hidden={true}>\n {labelLeft}\n </p>\n <p className={SliderStyles.slider__text} aria-hidden={true}>\n {labelRight}\n </p>\n </span>\n )}\n </div>\n );\n});\n\nexport default Slider;\n"],"names":["stopEvent","getMousePosition","isTouchEvent","calculateSliderPositionBasedOnValue","value","trackerWidth","sliderWidth","min","max","size","calculateValueBasedOnSliderPosition","sliderPosition","step","pixelPerSize","newValue","alignValue","valModStep","alignedValue","possibleMaxValueWithCurrentStep","diff","calculateChangeOfPosition","sliderXPos","newSliderPos","calculateSliderTranslate","xPos","sliderElement","cb","elementViewportPosition","sliderPageXPos","addMouseListeners","moveMouseEvent","mouseUpEvent","removeMouseListeners","addTouchListeners","moveTouchEvent","touchUpEvent","removeTouchListeners","Slider","React","props","ref","title","labelLeft","labelRight","disabled","onChange","testId","setValue","useState","isMouseDown","setIsMouseDown","setSliderXPos","sliderTemporaryXPos","setSliderTemporaryXPos","trackerRef","useRef","sliderRef","useSize","evt","onMouseMove","onMouseUp","useEffect","onKeyDown","updateSliderPosition","onMouseOrTouchDown","e","updatedMousePosition","_a","updatedSliderPos","SliderStyles","AnalyticsId","Title","classNames"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\nimport classNames from 'classnames';\n\nimport Title from '../Title';\n\nimport styles from './styles.module.scss';\nimport { AnalyticsId } from '../../constants';\nimport { useSize } from '../../hooks/useSize';\nimport { useUuid } from '../../hooks/useUuid';\nimport { getAriaLabelAttributes } from '../../utils/accessibility';\n\nconst useSafeNumberValue = (initial: number, min: number, max: number): [number, (value: number) => void] => {\n const [value, setValue] = useState(initial);\n\n const setSafeValue = (newValue: number): void => {\n if (newValue > max) {\n setValue(max);\n } else if (newValue < min) {\n setValue(min);\n } else {\n setValue(newValue);\n }\n };\n\n return [value, setSafeValue];\n};\n\ninterface SliderProps {\n /**\tSets the title of the slider. */\n title?: string;\n /** Adds the left hand label to the element. */\n labelLeft?: string;\n /** Adds the right hand label to the element. */\n labelRight?: string;\n /**\tSets aria-label of the slider. */\n ariaLabel?: string;\n /** Disables the slider element. */\n disabled?: boolean;\n /** Function to be called when the value state has changed. */\n onChange?: (value: number) => void;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst MAX_VALUE = 100;\nconst MIN_VALUE = 0;\nconst STEP = 1;\nconst LARGE_STEP = 10;\n\nexport const Slider: React.FC<SliderProps> = ({ title, ariaLabel, labelLeft, labelRight, disabled = false, onChange, testId }) => {\n const [isMoving, setIsMoving] = useState(false);\n const [value, setValue] = useSafeNumberValue((MAX_VALUE - MIN_VALUE) / 2, MIN_VALUE, MAX_VALUE);\n const titleId = useUuid();\n const labelLeftId = useUuid();\n const labelRightId = useUuid();\n const trackRef = useRef<HTMLDivElement>(null);\n const markerRef = useRef<HTMLDivElement>(null);\n const { width: trackWidth } = useSize(trackRef) || { width: 0 };\n const { width: markerWidth } = useSize(markerRef) || { width: 0 };\n\n useEffect(() => {\n const handlePointerUp = (): void => {\n setIsMoving(false);\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, []);\n\n const getValueBasedOnMarkerPosition = (markerPosition: number): number => {\n const trackPosition = trackRef.current?.getBoundingClientRect().x ?? 0;\n\n return Math.round(((markerPosition - trackPosition) / trackWidth) * (MAX_VALUE - MIN_VALUE));\n };\n\n useEffect(() => {\n const handlePointerMove = (e: PointerEvent): void => {\n if (!disabled && isMoving) {\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n }\n };\n\n document.addEventListener('pointermove', handlePointerMove);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n };\n }, [isMoving]);\n\n useEffect(() => {\n if (!disabled && onChange) {\n onChange(value);\n }\n }, [value]);\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n let flag = false;\n\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n setValue(value - STEP);\n flag = true;\n break;\n case 'PageDown':\n setValue(value - LARGE_STEP);\n flag = true;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n setValue(value + STEP);\n flag = true;\n break;\n case 'PageUp':\n setValue(value + LARGE_STEP);\n flag = true;\n break;\n case 'Home':\n setValue(MIN_VALUE);\n flag = true;\n break;\n case 'End':\n setValue(MAX_VALUE);\n flag = true;\n break;\n default:\n break;\n }\n\n if (flag) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const handleTrackClick: React.MouseEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n const newValue = getValueBasedOnMarkerPosition(e.clientX);\n setValue(newValue);\n markerRef.current?.focus();\n };\n\n const handlePointerDown: React.PointerEventHandler<HTMLDivElement> = e => {\n if (disabled) return;\n\n setIsMoving(true);\n\n e.preventDefault();\n e.stopPropagation();\n\n markerRef.current?.focus();\n };\n\n const markerXPos = ((trackWidth - markerWidth) / (MAX_VALUE - MIN_VALUE)) * value;\n\n const getAriaLabeledById = (): string | undefined => {\n if (title && labelLeft && labelRight) {\n return [titleId, labelLeftId, labelRightId].join(' ');\n }\n if (title && labelLeft) {\n return [titleId, labelLeftId].join(' ');\n }\n if (title && labelRight) {\n return [titleId, labelRightId].join(' ');\n }\n if (title) {\n return titleId;\n }\n };\n\n const ariaLabelAttributes = getAriaLabelAttributes({\n label: ariaLabel,\n id: getAriaLabeledById(),\n prefer: 'label',\n });\n\n return (\n <div className={styles.slider} data-testid={testId} data-analyticsid={AnalyticsId.Slider}>\n {title && (\n <Title htmlMarkup={'h3'} margin={1.5} appearance={'title3'} id={titleId}>\n {title}\n </Title>\n )}\n <div\n ref={trackRef}\n className={classNames(styles['slider__track-wrapper'], disabled && styles['slider__track-wrapper--disabled'])}\n onClick={handleTrackClick}\n onPointerDown={handlePointerDown}\n >\n <div className={classNames(styles.slider__track, disabled && styles['slider__track--disabled'])} />\n <div\n role={'slider'}\n ref={markerRef}\n className={classNames(styles.slider__marker, disabled && styles['slider__marker--disabled'])}\n style={{\n left: `${markerXPos}px`,\n }}\n onKeyDown={handleKeyDown}\n aria-valuenow={value}\n aria-valuemin={MIN_VALUE}\n aria-valuemax={MAX_VALUE}\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled}\n {...ariaLabelAttributes}\n />\n </div>\n {(labelLeft || labelRight) && (\n <span className={styles.slider__options}>\n <span id={labelLeftId}>{labelLeft}</span>\n <span id={labelRightId}>{labelRight}</span>\n </span>\n )}\n </div>\n );\n};\n\nexport default Slider;\n"],"names":["useSafeNumberValue","initial","min","max","value","setValue","useState","newValue","MAX_VALUE","MIN_VALUE","STEP","LARGE_STEP","Slider","title","ariaLabel","labelLeft","labelRight","disabled","onChange","testId","isMoving","setIsMoving","titleId","useUuid","labelLeftId","labelRightId","trackRef","useRef","markerRef","trackWidth","useSize","markerWidth","useEffect","handlePointerUp","getValueBasedOnMarkerPosition","markerPosition","trackPosition","_b","_a","handlePointerMove","e","handleKeyDown","flag","handleTrackClick","handlePointerDown","markerXPos","ariaLabelAttributes","getAriaLabelAttributes","React","styles","AnalyticsId","Title","classNames"],"mappings":"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"}
|
|
@@ -18,18 +18,17 @@
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
&__track {
|
|
21
|
-
|
|
22
|
-
background-color: $black;
|
|
21
|
+
border-top: 2px solid $black;
|
|
23
22
|
width: 100%;
|
|
24
23
|
position: relative;
|
|
25
24
|
top: 1rem;
|
|
26
25
|
|
|
27
26
|
&--disabled {
|
|
28
|
-
|
|
27
|
+
border-color: $neutral600;
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
&
|
|
31
|
+
&__marker {
|
|
33
32
|
display: flex;
|
|
34
33
|
justify-content: center;
|
|
35
34
|
align-items: center;
|
|
@@ -44,34 +43,36 @@
|
|
|
44
43
|
outline: none;
|
|
45
44
|
cursor: pointer;
|
|
46
45
|
|
|
47
|
-
&--disabled {
|
|
48
|
-
border-color: $neutral500;
|
|
49
|
-
cursor: default;
|
|
50
|
-
}
|
|
51
46
|
&:focus-within {
|
|
52
47
|
box-shadow: 0px 0px 0px 0.1rem $black;
|
|
53
48
|
}
|
|
54
|
-
}
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
&::after {
|
|
51
|
+
content: '';
|
|
52
|
+
width: 1.25rem;
|
|
53
|
+
height: 1.25rem;
|
|
54
|
+
border: 0.1rem solid $black;
|
|
55
|
+
border-radius: 1rem;
|
|
56
|
+
background-color: $blueberry600;
|
|
62
57
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
:hover > &,
|
|
59
|
+
:focus > & {
|
|
60
|
+
background-color: $blueberry700;
|
|
61
|
+
}
|
|
66
62
|
}
|
|
67
63
|
|
|
68
64
|
&--disabled {
|
|
69
65
|
border-color: $neutral500;
|
|
70
|
-
|
|
66
|
+
cursor: default;
|
|
71
67
|
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
&::after {
|
|
69
|
+
border-color: $neutral500;
|
|
74
70
|
background-color: $neutral200;
|
|
71
|
+
|
|
72
|
+
:hover > &,
|
|
73
|
+
:focus > & {
|
|
74
|
+
background-color: $neutral200;
|
|
75
|
+
}
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
}
|
|
@@ -81,8 +82,4 @@
|
|
|
81
82
|
justify-content: space-between;
|
|
82
83
|
width: 100%;
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
-
&__text {
|
|
86
|
-
margin: 0;
|
|
87
|
-
}
|
|
88
85
|
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
export type Styles = {
|
|
2
2
|
slider: string;
|
|
3
|
+
slider__marker: string;
|
|
4
|
+
'slider__marker--disabled': string;
|
|
3
5
|
slider__options: string;
|
|
4
|
-
slider__text: string;
|
|
5
6
|
slider__track: string;
|
|
6
7
|
'slider__track--disabled': string;
|
|
7
8
|
'slider__track-wrapper': string;
|
|
8
9
|
'slider__track-wrapper--disabled': string;
|
|
9
|
-
slider__trigger: string;
|
|
10
|
-
'slider__trigger--disabled': string;
|
|
11
|
-
'slider__trigger-inner': string;
|
|
12
|
-
'slider__trigger-inner--disabled': string;
|
|
13
10
|
};
|
|
14
11
|
|
|
15
12
|
export type ClassNames = keyof Styles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagList.d.ts","sourceRoot":"","sources":["../../../src/components/TagList/TagList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TagList.d.ts","sourceRoot":"","sources":["../../../src/components/TagList/TagList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,UAAU,iBAAiB;IACzB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAQxC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import t from"react";import a from"./styles.module.scss";import{AnalyticsId as l}from"../../constants.js";const o=({children:e,testId:s})=>t.createElement("ul",{className:a["tag-list"],"data-testid":s,"data-analyticsid":l.TagList},t.Children.map(e,i=>t.createElement("li",{className:a["tag-list__item"]},i)));export{o as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/TagList/TagList.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './styles.module.scss';\n\nimport { AnalyticsId } from '../../constants';\n\ninterface TagListPropsProps {\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\nconst TagList: React.FC<TagListPropsProps> = ({ children, testId }) => {\n return (\n <
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/TagList/TagList.tsx"],"sourcesContent":["import React from 'react';\n\nimport styles from './styles.module.scss';\n\nimport { AnalyticsId } from '../../constants';\n\ninterface TagListPropsProps {\n /** Sets the data-testid attribute on the expander button. */\n testId?: string;\n}\n\nconst TagList: React.FC<TagListPropsProps> = ({ children, testId }) => {\n return (\n <ul className={styles['tag-list']} data-testid={testId} data-analyticsid={AnalyticsId.TagList}>\n {React.Children.map(children, child => (\n <li className={styles['tag-list__item']}>{child}</li>\n ))}\n </ul>\n );\n};\n\nexport default TagList;\n"],"names":["TagList","children","testId","React","styles","AnalyticsId","child"],"mappings":"0GAWA,MAAMA,EAAuC,CAAC,CAAE,SAAAC,EAAU,OAAAC,KAErDC,EAAA,cAAA,KAAA,CAAG,UAAWC,EAAO,YAAa,cAAaF,EAAQ,mBAAkBG,EAAY,OAAA,EACnFF,EAAM,SAAS,IAAIF,KACjBE,EAAA,cAAA,KAAA,CAAG,UAAWC,EAAO,iBAAA,EAAoBE,CAAM,CACjD,CACH"}
|
package/hooks/useOutsideEvent.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useEffect as
|
|
1
|
+
import{useEffect as u}from"react";const d=(t,n,o=["mousedown"])=>{const r=e=>{t.current&&!e.composedPath().includes(t.current)&&n(e)};u(()=>(o.forEach(e=>document.addEventListener(e,r)),()=>{o.forEach(e=>document.removeEventListener(e,r))}),[t,n,o])};export{d as useOutsideEvent};
|
|
2
2
|
//# sourceMappingURL=useOutsideEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOutsideEvent.js","sources":["../../src/hooks/useOutsideEvent.ts"],"sourcesContent":["import { useEffect } from 'react';\n\ntype OutsideEvents = keyof PickByValue<HTMLElementEventMap, MouseEvent | FocusEvent>;\n\n/**\n * Custom hook for klikk eller fokus utenfor et gitt element\n * @param ref Sjekker om det klikkes utenfor dette elementet\n * @param handleClick Callback-funksjon ved klikk utenfor elementet\n * @param events Type eventer å lytte på. Default: mousedown\n */\nexport const useOutsideEvent = (\n ref: React.RefObject<HTMLElement>,\n handleClick: (event: HTMLElementEventMap[OutsideEvents]) => void,\n events: OutsideEvents[] = ['mousedown']\n): void => {\n const handleOutsideEvent = (event: HTMLElementEventMap[OutsideEvents]): void => {\n if (
|
|
1
|
+
{"version":3,"file":"useOutsideEvent.js","sources":["../../src/hooks/useOutsideEvent.ts"],"sourcesContent":["import { useEffect } from 'react';\n\ntype OutsideEvents = keyof PickByValue<HTMLElementEventMap, MouseEvent | FocusEvent>;\n\n/**\n * Custom hook for klikk eller fokus utenfor et gitt element\n * @param ref Sjekker om det klikkes utenfor dette elementet\n * @param handleClick Callback-funksjon ved klikk utenfor elementet\n * @param events Type eventer å lytte på. Default: mousedown\n */\nexport const useOutsideEvent = (\n ref: React.RefObject<HTMLElement>,\n handleClick: (event: HTMLElementEventMap[OutsideEvents]) => void,\n events: OutsideEvents[] = ['mousedown']\n): void => {\n const handleOutsideEvent = (event: HTMLElementEventMap[OutsideEvents]): void => {\n if (ref.current && !event.composedPath().includes(ref.current)) {\n handleClick(event);\n }\n };\n\n useEffect(() => {\n events.forEach(eventName => document.addEventListener(eventName, handleOutsideEvent));\n\n return () => {\n events.forEach(eventName => document.removeEventListener(eventName, handleOutsideEvent));\n };\n }, [ref, handleClick, events]);\n};\n"],"names":["useOutsideEvent","ref","handleClick","events","handleOutsideEvent","event","useEffect","eventName"],"mappings":"kCAUO,MAAMA,EAAkB,CAC7BC,EACAC,EACAC,EAA0B,CAAC,WAAW,IAC7B,CACH,MAAAC,EAAsBC,GAAoD,CAC1EJ,EAAI,SAAW,CAACI,EAAM,eAAe,SAASJ,EAAI,OAAO,GAC3DC,EAAYG,CAAK,CACnB,EAGFC,EAAU,KACRH,EAAO,QAAqBI,GAAA,SAAS,iBAAiBA,EAAWH,CAAkB,CAAC,EAE7E,IAAM,CACXD,EAAO,QAAqBI,GAAA,SAAS,oBAAoBA,EAAWH,CAAkB,CAAC,CAAA,GAExF,CAACH,EAAKC,EAAaC,CAAM,CAAC,CAC/B"}
|
package/package.json
CHANGED
package/utils/accessibility.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { AriaAttributes } from 'react';
|
|
|
2
2
|
interface AriaLabelAttributesConfig {
|
|
3
3
|
label?: string;
|
|
4
4
|
id?: string;
|
|
5
|
+
prefer?: 'id' | 'label';
|
|
5
6
|
}
|
|
6
7
|
export declare type AriaLabelAttributes = Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'>;
|
|
7
8
|
export declare const getAriaLabelAttributes: (config: AriaLabelAttributesConfig) => AriaLabelAttributes | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/utils/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/utils/accessibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;CACzB;AAED,oBAAY,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,iBAAiB,CAAC,CAAC;AAEzF,eAAO,MAAM,sBAAsB,WAAY,yBAAyB,KAAG,mBAAmB,GAAG,SAoBhG,CAAC"}
|
package/utils/accessibility.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
const l=a=>{const{label:r,id:e,prefer:i="id"}=a;if(e&&i==="id")return{"aria-labelledby":e};if(r)return{"aria-label":r};if(e)return{"aria-labelledby":e}};export{l as getAriaLabelAttributes};
|
|
2
2
|
//# sourceMappingURL=accessibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility.js","sources":["../../src/utils/accessibility.ts"],"sourcesContent":["import { AriaAttributes } from 'react';\n\ninterface AriaLabelAttributesConfig {\n label?: string;\n id?: string;\n}\n\nexport type AriaLabelAttributes = Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'>;\n\nexport const getAriaLabelAttributes = (config: AriaLabelAttributesConfig): AriaLabelAttributes | undefined => {\n const { label, id } = config;\n\n if (id) {\n return {\n 'aria-labelledby': id,\n };\n }\n if (label) {\n return {\n 'aria-label': label,\n };\n }\n};\n"],"names":["getAriaLabelAttributes","config","label","id"],"mappings":"
|
|
1
|
+
{"version":3,"file":"accessibility.js","sources":["../../src/utils/accessibility.ts"],"sourcesContent":["import { AriaAttributes } from 'react';\n\ninterface AriaLabelAttributesConfig {\n label?: string;\n id?: string;\n prefer?: 'id' | 'label';\n}\n\nexport type AriaLabelAttributes = Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'>;\n\nexport const getAriaLabelAttributes = (config: AriaLabelAttributesConfig): AriaLabelAttributes | undefined => {\n const { label, id, prefer = 'id' } = config;\n\n if (id && prefer === 'id') {\n return {\n 'aria-labelledby': id,\n };\n }\n\n if (label) {\n return {\n 'aria-label': label,\n };\n }\n\n if (id) {\n return {\n 'aria-labelledby': id,\n };\n }\n};\n"],"names":["getAriaLabelAttributes","config","label","id","prefer"],"mappings":"AAUa,MAAAA,EAA0BC,GAAuE,CAC5G,KAAM,CAAE,MAAAC,EAAO,GAAAC,EAAI,OAAAC,EAAS,MAASH,EAEjC,GAAAE,GAAMC,IAAW,KACZ,MAAA,CACL,kBAAmBD,CAAA,EAIvB,GAAID,EACK,MAAA,CACL,aAAcA,CAAA,EAIlB,GAAIC,EACK,MAAA,CACL,kBAAmBA,CAAA,CAGzB"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/** Stopper MouseEvent eller TouchEvent parameter e som sendes inn fra å nå videre.*/
|
|
2
|
-
export declare const stopEvent: (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>) => boolean;
|
|
3
|
-
/** Henter ut x posisjon til MouseEvent eller TouchEvent e */
|
|
4
|
-
export declare const getMousePosition: (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>) => number;
|
|
5
|
-
/** Returnerer en boolean på om innsendte event e er en TouchEvent */
|
|
6
|
-
export declare const isTouchEvent: (e: MouseEvent | React.MouseEvent<{}> | TouchEvent | React.TouchEvent<{}>) => boolean;
|
|
7
|
-
/** Kalkulerer x posisjonen til slideren basert på value som sendes inn,
|
|
8
|
-
* trackerWidth - bredden til trackeren, sliderWidth - bredden på slideren,
|
|
9
|
-
* og min og max verdier som er satt på slider komponentet. */
|
|
10
|
-
export declare const calculateSliderPositionBasedOnValue: (value: number, trackerWidth: number, sliderWidth: number, min: number, max: number) => number;
|
|
11
|
-
/** Kalkulerer verdi basert på sliderPosition som sendes inn,
|
|
12
|
-
* trackerWidth - bredden til trackeren, sliderWidth - bredden på slideren,
|
|
13
|
-
* og min og max verdier som er satt på slider komponentet. */
|
|
14
|
-
export declare const calculateValueBasedOnSliderPosition: (sliderPosition: number, trackerWidth: number, sliderWidth: number, step: number, min: number, max: number) => number;
|
|
15
|
-
/** Kalkulerer modifisert value basert på step parameteret,
|
|
16
|
-
* med hensyn til max verdi til slideren.
|
|
17
|
-
* Med en step på 10 vil da value gå fra 0 til 10 til 20 osv. */
|
|
18
|
-
export declare const alignValue: (value: number, step: number, max: number) => number;
|
|
19
|
-
/** Kalkulerer ny x posisjon til slider basert på innsendt differanse diff,
|
|
20
|
-
* nåværende sliderXPos, bredden til tracker - TrackerWidth og bredden til
|
|
21
|
-
* slider - sliderWidth. */
|
|
22
|
-
export declare const calculateChangeOfPosition: (diff: number, trackerWidth: number, sliderWidth: number, sliderXPos: number) => number;
|
|
23
|
-
/** Kalkulerer posisjon til slider basert på xPos, nåværende sliderELement og
|
|
24
|
-
* bredden til slider - sliderWidth */
|
|
25
|
-
export declare const calculateSliderTranslate: (xPos: number, sliderElement: HTMLDivElement | null, sliderWidth: number, cb: (a: number) => void) => void;
|
|
26
|
-
/** Legger til mousemove og mouseup event listeners,
|
|
27
|
-
* basert på moveMouseEvent og mouseUpEvent eventene */
|
|
28
|
-
export declare const addMouseListeners: (moveMouseEvent: (evt: MouseEvent) => void, mouseUpEvent: (evt: MouseEvent) => void) => void;
|
|
29
|
-
/** Fjerner mousemove og mouseup event listeners,
|
|
30
|
-
* basert på moveMouseEvent og mouseUpEvent eventene */
|
|
31
|
-
export declare const removeMouseListeners: (moveMouseEvent: (evt: MouseEvent) => void, mouseUpEvent: (evt: MouseEvent) => void) => void;
|
|
32
|
-
/** Legger til touchmove og touchend event listeners,
|
|
33
|
-
* basert på moveTouchEvent og touchUpEvent eventene */
|
|
34
|
-
export declare const addTouchListeners: (moveTouchEvent: (evt: TouchEvent) => void, touchUpEvent: (evt: TouchEvent) => void) => void;
|
|
35
|
-
/** Fjerner touchmove og touchup event listeners,
|
|
36
|
-
* basert på moveTouchEvent og touchUpEvent eventene */
|
|
37
|
-
export declare const removeTouchListeners: (moveTouchEvent: (evt: TouchEvent) => void, touchUpEvent: (evt: TouchEvent) => void) => void;
|
|
38
|
-
//# sourceMappingURL=SliderUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SliderUtils.d.ts","sourceRoot":"","sources":["../../../src/components/Slider/SliderUtils.tsx"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,eAAO,MAAM,SAAS,MAAO,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAG,OAIpG,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,MAAO,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAG,MAM3G,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY,MAAO,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAG,OAYvG,CAAC;AAEF;;+DAE+D;AAC/D,eAAO,MAAM,mCAAmC,UACvC,MAAM,gBACC,MAAM,eACP,MAAM,OACd,MAAM,OACN,MAAM,KACV,MAIF,CAAC;AAEF;;+DAE+D;AAC/D,eAAO,MAAM,mCAAmC,mBAC9B,MAAM,gBACR,MAAM,eACP,MAAM,QACb,MAAM,OACP,MAAM,OACN,MAAM,KACV,MAKF,CAAC;AAEF;;gEAEgE;AAChE,eAAO,MAAM,UAAU,UAAW,MAAM,QAAQ,MAAM,OAAO,MAAM,KAAG,MAarE,CAAC;AAEF;;4BAE4B;AAC5B,eAAO,MAAM,yBAAyB,SAAU,MAAM,gBAAgB,MAAM,eAAe,MAAM,cAAc,MAAM,KAAG,MASvH,CAAC;AAEF;uCACuC;AACvC,eAAO,MAAM,wBAAwB,SAC7B,MAAM,iBACG,cAAc,GAAG,IAAI,eACvB,MAAM,UACX,MAAM,KAAK,IAAI,SAMxB,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,iBAAiB,yBAA0B,UAAU,KAAK,IAAI,sBAAsB,UAAU,KAAK,IAAI,KAAG,IAGtH,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,oBAAoB,yBAA0B,UAAU,KAAK,IAAI,sBAAsB,UAAU,KAAK,IAAI,KAAG,IAGzH,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,iBAAiB,yBAA0B,UAAU,KAAK,IAAI,sBAAsB,UAAU,KAAK,IAAI,KAAG,IAGtH,CAAC;AAEF;wDACwD;AACxD,eAAO,MAAM,oBAAoB,yBAA0B,UAAU,KAAK,IAAI,sBAAsB,UAAU,KAAK,IAAI,KAAG,IAGzH,CAAC"}
|