@fremtind/jokul 0.58.5 → 0.60.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/build-stats.html +1 -1
- package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +2 -26
- package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -1
- package/build/cjs/components/datepicker/internal/Calendar.cjs +1 -1
- package/build/cjs/components/datepicker/internal/Calendar.cjs.map +1 -1
- package/build/cjs/components/loader/stories/Skeleton.stories.cjs +1 -1
- package/build/cjs/components/menu/Menu.cjs +1 -19
- package/build/cjs/components/menu/Menu.cjs.map +1 -1
- package/build/cjs/components/modal/stories/CompleteModal.stories.cjs +1 -1
- package/build/cjs/hooks/useLocalStorage/useLocalStorage.cjs +1 -1
- package/build/cjs/hooks/useLocalStorage/useLocalStorage.cjs.map +1 -1
- package/build/cjs/hooks/useLocalStorage/useLocalStorage.d.cts +1 -1
- package/build/es/components/autosuggest/BaseAutosuggest.js +2 -34
- package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -1
- package/build/es/components/datepicker/internal/Calendar.js +1 -1
- package/build/es/components/datepicker/internal/Calendar.js.map +1 -1
- package/build/es/components/menu/Menu.js +1 -19
- package/build/es/components/menu/Menu.js.map +1 -1
- package/build/es/components/message/stories/WarningMessage.stories.js +1 -1
- package/build/es/components/modal/stories/Modal.stories.js +1 -1
- package/build/es/components/modal/stories/ModalHeader.stories.js +1 -1
- package/build/es/components/modal/stories/ModalOverlay.stories.js +1 -1
- package/build/es/components/modal/stories/ModalTitle.stories.js +1 -1
- package/build/es/hooks/useLocalStorage/useLocalStorage.d.ts +1 -1
- package/build/es/hooks/useLocalStorage/useLocalStorage.js +1 -1
- package/build/es/hooks/useLocalStorage/useLocalStorage.js.map +1 -1
- package/build/index-C4ABwKfA.js +20 -0
- package/build/index-C4ABwKfA.js.map +1 -0
- package/build/index-ZdY5zxEI.cjs +20 -0
- package/build/index-ZdY5zxEI.cjs.map +1 -0
- package/build/style.css +1 -1
- package/package.json +2 -2
- package/styles/components/button/button.css +3 -3
- package/styles/components/button/button.min.css +1 -1
- package/styles/components/checkbox/checkbox.css +4 -4
- package/styles/components/checkbox/checkbox.min.css +1 -1
- package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
- package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
- package/styles/components/countdown/countdown.css +2 -2
- package/styles/components/countdown/countdown.min.css +1 -1
- package/styles/components/feedback/feedback.css +2 -2
- package/styles/components/feedback/feedback.min.css +1 -1
- package/styles/components/input-group/input-group.css +2 -2
- package/styles/components/input-group/input-group.min.css +1 -1
- package/styles/components/loader/loader.css +6 -6
- package/styles/components/loader/loader.min.css +1 -1
- package/styles/components/loader/skeleton-loader.css +5 -5
- package/styles/components/loader/skeleton-loader.min.css +1 -1
- package/styles/components/message/message.css +2 -2
- package/styles/components/message/message.min.css +1 -1
- package/styles/components/progress-bar/progress-bar.css +1 -1
- package/styles/components/progress-bar/progress-bar.min.css +1 -1
- package/styles/components/radio-button/radio-button.css +2 -2
- package/styles/components/radio-button/radio-button.min.css +1 -1
- package/styles/components/radio-panel/radio-panel.css +2 -2
- package/styles/components/radio-panel/radio-panel.min.css +1 -1
- package/styles/components/system-message/system-message.css +2 -2
- package/styles/components/system-message/system-message.min.css +1 -1
- package/styles/components/toast/toast.css +4 -4
- package/styles/components/toast/toast.min.css +1 -1
- package/styles/styles.css +39 -39
- package/styles/styles.min.css +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),a=require("react-dom"),n=require("../../../hooks/useId/useId.cjs"),r=require("../../icon/icons/ArrowLeftIcon.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),a=require("react-dom"),n=require("../../../hooks/useId/useId.cjs"),r=require("../../button/Button.cjs"),l=require("../../icon/icons/ArrowLeftIcon.cjs"),o=require("../../icon/icons/ArrowRightIcon.cjs"),s=require("../../icon/icons/ChevronDownIcon.cjs"),c=require("./calendarReducer.cjs"),d=require("./useCalendar.cjs"),i=require("./utils.cjs"),u=["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],h=["man","tir","ons","tor","fre","lør","søn"],g=t.forwardRef(((g,j)=>{const{date:b,defaultSelected:f,density:m,minDate:v,maxDate:p,days:k=h,months:x=u,monthLabel:D="Velg måned",yearLabel:w="Velg år",yearsToShow:y=i.DEFAULT_YEARS_TO_SHOW,onTabOutside:S,...M}=g,_=n.useId("jkl-calendar"),[{offset:F,selectedDate:A,shownDate:C},N]=t.useReducer(c.calendarReducer,i.getInitialDateShown(b,f,v,p),c.calendarInitializer),q=C.getMonth(),E=C.getFullYear();t.useEffect((()=>{N({type:"SET_SELECTED_DATE",newDate:i.getInitialDateShown(b,f,v,p)})}),[b,f,v,p]);const O=t.useCallback((e=>{N({type:"SET_OFFSET",newOffset:e})}),[]),{calendars:Y,getBackProps:I,getDateProps:T,getForwardProps:$,handleOffsetChanged:R}=d.useCalendar({date:A,selected:A,minDate:v,maxDate:p,offset:F,onOffsetChanged:O,firstDayOfWeek:1,...M}),L=t.useRef(null),B=t.useCallback((e=>{if(!L.current)return;const t=document.activeElement,n=L.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]'),r=async e=>{null==t||t.setAttribute("tabindex","-1"),e.setAttribute("tabindex","0"),e.focus()};n.forEach(((l,o)=>{const s=o+e;if(l==t)if(s<=n.length-1&&s>=0)r(n[s]);else if(e<0){if(i.isBackDisabled({calendars:Y,minDate:v})||(a.flushSync((()=>{R(F-i.subtractMonth({calendars:Y,offset:1,minDate:v}))})),!L.current))return;const e=L.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[e.length+s]&&(e[0].setAttribute("tabindex","-1"),r(e[e.length+s]))}else{if(i.isForwardDisabled({calendars:Y,maxDate:p})||(a.flushSync((()=>{R(F+i.addMonth({calendars:Y,offset:1,maxDate:p}))})),!L.current))return;const e=L.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[s-n.length]&&(e[0].setAttribute("tabindex","-1"),r(e[s-n.length]))}}))}),[R,L,F,Y,p,v]),K=t.useCallback((e=>{switch(e.key){case"ArrowUp":B(-7),e.preventDefault();break;case"ArrowRight":B(1),e.preventDefault();break;case"ArrowDown":B(7),e.preventDefault();break;case"ArrowLeft":B(-1),e.preventDefault()}}),[B]),P=t.useCallback((e=>{var t;if("Tab"!==e.key)return;const a=null==(t=L.current)?void 0:t.querySelectorAll('button:not([disabled]):not([tabindex="-1"]), select');if(!a)return;const n=a[0],r=a[a.length-1];e.shiftKey||document.activeElement!==r?e.shiftKey&&document.activeElement===n&&(r.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}),[]),J=t.useCallback((e=>{const{date:t,selected:a,selectable:n,prevMonth:r,nextMonth:l}=e;return!!n&&!(!a&&t.toString()!==(null==v?void 0:v.toString())&&(r||l||C.getFullYear()!==t.getFullYear()||A.getMonth()===t.getMonth()||1!==t.getDate()))}),[C,v,A]),U=t.useCallback((()=>{v&&C.getFullYear()-v.getFullYear()==0&&C.getMonth()-v.getMonth()==1?document.querySelectorAll(".jkl-calendar-navigation__arrow")[1].focus():p&&p.getFullYear()-C.getFullYear()==0&&p.getMonth()-C.getMonth()==1&&document.querySelectorAll(".jkl-calendar-navigation__arrow")[0].focus()}),[v,p,C]),V=t.useCallback((e=>{if(4!==e.target.value.length)return;const t=Number.parseInt(e.target.value);if(Number.isNaN(t))return;let a=12*(t-C.getFullYear());const n=new Date(C.getFullYear(),C.getMonth()+a,C.getDate());p&&p.getFullYear()===n.getFullYear()&&p.getMonth()<n.getMonth()?a-=n.getMonth()-p.getMonth():v&&v.getFullYear()===n.getFullYear()&&v.getMonth()>n.getMonth()&&(a+=v.getMonth()-n.getMonth()),N({type:"ADD_OFFSET",addedOffset:a})}),[C,v,p]),W=t.useCallback((e=>{if(!A&&!b)return;const t=C.getFullYear()-(A||new Date).getFullYear(),a=Number.parseInt(e.target.value)-(A||new Date).getMonth();N({type:"SET_OFFSET",newOffset:12*t+a})}),[A,b,C]),z=i.getYearSelectOptions(E,v,p,y),H=i.getMonthSelectOptions(E,x,v,p);return e.jsx("div",{ref:j,id:_,className:"jkl-calendar","data-testid":"jkl-calendar",children:e.jsxs("div",{className:"jkl-calendar__padding",ref:L,onKeyDown:P,children:[e.jsxs("fieldset",{className:"jkl-calendar-navigation",children:[e.jsxs("div",{children:[e.jsx(r.Button,{...I({calendars:Y,onClick:U}),variant:"ghost",icon:e.jsx(l.ArrowLeftIcon,{variant:"medium",bold:!0})}),e.jsx(r.Button,{...$({calendars:Y,onClick:U}),variant:"ghost",icon:e.jsx(o.ArrowRightIcon,{variant:"medium",bold:!0})})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"jkl-calendar-navigation-dropdown",children:[e.jsx("select",{onChange:W,className:"jkl-calendar-navigation-dropdown__select","aria-label":D,value:q.toString(),children:H.map((({label:t,value:a})=>e.jsx("option",{value:a,children:t},a)))}),e.jsx(s.ChevronDownIcon,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]}),e.jsxs("div",{className:"jkl-calendar-navigation-dropdown",children:[e.jsx("select",{onChange:V,className:"jkl-calendar-navigation-dropdown__select","aria-label":w,value:E.toString(),children:z.map((t=>e.jsx("option",{value:t,children:t},t)))}),e.jsx(s.ChevronDownIcon,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]})]})]}),Y.map((t=>e.jsxs("table",{className:"jkl-calendar-table","data-testid":"jkl-datepicker-calendar",children:[e.jsxs("caption",{className:"jkl-sr-only",children:[x[t.month],", ",t.year]}),e.jsx("thead",{children:e.jsx("tr",{children:k.map((a=>e.jsx("th",{children:a},`${t.month}${t.year}${a}`)))})}),e.jsx("tbody",{"data-testid":"jkl-datepicker-dates",children:t.weeks.map(((a,n)=>e.jsx("tr",{children:a.map(((a,r)=>{const l=`${t.month}${t.year}${n}${r}`;if("string"==typeof a)return e.jsx("td",{className:"jkl-calendar__date jkl-calendar__date--empty",children:a},l);const{date:o,selectable:s,today:c,prevMonth:d,nextMonth:i}=a;return e.jsx("td",{children:e.jsx("button",{...T({dateObj:a}),type:"button",className:"jkl-calendar-date-button",tabIndex:J(a)?0:-1,"aria-label":`${o.getDate()}. ${x[o.getMonth()].toLowerCase()}`,"aria-current":c?"date":void 0,"data-adjacent":d||i?"true":void 0,disabled:!s,onKeyDown:K,children:e.jsx("span",{"aria-hidden":"true",children:o.getDate()})})},l)}))},`${t.month}${t.year}${n}`)))})]},`${t.month}${t.year}`)))]})})}));g.displayName="Calendar",exports.Calendar=g;
|
|
2
2
|
//# sourceMappingURL=Calendar.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.cjs","sources":["../../../../../src/components/datepicker/internal/Calendar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useReducer,\n useRef,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Density } from \"../../../core/types.js\";\nimport { useId } from \"../../../hooks/useId/useId.js\";\nimport { ArrowLeftIcon } from \"../../icon/icons/ArrowLeftIcon.js\";\nimport { ArrowRightIcon } from \"../../icon/icons/ArrowRightIcon.js\";\nimport { ChevronDownIcon } from \"../../icon/icons/ChevronDownIcon.js\";\nimport { YearsToShow } from \"../types.js\";\nimport { calendarInitializer, calendarReducer } from \"./calendarReducer.js\";\nimport { useCalendar, UseCalendarProps } from \"./useCalendar.js\";\nimport {\n addMonth,\n DateInfo,\n DEFAULT_YEARS_TO_SHOW,\n getInitialDateShown,\n getMonthSelectOptions,\n getYearSelectOptions,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\ninterface CalendarProps\n extends Omit<\n UseCalendarProps,\n \"date\" | \"onOffsetChanged\" | \"offset\" | \"firstDayOfWeek\" | \"selected\"\n > {\n date: Date | null;\n density?: Density;\n defaultSelected?: Date;\n days?: string[];\n months?: string[];\n monthLabel?: string;\n yearLabel?: string;\n yearsToShow?: YearsToShow;\n onTabOutside: React.KeyboardEventHandler;\n}\n\nconst defaultMonths = [\n \"Januar\",\n \"Februar\",\n \"Mars\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Desember\",\n];\n\nconst defaultDays = [\"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\", \"søn\"];\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const {\n date,\n defaultSelected,\n density,\n minDate,\n maxDate,\n days = defaultDays,\n months = defaultMonths,\n monthLabel = \"Velg måned\",\n yearLabel = \"Velg år\",\n yearsToShow = DEFAULT_YEARS_TO_SHOW,\n onTabOutside,\n ...rest\n } = props;\n\n const id = useId(\"jkl-calendar\");\n\n const [{ offset, selectedDate, shownDate }, dispatch] = useReducer(\n calendarReducer,\n getInitialDateShown(date, defaultSelected, minDate, maxDate),\n calendarInitializer,\n );\n\n const shownMonth = shownDate.getMonth();\n const shownYear = shownDate.getFullYear();\n\n useEffect(() => {\n dispatch({\n type: \"SET_SELECTED_DATE\",\n newDate: getInitialDateShown(\n date,\n defaultSelected,\n minDate,\n maxDate,\n ),\n });\n }, [date, defaultSelected, minDate, maxDate]);\n\n const onOffsetChanged = useCallback((newOffset: number) => {\n dispatch({\n type: \"SET_OFFSET\",\n newOffset,\n });\n }, []);\n\n const {\n calendars,\n getBackProps,\n getDateProps,\n getForwardProps,\n handleOffsetChanged,\n } = useCalendar({\n date: selectedDate,\n selected: selectedDate,\n minDate,\n maxDate,\n offset,\n onOffsetChanged,\n firstDayOfWeek: 1,\n ...rest,\n });\n\n /// Calendar keyboard navigation\n\n const calendarPaddingRef = useRef<HTMLDivElement>(null);\n const doFocusChange = useCallback(\n (offsetDiff: number) => {\n if (!calendarPaddingRef.current) {\n return;\n }\n\n const e = document.activeElement;\n const buttons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n\n const changeFocusTo = async (nextButton: HTMLButtonElement) => {\n e?.setAttribute(\"tabindex\", \"-1\");\n nextButton.setAttribute(\"tabindex\", \"0\");\n nextButton.focus();\n };\n\n buttons.forEach((el, i) => {\n const newNodeKey = i + offsetDiff;\n\n if (el == e) {\n if (\n newNodeKey <= buttons.length - 1 &&\n newNodeKey >= 0\n ) {\n changeFocusTo(buttons[newNodeKey]);\n } else if (offsetDiff < 0) {\n if (isBackDisabled({ calendars, minDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff negativ så har vi gått tilbake en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset -\n subtractMonth({\n calendars,\n offset: 1,\n minDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // + - = -\n if (newButtons[newButtons.length + newNodeKey]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newButtons.length + newNodeKey],\n );\n }\n } else {\n if (isForwardDisabled({ calendars, maxDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff positiv så har vi gått frem en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset +\n addMonth({\n calendars,\n offset: 1,\n maxDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // NewNodeKey er basert på forrige måneds liste med knapper. For at verdien skal bli\n // riktig i vår nye måned må vi trekke fra anntal dager fra forrige måned.\n if (newButtons[newNodeKey - buttons.length]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newNodeKey - buttons.length],\n );\n }\n }\n }\n });\n },\n [\n handleOffsetChanged,\n calendarPaddingRef,\n offset,\n calendars,\n maxDate,\n minDate,\n ],\n );\n\n const handleArrowNavigation = useCallback(\n (event: React.KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowUp\":\n doFocusChange(-7);\n event.preventDefault();\n break;\n case \"ArrowRight\":\n doFocusChange(1);\n event.preventDefault();\n break;\n case \"ArrowDown\":\n doFocusChange(7);\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n doFocusChange(-1);\n event.preventDefault();\n break;\n default:\n break;\n }\n },\n [doFocusChange],\n );\n\n const handleTabInside: React.KeyboardEventHandler = useCallback(\n (event) => {\n if (event.key !== \"Tab\") return;\n\n const focusableElements =\n calendarPaddingRef.current?.querySelectorAll<HTMLElement>(\n 'button:not([disabled]):not([tabindex=\"-1\"]), select',\n );\n\n if (!focusableElements) return;\n\n const firstElement = focusableElements[0];\n const lastElement =\n focusableElements[focusableElements.length - 1];\n\n if (!event.shiftKey && document.activeElement === lastElement) {\n firstElement.focus();\n event.preventDefault();\n } else if (\n event.shiftKey &&\n document.activeElement === firstElement\n ) {\n lastElement.focus();\n event.preventDefault();\n }\n },\n [],\n );\n\n const isFocusableDate = useCallback(\n (dateInfo: DateInfo) => {\n const { date, selected, selectable, prevMonth, nextMonth } =\n dateInfo;\n\n // Datoen kan ikke velges\n if (!selectable) {\n return false;\n }\n // Datoen er valgt dato\n if (selected) {\n return true;\n }\n // Datoen er første valgbare dato\n if (date.toString() === minDate?.toString()) {\n return true;\n }\n\n // Datoen er første i måneden som vises\n if (\n !prevMonth &&\n !nextMonth &&\n shownDate.getFullYear() === date.getFullYear() &&\n selectedDate.getMonth() !== date.getMonth() &&\n date.getDate() === 1\n ) {\n return true;\n }\n\n return false;\n },\n [shownDate, minDate, selectedDate],\n );\n\n const handleGotoEdgeMonth = useCallback(() => {\n if (\n // Vi er i ferd med å gå til første måned\n minDate &&\n shownDate.getFullYear() - minDate.getFullYear() === 0 &&\n shownDate.getMonth() - minDate.getMonth() === 1\n ) {\n // Fokuser på \"neste månded\"-knappen\n document\n .querySelectorAll<HTMLButtonElement>(\n \".jkl-calendar-navigation__arrow\",\n )[1]\n .focus();\n } else if (\n // Vi er i ferd med å gå til siste måned\n maxDate &&\n maxDate.getFullYear() - shownDate.getFullYear() === 0 &&\n maxDate.getMonth() - shownDate.getMonth() === 1\n ) {\n // Fokuser på \"forrige månded\"-knappen\n document\n .querySelectorAll<HTMLButtonElement>(\n \".jkl-calendar-navigation__arrow\",\n )[0]\n .focus();\n }\n }, [minDate, maxDate, shownDate]);\n\n /// Extended variant events\n\n const handleYearChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (event.target.value.length !== 4) {\n return;\n }\n\n const year: number = Number.parseInt(event.target.value);\n if (Number.isNaN(year)) {\n return;\n }\n\n let offset = (year - shownDate.getFullYear()) * 12;\n const expectedDate = new Date(\n shownDate.getFullYear(),\n shownDate.getMonth() + offset,\n shownDate.getDate(),\n );\n\n // Pass på at vi ikke hopper forbi maks. eller min. dato\n if (\n maxDate &&\n maxDate.getFullYear() === expectedDate.getFullYear() &&\n maxDate.getMonth() < expectedDate.getMonth()\n ) {\n offset -= expectedDate.getMonth() - maxDate.getMonth();\n } else if (\n minDate &&\n minDate.getFullYear() === expectedDate.getFullYear() &&\n minDate.getMonth() > expectedDate.getMonth()\n ) {\n offset += minDate.getMonth() - expectedDate.getMonth();\n }\n\n dispatch({\n type: \"ADD_OFFSET\",\n addedOffset: offset,\n });\n\n return;\n },\n [shownDate, minDate, maxDate],\n );\n\n const handleMonthChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (!selectedDate && !date) {\n return;\n }\n\n const yearDiff =\n shownDate.getFullYear() -\n (selectedDate || new Date()).getFullYear();\n const monthDiff =\n Number.parseInt(event.target.value) -\n (selectedDate || new Date()).getMonth();\n\n dispatch({\n type: \"SET_OFFSET\",\n newOffset: yearDiff * 12 + monthDiff,\n });\n\n return;\n },\n [selectedDate, date, shownDate],\n );\n\n const yearSelectOptions = getYearSelectOptions(\n shownYear,\n minDate,\n maxDate,\n yearsToShow,\n );\n const monthSelectOptions = getMonthSelectOptions(\n shownYear,\n months,\n minDate,\n maxDate,\n );\n\n return (\n <div\n ref={ref}\n id={id}\n className=\"jkl-calendar\"\n data-testid=\"jkl-calendar\"\n >\n {/* Vi lytter på på trykk på Tab inne i kalenderen for å håndtere fokus */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n className=\"jkl-calendar__padding\"\n ref={calendarPaddingRef}\n onKeyDown={handleTabInside}\n >\n <fieldset className=\"jkl-calendar-navigation\">\n <div>\n <button\n {...getBackProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n className=\"jkl-calendar-navigation__arrow\"\n type=\"button\"\n >\n <ArrowLeftIcon variant=\"medium\" bold />\n </button>\n <button\n {...getForwardProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n className=\"jkl-calendar-navigation__arrow\"\n type=\"button\"\n >\n <ArrowRightIcon variant=\"medium\" bold />\n </button>\n </div>\n <div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleMonthChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={monthLabel}\n value={shownMonth.toString()}\n >\n {monthSelectOptions.map(\n ({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ),\n )}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleYearChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={yearLabel}\n value={shownYear.toString()}\n >\n {yearSelectOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n </div>\n </fieldset>\n {calendars.map((calendar) => (\n <table\n className=\"jkl-calendar-table\"\n key={`${calendar.month}${calendar.year}`}\n data-testid=\"jkl-datepicker-calendar\"\n >\n <caption className=\"jkl-sr-only\">\n {months[calendar.month]}, {calendar.year}\n </caption>\n <thead>\n <tr>\n {days.map((weekday) => (\n <th\n key={`${calendar.month}${calendar.year}${weekday}`}\n >\n {weekday}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-testid=\"jkl-datepicker-dates\">\n {calendar.weeks.map((week, weekIndex) => (\n <tr\n key={`${calendar.month}${calendar.year}${weekIndex}`}\n >\n {week.map((dateInfo, index) => {\n const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;\n if (typeof dateInfo === \"string\") {\n return (\n <td\n className=\"jkl-calendar__date jkl-calendar__date--empty\"\n key={key}\n >\n {dateInfo}\n </td>\n );\n }\n const {\n date,\n selectable,\n today,\n prevMonth,\n nextMonth,\n } = dateInfo;\n\n return (\n <td key={key}>\n <button\n {...getDateProps({\n dateObj: dateInfo,\n })}\n type=\"button\"\n className=\"jkl-calendar-date-button\"\n tabIndex={\n isFocusableDate(\n dateInfo,\n )\n ? 0\n : -1\n }\n aria-label={`${date.getDate()}. ${months[\n date.getMonth()\n ].toLowerCase()}`}\n aria-current={\n today\n ? \"date\"\n : undefined\n }\n data-adjacent={\n prevMonth ||\n nextMonth\n ? \"true\"\n : undefined\n }\n disabled={!selectable}\n onKeyDown={\n handleArrowNavigation\n }\n >\n <span aria-hidden=\"true\">\n {date.getDate()}\n </span>\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n ))}\n </div>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n"],"names":["defaultMonths","defaultDays","Calendar","forwardRef","props","ref","date","defaultSelected","density","minDate","maxDate","days","months","monthLabel","yearLabel","yearsToShow","DEFAULT_YEARS_TO_SHOW","onTabOutside","rest","id","useId","offset","selectedDate","shownDate","dispatch","useReducer","calendarReducer","getInitialDateShown","calendarInitializer","shownMonth","getMonth","shownYear","getFullYear","useEffect","type","newDate","onOffsetChanged","useCallback","newOffset","calendars","getBackProps","getDateProps","getForwardProps","handleOffsetChanged","useCalendar","selected","firstDayOfWeek","calendarPaddingRef","useRef","doFocusChange","offsetDiff","current","e","document","activeElement","buttons","querySelectorAll","changeFocusTo","async","setAttribute","nextButton","focus","forEach","el","i","newNodeKey","length","isBackDisabled","flushSync","subtractMonth","newButtons","isForwardDisabled","addMonth","handleArrowNavigation","event","key","preventDefault","handleTabInside","focusableElements","_a","firstElement","lastElement","shiftKey","isFocusableDate","dateInfo","selectable","prevMonth","nextMonth","toString","getDate","handleGotoEdgeMonth","handleYearChange","target","value","year","Number","parseInt","isNaN","expectedDate","Date","addedOffset","handleMonthChange","yearDiff","monthDiff","yearSelectOptions","getYearSelectOptions","monthSelectOptions","getMonthSelectOptions","jsx","className","children","jsxs","onKeyDown","onClick","ArrowLeftIcon","variant","bold","ArrowRightIcon","onChange","map","label","ChevronDownIcon","calendar","month","weekday","weeks","week","weekIndex","index","today","dateObj","tabIndex","toLowerCase","disabled","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Calendar.cjs","sources":["../../../../../src/components/datepicker/internal/Calendar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useReducer,\n useRef,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Density } from \"../../../core/types.js\";\nimport { useId } from \"../../../hooks/useId/useId.js\";\nimport { Button } from \"../../button/Button.js\";\nimport { ArrowLeftIcon } from \"../../icon/icons/ArrowLeftIcon.js\";\nimport { ArrowRightIcon } from \"../../icon/icons/ArrowRightIcon.js\";\nimport { ChevronDownIcon } from \"../../icon/icons/ChevronDownIcon.js\";\nimport { YearsToShow } from \"../types.js\";\nimport { calendarInitializer, calendarReducer } from \"./calendarReducer.js\";\nimport { useCalendar, UseCalendarProps } from \"./useCalendar.js\";\nimport {\n addMonth,\n DateInfo,\n DEFAULT_YEARS_TO_SHOW,\n getInitialDateShown,\n getMonthSelectOptions,\n getYearSelectOptions,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\ninterface CalendarProps\n extends Omit<\n UseCalendarProps,\n \"date\" | \"onOffsetChanged\" | \"offset\" | \"firstDayOfWeek\" | \"selected\"\n > {\n date: Date | null;\n density?: Density;\n defaultSelected?: Date;\n days?: string[];\n months?: string[];\n monthLabel?: string;\n yearLabel?: string;\n yearsToShow?: YearsToShow;\n onTabOutside: React.KeyboardEventHandler;\n}\n\nconst defaultMonths = [\n \"Januar\",\n \"Februar\",\n \"Mars\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Desember\",\n];\n\nconst defaultDays = [\"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\", \"søn\"];\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const {\n date,\n defaultSelected,\n density,\n minDate,\n maxDate,\n days = defaultDays,\n months = defaultMonths,\n monthLabel = \"Velg måned\",\n yearLabel = \"Velg år\",\n yearsToShow = DEFAULT_YEARS_TO_SHOW,\n onTabOutside,\n ...rest\n } = props;\n\n const id = useId(\"jkl-calendar\");\n\n const [{ offset, selectedDate, shownDate }, dispatch] = useReducer(\n calendarReducer,\n getInitialDateShown(date, defaultSelected, minDate, maxDate),\n calendarInitializer,\n );\n\n const shownMonth = shownDate.getMonth();\n const shownYear = shownDate.getFullYear();\n\n useEffect(() => {\n dispatch({\n type: \"SET_SELECTED_DATE\",\n newDate: getInitialDateShown(\n date,\n defaultSelected,\n minDate,\n maxDate,\n ),\n });\n }, [date, defaultSelected, minDate, maxDate]);\n\n const onOffsetChanged = useCallback((newOffset: number) => {\n dispatch({\n type: \"SET_OFFSET\",\n newOffset,\n });\n }, []);\n\n const {\n calendars,\n getBackProps,\n getDateProps,\n getForwardProps,\n handleOffsetChanged,\n } = useCalendar({\n date: selectedDate,\n selected: selectedDate,\n minDate,\n maxDate,\n offset,\n onOffsetChanged,\n firstDayOfWeek: 1,\n ...rest,\n });\n\n /// Calendar keyboard navigation\n\n const calendarPaddingRef = useRef<HTMLDivElement>(null);\n const doFocusChange = useCallback(\n (offsetDiff: number) => {\n if (!calendarPaddingRef.current) {\n return;\n }\n\n const e = document.activeElement;\n const buttons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n\n const changeFocusTo = async (nextButton: HTMLButtonElement) => {\n e?.setAttribute(\"tabindex\", \"-1\");\n nextButton.setAttribute(\"tabindex\", \"0\");\n nextButton.focus();\n };\n\n buttons.forEach((el, i) => {\n const newNodeKey = i + offsetDiff;\n\n if (el == e) {\n if (\n newNodeKey <= buttons.length - 1 &&\n newNodeKey >= 0\n ) {\n changeFocusTo(buttons[newNodeKey]);\n } else if (offsetDiff < 0) {\n if (isBackDisabled({ calendars, minDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff negativ så har vi gått tilbake en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset -\n subtractMonth({\n calendars,\n offset: 1,\n minDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // + - = -\n if (newButtons[newButtons.length + newNodeKey]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newButtons.length + newNodeKey],\n );\n }\n } else {\n if (isForwardDisabled({ calendars, maxDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff positiv så har vi gått frem en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset +\n addMonth({\n calendars,\n offset: 1,\n maxDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // NewNodeKey er basert på forrige måneds liste med knapper. For at verdien skal bli\n // riktig i vår nye måned må vi trekke fra anntal dager fra forrige måned.\n if (newButtons[newNodeKey - buttons.length]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newNodeKey - buttons.length],\n );\n }\n }\n }\n });\n },\n [\n handleOffsetChanged,\n calendarPaddingRef,\n offset,\n calendars,\n maxDate,\n minDate,\n ],\n );\n\n const handleArrowNavigation = useCallback(\n (event: React.KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowUp\":\n doFocusChange(-7);\n event.preventDefault();\n break;\n case \"ArrowRight\":\n doFocusChange(1);\n event.preventDefault();\n break;\n case \"ArrowDown\":\n doFocusChange(7);\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n doFocusChange(-1);\n event.preventDefault();\n break;\n default:\n break;\n }\n },\n [doFocusChange],\n );\n\n const handleTabInside: React.KeyboardEventHandler = useCallback(\n (event) => {\n if (event.key !== \"Tab\") return;\n\n const focusableElements =\n calendarPaddingRef.current?.querySelectorAll<HTMLElement>(\n 'button:not([disabled]):not([tabindex=\"-1\"]), select',\n );\n\n if (!focusableElements) return;\n\n const firstElement = focusableElements[0];\n const lastElement =\n focusableElements[focusableElements.length - 1];\n\n if (!event.shiftKey && document.activeElement === lastElement) {\n firstElement.focus();\n event.preventDefault();\n } else if (\n event.shiftKey &&\n document.activeElement === firstElement\n ) {\n lastElement.focus();\n event.preventDefault();\n }\n },\n [],\n );\n\n const isFocusableDate = useCallback(\n (dateInfo: DateInfo) => {\n const { date, selected, selectable, prevMonth, nextMonth } =\n dateInfo;\n\n // Datoen kan ikke velges\n if (!selectable) {\n return false;\n }\n // Datoen er valgt dato\n if (selected) {\n return true;\n }\n // Datoen er første valgbare dato\n if (date.toString() === minDate?.toString()) {\n return true;\n }\n\n // Datoen er første i måneden som vises\n if (\n !prevMonth &&\n !nextMonth &&\n shownDate.getFullYear() === date.getFullYear() &&\n selectedDate.getMonth() !== date.getMonth() &&\n date.getDate() === 1\n ) {\n return true;\n }\n\n return false;\n },\n [shownDate, minDate, selectedDate],\n );\n\n const handleGotoEdgeMonth = useCallback(() => {\n if (\n // Vi er i ferd med å gå til første måned\n minDate &&\n shownDate.getFullYear() - minDate.getFullYear() === 0 &&\n shownDate.getMonth() - minDate.getMonth() === 1\n ) {\n // Fokuser på \"neste månded\"-knappen\n document\n .querySelectorAll<HTMLButtonElement>(\n \".jkl-calendar-navigation__arrow\",\n )[1]\n .focus();\n } else if (\n // Vi er i ferd med å gå til siste måned\n maxDate &&\n maxDate.getFullYear() - shownDate.getFullYear() === 0 &&\n maxDate.getMonth() - shownDate.getMonth() === 1\n ) {\n // Fokuser på \"forrige månded\"-knappen\n document\n .querySelectorAll<HTMLButtonElement>(\n \".jkl-calendar-navigation__arrow\",\n )[0]\n .focus();\n }\n }, [minDate, maxDate, shownDate]);\n\n /// Extended variant events\n\n const handleYearChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (event.target.value.length !== 4) {\n return;\n }\n\n const year: number = Number.parseInt(event.target.value);\n if (Number.isNaN(year)) {\n return;\n }\n\n let offset = (year - shownDate.getFullYear()) * 12;\n const expectedDate = new Date(\n shownDate.getFullYear(),\n shownDate.getMonth() + offset,\n shownDate.getDate(),\n );\n\n // Pass på at vi ikke hopper forbi maks. eller min. dato\n if (\n maxDate &&\n maxDate.getFullYear() === expectedDate.getFullYear() &&\n maxDate.getMonth() < expectedDate.getMonth()\n ) {\n offset -= expectedDate.getMonth() - maxDate.getMonth();\n } else if (\n minDate &&\n minDate.getFullYear() === expectedDate.getFullYear() &&\n minDate.getMonth() > expectedDate.getMonth()\n ) {\n offset += minDate.getMonth() - expectedDate.getMonth();\n }\n\n dispatch({\n type: \"ADD_OFFSET\",\n addedOffset: offset,\n });\n\n return;\n },\n [shownDate, minDate, maxDate],\n );\n\n const handleMonthChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (!selectedDate && !date) {\n return;\n }\n\n const yearDiff =\n shownDate.getFullYear() -\n (selectedDate || new Date()).getFullYear();\n const monthDiff =\n Number.parseInt(event.target.value) -\n (selectedDate || new Date()).getMonth();\n\n dispatch({\n type: \"SET_OFFSET\",\n newOffset: yearDiff * 12 + monthDiff,\n });\n\n return;\n },\n [selectedDate, date, shownDate],\n );\n\n const yearSelectOptions = getYearSelectOptions(\n shownYear,\n minDate,\n maxDate,\n yearsToShow,\n );\n const monthSelectOptions = getMonthSelectOptions(\n shownYear,\n months,\n minDate,\n maxDate,\n );\n\n return (\n <div\n ref={ref}\n id={id}\n className=\"jkl-calendar\"\n data-testid=\"jkl-calendar\"\n >\n {/* Vi lytter på på trykk på Tab inne i kalenderen for å håndtere fokus */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n className=\"jkl-calendar__padding\"\n ref={calendarPaddingRef}\n onKeyDown={handleTabInside}\n >\n <fieldset className=\"jkl-calendar-navigation\">\n <div>\n <Button\n {...getBackProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n variant=\"ghost\"\n icon={<ArrowLeftIcon variant=\"medium\" bold />}\n />\n <Button\n {...getForwardProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n variant=\"ghost\"\n icon={<ArrowRightIcon variant=\"medium\" bold />}\n />\n </div>\n <div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleMonthChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={monthLabel}\n value={shownMonth.toString()}\n >\n {monthSelectOptions.map(\n ({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ),\n )}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleYearChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={yearLabel}\n value={shownYear.toString()}\n >\n {yearSelectOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n </div>\n </fieldset>\n {calendars.map((calendar) => (\n <table\n className=\"jkl-calendar-table\"\n key={`${calendar.month}${calendar.year}`}\n data-testid=\"jkl-datepicker-calendar\"\n >\n <caption className=\"jkl-sr-only\">\n {months[calendar.month]}, {calendar.year}\n </caption>\n <thead>\n <tr>\n {days.map((weekday) => (\n <th\n key={`${calendar.month}${calendar.year}${weekday}`}\n >\n {weekday}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-testid=\"jkl-datepicker-dates\">\n {calendar.weeks.map((week, weekIndex) => (\n <tr\n key={`${calendar.month}${calendar.year}${weekIndex}`}\n >\n {week.map((dateInfo, index) => {\n const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;\n if (typeof dateInfo === \"string\") {\n return (\n <td\n className=\"jkl-calendar__date jkl-calendar__date--empty\"\n key={key}\n >\n {dateInfo}\n </td>\n );\n }\n const {\n date,\n selectable,\n today,\n prevMonth,\n nextMonth,\n } = dateInfo;\n\n return (\n <td key={key}>\n <button\n {...getDateProps({\n dateObj: dateInfo,\n })}\n type=\"button\"\n className=\"jkl-calendar-date-button\"\n tabIndex={\n isFocusableDate(\n dateInfo,\n )\n ? 0\n : -1\n }\n aria-label={`${date.getDate()}. ${months[\n date.getMonth()\n ].toLowerCase()}`}\n aria-current={\n today\n ? \"date\"\n : undefined\n }\n data-adjacent={\n prevMonth ||\n nextMonth\n ? \"true\"\n : undefined\n }\n disabled={!selectable}\n onKeyDown={\n handleArrowNavigation\n }\n >\n <span aria-hidden=\"true\">\n {date.getDate()}\n </span>\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n ))}\n </div>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n"],"names":["defaultMonths","defaultDays","Calendar","forwardRef","props","ref","date","defaultSelected","density","minDate","maxDate","days","months","monthLabel","yearLabel","yearsToShow","DEFAULT_YEARS_TO_SHOW","onTabOutside","rest","id","useId","offset","selectedDate","shownDate","dispatch","useReducer","calendarReducer","getInitialDateShown","calendarInitializer","shownMonth","getMonth","shownYear","getFullYear","useEffect","type","newDate","onOffsetChanged","useCallback","newOffset","calendars","getBackProps","getDateProps","getForwardProps","handleOffsetChanged","useCalendar","selected","firstDayOfWeek","calendarPaddingRef","useRef","doFocusChange","offsetDiff","current","e","document","activeElement","buttons","querySelectorAll","changeFocusTo","async","setAttribute","nextButton","focus","forEach","el","i","newNodeKey","length","isBackDisabled","flushSync","subtractMonth","newButtons","isForwardDisabled","addMonth","handleArrowNavigation","event","key","preventDefault","handleTabInside","focusableElements","_a","firstElement","lastElement","shiftKey","isFocusableDate","dateInfo","selectable","prevMonth","nextMonth","toString","getDate","handleGotoEdgeMonth","handleYearChange","target","value","year","Number","parseInt","isNaN","expectedDate","Date","addedOffset","handleMonthChange","yearDiff","monthDiff","yearSelectOptions","getYearSelectOptions","monthSelectOptions","getMonthSelectOptions","jsx","className","children","jsxs","onKeyDown","Button","onClick","variant","icon","ArrowLeftIcon","bold","ArrowRightIcon","onChange","map","label","ChevronDownIcon","calendar","month","weekday","weeks","week","weekIndex","index","today","dateObj","tabIndex","toLowerCase","disabled","displayName"],"mappings":"8dA6CMA,EAAgB,CAClB,SACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAGEC,EAAc,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAElDC,EAAWC,EAAAA,YACpB,CAACC,EAAOC,KACE,MACFC,KAAAA,EACAC,gBAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAC,KAAAA,EAAOV,EACPW,OAAAA,EAASZ,EACTa,WAAAA,EAAa,aACbC,UAAAA,EAAY,UACZC,YAAAA,EAAcC,EAAAA,sBACdC,aAAAA,KACGC,GACHd,EAEEe,EAAKC,QAAM,kBAERC,OAAAA,EAAQC,aAAAA,EAAcC,UAAAA,GAAaC,GAAYC,EAAAA,WACpDC,EAAAA,gBACAC,EAAAA,oBAAoBrB,EAAMC,EAAiBE,EAASC,GACpDkB,EAAAA,qBAGEC,EAAaN,EAAUO,WACvBC,EAAYR,EAAUS,cAE5BC,EAAAA,WAAU,KACGT,EAAA,CACLU,KAAM,oBACNC,QAASR,EAAAA,oBACLrB,EACAC,EACAE,EACAC,IAEP,GACF,CAACJ,EAAMC,EAAiBE,EAASC,IAE9B,MAAA0B,EAAkBC,eAAaC,IACxBd,EAAA,CACLU,KAAM,aACNI,UAAAA,GACH,GACF,KAGCC,UAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,gBAAAA,EACAC,oBAAAA,GACAC,cAAY,CACZtC,KAAMgB,EACNuB,SAAUvB,EACVb,QAAAA,EACAC,QAAAA,EACAW,OAAAA,EACAe,gBAAAA,EACAU,eAAgB,KACb5B,IAKD6B,EAAqBC,SAAuB,MAC5CC,EAAgBZ,EAAAA,aACjBa,IACO,IAACH,EAAmBI,QACpB,OAGJ,MAAMC,EAAIC,SAASC,cACbC,EACFR,EAAmBI,QAAQK,iBACvB,8DAGFC,EAAgBC,UACf,MAAAN,GAAAA,EAAAO,aAAa,WAAY,MACjBC,EAAAD,aAAa,WAAY,KACpCC,EAAWC,OAAM,EAGbN,EAAAO,SAAQ,CAACC,EAAIC,KACjB,MAAMC,EAAaD,EAAId,EAEvB,GAAIa,GAAMX,EACN,GACIa,GAAcV,EAAQW,OAAS,GAC/BD,GAAc,EAEAR,EAAAF,EAAQU,YACff,EAAa,EAAG,CAkBnB,GAjBAiB,iBAAe,CAAE5B,UAAAA,EAAW9B,QAAAA,MAOhC2D,EAAAA,WAAU,KACNzB,EACItB,EACIgD,EAAAA,cAAc,CACV9B,UAAAA,EACAlB,OAAQ,EACRZ,QAAAA,IACH,KAGRsC,EAAmBI,SACpB,OAEE,MAAAmB,EACFvB,EAAmBI,QAAQK,iBACvB,8DAGJc,EAAWA,EAAWJ,OAASD,KAE/BK,EAAW,GAAGX,aAAa,WAAY,MACvCF,EACIa,EAAWA,EAAWJ,OAASD,IAEvC,KACG,CAkBC,GAjBAM,oBAAkB,CAAEhC,UAAAA,EAAW7B,QAAAA,MAOnC0D,EAAAA,WAAU,KACNzB,EACItB,EACImD,EAAAA,SAAS,CACLjC,UAAAA,EACAlB,OAAQ,EACRX,QAAAA,IACH,KAGRqC,EAAmBI,SACpB,OAEE,MAAAmB,EACFvB,EAAmBI,QAAQK,iBACvB,8DAIJc,EAAWL,EAAaV,EAAQW,UAEhCI,EAAW,GAAGX,aAAa,WAAY,MACvCF,EACIa,EAAWL,EAAaV,EAAQW,SAG5C,IAEP,GAEL,CACIvB,EACAI,EACA1B,EACAkB,EACA7B,EACAD,IAIFgE,EAAwBpC,EAAAA,aACzBqC,IACG,OAAQA,EAAMC,KACV,IAAK,UACD1B,GAAc,GACdyB,EAAME,iBACN,MACJ,IAAK,aACD3B,EAAc,GACdyB,EAAME,iBACN,MACJ,IAAK,YACD3B,EAAc,GACdyB,EAAME,iBACN,MACJ,IAAK,YACD3B,GAAgB,GAChByB,EAAME,iBAId,GAEJ,CAAC3B,IAGC4B,EAA8CxC,EAAAA,aAC/CqC,UACO,GAAc,QAAdA,EAAMC,IAAe,OAEnB,MAAAG,EACF,OAAAC,EAAAhC,EAAmBI,cAAnB4B,EAAAA,EAA4BvB,iBACxB,uDAGR,IAAKsB,EAAmB,OAElB,MAAAE,EAAeF,EAAkB,GACjCG,EACFH,EAAkBA,EAAkBZ,OAAS,GAE5CQ,EAAMQ,UAAY7B,SAASC,gBAAkB2B,EAI9CP,EAAMQ,UACN7B,SAASC,gBAAkB0B,IAE3BC,EAAYpB,QACZa,EAAME,mBAPNI,EAAanB,QACba,EAAME,iBAQd,GACA,IAGEO,EAAkB9C,EAAAA,aACnB+C,IACG,MAAQ9E,KAAAA,EAAMuC,SAAAA,EAAUwC,WAAAA,EAAYC,UAAAA,EAAWC,UAAAA,GAC3CH,EAGJ,QAAKC,MAIDxC,GAIAvC,EAAKkF,cAAe,MAAA/E,OAAA,EAAAA,EAAS+E,cAM5BF,GACAC,GACDhE,EAAUS,gBAAkB1B,EAAK0B,eACjCV,EAAaQ,aAAexB,EAAKwB,YACd,IAAnBxB,EAAKmF,cAOb,CAAClE,EAAWd,EAASa,IAGnBoE,EAAsBrD,EAAAA,aAAY,KAGhC5B,GACAc,EAAUS,cAAgBvB,EAAQuB,eAAkB,GACpDT,EAAUO,WAAarB,EAAQqB,YAAe,EAIzCuB,SAAAG,iBACG,mCACF,GACDK,QAGLnD,GACAA,EAAQsB,cAAgBT,EAAUS,eAAkB,GACpDtB,EAAQoB,WAAaP,EAAUO,YAAe,GAIzCuB,SAAAG,iBACG,mCACF,GACDK,UAEV,CAACpD,EAASC,EAASa,IAIhBoE,EAAmBtD,EAAAA,aAGpBqC,IACG,GAAkC,IAA9BA,EAAMkB,OAAOC,MAAM3B,OACnB,OAGJ,MAAM4B,EAAeC,OAAOC,SAAStB,EAAMkB,OAAOC,OAC9C,GAAAE,OAAOE,MAAMH,GACb,OAGJ,IAAIzE,EAA4C,IAAlCyE,EAAOvE,EAAUS,eAC/B,MAAMkE,EAAe,IAAIC,KACrB5E,EAAUS,cACVT,EAAUO,WAAaT,EACvBE,EAAUkE,WAKV/E,GACAA,EAAQsB,gBAAkBkE,EAAalE,eACvCtB,EAAQoB,WAAaoE,EAAapE,WAElCT,GAAU6E,EAAapE,WAAapB,EAAQoB,WAE5CrB,GACAA,EAAQuB,gBAAkBkE,EAAalE,eACvCvB,EAAQqB,WAAaoE,EAAapE,aAElCT,GAAUZ,EAAQqB,WAAaoE,EAAapE,YAGvCN,EAAA,CACLU,KAAM,aACNkE,YAAa/E,GAChB,GAIL,CAACE,EAAWd,EAASC,IAGnB2F,EAAoBhE,EAAAA,aAGrBqC,IACO,IAACpD,IAAiBhB,EAClB,OAGE,MAAAgG,EACF/E,EAAUS,eACTV,GAAoB,IAAA6E,MAAQnE,cAC3BuE,EACFR,OAAOC,SAAStB,EAAMkB,OAAOC,QAC5BvE,GAAgB,IAAI6E,MAAQrE,WAExBN,EAAA,CACLU,KAAM,aACNI,UAAsB,GAAXgE,EAAgBC,GAC9B,GAIL,CAACjF,EAAchB,EAAMiB,IAGnBiF,EAAoBC,EAAAA,qBACtB1E,EACAtB,EACAC,EACAK,GAEE2F,EAAqBC,EAAAA,sBACvB5E,EACAnB,EACAH,EACAC,GAIA,OAAAkG,EAAAA,IAAC,MAAA,CACGvG,IAAAA,EACAc,GAAAA,EACA0F,UAAU,eACV,cAAY,eAIZC,SAAAC,EAAAA,KAAC,MAAA,CACGF,UAAU,wBACVxG,IAAK0C,EACLiE,UAAWnC,EAEXiC,SAAA,CAACC,EAAAA,KAAA,WAAA,CAASF,UAAU,0BAChBC,SAAA,CAAAC,OAAC,MACG,CAAAD,SAAA,CAAAF,EAAAA,IAACK,EAAAA,OAAA,IACOzE,EAAa,CACbD,UAAAA,EACA2E,QAASxB,IAEbyB,QAAQ,QACRC,KAAOR,EAAAA,IAAAS,gBAAA,CAAcF,QAAQ,SAASG,MAAI,MAE9CV,EAAAA,IAACK,EAAAA,OAAA,IACOvE,EAAgB,CAChBH,UAAAA,EACA2E,QAASxB,IAEbyB,QAAQ,QACRC,KAAOR,EAAAA,IAAAW,iBAAA,CAAeJ,QAAQ,SAASG,MAAI,gBAGlD,MACG,CAAAR,SAAA,CAACC,EAAAA,KAAA,MAAA,CAAIF,UAAU,mCACXC,SAAA,CAAAF,EAAAA,IAAC,SAAA,CACGY,SAAUnB,EACVQ,UAAU,2CACV,aAAYhG,EACZgF,MAAOhE,EAAW2D,WAEjBsB,SAAmBJ,EAAAe,KAChB,EAAGC,MAAAA,EAAO7B,MAAAA,KACLe,MAAA,SAAA,CAAmBf,MAAAA,EACfiB,SAAAY,GADQ7B,OAMzBe,EAAAA,IAACe,EAAAA,gBAAA,CACGL,MAAI,EACJT,UAAU,iDAGlBE,EAAAA,KAAC,MAAI,CAAAF,UAAU,mCACXC,SAAA,CAAAF,EAAAA,IAAC,SAAA,CACGY,SAAU7B,EACVkB,UAAU,2CACV,aAAY/F,EACZ+E,MAAO9D,EAAUyD,WAEhBsB,SAAAN,EAAkBiB,KAAK3B,GACpBc,EAAAA,IAAC,UAAkBf,MAAOC,EACrBgB,SADQhB,GAAAA,OAKrBc,EAAAA,IAACe,EAAAA,gBAAA,CACGL,MAAI,EACJT,UAAU,uDAKzBtE,EAAUkF,KAAKG,GACZb,EAAAA,KAAC,QAAA,CACGF,UAAU,qBAEV,cAAY,0BAEZC,SAAA,CAACC,EAAAA,KAAA,UAAA,CAAQF,UAAU,cACdC,SAAA,CAAAlG,EAAOgH,EAASC,OAAO,KAAGD,EAAS9B,cAEvC,QACG,CAAAgB,SAAAF,MAAC,MACIE,SAAKnG,EAAA8G,KAAKK,GACPlB,EAAAA,IAAC,KAAA,CAGIE,SAAAgB,GAFI,GAAGF,EAASC,QAAQD,EAAS9B,OAAOgC,WAOzDlB,EAAAA,IAAC,SAAM,cAAY,uBACdE,WAASiB,MAAMN,KAAI,CAACO,EAAMC,IACvBrB,EAAAA,IAAC,KAAA,CAGIE,SAAKkB,EAAAP,KAAI,CAACrC,EAAU8C,KACX,MAAAvD,EAAM,GAAGiD,EAASC,QAAQD,EAAS9B,OAAOmC,IAAYC,IACxD,GAAoB,iBAAb9C,EAEH,OAAAwB,EAAAA,IAAC,KAAA,CACGC,UAAU,+CAGTC,SAAA1B,GAFIT,GAMX,MACFrE,KAAAA,EACA+E,WAAAA,EACA8C,MAAAA,EACA7C,UAAAA,EACAC,UAAAA,GACAH,EAEJ,aACK,KACG,CAAA0B,SAAAF,EAAAA,IAAC,SAAA,IACOnE,EAAa,CACb2F,QAAShD,IAEblD,KAAK,SACL2E,UAAU,2BACVwB,SACIlD,EACIC,GAEE,GACA,EAEV,aAAY,GAAG9E,EAAKmF,cAAc7E,EAC9BN,EAAKwB,YACPwG,gBACF,eACIH,EACM,YACA,EAEV,gBACI7C,GACAC,EACM,YACA,EAEVgD,UAAWlD,EACX2B,UACIvC,EAGJqC,eAAC,OAAK,CAAA,cAAY,OACbA,SAAAxG,EAAKmF,eAlCTd,EAqCT,KA5DH,GAAGiD,EAASC,QAAQD,EAAS9B,OAAOmC,WApBhD,GAAGL,EAASC,QAAQD,EAAS9B,cAwF9C,IAMhB5F,EAASsI,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");;/* empty css */const t=require("../skeletons/SkeletonAnimation.cjs"),n=require("../skeletons/SkeletonButton.cjs"),o=require("../skeletons/SkeletonCheckboxGroup.cjs"),l=require("../skeletons/SkeletonElement.cjs"),s=require("../skeletons/SkeletonInput.cjs"),r=require("../skeletons/SkeletonRadioButtonGroup.cjs"),i=require("../skeletons/SkeletonTable.cjs"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");;/* empty css */const t=require("../skeletons/SkeletonAnimation.cjs"),n=require("../skeletons/SkeletonButton.cjs"),o=require("../skeletons/SkeletonCheckboxGroup.cjs"),l=require("../skeletons/SkeletonElement.cjs"),s=require("../skeletons/SkeletonInput.cjs"),r=require("../skeletons/SkeletonRadioButtonGroup.cjs"),i=require("../skeletons/SkeletonTable.cjs"),k=require("../skeletons/SkeletonTextArea.cjs"),d={title:"Komponenter/Loader/SkeletonTable",component:i.SkeletonTable,subcomponents:{SkeletonElement:l.SkeletonElement,SkeletonTableHeader:i.SkeletonTableHeader},argTypes:{width:{control:"number"}},tags:["autodocs"]},a={name:"Skeleton",args:{children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:40},children:[e.jsx(l.SkeletonElement,{width:350,height:32}),e.jsx(s.SkeletonInput,{}),e.jsx(k.SkeletonTextArea,{}),e.jsx(o.SkeletonCheckboxGroup,{checkboxes:3}),e.jsx(r.SkeletonRadioButtonGroup,{radioButtons:3}),e.jsx(n.SkeletonButton,{width:225}),e.jsxs(i.SkeletonTable,{children:[e.jsxs(i.SkeletonTableHeader,{children:[e.jsx("div",{style:{width:215},children:e.jsx(l.SkeletonElement,{width:115,height:16})}),e.jsx("div",{style:{width:115},children:e.jsx(l.SkeletonElement,{width:115,height:16})})]}),Array.from(Array(5)).map(((t,n)=>e.jsxs(i.SkeletonTableRow,{children:[e.jsx("div",{style:{width:215},children:e.jsx(l.SkeletonElement,{width:n%2?115:185,height:19})}),e.jsx("div",{style:{width:115},children:e.jsx(l.SkeletonElement,{width:24,height:24,shape:"circle"})})]},n)))]})]})},render:n=>e.jsx(t.SkeletonAnimation,{...n,role:"none presentation"})};exports.SkeletonStory=a,exports.default=d;
|
|
2
2
|
//# sourceMappingURL=Skeleton.stories.cjs.map
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("@floating-ui/react"),
|
|
2
|
-
/**
|
|
3
|
-
* @license React
|
|
4
|
-
* react-is.production.min.js
|
|
5
|
-
*
|
|
6
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
7
|
-
*
|
|
8
|
-
* This source code is licensed under the MIT license found in the
|
|
9
|
-
* LICENSE file in the root directory of this source tree.
|
|
10
|
-
*/var f,d={};
|
|
11
|
-
/**
|
|
12
|
-
* @license React
|
|
13
|
-
* react-is.development.js
|
|
14
|
-
*
|
|
15
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
16
|
-
*
|
|
17
|
-
* This source code is licensed under the MIT license found in the
|
|
18
|
-
* LICENSE file in the root directory of this source tree.
|
|
19
|
-
*/"production"===process.env.NODE_ENV?u.exports=function(){if(c)return l;c=1;var e,t=Symbol.for("react.element"),r=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),a=Symbol.for("react.context"),u=Symbol.for("react.server_context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),m=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),b=Symbol.for("react.offscreen");function S(e){if("object"==typeof e&&null!==e){var c=e.$$typeof;switch(c){case t:switch(e=e.type){case n:case s:case o:case d:case p:return e;default:switch(e=e&&e.$$typeof){case u:case a:case f:case y:case m:case i:return e;default:return c}}case r:return c}}}return e=Symbol.for("react.module.reference"),l.ContextConsumer=a,l.ContextProvider=i,l.Element=t,l.ForwardRef=f,l.Fragment=n,l.Lazy=y,l.Memo=m,l.Portal=r,l.Profiler=s,l.StrictMode=o,l.Suspense=d,l.SuspenseList=p,l.isAsyncMode=function(){return!1},l.isConcurrentMode=function(){return!1},l.isContextConsumer=function(e){return S(e)===a},l.isContextProvider=function(e){return S(e)===i},l.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},l.isForwardRef=function(e){return S(e)===f},l.isFragment=function(e){return S(e)===n},l.isLazy=function(e){return S(e)===y},l.isMemo=function(e){return S(e)===m},l.isPortal=function(e){return S(e)===r},l.isProfiler=function(e){return S(e)===s},l.isStrictMode=function(e){return S(e)===o},l.isSuspense=function(e){return S(e)===d},l.isSuspenseList=function(e){return S(e)===p},l.isValidElementType=function(t){return"string"==typeof t||"function"==typeof t||t===n||t===s||t===o||t===d||t===p||t===b||"object"==typeof t&&null!==t&&(t.$$typeof===y||t.$$typeof===m||t.$$typeof===i||t.$$typeof===a||t.$$typeof===f||t.$$typeof===e||void 0!==t.getModuleId)},l.typeOf=S,l}():u.exports=(f||(f=1,"production"!==process.env.NODE_ENV&&function(){var e,t=Symbol.for("react.element"),r=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),a=Symbol.for("react.context"),c=Symbol.for("react.server_context"),u=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),y=Symbol.for("react.offscreen");function b(e){if("object"==typeof e&&null!==e){var d=e.$$typeof;switch(d){case t:var y=e.type;switch(y){case n:case s:case o:case l:case f:return y;default:var b=y&&y.$$typeof;switch(b){case c:case a:case u:case m:case p:case i:return b;default:return d}}case r:return d}}}e=Symbol.for("react.module.reference");var S=a,v=i,g=t,x=u,$=n,h=m,w=p,P=r,M=s,j=o,C=l,F=f,E=!1,R=!1;d.ContextConsumer=S,d.ContextProvider=v,d.Element=g,d.ForwardRef=x,d.Fragment=$,d.Lazy=h,d.Memo=w,d.Portal=P,d.Profiler=M,d.StrictMode=j,d.Suspense=C,d.SuspenseList=F,d.isAsyncMode=function(e){return E||(E=!0,console.warn("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 18+.")),!1},d.isConcurrentMode=function(e){return R||(R=!0,console.warn("The ReactIs.isConcurrentMode() alias has been deprecated, and will be removed in React 18+.")),!1},d.isContextConsumer=function(e){return b(e)===a},d.isContextProvider=function(e){return b(e)===i},d.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===t},d.isForwardRef=function(e){return b(e)===u},d.isFragment=function(e){return b(e)===n},d.isLazy=function(e){return b(e)===m},d.isMemo=function(e){return b(e)===p},d.isPortal=function(e){return b(e)===r},d.isProfiler=function(e){return b(e)===s},d.isStrictMode=function(e){return b(e)===o},d.isSuspense=function(e){return b(e)===l},d.isSuspenseList=function(e){return b(e)===f},d.isValidElementType=function(t){return!("string"!=typeof t&&"function"!=typeof t&&t!==n&&t!==s&&t!==o&&t!==l&&t!==f&&t!==y&&("object"!=typeof t||null===t||t.$$typeof!==m&&t.$$typeof!==p&&t.$$typeof!==i&&t.$$typeof!==a&&t.$$typeof!==u&&t.$$typeof!==e&&void 0===t.getModuleId))},d.typeOf=b}()),d);var p=u.exports;function m(e,t=0){switch(e){case"top":default:return`0 ${t}px`;case"left":return`${t}px 0`;case"bottom":return`0 ${-t}px`;case"right":return-t+"px 0"}}const y=n.forwardRef(((c,u)=>{const{children:l,className:f,initialPlacement:d,openOnHover:y=!1,keepOpenOnClickOutside:b=!1,triggerElement:S,isOpen:v,onToggle:g,...x}=c,$=s.useId("jkl-menu"),{prefersReducedMotion:h}=o.useBrowserPreferences(),w=t.useFloatingTree(),P=t.useFloatingNodeId(),M=t.useFloatingParentNodeId(),j=null!=M,C=n.useRef([]),[F,E]=n.useState(null),{allowHover:R,isOpen:k,setIsOpen:I}=a.useMenuWideEvents(w,P,M),N=void 0!==v?v:k;n.useEffect((()=>null==g?void 0:g(N)),[N,g]);const{refs:O,placement:T,context:q,floatingStyles:_}=t.useFloating({nodeId:P,open:N,onOpenChange:I,placement:d||(j?"right-start":"bottom-start"),middleware:[t.offset(2),t.flip({fallbackAxisSideDirection:"end",crossAxis:!1}),t.shift({padding:8})],whileElementsMounted:t.autoUpdate}),{getReferenceProps:L,getFloatingProps:D,getItemProps:A}=t.useInteractions([t.useHover(q,{enabled:y&&R,delay:{open:75},handleClose:t.safePolygon({requireIntent:!0,blockPointerEvents:!0})}),t.useClick(q,{event:"mousedown"}),t.useDismiss(q,{outsidePress:!b}),t.useRole(q,{role:"menu"}),t.useListNavigation(q,{listRef:C,activeIndex:F,nested:j,onNavigate:E})]),z=t.useMergeRefs([O.setReference,u]),{theme:V,density:B}=i.getThemeAndDensity(O.reference.current),{isMounted:H,styles:K}=t.useTransitionStyles(q,{duration:{open:h?0:250,close:h?0:150},initial:({side:e})=>({opacity:0,translate:m(e,5)}),open:({side:e})=>({opacity:1,translate:m(e,0)}),close:({side:e})=>({opacity:0,translate:m(e,5)})});return e.jsxs(t.FloatingNode,{id:P,children:[n.isValidElement(S)&&("button"===S.type||p.isForwardRef(S))?n.cloneElement(S,{...L({...x,ref:z,role:j?"menuitem":void 0,"aria-controls":$,onClick(e){e.stopPropagation()}})}):S,H&&e.jsx(t.FloatingPortal,{children:e.jsx(t.FloatingFocusManager,{context:q,modal:!1,initialFocus:j?-1:0,returnFocus:!j,children:e.jsx("div",{className:r.clsx("jkl jkl-menu",f),"data-theme":V,"data-layout-density":B,role:"menu","data-placement":T,"aria-live":"assertive","aria-hidden":!N,ref:O.setFloating,...D({id:$,style:{..._,...K}}),children:n.Children.map(l,((e,t)=>n.isValidElement(e)&&p.isForwardRef(e)?n.cloneElement(e,A({...e.props,tabIndex:F===t?0:-1,role:"menuitem",ref(e){C.current[t]=e},onClick(t){var r,n;null==(n=(r=e.props).onClick)||n.call(r,t),!t.defaultPrevented&&(null==w||w.events.emit("click"))},onKeyDown(t){var r,n;null==(n=(r=e.props).onKeyDown)||n.call(r,t),!t.defaultPrevented&&(null==w||w.events.emit("keydown"),"menuitemcheckbox"===t.currentTarget.role&&"Enter"===t.key&&I(!1))},onMouseEnter(){R&&N&&E(t)}})):e))})})})]})}));y.displayName="MenuComponent";const b=n.forwardRef(((r,n)=>null===t.useFloatingParentNodeId()?e.jsx(t.FloatingTree,{children:e.jsx(y,{ref:n,...r})}):e.jsx(y,{ref:n,...r})));b.displayName="Menu",exports.Menu=b;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("@floating-ui/react"),n=require("../../../clsx-E3yX_9sL.cjs"),s=require("react"),r=require("../../../index-ZdY5zxEI.cjs"),o=require("../../hooks/useBrowserPreferences/useBrowserPreferences.cjs");require("../../hooks/useScreen/useScreen.cjs");const i=require("../../hooks/useId/useId.cjs"),l=require("../../utilities/getThemeAndDensity.cjs"),a=require("./useMenuWideEvents.cjs");function u(e,t=0){switch(e){case"top":default:return`0 ${t}px`;case"left":return`${t}px 0`;case"bottom":return`0 ${-t}px`;case"right":return-t+"px 0"}}const c=s.forwardRef(((c,d)=>{const{children:p,className:m,initialPlacement:f,openOnHover:g=!1,keepOpenOnClickOutside:x=!1,triggerElement:h,isOpen:v,onToggle:y,...j}=c,k=i.useId("jkl-menu"),{prefersReducedMotion:P}=o.useBrowserPreferences(),F=t.useFloatingTree(),w=t.useFloatingNodeId(),I=t.useFloatingParentNodeId(),E=null!=I,M=s.useRef([]),[q,R]=s.useState(null),{allowHover:b,isOpen:N,setIsOpen:C}=a.useMenuWideEvents(F,w,I),O=void 0!==v?v:N;s.useEffect((()=>null==y?void 0:y(O)),[O,y]);const{refs:S,placement:T,context:D,floatingStyles:A}=t.useFloating({nodeId:w,open:O,onOpenChange:C,placement:f||(E?"right-start":"bottom-start"),middleware:[t.offset(2),t.flip({fallbackAxisSideDirection:"end",crossAxis:!1}),t.shift({padding:8})],whileElementsMounted:t.autoUpdate}),{getReferenceProps:B,getFloatingProps:H,getItemProps:$}=t.useInteractions([t.useHover(D,{enabled:g&&b,delay:{open:75},handleClose:t.safePolygon({requireIntent:!0,blockPointerEvents:!0})}),t.useClick(D,{event:"mousedown"}),t.useDismiss(D,{outsidePress:!x}),t.useRole(D,{role:"menu"}),t.useListNavigation(D,{listRef:M,activeIndex:q,nested:E,onNavigate:R})]),K=t.useMergeRefs([S.setReference,d]),{theme:V,density:W}=l.getThemeAndDensity(S.reference.current),{isMounted:L,styles:U}=t.useTransitionStyles(D,{duration:{open:P?0:250,close:P?0:150},initial:({side:e})=>({opacity:0,translate:u(e,5)}),open:({side:e})=>({opacity:1,translate:u(e,0)}),close:({side:e})=>({opacity:0,translate:u(e,5)})});return e.jsxs(t.FloatingNode,{id:w,children:[s.isValidElement(h)&&("button"===h.type||r.reactIsExports.isForwardRef(h))?s.cloneElement(h,{...B({...j,ref:K,role:E?"menuitem":void 0,"aria-controls":k,onClick(e){e.stopPropagation()}})}):h,L&&e.jsx(t.FloatingPortal,{children:e.jsx(t.FloatingFocusManager,{context:D,modal:!1,initialFocus:E?-1:0,returnFocus:!E,children:e.jsx("div",{className:n.clsx("jkl jkl-menu",m),"data-theme":V,"data-layout-density":W,role:"menu","data-placement":T,"aria-live":"assertive","aria-hidden":!O,ref:S.setFloating,...H({id:k,style:{...A,...U}}),children:s.Children.map(p,((e,t)=>s.isValidElement(e)&&r.reactIsExports.isForwardRef(e)?s.cloneElement(e,$({...e.props,tabIndex:q===t?0:-1,role:"menuitem",ref(e){M.current[t]=e},onClick(t){var n,s;null==(s=(n=e.props).onClick)||s.call(n,t),!t.defaultPrevented&&(null==F||F.events.emit("click"))},onKeyDown(t){var n,s;null==(s=(n=e.props).onKeyDown)||s.call(n,t),!t.defaultPrevented&&(null==F||F.events.emit("keydown"),"menuitemcheckbox"===t.currentTarget.role&&"Enter"===t.key&&C(!1))},onMouseEnter(){b&&O&&R(t)}})):e))})})})]})}));c.displayName="MenuComponent";const d=s.forwardRef(((n,s)=>null===t.useFloatingParentNodeId()?e.jsx(t.FloatingTree,{children:e.jsx(c,{ref:s,...n})}):e.jsx(c,{ref:s,...n})));d.displayName="Menu",exports.Menu=d;
|
|
20
2
|
//# sourceMappingURL=Menu.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.cjs","sources":["../../../../../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/index.js","../../../../../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/cjs/react-is.production.min.js","../../../../../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/cjs/react-is.development.js","../../../../src/components/menu/Menu.tsx"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n safePolygon,\n shift,\n Side,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { isForwardRef } from \"react-is\";\nimport { useBrowserPreferences } from \"../../hooks/index.js\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { getThemeAndDensity } from \"../../utilities/getThemeAndDensity.js\";\nimport { MenuProps } from \"./types.js\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents.js\";\n\nfunction getTranslation(side: Side, value: number = 0) {\n switch (side) {\n case \"top\":\n return `0 ${value}px`;\n case \"left\":\n return `${value}px 0`;\n case \"bottom\":\n return `0 ${-value}px`;\n case \"right\":\n return `${-value}px 0`;\n\n default:\n return `0 ${value}px`;\n }\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>(\n (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 { prefersReducedMotion } = useBrowserPreferences();\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 {\n allowHover,\n isOpen: isOpenDefault,\n setIsOpen,\n } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen =\n isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { refs, placement, context, floatingStyles } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement:\n 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 } =\n 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(\n refs.reference.current as HTMLElement,\n );\n\n const { isMounted, styles: animationStyles } = useTransitionStyles(\n context,\n {\n duration: {\n open: prefersReducedMotion ? 0 : 250,\n close: prefersReducedMotion ? 0 : 150,\n },\n initial: ({ side }) => ({\n opacity: 0,\n translate: getTranslation(side, 5),\n }),\n open: ({ side }) => ({\n opacity: 1,\n translate: getTranslation(side, 0),\n }),\n close: ({ side }) => ({\n opacity: 0,\n translate: getTranslation(side, 5),\n }),\n },\n );\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" ||\n 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 {isMounted && (\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 <div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n ...floatingStyles,\n ...animationStyles,\n },\n })}\n >\n {React.Children.map(\n children,\n (child, index) => {\n if (\n React.isValidElement(child) &&\n isForwardRef(child)\n ) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex:\n activeIndex === index\n ? 0\n : -1,\n role: \"menuitem\",\n ref(\n node: HTMLButtonElement,\n ) {\n listItemsRef.current[\n index\n ] = node;\n },\n onClick(event) {\n child.props.onClick?.(\n event as React.MouseEvent<HTMLButtonElement>,\n );\n if (\n event.defaultPrevented\n ) {\n return;\n }\n tree?.events.emit(\n \"click\",\n );\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(\n event,\n );\n if (\n event.defaultPrevented\n ) {\n return;\n }\n tree?.events.emit(\n \"keydown\",\n );\n if (\n event.currentTarget\n .role ===\n \"menuitemcheckbox\" &&\n event.key ===\n \"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 (\n allowHover &&\n isOpen\n ) {\n setActiveIndex(\n index,\n );\n }\n },\n }),\n );\n }\n\n return child;\n },\n )}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\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"],"names":["process","env","NODE_ENV","reactIsModule","exports","u","b","Symbol","for","c","d","e","f","g","h","k","l","m","n","p","q","t","v","a","r","$$typeof","type","reactIs_production_min","ContextConsumer","Element","ForwardRef","Fragment","Lazy","Memo","Portal","StrictMode","Suspense","SuspenseList","isAsyncMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isStrictMode","isSuspense","isSuspenseList","isValidElementType","getModuleId","typeOf","require$$0","REACT_MODULE_REFERENCE","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_SERVER_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","object","$$typeofType","ContextProvider","Profiler","hasWarnedAboutDeprecatedIsAsyncMode","hasWarnedAboutDeprecatedIsConcurrentMode","reactIs_development","console","warn","isConcurrentMode","isProfiler","getTranslation","side","value","MenuComponent","forwardRef","props","forwardedRef","children","className","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","prefersReducedMotion","useBrowserPreferences","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","refs","placement","context","floatingStyles","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","density","getThemeAndDensity","reference","current","isMounted","styles","animationStyles","useTransitionStyles","duration","close","initial","opacity","translate","jsxs","FloatingNode","id","React","isValidElement","cloneElement","ref","onClick","stopPropagation","FloatingPortal","jsx","FloatingFocusManager","modal","initialFocus","returnFocus","clsx","setFloating","style","Children","map","child","index","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","displayName","Menu","FloatingTree"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"Menu.cjs","sources":["../../../../src/components/menu/Menu.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n safePolygon,\n shift,\n Side,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { isForwardRef } from \"react-is\";\nimport { useBrowserPreferences } from \"../../hooks/index.js\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { getThemeAndDensity } from \"../../utilities/getThemeAndDensity.js\";\nimport { MenuProps } from \"./types.js\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents.js\";\n\nfunction getTranslation(side: Side, value: number = 0) {\n switch (side) {\n case \"top\":\n return `0 ${value}px`;\n case \"left\":\n return `${value}px 0`;\n case \"bottom\":\n return `0 ${-value}px`;\n case \"right\":\n return `${-value}px 0`;\n\n default:\n return `0 ${value}px`;\n }\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>(\n (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 { prefersReducedMotion } = useBrowserPreferences();\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 {\n allowHover,\n isOpen: isOpenDefault,\n setIsOpen,\n } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen =\n isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { refs, placement, context, floatingStyles } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement:\n 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 } =\n 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(\n refs.reference.current as HTMLElement,\n );\n\n const { isMounted, styles: animationStyles } = useTransitionStyles(\n context,\n {\n duration: {\n open: prefersReducedMotion ? 0 : 250,\n close: prefersReducedMotion ? 0 : 150,\n },\n initial: ({ side }) => ({\n opacity: 0,\n translate: getTranslation(side, 5),\n }),\n open: ({ side }) => ({\n opacity: 1,\n translate: getTranslation(side, 0),\n }),\n close: ({ side }) => ({\n opacity: 0,\n translate: getTranslation(side, 5),\n }),\n },\n );\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" ||\n 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 {isMounted && (\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 <div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n ...floatingStyles,\n ...animationStyles,\n },\n })}\n >\n {React.Children.map(\n children,\n (child, index) => {\n if (\n React.isValidElement(child) &&\n isForwardRef(child)\n ) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex:\n activeIndex === index\n ? 0\n : -1,\n role: \"menuitem\",\n ref(\n node: HTMLButtonElement,\n ) {\n listItemsRef.current[\n index\n ] = node;\n },\n onClick(event) {\n child.props.onClick?.(\n event as React.MouseEvent<HTMLButtonElement>,\n );\n if (\n event.defaultPrevented\n ) {\n return;\n }\n tree?.events.emit(\n \"click\",\n );\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(\n event,\n );\n if (\n event.defaultPrevented\n ) {\n return;\n }\n tree?.events.emit(\n \"keydown\",\n );\n if (\n event.currentTarget\n .role ===\n \"menuitemcheckbox\" &&\n event.key ===\n \"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 (\n allowHover &&\n isOpen\n ) {\n setActiveIndex(\n index,\n );\n }\n },\n }),\n );\n }\n\n return child;\n },\n )}\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\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"],"names":["getTranslation","side","value","MenuComponent","forwardRef","props","forwardedRef","children","className","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","prefersReducedMotion","useBrowserPreferences","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","refs","placement","context","floatingStyles","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","density","getThemeAndDensity","reference","current","isMounted","styles","animationStyles","useTransitionStyles","duration","close","initial","opacity","translate","jsxs","FloatingNode","id","React","isValidElement","type","isForwardRef","cloneElement","ref","onClick","stopPropagation","FloatingPortal","jsx","FloatingFocusManager","modal","initialFocus","returnFocus","clsx","setFloating","style","Children","map","child","index","reactIsExports","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","displayName","Menu","FloatingTree"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),t=require("../../button/Button.cjs"),o=require("../Modal.cjs");,/* empty css */;/* empty css */const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),t=require("../../button/Button.cjs"),o=require("../Modal.cjs");,/* empty css */;/* empty css */const a={title:"Komponenter/Modal/CompleteModal",component:o.ModalContainer,parameters:{layout:"centered"},tags:["autodocs"]},r={args:{id:"modal-container",role:"document","aria-hidden":!1,"aria-modal":!0,"aria-labelledby":"modal-title"},render:a=>e.jsxs(o.ModalContainer,{...a,children:[e.jsx(o.ModalOverlay,{}),e.jsxs(o.Modal,{role:"document",children:[e.jsxs(o.ModalHeader,{children:[e.jsx(o.ModalTitle,{"aria-level":1,role:"heading",id:"",children:"Tittel"}),e.jsx(o.ModalCloseButton,{type:"button","aria-label":"close"})]}),e.jsx(o.ModalBody,{children:"Er du sikker på at du vil slette Foo Bar Baz?"}),e.jsxs(o.ModalActions,{children:[e.jsx(t.Button,{variant:"primary","data-testid":"confirm-modal",children:"Slett"}),e.jsx(t.Button,{children:"Avbryt"})]})]})]})};exports.CompleteModal=r,exports.default=a;
|
|
2
2
|
//# sourceMappingURL=CompleteModal.stories.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react");exports.useLocalStorage=(t,o)=>{const[r,a]=e.useState((()=>typeof window>"u"||!localStorage?o:JSON.parse(localStorage.getItem(t)||"null")||o));return[r,e.useCallback((e=>{a(e)
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react");exports.useLocalStorage=(t,o)=>{const[r,a]=e.useState((()=>typeof window>"u"||!localStorage?o:JSON.parse(localStorage.getItem(t)||"null")||o));return[r,e.useCallback((e=>{a((o=>{const r="function"==typeof e?e(o):e;return typeof window<"u"&&localStorage&&localStorage.setItem(t,JSON.stringify(r)),r}))}),[t])]};
|
|
2
2
|
//# sourceMappingURL=useLocalStorage.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocalStorage.cjs","sources":["../../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport const useLocalStorage = <T>(\n key: string,\n defaultValue: T,\n): [T,
|
|
1
|
+
{"version":3,"file":"useLocalStorage.cjs","sources":["../../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport const useLocalStorage = <T>(\n key: string,\n defaultValue: T,\n): [T, React.Dispatch<React.SetStateAction<T>>] => {\n const [state, setState] = useState<T>(() => {\n if (typeof window === \"undefined\" || !localStorage) {\n return defaultValue;\n }\n const storedValue = JSON.parse(localStorage.getItem(key) || \"null\");\n return storedValue || defaultValue;\n });\n\n const updateState: React.Dispatch<React.SetStateAction<T>> = useCallback(\n (setStateAction: React.SetStateAction<T>) => {\n setState((previousValue) => {\n const newValue =\n typeof setStateAction === \"function\"\n ? (setStateAction as (prevState: T) => T)(previousValue)\n : setStateAction;\n\n if (typeof window !== \"undefined\" && localStorage) {\n localStorage.setItem(key, JSON.stringify(newValue));\n }\n\n return newValue;\n });\n },\n [key],\n );\n\n return [state, updateState];\n};\n"],"names":["key","defaultValue","state","setState","useState","window","localStorage","JSON","parse","getItem","useCallback","setStateAction","previousValue","newValue","setItem","stringify"],"mappings":"iIAE+B,CAC3BA,EACAC,KAEA,MAAOC,EAAOC,GAAYC,YAAY,WACvBC,OAAW,MAAgBC,aAC3BL,EAESM,KAAKC,MAAMF,aAAaG,QAAQT,IAAQ,SACtCC,IAqBnB,MAAA,CAACC,EAlBqDQ,EAAAA,aACxDC,IACGR,GAAUS,IACN,MAAMC,EACwB,mBAAnBF,EACAA,EAAuCC,GACxCD,EAEN,cAAON,OAAW,KAAeC,cACjCA,aAAaQ,QAAQd,EAAKO,KAAKQ,UAAUF,IAGtCA,IACV,GAEL,CAACb,IAGqB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useLocalStorage: <T>(key: string, defaultValue: T) => [T,
|
|
1
|
+
export declare const useLocalStorage: <T>(key: string, defaultValue: T) => [T, React.Dispatch<React.SetStateAction<T>>];
|