@fremtind/jokul 0.21.1 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/ExpandableTableRow-DXlyfK8L.cjs +2 -0
- package/build/{ExpandableTableRow-BGglv7mF.cjs.map → ExpandableTableRow-DXlyfK8L.cjs.map} +1 -1
- package/build/ExpandableTableRow-_-mY2lEq.js +2 -0
- package/build/{ExpandableTableRow-BfmOT4wb.js.map → ExpandableTableRow-_-mY2lEq.js.map} +1 -1
- package/build/build-stats.html +1 -1
- package/build/cjs/components/datepicker/DatePicker.js +1 -1
- package/build/cjs/components/datepicker/DatePicker.js.map +1 -1
- package/build/cjs/components/expander/ExpandSection.js +1 -1
- package/build/cjs/components/expander/Expander.js +1 -1
- package/build/cjs/components/expander/index.js +1 -1
- package/build/cjs/components/feedback/followup/Followup.js +1 -1
- package/build/cjs/components/feedback/followup/Followup.js.map +1 -1
- package/build/cjs/components/index.js +1 -1
- package/build/cjs/components/menu/Menu.js +1 -1
- package/build/cjs/components/menu/index.js +1 -1
- package/build/cjs/components/pagination/PageButton.js +2 -0
- package/build/cjs/components/pagination/PageButton.js.map +1 -0
- package/build/cjs/components/pagination/Pagination.js +2 -0
- package/build/cjs/components/pagination/Pagination.js.map +1 -0
- package/build/cjs/components/pagination/index.js +2 -0
- package/build/cjs/components/pagination/index.js.map +1 -0
- package/build/cjs/components/select/NativeSelect.js +1 -1
- package/build/cjs/components/select/Select.js +1 -1
- package/build/cjs/components/select/index.js +1 -1
- package/build/cjs/components/table/ExpandableTableRow.js +1 -1
- package/build/cjs/components/table/ExpandableTableRowController.js +1 -1
- package/build/cjs/components/table/TablePagination.js +1 -1
- package/build/cjs/components/table/index.js +1 -1
- package/build/cjs/index.js +1 -1
- package/build/es/components/datepicker/DatePicker.js +1 -1
- package/build/es/components/datepicker/DatePicker.js.map +1 -1
- package/build/es/components/expander/ExpandSection.js +1 -1
- package/build/es/components/expander/Expander.js +1 -1
- package/build/es/components/expander/index.js +1 -1
- package/build/es/components/feedback/followup/Followup.js +1 -1
- package/build/es/components/feedback/followup/Followup.js.map +1 -1
- package/build/es/components/index.js +1 -1
- package/build/es/components/menu/Menu.js +1 -1
- package/build/es/components/menu/index.js +1 -1
- package/build/es/components/pagination/PageButton.js +2 -0
- package/build/es/components/pagination/PageButton.js.map +1 -0
- package/build/es/components/pagination/Pagination.js +2 -0
- package/build/es/components/pagination/Pagination.js.map +1 -0
- package/build/es/components/pagination/index.js +2 -0
- package/build/es/components/pagination/index.js.map +1 -0
- package/build/es/components/select/NativeSelect.js +1 -1
- package/build/es/components/select/Select.js +1 -1
- package/build/es/components/select/index.js +1 -1
- package/build/es/components/table/ExpandableTableRow.js +1 -1
- package/build/es/components/table/ExpandableTableRowController.js +1 -1
- package/build/es/components/table/TablePagination.js +1 -1
- package/build/es/components/table/index.js +1 -1
- package/build/es/index.js +1 -1
- package/build/packages/jokul/src/components/index.d.ts +1 -0
- package/build/packages/jokul/src/components/pagination/PageButton.d.ts +7 -0
- package/build/packages/jokul/src/components/pagination/Pagination.d.ts +18 -0
- package/build/packages/jokul/src/components/pagination/index.d.ts +1 -0
- package/package.json +4 -2
- package/src/components/button/styles/button.css +2 -2
- package/src/components/button/styles/button.min.css +1 -1
- package/src/components/checkbox/styles/checkbox.css +4 -4
- package/src/components/checkbox/styles/checkbox.min.css +1 -1
- package/src/components/feedback/styles/feedback.css +2 -2
- package/src/components/feedback/styles/feedback.min.css +1 -1
- package/src/components/input-group/styles/input-group.css +2 -2
- package/src/components/input-group/styles/input-group.min.css +1 -1
- package/src/components/loader/styles/loader.css +6 -6
- package/src/components/loader/styles/loader.min.css +1 -1
- package/src/components/loader/styles/skeleton-loader.css +5 -5
- package/src/components/loader/styles/skeleton-loader.min.css +1 -1
- package/src/components/message/styles/message.css +2 -2
- package/src/components/message/styles/message.min.css +1 -1
- package/src/components/pagination/styles/_index.scss +6 -0
- package/src/components/pagination/styles/pagination.css +47 -0
- package/src/components/pagination/styles/pagination.min.css +1 -0
- package/src/components/pagination/styles/pagination.scss +49 -0
- package/src/components/progress-bar/styles/progress-bar.css +2 -2
- package/src/components/progress-bar/styles/progress-bar.min.css +1 -1
- package/src/components/radio-button/styles/radio-button.css +2 -2
- package/src/components/radio-button/styles/radio-button.min.css +1 -1
- package/src/components/system-message/styles/system-message.css +2 -2
- package/src/components/system-message/styles/system-message.min.css +1 -1
- package/src/components/toast/styles/toast.css +4 -4
- package/src/components/toast/styles/toast.min.css +1 -1
- package/src/styles/styles.css +121 -77
- package/src/styles/styles.min.css +1 -1
- package/src/styles/styles.scss +1 -0
- package/build/ExpandableTableRow-BGglv7mF.cjs +0 -2
- package/build/ExpandableTableRow-BfmOT4wb.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),n=require("./clsx-E3yX_9sL.cjs"),s=require("react"),t=require("./cjs/hooks/useAnimatedHeight/useAnimatedHeight.js");require("./cjs/hooks/useScreen/useScreen.js");const o=require("./cjs/hooks/useId/useId.js");require("./cjs/components/icon/Icon.js");const r=require("./cjs/components/icon/icons/animated/ArrowVerticalAnimated.js");require("./cjs/components/icon/icons/animated/ArrowHorizontalAnimated.js"),require("./cjs/components/icon/icons/animated/PlusRemoveAnimated.js"),require("./cjs/components/icon/icons/ArrowDownIcon.js"),require("./cjs/components/icon/icons/ArrowLeftIcon.js"),require("./cjs/components/icon/icons/ArrowNorthEastIcon.js"),require("./cjs/components/icon/icons/ArrowRightIcon.js"),require("./cjs/components/icon/icons/ArrowUpIcon.js"),require("./cjs/components/icon/icons/CalendarIcon.js"),require("./cjs/components/icon/icons/CheckIcon.js"),require("./cjs/components/icon/icons/ChevronDownIcon.js");const a=require("./cjs/components/icon/icons/ChevronLeftIcon.js"),i=require("./cjs/components/icon/icons/ChevronRightIcon.js");require("./cjs/components/icon/icons/ChevronUpIcon.js"),require("./cjs/components/icon/icons/CloseIcon.js"),require("./cjs/components/icon/icons/CopyIcon.js"),require("./cjs/components/icon/icons/DotsIcon.js"),require("./cjs/components/icon/icons/DragIcon.js"),require("./cjs/components/icon/icons/ErrorIcon.js"),require("./cjs/components/icon/icons/GreenCheckIcon.js"),require("./cjs/components/icon/icons/HamburgerIcon.js"),require("./cjs/components/icon/icons/InfoIcon.js"),require("./cjs/components/icon/icons/LinkIcon.js"),require("./cjs/components/icon/icons/PlusIcon.js"),require("./cjs/components/icon/icons/QuestionIcon.js"),require("./cjs/components/icon/icons/RedCrossIcon.js"),require("./cjs/components/icon/icons/SearchIcon.js"),require("./cjs/components/icon/icons/SuccessIcon.js"),require("./cjs/components/icon/icons/WarningIcon.js"),require("./cjs/components/icon/icons/MinusIcon.js"),require("./cjs/components/icon/icons/ThumbDownIcon.js"),require("./cjs/components/icon/icons/ThumbUpIcon.js"),require("./cjs/components/icon/icons/TrashCanIcon.js"),require("./cjs/components/icon/icons/PenIcon.js"),require("./cjs/components/button/Button.js"),require("./cjs/components/card/Card.js"),require("./cjs/components/card/CardImage.js"),require("./cjs/components/card/NavCard.js"),require("./cjs/components/checkbox/Checkbox.js"),require("./cjs/components/combobox/Combobox.js"),require("./cjs/components/cookie-consent/CookieConsentContext.js"),require("react-dom"),require("./cjs/components/modal/Modal.js"),require("react-a11y-dialog"),require("./cjs/components/list/List.js"),require("./cjs/components/list/ListItem.js"),require("./cjs/components/datepicker/DatePicker.js"),require("./cjs/components/feedback/feedbackContext.js"),require("./cjs/components/message/Message.js"),require("./cjs/components/message/FormErrorMessage.js"),require("./cjs/components/tooltip/Tooltip.js"),require("./cjs/components/tooltip/TooltipContent.js"),require("./cjs/components/tooltip/TooltipTrigger.js");const l=require("./cjs/components/input-group/InputGroup.js");require("./cjs/components/feedback/followup/followupContext.js"),require("./cjs/components/feedback/main-question/mainQuestionContext.js"),require("./cjs/components/radio-button/RadioButton.js"),require("./cjs/components/radio-button/radioGroupContext.js"),require("./cjs/components/radio-button/BaseRadioButton.js"),require("./cjs/components/text-input/BaseTextArea.js"),require("./cjs/components/text-input/BaseTextInput.js"),require("./cjs/components/text-input/TextArea.js");const c=require("./cjs/components/text-input/TextInput.js");require("./cjs/utilities/polymorphism/SlotComponent.js"),require("./cjs/components/flex/Flex.js");const u=require("./cjs/components/icon-button/IconButton.js");require("./cjs/components/link/Link.js"),require("./cjs/components/link/NavLink.js"),require("./cjs/components/link-list/LinkList.js"),require("./cjs/components/logo/text-paths/ForsikringLevertAvFremtind.js"),require("./cjs/components/logo/text-paths/FraSB1ogDNB.js"),require("./cjs/components/logo/text-paths/InnovasjonFraFremtind.js"),require("./cjs/components/logo/text-paths/TeknologiFraFremtind.js"),require("./cjs/components/logo/text-paths/VartEgetForsikringsselskap.js"),require("./cjs/components/logo/text-paths/VartForsikringsselskap.js");const p=require("@floating-ui/react"),d=require("framer-motion"),j=require("react-is"),m=require("./cjs/utilities/getThemeAndDensity.js");require("./cjs/components/menu/MenuItem.js"),require("./cjs/components/menu/MenuItemCheckbox.js"),require("./cjs/components/pagination/Pagination.js"),require("./cjs/components/popover/Popover.js");const b=require("./cjs/hooks/usePreviousValue/usePreviousValue.js"),g=require("./cjs/hooks/useListNavigation/useListNavigation.js"),x=require("./cjs/utilities/valuePair.js");require("./cjs/components/system-message/SystemMessage.js"),require("./cjs/components/table/DataTable.js"),require("./cjs/components/table/Table.js"),require("./cjs/components/table/TableBody.js"),require("./cjs/components/table/TableCaption.js");const k=require("./cjs/components/table/TableCell.js");require("./cjs/components/table/TableColumn.js"),require("./cjs/components/table/TableColumnGroup.js");const v=require("./cjs/components/table/tableContext.js");require("./cjs/components/table/tableSectionContext.js"),require("./cjs/components/table/TableFooter.js"),require("./cjs/components/table/TableHead.js"),require("./cjs/components/table/TableHeader.js");const h=require("./cjs/components/table/TableRow.js");require("./cjs/components/tabs/NavTab.js"),require("./cjs/components/tabs/tabsContext.js"),require("./cjs/components/tabs/Tab.js"),require("./cjs/components/tag/Tag.js"),require("./cjs/components/toast/toastContext.js"),require("./cjs/components/toggle-switch/ToggleSwitch.js");const f=require("./cjs/components/select/select-utils.js"),q=require("./cjs/components/menu/useMenuWideEvents.js"),w=require("./cjs/components/ScreenReaderOnly.js");const y=function(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const s in e)if("default"!==s){const t=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(n,s,t.get?t:{enumerable:!0,get:()=>e[s]})}return n.default=e,Object.freeze(n)}(j),C=s.forwardRef((({as:t="button",className:o,children:a,density:i,expandDirection:l="down",isExpanded:c=!1,hideLabel:u=!1,...p},d)=>{const j=u?w.ScreenReaderOnly:s.Fragment,m="down"===l?!c:c,b=t,g="button"===b?"button":void 0;return e.jsxs(b,{"aria-expanded":c,"data-testid":"jkl-expander",type:g,className:n.clsx("jkl-expander",o,{"jkl-expander--expanded":c,"jkl-expander--icon-only":!a}),...p,"data-density":i,ref:d,children:[a&&e.jsx(j,{children:e.jsx("span",{className:"jkl-expander__text",children:a})}),e.jsx(r.ArrowVerticalAnimated,{className:"jkl-expander__arrow",variant:"inherit",pointingDown:m,bold:c})]})}));C.displayName="Expander";const _=s.forwardRef(((t,r)=>{const{children:a,className:i,initialPlacement:l,openOnHover:c=!1,keepOpenOnClickOutside:u=!1,triggerElement:j,isOpen:b,onToggle:g,...x}=t,k=o.useId("jkl-menu"),v=p.useFloatingTree(),h=p.useFloatingNodeId(),f=p.useFloatingParentNodeId(),w=null!=f,C=s.useRef([]),[_,N]=s.useState(null),{allowHover:P,isOpen:I,setIsOpen:T}=q.useMenuWideEvents(v,h,f),E=void 0!==b?b:I;s.useEffect((()=>null==g?void 0:g(E)),[E,g]);const{x:S,y:F,refs:R,placement:A,strategy:L,context:D}=p.useFloating({nodeId:h,open:E,onOpenChange:T,placement:l||(w?"right-start":"bottom-start"),middleware:[p.offset(2),p.flip({fallbackAxisSideDirection:"end",crossAxis:!1}),p.shift({padding:8})],whileElementsMounted:p.autoUpdate}),{getReferenceProps:M,getFloatingProps:O,getItemProps:V}=p.useInteractions([p.useHover(D,{enabled:c&&P,delay:{open:75},handleClose:p.safePolygon({requireIntent:!0,blockPointerEvents:!0})}),p.useClick(D,{event:"mousedown"}),p.useDismiss(D,{outsidePress:!u}),p.useRole(D,{role:"menu"}),p.useListNavigation(D,{listRef:C,activeIndex:_,nested:w,onNavigate:N})]),$=p.useMergeRefs([R.setReference,r]),{theme:B,density:H}=m.getThemeAndDensity(R.reference.current);return e.jsxs(p.FloatingNode,{id:h,children:[s.isValidElement(j)&&("button"===j.type||y.isForwardRef(j))?s.cloneElement(j,{...M({...x,ref:$,role:w?"menuitem":void 0,"aria-controls":k,onClick(e){e.stopPropagation()}})}):j,e.jsx(d.AnimatePresence,{children:E&&e.jsx(p.FloatingPortal,{children:e.jsx(p.FloatingFocusManager,{context:D,modal:!1,initialFocus:w?-1:0,returnFocus:!w,children:e.jsx(d.motion.div,{className:n.clsx("jkl jkl-menu",i),"data-theme":B,"data-layout-density":H,role:"menu",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{ease:"easeIn",duration:.1},"data-placement":A,"aria-live":"assertive","aria-hidden":!E,ref:R.setFloating,...O({id:k,style:{position:L,top:F??"",left:S??""}}),children:s.Children.map(a,((e,n)=>s.isValidElement(e)&&y.isForwardRef(e)?s.cloneElement(e,V({...e.props,tabIndex:_===n?0:-1,role:"menuitem",ref(e){C.current[n]=e},onClick(n){var s,t;null==(t=(s=e.props).onClick)||t.call(s,n),!n.defaultPrevented&&(null==v||v.events.emit("click"))},onKeyDown(n){var s,t;null==(t=(s=e.props).onKeyDown)||t.call(s,n),!n.defaultPrevented&&(null==v||v.events.emit("keydown"),"menuitemcheckbox"===n.currentTarget.role&&"Enter"===n.key&&T(!1))},onMouseEnter(){P&&E&&N(n)}})):e))})})})})]})}));_.displayName="MenuComponent";const N=s.forwardRef(((n,s)=>null===p.useFloatingParentNodeId()?e.jsx(p.FloatingTree,{children:e.jsx(_,{ref:s,...n})}):e.jsx(_,{ref:s,...n})));N.displayName="Menu";const P=()=>{},I=s.forwardRef(((a,i)=>{const{id:c,name:u,items:p,value:d,label:j,labelProps:m,onChange:k,onBlur:v,onFocus:h,className:q,helpLabel:w,errorLabel:y,invalid:C,searchable:_=!1,inline:N=!1,defaultPrompt:I="Velg",density:T,width:E,maxShownOptions:S=5,style:F,tooltipProps:R,...A}=a,L=o.useId(c||"jkl-select",{generateSuffix:!c}),D=`${L}_label`,M=`${L}_button`,O=`${L}_search-input`,[V,$]=s.useState(!1),B=s.useCallback((()=>{$((e=>!e))}),[]),H=!!_,G=H&&V,[K,U]=s.useState(""),W=s.useCallback((e=>!!e.label.toLowerCase().includes(K.toLowerCase())||"function"==typeof _&&_(K,e)),[_,K]),z=s.useMemo((()=>p.map(x.getValuePair).map((e=>{const n=!H||""===K||W(e);return{...e,visible:n}}))),[p,H,K,W]),Q=s.useMemo((()=>!(typeof d>"u")&&p.some((e=>"string"==typeof e?e===d:e.value===d))),[d,p]),[J,X]=s.useState(Q&&void 0!==d?d:""),Y=""!==J,Z=s.useMemo((()=>{var e;return(null==(e=z.find((e=>e.value===J)))?void 0:e.label)||I}),[z,J,I]),ee=s.useRef(null),ne=s.useCallback((e=>{ee.current=e,i&&("function"==typeof i?i(e):i.current=e),e&&X(e.value)}),[ee,i]),se=b.usePreviousValue(d);s.useEffect((()=>{d!==se&&X(typeof d>"u"||!Q?"":d)}),[X,d,se,Q]);const te=s.useCallback((e=>{const n=e.value;U(""),X(n),B()}),[U,X,B]),oe=b.usePreviousValue(J);s.useEffect((()=>{typeof oe>"u"||oe===J||J===d||(k&&k({type:"change",target:{name:u,value:J}}),ee.current&&ee.current.dispatchEvent(new Event("change",{bubbles:!0})))}),[k,u,d,J,oe]);const re=s.useRef(null),ae=s.useRef(!1),ie=s.useRef(null),le=s.useRef(null),ce=s.useCallback(((e,n)=>{if(e&&!H){const e=n.current;e&&f.focusSelected(e,J)}else e?ie.current&&ie.current.focus():ae.current&&le.current&&le.current.focus()}),[H,J]),[ue]=t.useAnimatedHeight(V,{onFirstVisible:ce,onTransitionEnd:ce});g.useListNavigation({ref:ue});const pe=s.useCallback((()=>{var e;H&&U(""),v&&(v({type:"blur",target:{name:u,value:J}}),null==(e=ee.current)||e.dispatchEvent(new Event("focusout",{bubbles:!0}))),ae.current=!1,$(!1)}),[v,U,$,H,u,J]),de=s.useCallback((e=>{const n=re.current;n&&n.contains(e.relatedTarget)||pe()}),[pe]),je=s.useCallback((()=>{ae.current||(h&&h({type:"change",target:{name:u,value:J}}),ae.current=!0)}),[h,J,u]),me=s.useCallback((e=>{e.target.focus({preventScroll:!0})}),[]);s.useEffect((()=>{const e=ee.current,n=ie.current,s=le.current,t=re.current;return null==e||e.addEventListener("focus",(()=>{G?null==n||n.focus():null==s||s.focus()})),null==e||e.addEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()})),()=>{null==e||e.removeEventListener("focus",(()=>{G?null==n||n.focus():null==s||s.focus()})),null==e||e.removeEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()}))}}),[G]);const be=s.useCallback((e=>{"ArrowDown"!==e.key&&" "!==e.key||V?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),$(!1)):(e.preventDefault(),e.stopPropagation(),$(!0))}),[$,V]),ge=s.useCallback((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const n=ue.current;n&&(H?f.focusSelected(n,void 0):f.focusSelected(n,J))}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),$(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&V&&(e.preventDefault(),e.stopPropagation());else{const n=ue.current;n&&(e.preventDefault(),e.stopPropagation(),f.focusSelected(n,J))}}),[$,ue,J,H,V]),xe=s.useCallback((e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&ie.current?ie.current.focus():le.current&&(X(e.currentTarget.value),$(!1),le.current.focus());else if("ArrowUp"===e.key&&ue.current&&ie.current){const n=ue.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==n?void 0:n.id)&&ie.current&&ie.current.focus()}}),[$,ue]);return s.useEffect((()=>{const e=e=>{"Escape"===e.key&&V&&$(!1)};return typeof window<"u"&&V&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}}),[$,V]),e.jsxs(e.Fragment,{children:[e.jsxs("select",{name:u,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:ne,value:J,onChange:P,children:[e.jsx("option",{value:""})," ",z.map((n=>e.jsx("option",{hidden:!n.visible,value:n.value,children:n.label},`${L}-opt-${n.value}`)))]}),e.jsx(l.InputGroup,{ref:re,"data-testid":"jkl-select",className:n.clsx("jkl-select",q,{"jkl-select--inline":N,"jkl-select--open":V&&z.some((e=>e.visible)),"jkl-select--no-value":!Y,"jkl-select--invalid":!!y||C}),tooltipProps:R&&{...R,triggerProps:{...R.triggerProps,onFocus:e=>{var n,s;null==(s=null==(n=R.triggerProps)?void 0:n.onFocus)||s.call(n,e),pe()}}},...A,id:H?O:M,style:{"--jkl-select-max-shown-options":S,...F},density:T,label:j,labelProps:{id:D,srOnly:N,...m,htmlFor:H?O:M},helpLabel:w,errorLabel:y,render:s=>e.jsxs("div",{className:"jkl-select__outer-wrapper",style:{width:E},children:[H&&e.jsx("input",{...s,id:O,hidden:!G,ref:ie,placeholder:"Søk",value:K,onChange:e=>U(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":Y?`${L}__${f.toLower(J)}`:void 0,"aria-controls":L,"aria-expanded":V,role:"combobox",onKeyDown:ge,onBlur:de,onFocus:je,onClick:e=>{e.stopPropagation()}}),e.jsx("button",{...s,id:M,ref:le,hidden:G,type:"button",name:`${u}-btn`,className:n.clsx("jkl-select__button",{"jkl-select__button--active-value":!!J}),"data-testid":"jkl-select__button","aria-label":`${Z||"Velg"},${j}`,"aria-expanded":V,"aria-controls":L,onBlur:de,onFocus:je,onKeyDown:be,onClick:B,onMouseDown:e=>{var n;e.preventDefault(),null==(n=le.current)||n.focus()},children:Z}),e.jsx("div",{id:L,ref:ue,role:"listbox",className:"jkl-select__options-menu",hidden:!V||z.every((e=>!e.visible)),"aria-labelledby":D,tabIndex:-1,"data-focus":"controlled",children:z.map(((n,s)=>n.visible?e.jsxs("button",{hidden:!n.visible,type:"button",id:`${L}__${f.toLower(n.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":n.value===J,role:"option",value:n.value,"data-testautoid":`jkl-select__option-${s}`,onBlur:de,onFocus:je,onKeyDown:xe,onClick:e=>{e.preventDefault(),te(n)},onMouseOver:me,children:[n.label,n.description?e.jsx("span",{className:"jkl-select__option-description",children:n.description}):null]},`${L}-${n.value}`):null))}),e.jsx(r.ArrowVerticalAnimated,{variant:"medium",pointingDown:!V,className:"jkl-select__arrow"})]})})]})}));I.displayName="Select";const T=s.forwardRef(((s,t)=>{const{label:o,className:a,density:i,errorLabel:c,helpLabel:u,inline:p,invalid:d,items:j,labelProps:m,placeholder:b="Velg",selectClassName:g,supportLabelProps:k,tooltipProps:v,value:h,width:f,...q}=s,w={label:o,density:i,errorLabel:c,helpLabel:u,labelProps:m,inline:p,supportLabelProps:k,tooltipProps:v};return e.jsx(l.InputGroup,{...w,"data-testid":"jkl-select",className:n.clsx("jkl-select",a,{"jkl-select--inline":p,"jkl-select--invalid":!!c||d}),render:s=>e.jsxs("div",{className:"jkl-select__outer-wrapper",style:{width:f},children:[e.jsxs("select",{ref:t,className:n.clsx("jkl-select__button",g,{"jkl-select__button--active-value":!!h}),defaultValue:h?void 0:"",value:h,...s,...q,children:[b&&!h&&e.jsx("option",{disabled:!0,value:"",children:b}),j.map(x.getValuePair).map((n=>e.jsx("option",{"data-testid":"jkl-select__option",className:"jkl-select__option",value:n.value,children:n.label},n.value)))]}),e.jsx(r.ArrowVerticalAnimated,{variant:"medium",pointingDown:!0,className:"jkl-select__arrow"})]})})}));T.displayName="NativeSelect";const E=s.forwardRef(((t,r)=>{const{activePage:l=0,totalNumberOfRows:p,rowsPerPage:d,rowsPerPageItems:j,className:m,density:b,id:g,withGoToPage:x=!1,onChange:k,onChangeRowsPerPage:h,labels:f={rowsPerPage:"Rader per side",previous:"Forrige",next:"Neste"},...q}=t,w=o.useId(g||"jkl-table-pagination",{generateSuffix:!g}),{density:y}=v.useTableContext(),C=d<=0?1:Math.ceil(p/d),[_,N]=s.useState(function(e,n,s){return n<e?e:n>s?s:n}(0,l,C-1)),P=s.useCallback((e=>{const n=Number.parseInt(e.currentTarget.dataset.number);k(e,n,_),N(n),E(String(n+1))}),[k,N,_]),[I,E]=s.useState(String(_+1)),F=s.useCallback((e=>{E(e.target.value);try{const n=Number.parseInt(e.target.value)-1;if(Number.isNaN(n))return;n>=0&&n<C&&(k(e,n,_),N(n))}catch{return}}),[k,E,N,_,C]),R=s.useCallback((e=>{if(0===_)return void k(e,_,_);const n=_-1;k(e,n,_),N(n),E(String(n+1))}),[k,N,_]),A=s.useCallback((e=>{if(_===C-1)return void k(e,_,_);const n=_+1;k(e,n,_),N(n),E(String(n+1))}),[k,N,C,_]);return e.jsxs("div",{className:n.clsx("jkl-table-pagination",m),...q,id:w,"data-density":b||y,ref:r,children:[e.jsx("div",{className:"jkl-table-pagination__left",children:e.jsxs("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--rows",children:[e.jsxs("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:[f.rowsPerPage,":"]}),e.jsx(T,{className:"jkl-table-pagination__picker-input",label:f.rowsPerPage,labelProps:{srOnly:!0},name:`${w}-rows-per-page`,items:j.map((e=>"number"==typeof e?String(e):{label:e.label,value:String(e.value)})),value:String(d),onChange:h,width:"min(8rem, 100%)",inline:!0})]})}),e.jsx("div",{className:"jkl-table-pagination__right",children:1!==C&&e.jsxs("nav",{className:"jkl-table-pagination__nav",children:[x&&e.jsxs("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--page",children:[e.jsxs("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:["object"==typeof x?x.gotoLabel:"Gå til side",":"]}),e.jsx(c.TextInput,{className:"jkl-table-pagination__picker-input",label:"object"==typeof x?x.gotoLabel:"Gå til side",labelProps:{srOnly:!0},name:`${w}-go-to-page`,value:I,width:"min(4rem, 100%)",onChange:F,"aria-invalid":I&&I!==String(_+1)?"true":void 0})]}),e.jsxs("ul",{children:[e.jsx("li",{children:e.jsx(u.IconButton,{className:"jkl-table-pagination__previous",title:f.previous,onClick:R,children:e.jsx(a.ChevronLeftIcon,{})})}),e.jsx(S,{id:w,activePage:l,numberOfPages:C,onPageClick:P}),e.jsx("li",{children:e.jsx(u.IconButton,{className:"jkl-table-pagination__next",title:f.next,onClick:A,children:e.jsx(i.ChevronRightIcon,{})})})]})]})})]})})),S=({id:s,activePage:t,numberOfPages:o,onPageClick:r})=>{if(o<=7)return e.jsx(e.Fragment,{children:Array.from({length:o}).map(((o,a)=>e.jsx("li",{children:e.jsx("button",{className:n.clsx("jkl-table-pagination__page",{"jkl-table-pagination__page--active":t===a}),type:"button","data-number":a,onClick:r,children:a+1})},`${s}-page-${a}`)))});const a=t>3&&o>7,i=t<o-4&&o>7,l=Math.min(Math.max(t-2,1),o-6),c=Math.min(l+1,o-5),u=Math.min(c+1,o-4),p=Math.min(c+2,o-3),d=Math.min(c+3,o-2);return e.jsxs(e.Fragment,{children:[e.jsx("li",{children:e.jsx(F,{isActive:0===t,number:0,onClick:r})}),e.jsx("li",{children:a?e.jsx("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):e.jsx(F,{isActive:t===l,number:l,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===c,number:c,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===u,number:u,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===p,number:p,onClick:r})}),e.jsx("li",{children:i?e.jsx("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):e.jsx(F,{isActive:t===d,number:d,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===o-1,number:o-1,onClick:r})})]})},F=({isActive:s,number:t,onClick:o,...r})=>e.jsx("button",{className:n.clsx("jkl-table-pagination__page",{"jkl-table-pagination__page--active":s}),type:"button","data-number":t,onClick:o,...r,children:t+1});E.displayName="TablePagination";const R=s.forwardRef((({isOpen:s,onClick:t,children:o,className:r,id:a,"aria-controls":i,...l},c)=>{if(void 0===s||"function"!=typeof t)throw new Error("ExpandableTableRowController must have ExpandableTableRow as parent");const{density:u,collapseToList:p}=v.useTableContext(),d=l["data-th"],j=p?d:void 0;return e.jsx(k.TableCell,{className:n.clsx("jkl-table-cell--expand",{"jkl-table-cell--expand-without-text":!o},r),...l,ref:c,children:e.jsx(C,{className:n.clsx("jkl-table-row-expand-button",{"jkl-table-row-expand-button--expanded":s}),id:a,density:u,isExpanded:s,"aria-controls":i,"aria-label":o?void 0:d||"Ekspander rad",onClick:e=>{e.stopPropagation(),t()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.stopPropagation(),e.preventDefault(),t())},children:o??j})})}));R.displayName="ExpandableTableRowController";const A=s.forwardRef(((r,a)=>{const{className:i,clickable:l,children:c,expandedChildren:u,onToggle:p,colSpan:d=100,isOpen:j,...m}=r,[b,g]=s.useState(j??!1);s.useEffect((()=>{typeof j>"u"||g(j)}),[j]);const[x]=t.useAnimatedHeight(b,{timing:"expressive"}),k=()=>{const e=!b;p&&p(e),g(e)},v=n.clsx("jkl-table-row--expandable",i,{"jkl-table-row--expanded":b,"jkl-expandable-table-row--clickable-external":l}),f=n.clsx("jkl-expandable-table-row__expanded-row",{"jkl-expandable-table-row__expanded-row--expanded":b}),q=o.useId("jkl-expandable-table-row"),w=o.useId("jkl-expandable-table-row-controller");return e.jsxs(e.Fragment,{children:[e.jsx(h.TableRow,{className:v,clickable:l??{onClick:()=>k()},...m,ref:a,children:s.Children.map(c,(e=>s.isValidElement(e)&&e.type==R?s.cloneElement(e,{isOpen:b,onClick:()=>k(),"aria-controls":q,id:w}):e))}),e.jsx("tr",{"aria-hidden":!b,children:e.jsx("td",{colSpan:d,children:e.jsx("div",{ref:x,className:f,id:q,"aria-labelledby":w,hidden:!b,role:"group",children:u})})})]})}));A.displayName="ExpandableTableRow",exports.ExpandableTableRow=A,exports.ExpandableTableRowController=R,exports.Expander=C,exports.Menu=N,exports.NativeSelect=T,exports.Select=I,exports.TablePagination=E;
|
|
2
|
+
//# sourceMappingURL=ExpandableTableRow-DXlyfK8L.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpandableTableRow-BGglv7mF.cjs","sources":["../src/components/expander/Expander.tsx","../src/components/menu/Menu.tsx","../src/components/select/Select.tsx","../src/components/select/NativeSelect.tsx","../src/components/table/TablePagination.tsx","../src/components/table/ExpandableTableRowController.tsx","../src/components/table/ExpandableTableRow.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ForwardedRef } from \"react\";\nimport { Density, ScreenReaderOnly, WithChildren } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport type ExpandDirection = \"up\" | \"down\";\n\nexport interface ExpanderProps extends WithChildren {\n as?: \"summary\" | \"button\";\n /** Må settes dersom du ikke bruker CoreToggle. Verdien skal være IDen til innholdet du ekspanderer. */\n \"aria-controls\"?: string;\n /** Må settes dersom du ikke bruker CoreToggle. IDen her skal brukes som verdien til aria-labelledby på innholdet du ekspanderer. */\n id?: string;\n className?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n /**\n * Styrer retningen til pila, som animeres ved endring. Styrer også aria-expanded.\n * @default false\n */\n isExpanded?: boolean;\n /** @default \"down\" */\n expandDirection?: ExpandDirection;\n density?: Density;\n /**\n * Skjul knappeteksten visuelt.\n *\n * @default false\n */\n hideLabel?: boolean;\n}\n\nexport const Expander = React.forwardRef(\n (\n {\n as = \"button\",\n className,\n children,\n density,\n expandDirection = \"down\",\n isExpanded = false,\n hideLabel = false,\n ...rest\n }: ExpanderProps,\n ref: ForwardedRef<HTMLButtonElement>,\n ): JSX.Element => {\n const ContentWrapper = hideLabel ? ScreenReaderOnly : React.Fragment;\n const pointingDown = expandDirection === \"down\" ? !isExpanded : isExpanded;\n\n const El = as;\n const type = El === \"button\" ? \"button\" : undefined;\n\n return (\n <El\n aria-expanded={isExpanded}\n data-testid=\"jkl-expander\"\n type={type}\n className={clsx(\"jkl-expander\", className, {\n \"jkl-expander--expanded\": isExpanded,\n \"jkl-expander--icon-only\": !children,\n })}\n {...rest}\n data-density={density}\n ref={ref}\n >\n {children && (\n <ContentWrapper>\n <span className=\"jkl-expander__text\">{children}</span>\n </ContentWrapper>\n )}\n <ArrowVerticalAnimated\n className=\"jkl-expander__arrow\"\n variant=\"inherit\"\n pointingDown={pointingDown}\n bold={isExpanded}\n />\n </El>\n );\n },\n);\n\nExpander.displayName = \"Expander\";\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n type Placement,\n safePolygon,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, { type ButtonHTMLAttributes, forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport * as ReactIs from \"react-is\";\nimport { type DataTestAutoId, getThemeAndDensity, WithChildren } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents\";\n\nexport interface MenuProps\n extends DataTestAutoId,\n WithChildren,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n className?: string;\n /**\n * Initiell plassering av menyen. Dersom det ikke er plass på skjermen der du\n * angir at den skal åpnes vil den slyttes automatisk.\n * @default \"bottom-start\" på toppnivå, \"right-start\" for undermenyer\n * */\n initialPlacement?: Placement;\n /**\n * Angir om menyen skal åpnes ved hover (uten å måtte klikke)\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Angir om menyen skal holdes åpen når man klikker utenfor menyen\n * @default false\n */\n keepOpenOnClickOutside?: boolean;\n /**\n * Elementet som fungerer som trigger for menyen. Dersom elementet ikke er en `<button>`\n * eller en `forwardRef<HTMLButtonElement>` vil det bli lagt inne i en knapp\n * med forhåndsdefinert stil. For å komme raskt i gang kan du bruke komponenten\n * `MenuTriggerButton` fra denne pakken.\n */\n triggerElement: ReactNode;\n /**\n * Kan brukes til å styre utenfra om menyen skal være åpen eller ikke.\n * @default false\n */\n isOpen?: boolean;\n /**\n * Callback som kalles når menyen åpnes eller lukkes.\n */\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>((props, forwardedRef) => {\n const {\n children,\n className,\n initialPlacement,\n openOnHover = false,\n keepOpenOnClickOutside = false,\n triggerElement,\n isOpen: isOpenOverride,\n onToggle,\n ...triggerProps\n } = props;\n\n const MenuId = useId(\"jkl-menu\");\n\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n\n const listItemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const { allowHover, isOpen: isOpenDefault, setIsOpen } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen = isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { x, y, refs, placement, strategy, context } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement: initialPlacement || (isNested ? \"right-start\" : \"bottom-start\"),\n middleware: [\n offset(2),\n flip({\n fallbackAxisSideDirection: \"end\", // Allow bottom placement in narrow viewports (https://floating-ui.com/docs/flip#fallbackaxissidedirection)\n crossAxis: false, // See https://floating-ui.com/docs/flip#combining-with-shift\n }),\n shift({ padding: 8 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useHover(context, {\n enabled: openOnHover && allowHover,\n delay: { open: 75 },\n handleClose: safePolygon({\n requireIntent: true,\n blockPointerEvents: true,\n }),\n }),\n useClick(context, {\n event: \"mousedown\",\n }),\n useDismiss(context, { outsidePress: !keepOpenOnClickOutside }),\n useRole(context, { role: \"menu\" }),\n useListNavigation(context, {\n listRef: listItemsRef,\n activeIndex,\n nested: isNested,\n onNavigate: setActiveIndex,\n }),\n ]);\n\n const referenceRef = useMergeRefs([refs.setReference, forwardedRef]);\n\n // Siden menyen rendres på rot må vi hente lokal dark/light-verdi fra triggeren\n // Vi må gjøre dette for å ta hensyn til at tema kan styres lokalt for deler av UIet\n const { theme, density } = getThemeAndDensity(refs.reference.current as HTMLElement);\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" || ReactIs.isForwardRef(triggerElement))\n ? // Dersom trigger-elementet er en knapp, sett riktige egenskaper på det\n React.cloneElement(triggerElement, {\n ...getReferenceProps({\n ...triggerProps,\n ref: referenceRef,\n role: isNested ? \"menuitem\" : undefined,\n \"aria-controls\": MenuId,\n onClick(event) {\n event.stopPropagation();\n },\n }),\n })\n : // Ellers, rendre elementet as-is, uten interaktivitet. Krev en ferdig brukbar button for å åpne menyen.\n triggerElement}\n <AnimatePresence>\n {isOpen && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n // Prevent outside content interference.\n modal={false}\n // Only initially focus the root floating menu.\n initialFocus={isNested ? -1 : 0}\n // Only return focus to the root menu's reference when menus close.\n returnFocus={!isNested}\n >\n <motion.div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: \"easeIn\", duration: 0.1 }}\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n position: strategy,\n top: y ?? \"\",\n left: x ?? \"\",\n },\n })}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && ReactIs.isForwardRef(child)) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex: activeIndex === index ? 0 : -1,\n role: \"menuitem\",\n ref(node: HTMLButtonElement) {\n listItemsRef.current[index] = node;\n },\n onClick(event) {\n child.props.onClick?.(event as React.MouseEvent<HTMLButtonElement>);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"click\");\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"keydown\");\n if (\n event.currentTarget.role === \"menuitemcheckbox\" &&\n event.key === \"Enter\"\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/menuitemcheckbox_role#keyboard_interactions\n setIsOpen(false);\n }\n },\n onMouseEnter() {\n if (allowHover && isOpen) {\n setActiveIndex(index);\n }\n },\n }),\n );\n }\n\n return child;\n })}\n </motion.div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </AnimatePresence>\n </FloatingNode>\n );\n});\nMenuComponent.displayName = \"MenuComponent\";\n\nexport const Menu = forwardRef<HTMLButtonElement, MenuProps>((props, ref) => {\n const parentId = useFloatingParentNodeId();\n\n if (parentId === null) {\n return (\n <FloatingTree>\n <MenuComponent ref={ref} {...props} />\n </FloatingTree>\n );\n }\n\n return <MenuComponent ref={ref} {...props} />;\n});\nMenu.displayName = \"Menu\";\n","import clsx from \"clsx\";\nimport React, {\n FocusEvent,\n forwardRef,\n useEffect,\n useRef,\n useState,\n KeyboardEvent,\n ChangeEvent,\n useCallback,\n useMemo,\n RefObject,\n MouseEvent,\n CSSProperties,\n} from \"react\";\nimport { type ValuePair, getValuePair, type DataTestAutoId, type Density } from \"../..\";\nimport { useId, useAnimatedHeight, usePreviousValue, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type LabelProps, type InputGroupProps } from \"../input-group\";\nimport { toLower, focusSelected } from \"./select-utils\";\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, \"target\">> {\n /** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */\n type: \"change\" | \"blur\";\n target: {\n /** Kreves av react-hook-form for å vite hvilket skjemafelt som ble endret */\n name: string;\n value: string;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface Option extends ValuePair {\n visible: boolean;\n}\n\nexport interface SelectProps extends Omit<InputGroupProps, \"children\">, DataTestAutoId {\n id?: string;\n name: string;\n label: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<string | ValuePair>;\n /**\n * @default false\n */\n inline?: boolean;\n /**\n * @default \"Velg\"\n */\n defaultPrompt?: string;\n className?: string;\n value?: string;\n helpLabel?: string;\n errorLabel?: string;\n /**\n * @default false\n */\n searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);\n density?: Density;\n width?: string;\n onChange?: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Hvor mange valg skal vises i listen før den begynner å scrolle.\n * @default 5\n */\n maxShownOptions?: number;\n}\n\nconst noop = () => {\n return;\n};\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>((props, forwardedSelectRef) => {\n const {\n id,\n name,\n items,\n value,\n label,\n labelProps,\n onChange,\n onBlur,\n onFocus,\n className,\n helpLabel,\n errorLabel,\n invalid,\n searchable = false,\n inline = false,\n defaultPrompt = \"Velg\",\n density,\n width,\n maxShownOptions = 5,\n style,\n tooltipProps,\n ...rest\n } = props;\n\n const listId = useId(id || \"jkl-select\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const searchInputId = `${listId}_search-input`;\n\n const [dropdownIsShown, setShown] = useState(false);\n const toggleListVisibility = useCallback(() => {\n setShown((previousValue) => !previousValue);\n }, []);\n\n /// Søk\n\n const isSearchable = Boolean(searchable);\n const showSearchInputField = isSearchable && dropdownIsShown;\n const [searchValue, setSearchValue] = useState(\"\");\n const searchFn = useCallback(\n (item: ValuePair) => {\n if (item.label.toLowerCase().includes(searchValue.toLowerCase())) {\n return true;\n }\n\n if (typeof searchable === \"function\") {\n return searchable(searchValue, item);\n }\n\n return false;\n },\n [searchable, searchValue],\n );\n const visibleItems: Option[] = useMemo(\n () =>\n items.map(getValuePair).map((item) => {\n const visible = !isSearchable || searchValue === \"\" || searchFn(item);\n return { ...item, visible };\n }),\n [items, isSearchable, searchValue, searchFn],\n );\n const valueIsInItems: boolean = useMemo(() => {\n if (typeof value === \"undefined\") {\n return false;\n }\n return items.some((item) => (typeof item === \"string\" ? item === value : item.value === value));\n }, [value, items]);\n\n /// Valg av <option>\n\n const [selectedValue, setSelectedValue] = useState<string>(valueIsInItems && value !== undefined ? value : \"\");\n const hasSelectedValue = selectedValue !== \"\";\n const selectedValueLabel = useMemo(\n () => visibleItems.find((item) => item.value === selectedValue)?.label || defaultPrompt,\n [visibleItems, selectedValue, defaultPrompt],\n );\n\n const selectRef = useRef<HTMLSelectElement | null>(null);\n // Hjelpefunksjon som gjør det enklere å forwarde refen og å bruke den selv internt\n const unifiedSelectRef = useCallback(\n (instance: HTMLSelectElement | null) => {\n selectRef.current = instance;\n if (forwardedSelectRef) {\n if (typeof forwardedSelectRef === \"function\") {\n forwardedSelectRef(instance);\n } else {\n forwardedSelectRef.current = instance;\n }\n }\n if (instance) {\n setSelectedValue(instance.value);\n }\n },\n [selectRef, forwardedSelectRef],\n );\n\n const previousValue = usePreviousValue(value);\n useEffect(() => {\n if (value === previousValue) {\n return;\n }\n if (typeof value === \"undefined\" || !valueIsInItems) {\n setSelectedValue(\"\");\n } else {\n setSelectedValue(value);\n }\n }, [setSelectedValue, value, previousValue, valueIsInItems]);\n\n const selectOption = useCallback(\n (item: Option) => {\n const nextValue = item.value;\n setSearchValue(\"\");\n setSelectedValue(nextValue);\n toggleListVisibility();\n },\n [setSearchValue, setSelectedValue, toggleListVisibility],\n );\n\n // La komponenten rendre <select> med den valgte verdien før onChange trigges, slik at\n // react-hook-form@>7.41.1 behandler feltet som at det har en verdi.\n const previousSelectedValue = usePreviousValue(selectedValue);\n useEffect(() => {\n // previousSelectedValue er undefined på første render, men da vil vi ikke ha en onChange uansett\n if (\n typeof previousSelectedValue === \"undefined\" ||\n previousSelectedValue === selectedValue ||\n selectedValue === value\n ) {\n return;\n }\n if (onChange) {\n onChange({ type: \"change\", target: { name, value: selectedValue } });\n }\n if (selectRef.current) {\n selectRef.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }, [onChange, name, value, selectedValue, previousSelectedValue]);\n\n /// Fokushåndtering\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n const searchFieldRef = useRef<HTMLInputElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleFocusPlacement = useCallback(\n (isOpen: boolean, ref: RefObject<HTMLElement>) => {\n if (isOpen && !isSearchable) {\n const listElement = ref.current;\n if (listElement) {\n focusSelected(listElement, selectedValue);\n }\n } else if (isOpen) {\n if (searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && buttonRef.current) {\n buttonRef.current.focus();\n }\n }\n },\n [isSearchable, selectedValue],\n );\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(dropdownIsShown, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const close = useCallback(() => {\n if (isSearchable) {\n setSearchValue(\"\");\n }\n if (onBlur) {\n onBlur({ type: \"blur\", target: { name, value: selectedValue } });\n selectRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShown(false);\n }, [onBlur, setSearchValue, setShown, isSearchable, name, selectedValue]);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLButtonElement | HTMLInputElement>) => {\n const componentRootElement = componentRootElementRef.current;\n // There are known issues in Firefox when using \"relatedTarget\" in onBlur events:\n // https://github.com/facebook/react/issues/2011\n // This might be fixed in react 17. Se issue above.\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n close();\n }\n },\n [close],\n );\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({ type: \"change\", target: { name, value: selectedValue } });\n }\n focusInsideRef.current = true;\n }\n }, [onFocus, selectedValue, name]);\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Handle focus and blur of hidden select element\n useEffect(() => {\n const select = selectRef.current;\n const searchField = searchFieldRef.current;\n const button = buttonRef.current;\n const componentRootElement = componentRootElementRef.current;\n\n select?.addEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.addEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n\n return () => {\n select?.removeEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.removeEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n };\n }, [showSearchInputField]);\n\n /// Tastaturnavigasjon\n\n // Add support for opening dropdown with arrowkey down as expected from native select\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if ((e.key === \"ArrowDown\" || e.key === \" \") && !dropdownIsShown) {\n e.preventDefault();\n e.stopPropagation();\n setShown(true);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n }\n },\n [setShown, dropdownIsShown],\n );\n\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n\n const listElement = dropdownRef.current;\n if (listElement) {\n if (isSearchable) {\n // Flytt fokus til det første elementet i listen, ikke det forrige valgte.\n // Ved endring i filter er det ikke gitt at vi ønsker å ta utgangspunkt i\n // den valgte verdien.\n focusSelected(listElement, undefined);\n } else {\n focusSelected(listElement, selectedValue);\n }\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n } else if (e.key === \"Tab\" && !e.shiftKey) {\n const listElement = dropdownRef.current;\n if (listElement) {\n e.preventDefault();\n e.stopPropagation();\n focusSelected(listElement, selectedValue);\n }\n } else if (e.key === \"Enter\" && dropdownIsShown) {\n // Should not propagate Enter keyevent because form might submit\n e.preventDefault();\n e.stopPropagation();\n }\n },\n [setShown, dropdownRef, selectedValue, isSearchable, dropdownIsShown],\n );\n\n // onKeyDown so this Tab listener isn't triggered by tabbing from search field to option\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey && searchFieldRef.current) {\n searchFieldRef.current.focus();\n } else if (buttonRef.current) {\n // Mimic behaviour of Firefox and native select, where Tab selects the current item and closes the menu\n setSelectedValue(e.currentTarget.value);\n setShown(false);\n buttonRef.current.focus();\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchFieldRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n }\n }\n },\n [setShown, dropdownRef],\n );\n\n // Add support for closing the dropdown with Escape like native select. Unfortunately, Escape does not trigger the button onKeyDown.\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && dropdownIsShown) {\n setShown(false);\n }\n };\n if (typeof window !== \"undefined\" && dropdownIsShown) {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShown, dropdownIsShown]);\n\n return (\n <>\n <select\n name={name}\n tabIndex={-1}\n data-testid=\"jkl-native-select\"\n className=\"jkl-sr-only\"\n aria-hidden\n ref={unifiedSelectRef}\n value={selectedValue}\n onChange={noop} // React complains unless we give an onChange handler. This is technically a read-only field, but readOnly isn't an option here.\n >\n <option value=\"\"></option> {/* Tom option må være et valg, ellers vil <select> alltid ha en value */}\n {visibleItems.map((item) => (\n <option key={`${listId}-opt-${item.value}`} hidden={!item.visible} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n <InputGroup\n ref={componentRootElementRef}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--open\": dropdownIsShown && visibleItems.some((item) => item.visible),\n \"jkl-select--no-value\": !hasSelectedValue,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n tooltipProps={\n tooltipProps && {\n ...tooltipProps,\n triggerProps: {\n ...tooltipProps.triggerProps,\n onFocus: (e) => {\n tooltipProps.triggerProps?.onFocus?.(e);\n close();\n },\n },\n }\n }\n {...rest}\n id={isSearchable ? searchInputId : buttonId}\n style={{ [\"--jkl-select-max-shown-options\"]: maxShownOptions, ...style } as CSSProperties}\n density={density}\n label={label}\n labelProps={{\n id: labelId,\n srOnly: inline,\n ...labelProps,\n htmlFor: isSearchable ? searchInputId : buttonId,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n {isSearchable && (\n <input\n {...inputProps}\n id={searchInputId}\n hidden={!showSearchInputField}\n ref={searchFieldRef}\n placeholder=\"Søk\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n data-testid=\"jkl-select__search-input\"\n className=\"jkl-select__search-input\"\n aria-autocomplete=\"list\"\n aria-activedescendant={\n hasSelectedValue ? `${listId}__${toLower(selectedValue)}` : undefined\n }\n aria-controls={listId}\n aria-expanded={dropdownIsShown}\n role=\"combobox\"\n onKeyDown={handleSearchOnKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <button\n {...inputProps}\n id={buttonId}\n ref={buttonRef}\n hidden={showSearchInputField}\n type=\"button\"\n name={`${name}-btn`}\n className={clsx(\"jkl-select__button\", {\n \"jkl-select__button--active-value\": !!selectedValue,\n })}\n data-testid=\"jkl-select__button\"\n aria-label={`${selectedValueLabel || \"Velg\"},${label}`}\n aria-expanded={dropdownIsShown}\n aria-controls={listId}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOnKeyDown}\n onClick={toggleListVisibility}\n onMouseDown={(e) => {\n // Workaround for en Safari-bug hvor e.relatedTarget er null i onBlur\n // https://twitter.com/MilesSorce/status/1278762360669265925\n e.preventDefault();\n buttonRef.current?.focus();\n }}\n >\n {selectedValueLabel}\n </button>\n <div\n id={listId}\n ref={dropdownRef}\n role=\"listbox\"\n className=\"jkl-select__options-menu\"\n hidden={!dropdownIsShown || visibleItems.every((item) => !item.visible)}\n aria-labelledby={labelId}\n tabIndex={-1}\n data-focus=\"controlled\" // lar oss styre markering av valg vha focus\n >\n {visibleItems.map((item, i) =>\n // Det er viktig at vi _fjerner_ elementer som ikke er synlige fra DOMen for at tastaturnavigasjon skal fungere.\n // For eksempel, hvis vi har elementene Apple, Samsung og LG i den rekkefølgen og søker etter \"l\"\n // vil Samsung ikke synes. Om vi bare setter hidden-attributtet på Samsung vil ArrowDown fra Apple ikke fungere.\n // Dette lar seg ikke gjenskape i en enhetstest med JSDOM + user-events, og Cypress lukker Select\n // ved første {downArrow} ¯\\_(ツ)_/¯. Så please test scenariet over manuelt om dette skaper trøbbel for deg.\n item.visible ? (\n <button\n key={`${listId}-${item.value}`}\n hidden={!item.visible}\n type=\"button\"\n id={`${listId}__${toLower(item.value)}`}\n className=\"jkl-select__option\"\n data-testid=\"jkl-select__option\"\n aria-selected={item.value === selectedValue}\n role=\"option\"\n value={item.value}\n data-testautoid={`jkl-select__option-${i}`}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n e.preventDefault();\n selectOption(item);\n }}\n onMouseOver={handleMouseOver}\n >\n {item.label}\n {item.description ? (\n <span className=\"jkl-select__option-description\">{item.description}</span>\n ) : null}\n </button>\n ) : null,\n )}\n </div>\n <ArrowVerticalAnimated\n variant=\"medium\"\n pointingDown={!dropdownIsShown}\n className=\"jkl-select__arrow\"\n />\n </div>\n )}\n />\n </>\n );\n});\n\nSelect.displayName = \"Select\";\n","import clsx from \"clsx\";\nimport React, { forwardRef, SelectHTMLAttributes } from \"react\";\nimport { type ValuePair, getValuePair } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type InputGroupProps } from \"../input-group\";\n\nexport interface NativeSelectProps extends Omit<InputGroupProps, \"children\">, SelectHTMLAttributes<HTMLSelectElement> {\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Setter inn et placeholderelement som vises når ingenting er valgt i nedtrekkslisten.\n * @default \"Velg\"\n */\n placeholder?: string;\n items: Array<string | ValuePair>;\n selectClassName?: string;\n width?: string;\n}\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>((props, ref) => {\n const {\n label,\n className,\n density,\n errorLabel,\n helpLabel,\n inline,\n invalid,\n items,\n labelProps,\n placeholder = \"Velg\",\n selectClassName,\n supportLabelProps,\n tooltipProps,\n value,\n width,\n ...rest\n } = props;\n\n const inputGroupProps = {\n label,\n density,\n errorLabel,\n helpLabel,\n labelProps,\n inline,\n supportLabelProps,\n tooltipProps,\n };\n\n return (\n <InputGroup\n {...inputGroupProps}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n <select\n ref={ref}\n className={clsx(\"jkl-select__button\", selectClassName, {\n \"jkl-select__button--active-value\": !!value,\n })}\n defaultValue={value ? undefined : \"\"}\n value={value}\n {...inputProps}\n {...rest}\n >\n {placeholder && !value && (\n <option disabled value=\"\">\n {placeholder}\n </option>\n )}\n {items.map(getValuePair).map((item) => (\n <option\n data-testid=\"jkl-select__option\"\n className=\"jkl-select__option\"\n key={item.value}\n value={item.value}\n >\n {item.label}\n </option>\n ))}\n </select>\n <ArrowVerticalAnimated variant=\"medium\" pointingDown className=\"jkl-select__arrow\" />\n </div>\n )}\n />\n );\n});\n\nNativeSelect.displayName = \"NativeSelect\";\n","import clsx from \"clsx\";\nimport React, {\n forwardRef,\n useCallback,\n useState,\n type MouseEventHandler,\n type ChangeEventHandler,\n type FC,\n} from \"react\";\nimport { type Density } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { NativeSelect } from \"../select\";\nimport { TextInput } from \"../text-input\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface TablePaginationProps {\n className?: string;\n id?: string;\n density?: Density;\n /**\n * @default 0\n */\n activePage?: number;\n /**\n * Null eller negativt tall tolkes som \"vis alle\".\n */\n rowsPerPage: number;\n rowsPerPageItems: Array<number | { label: string; value: number }>;\n totalNumberOfRows: number;\n /**\n * Viser et valgfritt inputfelt for å hoppe raskt til en spesifik side.\n * Du kan også sende inn en custom label hvis du ønsker det, ellers bruke\n * true for default label\n * @default false\n */\n withGoToPage?: boolean | { gotoLabel: string };\n onChange: (e: React.SyntheticEvent, toPage: number, fromPage: number) => void;\n onChangeRowsPerPage: ChangeEventHandler<HTMLSelectElement>;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"rowsPerPage\"\n * vises alltid på skjerm mens \"next\" og \"previous\" brukes som hint til\n * skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { rowsPerPage: \"Rader per side\", previous: \"Forrige\", next: \"Neste\" }\n */\n labels?: {\n rowsPerPage: string;\n previous: string;\n next: string;\n };\n}\n\nfunction clamp(min: number, num: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n }\n return num;\n}\n\nexport const TablePagination = forwardRef<HTMLDivElement, TablePaginationProps>((props, ref) => {\n const {\n activePage = 0,\n totalNumberOfRows,\n rowsPerPage,\n rowsPerPageItems,\n className,\n density,\n id: idProp,\n withGoToPage = false,\n onChange,\n onChangeRowsPerPage,\n labels = {\n rowsPerPage: \"Rader per side\",\n previous: \"Forrige\",\n next: \"Neste\",\n },\n ...rest\n } = props;\n\n const id = useId(idProp || \"jkl-table-pagination\", { generateSuffix: !idProp });\n const { density: contextDensity } = useTableContext();\n\n const showAll = rowsPerPage <= 0;\n const numberOfPages = showAll ? 1 : Math.ceil(totalNumberOfRows / rowsPerPage);\n\n const [currentPage, setCurrentPage] = useState(clamp(0, activePage, numberOfPages - 1));\n\n const onPageClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n const toPage = Number.parseInt(e.currentTarget.dataset[\"number\"] as string);\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const [pagePickerValue, setPagePickerValue] = useState(String(currentPage + 1));\n const onPageChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n setPagePickerValue(e.target.value);\n try {\n const toPage = Number.parseInt(e.target.value) - 1;\n if (Number.isNaN(toPage)) {\n return;\n }\n\n if (toPage >= 0 && toPage < numberOfPages) {\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n }\n } catch {\n return;\n }\n },\n [onChange, setPagePickerValue, setCurrentPage, currentPage, numberOfPages],\n );\n\n const onPrevious: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === 0) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage - 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const onNext: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === numberOfPages - 1) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage + 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, numberOfPages, currentPage],\n );\n\n return (\n <div\n className={clsx(\"jkl-table-pagination\", className)}\n {...rest}\n id={id}\n data-density={density || contextDensity}\n ref={ref}\n >\n <div className=\"jkl-table-pagination__left\">\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--rows\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {labels.rowsPerPage}:\n </span>\n <NativeSelect\n className=\"jkl-table-pagination__picker-input\"\n label={labels.rowsPerPage}\n labelProps={{ srOnly: true }}\n name={`${id}-rows-per-page`}\n items={rowsPerPageItems.map((i) =>\n typeof i === \"number\" ? String(i) : { label: i.label, value: String(i.value) },\n )}\n value={String(rowsPerPage)}\n onChange={onChangeRowsPerPage}\n width=\"min(8rem, 100%)\"\n inline\n />\n </div>\n </div>\n <div className=\"jkl-table-pagination__right\">\n {numberOfPages !== 1 && (\n <nav className=\"jkl-table-pagination__nav\">\n {withGoToPage && (\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--page\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}:\n </span>\n {/* onChange først ved enter/submit */}\n <TextInput\n className=\"jkl-table-pagination__picker-input\"\n label={typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}\n labelProps={{ srOnly: true }}\n name={`${id}-go-to-page`}\n value={pagePickerValue}\n width=\"min(4rem, 100%)\"\n onChange={onPageChange}\n aria-invalid={\n pagePickerValue && pagePickerValue !== String(currentPage + 1)\n ? \"true\"\n : undefined\n }\n />\n </div>\n )}\n <ul>\n <li>\n <IconButton\n className=\"jkl-table-pagination__previous\"\n title={labels.previous}\n onClick={onPrevious}\n >\n <ChevronLeftIcon />\n </IconButton>\n </li>\n <PaginationPages\n id={id}\n activePage={activePage}\n numberOfPages={numberOfPages}\n onPageClick={onPageClick}\n />\n <li>\n <IconButton className=\"jkl-table-pagination__next\" title={labels.next} onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n </li>\n </ul>\n </nav>\n )}\n </div>\n </div>\n );\n});\n\nconst PaginationPages: FC<{\n id: string;\n activePage: number;\n numberOfPages: number;\n onPageClick: MouseEventHandler;\n}> = ({ id, activePage, numberOfPages, onPageClick }) => {\n if (numberOfPages <= 7) {\n return (\n <>\n {Array.from({ length: numberOfPages }).map((_, i) => (\n <li key={`${id}-page-${i}`}>\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": activePage === i,\n })}\n type=\"button\"\n data-number={i}\n onClick={onPageClick}\n >\n {i + 1}\n </button>\n </li>\n ))}\n </>\n );\n }\n\n const showStartEllipsis = activePage > 3 && numberOfPages > 7;\n const showEndEllipsis = activePage < numberOfPages - 4 && numberOfPages > 7;\n\n const startEllipsis = Math.min(Math.max(activePage - 2, 1), numberOfPages - 6);\n const centerPageNumberStart = Math.min(startEllipsis + 1, numberOfPages - 5);\n const centerPageNumber = Math.min(centerPageNumberStart + 1, numberOfPages - 4);\n const centerPageNumberEnd = Math.min(centerPageNumberStart + 2, numberOfPages - 3);\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 2);\n\n return (\n <>\n <li>\n <PaginationPageButton isActive={activePage === 0} number={0} onClick={onPageClick} />\n </li>\n <li>\n {showStartEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === startEllipsis}\n number={startEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberStart}\n number={centerPageNumberStart}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumber}\n number={centerPageNumber}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n onClick={onPageClick}\n />\n </li>\n <li>\n {showEndEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === endEllipsis}\n number={endEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === numberOfPages - 1}\n number={numberOfPages - 1}\n onClick={onPageClick}\n />\n </li>\n </>\n );\n};\n\nconst PaginationPageButton: FC<{\n isActive: boolean;\n number: number;\n onClick: MouseEventHandler;\n}> = ({ isActive, number, onClick, ...rest }) => (\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": isActive,\n })}\n type=\"button\"\n data-number={number}\n onClick={onClick}\n {...rest}\n >\n {number + 1}\n </button>\n);\n\nTablePagination.displayName = \"TablePagination\";\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { Expander } from \"../expander\";\nimport type { TableCellProps } from \"./TableCell\";\nimport { TableCell } from \"./TableCell\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface ExpandableTableRowControllerProps extends TableCellProps {\n /** Settes automatisk av ExpandableTableRow */\n isOpen?: boolean;\n /** Settes automatisk av ExpandableTableRow */\n onClick?: () => void;\n}\n\nconst ExpandableTableRowController = forwardRef<HTMLTableCellElement, ExpandableTableRowControllerProps>(\n ({ isOpen, onClick, children, className, id, \"aria-controls\": ariaControls, ...rest }, ref) => {\n if (isOpen === undefined || typeof onClick !== \"function\") {\n throw new Error(\"ExpandableTableRowController must have ExpandableTableRow as parent\");\n }\n\n const { density, collapseToList } = useTableContext();\n\n const dataTh = (rest as Record<string, string>)[\"data-th\"];\n\n // pick text from data-th if possible, but only if it's a list\n const showTextFromTh: string | undefined = collapseToList ? dataTh : undefined;\n\n return (\n <TableCell\n className={clsx(\n \"jkl-table-cell--expand\",\n { [\"jkl-table-cell--expand-without-text\"]: !children },\n className,\n )}\n {...rest}\n ref={ref}\n >\n <Expander\n className={clsx(\"jkl-table-row-expand-button\", {\n [\"jkl-table-row-expand-button--expanded\"]: isOpen,\n })}\n id={id}\n density={density}\n isExpanded={isOpen}\n aria-controls={ariaControls}\n aria-label={children ? undefined : dataTh || \"Ekspander rad\"}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n }}\n >\n {/* show children. or try to use data-th if children is undefined */}\n {children ?? showTextFromTh}\n </Expander>\n </TableCell>\n );\n },\n);\n\nExpandableTableRowController.displayName = \"ExpandableTableRowController\";\n\nexport { ExpandableTableRowController };\n","import clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { useAnimatedHeight, useId } from \"../../hooks\";\nimport { ExpandableTableRowController, ExpandableTableRowControllerProps } from \"./ExpandableTableRowController\";\nimport type { TableRowProps } from \"./TableRow\";\nimport { TableRow } from \"./TableRow\";\n\nexport interface ExpandableTableRowProps extends TableRowProps {\n expandedChildren: React.ReactNode;\n /**\n * Setter bredden på raden som blir åpnet\n * @default 100\n */\n colSpan?: number;\n /**\n * Om du ønsker en controlled komponent. Hvis du ikke setter denne vil komponenten håndtere state selv.\n */\n isOpen?: boolean;\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ExpandableTableRow = forwardRef<HTMLTableRowElement, ExpandableTableRowProps>((props, ref) => {\n const {\n className,\n clickable,\n children,\n expandedChildren,\n onToggle,\n colSpan = 100,\n isOpen: isOpenProp,\n ...rest\n } = props;\n\n const [isOpen, setIsOpen] = useState(isOpenProp ?? false);\n useEffect(() => {\n if (typeof isOpenProp === \"undefined\") {\n return;\n }\n setIsOpen(isOpenProp);\n }, [isOpenProp]);\n\n const [animationRef] = useAnimatedHeight<HTMLDivElement>(isOpen, { timing: \"expressive\" });\n\n const toggleOpen = () => {\n const newIsOpen = !isOpen;\n\n if (onToggle) {\n onToggle(newIsOpen);\n }\n\n setIsOpen(newIsOpen);\n };\n\n const tableRowClassName = clsx(\"jkl-table-row--expandable\", className, {\n [\"jkl-table-row--expanded\"]: isOpen,\n [\"jkl-expandable-table-row--clickable-external\"]: clickable,\n });\n const childWrapperClassName = clsx(\"jkl-expandable-table-row__expanded-row\", {\n [\"jkl-expandable-table-row__expanded-row--expanded\"]: isOpen,\n });\n\n const tableRowId = useId(\"jkl-expandable-table-row\");\n const expandableTableRowControllerId = useId(\"jkl-expandable-table-row-controller\");\n\n return (\n <>\n <TableRow\n className={tableRowClassName}\n clickable={\n clickable ?? {\n onClick: () => toggleOpen(),\n }\n }\n {...rest}\n ref={ref}\n >\n {React.Children.map(children, (child) => {\n if (\n React.isValidElement<ExpandableTableRowControllerProps>(child) &&\n child.type == ExpandableTableRowController\n ) {\n return React.cloneElement<ExpandableTableRowControllerProps>(child, {\n isOpen,\n onClick: () => toggleOpen(),\n \"aria-controls\": tableRowId,\n id: expandableTableRowControllerId,\n });\n } else {\n return child;\n }\n })}\n </TableRow>\n {/*\n Use a table row with a single as wide as possible cell to contain content. This allows\n using useAnimatedHeight to animate the row height.\n */}\n <tr aria-hidden={!isOpen}>\n <td colSpan={colSpan}>\n <div\n ref={animationRef}\n className={childWrapperClassName}\n id={tableRowId}\n aria-labelledby={expandableTableRowControllerId}\n hidden={!isOpen}\n role=\"group\"\n >\n {expandedChildren}\n </div>\n </td>\n </tr>\n </>\n );\n});\n\nExpandableTableRow.displayName = \"ExpandableTableRow\";\n\nexport { ExpandableTableRow };\n"],"names":["Expander","React","forwardRef","as","className","children","density","expandDirection","isExpanded","hideLabel","rest","ref","ContentWrapper","ScreenReaderOnly","Fragment","pointingDown","El","type","jsxs","clsx","jsx","ArrowVerticalAnimated","variant","bold","displayName","MenuComponent","props","forwardedRef","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","x","y","refs","placement","strategy","context","useFloating","open","onOpenChange","middleware","offset","flip","fallbackAxisSideDirection","crossAxis","shift","padding","whileElementsMounted","autoUpdate","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useHover","enabled","delay","handleClose","safePolygon","requireIntent","blockPointerEvents","useClick","event","useDismiss","outsidePress","useRole","role","useListNavigation","listRef","nested","onNavigate","referenceRef","useMergeRefs","setReference","theme","getThemeAndDensity","reference","current","FloatingNode","id","isValidElement","ReactIs","isForwardRef","cloneElement","onClick","stopPropagation","AnimatePresence","FloatingPortal","FloatingFocusManager","modal","initialFocus","returnFocus","motion","div","initial","opacity","animate","exit","transition","ease","duration","setFloating","style","position","top","left","Children","map","child","index","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","Menu","FloatingTree","noop","Select","forwardedSelectRef","name","items","value","label","labelProps","onChange","onBlur","onFocus","helpLabel","errorLabel","invalid","searchable","inline","defaultPrompt","width","maxShownOptions","tooltipProps","listId","generateSuffix","labelId","buttonId","searchInputId","dropdownIsShown","setShown","toggleListVisibility","useCallback","previousValue","isSearchable","showSearchInputField","searchValue","setSearchValue","searchFn","item","toLowerCase","includes","visibleItems","useMemo","getValuePair","visible","valueIsInItems","some","selectedValue","setSelectedValue","hasSelectedValue","selectedValueLabel","find","selectRef","unifiedSelectRef","instance","usePreviousValue","selectOption","nextValue","previousSelectedValue","target","dispatchEvent","Event","bubbles","componentRootElementRef","focusInsideRef","searchFieldRef","buttonRef","handleFocusPlacement","listElement","focusSelected","focus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","close","handleBlur","e","componentRootElement","contains","relatedTarget","handleFocus","handleMouseOver","preventScroll","select","searchField","button","addEventListener","ev","preventDefault","removeEventListener","handleOnKeyDown","handleSearchOnKeyDown","shiftKey","handleOptionOnKeyDown","firstVisible","querySelector","handleEscape","window","hidden","InputGroup","srOnly","htmlFor","render","inputProps","placeholder","toLower","onMouseDown","every","i","onMouseOver","description","NativeSelect","selectClassName","supportLabelProps","inputGroupProps","defaultValue","disabled","TablePagination","activePage","totalNumberOfRows","rowsPerPage","rowsPerPageItems","idProp","withGoToPage","onChangeRowsPerPage","labels","previous","next","contextDensity","useTableContext","numberOfPages","Math","ceil","currentPage","setCurrentPage","min","num","max","clamp","onPageClick","toPage","Number","parseInt","dataset","number","setPagePickerValue","String","pagePickerValue","onPageChange","isNaN","onPrevious","onNext","gotoLabel","TextInput","IconButton","title","ChevronLeftIcon","PaginationPages","ChevronRightIcon","Array","from","length","_","showStartEllipsis","showEndEllipsis","startEllipsis","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","PaginationPageButton","isActive","ExpandableTableRowController","ariaControls","Error","collapseToList","dataTh","showTextFromTh","TableCell","ExpandableTableRow","clickable","expandedChildren","colSpan","isOpenProp","animationRef","timing","toggleOpen","newIsOpen","tableRowClassName","childWrapperClassName","tableRowId","expandableTableRowControllerId","TableRow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExpandableTableRow-DXlyfK8L.cjs","sources":["../src/components/expander/Expander.tsx","../src/components/menu/Menu.tsx","../src/components/select/Select.tsx","../src/components/select/NativeSelect.tsx","../src/components/table/TablePagination.tsx","../src/components/table/ExpandableTableRowController.tsx","../src/components/table/ExpandableTableRow.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ForwardedRef } from \"react\";\nimport { Density, ScreenReaderOnly, WithChildren } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport type ExpandDirection = \"up\" | \"down\";\n\nexport interface ExpanderProps extends WithChildren {\n as?: \"summary\" | \"button\";\n /** Må settes dersom du ikke bruker CoreToggle. Verdien skal være IDen til innholdet du ekspanderer. */\n \"aria-controls\"?: string;\n /** Må settes dersom du ikke bruker CoreToggle. IDen her skal brukes som verdien til aria-labelledby på innholdet du ekspanderer. */\n id?: string;\n className?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n /**\n * Styrer retningen til pila, som animeres ved endring. Styrer også aria-expanded.\n * @default false\n */\n isExpanded?: boolean;\n /** @default \"down\" */\n expandDirection?: ExpandDirection;\n density?: Density;\n /**\n * Skjul knappeteksten visuelt.\n *\n * @default false\n */\n hideLabel?: boolean;\n}\n\nexport const Expander = React.forwardRef(\n (\n {\n as = \"button\",\n className,\n children,\n density,\n expandDirection = \"down\",\n isExpanded = false,\n hideLabel = false,\n ...rest\n }: ExpanderProps,\n ref: ForwardedRef<HTMLButtonElement>,\n ): JSX.Element => {\n const ContentWrapper = hideLabel ? ScreenReaderOnly : React.Fragment;\n const pointingDown = expandDirection === \"down\" ? !isExpanded : isExpanded;\n\n const El = as;\n const type = El === \"button\" ? \"button\" : undefined;\n\n return (\n <El\n aria-expanded={isExpanded}\n data-testid=\"jkl-expander\"\n type={type}\n className={clsx(\"jkl-expander\", className, {\n \"jkl-expander--expanded\": isExpanded,\n \"jkl-expander--icon-only\": !children,\n })}\n {...rest}\n data-density={density}\n ref={ref}\n >\n {children && (\n <ContentWrapper>\n <span className=\"jkl-expander__text\">{children}</span>\n </ContentWrapper>\n )}\n <ArrowVerticalAnimated\n className=\"jkl-expander__arrow\"\n variant=\"inherit\"\n pointingDown={pointingDown}\n bold={isExpanded}\n />\n </El>\n );\n },\n);\n\nExpander.displayName = \"Expander\";\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n type Placement,\n safePolygon,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, { type ButtonHTMLAttributes, forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport * as ReactIs from \"react-is\";\nimport { type DataTestAutoId, getThemeAndDensity, WithChildren } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents\";\n\nexport interface MenuProps\n extends DataTestAutoId,\n WithChildren,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n className?: string;\n /**\n * Initiell plassering av menyen. Dersom det ikke er plass på skjermen der du\n * angir at den skal åpnes vil den slyttes automatisk.\n * @default \"bottom-start\" på toppnivå, \"right-start\" for undermenyer\n * */\n initialPlacement?: Placement;\n /**\n * Angir om menyen skal åpnes ved hover (uten å måtte klikke)\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Angir om menyen skal holdes åpen når man klikker utenfor menyen\n * @default false\n */\n keepOpenOnClickOutside?: boolean;\n /**\n * Elementet som fungerer som trigger for menyen. Dersom elementet ikke er en `<button>`\n * eller en `forwardRef<HTMLButtonElement>` vil det bli lagt inne i en knapp\n * med forhåndsdefinert stil. For å komme raskt i gang kan du bruke komponenten\n * `MenuTriggerButton` fra denne pakken.\n */\n triggerElement: ReactNode;\n /**\n * Kan brukes til å styre utenfra om menyen skal være åpen eller ikke.\n * @default false\n */\n isOpen?: boolean;\n /**\n * Callback som kalles når menyen åpnes eller lukkes.\n */\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>((props, forwardedRef) => {\n const {\n children,\n className,\n initialPlacement,\n openOnHover = false,\n keepOpenOnClickOutside = false,\n triggerElement,\n isOpen: isOpenOverride,\n onToggle,\n ...triggerProps\n } = props;\n\n const MenuId = useId(\"jkl-menu\");\n\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n\n const listItemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const { allowHover, isOpen: isOpenDefault, setIsOpen } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen = isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { x, y, refs, placement, strategy, context } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement: initialPlacement || (isNested ? \"right-start\" : \"bottom-start\"),\n middleware: [\n offset(2),\n flip({\n fallbackAxisSideDirection: \"end\", // Allow bottom placement in narrow viewports (https://floating-ui.com/docs/flip#fallbackaxissidedirection)\n crossAxis: false, // See https://floating-ui.com/docs/flip#combining-with-shift\n }),\n shift({ padding: 8 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useHover(context, {\n enabled: openOnHover && allowHover,\n delay: { open: 75 },\n handleClose: safePolygon({\n requireIntent: true,\n blockPointerEvents: true,\n }),\n }),\n useClick(context, {\n event: \"mousedown\",\n }),\n useDismiss(context, { outsidePress: !keepOpenOnClickOutside }),\n useRole(context, { role: \"menu\" }),\n useListNavigation(context, {\n listRef: listItemsRef,\n activeIndex,\n nested: isNested,\n onNavigate: setActiveIndex,\n }),\n ]);\n\n const referenceRef = useMergeRefs([refs.setReference, forwardedRef]);\n\n // Siden menyen rendres på rot må vi hente lokal dark/light-verdi fra triggeren\n // Vi må gjøre dette for å ta hensyn til at tema kan styres lokalt for deler av UIet\n const { theme, density } = getThemeAndDensity(refs.reference.current as HTMLElement);\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" || ReactIs.isForwardRef(triggerElement))\n ? // Dersom trigger-elementet er en knapp, sett riktige egenskaper på det\n React.cloneElement(triggerElement, {\n ...getReferenceProps({\n ...triggerProps,\n ref: referenceRef,\n role: isNested ? \"menuitem\" : undefined,\n \"aria-controls\": MenuId,\n onClick(event) {\n event.stopPropagation();\n },\n }),\n })\n : // Ellers, rendre elementet as-is, uten interaktivitet. Krev en ferdig brukbar button for å åpne menyen.\n triggerElement}\n <AnimatePresence>\n {isOpen && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n // Prevent outside content interference.\n modal={false}\n // Only initially focus the root floating menu.\n initialFocus={isNested ? -1 : 0}\n // Only return focus to the root menu's reference when menus close.\n returnFocus={!isNested}\n >\n <motion.div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: \"easeIn\", duration: 0.1 }}\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n position: strategy,\n top: y ?? \"\",\n left: x ?? \"\",\n },\n })}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && ReactIs.isForwardRef(child)) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex: activeIndex === index ? 0 : -1,\n role: \"menuitem\",\n ref(node: HTMLButtonElement) {\n listItemsRef.current[index] = node;\n },\n onClick(event) {\n child.props.onClick?.(event as React.MouseEvent<HTMLButtonElement>);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"click\");\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"keydown\");\n if (\n event.currentTarget.role === \"menuitemcheckbox\" &&\n event.key === \"Enter\"\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/menuitemcheckbox_role#keyboard_interactions\n setIsOpen(false);\n }\n },\n onMouseEnter() {\n if (allowHover && isOpen) {\n setActiveIndex(index);\n }\n },\n }),\n );\n }\n\n return child;\n })}\n </motion.div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </AnimatePresence>\n </FloatingNode>\n );\n});\nMenuComponent.displayName = \"MenuComponent\";\n\nexport const Menu = forwardRef<HTMLButtonElement, MenuProps>((props, ref) => {\n const parentId = useFloatingParentNodeId();\n\n if (parentId === null) {\n return (\n <FloatingTree>\n <MenuComponent ref={ref} {...props} />\n </FloatingTree>\n );\n }\n\n return <MenuComponent ref={ref} {...props} />;\n});\nMenu.displayName = \"Menu\";\n","import clsx from \"clsx\";\nimport React, {\n FocusEvent,\n forwardRef,\n useEffect,\n useRef,\n useState,\n KeyboardEvent,\n ChangeEvent,\n useCallback,\n useMemo,\n RefObject,\n MouseEvent,\n CSSProperties,\n} from \"react\";\nimport { type ValuePair, getValuePair, type DataTestAutoId, type Density } from \"../..\";\nimport { useId, useAnimatedHeight, usePreviousValue, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type LabelProps, type InputGroupProps } from \"../input-group\";\nimport { toLower, focusSelected } from \"./select-utils\";\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, \"target\">> {\n /** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */\n type: \"change\" | \"blur\";\n target: {\n /** Kreves av react-hook-form for å vite hvilket skjemafelt som ble endret */\n name: string;\n value: string;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface Option extends ValuePair {\n visible: boolean;\n}\n\nexport interface SelectProps extends Omit<InputGroupProps, \"children\">, DataTestAutoId {\n id?: string;\n name: string;\n label: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<string | ValuePair>;\n /**\n * @default false\n */\n inline?: boolean;\n /**\n * @default \"Velg\"\n */\n defaultPrompt?: string;\n className?: string;\n value?: string;\n helpLabel?: string;\n errorLabel?: string;\n /**\n * @default false\n */\n searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);\n density?: Density;\n width?: string;\n onChange?: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Hvor mange valg skal vises i listen før den begynner å scrolle.\n * @default 5\n */\n maxShownOptions?: number;\n}\n\nconst noop = () => {\n return;\n};\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>((props, forwardedSelectRef) => {\n const {\n id,\n name,\n items,\n value,\n label,\n labelProps,\n onChange,\n onBlur,\n onFocus,\n className,\n helpLabel,\n errorLabel,\n invalid,\n searchable = false,\n inline = false,\n defaultPrompt = \"Velg\",\n density,\n width,\n maxShownOptions = 5,\n style,\n tooltipProps,\n ...rest\n } = props;\n\n const listId = useId(id || \"jkl-select\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const searchInputId = `${listId}_search-input`;\n\n const [dropdownIsShown, setShown] = useState(false);\n const toggleListVisibility = useCallback(() => {\n setShown((previousValue) => !previousValue);\n }, []);\n\n /// Søk\n\n const isSearchable = Boolean(searchable);\n const showSearchInputField = isSearchable && dropdownIsShown;\n const [searchValue, setSearchValue] = useState(\"\");\n const searchFn = useCallback(\n (item: ValuePair) => {\n if (item.label.toLowerCase().includes(searchValue.toLowerCase())) {\n return true;\n }\n\n if (typeof searchable === \"function\") {\n return searchable(searchValue, item);\n }\n\n return false;\n },\n [searchable, searchValue],\n );\n const visibleItems: Option[] = useMemo(\n () =>\n items.map(getValuePair).map((item) => {\n const visible = !isSearchable || searchValue === \"\" || searchFn(item);\n return { ...item, visible };\n }),\n [items, isSearchable, searchValue, searchFn],\n );\n const valueIsInItems: boolean = useMemo(() => {\n if (typeof value === \"undefined\") {\n return false;\n }\n return items.some((item) => (typeof item === \"string\" ? item === value : item.value === value));\n }, [value, items]);\n\n /// Valg av <option>\n\n const [selectedValue, setSelectedValue] = useState<string>(valueIsInItems && value !== undefined ? value : \"\");\n const hasSelectedValue = selectedValue !== \"\";\n const selectedValueLabel = useMemo(\n () => visibleItems.find((item) => item.value === selectedValue)?.label || defaultPrompt,\n [visibleItems, selectedValue, defaultPrompt],\n );\n\n const selectRef = useRef<HTMLSelectElement | null>(null);\n // Hjelpefunksjon som gjør det enklere å forwarde refen og å bruke den selv internt\n const unifiedSelectRef = useCallback(\n (instance: HTMLSelectElement | null) => {\n selectRef.current = instance;\n if (forwardedSelectRef) {\n if (typeof forwardedSelectRef === \"function\") {\n forwardedSelectRef(instance);\n } else {\n forwardedSelectRef.current = instance;\n }\n }\n if (instance) {\n setSelectedValue(instance.value);\n }\n },\n [selectRef, forwardedSelectRef],\n );\n\n const previousValue = usePreviousValue(value);\n useEffect(() => {\n if (value === previousValue) {\n return;\n }\n if (typeof value === \"undefined\" || !valueIsInItems) {\n setSelectedValue(\"\");\n } else {\n setSelectedValue(value);\n }\n }, [setSelectedValue, value, previousValue, valueIsInItems]);\n\n const selectOption = useCallback(\n (item: Option) => {\n const nextValue = item.value;\n setSearchValue(\"\");\n setSelectedValue(nextValue);\n toggleListVisibility();\n },\n [setSearchValue, setSelectedValue, toggleListVisibility],\n );\n\n // La komponenten rendre <select> med den valgte verdien før onChange trigges, slik at\n // react-hook-form@>7.41.1 behandler feltet som at det har en verdi.\n const previousSelectedValue = usePreviousValue(selectedValue);\n useEffect(() => {\n // previousSelectedValue er undefined på første render, men da vil vi ikke ha en onChange uansett\n if (\n typeof previousSelectedValue === \"undefined\" ||\n previousSelectedValue === selectedValue ||\n selectedValue === value\n ) {\n return;\n }\n if (onChange) {\n onChange({ type: \"change\", target: { name, value: selectedValue } });\n }\n if (selectRef.current) {\n selectRef.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }, [onChange, name, value, selectedValue, previousSelectedValue]);\n\n /// Fokushåndtering\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n const searchFieldRef = useRef<HTMLInputElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleFocusPlacement = useCallback(\n (isOpen: boolean, ref: RefObject<HTMLElement>) => {\n if (isOpen && !isSearchable) {\n const listElement = ref.current;\n if (listElement) {\n focusSelected(listElement, selectedValue);\n }\n } else if (isOpen) {\n if (searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && buttonRef.current) {\n buttonRef.current.focus();\n }\n }\n },\n [isSearchable, selectedValue],\n );\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(dropdownIsShown, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const close = useCallback(() => {\n if (isSearchable) {\n setSearchValue(\"\");\n }\n if (onBlur) {\n onBlur({ type: \"blur\", target: { name, value: selectedValue } });\n selectRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShown(false);\n }, [onBlur, setSearchValue, setShown, isSearchable, name, selectedValue]);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLButtonElement | HTMLInputElement>) => {\n const componentRootElement = componentRootElementRef.current;\n // There are known issues in Firefox when using \"relatedTarget\" in onBlur events:\n // https://github.com/facebook/react/issues/2011\n // This might be fixed in react 17. Se issue above.\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n close();\n }\n },\n [close],\n );\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({ type: \"change\", target: { name, value: selectedValue } });\n }\n focusInsideRef.current = true;\n }\n }, [onFocus, selectedValue, name]);\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Handle focus and blur of hidden select element\n useEffect(() => {\n const select = selectRef.current;\n const searchField = searchFieldRef.current;\n const button = buttonRef.current;\n const componentRootElement = componentRootElementRef.current;\n\n select?.addEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.addEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n\n return () => {\n select?.removeEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.removeEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n };\n }, [showSearchInputField]);\n\n /// Tastaturnavigasjon\n\n // Add support for opening dropdown with arrowkey down as expected from native select\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if ((e.key === \"ArrowDown\" || e.key === \" \") && !dropdownIsShown) {\n e.preventDefault();\n e.stopPropagation();\n setShown(true);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n }\n },\n [setShown, dropdownIsShown],\n );\n\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n\n const listElement = dropdownRef.current;\n if (listElement) {\n if (isSearchable) {\n // Flytt fokus til det første elementet i listen, ikke det forrige valgte.\n // Ved endring i filter er det ikke gitt at vi ønsker å ta utgangspunkt i\n // den valgte verdien.\n focusSelected(listElement, undefined);\n } else {\n focusSelected(listElement, selectedValue);\n }\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n } else if (e.key === \"Tab\" && !e.shiftKey) {\n const listElement = dropdownRef.current;\n if (listElement) {\n e.preventDefault();\n e.stopPropagation();\n focusSelected(listElement, selectedValue);\n }\n } else if (e.key === \"Enter\" && dropdownIsShown) {\n // Should not propagate Enter keyevent because form might submit\n e.preventDefault();\n e.stopPropagation();\n }\n },\n [setShown, dropdownRef, selectedValue, isSearchable, dropdownIsShown],\n );\n\n // onKeyDown so this Tab listener isn't triggered by tabbing from search field to option\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey && searchFieldRef.current) {\n searchFieldRef.current.focus();\n } else if (buttonRef.current) {\n // Mimic behaviour of Firefox and native select, where Tab selects the current item and closes the menu\n setSelectedValue(e.currentTarget.value);\n setShown(false);\n buttonRef.current.focus();\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchFieldRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n }\n }\n },\n [setShown, dropdownRef],\n );\n\n // Add support for closing the dropdown with Escape like native select. Unfortunately, Escape does not trigger the button onKeyDown.\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && dropdownIsShown) {\n setShown(false);\n }\n };\n if (typeof window !== \"undefined\" && dropdownIsShown) {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShown, dropdownIsShown]);\n\n return (\n <>\n <select\n name={name}\n tabIndex={-1}\n data-testid=\"jkl-native-select\"\n className=\"jkl-sr-only\"\n aria-hidden\n ref={unifiedSelectRef}\n value={selectedValue}\n onChange={noop} // React complains unless we give an onChange handler. This is technically a read-only field, but readOnly isn't an option here.\n >\n <option value=\"\"></option> {/* Tom option må være et valg, ellers vil <select> alltid ha en value */}\n {visibleItems.map((item) => (\n <option key={`${listId}-opt-${item.value}`} hidden={!item.visible} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n <InputGroup\n ref={componentRootElementRef}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--open\": dropdownIsShown && visibleItems.some((item) => item.visible),\n \"jkl-select--no-value\": !hasSelectedValue,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n tooltipProps={\n tooltipProps && {\n ...tooltipProps,\n triggerProps: {\n ...tooltipProps.triggerProps,\n onFocus: (e) => {\n tooltipProps.triggerProps?.onFocus?.(e);\n close();\n },\n },\n }\n }\n {...rest}\n id={isSearchable ? searchInputId : buttonId}\n style={{ [\"--jkl-select-max-shown-options\"]: maxShownOptions, ...style } as CSSProperties}\n density={density}\n label={label}\n labelProps={{\n id: labelId,\n srOnly: inline,\n ...labelProps,\n htmlFor: isSearchable ? searchInputId : buttonId,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n {isSearchable && (\n <input\n {...inputProps}\n id={searchInputId}\n hidden={!showSearchInputField}\n ref={searchFieldRef}\n placeholder=\"Søk\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n data-testid=\"jkl-select__search-input\"\n className=\"jkl-select__search-input\"\n aria-autocomplete=\"list\"\n aria-activedescendant={\n hasSelectedValue ? `${listId}__${toLower(selectedValue)}` : undefined\n }\n aria-controls={listId}\n aria-expanded={dropdownIsShown}\n role=\"combobox\"\n onKeyDown={handleSearchOnKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <button\n {...inputProps}\n id={buttonId}\n ref={buttonRef}\n hidden={showSearchInputField}\n type=\"button\"\n name={`${name}-btn`}\n className={clsx(\"jkl-select__button\", {\n \"jkl-select__button--active-value\": !!selectedValue,\n })}\n data-testid=\"jkl-select__button\"\n aria-label={`${selectedValueLabel || \"Velg\"},${label}`}\n aria-expanded={dropdownIsShown}\n aria-controls={listId}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOnKeyDown}\n onClick={toggleListVisibility}\n onMouseDown={(e) => {\n // Workaround for en Safari-bug hvor e.relatedTarget er null i onBlur\n // https://twitter.com/MilesSorce/status/1278762360669265925\n e.preventDefault();\n buttonRef.current?.focus();\n }}\n >\n {selectedValueLabel}\n </button>\n <div\n id={listId}\n ref={dropdownRef}\n role=\"listbox\"\n className=\"jkl-select__options-menu\"\n hidden={!dropdownIsShown || visibleItems.every((item) => !item.visible)}\n aria-labelledby={labelId}\n tabIndex={-1}\n data-focus=\"controlled\" // lar oss styre markering av valg vha focus\n >\n {visibleItems.map((item, i) =>\n // Det er viktig at vi _fjerner_ elementer som ikke er synlige fra DOMen for at tastaturnavigasjon skal fungere.\n // For eksempel, hvis vi har elementene Apple, Samsung og LG i den rekkefølgen og søker etter \"l\"\n // vil Samsung ikke synes. Om vi bare setter hidden-attributtet på Samsung vil ArrowDown fra Apple ikke fungere.\n // Dette lar seg ikke gjenskape i en enhetstest med JSDOM + user-events, og Cypress lukker Select\n // ved første {downArrow} ¯\\_(ツ)_/¯. Så please test scenariet over manuelt om dette skaper trøbbel for deg.\n item.visible ? (\n <button\n key={`${listId}-${item.value}`}\n hidden={!item.visible}\n type=\"button\"\n id={`${listId}__${toLower(item.value)}`}\n className=\"jkl-select__option\"\n data-testid=\"jkl-select__option\"\n aria-selected={item.value === selectedValue}\n role=\"option\"\n value={item.value}\n data-testautoid={`jkl-select__option-${i}`}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n e.preventDefault();\n selectOption(item);\n }}\n onMouseOver={handleMouseOver}\n >\n {item.label}\n {item.description ? (\n <span className=\"jkl-select__option-description\">{item.description}</span>\n ) : null}\n </button>\n ) : null,\n )}\n </div>\n <ArrowVerticalAnimated\n variant=\"medium\"\n pointingDown={!dropdownIsShown}\n className=\"jkl-select__arrow\"\n />\n </div>\n )}\n />\n </>\n );\n});\n\nSelect.displayName = \"Select\";\n","import clsx from \"clsx\";\nimport React, { forwardRef, SelectHTMLAttributes } from \"react\";\nimport { type ValuePair, getValuePair } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type InputGroupProps } from \"../input-group\";\n\nexport interface NativeSelectProps extends Omit<InputGroupProps, \"children\">, SelectHTMLAttributes<HTMLSelectElement> {\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Setter inn et placeholderelement som vises når ingenting er valgt i nedtrekkslisten.\n * @default \"Velg\"\n */\n placeholder?: string;\n items: Array<string | ValuePair>;\n selectClassName?: string;\n width?: string;\n}\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>((props, ref) => {\n const {\n label,\n className,\n density,\n errorLabel,\n helpLabel,\n inline,\n invalid,\n items,\n labelProps,\n placeholder = \"Velg\",\n selectClassName,\n supportLabelProps,\n tooltipProps,\n value,\n width,\n ...rest\n } = props;\n\n const inputGroupProps = {\n label,\n density,\n errorLabel,\n helpLabel,\n labelProps,\n inline,\n supportLabelProps,\n tooltipProps,\n };\n\n return (\n <InputGroup\n {...inputGroupProps}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n <select\n ref={ref}\n className={clsx(\"jkl-select__button\", selectClassName, {\n \"jkl-select__button--active-value\": !!value,\n })}\n defaultValue={value ? undefined : \"\"}\n value={value}\n {...inputProps}\n {...rest}\n >\n {placeholder && !value && (\n <option disabled value=\"\">\n {placeholder}\n </option>\n )}\n {items.map(getValuePair).map((item) => (\n <option\n data-testid=\"jkl-select__option\"\n className=\"jkl-select__option\"\n key={item.value}\n value={item.value}\n >\n {item.label}\n </option>\n ))}\n </select>\n <ArrowVerticalAnimated variant=\"medium\" pointingDown className=\"jkl-select__arrow\" />\n </div>\n )}\n />\n );\n});\n\nNativeSelect.displayName = \"NativeSelect\";\n","import clsx from \"clsx\";\nimport React, {\n forwardRef,\n useCallback,\n useState,\n type MouseEventHandler,\n type ChangeEventHandler,\n type FC,\n} from \"react\";\nimport { type Density } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { NativeSelect } from \"../select\";\nimport { TextInput } from \"../text-input\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface TablePaginationProps {\n className?: string;\n id?: string;\n density?: Density;\n /**\n * @default 0\n */\n activePage?: number;\n /**\n * Null eller negativt tall tolkes som \"vis alle\".\n */\n rowsPerPage: number;\n rowsPerPageItems: Array<number | { label: string; value: number }>;\n totalNumberOfRows: number;\n /**\n * Viser et valgfritt inputfelt for å hoppe raskt til en spesifik side.\n * Du kan også sende inn en custom label hvis du ønsker det, ellers bruke\n * true for default label\n * @default false\n */\n withGoToPage?: boolean | { gotoLabel: string };\n onChange: (e: React.SyntheticEvent, toPage: number, fromPage: number) => void;\n onChangeRowsPerPage: ChangeEventHandler<HTMLSelectElement>;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"rowsPerPage\"\n * vises alltid på skjerm mens \"next\" og \"previous\" brukes som hint til\n * skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { rowsPerPage: \"Rader per side\", previous: \"Forrige\", next: \"Neste\" }\n */\n labels?: {\n rowsPerPage: string;\n previous: string;\n next: string;\n };\n}\n\nfunction clamp(min: number, num: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n }\n return num;\n}\n\nexport const TablePagination = forwardRef<HTMLDivElement, TablePaginationProps>((props, ref) => {\n const {\n activePage = 0,\n totalNumberOfRows,\n rowsPerPage,\n rowsPerPageItems,\n className,\n density,\n id: idProp,\n withGoToPage = false,\n onChange,\n onChangeRowsPerPage,\n labels = {\n rowsPerPage: \"Rader per side\",\n previous: \"Forrige\",\n next: \"Neste\",\n },\n ...rest\n } = props;\n\n const id = useId(idProp || \"jkl-table-pagination\", { generateSuffix: !idProp });\n const { density: contextDensity } = useTableContext();\n\n const showAll = rowsPerPage <= 0;\n const numberOfPages = showAll ? 1 : Math.ceil(totalNumberOfRows / rowsPerPage);\n\n const [currentPage, setCurrentPage] = useState(clamp(0, activePage, numberOfPages - 1));\n\n const onPageClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n const toPage = Number.parseInt(e.currentTarget.dataset[\"number\"] as string);\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const [pagePickerValue, setPagePickerValue] = useState(String(currentPage + 1));\n const onPageChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n setPagePickerValue(e.target.value);\n try {\n const toPage = Number.parseInt(e.target.value) - 1;\n if (Number.isNaN(toPage)) {\n return;\n }\n\n if (toPage >= 0 && toPage < numberOfPages) {\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n }\n } catch {\n return;\n }\n },\n [onChange, setPagePickerValue, setCurrentPage, currentPage, numberOfPages],\n );\n\n const onPrevious: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === 0) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage - 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const onNext: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === numberOfPages - 1) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage + 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, numberOfPages, currentPage],\n );\n\n return (\n <div\n className={clsx(\"jkl-table-pagination\", className)}\n {...rest}\n id={id}\n data-density={density || contextDensity}\n ref={ref}\n >\n <div className=\"jkl-table-pagination__left\">\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--rows\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {labels.rowsPerPage}:\n </span>\n <NativeSelect\n className=\"jkl-table-pagination__picker-input\"\n label={labels.rowsPerPage}\n labelProps={{ srOnly: true }}\n name={`${id}-rows-per-page`}\n items={rowsPerPageItems.map((i) =>\n typeof i === \"number\" ? String(i) : { label: i.label, value: String(i.value) },\n )}\n value={String(rowsPerPage)}\n onChange={onChangeRowsPerPage}\n width=\"min(8rem, 100%)\"\n inline\n />\n </div>\n </div>\n <div className=\"jkl-table-pagination__right\">\n {numberOfPages !== 1 && (\n <nav className=\"jkl-table-pagination__nav\">\n {withGoToPage && (\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--page\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}:\n </span>\n {/* onChange først ved enter/submit */}\n <TextInput\n className=\"jkl-table-pagination__picker-input\"\n label={typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}\n labelProps={{ srOnly: true }}\n name={`${id}-go-to-page`}\n value={pagePickerValue}\n width=\"min(4rem, 100%)\"\n onChange={onPageChange}\n aria-invalid={\n pagePickerValue && pagePickerValue !== String(currentPage + 1)\n ? \"true\"\n : undefined\n }\n />\n </div>\n )}\n <ul>\n <li>\n <IconButton\n className=\"jkl-table-pagination__previous\"\n title={labels.previous}\n onClick={onPrevious}\n >\n <ChevronLeftIcon />\n </IconButton>\n </li>\n <PaginationPages\n id={id}\n activePage={activePage}\n numberOfPages={numberOfPages}\n onPageClick={onPageClick}\n />\n <li>\n <IconButton className=\"jkl-table-pagination__next\" title={labels.next} onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n </li>\n </ul>\n </nav>\n )}\n </div>\n </div>\n );\n});\n\nconst PaginationPages: FC<{\n id: string;\n activePage: number;\n numberOfPages: number;\n onPageClick: MouseEventHandler;\n}> = ({ id, activePage, numberOfPages, onPageClick }) => {\n if (numberOfPages <= 7) {\n return (\n <>\n {Array.from({ length: numberOfPages }).map((_, i) => (\n <li key={`${id}-page-${i}`}>\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": activePage === i,\n })}\n type=\"button\"\n data-number={i}\n onClick={onPageClick}\n >\n {i + 1}\n </button>\n </li>\n ))}\n </>\n );\n }\n\n const showStartEllipsis = activePage > 3 && numberOfPages > 7;\n const showEndEllipsis = activePage < numberOfPages - 4 && numberOfPages > 7;\n\n const startEllipsis = Math.min(Math.max(activePage - 2, 1), numberOfPages - 6);\n const centerPageNumberStart = Math.min(startEllipsis + 1, numberOfPages - 5);\n const centerPageNumber = Math.min(centerPageNumberStart + 1, numberOfPages - 4);\n const centerPageNumberEnd = Math.min(centerPageNumberStart + 2, numberOfPages - 3);\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 2);\n\n return (\n <>\n <li>\n <PaginationPageButton isActive={activePage === 0} number={0} onClick={onPageClick} />\n </li>\n <li>\n {showStartEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === startEllipsis}\n number={startEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberStart}\n number={centerPageNumberStart}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumber}\n number={centerPageNumber}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n onClick={onPageClick}\n />\n </li>\n <li>\n {showEndEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === endEllipsis}\n number={endEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === numberOfPages - 1}\n number={numberOfPages - 1}\n onClick={onPageClick}\n />\n </li>\n </>\n );\n};\n\nconst PaginationPageButton: FC<{\n isActive: boolean;\n number: number;\n onClick: MouseEventHandler;\n}> = ({ isActive, number, onClick, ...rest }) => (\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": isActive,\n })}\n type=\"button\"\n data-number={number}\n onClick={onClick}\n {...rest}\n >\n {number + 1}\n </button>\n);\n\nTablePagination.displayName = \"TablePagination\";\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { Expander } from \"../expander\";\nimport type { TableCellProps } from \"./TableCell\";\nimport { TableCell } from \"./TableCell\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface ExpandableTableRowControllerProps extends TableCellProps {\n /** Settes automatisk av ExpandableTableRow */\n isOpen?: boolean;\n /** Settes automatisk av ExpandableTableRow */\n onClick?: () => void;\n}\n\nconst ExpandableTableRowController = forwardRef<HTMLTableCellElement, ExpandableTableRowControllerProps>(\n ({ isOpen, onClick, children, className, id, \"aria-controls\": ariaControls, ...rest }, ref) => {\n if (isOpen === undefined || typeof onClick !== \"function\") {\n throw new Error(\"ExpandableTableRowController must have ExpandableTableRow as parent\");\n }\n\n const { density, collapseToList } = useTableContext();\n\n const dataTh = (rest as Record<string, string>)[\"data-th\"];\n\n // pick text from data-th if possible, but only if it's a list\n const showTextFromTh: string | undefined = collapseToList ? dataTh : undefined;\n\n return (\n <TableCell\n className={clsx(\n \"jkl-table-cell--expand\",\n { [\"jkl-table-cell--expand-without-text\"]: !children },\n className,\n )}\n {...rest}\n ref={ref}\n >\n <Expander\n className={clsx(\"jkl-table-row-expand-button\", {\n [\"jkl-table-row-expand-button--expanded\"]: isOpen,\n })}\n id={id}\n density={density}\n isExpanded={isOpen}\n aria-controls={ariaControls}\n aria-label={children ? undefined : dataTh || \"Ekspander rad\"}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n }}\n >\n {/* show children. or try to use data-th if children is undefined */}\n {children ?? showTextFromTh}\n </Expander>\n </TableCell>\n );\n },\n);\n\nExpandableTableRowController.displayName = \"ExpandableTableRowController\";\n\nexport { ExpandableTableRowController };\n","import clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { useAnimatedHeight, useId } from \"../../hooks\";\nimport { ExpandableTableRowController, ExpandableTableRowControllerProps } from \"./ExpandableTableRowController\";\nimport type { TableRowProps } from \"./TableRow\";\nimport { TableRow } from \"./TableRow\";\n\nexport interface ExpandableTableRowProps extends TableRowProps {\n expandedChildren: React.ReactNode;\n /**\n * Setter bredden på raden som blir åpnet\n * @default 100\n */\n colSpan?: number;\n /**\n * Om du ønsker en controlled komponent. Hvis du ikke setter denne vil komponenten håndtere state selv.\n */\n isOpen?: boolean;\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ExpandableTableRow = forwardRef<HTMLTableRowElement, ExpandableTableRowProps>((props, ref) => {\n const {\n className,\n clickable,\n children,\n expandedChildren,\n onToggle,\n colSpan = 100,\n isOpen: isOpenProp,\n ...rest\n } = props;\n\n const [isOpen, setIsOpen] = useState(isOpenProp ?? false);\n useEffect(() => {\n if (typeof isOpenProp === \"undefined\") {\n return;\n }\n setIsOpen(isOpenProp);\n }, [isOpenProp]);\n\n const [animationRef] = useAnimatedHeight<HTMLDivElement>(isOpen, { timing: \"expressive\" });\n\n const toggleOpen = () => {\n const newIsOpen = !isOpen;\n\n if (onToggle) {\n onToggle(newIsOpen);\n }\n\n setIsOpen(newIsOpen);\n };\n\n const tableRowClassName = clsx(\"jkl-table-row--expandable\", className, {\n [\"jkl-table-row--expanded\"]: isOpen,\n [\"jkl-expandable-table-row--clickable-external\"]: clickable,\n });\n const childWrapperClassName = clsx(\"jkl-expandable-table-row__expanded-row\", {\n [\"jkl-expandable-table-row__expanded-row--expanded\"]: isOpen,\n });\n\n const tableRowId = useId(\"jkl-expandable-table-row\");\n const expandableTableRowControllerId = useId(\"jkl-expandable-table-row-controller\");\n\n return (\n <>\n <TableRow\n className={tableRowClassName}\n clickable={\n clickable ?? {\n onClick: () => toggleOpen(),\n }\n }\n {...rest}\n ref={ref}\n >\n {React.Children.map(children, (child) => {\n if (\n React.isValidElement<ExpandableTableRowControllerProps>(child) &&\n child.type == ExpandableTableRowController\n ) {\n return React.cloneElement<ExpandableTableRowControllerProps>(child, {\n isOpen,\n onClick: () => toggleOpen(),\n \"aria-controls\": tableRowId,\n id: expandableTableRowControllerId,\n });\n } else {\n return child;\n }\n })}\n </TableRow>\n {/*\n Use a table row with a single as wide as possible cell to contain content. This allows\n using useAnimatedHeight to animate the row height.\n */}\n <tr aria-hidden={!isOpen}>\n <td colSpan={colSpan}>\n <div\n ref={animationRef}\n className={childWrapperClassName}\n id={tableRowId}\n aria-labelledby={expandableTableRowControllerId}\n hidden={!isOpen}\n role=\"group\"\n >\n {expandedChildren}\n </div>\n </td>\n </tr>\n </>\n );\n});\n\nExpandableTableRow.displayName = \"ExpandableTableRow\";\n\nexport { ExpandableTableRow };\n"],"names":["Expander","React","forwardRef","as","className","children","density","expandDirection","isExpanded","hideLabel","rest","ref","ContentWrapper","ScreenReaderOnly","Fragment","pointingDown","El","type","jsxs","clsx","jsx","ArrowVerticalAnimated","variant","bold","displayName","MenuComponent","props","forwardedRef","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","x","y","refs","placement","strategy","context","useFloating","open","onOpenChange","middleware","offset","flip","fallbackAxisSideDirection","crossAxis","shift","padding","whileElementsMounted","autoUpdate","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useHover","enabled","delay","handleClose","safePolygon","requireIntent","blockPointerEvents","useClick","event","useDismiss","outsidePress","useRole","role","useListNavigation","listRef","nested","onNavigate","referenceRef","useMergeRefs","setReference","theme","getThemeAndDensity","reference","current","FloatingNode","id","isValidElement","ReactIs","isForwardRef","cloneElement","onClick","stopPropagation","AnimatePresence","FloatingPortal","FloatingFocusManager","modal","initialFocus","returnFocus","motion","div","initial","opacity","animate","exit","transition","ease","duration","setFloating","style","position","top","left","Children","map","child","index","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","Menu","FloatingTree","noop","Select","forwardedSelectRef","name","items","value","label","labelProps","onChange","onBlur","onFocus","helpLabel","errorLabel","invalid","searchable","inline","defaultPrompt","width","maxShownOptions","tooltipProps","listId","generateSuffix","labelId","buttonId","searchInputId","dropdownIsShown","setShown","toggleListVisibility","useCallback","previousValue","isSearchable","showSearchInputField","searchValue","setSearchValue","searchFn","item","toLowerCase","includes","visibleItems","useMemo","getValuePair","visible","valueIsInItems","some","selectedValue","setSelectedValue","hasSelectedValue","selectedValueLabel","find","selectRef","unifiedSelectRef","instance","usePreviousValue","selectOption","nextValue","previousSelectedValue","target","dispatchEvent","Event","bubbles","componentRootElementRef","focusInsideRef","searchFieldRef","buttonRef","handleFocusPlacement","listElement","focusSelected","focus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","close","handleBlur","e","componentRootElement","contains","relatedTarget","handleFocus","handleMouseOver","preventScroll","select","searchField","button","addEventListener","ev","preventDefault","removeEventListener","handleOnKeyDown","handleSearchOnKeyDown","shiftKey","handleOptionOnKeyDown","firstVisible","querySelector","handleEscape","window","hidden","InputGroup","srOnly","htmlFor","render","inputProps","placeholder","toLower","onMouseDown","every","i","onMouseOver","description","NativeSelect","selectClassName","supportLabelProps","inputGroupProps","defaultValue","disabled","TablePagination","activePage","totalNumberOfRows","rowsPerPage","rowsPerPageItems","idProp","withGoToPage","onChangeRowsPerPage","labels","previous","next","contextDensity","useTableContext","numberOfPages","Math","ceil","currentPage","setCurrentPage","min","num","max","clamp","onPageClick","toPage","Number","parseInt","dataset","number","setPagePickerValue","String","pagePickerValue","onPageChange","isNaN","onPrevious","onNext","gotoLabel","TextInput","IconButton","title","ChevronLeftIcon","PaginationPages","ChevronRightIcon","Array","from","length","_","showStartEllipsis","showEndEllipsis","startEllipsis","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","PaginationPageButton","isActive","ExpandableTableRowController","ariaControls","Error","collapseToList","dataTh","showTextFromTh","TableCell","ExpandableTableRow","clickable","expandedChildren","colSpan","isOpenProp","animationRef","timing","toggleOpen","newIsOpen","tableRowClassName","childWrapperClassName","tableRowId","expandableTableRowControllerId","TableRow"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsxs as e,jsx as n,Fragment as o}from"react/jsx-runtime";import{c as t}from"./clsx-BeLtu-UY.js";import s,{forwardRef as a,useRef as i,useState as r,useEffect as l,useCallback as c,useMemo as p}from"react";import{useAnimatedHeight as m}from"./es/hooks/useAnimatedHeight/useAnimatedHeight.js";import"./es/hooks/useScreen/useScreen.js";import{useId as d}from"./es/hooks/useId/useId.js";import"./es/components/icon/Icon.js";import{ArrowVerticalAnimated as u}from"./es/components/icon/icons/animated/ArrowVerticalAnimated.js";import"./es/components/icon/icons/animated/ArrowHorizontalAnimated.js";import"./es/components/icon/icons/animated/PlusRemoveAnimated.js";import"./es/components/icon/icons/ArrowDownIcon.js";import"./es/components/icon/icons/ArrowLeftIcon.js";import"./es/components/icon/icons/ArrowNorthEastIcon.js";import"./es/components/icon/icons/ArrowRightIcon.js";import"./es/components/icon/icons/ArrowUpIcon.js";import"./es/components/icon/icons/CalendarIcon.js";import"./es/components/icon/icons/CheckIcon.js";import"./es/components/icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as b}from"./es/components/icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as j}from"./es/components/icon/icons/ChevronRightIcon.js";import"./es/components/icon/icons/ChevronUpIcon.js";import"./es/components/icon/icons/CloseIcon.js";import"./es/components/icon/icons/CopyIcon.js";import"./es/components/icon/icons/DotsIcon.js";import"./es/components/icon/icons/DragIcon.js";import"./es/components/icon/icons/ErrorIcon.js";import"./es/components/icon/icons/GreenCheckIcon.js";import"./es/components/icon/icons/HamburgerIcon.js";import"./es/components/icon/icons/InfoIcon.js";import"./es/components/icon/icons/LinkIcon.js";import"./es/components/icon/icons/PlusIcon.js";import"./es/components/icon/icons/QuestionIcon.js";import"./es/components/icon/icons/RedCrossIcon.js";import"./es/components/icon/icons/SearchIcon.js";import"./es/components/icon/icons/SuccessIcon.js";import"./es/components/icon/icons/WarningIcon.js";import"./es/components/icon/icons/MinusIcon.js";import"./es/components/icon/icons/ThumbDownIcon.js";import"./es/components/icon/icons/ThumbUpIcon.js";import"./es/components/icon/icons/TrashCanIcon.js";import"./es/components/icon/icons/PenIcon.js";import"./es/components/button/Button.js";import"./es/components/card/Card.js";import"./es/components/card/CardImage.js";import"./es/components/card/NavCard.js";import"./es/components/checkbox/Checkbox.js";import"./es/components/combobox/Combobox.js";import"./es/components/cookie-consent/CookieConsentContext.js";import"react-dom";import"./es/components/modal/Modal.js";import"react-a11y-dialog";import"./es/components/list/List.js";import"./es/components/list/ListItem.js";import"./es/components/datepicker/DatePicker.js";import"./es/components/feedback/feedbackContext.js";import"./es/components/message/Message.js";import"./es/components/message/FormErrorMessage.js";import"./es/components/tooltip/Tooltip.js";import"./es/components/tooltip/TooltipContent.js";import"./es/components/tooltip/TooltipTrigger.js";import{InputGroup as g}from"./es/components/input-group/InputGroup.js";import"./es/components/feedback/followup/followupContext.js";import"./es/components/feedback/main-question/mainQuestionContext.js";import"./es/components/radio-button/RadioButton.js";import"./es/components/radio-button/radioGroupContext.js";import"./es/components/radio-button/BaseRadioButton.js";import"./es/components/text-input/BaseTextArea.js";import"./es/components/text-input/BaseTextInput.js";import"./es/components/text-input/TextArea.js";import{TextInput as v}from"./es/components/text-input/TextInput.js";import"./es/utilities/polymorphism/SlotComponent.js";import"./es/components/flex/Flex.js";import{IconButton as h}from"./es/components/icon-button/IconButton.js";import"./es/components/link/Link.js";import"./es/components/link/NavLink.js";import"./es/components/link-list/LinkList.js";import"./es/components/logo/text-paths/ForsikringLevertAvFremtind.js";import"./es/components/logo/text-paths/FraSB1ogDNB.js";import"./es/components/logo/text-paths/InnovasjonFraFremtind.js";import"./es/components/logo/text-paths/TeknologiFraFremtind.js";import"./es/components/logo/text-paths/VartEgetForsikringsselskap.js";import"./es/components/logo/text-paths/VartForsikringsselskap.js";import{useFloatingTree as k,useFloatingNodeId as f,useFloatingParentNodeId as y,useFloating as w,offset as x,flip as _,shift as C,autoUpdate as N,useInteractions as P,useHover as I,safePolygon as T,useClick as E,useDismiss as F,useRole as L,useListNavigation as D,useMergeRefs as A,FloatingNode as S,FloatingPortal as R,FloatingFocusManager as M,FloatingTree as O}from"@floating-ui/react";import{AnimatePresence as $,motion as V}from"framer-motion";import*as B from"react-is";import{getThemeAndDensity as H}from"./es/utilities/getThemeAndDensity.js";import"./es/components/menu/MenuItem.js";import"./es/components/menu/MenuItemCheckbox.js";import"./es/components/pagination/Pagination.js";import"./es/components/popover/Popover.js";import{usePreviousValue as G}from"./es/hooks/usePreviousValue/usePreviousValue.js";import{useListNavigation as K}from"./es/hooks/useListNavigation/useListNavigation.js";import{getValuePair as U}from"./es/utilities/valuePair.js";import"./es/components/system-message/SystemMessage.js";import"./es/components/table/DataTable.js";import"./es/components/table/Table.js";import"./es/components/table/TableBody.js";import"./es/components/table/TableCaption.js";import{TableCell as q}from"./es/components/table/TableCell.js";import"./es/components/table/TableColumn.js";import"./es/components/table/TableColumnGroup.js";import{useTableContext as W}from"./es/components/table/tableContext.js";import"./es/components/table/tableSectionContext.js";import"./es/components/table/TableFooter.js";import"./es/components/table/TableHead.js";import"./es/components/table/TableHeader.js";import{TableRow as Q}from"./es/components/table/TableRow.js";import"./es/components/tabs/NavTab.js";import"./es/components/tabs/tabsContext.js";import"./es/components/tabs/Tab.js";import"./es/components/tag/Tag.js";import"./es/components/toast/toastContext.js";import"./es/components/toggle-switch/ToggleSwitch.js";import{focusSelected as z,toLower as J}from"./es/components/select/select-utils.js";import{useMenuWideEvents as X}from"./es/components/menu/useMenuWideEvents.js";import{ScreenReaderOnly as Y}from"./es/components/ScreenReaderOnly.js";const Z=s.forwardRef((({as:o="button",className:a,children:i,density:r,expandDirection:l="down",isExpanded:c=!1,hideLabel:p=!1,...m},d)=>{const b=p?Y:s.Fragment,j="down"===l?!c:c;return e(o,{"aria-expanded":c,"data-testid":"jkl-expander",type:"button"===o?"button":void 0,className:t("jkl-expander",a,{"jkl-expander--expanded":c,"jkl-expander--icon-only":!i}),...m,"data-density":r,ref:d,children:[i&&n(b,{children:n("span",{className:"jkl-expander__text",children:i})}),n(u,{className:"jkl-expander__arrow",variant:"inherit",pointingDown:j,bold:c})]})}));Z.displayName="Expander";const ee=a(((o,a)=>{const{children:c,className:p,initialPlacement:m,openOnHover:u=!1,keepOpenOnClickOutside:b=!1,triggerElement:j,isOpen:g,onToggle:v,...h}=o,O=d("jkl-menu"),G=k(),K=f(),U=y(),q=null!=U,W=i([]),[Q,z]=r(null),{allowHover:J,isOpen:Y,setIsOpen:Z}=X(G,K,U),ee=void 0!==g?g:Y;l((()=>null==v?void 0:v(ee)),[ee,v]);const{x:ne,y:oe,refs:te,placement:se,strategy:ae,context:ie}=w({nodeId:K,open:ee,onOpenChange:Z,placement:m||(q?"right-start":"bottom-start"),middleware:[x(2),_({fallbackAxisSideDirection:"end",crossAxis:!1}),C({padding:8})],whileElementsMounted:N}),{getReferenceProps:re,getFloatingProps:le,getItemProps:ce}=P([I(ie,{enabled:u&&J,delay:{open:75},handleClose:T({requireIntent:!0,blockPointerEvents:!0})}),E(ie,{event:"mousedown"}),F(ie,{outsidePress:!b}),L(ie,{role:"menu"}),D(ie,{listRef:W,activeIndex:Q,nested:q,onNavigate:z})]),pe=A([te.setReference,a]),{theme:me,density:de}=H(te.reference.current);return e(S,{id:K,children:[s.isValidElement(j)&&("button"===j.type||B.isForwardRef(j))?s.cloneElement(j,{...re({...h,ref:pe,role:q?"menuitem":void 0,"aria-controls":O,onClick(e){e.stopPropagation()}})}):j,n($,{children:ee&&n(R,{children:n(M,{context:ie,modal:!1,initialFocus:q?-1:0,returnFocus:!q,children:n(V.div,{className:t("jkl jkl-menu",p),"data-theme":me,"data-layout-density":de,role:"menu",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{ease:"easeIn",duration:.1},"data-placement":se,"aria-live":"assertive","aria-hidden":!ee,ref:te.setFloating,...le({id:O,style:{position:ae,top:oe??"",left:ne??""}}),children:s.Children.map(c,((e,n)=>s.isValidElement(e)&&B.isForwardRef(e)?s.cloneElement(e,ce({...e.props,tabIndex:Q===n?0:-1,role:"menuitem",ref(e){W.current[n]=e},onClick(n){var o,t;null==(t=(o=e.props).onClick)||t.call(o,n),!n.defaultPrevented&&(null==G||G.events.emit("click"))},onKeyDown(n){var o,t;null==(t=(o=e.props).onKeyDown)||t.call(o,n),!n.defaultPrevented&&(null==G||G.events.emit("keydown"),"menuitemcheckbox"===n.currentTarget.role&&"Enter"===n.key&&Z(!1))},onMouseEnter(){J&&ee&&z(n)}})):e))})})})})]})}));ee.displayName="MenuComponent";const ne=a(((e,o)=>null===y()?n(O,{children:n(ee,{ref:o,...e})}):n(ee,{ref:o,...e})));ne.displayName="Menu";const oe=()=>{},te=a(((s,a)=>{const{id:b,name:j,items:v,value:h,label:k,labelProps:f,onChange:y,onBlur:w,onFocus:x,className:_,helpLabel:C,errorLabel:N,invalid:P,searchable:I=!1,inline:T=!1,defaultPrompt:E="Velg",density:F,width:L,maxShownOptions:D=5,style:A,tooltipProps:S,...R}=s,M=d(b||"jkl-select",{generateSuffix:!b}),O=`${M}_label`,$=`${M}_button`,V=`${M}_search-input`,[B,H]=r(!1),q=c((()=>{H((e=>!e))}),[]),W=!!I,Q=W&&B,[X,Y]=r(""),Z=c((e=>!!e.label.toLowerCase().includes(X.toLowerCase())||"function"==typeof I&&I(X,e)),[I,X]),ee=p((()=>v.map(U).map((e=>{const n=!W||""===X||Z(e);return{...e,visible:n}}))),[v,W,X,Z]),ne=p((()=>!(typeof h>"u")&&v.some((e=>"string"==typeof e?e===h:e.value===h))),[h,v]),[te,se]=r(ne&&void 0!==h?h:""),ae=""!==te,ie=p((()=>{var e;return(null==(e=ee.find((e=>e.value===te)))?void 0:e.label)||E}),[ee,te,E]),re=i(null),le=c((e=>{re.current=e,a&&("function"==typeof a?a(e):a.current=e),e&&se(e.value)}),[re,a]),ce=G(h);l((()=>{h!==ce&&se(typeof h>"u"||!ne?"":h)}),[se,h,ce,ne]);const pe=c((e=>{const n=e.value;Y(""),se(n),q()}),[Y,se,q]),me=G(te);l((()=>{typeof me>"u"||me===te||te===h||(y&&y({type:"change",target:{name:j,value:te}}),re.current&&re.current.dispatchEvent(new Event("change",{bubbles:!0})))}),[y,j,h,te,me]);const de=i(null),ue=i(!1),be=i(null),je=i(null),ge=c(((e,n)=>{if(e&&!W){const e=n.current;e&&z(e,te)}else e?be.current&&be.current.focus():ue.current&&je.current&&je.current.focus()}),[W,te]),[ve]=m(B,{onFirstVisible:ge,onTransitionEnd:ge});K({ref:ve});const he=c((()=>{var e;W&&Y(""),w&&(w({type:"blur",target:{name:j,value:te}}),null==(e=re.current)||e.dispatchEvent(new Event("focusout",{bubbles:!0}))),ue.current=!1,H(!1)}),[w,Y,H,W,j,te]),ke=c((e=>{const n=de.current;n&&n.contains(e.relatedTarget)||he()}),[he]),fe=c((()=>{ue.current||(x&&x({type:"change",target:{name:j,value:te}}),ue.current=!0)}),[x,te,j]),ye=c((e=>{e.target.focus({preventScroll:!0})}),[]);l((()=>{const e=re.current,n=be.current,o=je.current,t=de.current;return null==e||e.addEventListener("focus",(()=>{Q?null==n||n.focus():null==o||o.focus()})),null==e||e.addEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()})),()=>{null==e||e.removeEventListener("focus",(()=>{Q?null==n||n.focus():null==o||o.focus()})),null==e||e.removeEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()}))}}),[Q]);const we=c((e=>{"ArrowDown"!==e.key&&" "!==e.key||B?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),H(!1)):(e.preventDefault(),e.stopPropagation(),H(!0))}),[H,B]),xe=c((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const n=ve.current;n&&z(n,W?void 0:te)}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),H(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&B&&(e.preventDefault(),e.stopPropagation());else{const n=ve.current;n&&(e.preventDefault(),e.stopPropagation(),z(n,te))}}),[H,ve,te,W,B]),_e=c((e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&be.current?be.current.focus():je.current&&(se(e.currentTarget.value),H(!1),je.current.focus());else if("ArrowUp"===e.key&&ve.current&&be.current){const n=ve.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==n?void 0:n.id)&&be.current&&be.current.focus()}}),[H,ve]);return l((()=>{const e=e=>{"Escape"===e.key&&B&&H(!1)};return typeof window<"u"&&B&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}}),[H,B]),e(o,{children:[e("select",{name:j,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:le,value:te,onChange:oe,children:[n("option",{value:""})," ",ee.map((e=>n("option",{hidden:!e.visible,value:e.value,children:e.label},`${M}-opt-${e.value}`)))]}),n(g,{ref:de,"data-testid":"jkl-select",className:t("jkl-select",_,{"jkl-select--inline":T,"jkl-select--open":B&&ee.some((e=>e.visible)),"jkl-select--no-value":!ae,"jkl-select--invalid":!!N||P}),tooltipProps:S&&{...S,triggerProps:{...S.triggerProps,onFocus:e=>{var n,o;null==(o=null==(n=S.triggerProps)?void 0:n.onFocus)||o.call(n,e),he()}}},...R,id:W?V:$,style:{"--jkl-select-max-shown-options":D,...A},density:F,label:k,labelProps:{id:O,srOnly:T,...f,htmlFor:W?V:$},helpLabel:C,errorLabel:N,render:o=>e("div",{className:"jkl-select__outer-wrapper",style:{width:L},children:[W&&n("input",{...o,id:V,hidden:!Q,ref:be,placeholder:"Søk",value:X,onChange:e=>Y(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":ae?`${M}__${J(te)}`:void 0,"aria-controls":M,"aria-expanded":B,role:"combobox",onKeyDown:xe,onBlur:ke,onFocus:fe,onClick:e=>{e.stopPropagation()}}),n("button",{...o,id:$,ref:je,hidden:Q,type:"button",name:`${j}-btn`,className:t("jkl-select__button",{"jkl-select__button--active-value":!!te}),"data-testid":"jkl-select__button","aria-label":`${ie||"Velg"},${k}`,"aria-expanded":B,"aria-controls":M,onBlur:ke,onFocus:fe,onKeyDown:we,onClick:q,onMouseDown:e=>{var n;e.preventDefault(),null==(n=je.current)||n.focus()},children:ie}),n("div",{id:M,ref:ve,role:"listbox",className:"jkl-select__options-menu",hidden:!B||ee.every((e=>!e.visible)),"aria-labelledby":O,tabIndex:-1,"data-focus":"controlled",children:ee.map(((o,t)=>o.visible?e("button",{hidden:!o.visible,type:"button",id:`${M}__${J(o.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":o.value===te,role:"option",value:o.value,"data-testautoid":`jkl-select__option-${t}`,onBlur:ke,onFocus:fe,onKeyDown:_e,onClick:e=>{e.preventDefault(),pe(o)},onMouseOver:ye,children:[o.label,o.description?n("span",{className:"jkl-select__option-description",children:o.description}):null]},`${M}-${o.value}`):null))}),n(u,{variant:"medium",pointingDown:!B,className:"jkl-select__arrow"})]})})]})}));te.displayName="Select";const se=a(((o,s)=>{const{label:a,className:i,density:r,errorLabel:l,helpLabel:c,inline:p,invalid:m,items:d,labelProps:b,placeholder:j="Velg",selectClassName:v,supportLabelProps:h,tooltipProps:k,value:f,width:y,...w}=o;return n(g,{label:a,density:r,errorLabel:l,helpLabel:c,labelProps:b,inline:p,supportLabelProps:h,tooltipProps:k,"data-testid":"jkl-select",className:t("jkl-select",i,{"jkl-select--inline":p,"jkl-select--invalid":!!l||m}),render:o=>e("div",{className:"jkl-select__outer-wrapper",style:{width:y},children:[e("select",{ref:s,className:t("jkl-select__button",v,{"jkl-select__button--active-value":!!f}),defaultValue:f?void 0:"",value:f,...o,...w,children:[j&&!f&&n("option",{disabled:!0,value:"",children:j}),d.map(U).map((e=>n("option",{"data-testid":"jkl-select__option",className:"jkl-select__option",value:e.value,children:e.label},e.value)))]}),n(u,{variant:"medium",pointingDown:!0,className:"jkl-select__arrow"})]})})}));se.displayName="NativeSelect";const ae=a(((o,s)=>{const{activePage:a=0,totalNumberOfRows:i,rowsPerPage:l,rowsPerPageItems:p,className:m,density:u,id:g,withGoToPage:k=!1,onChange:f,onChangeRowsPerPage:y,labels:w={rowsPerPage:"Rader per side",previous:"Forrige",next:"Neste"},...x}=o,_=d(g||"jkl-table-pagination",{generateSuffix:!g}),{density:C}=W(),N=l<=0?1:Math.ceil(i/l),[P,I]=r(function(e,n,o){return n<e?e:n>o?o:n}(0,a,N-1)),T=c((e=>{const n=Number.parseInt(e.currentTarget.dataset.number);f(e,n,P),I(n),F(String(n+1))}),[f,I,P]),[E,F]=r(String(P+1)),L=c((e=>{F(e.target.value);try{const n=Number.parseInt(e.target.value)-1;if(Number.isNaN(n))return;n>=0&&n<N&&(f(e,n,P),I(n))}catch{return}}),[f,F,I,P,N]),D=c((e=>{if(0===P)return void f(e,P,P);const n=P-1;f(e,n,P),I(n),F(String(n+1))}),[f,I,P]),A=c((e=>{if(P===N-1)return void f(e,P,P);const n=P+1;f(e,n,P),I(n),F(String(n+1))}),[f,I,N,P]);return e("div",{className:t("jkl-table-pagination",m),...x,id:_,"data-density":u||C,ref:s,children:[n("div",{className:"jkl-table-pagination__left",children:e("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--rows",children:[e("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:[w.rowsPerPage,":"]}),n(se,{className:"jkl-table-pagination__picker-input",label:w.rowsPerPage,labelProps:{srOnly:!0},name:`${_}-rows-per-page`,items:p.map((e=>"number"==typeof e?String(e):{label:e.label,value:String(e.value)})),value:String(l),onChange:y,width:"min(8rem, 100%)",inline:!0})]})}),n("div",{className:"jkl-table-pagination__right",children:1!==N&&e("nav",{className:"jkl-table-pagination__nav",children:[k&&e("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--page",children:[e("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:["object"==typeof k?k.gotoLabel:"Gå til side",":"]}),n(v,{className:"jkl-table-pagination__picker-input",label:"object"==typeof k?k.gotoLabel:"Gå til side",labelProps:{srOnly:!0},name:`${_}-go-to-page`,value:E,width:"min(4rem, 100%)",onChange:L,"aria-invalid":E&&E!==String(P+1)?"true":void 0})]}),e("ul",{children:[n("li",{children:n(h,{className:"jkl-table-pagination__previous",title:w.previous,onClick:D,children:n(b,{})})}),n(ie,{id:_,activePage:a,numberOfPages:N,onPageClick:T}),n("li",{children:n(h,{className:"jkl-table-pagination__next",title:w.next,onClick:A,children:n(j,{})})})]})]})})]})})),ie=({id:s,activePage:a,numberOfPages:i,onPageClick:r})=>{if(i<=7)return n(o,{children:Array.from({length:i}).map(((e,o)=>n("li",{children:n("button",{className:t("jkl-table-pagination__page",{"jkl-table-pagination__page--active":a===o}),type:"button","data-number":o,onClick:r,children:o+1})},`${s}-page-${o}`)))});const l=a>3&&i>7,c=a<i-4&&i>7,p=Math.min(Math.max(a-2,1),i-6),m=Math.min(p+1,i-5),d=Math.min(m+1,i-4),u=Math.min(m+2,i-3),b=Math.min(m+3,i-2);return e(o,{children:[n("li",{children:n(re,{isActive:0===a,number:0,onClick:r})}),n("li",{children:l?n("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):n(re,{isActive:a===p,number:p,onClick:r})}),n("li",{children:n(re,{isActive:a===m,number:m,onClick:r})}),n("li",{children:n(re,{isActive:a===d,number:d,onClick:r})}),n("li",{children:n(re,{isActive:a===u,number:u,onClick:r})}),n("li",{children:c?n("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):n(re,{isActive:a===b,number:b,onClick:r})}),n("li",{children:n(re,{isActive:a===i-1,number:i-1,onClick:r})})]})},re=({isActive:e,number:o,onClick:s,...a})=>n("button",{className:t("jkl-table-pagination__page",{"jkl-table-pagination__page--active":e}),type:"button","data-number":o,onClick:s,...a,children:o+1});ae.displayName="TablePagination";const le=a((({isOpen:e,onClick:o,children:s,className:a,id:i,"aria-controls":r,...l},c)=>{if(void 0===e||"function"!=typeof o)throw new Error("ExpandableTableRowController must have ExpandableTableRow as parent");const{density:p,collapseToList:m}=W(),d=l["data-th"],u=m?d:void 0;return n(q,{className:t("jkl-table-cell--expand",{"jkl-table-cell--expand-without-text":!s},a),...l,ref:c,children:n(Z,{className:t("jkl-table-row-expand-button",{"jkl-table-row-expand-button--expanded":e}),id:i,density:p,isExpanded:e,"aria-controls":r,"aria-label":s?void 0:d||"Ekspander rad",onClick:e=>{e.stopPropagation(),o()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.stopPropagation(),e.preventDefault(),o())},children:s??u})})}));le.displayName="ExpandableTableRowController";const ce=a(((a,i)=>{const{className:c,clickable:p,children:u,expandedChildren:b,onToggle:j,colSpan:g=100,isOpen:v,...h}=a,[k,f]=r(v??!1);l((()=>{typeof v>"u"||f(v)}),[v]);const[y]=m(k,{timing:"expressive"}),w=()=>{const e=!k;j&&j(e),f(e)},x=t("jkl-table-row--expandable",c,{"jkl-table-row--expanded":k,"jkl-expandable-table-row--clickable-external":p}),_=t("jkl-expandable-table-row__expanded-row",{"jkl-expandable-table-row__expanded-row--expanded":k}),C=d("jkl-expandable-table-row"),N=d("jkl-expandable-table-row-controller");return e(o,{children:[n(Q,{className:x,clickable:p??{onClick:()=>w()},...h,ref:i,children:s.Children.map(u,(e=>s.isValidElement(e)&&e.type==le?s.cloneElement(e,{isOpen:k,onClick:()=>w(),"aria-controls":C,id:N}):e))}),n("tr",{"aria-hidden":!k,children:n("td",{colSpan:g,children:n("div",{ref:y,className:_,id:C,"aria-labelledby":N,hidden:!k,role:"group",children:b})})})]})}));ce.displayName="ExpandableTableRow";export{Z as E,ne as M,se as N,te as S,ae as T,ce as a,le as b};
|
|
2
|
+
//# sourceMappingURL=ExpandableTableRow-_-mY2lEq.js.map
|