@fremtind/jokul 0.45.3 → 0.47.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.
Files changed (120) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/cookie-consent/CookieConsent.cjs +1 -1
  3. package/build/cjs/components/cookie-consent/CookieConsent.cjs.map +1 -1
  4. package/build/cjs/components/cookie-consent/CookieConsentContext.cjs +1 -1
  5. package/build/cjs/components/cookie-consent/CookieConsentContext.cjs.map +1 -1
  6. package/build/cjs/components/cookie-consent/cookieConsentUtils.cjs +1 -1
  7. package/build/cjs/components/cookie-consent/cookieConsentUtils.cjs.map +1 -1
  8. package/build/cjs/components/cookie-consent/cookieConsentUtils.d.cts +2 -1
  9. package/build/cjs/components/cookie-consent/types.d.cts +2 -0
  10. package/build/cjs/components/feedback/Feedback.cjs.map +1 -1
  11. package/build/cjs/components/feedback/Feedback.d.cts +1 -1
  12. package/build/cjs/components/feedback/feedbackContext.cjs.map +1 -1
  13. package/build/cjs/components/feedback/feedbackContext.d.cts +1 -1
  14. package/build/cjs/components/feedback/questions/AddonQuestion.cjs +1 -1
  15. package/build/cjs/components/feedback/questions/AddonQuestion.cjs.map +1 -1
  16. package/build/cjs/components/feedback/questions/TextQuestion.cjs +1 -1
  17. package/build/cjs/components/feedback/questions/TextQuestion.cjs.map +1 -1
  18. package/build/cjs/components/feedback/utils.cjs +1 -1
  19. package/build/cjs/components/feedback/utils.cjs.map +1 -1
  20. package/build/cjs/components/index.cjs +1 -1
  21. package/build/cjs/components/index.d.cts +1 -0
  22. package/build/cjs/components/{text-input → text-area}/BaseTextArea.cjs +1 -1
  23. package/build/{es/components/text-input/BaseTextArea.js.map → cjs/components/text-area/BaseTextArea.cjs.map} +1 -1
  24. package/build/{es/components/text-input/TextArea.js.map → cjs/components/text-area/TextArea.cjs.map} +1 -1
  25. package/build/cjs/components/text-area/index.cjs +2 -0
  26. package/build/cjs/components/text-area/index.cjs.map +1 -0
  27. package/build/cjs/components/text-area/index.d.cts +3 -0
  28. package/build/cjs/components/text-area/types.cjs +2 -0
  29. package/build/cjs/components/text-area/types.cjs.map +1 -0
  30. package/build/cjs/components/text-area/types.d.cts +28 -0
  31. package/build/cjs/components/text-input/index.cjs +1 -1
  32. package/build/cjs/components/text-input/index.d.cts +1 -3
  33. package/build/cjs/components/text-input/types.d.cts +1 -27
  34. package/build/cjs/index.cjs +1 -1
  35. package/build/es/components/cookie-consent/CookieConsent.js +1 -1
  36. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -1
  37. package/build/es/components/cookie-consent/CookieConsentContext.js +1 -1
  38. package/build/es/components/cookie-consent/CookieConsentContext.js.map +1 -1
  39. package/build/es/components/cookie-consent/cookieConsentUtils.d.ts +2 -1
  40. package/build/es/components/cookie-consent/cookieConsentUtils.js +1 -1
  41. package/build/es/components/cookie-consent/cookieConsentUtils.js.map +1 -1
  42. package/build/es/components/cookie-consent/types.d.ts +2 -0
  43. package/build/es/components/feedback/Feedback.d.ts +1 -1
  44. package/build/es/components/feedback/Feedback.js.map +1 -1
  45. package/build/es/components/feedback/feedbackContext.d.ts +1 -1
  46. package/build/es/components/feedback/feedbackContext.js.map +1 -1
  47. package/build/es/components/feedback/questions/AddonQuestion.js +1 -1
  48. package/build/es/components/feedback/questions/AddonQuestion.js.map +1 -1
  49. package/build/es/components/feedback/questions/TextQuestion.js +1 -1
  50. package/build/es/components/feedback/questions/TextQuestion.js.map +1 -1
  51. package/build/es/components/feedback/utils.js +1 -1
  52. package/build/es/components/feedback/utils.js.map +1 -1
  53. package/build/es/components/index.d.ts +1 -0
  54. package/build/es/components/index.js +1 -1
  55. package/build/es/components/{text-input → text-area}/BaseTextArea.js +1 -1
  56. package/build/es/components/text-area/BaseTextArea.js.map +1 -0
  57. package/build/es/components/text-area/TextArea.js.map +1 -0
  58. package/build/es/components/text-area/index.d.ts +3 -0
  59. package/build/es/components/text-area/index.js +2 -0
  60. package/build/es/components/text-area/index.js.map +1 -0
  61. package/build/es/components/text-area/types.d.ts +28 -0
  62. package/build/es/components/text-area/types.js +2 -0
  63. package/build/es/components/text-area/types.js.map +1 -0
  64. package/build/es/components/text-input/index.d.ts +1 -3
  65. package/build/es/components/text-input/index.js +1 -1
  66. package/build/es/components/text-input/types.d.ts +1 -27
  67. package/build/es/index.js +1 -1
  68. package/package.json +13 -2
  69. package/styles/components/button/button.css +2 -2
  70. package/styles/components/button/button.min.css +1 -1
  71. package/styles/components/checkbox/checkbox.css +4 -4
  72. package/styles/components/checkbox/checkbox.min.css +1 -1
  73. package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
  74. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  75. package/styles/components/countdown/countdown.css +2 -2
  76. package/styles/components/countdown/countdown.min.css +1 -1
  77. package/styles/components/feedback/feedback.css +2 -2
  78. package/styles/components/feedback/feedback.min.css +1 -1
  79. package/styles/components/input-group/input-group.css +2 -2
  80. package/styles/components/input-group/input-group.min.css +1 -1
  81. package/styles/components/loader/loader.css +6 -6
  82. package/styles/components/loader/loader.min.css +1 -1
  83. package/styles/components/loader/skeleton-loader.css +5 -5
  84. package/styles/components/loader/skeleton-loader.min.css +1 -1
  85. package/styles/components/message/message.css +2 -2
  86. package/styles/components/message/message.min.css +1 -1
  87. package/styles/components/progress-bar/progress-bar.css +1 -1
  88. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  89. package/styles/components/radio-button/radio-button.css +2 -2
  90. package/styles/components/radio-button/radio-button.min.css +1 -1
  91. package/styles/components/radio-panel/radio-panel.css +2 -2
  92. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  93. package/styles/components/system-message/system-message.css +2 -2
  94. package/styles/components/system-message/system-message.min.css +1 -1
  95. package/styles/components/text-area/_index.scss +5 -0
  96. package/styles/components/text-area/text-area.css +415 -0
  97. package/styles/components/text-area/text-area.min.css +1 -0
  98. package/styles/components/text-area/text-area.scss +123 -0
  99. package/styles/components/text-input/text-input.css +0 -232
  100. package/styles/components/text-input/text-input.min.css +1 -1
  101. package/styles/components/text-input/text-input.scss +3 -362
  102. package/styles/components/toast/toast.css +4 -4
  103. package/styles/components/toast/toast.min.css +1 -1
  104. package/styles/shared/input/shared-input-styles.css +106 -0
  105. package/styles/shared/input/shared-input-styles.min.css +1 -0
  106. package/styles/shared/input/shared-input-styles.scss +251 -0
  107. package/styles/styles.css +347 -270
  108. package/styles/styles.min.css +1 -1
  109. package/styles/styles.scss +1 -0
  110. package/build/cjs/components/text-input/BaseTextArea.cjs.map +0 -1
  111. package/build/cjs/components/text-input/TextArea.cjs.map +0 -1
  112. package/styles/components/text-input/development/index.css +0 -12
  113. package/styles/components/text-input/development/index.min.css +0 -1
  114. package/styles/components/text-input/development/index.scss +0 -16
  115. /package/build/cjs/components/{text-input → text-area}/BaseTextArea.d.cts +0 -0
  116. /package/build/cjs/components/{text-input → text-area}/TextArea.cjs +0 -0
  117. /package/build/cjs/components/{text-input → text-area}/TextArea.d.cts +0 -0
  118. /package/build/es/components/{text-input → text-area}/BaseTextArea.d.ts +0 -0
  119. /package/build/es/components/{text-input → text-area}/TextArea.d.ts +0 -0
  120. /package/build/es/components/{text-input → text-area}/TextArea.js +0 -0
@@ -1,4 +1,4 @@
1
- import { HTMLProps, InputHTMLAttributes, MouseEventHandler, ReactNode, TextareaHTMLAttributes } from 'react';
1
+ import { HTMLProps, InputHTMLAttributes, MouseEventHandler, ReactNode } from 'react';
2
2
  import { Density } from '../../core/types.cjs';
3
3
  import { IconProps } from '../icon/types.cjs';
4
4
  import { InputGroupProps } from '../input-group/types.cjs';
@@ -53,30 +53,4 @@ export interface ActionSubmit extends ActionBaseProps {
53
53
  onClick?: MouseEventHandler<HTMLButtonElement>;
54
54
  }
55
55
  export type Action = ActionButton | ActionSubmit;
56
- export type Counter = {
57
- /** Antall tegn før telleren når maksimum og vi viser en feilmelding */
58
- maxLength: number;
59
- /**
60
- * Med teller vises en progress-bar i bunnen av tekstfeltet som krymper
61
- * ned fra 100% (null tegn skrevet) til 0% (maks antall tegn skrevet).
62
- * Om du vil skjule den, sett denne propen til true.
63
- *
64
- * @default false
65
- */
66
- hideProgress?: boolean;
67
- };
68
- export interface BaseTextAreaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "children"> {
69
- /**
70
- * Viser en teller i tekstfeltet når det har fokus.
71
- */
72
- counter?: Counter;
73
- /** Sett antall rader skjemafeltet ekspanderes til ved focus. Innholdet scroller om feltet fylles med mer innhold enn det er plass til. */
74
- rows?: number;
75
- inline?: boolean;
76
- startOpen?: boolean;
77
- /** Gjør så skjemafeltet ekspanderer seg til å vise alt innhold i stedet for å scrolle */
78
- autoExpand?: boolean;
79
- }
80
- export interface TextAreaProps extends Omit<InputGroupProps, "children">, BaseTextAreaProps {
81
- }
82
56
  export {};
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./components/accordion/Accordion.cjs"),o=require("./components/accordion/AccordionItem.cjs"),r=require("./components/autosuggest/Autosuggest.cjs"),s=require("./components/breadcrumb/Breadcrumb.cjs"),t=require("./components/breadcrumb/BreadcrumbItem.cjs"),n=require("./components/button/Button.cjs"),i=require("./components/card/Card.cjs"),a=require("./components/card/CardImage.cjs"),c=require("./components/card/NavCard.cjs"),u=require("./components/card/TaskCard.cjs"),p=require("./components/card/InfoCard.cjs"),m=require("./components/checkbox/Checkbox.cjs"),l=require("./components/checkbox-panel/CheckboxPanel.cjs"),x=require("./components/combobox/Combobox.cjs"),d=require("./components/cookie-consent/CookieConsent.cjs"),g=require("./components/cookie-consent/CookieConsentContext.cjs"),j=require("./components/countdown/Countdown.cjs"),b=require("./components/datepicker/DatePicker.cjs"),q=require("./components/datepicker/validation.cjs"),I=require("./components/datepicker/utils.cjs"),T=require("./components/feedback/Feedback.cjs"),k=require("./components/feedback/presets.cjs"),h=require("./components/file-input/File.cjs"),C=require("./components/file-input/FileInput.cjs"),S=require("./components/file-input/utils.cjs"),v=require("./components/flex/Flex.cjs"),M=require("./components/description-list/DescriptionList.cjs"),f=require("./components/expander/ExpandablePanel.cjs"),A=require("./components/expander/Expander.cjs"),E=require("./components/expander/deprecated/ExpandSection.cjs"),L=require("./components/icon/Icon.cjs"),R=require("./components/icon/icons/animated/ArrowVerticalAnimated.cjs"),B=require("./components/icon/icons/animated/ArrowHorizontalAnimated.cjs"),P=require("./components/icon/icons/animated/PlusRemoveAnimated.cjs"),w=require("./components/icon/icons/ArrowDownIcon.cjs"),F=require("./components/icon/icons/ArrowLeftIcon.cjs"),N=require("./components/icon/icons/ArrowNorthEastIcon.cjs"),D=require("./components/icon/icons/ArrowRightIcon.cjs"),V=require("./components/icon/icons/ArrowUpIcon.cjs"),y=require("./components/icon/icons/CalendarIcon.cjs"),O=require("./components/icon/icons/CheckIcon.cjs"),G=require("./components/icon/icons/ChevronDownIcon.cjs"),H=require("./components/icon/icons/ChevronLeftIcon.cjs"),W=require("./components/icon/icons/ChevronRightIcon.cjs"),U=require("./components/icon/icons/ChevronUpIcon.cjs"),K=require("./components/icon/icons/CloseIcon.cjs"),X=require("./components/icon/icons/CopyIcon.cjs"),_=require("./components/icon/icons/DotsIcon.cjs"),z=require("./components/icon/icons/DragIcon.cjs"),Q=require("./components/icon/icons/ErrorIcon.cjs"),J=require("./components/icon/icons/GreenCheckIcon.cjs"),Y=require("./components/icon/icons/HamburgerIcon.cjs"),Z=require("./components/icon/icons/InfoIcon.cjs"),$=require("./components/icon/icons/LinkIcon.cjs"),ee=require("./components/icon/icons/MinusIcon.cjs"),oe=require("./components/icon/icons/OpenInNewIcon.cjs"),re=require("./components/icon/icons/PenIcon.cjs"),se=require("./components/icon/icons/PlusIcon.cjs"),te=require("./components/icon/icons/QuestionIcon.cjs"),ne=require("./components/icon/icons/RedCrossIcon.cjs"),ie=require("./components/icon/icons/SearchIcon.cjs"),ae=require("./components/icon/icons/SuccessIcon.cjs"),ce=require("./components/icon/icons/ThumbDownIcon.cjs"),ue=require("./components/icon/icons/ThumbUpIcon.cjs"),pe=require("./components/icon/icons/TrashCanIcon.cjs"),me=require("./components/icon/icons/WarningIcon.cjs"),le=require("./components/icon-button/IconButton.cjs"),xe=require("./components/image/Image.cjs"),de=require("./components/input-group/FieldGroup.cjs"),ge=require("./components/input-group/InputGroup.cjs"),je=require("./components/input-group/Label.cjs"),be=require("./components/input-group/SupportLabel.cjs"),qe=require("./components/link/Link.cjs"),Ie=require("./components/link-list/LinkList.cjs"),Te=require("./components/list/List.cjs"),ke=require("./components/list/ListItem.cjs"),he=require("./components/loader/Loader.cjs"),Ce=require("./components/loader/skeletons/SkeletonAnimation.cjs"),Se=require("./components/loader/skeletons/SkeletonButton.cjs"),ve=require("./components/loader/skeletons/SkeletonCheckboxGroup.cjs"),Me=require("./components/loader/skeletons/SkeletonElement.cjs"),fe=require("./components/loader/skeletons/SkeletonInput.cjs"),Ae=require("./components/loader/skeletons/SkeletonRadioButtonGroup.cjs"),Ee=require("./components/loader/skeletons/SkeletonTable.cjs"),Le=require("./components/loader/skeletons/SkeletonTextArea.cjs"),Re=require("./components/logo/Logo.cjs"),Be=require("./components/logo/LogoStamp.cjs"),Pe=require("./components/logo/text-paths/ForsikringLevertAvFremtind.cjs"),we=require("./components/logo/text-paths/FraSB1ogDNB.cjs"),Fe=require("./components/logo/text-paths/InnovasjonFraFremtind.cjs"),Ne=require("./components/logo/text-paths/TeknologiFraFremtind.cjs"),De=require("./components/logo/text-paths/VartEgetForsikringsselskap.cjs"),Ve=require("./components/logo/text-paths/VartForsikringsselskap.cjs"),ye=require("./components/menu/Menu.cjs"),Oe=require("./components/menu/MenuItem.cjs"),Ge=require("./components/menu/MenuItemCheckbox.cjs"),He=require("./components/menu/MenuDivider.cjs"),We=require("./components/message/Message.cjs"),Ue=require("./components/message/FormErrorMessage.cjs"),Ke=require("./components/modal/Modal.cjs"),Xe=require("./components/modal/useModal.cjs"),_e=require("./components/nav-link/NavLink.cjs"),ze=require("./components/pagination/Pagination.cjs"),Qe=require("./components/popover/Popover.cjs"),Je=require("./components/progress-bar/ProgressBar.cjs"),Ye=require("./components/radio-button/RadioButton.cjs"),Ze=require("./components/radio-button/RadioButtonGroup.cjs"),$e=require("./components/radio-button/BaseRadioButton.cjs"),eo=require("./components/radio-panel/RadioPanel.cjs"),oo=require("./components/radio-panel/RadioPanelGroup.cjs"),ro=require("./components/select/Select.cjs"),so=require("./components/select/NativeSelect.cjs"),to=require("./components/summary-table/SummaryTable.cjs"),no=require("./components/summary-table/SummaryTableRow.cjs"),io=require("./components/system-message/SystemMessage.cjs"),ao=require("./components/table/DataTable.cjs"),co=require("./components/table/Table.cjs"),uo=require("./components/table/TableBody.cjs"),po=require("./components/table/TableCaption.cjs"),mo=require("./components/table/TableCell.cjs"),lo=require("./components/table/TableColumn.cjs"),xo=require("./components/table/TableColumnGroup.cjs"),go=require("./components/table/tableContext.cjs"),jo=require("./components/table/tableSectionContext.cjs"),bo=require("./components/table/TableFooter.cjs"),qo=require("./components/table/TableHead.cjs"),Io=require("./components/table/TableHeader.cjs"),To=require("./components/table/TablePagination.cjs"),ko=require("./components/table/TableRow.cjs"),ho=require("./components/table/ExpandableTableRow.cjs"),Co=require("./components/table/ExpandableTableRowController.cjs"),So=require("./components/table/utils.cjs"),vo=require("./components/tabs/NavTab.cjs"),Mo=require("./components/tabs/NavTabs.cjs"),fo=require("./components/tabs/Tabs.cjs"),Ao=require("./components/tabs/TabList.cjs"),Eo=require("./components/tabs/Tab.cjs"),Lo=require("./components/tabs/TabPanel.cjs"),Ro=require("./components/tag/Tag.cjs"),Bo=require("./components/text-input/BaseTextArea.cjs"),Po=require("./components/text-input/BaseTextInput.cjs"),wo=require("./components/text-input/TextArea.cjs"),Fo=require("./components/text-input/TextInput.cjs"),No=require("./components/toast/toastContext.cjs"),Do=require("./components/toggle-switch/ToggleSwitch.cjs"),Vo=require("./components/toggle-switch/ToggleSlider.cjs"),yo=require("./components/tooltip/Tooltip.cjs"),Oo=require("./components/tooltip/TooltipContent.cjs"),Go=require("./components/tooltip/TooltipTrigger.cjs"),Ho=require("./components/tooltip/PopupTip.cjs"),Wo=require("./components/ScreenReaderOnly.cjs"),Uo=require("./core/tokens.cjs"),Ko=require("./hooks/useAnimatedDetails/useAnimatedDetails.cjs"),Xo=require("./hooks/useAnimatedHeight/useAnimatedHeight.cjs"),_o=require("./hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs"),zo=require("./hooks/useAnimatedHeight/useAutoAnimateHeight.cjs"),Qo=require("./hooks/useBrowserPreferences/useBrowserPreferences.cjs"),Jo=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Yo=require("./hooks/useLocalStorage/useLocalStorage.cjs"),Zo=require("./hooks/useMutationObserver/useMutationObserver.cjs"),$o=require("./hooks/usePreviousValue/usePreviousValue.cjs"),er=require("./hooks/useProgressiveImg/useProgressiveImg.cjs"),or=require("./hooks/useScreen/useScreen.cjs"),rr=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),sr=require("./hooks/useAriaLiveRegion/useAriaLiveRegion.cjs"),tr=require("./hooks/useClickOutside/useClickOutside.cjs"),nr=require("./hooks/useFocusOutside/useFocusOutside.cjs"),ir=require("./hooks/useElementDimensions/useElementDimensions.cjs"),ar=require("./hooks/useId/useId.cjs"),cr=require("./hooks/useKeyListener/useKeyListener.cjs"),ur=require("./hooks/useListNavigation/useListNavigation.cjs"),pr=require("./hooks/useSwipeGesture/useSwipeGesture.cjs"),mr=require("../index-CaISwoxr.cjs"),lr=require("./utilities/formatters/util/formatNumber.cjs"),xr=require("./utilities/formatters/util/parseNumber.cjs"),dr=require("./utilities/formatters/util/registerWithMask.cjs"),gr=require("./utilities/formatters/avstand/formatAvstand.cjs"),jr=require("./utilities/formatters/bytes/formatBytes.cjs"),br=require("./utilities/formatters/date/formatDate.cjs"),qr=require("./utilities/formatters/fodselsnummer/formatFodselsnummer.cjs"),Ir=require("./utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs"),Tr=require("./utilities/formatters/kontonummer/formatKontonummer.cjs"),kr=require("./utilities/formatters/kortnummer/formatKortnummer.cjs"),hr=require("./utilities/formatters/telefonnummer/formatTelefonnummer.cjs"),Cr=require("./utilities/formatters/valuta/formatValuta.cjs"),Sr=require("./utilities/getThemeAndDensity.cjs"),vr=require("./utilities/polymorphism/mergeProps.cjs"),Mr=require("./utilities/polymorphism/mergeRefs.cjs"),fr=require("./utilities/polymorphism/SlotComponent.cjs"),Ar=require("./utilities/validators/isValidEpost/isValidEpost.cjs"),Er=require("./utilities/validators/isValidTelefonnummer/isValidTelefonnummer.cjs"),Lr=require("./utilities/validators/isValidRegistreringsnummer/isValidRegistreringsnummer.cjs"),Rr=require("./utilities/validators/isValidChassisnummer/isValidChassisnummer.cjs"),Br=require("./utilities/validators/isValidDogId/isValidDogId.cjs"),Pr=require("./utilities/validators/isExactLength/isExactLength.cjs"),wr=require("./utilities/validators/isInteger/isInteger.cjs"),Fr=require("./utilities/validators/isValidFodselsnummer/isValidFodselsnummer.cjs"),Nr=require("./utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.cjs"),Dr=require("./utilities/validators/isValidName/isValidName.cjs"),Vr=require("./utilities/validators/hasMinimumWords/hasMinimumWords.cjs"),yr=require("./utilities/validators/hasNoIllegalCharacters/hasNoIllegalCharacters.cjs"),Or=require("./utilities/tabListener.cjs"),Gr=require("./utilities/valuePair.cjs");exports.Accordion=e.Accordion,exports.AccordionItem=o.AccordionItem,exports.Autosuggest=r.Autosuggest,exports.Breadcrumb=s.Breadcrumb,exports.BreadcrumbItem=t.BreadcrumbItem,exports.Button=n.Button,exports.PrimaryButton=n.PrimaryButton,exports.SecondaryButton=n.SecondaryButton,exports.TertiaryButton=n.TertiaryButton,exports.Card=i.Card,exports.CardImage=a.CardImage,exports.InfoBlock=c.InfoBlock,exports.NavCard=c.NavCard,exports.TaskCard=u.TaskCard,exports.InfoCard=p.InfoCard,exports.Checkbox=m.Checkbox,exports.CheckboxPanel=l.CheckboxPanel,exports.Combobox=x.Combobox,exports.getComboboxValuePair=x.getComboboxValuePair,exports.CookieConsent=d.CookieConsent,exports.CookieConsentProvider=g.CookieConsentProvider,exports.useCookieConsent=g.useCookieConsent,exports.Countdown=j.Countdown,exports.DatePicker=b.DatePicker,exports.isCorrectFormat=q.isCorrectFormat,exports.isWithinLowerBound=q.isWithinLowerBound,exports.isWithinUpperBound=q.isWithinUpperBound,exports.formatInput=I.formatInput,exports.isBlurTargetOutside=I.isBlurTargetOutside,exports.parseDateString=I.parseDateString,exports.Feedback=T.Feedback,exports.PRESETS=k.PRESETS,exports.File=h.File,exports.FileInput=C.FileInput,exports.upload=S.upload,exports.Flex=v.Flex,exports.DescriptionDetail=M.DescriptionDetail,exports.DescriptionList=M.DescriptionList,exports.DescriptionTerm=M.DescriptionTerm,exports.ExpandablePanel=f.ExpandablePanel,exports.Expander=A.Expander,exports.ExpandSection=E.ExpandSection,exports.Icon=L.Icon,exports.ArrowVerticalAnimated=R.ArrowVerticalAnimated,exports.ArrowHorizontalAnimated=B.ArrowHorizontalAnimated,exports.PlusRemoveAnimated=P.PlusRemoveAnimated,exports.ArrowDownIcon=w.ArrowDownIcon,exports.ArrowLeftIcon=F.ArrowLeftIcon,exports.ArrowNorthEastIcon=N.ArrowNorthEastIcon,exports.ArrowRightIcon=D.ArrowRightIcon,exports.ArrowUpIcon=V.ArrowUpIcon,exports.CalendarIcon=y.CalendarIcon,exports.CheckIcon=O.CheckIcon,exports.ChevronDownIcon=G.ChevronDownIcon,exports.ChevronLeftIcon=H.ChevronLeftIcon,exports.ChevronRightIcon=W.ChevronRightIcon,exports.ChevronUpIcon=U.ChevronUpIcon,exports.CloseIcon=K.CloseIcon,exports.CopyIcon=X.CopyIcon,exports.DotsIcon=_.DotsIcon,exports.DragIcon=z.DragIcon,exports.ErrorIcon=Q.ErrorIcon,exports.GreenCheckIcon=J.GreenCheckIcon,exports.HamburgerIcon=Y.HamburgerIcon,exports.InfoIcon=Z.InfoIcon,exports.LinkIcon=$.LinkIcon,exports.MinusIcon=ee.MinusIcon,exports.OpenInNewIcon=oe.OpenInNewIcon,exports.PenIcon=re.PenIcon,exports.PlusIcon=se.PlusIcon,exports.QuestionIcon=te.QuestionIcon,exports.RedCrossIcon=ne.RedCrossIcon,exports.SearchIcon=ie.SearchIcon,exports.SuccessIcon=ae.SuccessIcon,exports.ThumbDownIcon=ce.ThumbDownIcon,exports.ThumbUpIcon=ue.ThumbUpIcon,exports.TrashCanIcon=pe.TrashCanIcon,exports.WarningIcon=me.WarningIcon,exports.IconButton=le.IconButton,exports.Image=xe.Image,exports.FieldGroup=de.FieldGroup,exports.InputGroup=ge.InputGroup,exports.Label=je.Label,exports.SupportLabel=be.SupportLabel,exports.Link=qe.Link,exports.LinkList=Ie.LinkList,exports.List=Te.List,exports.OrderedList=Te.OrderedList,exports.UnorderedList=Te.UnorderedList,exports.CheckListItem=ke.CheckListItem,exports.CrossListItem=ke.CrossListItem,exports.ListItem=ke.ListItem,exports.Loader=he.Loader,exports.SkeletonAnimation=Ce.SkeletonAnimation,exports.SkeletonButton=Se.SkeletonButton,exports.SkeletonCheckboxGroup=ve.SkeletonCheckboxGroup,exports.SkeletonElement=Me.SkeletonElement,exports.SkeletonInput=fe.SkeletonInput,exports.SkeletonRadioButtonGroup=Ae.SkeletonRadioButtonGroup,exports.SkeletonTable=Ee.SkeletonTable,exports.SkeletonTableHeader=Ee.SkeletonTableHeader,exports.SkeletonTableRow=Ee.SkeletonTableRow,exports.SkeletonTextArea=Le.SkeletonTextArea,exports.Logo=Re.Logo,exports.LogoStamp=Be.LogoStamp,exports.ForsikringLevertAvFremtind=Pe.ForsikringLevertAvFremtind,exports.FraSB1ogDNB=we.FraSB1ogDNB,exports.InnovasjonFraFremtind=Fe.InnovasjonFraFremtind,exports.TeknologiFraFremtind=Ne.TeknologiFraFremtind,exports.VartEgetForsikringsselskap=De.VartEgetForsikringsselskap,exports.VartForsikringsselskap=Ve.VartForsikringsselskap,exports.Menu=ye.Menu,exports.MenuItem=Oe.MenuItem,exports.MenuItemCheckbox=Ge.MenuItemCheckbox,exports.MenuDivider=He.MenuDivider,exports.ErrorMessage=We.ErrorMessage,exports.InfoMessage=We.InfoMessage,exports.SuccessMessage=We.SuccessMessage,exports.WarningMessage=We.WarningMessage,exports.FormErrorMessage=Ue.FormErrorMessage,exports.Modal=Ke.Modal,exports.ModalActions=Ke.ModalActions,exports.ModalBody=Ke.ModalBody,exports.ModalCloseButton=Ke.ModalCloseButton,exports.ModalContainer=Ke.ModalContainer,exports.ModalHeader=Ke.ModalHeader,exports.ModalOverlay=Ke.ModalOverlay,exports.ModalTitle=Ke.ModalTitle,exports.useModal=Xe.useModal,exports.NavLink=_e.NavLink,exports.Pagination=ze.Pagination,exports.Popover=Qe.Popover,exports.ProgressBar=Je.ProgressBar,exports.RadioButton=Ye.RadioButton,exports.RadioButtonGroup=Ze.RadioButtonGroup,exports.BaseRadioButton=$e.BaseRadioButton,exports.RadioPanel=eo.RadioPanel,exports.RadioPanelGroup=oo.RadioPanelGroup,exports.Select=ro.Select,exports.NativeSelect=so.NativeSelect,exports.SummaryTable=to.SummaryTable,exports.SummaryTableRow=no.SummaryTableRow,exports.ErrorSystemMessage=io.ErrorSystemMessage,exports.InfoSystemMessage=io.InfoSystemMessage,exports.SuccessSystemMessage=io.SuccessSystemMessage,exports.WarningSystemMessage=io.WarningSystemMessage,exports.DataTable=ao.DataTable,exports.Table=co.Table,exports.TableBody=uo.TableBody,exports.TableCaption=po.TableCaption,exports.TableCell=mo.TableCell,exports.TableColumn=lo.TableColumn,exports.TableColumnGroup=xo.TableColumnGroup,exports.TableContextProvider=go.TableContextProvider,exports.useTableContext=go.useTableContext,exports.TableSectionContextProvider=jo.TableSectionContextProvider,exports.useTableSectionContext=jo.useTableSectionContext,exports.TableFooter=bo.TableFooter,exports.TableHead=qo.TableHead,exports.TableHeader=Io.TableHeader,exports.TablePagination=To.TablePagination,exports.TableRow=ko.TableRow,exports.ExpandableTableRow=ho.ExpandableTableRow,exports.ExpandableTableRowController=Co.ExpandableTableRowController,exports.useSortableTableHeader=So.useSortableTableHeader,exports.NavTab=vo.NavTab,exports.NavTabs=Mo.NavTabs,exports.Tabs=fo.Tabs,exports.TabList=Ao.TabList,exports.Tab=Eo.Tab,exports.TabPanel=Lo.TabPanel,exports.ErrorTag=Ro.ErrorTag,exports.InfoTag=Ro.InfoTag,exports.SuccessTag=Ro.SuccessTag,exports.Tag=Ro.Tag,exports.WarningTag=Ro.WarningTag,exports.BaseTextArea=Bo.BaseTextArea,exports.BaseTextInput=Po.BaseTextInput,exports.TextArea=wo.TextArea,exports.TextInput=Fo.TextInput,exports.ToastProvider=No.ToastProvider,exports.useToast=No.useToast,exports.ToggleSwitch=Do.ToggleSwitch,exports.ToggleSlider=Vo.ToggleSlider,exports.Tooltip=yo.Tooltip,exports.TooltipContent=Oo.TooltipContent,exports.TooltipTrigger=Go.TooltipTrigger,exports.PopupTip=Ho.PopupTip,exports.ScreenReaderOnly=Wo.ScreenReaderOnly,exports.tokens=Uo,exports.useAnimatedDetails=Ko.useAnimatedDetails,exports.useAnimatedHeight=Xo.useAnimatedHeight,exports.useAnimatedHeightBetween=_o.useAnimatedHeightBetween,exports.useAutoAnimatedHeight=zo.useAutoAnimatedHeight,exports.useBrowserPreferences=Qo.useBrowserPreferences,exports.useIntersectionObserver=Jo.useIntersectionObserver,exports.useLocalStorage=Yo.useLocalStorage,exports.useMutationObserver=Zo.useMutationObserver,exports.usePreviousValue=$o.usePreviousValue,exports.useProgressiveImg=er.useProgressiveImg,exports.useScreen=or.useScreen,exports.useScrollIntoView=rr.useScrollIntoView,exports.useAriaLiveRegion=sr.useAriaLiveRegion,exports.useClickOutside=tr.useClickOutside,exports.useFocusOutside=nr.useFocusOutside,exports.useElementDimensions=ir.useElementDimensions,exports.useId=ar.useId,exports.useKeyListener=cr.useKeyListener,exports.useListNavigation=ur.useListNavigation,exports.useSwipeGesture=pr.useSwipeGesture,exports.unicode=mr.unicode,exports.formatNumber=lr.formatNumber,exports.parseNumber=xr.parseNumber,exports.registerWithFodselsnummerMask=dr.registerWithFodselsnummerMask,exports.registerWithKontonummerMask=dr.registerWithKontonummerMask,exports.registerWithKortnummerMask=dr.registerWithKortnummerMask,exports.registerWithMasks=dr.registerWithMasks,exports.registerWithTelefonnummerMask=dr.registerWithTelefonnummerMask,exports.formatAvstand=gr.formatAvstand,exports.formatBytes=jr.formatBytes,exports.formatDate=br.formatDate,exports.FODSELSNUMMER_REGEX=qr.FODSELSNUMMER_REGEX,exports.formatFodselsnummer=qr.formatFodselsnummer,exports.ORGANISASJONSNUMMER_REGEX=Ir.ORGANISASJONSNUMMER_REGEX,exports.formatOrganisasjonsnummer=Ir.formatOrganisasjonsnummer,exports.KONTONUMMER_REGEX=Tr.KONTONUMMER_REGEX,exports.formatKontonummer=Tr.formatKontonummer,exports.KORTNUMMER_REGEX=kr.KORTNUMMER_REGEX,exports.formatKortnummer=kr.formatKortnummer,exports.TELEFONNUMMER_REGEX=hr.TELEFONNUMMER_REGEX,exports.formatTelefonnummer=hr.formatTelefonnummer,exports.formatValuta=Cr.formatValuta,exports.getThemeAndDensity=Sr.getThemeAndDensity,exports.mergeProps=vr.mergeProps,exports.mergeRefs=Mr.mergeRefs,exports.SlotComponent=fr.SlotComponent,exports.isValidEpost=Ar.isValidEpost,exports.isValidTelefonnummer=Er.isValidTelefonnummer,exports.isValidRegistreringsnummer=Lr.isValidRegistreringsnummer,exports.isValidChassisnummer=Rr.isValidChassisnummer,exports.isValidDogId=Br.isValidDogId,exports.isExactLength=Pr.isExactLength,exports.isInteger=wr.isInteger,exports.isValidFodselsnummer=Fr.isValidFodselsnummer,exports.isValidOrganisasjonsnummer=Nr.isValidOrganisasjonsnummer,exports.isValidName=Dr.isValidName,exports.hasMinimumWords=Vr.hasMinimumWords,exports.hasNoIllegalCharacters=yr.hasNoIllegalCharacters,exports.initTabListener=Or.initTabListener,exports.getValuePair=Gr.getValuePair;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./components/accordion/Accordion.cjs"),o=require("./components/accordion/AccordionItem.cjs"),r=require("./components/autosuggest/Autosuggest.cjs"),s=require("./components/breadcrumb/Breadcrumb.cjs"),t=require("./components/breadcrumb/BreadcrumbItem.cjs"),n=require("./components/button/Button.cjs"),i=require("./components/card/Card.cjs"),a=require("./components/card/CardImage.cjs"),c=require("./components/card/NavCard.cjs"),u=require("./components/card/TaskCard.cjs"),p=require("./components/card/InfoCard.cjs"),m=require("./components/checkbox/Checkbox.cjs"),l=require("./components/checkbox-panel/CheckboxPanel.cjs"),x=require("./components/combobox/Combobox.cjs"),d=require("./components/cookie-consent/CookieConsent.cjs"),g=require("./components/cookie-consent/CookieConsentContext.cjs"),j=require("./components/countdown/Countdown.cjs"),b=require("./components/datepicker/DatePicker.cjs"),q=require("./components/datepicker/validation.cjs"),I=require("./components/datepicker/utils.cjs"),T=require("./components/feedback/Feedback.cjs"),k=require("./components/feedback/presets.cjs"),h=require("./components/file-input/File.cjs"),C=require("./components/file-input/FileInput.cjs"),S=require("./components/file-input/utils.cjs"),v=require("./components/flex/Flex.cjs"),M=require("./components/description-list/DescriptionList.cjs"),f=require("./components/expander/ExpandablePanel.cjs"),A=require("./components/expander/Expander.cjs"),E=require("./components/expander/deprecated/ExpandSection.cjs"),L=require("./components/icon/Icon.cjs"),R=require("./components/icon/icons/animated/ArrowVerticalAnimated.cjs"),B=require("./components/icon/icons/animated/ArrowHorizontalAnimated.cjs"),P=require("./components/icon/icons/animated/PlusRemoveAnimated.cjs"),w=require("./components/icon/icons/ArrowDownIcon.cjs"),F=require("./components/icon/icons/ArrowLeftIcon.cjs"),N=require("./components/icon/icons/ArrowNorthEastIcon.cjs"),D=require("./components/icon/icons/ArrowRightIcon.cjs"),V=require("./components/icon/icons/ArrowUpIcon.cjs"),y=require("./components/icon/icons/CalendarIcon.cjs"),O=require("./components/icon/icons/CheckIcon.cjs"),G=require("./components/icon/icons/ChevronDownIcon.cjs"),H=require("./components/icon/icons/ChevronLeftIcon.cjs"),W=require("./components/icon/icons/ChevronRightIcon.cjs"),U=require("./components/icon/icons/ChevronUpIcon.cjs"),K=require("./components/icon/icons/CloseIcon.cjs"),X=require("./components/icon/icons/CopyIcon.cjs"),_=require("./components/icon/icons/DotsIcon.cjs"),z=require("./components/icon/icons/DragIcon.cjs"),Q=require("./components/icon/icons/ErrorIcon.cjs"),J=require("./components/icon/icons/GreenCheckIcon.cjs"),Y=require("./components/icon/icons/HamburgerIcon.cjs"),Z=require("./components/icon/icons/InfoIcon.cjs"),$=require("./components/icon/icons/LinkIcon.cjs"),ee=require("./components/icon/icons/MinusIcon.cjs"),oe=require("./components/icon/icons/OpenInNewIcon.cjs"),re=require("./components/icon/icons/PenIcon.cjs"),se=require("./components/icon/icons/PlusIcon.cjs"),te=require("./components/icon/icons/QuestionIcon.cjs"),ne=require("./components/icon/icons/RedCrossIcon.cjs"),ie=require("./components/icon/icons/SearchIcon.cjs"),ae=require("./components/icon/icons/SuccessIcon.cjs"),ce=require("./components/icon/icons/ThumbDownIcon.cjs"),ue=require("./components/icon/icons/ThumbUpIcon.cjs"),pe=require("./components/icon/icons/TrashCanIcon.cjs"),me=require("./components/icon/icons/WarningIcon.cjs"),le=require("./components/icon-button/IconButton.cjs"),xe=require("./components/image/Image.cjs"),de=require("./components/input-group/FieldGroup.cjs"),ge=require("./components/input-group/InputGroup.cjs"),je=require("./components/input-group/Label.cjs"),be=require("./components/input-group/SupportLabel.cjs"),qe=require("./components/link/Link.cjs"),Ie=require("./components/link-list/LinkList.cjs"),Te=require("./components/list/List.cjs"),ke=require("./components/list/ListItem.cjs"),he=require("./components/loader/Loader.cjs"),Ce=require("./components/loader/skeletons/SkeletonAnimation.cjs"),Se=require("./components/loader/skeletons/SkeletonButton.cjs"),ve=require("./components/loader/skeletons/SkeletonCheckboxGroup.cjs"),Me=require("./components/loader/skeletons/SkeletonElement.cjs"),fe=require("./components/loader/skeletons/SkeletonInput.cjs"),Ae=require("./components/loader/skeletons/SkeletonRadioButtonGroup.cjs"),Ee=require("./components/loader/skeletons/SkeletonTable.cjs"),Le=require("./components/loader/skeletons/SkeletonTextArea.cjs"),Re=require("./components/logo/Logo.cjs"),Be=require("./components/logo/LogoStamp.cjs"),Pe=require("./components/logo/text-paths/ForsikringLevertAvFremtind.cjs"),we=require("./components/logo/text-paths/FraSB1ogDNB.cjs"),Fe=require("./components/logo/text-paths/InnovasjonFraFremtind.cjs"),Ne=require("./components/logo/text-paths/TeknologiFraFremtind.cjs"),De=require("./components/logo/text-paths/VartEgetForsikringsselskap.cjs"),Ve=require("./components/logo/text-paths/VartForsikringsselskap.cjs"),ye=require("./components/menu/Menu.cjs"),Oe=require("./components/menu/MenuItem.cjs"),Ge=require("./components/menu/MenuItemCheckbox.cjs"),He=require("./components/menu/MenuDivider.cjs"),We=require("./components/message/Message.cjs"),Ue=require("./components/message/FormErrorMessage.cjs"),Ke=require("./components/modal/Modal.cjs"),Xe=require("./components/modal/useModal.cjs"),_e=require("./components/nav-link/NavLink.cjs"),ze=require("./components/pagination/Pagination.cjs"),Qe=require("./components/popover/Popover.cjs"),Je=require("./components/progress-bar/ProgressBar.cjs"),Ye=require("./components/radio-button/RadioButton.cjs"),Ze=require("./components/radio-button/RadioButtonGroup.cjs"),$e=require("./components/radio-button/BaseRadioButton.cjs"),eo=require("./components/radio-panel/RadioPanel.cjs"),oo=require("./components/radio-panel/RadioPanelGroup.cjs"),ro=require("./components/select/Select.cjs"),so=require("./components/select/NativeSelect.cjs"),to=require("./components/summary-table/SummaryTable.cjs"),no=require("./components/summary-table/SummaryTableRow.cjs"),io=require("./components/system-message/SystemMessage.cjs"),ao=require("./components/table/DataTable.cjs"),co=require("./components/table/Table.cjs"),uo=require("./components/table/TableBody.cjs"),po=require("./components/table/TableCaption.cjs"),mo=require("./components/table/TableCell.cjs"),lo=require("./components/table/TableColumn.cjs"),xo=require("./components/table/TableColumnGroup.cjs"),go=require("./components/table/tableContext.cjs"),jo=require("./components/table/tableSectionContext.cjs"),bo=require("./components/table/TableFooter.cjs"),qo=require("./components/table/TableHead.cjs"),Io=require("./components/table/TableHeader.cjs"),To=require("./components/table/TablePagination.cjs"),ko=require("./components/table/TableRow.cjs"),ho=require("./components/table/ExpandableTableRow.cjs"),Co=require("./components/table/ExpandableTableRowController.cjs"),So=require("./components/table/utils.cjs"),vo=require("./components/tabs/NavTab.cjs"),Mo=require("./components/tabs/NavTabs.cjs"),fo=require("./components/tabs/Tabs.cjs"),Ao=require("./components/tabs/TabList.cjs"),Eo=require("./components/tabs/Tab.cjs"),Lo=require("./components/tabs/TabPanel.cjs"),Ro=require("./components/tag/Tag.cjs"),Bo=require("./components/text-area/BaseTextArea.cjs"),Po=require("./components/text-area/TextArea.cjs"),wo=require("./components/text-input/BaseTextInput.cjs"),Fo=require("./components/text-input/TextInput.cjs"),No=require("./components/toast/toastContext.cjs"),Do=require("./components/toggle-switch/ToggleSwitch.cjs"),Vo=require("./components/toggle-switch/ToggleSlider.cjs"),yo=require("./components/tooltip/Tooltip.cjs"),Oo=require("./components/tooltip/TooltipContent.cjs"),Go=require("./components/tooltip/TooltipTrigger.cjs"),Ho=require("./components/tooltip/PopupTip.cjs"),Wo=require("./components/ScreenReaderOnly.cjs"),Uo=require("./core/tokens.cjs"),Ko=require("./hooks/useAnimatedDetails/useAnimatedDetails.cjs"),Xo=require("./hooks/useAnimatedHeight/useAnimatedHeight.cjs"),_o=require("./hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs"),zo=require("./hooks/useAnimatedHeight/useAutoAnimateHeight.cjs"),Qo=require("./hooks/useBrowserPreferences/useBrowserPreferences.cjs"),Jo=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Yo=require("./hooks/useLocalStorage/useLocalStorage.cjs"),Zo=require("./hooks/useMutationObserver/useMutationObserver.cjs"),$o=require("./hooks/usePreviousValue/usePreviousValue.cjs"),er=require("./hooks/useProgressiveImg/useProgressiveImg.cjs"),or=require("./hooks/useScreen/useScreen.cjs"),rr=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),sr=require("./hooks/useAriaLiveRegion/useAriaLiveRegion.cjs"),tr=require("./hooks/useClickOutside/useClickOutside.cjs"),nr=require("./hooks/useFocusOutside/useFocusOutside.cjs"),ir=require("./hooks/useElementDimensions/useElementDimensions.cjs"),ar=require("./hooks/useId/useId.cjs"),cr=require("./hooks/useKeyListener/useKeyListener.cjs"),ur=require("./hooks/useListNavigation/useListNavigation.cjs"),pr=require("./hooks/useSwipeGesture/useSwipeGesture.cjs"),mr=require("../index-CaISwoxr.cjs"),lr=require("./utilities/formatters/util/formatNumber.cjs"),xr=require("./utilities/formatters/util/parseNumber.cjs"),dr=require("./utilities/formatters/util/registerWithMask.cjs"),gr=require("./utilities/formatters/avstand/formatAvstand.cjs"),jr=require("./utilities/formatters/bytes/formatBytes.cjs"),br=require("./utilities/formatters/date/formatDate.cjs"),qr=require("./utilities/formatters/fodselsnummer/formatFodselsnummer.cjs"),Ir=require("./utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs"),Tr=require("./utilities/formatters/kontonummer/formatKontonummer.cjs"),kr=require("./utilities/formatters/kortnummer/formatKortnummer.cjs"),hr=require("./utilities/formatters/telefonnummer/formatTelefonnummer.cjs"),Cr=require("./utilities/formatters/valuta/formatValuta.cjs"),Sr=require("./utilities/getThemeAndDensity.cjs"),vr=require("./utilities/polymorphism/mergeProps.cjs"),Mr=require("./utilities/polymorphism/mergeRefs.cjs"),fr=require("./utilities/polymorphism/SlotComponent.cjs"),Ar=require("./utilities/validators/isValidEpost/isValidEpost.cjs"),Er=require("./utilities/validators/isValidTelefonnummer/isValidTelefonnummer.cjs"),Lr=require("./utilities/validators/isValidRegistreringsnummer/isValidRegistreringsnummer.cjs"),Rr=require("./utilities/validators/isValidChassisnummer/isValidChassisnummer.cjs"),Br=require("./utilities/validators/isValidDogId/isValidDogId.cjs"),Pr=require("./utilities/validators/isExactLength/isExactLength.cjs"),wr=require("./utilities/validators/isInteger/isInteger.cjs"),Fr=require("./utilities/validators/isValidFodselsnummer/isValidFodselsnummer.cjs"),Nr=require("./utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.cjs"),Dr=require("./utilities/validators/isValidName/isValidName.cjs"),Vr=require("./utilities/validators/hasMinimumWords/hasMinimumWords.cjs"),yr=require("./utilities/validators/hasNoIllegalCharacters/hasNoIllegalCharacters.cjs"),Or=require("./utilities/tabListener.cjs"),Gr=require("./utilities/valuePair.cjs");exports.Accordion=e.Accordion,exports.AccordionItem=o.AccordionItem,exports.Autosuggest=r.Autosuggest,exports.Breadcrumb=s.Breadcrumb,exports.BreadcrumbItem=t.BreadcrumbItem,exports.Button=n.Button,exports.PrimaryButton=n.PrimaryButton,exports.SecondaryButton=n.SecondaryButton,exports.TertiaryButton=n.TertiaryButton,exports.Card=i.Card,exports.CardImage=a.CardImage,exports.InfoBlock=c.InfoBlock,exports.NavCard=c.NavCard,exports.TaskCard=u.TaskCard,exports.InfoCard=p.InfoCard,exports.Checkbox=m.Checkbox,exports.CheckboxPanel=l.CheckboxPanel,exports.Combobox=x.Combobox,exports.getComboboxValuePair=x.getComboboxValuePair,exports.CookieConsent=d.CookieConsent,exports.CookieConsentProvider=g.CookieConsentProvider,exports.useCookieConsent=g.useCookieConsent,exports.Countdown=j.Countdown,exports.DatePicker=b.DatePicker,exports.isCorrectFormat=q.isCorrectFormat,exports.isWithinLowerBound=q.isWithinLowerBound,exports.isWithinUpperBound=q.isWithinUpperBound,exports.formatInput=I.formatInput,exports.isBlurTargetOutside=I.isBlurTargetOutside,exports.parseDateString=I.parseDateString,exports.Feedback=T.Feedback,exports.PRESETS=k.PRESETS,exports.File=h.File,exports.FileInput=C.FileInput,exports.upload=S.upload,exports.Flex=v.Flex,exports.DescriptionDetail=M.DescriptionDetail,exports.DescriptionList=M.DescriptionList,exports.DescriptionTerm=M.DescriptionTerm,exports.ExpandablePanel=f.ExpandablePanel,exports.Expander=A.Expander,exports.ExpandSection=E.ExpandSection,exports.Icon=L.Icon,exports.ArrowVerticalAnimated=R.ArrowVerticalAnimated,exports.ArrowHorizontalAnimated=B.ArrowHorizontalAnimated,exports.PlusRemoveAnimated=P.PlusRemoveAnimated,exports.ArrowDownIcon=w.ArrowDownIcon,exports.ArrowLeftIcon=F.ArrowLeftIcon,exports.ArrowNorthEastIcon=N.ArrowNorthEastIcon,exports.ArrowRightIcon=D.ArrowRightIcon,exports.ArrowUpIcon=V.ArrowUpIcon,exports.CalendarIcon=y.CalendarIcon,exports.CheckIcon=O.CheckIcon,exports.ChevronDownIcon=G.ChevronDownIcon,exports.ChevronLeftIcon=H.ChevronLeftIcon,exports.ChevronRightIcon=W.ChevronRightIcon,exports.ChevronUpIcon=U.ChevronUpIcon,exports.CloseIcon=K.CloseIcon,exports.CopyIcon=X.CopyIcon,exports.DotsIcon=_.DotsIcon,exports.DragIcon=z.DragIcon,exports.ErrorIcon=Q.ErrorIcon,exports.GreenCheckIcon=J.GreenCheckIcon,exports.HamburgerIcon=Y.HamburgerIcon,exports.InfoIcon=Z.InfoIcon,exports.LinkIcon=$.LinkIcon,exports.MinusIcon=ee.MinusIcon,exports.OpenInNewIcon=oe.OpenInNewIcon,exports.PenIcon=re.PenIcon,exports.PlusIcon=se.PlusIcon,exports.QuestionIcon=te.QuestionIcon,exports.RedCrossIcon=ne.RedCrossIcon,exports.SearchIcon=ie.SearchIcon,exports.SuccessIcon=ae.SuccessIcon,exports.ThumbDownIcon=ce.ThumbDownIcon,exports.ThumbUpIcon=ue.ThumbUpIcon,exports.TrashCanIcon=pe.TrashCanIcon,exports.WarningIcon=me.WarningIcon,exports.IconButton=le.IconButton,exports.Image=xe.Image,exports.FieldGroup=de.FieldGroup,exports.InputGroup=ge.InputGroup,exports.Label=je.Label,exports.SupportLabel=be.SupportLabel,exports.Link=qe.Link,exports.LinkList=Ie.LinkList,exports.List=Te.List,exports.OrderedList=Te.OrderedList,exports.UnorderedList=Te.UnorderedList,exports.CheckListItem=ke.CheckListItem,exports.CrossListItem=ke.CrossListItem,exports.ListItem=ke.ListItem,exports.Loader=he.Loader,exports.SkeletonAnimation=Ce.SkeletonAnimation,exports.SkeletonButton=Se.SkeletonButton,exports.SkeletonCheckboxGroup=ve.SkeletonCheckboxGroup,exports.SkeletonElement=Me.SkeletonElement,exports.SkeletonInput=fe.SkeletonInput,exports.SkeletonRadioButtonGroup=Ae.SkeletonRadioButtonGroup,exports.SkeletonTable=Ee.SkeletonTable,exports.SkeletonTableHeader=Ee.SkeletonTableHeader,exports.SkeletonTableRow=Ee.SkeletonTableRow,exports.SkeletonTextArea=Le.SkeletonTextArea,exports.Logo=Re.Logo,exports.LogoStamp=Be.LogoStamp,exports.ForsikringLevertAvFremtind=Pe.ForsikringLevertAvFremtind,exports.FraSB1ogDNB=we.FraSB1ogDNB,exports.InnovasjonFraFremtind=Fe.InnovasjonFraFremtind,exports.TeknologiFraFremtind=Ne.TeknologiFraFremtind,exports.VartEgetForsikringsselskap=De.VartEgetForsikringsselskap,exports.VartForsikringsselskap=Ve.VartForsikringsselskap,exports.Menu=ye.Menu,exports.MenuItem=Oe.MenuItem,exports.MenuItemCheckbox=Ge.MenuItemCheckbox,exports.MenuDivider=He.MenuDivider,exports.ErrorMessage=We.ErrorMessage,exports.InfoMessage=We.InfoMessage,exports.SuccessMessage=We.SuccessMessage,exports.WarningMessage=We.WarningMessage,exports.FormErrorMessage=Ue.FormErrorMessage,exports.Modal=Ke.Modal,exports.ModalActions=Ke.ModalActions,exports.ModalBody=Ke.ModalBody,exports.ModalCloseButton=Ke.ModalCloseButton,exports.ModalContainer=Ke.ModalContainer,exports.ModalHeader=Ke.ModalHeader,exports.ModalOverlay=Ke.ModalOverlay,exports.ModalTitle=Ke.ModalTitle,exports.useModal=Xe.useModal,exports.NavLink=_e.NavLink,exports.Pagination=ze.Pagination,exports.Popover=Qe.Popover,exports.ProgressBar=Je.ProgressBar,exports.RadioButton=Ye.RadioButton,exports.RadioButtonGroup=Ze.RadioButtonGroup,exports.BaseRadioButton=$e.BaseRadioButton,exports.RadioPanel=eo.RadioPanel,exports.RadioPanelGroup=oo.RadioPanelGroup,exports.Select=ro.Select,exports.NativeSelect=so.NativeSelect,exports.SummaryTable=to.SummaryTable,exports.SummaryTableRow=no.SummaryTableRow,exports.ErrorSystemMessage=io.ErrorSystemMessage,exports.InfoSystemMessage=io.InfoSystemMessage,exports.SuccessSystemMessage=io.SuccessSystemMessage,exports.WarningSystemMessage=io.WarningSystemMessage,exports.DataTable=ao.DataTable,exports.Table=co.Table,exports.TableBody=uo.TableBody,exports.TableCaption=po.TableCaption,exports.TableCell=mo.TableCell,exports.TableColumn=lo.TableColumn,exports.TableColumnGroup=xo.TableColumnGroup,exports.TableContextProvider=go.TableContextProvider,exports.useTableContext=go.useTableContext,exports.TableSectionContextProvider=jo.TableSectionContextProvider,exports.useTableSectionContext=jo.useTableSectionContext,exports.TableFooter=bo.TableFooter,exports.TableHead=qo.TableHead,exports.TableHeader=Io.TableHeader,exports.TablePagination=To.TablePagination,exports.TableRow=ko.TableRow,exports.ExpandableTableRow=ho.ExpandableTableRow,exports.ExpandableTableRowController=Co.ExpandableTableRowController,exports.useSortableTableHeader=So.useSortableTableHeader,exports.NavTab=vo.NavTab,exports.NavTabs=Mo.NavTabs,exports.Tabs=fo.Tabs,exports.TabList=Ao.TabList,exports.Tab=Eo.Tab,exports.TabPanel=Lo.TabPanel,exports.ErrorTag=Ro.ErrorTag,exports.InfoTag=Ro.InfoTag,exports.SuccessTag=Ro.SuccessTag,exports.Tag=Ro.Tag,exports.WarningTag=Ro.WarningTag,exports.BaseTextArea=Bo.BaseTextArea,exports.TextArea=Po.TextArea,exports.BaseTextInput=wo.BaseTextInput,exports.TextInput=Fo.TextInput,exports.ToastProvider=No.ToastProvider,exports.useToast=No.useToast,exports.ToggleSwitch=Do.ToggleSwitch,exports.ToggleSlider=Vo.ToggleSlider,exports.Tooltip=yo.Tooltip,exports.TooltipContent=Oo.TooltipContent,exports.TooltipTrigger=Go.TooltipTrigger,exports.PopupTip=Ho.PopupTip,exports.ScreenReaderOnly=Wo.ScreenReaderOnly,exports.tokens=Uo,exports.useAnimatedDetails=Ko.useAnimatedDetails,exports.useAnimatedHeight=Xo.useAnimatedHeight,exports.useAnimatedHeightBetween=_o.useAnimatedHeightBetween,exports.useAutoAnimatedHeight=zo.useAutoAnimatedHeight,exports.useBrowserPreferences=Qo.useBrowserPreferences,exports.useIntersectionObserver=Jo.useIntersectionObserver,exports.useLocalStorage=Yo.useLocalStorage,exports.useMutationObserver=Zo.useMutationObserver,exports.usePreviousValue=$o.usePreviousValue,exports.useProgressiveImg=er.useProgressiveImg,exports.useScreen=or.useScreen,exports.useScrollIntoView=rr.useScrollIntoView,exports.useAriaLiveRegion=sr.useAriaLiveRegion,exports.useClickOutside=tr.useClickOutside,exports.useFocusOutside=nr.useFocusOutside,exports.useElementDimensions=ir.useElementDimensions,exports.useId=ar.useId,exports.useKeyListener=cr.useKeyListener,exports.useListNavigation=ur.useListNavigation,exports.useSwipeGesture=pr.useSwipeGesture,exports.unicode=mr.unicode,exports.formatNumber=lr.formatNumber,exports.parseNumber=xr.parseNumber,exports.registerWithFodselsnummerMask=dr.registerWithFodselsnummerMask,exports.registerWithKontonummerMask=dr.registerWithKontonummerMask,exports.registerWithKortnummerMask=dr.registerWithKortnummerMask,exports.registerWithMasks=dr.registerWithMasks,exports.registerWithTelefonnummerMask=dr.registerWithTelefonnummerMask,exports.formatAvstand=gr.formatAvstand,exports.formatBytes=jr.formatBytes,exports.formatDate=br.formatDate,exports.FODSELSNUMMER_REGEX=qr.FODSELSNUMMER_REGEX,exports.formatFodselsnummer=qr.formatFodselsnummer,exports.ORGANISASJONSNUMMER_REGEX=Ir.ORGANISASJONSNUMMER_REGEX,exports.formatOrganisasjonsnummer=Ir.formatOrganisasjonsnummer,exports.KONTONUMMER_REGEX=Tr.KONTONUMMER_REGEX,exports.formatKontonummer=Tr.formatKontonummer,exports.KORTNUMMER_REGEX=kr.KORTNUMMER_REGEX,exports.formatKortnummer=kr.formatKortnummer,exports.TELEFONNUMMER_REGEX=hr.TELEFONNUMMER_REGEX,exports.formatTelefonnummer=hr.formatTelefonnummer,exports.formatValuta=Cr.formatValuta,exports.getThemeAndDensity=Sr.getThemeAndDensity,exports.mergeProps=vr.mergeProps,exports.mergeRefs=Mr.mergeRefs,exports.SlotComponent=fr.SlotComponent,exports.isValidEpost=Ar.isValidEpost,exports.isValidTelefonnummer=Er.isValidTelefonnummer,exports.isValidRegistreringsnummer=Lr.isValidRegistreringsnummer,exports.isValidChassisnummer=Rr.isValidChassisnummer,exports.isValidDogId=Br.isValidDogId,exports.isExactLength=Pr.isExactLength,exports.isInteger=wr.isInteger,exports.isValidFodselsnummer=Fr.isValidFodselsnummer,exports.isValidOrganisasjonsnummer=Nr.isValidOrganisasjonsnummer,exports.isValidName=Dr.isValidName,exports.hasMinimumWords=Vr.hasMinimumWords,exports.hasNoIllegalCharacters=yr.hasNoIllegalCharacters,exports.initTabListener=Or.initTabListener,exports.getValuePair=Gr.getValuePair;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useId as n,useEffect as o}from"react";import a from"react-dom";import{SecondaryButton as i}from"../button/Button.js";import{ModalContainer as s,ModalOverlay as r,Modal as l,ModalHeader as d,ModalTitle as c,ModalBody as m,ModalActions as u}from"../modal/Modal.js";import{useModal as k}from"../modal/useModal.js";import{useInternalState as f}from"./CookieConsentContext.js";import{setConsentCookie as g,convertBooleanConsentObjectToConsentObject as p}from"./cookieConsentUtils.js";import{RequirementCheckbox as j}from"./RequirementCheckbox.js";const h=({blocking:h,onAccept:b,...C})=>{const{currentConsent:v,cookieName:y,cookieDomain:M,requirement:x,isOpen:O,setIsOpen:T,updateCurrentConsents:D}=f(),[I,B]=k({id:`jkl-cookie-modal-${n()}`,role:h?"alertdialog":"dialog",title:"Informasjonskapsler"});if(o((()=>{O?null==I||I.show():null==I||I.hide()}),[I,O]),o((()=>{const e=()=>T(!1);return null==I||I.on("hide",e),()=>{null==I||I.off("hide",e)}}),[I,T]),typeof document>"u")return null;if(typeof navigator<"u"&&!navigator.cookieEnabled)return b&&b({functional:"denied",marketing:"denied",statistics:"denied"}),null;const $=(e=p({functional:!0,statistics:!0,marketing:!0},x))=>{const t=Object.fromEntries(Object.entries(e).filter((([,e])=>typeof e<"u"))),n={...v,...t};g({consent:n,name:y,domain:M}),D(),null==b||b(n),null==I||I.hide()};return a.createPortal(e(s,{...B.container,...C,"data-cookie-consent-open":O,children:[t(r,{...B.overlay}),e(l,{component:"form",...B.modal,onSubmit:e=>{e.preventDefault();const t=new FormData(e.currentTarget),n=p({functional:"true"===t.get("functional"),statistics:"true"===t.get("statistics"),marketing:"true"===t.get("marketing")},x);$(n)},children:[t(d,{children:t(c,{...B.title,children:"Velg informasjonskapsler"})}),e(m,{children:[t("p",{children:"For at nettsidene skal fungere må vi bruke tekniske informasjonskaplser. Disse lagres derfor uten samtykke."}),x.functional&&t(j,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===v.functional,children:"Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg."},`functional-${v.functional}`),x.statistics&&t(j,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===v.statistics,children:"Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir brukt, slik at vi kan gjøre dem bedre og enklere å bruke."},`statistics-${v.statistics}`),x.marketing&&t(j,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===v.marketing,children:"Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier."},`marketing-${v.marketing}`)]}),e(u,{children:[t(i,{"data-testid":"jkl-cookie-consent-godta-alle",type:"button",onClick:()=>$(),children:"Godta alle"}),t(i,{"data-testid":"jkl-cookie-consent-godta",type:"submit",children:"Godta mine valg"})]})]})]}),document.body)};export{h as CookieConsent};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useId as n,useEffect as o}from"react";import a from"react-dom";import{SecondaryButton as i}from"../button/Button.js";import{ModalContainer as s,ModalOverlay as r,Modal as l,ModalHeader as d,ModalTitle as c,ModalBody as m,ModalActions as u}from"../modal/Modal.js";import{useModal as k}from"../modal/useModal.js";import{useInternalState as f}from"./CookieConsentContext.js";import{setConsentCookie as g,convertBooleanConsentObjectToConsentObject as p}from"./cookieConsentUtils.js";import{RequirementCheckbox as j}from"./RequirementCheckbox.js";const h=({blocking:h,onAccept:b,...C})=>{const{currentConsent:v,cookieName:y,cookieDomain:M,cookiePath:x,requirement:O,isOpen:T,setIsOpen:D,updateCurrentConsents:I}=f(),[B,$]=k({id:`jkl-cookie-modal-${n()}`,role:h?"alertdialog":"dialog",title:"Informasjonskapsler"});if(o((()=>{T?null==B||B.show():null==B||B.hide()}),[B,T]),o((()=>{const e=()=>D(!1);return null==B||B.on("hide",e),()=>{null==B||B.off("hide",e)}}),[B,D]),typeof document>"u")return null;if(typeof navigator<"u"&&!navigator.cookieEnabled)return b&&b({functional:"denied",marketing:"denied",statistics:"denied"}),null;const q=(e=p({functional:!0,statistics:!0,marketing:!0},O))=>{const t=Object.fromEntries(Object.entries(e).filter((([,e])=>typeof e<"u"))),n={...v,...t};g({consent:n,name:y,domain:M,path:x}),I(),null==b||b(n),null==B||B.hide()};return a.createPortal(e(s,{...$.container,...C,"data-cookie-consent-open":T,children:[t(r,{...$.overlay}),e(l,{component:"form",...$.modal,onSubmit:e=>{e.preventDefault();const t=new FormData(e.currentTarget),n=p({functional:"true"===t.get("functional"),statistics:"true"===t.get("statistics"),marketing:"true"===t.get("marketing")},O);q(n)},children:[t(d,{children:t(c,{...$.title,children:"Velg informasjonskapsler"})}),e(m,{children:[t("p",{children:"For at nettsidene skal fungere må vi bruke tekniske informasjonskaplser. Disse lagres derfor uten samtykke."}),O.functional&&t(j,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===v.functional,children:"Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg."},`functional-${v.functional}`),O.statistics&&t(j,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===v.statistics,children:"Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir brukt, slik at vi kan gjøre dem bedre og enklere å bruke."},`statistics-${v.statistics}`),O.marketing&&t(j,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===v.marketing,children:"Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier."},`marketing-${v.marketing}`)]}),e(u,{children:[t(i,{"data-testid":"jkl-cookie-consent-godta-alle",type:"button",onClick:()=>q(),children:"Godta alle"}),t(i,{"data-testid":"jkl-cookie-consent-godta",type:"submit",children:"Godta mine valg"})]})]})]}),document.body)};export{h as CookieConsent};
2
2
  //# sourceMappingURL=CookieConsent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { SecondaryButton } from \"../button/Button.js\";\nimport {\n Modal,\n ModalActions,\n ModalBody,\n ModalContainer,\n ModalHeader,\n ModalOverlay,\n ModalTitle,\n} from \"../modal/Modal.js\";\nimport { useModal } from \"../modal/useModal.js\";\nimport { useInternalState } from \"./CookieConsentContext.js\";\nimport {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox.js\";\nimport { AcceptConsentCallback, Consent } from \"./types.js\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n ...rest\n}: CookieConsentProps): JSX.Element | null => {\n const {\n currentConsent,\n cookieName,\n cookieDomain,\n requirement,\n isOpen,\n setIsOpen,\n updateCurrentConsents,\n } = useInternalState();\n\n const [instance, modalConfig] = useModal({\n id: `jkl-cookie-modal-${useId()}`,\n // The optional `role` attribute of the dialog element, either `dialog`\n // (default) or `alertdialog` to make it a modal (preventing closing on\n // click outside of ESC key).\n role: blocking ? \"alertdialog\" : \"dialog\",\n // The required dialog title, mandatory in the document\n // to provide context to assistive technology.\n title: \"Informasjonskapsler\",\n });\n\n useEffect(() => {\n if (isOpen) {\n instance?.show();\n } else {\n instance?.hide();\n }\n }, [instance, isOpen]);\n\n useEffect(() => {\n const onHide = () => setIsOpen(false);\n instance?.on(\"hide\", onHide);\n return () => {\n instance?.off(\"hide\", onHide);\n };\n }, [instance, setIsOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\n\n // Cookies are disabled in the browser\n if (typeof navigator !== \"undefined\" && !navigator.cookieEnabled) {\n if (onAccept) {\n onAccept({\n functional: \"denied\",\n marketing: \"denied\",\n statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: true,\n marketing: true,\n },\n requirement,\n ),\n ) => {\n const selectionWithoutEmptyValues = Object.fromEntries(\n Object.entries(selection).filter(\n ([, value]) => typeof value !== \"undefined\",\n ),\n );\n\n const updatedConsent: Consent = {\n ...currentConsent,\n ...selectionWithoutEmptyValues,\n };\n\n setConsentCookie({\n consent: updatedConsent,\n name: cookieName,\n domain: cookieDomain,\n });\n\n updateCurrentConsents();\n\n onAccept?.(updatedConsent);\n\n instance?.hide();\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n const formData = new FormData(e.currentTarget);\n\n const newConsents = convertBooleanConsentObjectToConsentObject(\n {\n functional: formData.get(\"functional\") === \"true\",\n statistics: formData.get(\"statistics\") === \"true\",\n marketing: formData.get(\"marketing\") === \"true\",\n },\n requirement,\n );\n\n accept(newConsents);\n };\n\n return ReactDOM.createPortal(\n <ModalContainer\n {...modalConfig.container}\n {...rest}\n data-cookie-consent-open={isOpen}\n >\n <ModalOverlay {...modalConfig.overlay} />\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Velg informasjonskapsler\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <p>\n For at nettsidene skal fungere må vi bruke tekniske\n informasjonskaplser. Disse lagres derfor uten samtykke.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={\n currentConsent.functional === \"accepted\"\n }\n key={`functional-${currentConsent.functional}`}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger\n om din bruk av nettsidene og hvilke innstillinger du\n har gjort, slik at du kan få funksjonalitet\n tilpasset deg.\n </RequirementCheckbox>\n )}\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={\n currentConsent.statistics === \"accepted\"\n }\n key={`statistics-${currentConsent.statistics}`}\n >\n Informasjonskapslene lagrer statistikk som hjelper\n oss med å forstå hvordan nettsidene blir brukt, slik\n at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={\n currentConsent.marketing === \"accepted\"\n }\n key={`marketing-${currentConsent.marketing}`}\n >\n Dette gjør at vi kan gi deg mer relevant og\n tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider,\n annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Godta alle\n </SecondaryButton>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Godta mine valg\n </SecondaryButton>\n </ModalActions>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["CookieConsent","blocking","onAccept","rest","currentConsent","cookieName","cookieDomain","requirement","isOpen","setIsOpen","updateCurrentConsents","useInternalState","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","onHide","on","off","document","navigator","cookieEnabled","functional","marketing","statistics","accept","selection","convertBooleanConsentObjectToConsentObject","selectionWithoutEmptyValues","Object","fromEntries","entries","filter","value","updatedConsent","setConsentCookie","consent","name","domain","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","Modal","component","modal","onSubmit","e","preventDefault","formData","FormData","currentTarget","newConsents","get","ModalHeader","ModalTitle","ModalBody","RequirementCheckbox","label","defaultChecked","ModalActions","SecondaryButton","type","onClick","body"],"mappings":"ulBA0BO,MAAMA,EAAgB,EACzBC,SAAAA,EACAC,SAAAA,KACGC,MAEG,MACFC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,YAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,KAEGC,EAAUC,GAAeC,EAAS,CACrCC,GAAI,oBAAoBC,MAIxBC,KAAMhB,EAAW,cAAgB,SAGjCiB,MAAO,wBAmBP,GAhBJC,GAAU,KACFX,EACA,MAAAI,GAAAA,EAAUQ,OAEV,MAAAR,GAAAA,EAAUS,MAAA,GAEf,CAACT,EAAUJ,IAEdW,GAAU,KACAG,MAAAA,EAAS,IAAMb,GAAU,GACrB,OAAA,MAAAG,GAAAA,EAAAW,GAAG,OAAQD,GACd,KACO,MAAAV,GAAAA,EAAAY,IAAI,OAAQF,EAAAA,CAAM,GAEjC,CAACV,EAAUH,WAEHgB,SAAa,IACb,OAAA,KAIX,UAAWC,UAAc,MAAgBA,UAAUC,cAC/C,OAAIzB,GACSA,EAAA,CACL0B,WAAY,SACZC,UAAW,SACXC,WAAY,WAIb,KAGLC,MAAAA,EAAS,CACXC,EAAYC,EACR,CACIL,YAAY,EACZE,YAAY,EACZD,WAAW,GAEftB,MAGJ,MAAM2B,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQL,GAAWM,QACtB,GAAIC,YAAkBA,EAAU,OAIlCC,EAA0B,IACzBpC,KACA8B,GAGUO,EAAA,CACbC,QAASF,EACTG,KAAMtC,EACNuC,OAAQtC,IAGUI,IAEtB,MAAAR,GAAAA,EAAWsC,GAEX,MAAA5B,GAAAA,EAAUS,MAAA,EAoBd,OAAOwB,EAASC,aACZC,EAACC,EAAA,IACOnC,EAAYoC,aACZ9C,EACJ,2BAA0BK,EAE1B0C,SAAA,CAACC,EAAAC,EAAA,IAAiBvC,EAAYwC,UAC9BN,EAACO,EAAM,CAAAC,UAAU,UAAW1C,EAAY2C,MAAaC,SAxBRC,IACjDA,EAAEC,iBAEF,MAAMC,EAAW,IAAIC,SAASH,EAAEI,eAE1BC,EAAc9B,EAChB,CACIL,WAA2C,SAA/BgC,EAASI,IAAI,cACzBlC,WAA2C,SAA/B8B,EAASI,IAAI,cACzBnC,UAAyC,SAA9B+B,EAASI,IAAI,cAE5BzD,GAGJwB,EAAOgC,EAAW,EAWVb,SAAA,CAAAC,EAACc,GACGf,SAACC,EAAAe,EAAA,IAAerD,EAAYK,MAAOgC,0CAItCiB,EACG,CAAAjB,SAAA,CAAAC,EAAC,KAAED,SAGH,gHACC3C,EAAYqB,YACTuB,EAACiB,EAAA,CACGzB,KAAK,aACL0B,MAAM,sBACNC,eACkC,aAA9BlE,EAAewB,WAGtBsB,SAAA,wKADQ,cAAc9C,EAAewB,cAQzCrB,EAAYuB,YACTqB,EAACiB,EAAA,CACGzB,KAAK,aACL0B,MAAM,oBACNC,eACkC,aAA9BlE,EAAe0B,WAGtBoB,SAAA,yJADQ,cAAc9C,EAAe0B,cAOzCvB,EAAYsB,WACTsB,EAACiB,EAAA,CACGzB,KAAK,YACL0B,MAAM,iCACNC,eACiC,aAA7BlE,EAAeyB,UAGtBqB,SAAA,uKADQ,aAAa9C,EAAeyB,kBAS5C0C,EACG,CAAArB,SAAA,CAAAC,EAACqB,EAAA,CACG,cAAY,gCACZC,KAAK,SACLC,QAAS,IAAM3C,IAClBmB,SAAA,eAGDC,EAACqB,EAAA,CACG,cAAY,2BACZC,KAAK,SACRvB,SAAA,6BAMbzB,SAASkD,KAAA"}
1
+ {"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { SecondaryButton } from \"../button/Button.js\";\nimport {\n Modal,\n ModalActions,\n ModalBody,\n ModalContainer,\n ModalHeader,\n ModalOverlay,\n ModalTitle,\n} from \"../modal/Modal.js\";\nimport { useModal } from \"../modal/useModal.js\";\nimport { useInternalState } from \"./CookieConsentContext.js\";\nimport {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox.js\";\nimport { AcceptConsentCallback, Consent } from \"./types.js\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n ...rest\n}: CookieConsentProps): JSX.Element | null => {\n const {\n currentConsent,\n cookieName,\n cookieDomain,\n cookiePath,\n requirement,\n isOpen,\n setIsOpen,\n updateCurrentConsents,\n } = useInternalState();\n\n const [instance, modalConfig] = useModal({\n id: `jkl-cookie-modal-${useId()}`,\n // The optional `role` attribute of the dialog element, either `dialog`\n // (default) or `alertdialog` to make it a modal (preventing closing on\n // click outside of ESC key).\n role: blocking ? \"alertdialog\" : \"dialog\",\n // The required dialog title, mandatory in the document\n // to provide context to assistive technology.\n title: \"Informasjonskapsler\",\n });\n\n useEffect(() => {\n if (isOpen) {\n instance?.show();\n } else {\n instance?.hide();\n }\n }, [instance, isOpen]);\n\n useEffect(() => {\n const onHide = () => setIsOpen(false);\n instance?.on(\"hide\", onHide);\n return () => {\n instance?.off(\"hide\", onHide);\n };\n }, [instance, setIsOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\n\n // Cookies are disabled in the browser\n if (typeof navigator !== \"undefined\" && !navigator.cookieEnabled) {\n if (onAccept) {\n onAccept({\n functional: \"denied\",\n marketing: \"denied\",\n statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: true,\n marketing: true,\n },\n requirement,\n ),\n ) => {\n const selectionWithoutEmptyValues = Object.fromEntries(\n Object.entries(selection).filter(\n ([, value]) => typeof value !== \"undefined\",\n ),\n );\n\n const updatedConsent: Consent = {\n ...currentConsent,\n ...selectionWithoutEmptyValues,\n };\n\n setConsentCookie({\n consent: updatedConsent,\n name: cookieName,\n domain: cookieDomain,\n path: cookiePath,\n });\n\n updateCurrentConsents();\n\n onAccept?.(updatedConsent);\n\n instance?.hide();\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n const formData = new FormData(e.currentTarget);\n\n const newConsents = convertBooleanConsentObjectToConsentObject(\n {\n functional: formData.get(\"functional\") === \"true\",\n statistics: formData.get(\"statistics\") === \"true\",\n marketing: formData.get(\"marketing\") === \"true\",\n },\n requirement,\n );\n\n accept(newConsents);\n };\n\n return ReactDOM.createPortal(\n <ModalContainer\n {...modalConfig.container}\n {...rest}\n data-cookie-consent-open={isOpen}\n >\n <ModalOverlay {...modalConfig.overlay} />\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Velg informasjonskapsler\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <p>\n For at nettsidene skal fungere må vi bruke tekniske\n informasjonskaplser. Disse lagres derfor uten samtykke.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={\n currentConsent.functional === \"accepted\"\n }\n key={`functional-${currentConsent.functional}`}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger\n om din bruk av nettsidene og hvilke innstillinger du\n har gjort, slik at du kan få funksjonalitet\n tilpasset deg.\n </RequirementCheckbox>\n )}\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={\n currentConsent.statistics === \"accepted\"\n }\n key={`statistics-${currentConsent.statistics}`}\n >\n Informasjonskapslene lagrer statistikk som hjelper\n oss med å forstå hvordan nettsidene blir brukt, slik\n at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={\n currentConsent.marketing === \"accepted\"\n }\n key={`marketing-${currentConsent.marketing}`}\n >\n Dette gjør at vi kan gi deg mer relevant og\n tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider,\n annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Godta alle\n </SecondaryButton>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Godta mine valg\n </SecondaryButton>\n </ModalActions>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["CookieConsent","blocking","onAccept","rest","currentConsent","cookieName","cookieDomain","cookiePath","requirement","isOpen","setIsOpen","updateCurrentConsents","useInternalState","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","onHide","on","off","document","navigator","cookieEnabled","functional","marketing","statistics","accept","selection","convertBooleanConsentObjectToConsentObject","selectionWithoutEmptyValues","Object","fromEntries","entries","filter","value","updatedConsent","setConsentCookie","consent","name","domain","path","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","Modal","component","modal","onSubmit","e","preventDefault","formData","FormData","currentTarget","newConsents","get","ModalHeader","ModalTitle","ModalBody","RequirementCheckbox","label","defaultChecked","ModalActions","SecondaryButton","type","onClick","body"],"mappings":"ulBA0BO,MAAMA,EAAgB,EACzBC,SAAAA,EACAC,SAAAA,KACGC,MAEG,MACFC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,KAEGC,EAAUC,GAAeC,EAAS,CACrCC,GAAI,oBAAoBC,MAIxBC,KAAMjB,EAAW,cAAgB,SAGjCkB,MAAO,wBAmBP,GAhBJC,GAAU,KACFX,EACA,MAAAI,GAAAA,EAAUQ,OAEV,MAAAR,GAAAA,EAAUS,MAAA,GAEf,CAACT,EAAUJ,IAEdW,GAAU,KACAG,MAAAA,EAAS,IAAMb,GAAU,GACrB,OAAA,MAAAG,GAAAA,EAAAW,GAAG,OAAQD,GACd,KACO,MAAAV,GAAAA,EAAAY,IAAI,OAAQF,EAAAA,CAAM,GAEjC,CAACV,EAAUH,WAEHgB,SAAa,IACb,OAAA,KAIX,UAAWC,UAAc,MAAgBA,UAAUC,cAC/C,OAAI1B,GACSA,EAAA,CACL2B,WAAY,SACZC,UAAW,SACXC,WAAY,WAIb,KAGLC,MAAAA,EAAS,CACXC,EAAYC,EACR,CACIL,YAAY,EACZE,YAAY,EACZD,WAAW,GAEftB,MAGJ,MAAM2B,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQL,GAAWM,QACtB,GAAIC,YAAkBA,EAAU,OAIlCC,EAA0B,IACzBrC,KACA+B,GAGUO,EAAA,CACbC,QAASF,EACTG,KAAMvC,EACNwC,OAAQvC,EACRwC,KAAMvC,IAGYI,IAEtB,MAAAT,GAAAA,EAAWuC,GAEX,MAAA5B,GAAAA,EAAUS,MAAA,EAoBd,OAAOyB,EAASC,aACZC,EAACC,EAAA,IACOpC,EAAYqC,aACZhD,EACJ,2BAA0BM,EAE1B2C,SAAA,CAACC,EAAAC,EAAA,IAAiBxC,EAAYyC,UAC9BN,EAACO,EAAM,CAAAC,UAAU,UAAW3C,EAAY4C,MAAaC,SAxBRC,IACjDA,EAAEC,iBAEF,MAAMC,EAAW,IAAIC,SAASH,EAAEI,eAE1BC,EAAc/B,EAChB,CACIL,WAA2C,SAA/BiC,EAASI,IAAI,cACzBnC,WAA2C,SAA/B+B,EAASI,IAAI,cACzBpC,UAAyC,SAA9BgC,EAASI,IAAI,cAE5B1D,GAGJwB,EAAOiC,EAAW,EAWVb,SAAA,CAAAC,EAACc,GACGf,SAACC,EAAAe,EAAA,IAAetD,EAAYK,MAAOiC,0CAItCiB,EACG,CAAAjB,SAAA,CAAAC,EAAC,KAAED,SAGH,gHACC5C,EAAYqB,YACTwB,EAACiB,EAAA,CACG1B,KAAK,aACL2B,MAAM,sBACNC,eACkC,aAA9BpE,EAAeyB,WAGtBuB,SAAA,wKADQ,cAAchD,EAAeyB,cAQzCrB,EAAYuB,YACTsB,EAACiB,EAAA,CACG1B,KAAK,aACL2B,MAAM,oBACNC,eACkC,aAA9BpE,EAAe2B,WAGtBqB,SAAA,yJADQ,cAAchD,EAAe2B,cAOzCvB,EAAYsB,WACTuB,EAACiB,EAAA,CACG1B,KAAK,YACL2B,MAAM,iCACNC,eACiC,aAA7BpE,EAAe0B,UAGtBsB,SAAA,uKADQ,aAAahD,EAAe0B,kBAS5C2C,EACG,CAAArB,SAAA,CAAAC,EAACqB,EAAA,CACG,cAAY,gCACZC,KAAK,SACLC,QAAS,IAAM5C,IAClBoB,SAAA,eAGDC,EAACqB,EAAA,CACG,cAAY,2BACZC,KAAK,SACRvB,SAAA,6BAMb1B,SAASmD,KAAA"}
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import o,{useState as t,useMemo as n,useContext as s}from"react";import{buildRequirementsObject as i,getConsentCookie as r,shouldShowConsentDialog as a}from"./cookieConsentUtils.js";const u="fremtind-cookie-consent",c=o.createContext(void 0),C=({children:o,cookieAdapter:s,marketing:C,functional:m,statistics:d,cookieName:l=u,cookieDomain:k})=>{const[p,f]=t((()=>Date.now())),w=n((()=>i({marketing:C,functional:m,statistics:d})),[C,m,d]),h=n((()=>r({adapter:s,name:l})??{marketing:null,functional:null,statistics:null}),[s,l,p]),[v,x]=t((()=>a(w,h)));return e(c.Provider,{value:{isOpen:v,setIsOpen:x,updateCurrentConsents:()=>f(Date.now()),requirement:w,currentConsent:h,cookieName:l,cookieDomain:k},children:o})},m=()=>{const e=o.useContext(c);if(void 0===e)throw new Error("CookieConsent must be used within a CookieConsentProvider");return e},d=()=>{const e=s(c);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModal:()=>{e.setIsOpen(!0)},consents:e.currentConsent}};export{C as CookieConsentProvider,u as DEFAULT_COOKIE_NAME,d as useCookieConsent,m as useInternalState};
1
+ import{jsx as e}from"react/jsx-runtime";import o,{useState as t,useMemo as n,useContext as s}from"react";import{buildRequirementsObject as i,getConsentCookie as r,shouldShowConsentDialog as a}from"./cookieConsentUtils.js";const u="fremtind-cookie-consent",c=o.createContext(void 0),C=({children:o,cookieAdapter:s,marketing:C,functional:m,statistics:k,cookieName:d=u,cookieDomain:l,cookiePath:p})=>{const[h,f]=t((()=>Date.now())),w=n((()=>i({marketing:C,functional:m,statistics:k})),[C,m,k]),v=n((()=>r({adapter:s,name:d})??{marketing:null,functional:null,statistics:null}),[s,d,h]),[x,D]=t((()=>a(w,v)));return e(c.Provider,{value:{isOpen:x,setIsOpen:D,updateCurrentConsents:()=>f(Date.now()),requirement:w,currentConsent:v,cookieName:d,cookieDomain:l,cookiePath:p},children:o})},m=()=>{const e=o.useContext(c);if(void 0===e)throw new Error("CookieConsent must be used within a CookieConsentProvider");return e},k=()=>{const e=s(c);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModal:()=>{e.setIsOpen(!0)},consents:e.currentConsent}};export{C as CookieConsentProvider,u as DEFAULT_COOKIE_NAME,k as useCookieConsent,m as useInternalState};
2
2
  //# sourceMappingURL=CookieConsentContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useContext, useMemo, useState } from \"react\";\nimport {\n buildRequirementsObject,\n getConsentCookie,\n shouldShowConsentDialog,\n} from \"./cookieConsentUtils.js\";\nimport {\n Consent,\n CookieConsentProviderProps,\n InternalContext,\n} from \"./types.js\";\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst Context = React.createContext<InternalContext | undefined>(undefined);\n\nexport const CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n marketing,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n}) => {\n const [timestamp, setTimestamp] = useState(() => Date.now());\n\n const requirement = useMemo(\n () => buildRequirementsObject({ marketing, functional, statistics }),\n [marketing, functional, statistics],\n );\n\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n marketing: null,\n functional: null,\n statistics: null,\n }\n );\n /* Use timestamp as a dependency to be ablet to force re-reading of cookie */\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [cookieAdapter, cookieName, timestamp]);\n\n const [isOpen, setIsOpen] = useState(() => {\n return shouldShowConsentDialog(requirement, consentCookie);\n });\n\n return (\n <Context.Provider\n value={{\n isOpen,\n setIsOpen,\n updateCurrentConsents: () => setTimestamp(Date.now()),\n requirement,\n currentConsent: consentCookie,\n cookieName,\n cookieDomain,\n }}\n >\n {children}\n </Context.Provider>\n );\n};\n\nexport const useInternalState = () => {\n const context = React.useContext(Context);\n if (context === undefined) {\n throw new Error(\n \"CookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n return context;\n};\n\ntype UseCookieConsent = {\n openConsentModal: () => void;\n consents: Consent;\n};\n\nexport const useCookieConsent = (): UseCookieConsent => {\n const context = useContext(Context);\n\n if (context === undefined) {\n throw new Error(\n \"useCookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n const openConsentModal = () => {\n context.setIsOpen(true);\n };\n\n const consents = context.currentConsent;\n\n return { openConsentModal, consents };\n};\n"],"names":["DEFAULT_COOKIE_NAME","Context","React","createContext","CookieConsentProvider","children","cookieAdapter","marketing","functional","statistics","cookieName","cookieDomain","timestamp","setTimestamp","useState","Date","now","requirement","useMemo","buildRequirementsObject","consentCookie","getConsentCookie","adapter","name","isOpen","setIsOpen","shouldShowConsentDialog","jsx","Provider","value","updateCurrentConsents","currentConsent","useInternalState","context","useContext","Error","useCookieConsent","openConsentModal","consents"],"mappings":"8NAYO,MAAMA,EAAsB,0BAE7BC,EAAUC,EAAMC,mBAA2C,GAEpDC,EAA8D,EACvEC,SAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAaV,EACbW,aAAAA,MAEM,MAACC,EAAWC,GAAgBC,GAAS,IAAMC,KAAKC,QAEhDC,EAAcC,GAChB,IAAMC,EAAwB,CAAEZ,UAAAA,EAAWC,WAAAA,EAAYC,WAAAA,KACvD,CAACF,EAAWC,EAAYC,IAGtBW,EAAgBF,GAAQ,IAEtBG,EAAiB,CAAEC,QAAShB,EAAeiB,KAAMb,KAAiB,CAC9DH,UAAW,KACXC,WAAY,KACZC,WAAY,OAKrB,CAACH,EAAeI,EAAYE,KAExBY,EAAQC,GAAaX,GAAS,IAC1BY,EAAwBT,EAAaG,KAI5C,OAAAO,EAAC1B,EAAQ2B,SAAR,CACGC,MAAO,CACHL,OAAAA,EACAC,UAAAA,EACAK,sBAAuB,IAAMjB,EAAaE,KAAKC,OAC/CC,YAAAA,EACAc,eAAgBX,EAChBV,WAAAA,EACAC,aAAAA,GAGHN,SAAAA,GAAA,EAKA2B,EAAmB,KACtBC,MAAAA,EAAU/B,EAAMgC,WAAWjC,GACjC,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,6DAIDF,OAAAA,CAAAA,EAQEG,EAAmB,KACtBH,MAAAA,EAAUC,EAAWjC,GAE3B,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,gEAUD,MAAA,CAAEE,iBANgB,KACrBJ,EAAQR,WAAU,EAAI,EAKCa,SAFVL,EAAQF"}
1
+ {"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useContext, useMemo, useState } from \"react\";\nimport {\n buildRequirementsObject,\n getConsentCookie,\n shouldShowConsentDialog,\n} from \"./cookieConsentUtils.js\";\nimport {\n Consent,\n CookieConsentProviderProps,\n InternalContext,\n} from \"./types.js\";\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst Context = React.createContext<InternalContext | undefined>(undefined);\n\nexport const CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n marketing,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n cookiePath,\n}) => {\n const [timestamp, setTimestamp] = useState(() => Date.now());\n\n const requirement = useMemo(\n () => buildRequirementsObject({ marketing, functional, statistics }),\n [marketing, functional, statistics],\n );\n\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n marketing: null,\n functional: null,\n statistics: null,\n }\n );\n /* Use timestamp as a dependency to be ablet to force re-reading of cookie */\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [cookieAdapter, cookieName, timestamp]);\n\n const [isOpen, setIsOpen] = useState(() => {\n return shouldShowConsentDialog(requirement, consentCookie);\n });\n\n return (\n <Context.Provider\n value={{\n isOpen,\n setIsOpen,\n updateCurrentConsents: () => setTimestamp(Date.now()),\n requirement,\n currentConsent: consentCookie,\n cookieName,\n cookieDomain,\n cookiePath,\n }}\n >\n {children}\n </Context.Provider>\n );\n};\n\nexport const useInternalState = () => {\n const context = React.useContext(Context);\n if (context === undefined) {\n throw new Error(\n \"CookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n return context;\n};\n\ntype UseCookieConsent = {\n openConsentModal: () => void;\n consents: Consent;\n};\n\nexport const useCookieConsent = (): UseCookieConsent => {\n const context = useContext(Context);\n\n if (context === undefined) {\n throw new Error(\n \"useCookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n const openConsentModal = () => {\n context.setIsOpen(true);\n };\n\n const consents = context.currentConsent;\n\n return { openConsentModal, consents };\n};\n"],"names":["DEFAULT_COOKIE_NAME","Context","React","createContext","CookieConsentProvider","children","cookieAdapter","marketing","functional","statistics","cookieName","cookieDomain","cookiePath","timestamp","setTimestamp","useState","Date","now","requirement","useMemo","buildRequirementsObject","consentCookie","getConsentCookie","adapter","name","isOpen","setIsOpen","shouldShowConsentDialog","jsx","Provider","value","updateCurrentConsents","currentConsent","useInternalState","context","useContext","Error","useCookieConsent","openConsentModal","consents"],"mappings":"8NAYO,MAAMA,EAAsB,0BAE7BC,EAAUC,EAAMC,mBAA2C,GAEpDC,EAA8D,EACvEC,SAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAaV,EACbW,aAAAA,EACAC,WAAAA,MAEM,MAACC,EAAWC,GAAgBC,GAAS,IAAMC,KAAKC,QAEhDC,EAAcC,GAChB,IAAMC,EAAwB,CAAEb,UAAAA,EAAWC,WAAAA,EAAYC,WAAAA,KACvD,CAACF,EAAWC,EAAYC,IAGtBY,EAAgBF,GAAQ,IAEtBG,EAAiB,CAAEC,QAASjB,EAAekB,KAAMd,KAAiB,CAC9DH,UAAW,KACXC,WAAY,KACZC,WAAY,OAKrB,CAACH,EAAeI,EAAYG,KAExBY,EAAQC,GAAaX,GAAS,IAC1BY,EAAwBT,EAAaG,KAI5C,OAAAO,EAAC3B,EAAQ4B,SAAR,CACGC,MAAO,CACHL,OAAAA,EACAC,UAAAA,EACAK,sBAAuB,IAAMjB,EAAaE,KAAKC,OAC/CC,YAAAA,EACAc,eAAgBX,EAChBX,WAAAA,EACAC,aAAAA,EACAC,WAAAA,GAGHP,SAAAA,GAAA,EAKA4B,EAAmB,KACtBC,MAAAA,EAAUhC,EAAMiC,WAAWlC,GACjC,QAAgB,IAAZiC,EACA,MAAM,IAAIE,MACN,6DAIDF,OAAAA,CAAAA,EAQEG,EAAmB,KACtBH,MAAAA,EAAUC,EAAWlC,GAE3B,QAAgB,IAAZiC,EACA,MAAM,IAAIE,MACN,gEAUD,MAAA,CAAEE,iBANgB,KACrBJ,EAAQR,WAAU,EAAI,EAKCa,SAFVL,EAAQF"}
@@ -3,11 +3,12 @@ export declare const getConsentCookie: ({ adapter, name, }: {
3
3
  adapter?: () => Consent | undefined;
4
4
  name: string;
5
5
  }) => Consent | undefined;
6
- export declare const setConsentCookie: ({ consent, maxAge, name, domain, }: {
6
+ export declare const setConsentCookie: ({ consent, maxAge, name, domain, path, }: {
7
7
  consent: Consent;
8
8
  maxAge?: number;
9
9
  name: string;
10
10
  domain?: string;
11
+ path?: string;
11
12
  }) => void;
12
13
  export declare const shouldShowConsentDialog: (requirement: ConsentRequirement, consent: Consent | undefined) => boolean;
13
14
  export declare const convertBooleanToConsentValue: (formValue: boolean | undefined) => ConsentState;
@@ -1,2 +1,2 @@
1
- const t=({adapter:t,name:e})=>{const n=(t=>{if(typeof document>"u")return;const e=document.cookie.split(";").map((t=>t.trim().split("="))).find((e=>e[0]===t));return e||void 0})(e);return n?JSON.parse(n[1]):t?t():void 0},e=({consent:t,maxAge:e=10368e3,name:n,domain:o})=>{document.cookie=[`${n}=${JSON.stringify(t)}`,`max-age=${e}`,"SameSite=Lax",!!o&&`domain=${o}`].filter((t=>t)).join(";")},n=(t,e)=>{if(e){const n=new Map(Object.entries(e)),o=Object.entries(t);for(const[t,e]of o)if(e&&null===n.get(t))return!0;return!1}return Object.values(t).some((t=>t))},o=t=>typeof t>"u"?null:!1===t||"false"===String(t).toLowerCase()?"denied":"accepted",i=(t,e)=>({functional:e.functional?o(t.functional):void 0,statistics:e.statistics?o(t.statistics):void 0,marketing:e.marketing?o(t.marketing):void 0}),s=({marketing:t,functional:e,statistics:n})=>({...t&&{marketing:t},...e&&{functional:e},...n&&{statistics:n}});export{s as buildRequirementsObject,i as convertBooleanConsentObjectToConsentObject,o as convertBooleanToConsentValue,t as getConsentCookie,e as setConsentCookie,n as shouldShowConsentDialog};
1
+ const t=({adapter:t,name:e})=>{const n=(t=>{if(typeof document>"u")return;const e=document.cookie.split(";").map((t=>t.trim().split("="))).find((e=>e[0]===t));return e||void 0})(e);return n?JSON.parse(n[1]):t?t():void 0},e=({consent:t,maxAge:e=10368e3,name:n,domain:o,path:i})=>{document.cookie=[`${n}=${JSON.stringify(t)}`,`max-age=${e}`,"SameSite=Lax",!!o&&`domain=${o}`,!!i&&`path=${i}`].filter((t=>t)).join(";")},n=(t,e)=>{if(e){const n=new Map(Object.entries(e)),o=Object.entries(t);for(const[t,e]of o)if(e&&null===n.get(t))return!0;return!1}return Object.values(t).some((t=>t))},o=t=>typeof t>"u"?null:!1===t||"false"===String(t).toLowerCase()?"denied":"accepted",i=(t,e)=>({functional:e.functional?o(t.functional):void 0,statistics:e.statistics?o(t.statistics):void 0,marketing:e.marketing?o(t.marketing):void 0}),s=({marketing:t,functional:e,statistics:n})=>({...t&&{marketing:t},...e&&{functional:e},...n&&{statistics:n}});export{s as buildRequirementsObject,i as convertBooleanConsentObjectToConsentObject,o as convertBooleanToConsentValue,t as getConsentCookie,e as setConsentCookie,n as shouldShowConsentDialog};
2
2
  //# sourceMappingURL=cookieConsentUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types.js\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n `SameSite=Lax`,\n !!domain && `domain=${domain}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (\n requirement: ConsentRequirement,\n consent: Consent | undefined,\n): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some(\n (requirementValue) => requirementValue,\n );\n } else {\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n }\n};\n\nexport const convertBooleanToConsentValue = (\n formValue: boolean | undefined,\n): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n requirement: ConsentRequirement,\n): Consent => {\n return {\n functional: requirement.functional\n ? convertBooleanToConsentValue(consent.functional)\n : undefined,\n statistics: requirement.statistics\n ? convertBooleanToConsentValue(consent.statistics)\n : undefined,\n marketing: requirement.marketing\n ? convertBooleanToConsentValue(consent.marketing)\n : undefined,\n };\n};\n\nexport const buildRequirementsObject = ({\n marketing,\n functional,\n statistics,\n}: ConsentRequirement) => {\n return {\n ...(marketing && { marketing }),\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["getConsentCookie","adapter","name","cookie","document","split","map","s","trim","find","c","getCookie","JSON","parse","setConsentCookie","consent","maxAge","domain","stringify","filter","f","join","shouldShowConsentDialog","requirement","consentMap","Map","Object","entries","requirementEntries","required","get","values","some","requirementValue","convertBooleanToConsentValue","formValue","String","toLowerCase","convertBooleanConsentObjectToConsentObject","functional","statistics","marketing","buildRequirementsObject"],"mappings":"AAEA,MAoBaA,EAAmB,EAC5BC,QAAAA,EACAC,KAAAA,MAKMC,MAAAA,EA3BQ,CAACD,IACX,UAAOE,SAAa,IACb,OAGLD,MAAAA,EAASC,SAASD,OAEnBE,MAAM,KAENC,KAAKC,GAAMA,EAAEC,OAAOH,MAAM,OAE1BI,MAAMC,GAAMA,EAAE,KAAOR,IAErBC,OAAAA,QAAAA,CAIEA,EAUQQ,CAAUT,GAErBC,OAAAA,EACgBS,KAAKC,MAAMV,EAAO,IAKlCF,EACOA,SADPA,CACe,EASVa,EAAmB,EAC5BC,QAAAA,EACAC,OAAAA,EAAS,QACTd,KAAAA,EACAe,OAAAA,MAOAb,SAASD,OAAS,CACd,GAAGD,KAAQU,KAAKM,UAAUH,KAC1B,WAAWC,IACX,iBACEC,GAAU,UAAUA,KAErBE,QAAQC,GAAMA,IACdC,KAAK,IAAG,EAGJC,EAA0B,CACnCC,EACAR,KAEA,GAAKA,EAKE,CAEGS,MAAAA,EAAa,IAAIC,IAAIC,OAAOC,QAAQZ,IAGpCa,EAAqBF,OAAOC,QAAQJ,GAE/B,IAAA,MAACrB,EAAM2B,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBL,EAAWM,IAAI5B,GACR,OAAA,EAIR,OAAA,CACX,CAvBW,OAAAwB,OAAOK,OAAOR,GAAaS,MAC7BC,GAAqBA,GAAA,EAyBrBC,EACTC,UAEWA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,WAGEC,EAA6C,CACtDvB,EACAQ,KAEO,CACHgB,WAAYhB,EAAYgB,WAClBL,EAA6BnB,EAAQwB,iBACrC,EACNC,WAAYjB,EAAYiB,WAClBN,EAA6BnB,EAAQyB,iBACrC,EACNC,UAAWlB,EAAYkB,UACjBP,EAA6BnB,EAAQ0B,gBACrC,IAIDC,EAA0B,EACnCD,UAAAA,EACAF,WAAAA,EACAC,WAAAA,MAEO,IACCC,GAAa,CAAEA,UAAAA,MACfF,GAAc,CAAEA,WAAAA,MAChBC,GAAc,CAAEA,WAAAA"}
1
+ {"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types.js\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n path,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n path?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n `SameSite=Lax`,\n !!domain && `domain=${domain}`,\n !!path && `path=${path}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (\n requirement: ConsentRequirement,\n consent: Consent | undefined,\n): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some(\n (requirementValue) => requirementValue,\n );\n } else {\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n }\n};\n\nexport const convertBooleanToConsentValue = (\n formValue: boolean | undefined,\n): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n requirement: ConsentRequirement,\n): Consent => {\n return {\n functional: requirement.functional\n ? convertBooleanToConsentValue(consent.functional)\n : undefined,\n statistics: requirement.statistics\n ? convertBooleanToConsentValue(consent.statistics)\n : undefined,\n marketing: requirement.marketing\n ? convertBooleanToConsentValue(consent.marketing)\n : undefined,\n };\n};\n\nexport const buildRequirementsObject = ({\n marketing,\n functional,\n statistics,\n}: ConsentRequirement) => {\n return {\n ...(marketing && { marketing }),\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["getConsentCookie","adapter","name","cookie","document","split","map","s","trim","find","c","getCookie","JSON","parse","setConsentCookie","consent","maxAge","domain","path","stringify","filter","f","join","shouldShowConsentDialog","requirement","consentMap","Map","Object","entries","requirementEntries","required","get","values","some","requirementValue","convertBooleanToConsentValue","formValue","String","toLowerCase","convertBooleanConsentObjectToConsentObject","functional","statistics","marketing","buildRequirementsObject"],"mappings":"AAEA,MAoBaA,EAAmB,EAC5BC,QAAAA,EACAC,KAAAA,MAKMC,MAAAA,EA3BQ,CAACD,IACX,UAAOE,SAAa,IACb,OAGLD,MAAAA,EAASC,SAASD,OAEnBE,MAAM,KAENC,KAAKC,GAAMA,EAAEC,OAAOH,MAAM,OAE1BI,MAAMC,GAAMA,EAAE,KAAOR,IAErBC,OAAAA,QAAAA,CAIEA,EAUQQ,CAAUT,GAErBC,OAAAA,EACgBS,KAAKC,MAAMV,EAAO,IAKlCF,EACOA,SADPA,CACe,EASVa,EAAmB,EAC5BC,QAAAA,EACAC,OAAAA,EAAS,QACTd,KAAAA,EACAe,OAAAA,EACAC,KAAAA,MAQAd,SAASD,OAAS,CACd,GAAGD,KAAQU,KAAKO,UAAUJ,KAC1B,WAAWC,IACX,iBACEC,GAAU,UAAUA,MACpBC,GAAQ,QAAQA,KAEjBE,QAAQC,GAAMA,IACdC,KAAK,IAAG,EAGJC,EAA0B,CACnCC,EACAT,KAEA,GAAKA,EAKE,CAEGU,MAAAA,EAAa,IAAIC,IAAIC,OAAOC,QAAQb,IAGpCc,EAAqBF,OAAOC,QAAQJ,GAE/B,IAAA,MAACtB,EAAM4B,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBL,EAAWM,IAAI7B,GACR,OAAA,EAIR,OAAA,CACX,CAvBW,OAAAyB,OAAOK,OAAOR,GAAaS,MAC7BC,GAAqBA,GAAA,EAyBrBC,EACTC,UAEWA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,WAGEC,EAA6C,CACtDxB,EACAS,KAEO,CACHgB,WAAYhB,EAAYgB,WAClBL,EAA6BpB,EAAQyB,iBACrC,EACNC,WAAYjB,EAAYiB,WAClBN,EAA6BpB,EAAQ0B,iBACrC,EACNC,UAAWlB,EAAYkB,UACjBP,EAA6BpB,EAAQ2B,gBACrC,IAIDC,EAA0B,EACnCD,UAAAA,EACAF,WAAAA,EACAC,WAAAA,MAEO,IACCC,GAAa,CAAEA,UAAAA,MACfF,GAAc,CAAEA,WAAAA,MAChBC,GAAc,CAAEA,WAAAA"}
@@ -19,9 +19,11 @@ export type InternalContext = {
19
19
  currentConsent: Consent;
20
20
  cookieName: string;
21
21
  cookieDomain?: string;
22
+ cookiePath?: string;
22
23
  };
23
24
  export type CookieConsentProviderProps = Partial<ConsentRequirement> & WithChildren & {
24
25
  cookieAdapter?: () => Consent | undefined;
25
26
  cookieName?: string;
26
27
  cookieDomain?: string;
28
+ cookiePath?: string;
27
29
  };
@@ -1,5 +1,5 @@
1
1
  import { ReactElement, ReactNode } from 'react';
2
- import { BaseTextAreaProps } from '../text-input/types.js';
2
+ import { BaseTextAreaProps } from '../text-area/types.js';
3
3
  import { ContactQuestionProps, FeedbackOption, FeedbackType, FollowupProps } from './types.js';
4
4
  export type FeedbackProps = {
5
5
  className?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Feedback.js","sources":["../../../../src/components/feedback/Feedback.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\nimport { BaseTextAreaProps } from \"../text-input/types.js\";\nimport { FeedbackContextProvider } from \"./feedbackContext.js\";\nimport { Followup } from \"./followup/Followup.js\";\nimport { MainQuestion } from \"./main-question/MainQuestion.js\";\nimport { ContactQuestion } from \"./questions/ContactQuestion.js\";\nimport {\n ContactQuestionProps,\n FeedbackOption,\n FeedbackType,\n FollowupProps,\n} from \"./types.js\";\n\nexport type FeedbackProps = {\n className?: string;\n /** Velg typen alternativer, Smiley eller RadioButtons. */\n type: \"radio\" | \"smiley\";\n /** Spørsmålet som stilles til brukeren */\n label: string;\n /** Hjelpetekst til hovedspørsmålet */\n helpLabel?: string;\n /** Svaralternativer til spørsmålet */\n options: FeedbackOption[];\n /** Dersom du vil stille et åpent spørsmål i tillegg kan du sette denne til en truthy verdi */\n addOnQuestion?:\n | {\n /** Spørsmålet du vil stille */\n label?: string;\n /** Eventuell hjelpetekst. Om du ikke spesifiserer en vil det vises en påminnelse om å ikke skrive inn personling informasjon. */\n helpLabel?: string;\n }\n | boolean;\n /** Lar deg tilpasse meldingen som kommer når brukeren sender inn tilbakemeldingen. */\n successMessage?: {\n title: string;\n children: ReactNode;\n };\n /**\n * Funksjon for å håndtere innsending av tilbakemelding\n * @param value Verdien av tilbakemeldingen. Dette er et objekt med følgende egenskaper:\n * - `feedbackValue`: Selve verdien av tilbakemeldingen (format varierer etter spørsmålstype)\n * - `intentionalSubmit`: Er `true` hvis brukeren aktivt sendte inn skjemaet, `false` hvis skjemaet ble sendt inn automatisk\n * - `message`: Eventuell utfyllende melding fra bruker. Blir kun sendt inn ved aktiv innsending\n */\n onSubmit: (value: FeedbackType) => void;\n followup?: FollowupProps;\n contactQuestion?: ContactQuestionProps;\n /**\n * Hvis du ønsker at Feedback formen skal eksponeres som et landmark kan du sende inn\n * hva du ønsker at en skjermleser skal kalle den her. Bare eksponer Feedback som et\n * landmark på sider der den er en viktig del av innholdet, feks en kvitteringsside\n * eller et annet sted det å kunne gi tilbakemelding vil føles naturlig eller forventet\n * for brukeren.\n */\n landmarkLabel?: string;\n} & Pick<BaseTextAreaProps, \"counter\">;\n\nexport const Feedback = ({\n className,\n followup,\n contactQuestion,\n counter,\n landmarkLabel,\n ...mainQuestionProps\n}: FeedbackProps): ReactElement => {\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\n const [followupStarted, setFollowupStarted] = useState(false);\n const [followupSubmitted, setFollowupSubmitted] = useState(false);\n const [contactSubmitted, setContactSubmitted] = useState(false);\n\n return (\n <div\n className={`jkl-feedback ${className || \"\"}`}\n data-testid=\"feedback\"\n >\n <FeedbackContextProvider\n value={{\n feedbackSubmitted,\n followupStarted,\n followupSubmitted,\n contactSubmitted,\n counter,\n landmarkLabel,\n setFeedbackSubmitted,\n setFollowupStarted,\n setFollowupSubmitted,\n setContactSubmitted,\n }}\n >\n {!followupStarted && <MainQuestion {...mainQuestionProps} />}\n {feedbackSubmitted && !contactSubmitted && followup && (\n <Followup {...followup} />\n )}\n {contactQuestion && (\n <div aria-live=\"polite\">\n {/* Show contact question after followup, or after feedback if no followup */}\n {((!followup && feedbackSubmitted) ||\n followupSubmitted) && (\n <ContactQuestion {...contactQuestion} />\n )}\n </div>\n )}\n </FeedbackContextProvider>\n </div>\n );\n};\n"],"names":["Feedback","className","followup","contactQuestion","counter","landmarkLabel","mainQuestionProps","feedbackSubmitted","setFeedbackSubmitted","useState","followupStarted","setFollowupStarted","followupSubmitted","setFollowupSubmitted","contactSubmitted","setContactSubmitted","jsx","children","jsxs","FeedbackContextProvider","value","MainQuestion","Followup","ContactQuestion"],"mappings":"oUAyDO,MAAMA,EAAW,EACpBC,UAAAA,EACAC,SAAAA,EACAC,gBAAAA,EACAC,QAAAA,EACAC,cAAAA,KACGC,MAEG,MAACC,EAAmBC,GAAwBC,GAAS,IACpDC,EAAiBC,GAAsBF,GAAS,IAChDG,EAAmBC,GAAwBJ,GAAS,IACpDK,EAAkBC,GAAuBN,GAAS,GAGrD,OAAAO,EAAC,MAAA,CACGf,UAAW,gBAAgBA,GAAa,KACxC,cAAY,WAEZgB,SAAAC,EAACC,EAAA,CACGC,MAAO,CACHb,kBAAAA,EACAG,gBAAAA,EACAE,kBAAAA,EACAE,iBAAAA,EACAV,QAAAA,EACAC,cAAAA,EACAG,qBAAAA,EACAG,mBAAAA,EACAE,qBAAAA,EACAE,oBAAAA,GAGHE,SAAA,EAACP,GAAmBM,EAACK,EAAc,IAAGf,IACtCC,IAAsBO,GAAoBZ,GACtCc,EAAAM,EAAA,IAAapB,IAEjBC,GACGa,EAAC,MAAI,CAAA,YAAU,SAERC,WAACf,GAAYK,GACZK,IACAI,EAACO,EAAiB,IAAGpB,UAIrC"}
1
+ {"version":3,"file":"Feedback.js","sources":["../../../../src/components/feedback/Feedback.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\nimport { BaseTextAreaProps } from \"../text-area/types.js\";\nimport { FeedbackContextProvider } from \"./feedbackContext.js\";\nimport { Followup } from \"./followup/Followup.js\";\nimport { MainQuestion } from \"./main-question/MainQuestion.js\";\nimport { ContactQuestion } from \"./questions/ContactQuestion.js\";\nimport {\n ContactQuestionProps,\n FeedbackOption,\n FeedbackType,\n FollowupProps,\n} from \"./types.js\";\n\nexport type FeedbackProps = {\n className?: string;\n /** Velg typen alternativer, Smiley eller RadioButtons. */\n type: \"radio\" | \"smiley\";\n /** Spørsmålet som stilles til brukeren */\n label: string;\n /** Hjelpetekst til hovedspørsmålet */\n helpLabel?: string;\n /** Svaralternativer til spørsmålet */\n options: FeedbackOption[];\n /** Dersom du vil stille et åpent spørsmål i tillegg kan du sette denne til en truthy verdi */\n addOnQuestion?:\n | {\n /** Spørsmålet du vil stille */\n label?: string;\n /** Eventuell hjelpetekst. Om du ikke spesifiserer en vil det vises en påminnelse om å ikke skrive inn personling informasjon. */\n helpLabel?: string;\n }\n | boolean;\n /** Lar deg tilpasse meldingen som kommer når brukeren sender inn tilbakemeldingen. */\n successMessage?: {\n title: string;\n children: ReactNode;\n };\n /**\n * Funksjon for å håndtere innsending av tilbakemelding\n * @param value Verdien av tilbakemeldingen. Dette er et objekt med følgende egenskaper:\n * - `feedbackValue`: Selve verdien av tilbakemeldingen (format varierer etter spørsmålstype)\n * - `intentionalSubmit`: Er `true` hvis brukeren aktivt sendte inn skjemaet, `false` hvis skjemaet ble sendt inn automatisk\n * - `message`: Eventuell utfyllende melding fra bruker. Blir kun sendt inn ved aktiv innsending\n */\n onSubmit: (value: FeedbackType) => void;\n followup?: FollowupProps;\n contactQuestion?: ContactQuestionProps;\n /**\n * Hvis du ønsker at Feedback formen skal eksponeres som et landmark kan du sende inn\n * hva du ønsker at en skjermleser skal kalle den her. Bare eksponer Feedback som et\n * landmark på sider der den er en viktig del av innholdet, feks en kvitteringsside\n * eller et annet sted det å kunne gi tilbakemelding vil føles naturlig eller forventet\n * for brukeren.\n */\n landmarkLabel?: string;\n} & Pick<BaseTextAreaProps, \"counter\">;\n\nexport const Feedback = ({\n className,\n followup,\n contactQuestion,\n counter,\n landmarkLabel,\n ...mainQuestionProps\n}: FeedbackProps): ReactElement => {\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\n const [followupStarted, setFollowupStarted] = useState(false);\n const [followupSubmitted, setFollowupSubmitted] = useState(false);\n const [contactSubmitted, setContactSubmitted] = useState(false);\n\n return (\n <div\n className={`jkl-feedback ${className || \"\"}`}\n data-testid=\"feedback\"\n >\n <FeedbackContextProvider\n value={{\n feedbackSubmitted,\n followupStarted,\n followupSubmitted,\n contactSubmitted,\n counter,\n landmarkLabel,\n setFeedbackSubmitted,\n setFollowupStarted,\n setFollowupSubmitted,\n setContactSubmitted,\n }}\n >\n {!followupStarted && <MainQuestion {...mainQuestionProps} />}\n {feedbackSubmitted && !contactSubmitted && followup && (\n <Followup {...followup} />\n )}\n {contactQuestion && (\n <div aria-live=\"polite\">\n {/* Show contact question after followup, or after feedback if no followup */}\n {((!followup && feedbackSubmitted) ||\n followupSubmitted) && (\n <ContactQuestion {...contactQuestion} />\n )}\n </div>\n )}\n </FeedbackContextProvider>\n </div>\n );\n};\n"],"names":["Feedback","className","followup","contactQuestion","counter","landmarkLabel","mainQuestionProps","feedbackSubmitted","setFeedbackSubmitted","useState","followupStarted","setFollowupStarted","followupSubmitted","setFollowupSubmitted","contactSubmitted","setContactSubmitted","jsx","children","jsxs","FeedbackContextProvider","value","MainQuestion","Followup","ContactQuestion"],"mappings":"oUAyDO,MAAMA,EAAW,EACpBC,UAAAA,EACAC,SAAAA,EACAC,gBAAAA,EACAC,QAAAA,EACAC,cAAAA,KACGC,MAEG,MAACC,EAAmBC,GAAwBC,GAAS,IACpDC,EAAiBC,GAAsBF,GAAS,IAChDG,EAAmBC,GAAwBJ,GAAS,IACpDK,EAAkBC,GAAuBN,GAAS,GAGrD,OAAAO,EAAC,MAAA,CACGf,UAAW,gBAAgBA,GAAa,KACxC,cAAY,WAEZgB,SAAAC,EAACC,EAAA,CACGC,MAAO,CACHb,kBAAAA,EACAG,gBAAAA,EACAE,kBAAAA,EACAE,iBAAAA,EACAV,QAAAA,EACAC,cAAAA,EACAG,qBAAAA,EACAG,mBAAAA,EACAE,qBAAAA,EACAE,oBAAAA,GAGHE,SAAA,EAACP,GAAmBM,EAACK,EAAc,IAAGf,IACtCC,IAAsBO,GAAoBZ,GACtCc,EAAAM,EAAA,IAAapB,IAEjBC,GACGa,EAAC,MAAI,CAAA,YAAU,SAERC,WAACf,GAAYK,GACZK,IACAI,EAACO,EAAiB,IAAGpB,UAIrC"}
@@ -1,6 +1,6 @@
1
1
  import { FC } from 'react';
2
2
  import { WithChildren } from '../../core/types.js';
3
- import { BaseTextAreaProps } from '../text-input/types.js';
3
+ import { BaseTextAreaProps } from '../text-area/types.js';
4
4
  type FeedbackContext = {
5
5
  feedbackSubmitted: boolean;
6
6
  followupStarted: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"feedbackContext.js","sources":["../../../../src/components/feedback/feedbackContext.tsx"],"sourcesContent":["import React, { createContext, FC, useContext } from \"react\";\nimport { WithChildren } from \"../../core/types.js\";\nimport { BaseTextAreaProps } from \"../text-input/types.js\";\n\ntype FeedbackContext = {\n feedbackSubmitted: boolean;\n followupStarted: boolean;\n followupSubmitted: boolean;\n contactSubmitted: boolean;\n landmarkLabel?: string;\n setFeedbackSubmitted: (state: boolean) => void;\n setFollowupStarted: (state: boolean) => void;\n setFollowupSubmitted: (state: boolean) => void;\n setContactSubmitted: (state: boolean) => void;\n} & Pick<BaseTextAreaProps, \"counter\">;\n\nconst initialState: FeedbackContext = {\n feedbackSubmitted: false,\n followupStarted: false,\n followupSubmitted: false,\n contactSubmitted: false,\n setFeedbackSubmitted: () => null,\n setFollowupStarted: () => null,\n setFollowupSubmitted: () => null,\n setContactSubmitted: () => null,\n};\n\nconst feedbackContext = createContext(initialState);\n\nexport const useFeedbackContext = (): FeedbackContext =>\n useContext(feedbackContext);\n\ninterface FeedbackContextProviderProps extends WithChildren {\n value: FeedbackContext;\n}\n\nexport const FeedbackContextProvider: FC<FeedbackContextProviderProps> = ({\n value,\n children,\n}) => (\n <feedbackContext.Provider value={value}>\n {children}\n </feedbackContext.Provider>\n);\n"],"names":["feedbackContext","createContext","feedbackSubmitted","followupStarted","followupSubmitted","contactSubmitted","setFeedbackSubmitted","setFollowupStarted","setFollowupSubmitted","setContactSubmitted","useFeedbackContext","useContext","FeedbackContextProvider","value","children","jsx","Provider"],"mappings":"8FAgBA,MAWMA,EAAkBC,EAXc,CAClCC,mBAAmB,EACnBC,iBAAiB,EACjBC,mBAAmB,EACnBC,kBAAkB,EAClBC,qBAAsB,IAAM,KAC5BC,mBAAoB,IAAM,KAC1BC,qBAAsB,IAAM,KAC5BC,oBAAqB,IAAM,OAKlBC,EAAqB,IAC9BC,EAAWX,GAMFY,EAA4D,EACrEC,MAAAA,EACAC,SAAAA,KAECC,EAAAf,EAAgBgB,SAAhB,CAAyBH,MAAAA,EACrBC,SAAAA"}
1
+ {"version":3,"file":"feedbackContext.js","sources":["../../../../src/components/feedback/feedbackContext.tsx"],"sourcesContent":["import React, { createContext, FC, useContext } from \"react\";\nimport { WithChildren } from \"../../core/types.js\";\nimport { BaseTextAreaProps } from \"../text-area/types.js\";\n\ntype FeedbackContext = {\n feedbackSubmitted: boolean;\n followupStarted: boolean;\n followupSubmitted: boolean;\n contactSubmitted: boolean;\n landmarkLabel?: string;\n setFeedbackSubmitted: (state: boolean) => void;\n setFollowupStarted: (state: boolean) => void;\n setFollowupSubmitted: (state: boolean) => void;\n setContactSubmitted: (state: boolean) => void;\n} & Pick<BaseTextAreaProps, \"counter\">;\n\nconst initialState: FeedbackContext = {\n feedbackSubmitted: false,\n followupStarted: false,\n followupSubmitted: false,\n contactSubmitted: false,\n setFeedbackSubmitted: () => null,\n setFollowupStarted: () => null,\n setFollowupSubmitted: () => null,\n setContactSubmitted: () => null,\n};\n\nconst feedbackContext = createContext(initialState);\n\nexport const useFeedbackContext = (): FeedbackContext =>\n useContext(feedbackContext);\n\ninterface FeedbackContextProviderProps extends WithChildren {\n value: FeedbackContext;\n}\n\nexport const FeedbackContextProvider: FC<FeedbackContextProviderProps> = ({\n value,\n children,\n}) => (\n <feedbackContext.Provider value={value}>\n {children}\n </feedbackContext.Provider>\n);\n"],"names":["feedbackContext","createContext","feedbackSubmitted","followupStarted","followupSubmitted","contactSubmitted","setFeedbackSubmitted","setFollowupStarted","setFollowupSubmitted","setContactSubmitted","useFeedbackContext","useContext","FeedbackContextProvider","value","children","jsx","Provider"],"mappings":"8FAgBA,MAWMA,EAAkBC,EAXc,CAClCC,mBAAmB,EACnBC,iBAAiB,EACjBC,mBAAmB,EACnBC,kBAAkB,EAClBC,qBAAsB,IAAM,KAC5BC,mBAAoB,IAAM,KAC1BC,qBAAsB,IAAM,KAC5BC,oBAAqB,IAAM,OAKlBC,EAAqB,IAC9BC,EAAWX,GAMFY,EAA4D,EACrEC,MAAAA,EACAC,SAAAA,KAECC,EAAAf,EAAgBgB,SAAhB,CAAyBH,MAAAA,EACrBC,SAAAA"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,Fragment as t,jsx as r}from"react/jsx-runtime";import{useState as n,useEffect as a}from"react";import{TextArea as o}from"../../text-input/TextArea.js";import{useFeedbackContext as s}from"../feedbackContext.js";import{useMainQuestionContext as l}from"../main-question/mainQuestionContext.js";const i=({helpLabel:i="Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.",label:u})=>{const{counter:d}=s(),c=l(),[m,p]=n();if(a((()=>{var e,t,r;const n=Array.isArray(null==c?void 0:c.currentValue)?null==(e=null==c?void 0:c.currentValue[0].textAreaLabel)?void 0:e.toString():null==(r=null==(t=null==c?void 0:c.currentValue)?void 0:t.textAreaLabel)?void 0:r.toString();p(n||u)}),[null==c?void 0:c.currentValue,u]),!c)return console.error("Addon question must be used inside a MainQuestion context provider"),null;const{message:b,setMessage:v}=c;return e(t,{children:[void 0!==c.currentValue&&e("div",{className:"jkl-sr-only","aria-live":"polite",children:[m," ",i]}),r(o,{startOpen:!0,rows:4,"data-testid":"jkl-feedback__open-question",className:"jkl-spacing-xl--bottom jkl-spacing-xl--top",label:m,labelProps:{srOnly:!0},placeholder:m,helpLabel:i,value:b||"",onChange:e=>v(e.target.value),counter:d})]})};export{i as AddonQuestion};
1
+ import{jsxs as e,Fragment as r,jsx as t}from"react/jsx-runtime";import{useState as n,useEffect as a}from"react";import{TextArea as o}from"../../text-area/TextArea.js";import{useFeedbackContext as s}from"../feedbackContext.js";import{useMainQuestionContext as l}from"../main-question/mainQuestionContext.js";const i=({helpLabel:i="Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.",label:u})=>{const{counter:d}=s(),c=l(),[m,p]=n();if(a((()=>{var e,r,t;const n=Array.isArray(null==c?void 0:c.currentValue)?null==(e=null==c?void 0:c.currentValue[0].textAreaLabel)?void 0:e.toString():null==(t=null==(r=null==c?void 0:c.currentValue)?void 0:r.textAreaLabel)?void 0:t.toString();p(n||u)}),[null==c?void 0:c.currentValue,u]),!c)return console.error("Addon question must be used inside a MainQuestion context provider"),null;const{message:b,setMessage:v}=c;return e(r,{children:[void 0!==c.currentValue&&e("div",{className:"jkl-sr-only","aria-live":"polite",children:[m," ",i]}),t(o,{startOpen:!0,rows:4,"data-testid":"jkl-feedback__open-question",className:"jkl-spacing-xl--bottom jkl-spacing-xl--top",label:m,labelProps:{srOnly:!0},placeholder:m,helpLabel:i,value:b||"",onChange:e=>v(e.target.value),counter:d})]})};export{i as AddonQuestion};
2
2
  //# sourceMappingURL=AddonQuestion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddonQuestion.js","sources":["../../../../../src/components/feedback/questions/AddonQuestion.tsx"],"sourcesContent":["import React, { ChangeEventHandler, useEffect, useState } from \"react\";\nimport { TextArea } from \"../../text-input/TextArea.js\";\nimport { useFeedbackContext } from \"../feedbackContext.js\";\nimport { useMainQuestionContext } from \"../main-question/mainQuestionContext.js\";\n\ninterface Props {\n label?: string;\n helpLabel?: string;\n}\n\nexport const AddonQuestion: React.FC<Props> = ({\n helpLabel = \"Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.\",\n label,\n}) => {\n const { counter } = useFeedbackContext();\n const context = useMainQuestionContext();\n const [dynamicLabel, setDynamicLabel] = useState<string>();\n\n useEffect(() => {\n const labelFromValue = Array.isArray(context?.currentValue)\n ? context?.currentValue[0].textAreaLabel?.toString()\n : context?.currentValue?.textAreaLabel?.toString();\n setDynamicLabel(labelFromValue || label);\n }, [context?.currentValue, label]);\n\n if (!context) {\n console.error(\n \"Addon question must be used inside a MainQuestion context provider\",\n );\n return null;\n }\n\n const { message, setMessage } = context;\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) =>\n setMessage(e.target.value);\n\n return (\n <>\n {context.currentValue !== undefined && (\n <div className=\"jkl-sr-only\" aria-live=\"polite\">\n {dynamicLabel} {helpLabel}\n </div>\n )}\n <TextArea\n startOpen\n rows={4}\n data-testid=\"jkl-feedback__open-question\"\n className=\"jkl-spacing-xl--bottom jkl-spacing-xl--top\"\n label={dynamicLabel}\n labelProps={{ srOnly: true }}\n placeholder={dynamicLabel}\n helpLabel={helpLabel}\n value={message || \"\"}\n onChange={handleChange}\n counter={counter}\n />\n </>\n );\n};\n"],"names":["AddonQuestion","helpLabel","label","counter","useFeedbackContext","context","useMainQuestionContext","dynamicLabel","setDynamicLabel","useState","useEffect","labelFromValue","Array","isArray","currentValue","_a","textAreaLabel","toString","_c","_b","console","error","message","setMessage","jsxs","Fragment","children","className","jsx","TextArea","startOpen","rows","labelProps","srOnly","placeholder","value","onChange","e","target"],"mappings":"oTAUO,MAAMA,EAAiC,EAC1CC,UAAAA,EAAY,uJACZC,MAAAA,MAEM,MAAEC,QAAAA,GAAYC,IACdC,EAAUC,KACTC,EAAcC,GAAmBC,IASxC,GAPAC,GAAU,eACN,MAAMC,EAAiBC,MAAMC,QAAQ,MAAAR,OAAAA,EAAAA,EAASS,cACxC,OAAAC,EAAA,MAAAV,OAAAA,EAAAA,EAASS,aAAa,GAAGE,oBAAzB,EAAAD,EAAwCE,WACxC,OAAAC,EAAA,OAAAC,EAAA,MAAAd,OAAA,EAAAA,EAASS,mBAATK,EAAAA,EAAuBH,oBAAvB,EAAAE,EAAsCD,WAC5CT,EAAgBG,GAAkBT,EAAK,GACxC,CAAC,MAAAG,OAAA,EAAAA,EAASS,aAAcZ,KAEtBG,EACO,OAAAe,QAAAC,MACJ,sEAEG,KAGL,MAAEC,QAAAA,EAASC,WAAAA,GAAelB,EAIhC,OAESmB,EAAAC,EAAA,CAAAC,SAAA,MAAyB,IAAzBrB,EAAQS,cACLU,EAAC,OAAIG,UAAU,cAAc,YAAU,SAClCD,SAAA,CAAAnB,EAAa,IAAEN,KAGxB2B,EAACC,EAAA,CACGC,WAAS,EACTC,KAAM,EACN,cAAY,8BACZJ,UAAU,6CACVzB,MAAOK,EACPyB,WAAY,CAAEC,QAAQ,GACtBC,YAAa3B,EACbN,UAAAA,EACAkC,MAAOb,GAAW,GAClBc,SApBmDC,GAC3Dd,EAAWc,EAAEC,OAAOH,OAoBZhC,QAAAA,MAER"}
1
+ {"version":3,"file":"AddonQuestion.js","sources":["../../../../../src/components/feedback/questions/AddonQuestion.tsx"],"sourcesContent":["import React, { ChangeEventHandler, useEffect, useState } from \"react\";\nimport { TextArea } from \"../../text-area/TextArea.js\";\nimport { useFeedbackContext } from \"../feedbackContext.js\";\nimport { useMainQuestionContext } from \"../main-question/mainQuestionContext.js\";\n\ninterface Props {\n label?: string;\n helpLabel?: string;\n}\n\nexport const AddonQuestion: React.FC<Props> = ({\n helpLabel = \"Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.\",\n label,\n}) => {\n const { counter } = useFeedbackContext();\n const context = useMainQuestionContext();\n const [dynamicLabel, setDynamicLabel] = useState<string>();\n\n useEffect(() => {\n const labelFromValue = Array.isArray(context?.currentValue)\n ? context?.currentValue[0].textAreaLabel?.toString()\n : context?.currentValue?.textAreaLabel?.toString();\n setDynamicLabel(labelFromValue || label);\n }, [context?.currentValue, label]);\n\n if (!context) {\n console.error(\n \"Addon question must be used inside a MainQuestion context provider\",\n );\n return null;\n }\n\n const { message, setMessage } = context;\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) =>\n setMessage(e.target.value);\n\n return (\n <>\n {context.currentValue !== undefined && (\n <div className=\"jkl-sr-only\" aria-live=\"polite\">\n {dynamicLabel} {helpLabel}\n </div>\n )}\n <TextArea\n startOpen\n rows={4}\n data-testid=\"jkl-feedback__open-question\"\n className=\"jkl-spacing-xl--bottom jkl-spacing-xl--top\"\n label={dynamicLabel}\n labelProps={{ srOnly: true }}\n placeholder={dynamicLabel}\n helpLabel={helpLabel}\n value={message || \"\"}\n onChange={handleChange}\n counter={counter}\n />\n </>\n );\n};\n"],"names":["AddonQuestion","helpLabel","label","counter","useFeedbackContext","context","useMainQuestionContext","dynamicLabel","setDynamicLabel","useState","useEffect","labelFromValue","Array","isArray","currentValue","_a","textAreaLabel","toString","_c","_b","console","error","message","setMessage","jsxs","Fragment","children","className","jsx","TextArea","startOpen","rows","labelProps","srOnly","placeholder","value","onChange","e","target"],"mappings":"mTAUO,MAAMA,EAAiC,EAC1CC,UAAAA,EAAY,uJACZC,MAAAA,MAEM,MAAEC,QAAAA,GAAYC,IACdC,EAAUC,KACTC,EAAcC,GAAmBC,IASxC,GAPAC,GAAU,eACN,MAAMC,EAAiBC,MAAMC,QAAQ,MAAAR,OAAAA,EAAAA,EAASS,cACxC,OAAAC,EAAA,MAAAV,OAAAA,EAAAA,EAASS,aAAa,GAAGE,oBAAzB,EAAAD,EAAwCE,WACxC,OAAAC,EAAA,OAAAC,EAAA,MAAAd,OAAA,EAAAA,EAASS,mBAATK,EAAAA,EAAuBH,oBAAvB,EAAAE,EAAsCD,WAC5CT,EAAgBG,GAAkBT,EAAK,GACxC,CAAC,MAAAG,OAAA,EAAAA,EAASS,aAAcZ,KAEtBG,EACO,OAAAe,QAAAC,MACJ,sEAEG,KAGL,MAAEC,QAAAA,EAASC,WAAAA,GAAelB,EAIhC,OAESmB,EAAAC,EAAA,CAAAC,SAAA,MAAyB,IAAzBrB,EAAQS,cACLU,EAAC,OAAIG,UAAU,cAAc,YAAU,SAClCD,SAAA,CAAAnB,EAAa,IAAEN,KAGxB2B,EAACC,EAAA,CACGC,WAAS,EACTC,KAAM,EACN,cAAY,8BACZJ,UAAU,6CACVzB,MAAOK,EACPyB,WAAY,CAAEC,QAAQ,GACtBC,YAAa3B,EACbN,UAAAA,EACAkC,MAAOb,GAAW,GAClBc,SApBmDC,GAC3Dd,EAAWc,EAAEC,OAAOH,OAoBZhC,QAAAA,MAER"}
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useRef as r,useEffect as t,useMemo as o}from"react";import{TextArea as n}from"../../text-input/TextArea.js";import{useFeedbackContext as l}from"../feedbackContext.js";import{useFollowUpContext as a}from"../followup/followupContext.js";import{useMainQuestionContext as u}from"../main-question/mainQuestionContext.js";const s=({label:s,name:i,helpLabel:m="Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.",autoFocus:c=!1})=>{const{counter:p}=l(),v=a(),b=u(),d=v||b,f=r(null);t((()=>{c&&f.current&&f.current.focus()}),[c,f]);const x=o((()=>{var e;return Array.isArray(null==d?void 0:d.currentValue)?null==d?void 0:d.currentValue[0].value.toString():null==(e=null==d?void 0:d.currentValue)?void 0:e.value.toString()}),[null==d?void 0:d.currentValue]);return d?e(n,{ref:f,label:s,labelProps:{variant:"large"},name:i||s,startOpen:!0,rows:5,value:x,onChange:e=>{const r={label:s,name:i||s,type:"text",value:e.target.value};null==d||d.setCurrentValue(r)},helpLabel:m,counter:p}):(console.error("Questions must be used inside a Followup or Feedback context provider"),null)};export{s as TextQuestion};
1
+ import{jsx as e}from"react/jsx-runtime";import{useRef as r,useEffect as t,useMemo as o}from"react";import{TextArea as n}from"../../text-area/TextArea.js";import{useFeedbackContext as a}from"../feedbackContext.js";import{useFollowUpContext as l}from"../followup/followupContext.js";import{useMainQuestionContext as u}from"../main-question/mainQuestionContext.js";const s=({label:s,name:i,helpLabel:m="Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.",autoFocus:c=!1})=>{const{counter:p}=a(),v=l(),b=u(),d=v||b,f=r(null);t((()=>{c&&f.current&&f.current.focus()}),[c,f]);const x=o((()=>{var e;return Array.isArray(null==d?void 0:d.currentValue)?null==d?void 0:d.currentValue[0].value.toString():null==(e=null==d?void 0:d.currentValue)?void 0:e.value.toString()}),[null==d?void 0:d.currentValue]);return d?e(n,{ref:f,label:s,labelProps:{variant:"large"},name:i||s,startOpen:!0,rows:5,value:x,onChange:e=>{const r={label:s,name:i||s,type:"text",value:e.target.value};null==d||d.setCurrentValue(r)},helpLabel:m,counter:p}):(console.error("Questions must be used inside a Followup or Feedback context provider"),null)};export{s as TextQuestion};
2
2
  //# sourceMappingURL=TextQuestion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextQuestion.js","sources":["../../../../../src/components/feedback/questions/TextQuestion.tsx"],"sourcesContent":["import React, { ChangeEventHandler, useEffect, useMemo, useRef } from \"react\";\nimport { TextArea } from \"../../text-input/TextArea.js\";\nimport { useFeedbackContext } from \"../feedbackContext.js\";\nimport { useFollowUpContext } from \"../followup/followupContext.js\";\nimport { useMainQuestionContext } from \"../main-question/mainQuestionContext.js\";\nimport { FeedbackAnswer, QuestionProps } from \"../types.js\";\n\nexport const TextQuestion: React.FC<QuestionProps> = ({\n label,\n name,\n helpLabel = \"Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.\",\n autoFocus = false,\n}) => {\n const { counter } = useFeedbackContext();\n const followupContext = useFollowUpContext();\n const feedbackContext = useMainQuestionContext();\n const context = followupContext || feedbackContext;\n const ref = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (autoFocus && ref.current) {\n ref.current.focus();\n }\n }, [autoFocus, ref]);\n\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) => {\n const value: FeedbackAnswer = {\n label,\n name: name || label,\n type: \"text\",\n value: e.target.value,\n };\n context?.setCurrentValue(value);\n };\n\n const currentValue = useMemo(\n () =>\n Array.isArray(context?.currentValue)\n ? context?.currentValue[0].value.toString()\n : context?.currentValue?.value.toString(),\n [context?.currentValue],\n );\n\n if (!context) {\n console.error(\n \"Questions must be used inside a Followup or Feedback context provider\",\n );\n return null;\n }\n\n return (\n <TextArea\n ref={ref}\n label={label}\n labelProps={{ variant: \"large\" }}\n name={name || label}\n startOpen\n rows={5}\n value={currentValue}\n onChange={handleChange}\n helpLabel={helpLabel}\n counter={counter}\n />\n );\n};\n"],"names":["TextQuestion","label","name","helpLabel","autoFocus","counter","useFeedbackContext","followupContext","useFollowUpContext","feedbackContext","useMainQuestionContext","context","ref","useRef","useEffect","current","focus","handleChange","currentValue","useMemo","Array","isArray","value","toString","_a","jsx","TextArea","labelProps","variant","startOpen","rows","onChange","e","type","target","setCurrentValue","console","error"],"mappings":"2WAOO,MAAMA,EAAwC,EACjDC,MAAAA,EACAC,KAAAA,EACAC,UAAAA,EAAY,uJACZC,UAAAA,GAAY,MAEN,MAAEC,QAAAA,GAAYC,IACdC,EAAkBC,IAClBC,EAAkBC,IAClBC,EAAUJ,GAAmBE,EAC7BG,EAAMC,EAA4B,MAExCC,GAAU,KACFV,GAAaQ,EAAIG,SACjBH,EAAIG,QAAQC,UAEjB,CAACZ,EAAWQ,IAETK,MAUAC,EAAeC,GACjB,WACU,OAAAC,MAAAC,QAAQ,MAAAV,OAAAA,EAAAA,EAASO,cACjB,MAAAP,SAAAA,EAASO,aAAa,GAAGI,MAAMC,WAC/B,OAAAC,EAAA,MAAAb,OAAA,EAAAA,EAASO,mBAAT,EAAAM,EAAuBF,MAAMC,UAAA,GACvC,CAAC,MAAAZ,OAAAA,EAAAA,EAASO,eAGd,OAAKP,EAQDc,EAACC,EAAA,CACGd,IAAAA,EACAX,MAAAA,EACA0B,WAAY,CAAEC,QAAS,SACvB1B,KAAMA,GAAQD,EACd4B,WAAS,EACTC,KAAM,EACNR,MAAOJ,EACPa,SAlCuDC,IAC3D,MAAMV,EAAwB,CAC1BrB,MAAAA,EACAC,KAAMA,GAAQD,EACdgC,KAAM,OACNX,MAAOU,EAAEE,OAAOZ,OAEpB,MAAAX,GAAAA,EAASwB,gBAAgBb,EAAAA,EA4BrBnB,UAAAA,EACAE,QAAAA,KAjBI+B,QAAAC,MACJ,yEAEG,KAAA"}
1
+ {"version":3,"file":"TextQuestion.js","sources":["../../../../../src/components/feedback/questions/TextQuestion.tsx"],"sourcesContent":["import React, { ChangeEventHandler, useEffect, useMemo, useRef } from \"react\";\nimport { TextArea } from \"../../text-area/TextArea.js\";\nimport { useFeedbackContext } from \"../feedbackContext.js\";\nimport { useFollowUpContext } from \"../followup/followupContext.js\";\nimport { useMainQuestionContext } from \"../main-question/mainQuestionContext.js\";\nimport { FeedbackAnswer, QuestionProps } from \"../types.js\";\n\nexport const TextQuestion: React.FC<QuestionProps> = ({\n label,\n name,\n helpLabel = \"Ikke skriv personlige opplysninger. Tilbakemeldinger som kommer inn her blir ikke besvart, men brukt i videre arbeid med å forbedre tjenestene våre.\",\n autoFocus = false,\n}) => {\n const { counter } = useFeedbackContext();\n const followupContext = useFollowUpContext();\n const feedbackContext = useMainQuestionContext();\n const context = followupContext || feedbackContext;\n const ref = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (autoFocus && ref.current) {\n ref.current.focus();\n }\n }, [autoFocus, ref]);\n\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) => {\n const value: FeedbackAnswer = {\n label,\n name: name || label,\n type: \"text\",\n value: e.target.value,\n };\n context?.setCurrentValue(value);\n };\n\n const currentValue = useMemo(\n () =>\n Array.isArray(context?.currentValue)\n ? context?.currentValue[0].value.toString()\n : context?.currentValue?.value.toString(),\n [context?.currentValue],\n );\n\n if (!context) {\n console.error(\n \"Questions must be used inside a Followup or Feedback context provider\",\n );\n return null;\n }\n\n return (\n <TextArea\n ref={ref}\n label={label}\n labelProps={{ variant: \"large\" }}\n name={name || label}\n startOpen\n rows={5}\n value={currentValue}\n onChange={handleChange}\n helpLabel={helpLabel}\n counter={counter}\n />\n );\n};\n"],"names":["TextQuestion","label","name","helpLabel","autoFocus","counter","useFeedbackContext","followupContext","useFollowUpContext","feedbackContext","useMainQuestionContext","context","ref","useRef","useEffect","current","focus","handleChange","currentValue","useMemo","Array","isArray","value","toString","_a","jsx","TextArea","labelProps","variant","startOpen","rows","onChange","e","type","target","setCurrentValue","console","error"],"mappings":"0WAOO,MAAMA,EAAwC,EACjDC,MAAAA,EACAC,KAAAA,EACAC,UAAAA,EAAY,uJACZC,UAAAA,GAAY,MAEN,MAAEC,QAAAA,GAAYC,IACdC,EAAkBC,IAClBC,EAAkBC,IAClBC,EAAUJ,GAAmBE,EAC7BG,EAAMC,EAA4B,MAExCC,GAAU,KACFV,GAAaQ,EAAIG,SACjBH,EAAIG,QAAQC,UAEjB,CAACZ,EAAWQ,IAETK,MAUAC,EAAeC,GACjB,WACU,OAAAC,MAAAC,QAAQ,MAAAV,OAAAA,EAAAA,EAASO,cACjB,MAAAP,SAAAA,EAASO,aAAa,GAAGI,MAAMC,WAC/B,OAAAC,EAAA,MAAAb,OAAA,EAAAA,EAASO,mBAAT,EAAAM,EAAuBF,MAAMC,UAAA,GACvC,CAAC,MAAAZ,OAAAA,EAAAA,EAASO,eAGd,OAAKP,EAQDc,EAACC,EAAA,CACGd,IAAAA,EACAX,MAAAA,EACA0B,WAAY,CAAEC,QAAS,SACvB1B,KAAMA,GAAQD,EACd4B,WAAS,EACTC,KAAM,EACNR,MAAOJ,EACPa,SAlCuDC,IAC3D,MAAMV,EAAwB,CAC1BrB,MAAAA,EACAC,KAAMA,GAAQD,EACdgC,KAAM,OACNX,MAAOU,EAAEE,OAAOZ,OAEpB,MAAAX,GAAAA,EAASwB,gBAAgBb,EAAAA,EA4BrBnB,UAAAA,EACAE,QAAAA,KAjBI+B,QAAAC,MACJ,yEAEG,KAAA"}
@@ -1,2 +1,2 @@
1
- import t from"react";import{CheckboxQuestion as e}from"./questions/CheckboxQuestion.js";import{RadioQuestion as s}from"./questions/RadioQuestion.js";import{TextQuestion as i}from"./questions/TextQuestion.js";import{SmileyQuestion as o}from"./questions/SmileyQuestion.js";import"react/jsx-runtime";import"../text-input/TextArea.js";import"./feedbackContext.js";import"./main-question/mainQuestionContext.js";import"../button/Button.js";import"../text-input/TextInput.js";import"../message/Message.js";function n(...e){return s=>t.Children.map(s,(s=>{if(t.isValidElement(s)&&e.includes(s.type))return s}))}const r=t=>{switch(t){case"radio":default:return s;case"checkbox":return e;case"text":return i;case"smiley":return o}};export{n as getChildrenOfType,r as getQuestionFromType};
1
+ import t from"react";import{CheckboxQuestion as e}from"./questions/CheckboxQuestion.js";import{RadioQuestion as s}from"./questions/RadioQuestion.js";import{TextQuestion as o}from"./questions/TextQuestion.js";import{SmileyQuestion as i}from"./questions/SmileyQuestion.js";import"react/jsx-runtime";import"../text-area/TextArea.js";import"./feedbackContext.js";import"./main-question/mainQuestionContext.js";import"../button/Button.js";import"../text-input/TextInput.js";import"../message/Message.js";function r(...e){return s=>t.Children.map(s,(s=>{if(t.isValidElement(s)&&e.includes(s.type))return s}))}const n=t=>{switch(t){case"radio":default:return s;case"checkbox":return e;case"text":return o;case"smiley":return i}};export{r as getChildrenOfType,n as getQuestionFromType};
2
2
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/feedback/utils.ts"],"sourcesContent":["import React, { JSXElementConstructor, FC } from \"react\";\nimport {\n CheckboxQuestion,\n RadioQuestion,\n TextQuestion,\n SmileyQuestion,\n} from \"./questions/index.js\";\nimport { QuestionProps, QuestionType } from \"./types.js\";\n\nexport function getChildrenOfType<P>(\n ...allowedTypes: Array<string | JSXElementConstructor<P>>\n) {\n return (\n children: React.ReactNode,\n ):\n | React.ReactElement<P, string | React.JSXElementConstructor<unknown>>[]\n | null\n | undefined =>\n React.Children.map(children, (child) => {\n if (\n React.isValidElement<P>(child) &&\n allowedTypes.includes(child.type)\n ) {\n return child;\n }\n return undefined;\n });\n}\n\nexport const getQuestionFromType = (type: QuestionType): FC<QuestionProps> => {\n switch (type) {\n case \"radio\":\n return RadioQuestion;\n case \"checkbox\":\n return CheckboxQuestion;\n case \"text\":\n return TextQuestion;\n case \"smiley\":\n return SmileyQuestion;\n\n default:\n return RadioQuestion;\n }\n};\n"],"names":["getChildrenOfType","allowedTypes","children","React","Children","map","child","isValidElement","includes","type","getQuestionFromType","RadioQuestion","CheckboxQuestion","TextQuestion","SmileyQuestion"],"mappings":"ofASO,SAASA,KACTC,GAEH,OACIC,GAKAC,EAAMC,SAASC,IAAIH,GAAWI,IAEtB,GAAAH,EAAMI,eAAkBD,IACxBL,EAAaO,SAASF,EAAMG,MAErBH,OAAAA,CAAAA,GAIvB,CAEa,MAAAI,EAAuBD,IAChC,OAAQA,GACJ,IAAK,QASL,QACWE,OAAAA,EARX,IAAK,WACMC,OAAAA,EACX,IAAK,OACMC,OAAAA,EACX,IAAK,SACMC,OAAAA,EAIf"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/feedback/utils.ts"],"sourcesContent":["import React, { JSXElementConstructor, FC } from \"react\";\nimport {\n CheckboxQuestion,\n RadioQuestion,\n TextQuestion,\n SmileyQuestion,\n} from \"./questions/index.js\";\nimport { QuestionProps, QuestionType } from \"./types.js\";\n\nexport function getChildrenOfType<P>(\n ...allowedTypes: Array<string | JSXElementConstructor<P>>\n) {\n return (\n children: React.ReactNode,\n ):\n | React.ReactElement<P, string | React.JSXElementConstructor<unknown>>[]\n | null\n | undefined =>\n React.Children.map(children, (child) => {\n if (\n React.isValidElement<P>(child) &&\n allowedTypes.includes(child.type)\n ) {\n return child;\n }\n return undefined;\n });\n}\n\nexport const getQuestionFromType = (type: QuestionType): FC<QuestionProps> => {\n switch (type) {\n case \"radio\":\n return RadioQuestion;\n case \"checkbox\":\n return CheckboxQuestion;\n case \"text\":\n return TextQuestion;\n case \"smiley\":\n return SmileyQuestion;\n\n default:\n return RadioQuestion;\n }\n};\n"],"names":["getChildrenOfType","allowedTypes","children","React","Children","map","child","isValidElement","includes","type","getQuestionFromType","RadioQuestion","CheckboxQuestion","TextQuestion","SmileyQuestion"],"mappings":"mfASO,SAASA,KACTC,GAEH,OACIC,GAKAC,EAAMC,SAASC,IAAIH,GAAWI,IAEtB,GAAAH,EAAMI,eAAkBD,IACxBL,EAAaO,SAASF,EAAMG,MAErBH,OAAAA,CAAAA,GAIvB,CAEa,MAAAI,EAAuBD,IAChC,OAAQA,GACJ,IAAK,QASL,QACWE,OAAAA,EARX,IAAK,WACMC,OAAAA,EACX,IAAK,OACMC,OAAAA,EACX,IAAK,SACMC,OAAAA,EAIf"}
@@ -38,6 +38,7 @@ export * from './system-message/index.js';
38
38
  export * from './table/index.js';
39
39
  export * from './tabs/index.js';
40
40
  export * from './tag/index.js';
41
+ export * from './text-area/index.js';
41
42
  export * from './text-input/index.js';
42
43
  export * from './toast/index.js';
43
44
  export * from './toggle-switch/index.js';