@fremtind/jokul 5.0.0 → 5.0.2
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/checkbox-panel/CheckboxPanel.cjs +1 -1
- package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs.map +1 -1
- package/build/cjs/components/checkbox-panel/CheckboxPanel.d.cts +1 -1
- package/build/cjs/components/expander/index.cjs +1 -1
- package/build/cjs/components/expander/index.d.cts +1 -0
- package/build/cjs/components/input-panel/InputPanel.cjs +1 -1
- package/build/cjs/components/input-panel/InputPanel.cjs.map +1 -1
- package/build/cjs/components/input-panel/InputPanel.d.cts +1 -1
- package/build/cjs/components/input-panel/types.d.cts +2 -1
- package/build/cjs/components/message/Message.cjs +1 -1
- package/build/cjs/components/message/Message.cjs.map +1 -1
- package/build/cjs/components/radio-panel/RadioPanel.cjs +1 -1
- package/build/cjs/components/radio-panel/RadioPanel.cjs.map +1 -1
- package/build/cjs/components/select/Select.cjs +1 -1
- package/build/cjs/components/select/Select.cjs.map +1 -1
- package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
- package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
- package/build/cjs/components/toast/Toast.cjs +1 -1
- package/build/cjs/components/toast/Toast.cjs.map +1 -1
- package/build/cjs/components/typography/Title.cjs +1 -1
- package/build/cjs/components/typography/Title.cjs.map +1 -1
- package/build/cjs/utilities/formatters/util/registerWithMask.cjs +1 -1
- package/build/cjs/utilities/formatters/util/registerWithMask.cjs.map +1 -1
- package/build/cjs/utilities/types.cjs.map +1 -1
- package/build/cjs/utilities/types.d.cts +12 -2
- package/build/es/components/checkbox-panel/CheckboxPanel.d.ts +1 -1
- package/build/es/components/checkbox-panel/CheckboxPanel.js +1 -1
- package/build/es/components/checkbox-panel/CheckboxPanel.js.map +1 -1
- package/build/es/components/expander/index.d.ts +1 -0
- package/build/es/components/expander/index.js +1 -1
- package/build/es/components/input-panel/InputPanel.d.ts +1 -1
- package/build/es/components/input-panel/InputPanel.js +1 -1
- package/build/es/components/input-panel/InputPanel.js.map +1 -1
- package/build/es/components/input-panel/types.d.ts +2 -1
- package/build/es/components/message/Message.js +1 -1
- package/build/es/components/message/Message.js.map +1 -1
- package/build/es/components/radio-panel/RadioPanel.js +1 -1
- package/build/es/components/radio-panel/RadioPanel.js.map +1 -1
- package/build/es/components/select/Select.js +1 -1
- package/build/es/components/select/Select.js.map +1 -1
- package/build/es/components/text-area/BaseTextArea.js +1 -1
- package/build/es/components/text-area/BaseTextArea.js.map +1 -1
- package/build/es/components/toast/Toast.js +1 -1
- package/build/es/components/toast/Toast.js.map +1 -1
- package/build/es/components/typography/Title.js +1 -1
- package/build/es/components/typography/Title.js.map +1 -1
- package/build/es/utilities/formatters/util/registerWithMask.js +1 -1
- package/build/es/utilities/formatters/util/registerWithMask.js.map +1 -1
- package/build/es/utilities/types.d.ts +12 -2
- package/build/es/utilities/types.js.map +1 -1
- package/package.json +1 -1
- package/styles/base.css +3 -0
- package/styles/base.min.css +1 -1
- package/styles/components/breadcrumb/breadcrumb.css +0 -1
- package/styles/components/breadcrumb/breadcrumb.min.css +1 -1
- package/styles/components/breadcrumb/breadcrumb.scss +0 -1
- package/styles/components/button/button.css +0 -1
- package/styles/components/button/button.min.css +1 -1
- package/styles/components/button/button.scss +1 -2
- package/styles/components/checkbox/checkbox.css +0 -1
- package/styles/components/checkbox/checkbox.min.css +1 -1
- package/styles/components/checkbox/checkbox.scss +0 -2
- package/styles/components/checkbox-panel/checkbox-panel.css +0 -1
- package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
- package/styles/components/chip/chip.css +0 -1
- package/styles/components/chip/chip.min.css +1 -1
- package/styles/components/chip/chip.scss +0 -1
- package/styles/components/combobox/combobox.css +0 -1
- package/styles/components/combobox/combobox.min.css +1 -1
- package/styles/components/combobox/combobox.scss +0 -1
- package/styles/components/countdown/countdown.css +2 -2
- package/styles/components/countdown/countdown.min.css +1 -1
- package/styles/components/datepicker/_calendar-date-button.scss +0 -2
- package/styles/components/datepicker/datepicker.css +0 -2
- package/styles/components/datepicker/datepicker.min.css +1 -1
- package/styles/components/feedback/feedback.css +2 -2
- package/styles/components/feedback/feedback.min.css +1 -1
- package/styles/components/file/file.css +3 -0
- package/styles/components/file/file.min.css +1 -1
- package/styles/components/file/file.scss +4 -0
- package/styles/components/file-input/file-input.css +26 -17
- package/styles/components/file-input/file-input.min.css +1 -1
- package/styles/components/icon-button/icon-button.css +0 -1
- package/styles/components/icon-button/icon-button.min.css +1 -1
- package/styles/components/icon-button/icon-button.scss +0 -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/link/link.css +14 -7
- package/styles/components/link/link.min.css +1 -1
- package/styles/components/link/link.scss +18 -10
- package/styles/components/loader/loader.css +6 -6
- package/styles/components/loader/loader.min.css +1 -1
- package/styles/components/loader/skeleton-loader.css +3 -3
- package/styles/components/loader/skeleton-loader.min.css +1 -1
- package/styles/components/menu/_menu-item.scss +0 -1
- package/styles/components/menu/menu.css +0 -1
- package/styles/components/menu/menu.min.css +1 -1
- package/styles/components/message/message.css +2 -3
- package/styles/components/message/message.min.css +1 -1
- package/styles/components/message/message.scss +0 -1
- package/styles/components/modal/_layout.scss +2 -0
- package/styles/components/modal/modal.css +1 -0
- package/styles/components/modal/modal.min.css +1 -1
- package/styles/components/modal/modal.scss +2 -1
- package/styles/components/pagination/pagination.css +1 -1
- package/styles/components/pagination/pagination.scss +1 -1
- package/styles/components/popover/popover.css +1 -1
- package/styles/components/popover/popover.min.css +1 -1
- package/styles/components/popover/popover.scss +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 +1 -1
- package/styles/components/radio-button/radio-button.min.css +1 -1
- package/styles/components/radio-button/radio-button.scss +2 -1
- package/styles/components/search/search.css +0 -1
- package/styles/components/search/search.min.css +1 -1
- package/styles/components/search/search.scss +0 -1
- package/styles/components/segmented-control/segmented-control.css +3 -3
- package/styles/components/segmented-control/segmented-control.min.css +1 -1
- package/styles/components/select/select.css +1 -1
- package/styles/components/select/select.min.css +1 -1
- package/styles/components/select/select.scss +4 -11
- package/styles/components/system-message/system-message.css +2 -3
- package/styles/components/system-message/system-message.min.css +1 -1
- package/styles/components/system-message/system-message.scss +1 -2
- package/styles/components/table/_table-pagination.scss +0 -1
- package/styles/components/table/table.css +0 -1
- package/styles/components/table/table.min.css +1 -1
- package/styles/components/tabs/tabs.css +0 -1
- package/styles/components/tabs/tabs.min.css +1 -1
- package/styles/components/tabs/tabs.scss +0 -1
- package/styles/components/toast/toast.css +34 -9
- package/styles/components/toast/toast.min.css +1 -1
- package/styles/components/toast/toast.scss +44 -9
- package/styles/components/toggle-switch/toggle-switch.css +0 -1
- package/styles/components/toggle-switch/toggle-switch.min.css +1 -1
- package/styles/components/toggle-switch/toggle-switch.scss +0 -1
- package/styles/components/typography/text.css +2 -2
- package/styles/components/typography/text.min.css +1 -1
- package/styles/components/typography/text.scss +2 -2
- package/styles/components/typography/title.css +8 -30
- package/styles/components/typography/title.min.css +1 -1
- package/styles/components/typography/title.scss +7 -30
- package/styles/components.css +87 -87
- package/styles/components.min.css +1 -1
- package/styles/global/_base-class.scss +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.cjs","sources":["../../../../src/components/toast/Toast.tsx"],"sourcesContent":["import { type AriaToastProps, useToast } from \"@react-aria/toast\";\nimport type { QueuedToast, ToastState } from \"@react-stately/toast\";\nimport clsx from \"clsx\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useBrowserPreferences } from \"../../hooks/useBrowserPreferences/useBrowserPreferences.js\";\nimport { Button } from \"../button/Button.js\";\nimport { Countdown } from \"../countdown/Countdown.js\";\nimport { Flex } from \"../flex/Flex.jsx\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { ErrorIcon } from \"../icon/icons/ErrorIcon.js\";\nimport { InfoIcon } from \"../icon/icons/InfoIcon.js\";\nimport { SuccessIcon } from \"../icon/icons/SuccessIcon.js\";\nimport { WarningIcon } from \"../icon/icons/WarningIcon.js\";\nimport type { ToastContent, ToastOptions } from \"./types.js\";\n\nexport interface ToastProps<T extends ToastContent> extends AriaToastProps<T> {\n className?: string;\n state: ToastState<T>;\n toast: QueuedToast<T> & ToastOptions;\n}\n\nconst getIcon = (messageType?: \"error\" | \"info\" | \"success\" | \"warning\") => {\n switch (messageType) {\n case \"error\":\n return <ErrorIcon className=\"jkl-toast__icon\" />;\n case \"info\":\n return <InfoIcon className=\"jkl-toast__icon\" />;\n case \"success\":\n return <SuccessIcon className=\"jkl-toast__icon\" />;\n case \"warning\":\n return <WarningIcon className=\"jkl-toast__icon\" />;\n default:\n return null;\n }\n};\n\nexport function Toast<T extends ToastContent>({\n className,\n state,\n ...props\n}: ToastProps<T>) {\n const ref = useRef(null);\n const { toastProps, titleProps } = useToast(props, state, ref);\n const [announceReady, setAnnounceReady] = useState(false);\n\n const content =\n typeof props.toast.content === \"string\"\n ? props.toast.content\n : props.toast.content.content;\n const title =\n typeof props.toast.content === \"string\"\n ? undefined\n : props.toast.content.title;\n\n // @ts-ignore Proxy for å sjekke om timeren er pauset: https://github.com/adobe/react-spectrum/blob/b1545c0d225b12672fb6a4e7b787268591d66b90/packages/%40react-stately/toast/src/useToastState.ts#L222\n const isPaused = props.toast.timer?.timerId == null;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n useEffect(() => {\n // Delay the update to the next event loop so the toast has time to render before being announced to screen readers\n const timeout = setTimeout(() => {\n setAnnounceReady(true);\n }, 0);\n\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n if (prefersReducedMotion && props.toast.animation === \"exiting\") {\n // If user has prefers-reduced-motion the exit animation won't run and our\n // onAnimationEnd callback won't be invoked. In this case, remove the toast\n // manually.\n state.remove(props.toast.key);\n }\n }, [prefersReducedMotion, props.toast.animation, props.toast.key, state]);\n\n return (\n <div\n {...toastProps}\n ref={ref}\n className={clsx(\n \"jkl-toast\",\n {\n \"jkl-toast--info\": props.toast.variant === \"info\",\n \"jkl-toast--error\": props.toast.variant === \"error\",\n \"jkl-toast--warning\": props.toast.variant === \"warning\",\n \"jkl-toast--success\": props.toast.variant === \"success\",\n },\n className,\n )}\n data-animation={props.toast.animation}\n onAnimationEnd={() => {\n // Remove the toast when the exiting animation completes.\n if (props.toast.animation === \"exiting\") {\n state.remove(props.toast.key);\n }\n }}\n >\n {props.toast.timeout ? (\n <Countdown\n className=\"jkl-toast__progress\"\n from={props.toast.timeout}\n isPaused={isPaused}\n
|
|
1
|
+
{"version":3,"file":"Toast.cjs","sources":["../../../../src/components/toast/Toast.tsx"],"sourcesContent":["import { type AriaToastProps, useToast } from \"@react-aria/toast\";\nimport type { QueuedToast, ToastState } from \"@react-stately/toast\";\nimport clsx from \"clsx\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useBrowserPreferences } from \"../../hooks/useBrowserPreferences/useBrowserPreferences.js\";\nimport { Button } from \"../button/Button.js\";\nimport { Countdown } from \"../countdown/Countdown.js\";\nimport { Flex } from \"../flex/Flex.jsx\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { ErrorIcon } from \"../icon/icons/ErrorIcon.js\";\nimport { InfoIcon } from \"../icon/icons/InfoIcon.js\";\nimport { SuccessIcon } from \"../icon/icons/SuccessIcon.js\";\nimport { WarningIcon } from \"../icon/icons/WarningIcon.js\";\nimport type { ToastContent, ToastOptions } from \"./types.js\";\n\nexport interface ToastProps<T extends ToastContent> extends AriaToastProps<T> {\n className?: string;\n state: ToastState<T>;\n toast: QueuedToast<T> & ToastOptions;\n}\n\nconst getIcon = (messageType?: \"error\" | \"info\" | \"success\" | \"warning\") => {\n switch (messageType) {\n case \"error\":\n return <ErrorIcon className=\"jkl-toast__icon\" />;\n case \"info\":\n return <InfoIcon className=\"jkl-toast__icon\" />;\n case \"success\":\n return <SuccessIcon className=\"jkl-toast__icon\" />;\n case \"warning\":\n return <WarningIcon className=\"jkl-toast__icon\" />;\n default:\n return null;\n }\n};\n\nexport function Toast<T extends ToastContent>({\n className,\n state,\n ...props\n}: ToastProps<T>) {\n const ref = useRef(null);\n const { toastProps, titleProps } = useToast(props, state, ref);\n const [announceReady, setAnnounceReady] = useState(false);\n\n const content =\n typeof props.toast.content === \"string\"\n ? props.toast.content\n : props.toast.content.content;\n const title =\n typeof props.toast.content === \"string\"\n ? undefined\n : props.toast.content.title;\n\n // @ts-ignore Proxy for å sjekke om timeren er pauset: https://github.com/adobe/react-spectrum/blob/b1545c0d225b12672fb6a4e7b787268591d66b90/packages/%40react-stately/toast/src/useToastState.ts#L222\n const isPaused = props.toast.timer?.timerId == null;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n useEffect(() => {\n // Delay the update to the next event loop so the toast has time to render before being announced to screen readers\n const timeout = setTimeout(() => {\n setAnnounceReady(true);\n }, 0);\n\n return () => clearTimeout(timeout);\n }, []);\n\n useEffect(() => {\n if (prefersReducedMotion && props.toast.animation === \"exiting\") {\n // If user has prefers-reduced-motion the exit animation won't run and our\n // onAnimationEnd callback won't be invoked. In this case, remove the toast\n // manually.\n state.remove(props.toast.key);\n }\n }, [prefersReducedMotion, props.toast.animation, props.toast.key, state]);\n\n return (\n <div\n {...toastProps}\n ref={ref}\n className={clsx(\n \"jkl-toast\",\n {\n \"jkl-toast--info\": props.toast.variant === \"info\",\n \"jkl-toast--error\": props.toast.variant === \"error\",\n \"jkl-toast--warning\": props.toast.variant === \"warning\",\n \"jkl-toast--success\": props.toast.variant === \"success\",\n },\n className,\n )}\n data-animation={props.toast.animation}\n onAnimationEnd={() => {\n // Remove the toast when the exiting animation completes.\n if (props.toast.animation === \"exiting\") {\n state.remove(props.toast.key);\n }\n }}\n >\n {props.toast.timeout ? (\n <Countdown\n className=\"jkl-toast__progress\"\n from={props.toast.timeout}\n isPaused={isPaused}\n onAnimationEnd={(e) => {\n // Avoid triggering the toast's onAnimationEnd handler so we still get our exit animation\n e.stopPropagation();\n }}\n />\n ) : null}\n <Flex alignItems=\"start\" gap=\"xs\">\n {getIcon(props.toast.variant)}\n <Flex\n {...titleProps}\n direction=\"column\"\n gap=\"xs\"\n className=\"jkl-toast__content\"\n aria-live=\"assertive\"\n >\n {title && (\n <p className=\"jkl-toast__title\">\n {announceReady && title}\n </p>\n )}\n <p className=\"jkl-toast__message\">\n {announceReady && content}\n </p>\n {props.toast.action && (\n <div className=\"jkl-toast__action\">\n <Button\n variant=\"secondary\"\n onClick={props.toast.action.onClick}\n >\n {props.toast.action.label}\n </Button>\n </div>\n )}\n </Flex>\n <IconButton\n aria-label=\"Lukk varsel\"\n className=\"jkl-toast__dismiss-button\"\n onClick={() => {\n state.close(props.toast.key);\n }}\n >\n <CloseIcon />\n </IconButton>\n </Flex>\n </div>\n );\n}\n"],"names":["getIcon","messageType","jsx","ErrorIcon","className","InfoIcon","SuccessIcon","WarningIcon","state","props","ref","useRef","toastProps","titleProps","useToast","announceReady","setAnnounceReady","useState","content","toast","title","isPaused","timer","timerId","prefersReducedMotion","useBrowserPreferences","useEffect","timeout","setTimeout","clearTimeout","animation","remove","key","jsxs","clsx","variant","onAnimationEnd","children","Countdown","from","e","stopPropagation","Flex","alignItems","gap","direction","action","Button","onClick","label","IconButton","close","CloseIcon"],"mappings":"2nBAsBMA,EAAWC,IACb,OAAQA,GACJ,IAAK,QACD,OAAOC,EAAAA,IAACC,EAAAA,UAAA,CAAUC,UAAU,oBAChC,IAAK,OACD,OAAOF,EAAAA,IAACG,EAAAA,SAAA,CAASD,UAAU,oBAC/B,IAAK,UACD,OAAOF,EAAAA,IAACI,EAAAA,YAAA,CAAYF,UAAU,oBAClC,IAAK,UACD,OAAOF,EAAAA,IAACK,EAAAA,YAAA,CAAYH,UAAU,oBAClC,QACI,OAAO,qBAIZ,UACHA,UAAAA,EACAI,MAAAA,KACGC,IAEH,MAAMC,EAAMC,EAAAA,OAAO,OACXC,WAAAA,EAAYC,WAAAA,GAAeC,EAAAA,SAASL,EAAOD,EAAOE,IACnDK,EAAeC,GAAoBC,EAAAA,UAAS,GAE7CC,EAC6B,iBAAxBT,EAAMU,MAAMD,QACbT,EAAMU,MAAMD,QACZT,EAAMU,MAAMD,QAAQA,QACxBE,EAC6B,iBAAxBX,EAAMU,MAAMD,aACb,EACAT,EAAMU,MAAMD,QAAQE,MAGxBC,EAAyC,MAA9BZ,EAAMU,MAAMG,OAAOC,SAE5BC,qBAAAA,GAAyBC,0BAEjCC,OAAAA,EAAAA,UAAU,KAEN,MAAMC,EAAUC,WAAW,KACvBZ,GAAiB,IAClB,GAEH,MAAO,IAAMa,aAAaF,IAC3B,IAEHD,EAAAA,UAAU,KACFF,GAAkD,YAA1Bf,EAAMU,MAAMW,WAIpCtB,EAAMuB,OAAOtB,EAAMU,MAAMa,MAE9B,CAACR,EAAsBf,EAAMU,MAAMW,UAAWrB,EAAMU,MAAMa,IAAKxB,IAG9DyB,EAAAA,KAAC,MAAA,IACOrB,EACJF,IAAAA,EACAN,UAAW8B,EAAAA,KACP,YACA,CACI,kBAA2C,SAAxBzB,EAAMU,MAAMgB,QAC/B,mBAA4C,UAAxB1B,EAAMU,MAAMgB,QAChC,qBAA8C,YAAxB1B,EAAMU,MAAMgB,QAClC,qBAA8C,YAAxB1B,EAAMU,MAAMgB,SAEtC/B,GAEJ,iBAAgBK,EAAMU,MAAMW,UAC5BM,eAAgB,KAEkB,YAA1B3B,EAAMU,MAAMW,WACZtB,EAAMuB,OAAOtB,EAAMU,MAAMa,MAIhCK,SAAA,CAAA5B,EAAMU,MAAMQ,QACTzB,EAAAA,IAACoC,EAAAA,UAAA,CACGlC,UAAU,sBACVmC,KAAM9B,EAAMU,MAAMQ,QAClBN,SAAAA,EACAe,eAAiBI,IAEbA,EAAEC,qBAGV,KACJR,EAAAA,KAACS,EAAAA,KAAA,CAAKC,WAAW,QAAQC,IAAI,KACxBP,SAAA,CAAArC,EAAQS,EAAMU,MAAMgB,SACrBF,EAAAA,KAACS,EAAAA,KAAA,IACO7B,EACJgC,UAAU,SACVD,IAAI,KACJxC,UAAU,qBACV,YAAU,YAETiC,SAAA,CAAAjB,GACGlB,EAAAA,IAAC,IAAA,CAAEE,UAAU,mBACRiC,YAAiBjB,IAG1BlB,EAAAA,IAAC,IAAA,CAAEE,UAAU,qBACRiC,YAAiBnB,IAErBT,EAAMU,MAAM2B,QACT5C,EAAAA,IAAC,MAAA,CAAIE,UAAU,oBACXiC,SAAAnC,EAAAA,IAAC6C,EAAAA,OAAA,CACGZ,QAAQ,YACRa,QAASvC,EAAMU,MAAM2B,OAAOE,QAE3BX,SAAA5B,EAAMU,MAAM2B,OAAOG,aAKpC/C,EAAAA,IAACgD,EAAAA,WAAA,CACG,aAAW,cACX9C,UAAU,4BACV4C,QAAS,KACLxC,EAAM2C,MAAM1C,EAAMU,MAAMa,MAG5BK,eAACe,EAAAA,UAAA,CAAA,UAKrB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../clsx-E3yX_9sL.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../clsx-E3yX_9sL.cjs"),s=require("react").forwardRef(function({className:s,size:t="l",as:a,srOnly:c,...l},i){const o=a||"h2";return e.jsx(o,{className:r.clsx(c&&"jkl-sr-only",s),"data-text-size":t,ref:i,...l})});exports.Title=s;
|
|
2
2
|
//# sourceMappingURL=Title.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Title.cjs","sources":["../../../../src/components/typography/Title.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport type { PolymorphicRef } from \"../../utilities/index.js\";\nimport type { TitleElement, TitleProps } from \"./types.js\";\n\ntype TitleComponent = <As extends TitleElement = \"h2\">(\n props: TitleProps<As>,\n) => React.ReactElement | null;\n\nexport const Title: TitleComponent = forwardRef(function Title<\n As extends TitleElement = \"h2\",\n>(\n { className, size = \"l\", as, srOnly, ...rest }: TitleProps<As>,\n ref?: PolymorphicRef<As>,\n) {\n const Tag = (as || \"h2\") as React.ElementType;\n return (\n <Tag\n className={clsx(
|
|
1
|
+
{"version":3,"file":"Title.cjs","sources":["../../../../src/components/typography/Title.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport type { PolymorphicRef } from \"../../utilities/index.js\";\nimport type { TitleElement, TitleProps } from \"./types.js\";\n\ntype TitleComponent = <As extends TitleElement = \"h2\">(\n props: TitleProps<As>,\n) => React.ReactElement | null;\n\nexport const Title: TitleComponent = forwardRef(function Title<\n As extends TitleElement = \"h2\",\n>(\n { className, size = \"l\", as, srOnly, ...rest }: TitleProps<As>,\n ref?: PolymorphicRef<As>,\n) {\n const Tag = (as || \"h2\") as React.ElementType;\n return (\n <Tag\n className={clsx(srOnly && \"jkl-sr-only\", className)}\n data-text-size={size}\n ref={ref}\n {...rest}\n />\n );\n}) as TitleComponent;\n"],"names":["Title","forwardRef","className","size","as","srOnly","rest","ref","Tag","jsx","clsx"],"mappings":"6JASaA,mBAAwBC,WAAW,UAG1CC,UAAAA,EAAWC,KAAAA,EAAO,IAAKC,GAAAA,EAAIC,OAAAA,KAAWC,GACxCC,GAEA,MAAMC,EAAOJ,GAAM,KACnB,OACIK,EAAAA,IAACD,EAAA,CACGN,UAAWQ,EAAAA,KAAKL,GAAU,cAAeH,GACzC,iBAAgBC,EAChBI,IAAAA,KACID,GAGhB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../date/formatDate.cjs"),r=require("../fodselsnummer/formatFodselsnummer.cjs"),t=require("../kontonummer/formatKontonummer.cjs"),n=require("../kortnummer/formatKortnummer.cjs"),m=require("../organisasjonsnummer/formatOrganisasjonsnummer.cjs"),s=require("../telefonnummer/formatTelefonnummer.cjs"),o=require("./formatNumber.cjs"),a={date:e.formatDateString,fodselsnummer:r.formatFodselsnummer,kortnummer:n.formatKortnummer,kontonummer:t.formatKontonummer,telefonnummer:s.formatTelefonnummer,number:o.formatNumber,organisasjonsnummer:m.formatOrganisasjonsnummer},u=e=>(r,t,n)=>{let m=0,s="";const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../date/formatDate.cjs"),r=require("../fodselsnummer/formatFodselsnummer.cjs"),t=require("../kontonummer/formatKontonummer.cjs"),n=require("../kortnummer/formatKortnummer.cjs"),m=require("../organisasjonsnummer/formatOrganisasjonsnummer.cjs"),s=require("../telefonnummer/formatTelefonnummer.cjs"),o=require("./formatNumber.cjs"),a={date:e.formatDateString,fodselsnummer:r.formatFodselsnummer,kortnummer:n.formatKortnummer,kontonummer:t.formatKontonummer,telefonnummer:s.formatTelefonnummer,number:o.formatNumber,organisasjonsnummer:m.formatOrganisasjonsnummer},u=e=>(r,t,n)=>{let m=0,s="",o="";const u={setValueAs:e=>e.replace(/\s/g,""),onChange:u=>{n?.onChange?.(u);let i=0;const l=u.target.value.length;null!==u.target.selectionStart&&(i=u.target.selectionStart);const g=a[e](u.target.value,{partial:!0}),c=g.toString().length;r.setValue(t,g);let f=null;if(["Delete","Backspace"].includes(s)){const e=m-i,r=""===o.trim()?0:c-l;f=m-e+r}else if(i<u.target.value.length||l!==c){f=i+(c-l)}if(null!==f){const e=((e,r,t)=>Math.min(Math.max(e,r),t))(f,0,c);u.target.setSelectionRange(e,e,void 0)}}};n&&Object.assign(u,n);const i=r.register(t,u),l={onKeyDown:e=>{o="";const r=e.target,{selectionStart:t,selectionEnd:n,value:a}=r;null!==t&&(m=t,null!==n&&n>t?o=a.slice(t,n):"Backspace"===e.key?o=a[m-1]??"":"Delete"===e.key&&(o=a[m]??"")),s=e.key}};return"number"===e&&(l.align="right"),Object.assign(i,l)},i=u("fodselsnummer"),l=u("kortnummer"),g=u("kontonummer"),c=u("telefonnummer");exports.registerWithFodselsnummerMask=i,exports.registerWithKontonummerMask=g,exports.registerWithKortnummerMask=l,exports.registerWithMasks=e=>({registerWithFodselsnummerMask:(r,t)=>u("fodselsnummer")(e,r,t),registerWithKortnummerMask:(r,t)=>u("kortnummer")(e,r,t),registerWithKontonummerMask:(r,t)=>u("kontonummer")(e,r,t),registerWithTelefonnummerMask:(r,t)=>u("telefonnummer")(e,r,t),registerWithOrganisasjonsnummerMask:(r,t)=>u("organisasjonsnummer")(e,r,t),registerWithDateMask:(r,t)=>u("date")(e,r,t),registerWithNumber:(r,t)=>u("number")(e,r,t)}),exports.registerWithTelefonnummerMask=c;
|
|
2
2
|
//# sourceMappingURL=registerWithMask.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerWithMask.cjs","sources":["../../../../../src/utilities/formatters/util/registerWithMask.ts"],"sourcesContent":["import type { ChangeEvent, KeyboardEventHandler } from \"react\";\nimport type {\n FieldValues,\n Path,\n PathValue,\n RegisterOptions,\n UseFormRegisterReturn,\n UseFormReturn,\n} from \"react-hook-form\";\nimport { formatDateString } from \"../date/formatDate.js\";\nimport { formatFodselsnummer } from \"../fodselsnummer/formatFodselsnummer.js\";\nimport { formatKontonummer } from \"../kontonummer/formatKontonummer.js\";\nimport { formatKortnummer } from \"../kortnummer/formatKortnummer.js\";\nimport { formatOrganisasjonsnummer } from \"../organisasjonsnummer/formatOrganisasjonsnummer.js\";\nimport { formatTelefonnummer } from \"../telefonnummer/formatTelefonnummer.js\";\nimport { formatNumber } from \"./formatNumber.js\";\n\nconst formatters = {\n date: formatDateString,\n fodselsnummer: formatFodselsnummer,\n kortnummer: formatKortnummer,\n kontonummer: formatKontonummer,\n telefonnummer: formatTelefonnummer,\n number: formatNumber,\n organisasjonsnummer: formatOrganisasjonsnummer,\n};\nexport type Formatter = keyof typeof formatters;\n\nexport type RegisterWithMaskOptions<T extends FieldValues> = Omit<\n RegisterOptions<T>,\n \"setValueAs\"\n>;\n\nconst registerWithMask =\n (formatter: Formatter) =>\n <T extends FieldValues>(\n form: UseFormReturn<T>,\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ) => {\n let onKeyDownCaretPosition = 0;\n let onKeyDownKeyPressed = \"\";\n\n const setValueAs = (value: string) => value.replace(/\\s/g, \"\");\n const onChange = (event: ChangeEvent<HTMLInputElement>) => {\n options?.onChange?.(event);\n\n // save some values before event.target.value change\n let onChangeCaretPosition = 0;\n const inputLength = event.target.value.length;\n\n // type checking formalities\n if (event.target.selectionStart !== null) {\n onChangeCaretPosition = event.target.selectionStart;\n }\n\n form.setValue(\n name,\n formatters[formatter](event.target.value, {\n partial: true,\n }) as PathValue<T, Path<T>>,\n );\n\n let newPosition: number | null = null;\n\n if ([\"Delete\", \"Backspace\"].includes(onKeyDownKeyPressed)) {\n // handle removing content\n // calculate how much to move the caret, this also accounts for removing sections of text\n const delta = onKeyDownCaretPosition - onChangeCaretPosition;\n\n // calculate new caret position (- because we move backwards)\n newPosition = onKeyDownCaretPosition - delta;\n } else if (onChangeCaretPosition < event.target.value.length) {\n // handle adding content from inside the string\n // calculate how much to move the caret forwards\n const delta = event.target.value.length - inputLength;\n\n // calculate new caret position (+ because we move forwards)\n newPosition = onChangeCaretPosition + delta;\n }\n\n if (newPosition !== null) {\n event.target.setSelectionRange(\n newPosition,\n newPosition,\n undefined,\n );\n }\n };\n\n const registerOptions: RegisterOptions<T, Path<T>> = {\n setValueAs,\n onChange,\n };\n if (options) {\n Object.assign(registerOptions, options);\n }\n const register = form.register(name, registerOptions);\n\n // save the caret position before the change occured\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if ((event.target as HTMLInputElement).selectionStart !== null) {\n onKeyDownCaretPosition = (event.target as HTMLInputElement)\n .selectionStart as number;\n }\n onKeyDownKeyPressed = event.key;\n };\n\n // add onKeyDown event handler to the registered input\n const extra: Record<string, unknown> = {\n onKeyDown,\n };\n\n if (formatter === \"number\") {\n extra.align = \"right\"; // Se https://github.com/fremtind/jokul/pull/2898\n }\n\n return Object.assign(register, extra);\n };\n\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithFodselsnummerMask = registerWithMask(\"fodselsnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKortnummerMask = registerWithMask(\"kortnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKontonummerMask = registerWithMask(\"kontonummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithTelefonnummerMask = registerWithMask(\"telefonnummer\");\n\n/**\n * Hjelpefunksjon for React Hook Form som lar deg bruke formateringsfunksjonene i denne pakken som inputmasker.\n */\nexport const registerWithMasks = <T extends FieldValues>(\n form: UseFormReturn<T>,\n) => ({\n registerWithFodselsnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"fodselsnummer\")<T>(form, name, options),\n registerWithKortnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"kortnummer\")<T>(form, name, options),\n registerWithKontonummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"kontonummer\")<T>(form, name, options),\n registerWithTelefonnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"telefonnummer\")<T>(form, name, options),\n registerWithOrganisasjonsnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"organisasjonsnummer\")<T>(form, name, options),\n registerWithDateMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"date\")<T>(form, name, options),\n registerWithNumber: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn & { align: \"right\" } =>\n registerWithMask(\"number\")<T>(\n form,\n name,\n options,\n ) as unknown as UseFormRegisterReturn & {\n align: \"right\";\n },\n});\n"],"names":["formatters","date","formatDateString","fodselsnummer","formatFodselsnummer","kortnummer","formatKortnummer","kontonummer","formatKontonummer","telefonnummer","formatTelefonnummer","number","formatNumber","organisasjonsnummer","formatOrganisasjonsnummer","registerWithMask","formatter","form","name","options","onKeyDownCaretPosition","onKeyDownKeyPressed","registerOptions","setValueAs","value","replace","onChange","event","onChangeCaretPosition","inputLength","target","length","selectionStart","setValue","partial","newPosition","includes","setSelectionRange","Object","assign","register","extra","onKeyDown","key","align","registerWithFodselsnummerMask","registerWithKortnummerMask","registerWithKontonummerMask","registerWithTelefonnummerMask","registerWithOrganisasjonsnummerMask","registerWithDateMask","registerWithNumber"],"mappings":"0aAiBMA,EAAa,CACfC,KAAMC,EAAAA,iBACNC,cAAeC,EAAAA,oBACfC,WAAYC,EAAAA,iBACZC,YAAaC,EAAAA,kBACbC,cAAeC,EAAAA,oBACfC,OAAQC,EAAAA,aACRC,oBAAqBC,EAAAA,2BASnBC,EACDC,GACD,CACIC,EACAC,EACAC,KAEA,IAAIC,EAAyB,EACzBC,EAAsB,GAiD1B,MAAMC,EAA+C,CACjDC,WAhDgBC,GAAkBA,EAAMC,QAAQ,MAAO,IAiDvDC,SAhDcC,IACdR,GAASO,WAAWC,GAGpB,IAAIC,EAAwB,EAC5B,MAAMC,EAAcF,EAAMG,OAAON,MAAMO,OAGH,OAAhCJ,EAAMG,OAAOE,iBACbJ,EAAwBD,EAAMG,OAAOE,gBAGzCf,EAAKgB,SACDf,EACAlB,EAAWgB,GAAWW,EAAMG,OAAON,MAAO,CACtCU,SAAS,KAIjB,IAAIC,EAA6B,KAEjC,GAAI,CAAC,SAAU,aAAaC,SAASf,GAAsB,CAMvDc,EAAcf,GAHAA,EAAyBQ,EAI3C,MAAA,GAAWA,EAAwBD,EAAMG,OAAON,MAAMO,OAAQ,CAM1DI,EAAcP,GAHAD,EAAMG,OAAON,MAAMO,OAASF,EAI9C,CAEoB,OAAhBM,GACAR,EAAMG,OAAOO,kBACTF,EACAA,OACA,KASRhB,GACAmB,OAAOC,OAAOjB,EAAiBH,GAEnC,MAAMqB,EAAWvB,EAAKuB,SAAStB,EAAMI,GAY/BmB,EAAiC,CACnCC,UAVuDf,IACG,OAArDA,EAAMG,OAA4BE,iBACnCZ,EAA0BO,EAAMG,OAC3BE,gBAETX,EAAsBM,EAAMgB,MAQhC,MAAkB,WAAd3B,IACAyB,EAAMG,MAAQ,SAGXN,OAAOC,OAAOC,EAAUC,IAI1BI,EAAgC9B,EAAiB,iBAEjD+B,EAA6B/B,EAAiB,cAE9CgC,EAA8BhC,EAAiB,eAE/CiC,EAAgCjC,EAAiB,8JAM1DE,IAAAA,CAEA4B,8BAA+B,CAC3B3B,EACAC,IAEAJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrD2B,2BAA4B,CACxB5B,EACAC,IAEAJ,EAAiB,aAAjBA,CAAkCE,EAAMC,EAAMC,GAClD4B,4BAA6B,CACzB7B,EACAC,IAEAJ,EAAiB,cAAjBA,CAAmCE,EAAMC,EAAMC,GACnD6B,8BAA+B,CAC3B9B,EACAC,IAEAJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrD8B,oCAAqC,CACjC/B,EACAC,IAEAJ,EAAiB,sBAAjBA,CAA2CE,EAAMC,EAAMC,GAC3D+B,qBAAsB,CAClBhC,EACAC,IAEAJ,EAAiB,OAAjBA,CAA4BE,EAAMC,EAAMC,GAC5CgC,mBAAoB,CAChBjC,EACAC,IAEAJ,EAAiB,SAAjBA,CACIE,EACAC,EACAC"}
|
|
1
|
+
{"version":3,"file":"registerWithMask.cjs","sources":["../../../../../src/utilities/formatters/util/registerWithMask.ts"],"sourcesContent":["import type { ChangeEvent, KeyboardEventHandler } from \"react\";\nimport type {\n FieldValues,\n Path,\n PathValue,\n RegisterOptions,\n UseFormRegisterReturn,\n UseFormReturn,\n} from \"react-hook-form\";\nimport { formatDateString } from \"../date/formatDate.js\";\nimport { formatFodselsnummer } from \"../fodselsnummer/formatFodselsnummer.js\";\nimport { formatKontonummer } from \"../kontonummer/formatKontonummer.js\";\nimport { formatKortnummer } from \"../kortnummer/formatKortnummer.js\";\nimport { formatOrganisasjonsnummer } from \"../organisasjonsnummer/formatOrganisasjonsnummer.js\";\nimport { formatTelefonnummer } from \"../telefonnummer/formatTelefonnummer.js\";\nimport { formatNumber } from \"./formatNumber.js\";\n\nconst formatters = {\n date: formatDateString,\n fodselsnummer: formatFodselsnummer,\n kortnummer: formatKortnummer,\n kontonummer: formatKontonummer,\n telefonnummer: formatTelefonnummer,\n number: formatNumber,\n organisasjonsnummer: formatOrganisasjonsnummer,\n};\nexport type Formatter = keyof typeof formatters;\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nexport type RegisterWithMaskOptions<T extends FieldValues> = Omit<\n RegisterOptions<T>,\n \"setValueAs\"\n>;\n\nconst registerWithMask =\n (formatter: Formatter) =>\n <T extends FieldValues>(\n form: UseFormReturn<T>,\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ) => {\n let onKeyDownCaretPosition = 0;\n let onKeyDownKeyPressed = \"\";\n let deletedCharactersOnKeyDown = \"\";\n\n const setValueAs = (value: string) => value.replace(/\\s/g, \"\");\n const onChange = (event: ChangeEvent<HTMLInputElement>) => {\n options?.onChange?.(event);\n\n // save some values before event.target.value change\n let onChangeCaretPosition = 0;\n const inputLength = event.target.value.length;\n\n // type checking formalities\n if (event.target.selectionStart !== null) {\n onChangeCaretPosition = event.target.selectionStart;\n }\n\n const formattedValue = formatters[formatter](event.target.value, {\n partial: true,\n });\n const formattedLength = formattedValue.toString().length;\n\n form.setValue(name, formattedValue as PathValue<T, Path<T>>);\n\n let newPosition: number | null = null;\n\n if ([\"Delete\", \"Backspace\"].includes(onKeyDownKeyPressed)) {\n // handle removing content\n // calculate how much to move the caret, this also accounts for removing sections of text\n const delta = onKeyDownCaretPosition - onChangeCaretPosition;\n const formattedLengthChange =\n deletedCharactersOnKeyDown.trim() === \"\"\n ? 0\n : formattedLength - inputLength;\n\n // calculate new caret position (- because we move backwards)\n newPosition =\n onKeyDownCaretPosition - delta + formattedLengthChange;\n } else if (\n onChangeCaretPosition < event.target.value.length ||\n inputLength !== formattedLength\n ) {\n // handle adding content from inside the string\n // calculate how much to move the caret forwards\n const delta = formattedLength - inputLength;\n\n // calculate new caret position (+ because we move forwards)\n newPosition = onChangeCaretPosition + delta;\n }\n\n if (newPosition !== null) {\n const clampedPosition = clamp(newPosition, 0, formattedLength);\n\n event.target.setSelectionRange(\n clampedPosition,\n clampedPosition,\n undefined,\n );\n }\n };\n\n const registerOptions: RegisterOptions<T, Path<T>> = {\n setValueAs,\n onChange,\n };\n if (options) {\n Object.assign(registerOptions, options);\n }\n const register = form.register(name, registerOptions);\n\n // save the caret position before the change occured\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n deletedCharactersOnKeyDown = \"\";\n\n const input = event.target as HTMLInputElement;\n const { selectionStart, selectionEnd, value } = input;\n\n if (selectionStart !== null) {\n onKeyDownCaretPosition = selectionStart;\n\n if (selectionEnd !== null && selectionEnd > selectionStart) {\n deletedCharactersOnKeyDown = value.slice(\n selectionStart,\n selectionEnd,\n );\n } else if (event.key === \"Backspace\") {\n deletedCharactersOnKeyDown =\n value[onKeyDownCaretPosition - 1] ?? \"\";\n } else if (event.key === \"Delete\") {\n deletedCharactersOnKeyDown =\n value[onKeyDownCaretPosition] ?? \"\";\n }\n }\n onKeyDownKeyPressed = event.key;\n };\n\n // add onKeyDown event handler to the registered input\n const extra: Record<string, unknown> = {\n onKeyDown,\n };\n\n if (formatter === \"number\") {\n extra.align = \"right\"; // Se https://github.com/fremtind/jokul/pull/2898\n }\n\n return Object.assign(register, extra);\n };\n\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithFodselsnummerMask = registerWithMask(\"fodselsnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKortnummerMask = registerWithMask(\"kortnummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithKontonummerMask = registerWithMask(\"kontonummer\");\n/** @deprecated Bruk `registerWithMasks` i stedet */\nexport const registerWithTelefonnummerMask = registerWithMask(\"telefonnummer\");\n\n/**\n * Hjelpefunksjon for React Hook Form som lar deg bruke formateringsfunksjonene i denne pakken som inputmasker.\n */\nexport const registerWithMasks = <T extends FieldValues>(\n form: UseFormReturn<T>,\n) => ({\n registerWithFodselsnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"fodselsnummer\")<T>(form, name, options),\n registerWithKortnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"kortnummer\")<T>(form, name, options),\n registerWithKontonummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"kontonummer\")<T>(form, name, options),\n registerWithTelefonnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"telefonnummer\")<T>(form, name, options),\n registerWithOrganisasjonsnummerMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"organisasjonsnummer\")<T>(form, name, options),\n registerWithDateMask: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn =>\n registerWithMask(\"date\")<T>(form, name, options),\n registerWithNumber: (\n name: Path<T>,\n options?: RegisterWithMaskOptions<T>,\n ): UseFormRegisterReturn & { align: \"right\" } =>\n registerWithMask(\"number\")<T>(\n form,\n name,\n options,\n ) as unknown as UseFormRegisterReturn & {\n align: \"right\";\n },\n});\n"],"names":["formatters","date","formatDateString","fodselsnummer","formatFodselsnummer","kortnummer","formatKortnummer","kontonummer","formatKontonummer","telefonnummer","formatTelefonnummer","number","formatNumber","organisasjonsnummer","formatOrganisasjonsnummer","registerWithMask","formatter","form","name","options","onKeyDownCaretPosition","onKeyDownKeyPressed","deletedCharactersOnKeyDown","registerOptions","setValueAs","value","replace","onChange","event","onChangeCaretPosition","inputLength","target","length","selectionStart","formattedValue","partial","formattedLength","toString","setValue","newPosition","includes","delta","formattedLengthChange","trim","clampedPosition","min","max","Math","clamp","setSelectionRange","Object","assign","register","extra","onKeyDown","input","selectionEnd","slice","key","align","registerWithFodselsnummerMask","registerWithKortnummerMask","registerWithKontonummerMask","registerWithTelefonnummerMask","registerWithOrganisasjonsnummerMask","registerWithDateMask","registerWithNumber"],"mappings":"0aAiBMA,EAAa,CACfC,KAAMC,EAAAA,iBACNC,cAAeC,EAAAA,oBACfC,WAAYC,EAAAA,iBACZC,YAAaC,EAAAA,kBACbC,cAAeC,EAAAA,oBACfC,OAAQC,EAAAA,aACRC,oBAAqBC,EAAAA,2BAYnBC,EACDC,GACD,CACIC,EACAC,EACAC,KAEA,IAAIC,EAAyB,EACzBC,EAAsB,GACtBC,EAA6B,GA2DjC,MAAMC,EAA+C,CACjDC,WA1DgBC,GAAkBA,EAAMC,QAAQ,MAAO,IA2DvDC,SA1DcC,IACdT,GAASQ,WAAWC,GAGpB,IAAIC,EAAwB,EAC5B,MAAMC,EAAcF,EAAMG,OAAON,MAAMO,OAGH,OAAhCJ,EAAMG,OAAOE,iBACbJ,EAAwBD,EAAMG,OAAOE,gBAGzC,MAAMC,EAAiBlC,EAAWgB,GAAWY,EAAMG,OAAON,MAAO,CAC7DU,SAAS,IAEPC,EAAkBF,EAAeG,WAAWL,OAElDf,EAAKqB,SAASpB,EAAMgB,GAEpB,IAAIK,EAA6B,KAEjC,GAAI,CAAC,SAAU,aAAaC,SAASnB,GAAsB,CAGvD,MAAMoB,EAAQrB,EAAyBS,EACjCa,EACoC,KAAtCpB,EAA2BqB,OACrB,EACAP,EAAkBN,EAG5BS,EACInB,EAAyBqB,EAAQC,CACzC,MAAA,GACIb,EAAwBD,EAAMG,OAAON,MAAMO,QAC3CF,IAAgBM,EAClB,CAMEG,EAAcV,GAHAO,EAAkBN,EAIpC,CAEA,GAAoB,OAAhBS,EAAsB,CACtB,MAAMK,EAlER,EAACnB,EAAeoB,EAAaC,IACvCC,KAAKF,IAAIE,KAAKD,IAAIrB,EAAOoB,GAAMC,GAiEKE,CAAMT,EAAa,EAAGH,GAE9CR,EAAMG,OAAOkB,kBACTL,EACAA,OACA,EAER,IAOAzB,GACA+B,OAAOC,OAAO5B,EAAiBJ,GAEnC,MAAMiC,EAAWnC,EAAKmC,SAASlC,EAAMK,GA6B/B8B,EAAiC,CACnCC,UA3BuD1B,IACvDN,EAA6B,GAE7B,MAAMiC,EAAQ3B,EAAMG,QACZE,eAAAA,EAAgBuB,aAAAA,EAAc/B,MAAAA,GAAU8B,EAEzB,OAAnBtB,IACAb,EAAyBa,EAEJ,OAAjBuB,GAAyBA,EAAevB,EACxCX,EAA6BG,EAAMgC,MAC/BxB,EACAuB,GAEiB,cAAd5B,EAAM8B,IACbpC,EACIG,EAAML,EAAyB,IAAM,GACpB,WAAdQ,EAAM8B,MACbpC,EACIG,EAAML,IAA2B,KAG7CC,EAAsBO,EAAM8B,MAQhC,MAAkB,WAAd1C,IACAqC,EAAMM,MAAQ,SAGXT,OAAOC,OAAOC,EAAUC,IAI1BO,EAAgC7C,EAAiB,iBAEjD8C,EAA6B9C,EAAiB,cAE9C+C,EAA8B/C,EAAiB,eAE/CgD,EAAgChD,EAAiB,8JAM1DE,IAAAA,CAEA2C,8BAA+B,CAC3B1C,EACAC,IAEAJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrD0C,2BAA4B,CACxB3C,EACAC,IAEAJ,EAAiB,aAAjBA,CAAkCE,EAAMC,EAAMC,GAClD2C,4BAA6B,CACzB5C,EACAC,IAEAJ,EAAiB,cAAjBA,CAAmCE,EAAMC,EAAMC,GACnD4C,8BAA+B,CAC3B7C,EACAC,IAEAJ,EAAiB,gBAAjBA,CAAqCE,EAAMC,EAAMC,GACrD6C,oCAAqC,CACjC9C,EACAC,IAEAJ,EAAiB,sBAAjBA,CAA2CE,EAAMC,EAAMC,GAC3D8C,qBAAsB,CAClB/C,EACAC,IAEAJ,EAAiB,OAAjBA,CAA4BE,EAAMC,EAAMC,GAC5C+C,mBAAoB,CAChBhD,EACAC,IAEAJ,EAAiB,SAAjBA,CACIE,EACAC,EACAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","sources":["../../../src/utilities/types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n// @ts-ignore Typescript vil klage her dersom ikke tokens er bygget ennå\nimport type { default as tokens } from \"../tokens.js\";\n\n// Brukes til å extende props for komponenter som skal støtte data-testautoid ifbm. Test Complete\nexport interface DataTestAutoId {\n \"data-testautoid\"?: string;\n}\n\nexport
|
|
1
|
+
{"version":3,"file":"types.cjs","sources":["../../../src/utilities/types.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n// @ts-ignore Typescript vil klage her dersom ikke tokens er bygget ennå\nimport type { default as tokens } from \"../tokens.js\";\n\n// Brukes til å extende props for komponenter som skal støtte data-testautoid ifbm. Test Complete\nexport interface DataTestAutoId {\n \"data-testautoid\"?: string;\n}\n\nexport const BRANDS = [] as const;\nexport type Brand = (typeof BRANDS)[number];\nexport type Size = \"small\" | \"medium\" | \"large\";\nexport type ColorScheme = \"light\" | \"dark\";\n\n/**\n * Eksplisitte typer for modusene som brukes i Jøkul, slik at de kan brukes aktivt i komponentene\n * @example type Props = { myProp: string } & JokulModes;\n * @example interface Props extends JokulModes { myProp: string };\n */\nexport interface JokulModes {\n \"data-brand\"?: Brand;\n \"data-size\"?: Size;\n \"data-theme\"?: ColorScheme;\n}\n\nexport type Easing = keyof typeof tokens.motion.easing;\nexport type Timing = keyof typeof tokens.motion.timing;\n\n/**\n * Etter React 18 er ikke children lenger en _implicit type_. Tanken er at\n * TypeScript skal kunne oppdage når komponenten forventer children og ikke\n * får det, eller at komponenten blir _gitt_ children men ikke forventer det.\n *\n * Om komponenten din ikke tar i mot children er det i prinsippet ikke noe du\n * trenger å gjøre. Om den derimot tar i mot children bør du spesifisere det.\n * Dersom de er valgfrie (for eksempel om du har en standardverdi) bruker du\n * WithOptionalChildren.\n *\n * @see WithOptionalChildren\n * @see https://solverfox.dev/writing/no-implicit-children/\n */\nexport interface WithChildren {\n children: ReactNode | ReactNode[];\n}\n\n/**\n * Etter React 18 er ikke children lenger en _implicit type_. Tanken er at\n * TypeScript skal kunne oppdage når komponenten forventer children og ikke\n * får det, eller at komponenten blir _gitt_ children men ikke forventer det.\n *\n * Om komponenten din ikke tar i mot children er det i prinsippet ikke noe du\n * trenger å gjøre. Om den derimot tar i mot children bør du spesifisere det.\n *\n * Om du alltid forventer å få children, bruk WithChildren.\n *\n * @see WithChildren\n * @see https://solverfox.dev/writing/no-implicit-children/\n */\nexport interface WithOptionalChildren {\n children?: ReactNode | ReactNode[];\n}\n"],"names":[],"mappings":"+FASsB"}
|
|
@@ -3,10 +3,20 @@ import { default as tokens } from '../tokens.cjs';
|
|
|
3
3
|
export interface DataTestAutoId {
|
|
4
4
|
"data-testautoid"?: string;
|
|
5
5
|
}
|
|
6
|
-
export type ColorScheme = "light" | "dark";
|
|
7
|
-
export type Size = "small" | "medium" | "large";
|
|
8
6
|
export declare const BRANDS: readonly [];
|
|
9
7
|
export type Brand = (typeof BRANDS)[number];
|
|
8
|
+
export type Size = "small" | "medium" | "large";
|
|
9
|
+
export type ColorScheme = "light" | "dark";
|
|
10
|
+
/**
|
|
11
|
+
* Eksplisitte typer for modusene som brukes i Jøkul, slik at de kan brukes aktivt i komponentene
|
|
12
|
+
* @example type Props = { myProp: string } & JokulModes;
|
|
13
|
+
* @example interface Props extends JokulModes { myProp: string };
|
|
14
|
+
*/
|
|
15
|
+
export interface JokulModes {
|
|
16
|
+
"data-brand"?: Brand;
|
|
17
|
+
"data-size"?: Size;
|
|
18
|
+
"data-theme"?: ColorScheme;
|
|
19
|
+
}
|
|
10
20
|
export type Easing = keyof typeof tokens.motion.easing;
|
|
11
21
|
export type Timing = keyof typeof tokens.motion.timing;
|
|
12
22
|
/**
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { CheckboxPanelProps } from './types.js';
|
|
3
|
-
export declare const CheckboxPanel:
|
|
3
|
+
export declare const CheckboxPanel: React.ForwardRefExoticComponent<CheckboxPanelProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{forwardRef as e}from"react";import{InputPanel as t}from"../input-panel/InputPanel.js";const n=e(function(e,n){return r(t,{...e,ref:n,type:"checkbox"})});export{n as CheckboxPanel};
|
|
2
2
|
//# sourceMappingURL=CheckboxPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxPanel.js","sources":["../../../../src/components/checkbox-panel/CheckboxPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport { InputPanel } from \"../input-panel/InputPanel.js\";\nimport type { CheckboxPanelProps } from \"./types.js\";\n\nexport const CheckboxPanel = (props
|
|
1
|
+
{"version":3,"file":"CheckboxPanel.js","sources":["../../../../src/components/checkbox-panel/CheckboxPanel.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { InputPanel } from \"../input-panel/InputPanel.js\";\nimport type { CheckboxPanelProps } from \"./types.js\";\n\nexport const CheckboxPanel = forwardRef<HTMLInputElement, CheckboxPanelProps>(\n function CheckboxPanel(props, ref) {\n return <InputPanel {...props} ref={ref} type=\"checkbox\" />;\n },\n);\n"],"names":["CheckboxPanel","forwardRef","props","ref","InputPanel","type"],"mappings":"qIAIO,MAAMA,EAAgBC,EACzB,SAAuBC,EAAOC,GAC1B,SAAQC,EAAA,IAAeF,EAAOC,IAAAA,EAAUE,KAAK,YACjD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ExpandablePanel as a}from"./ExpandablePanel.js";import{Expander as
|
|
1
|
+
import{ExpandablePanel as a}from"./ExpandablePanel.js";import{Expander as o}from"./Expander.js";import{Accordion as r}from"./Accordion.js";export{r as Accordion,a as ExpandablePanel,o as Expander};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export declare const InputPanel: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "children"> & {
|
|
2
|
+
export declare const InputPanel: React.ForwardRefExoticComponent<Omit<React.InputHTMLAttributes<HTMLInputElement>, "children"> & import('../../utilities/types.js').JokulModes & {
|
|
3
3
|
label: string;
|
|
4
4
|
type: "radio" | "checkbox";
|
|
5
5
|
amount?: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,jsx as e}from"react/jsx-runtime";import{c as o}from"../../../clsx-BeLtu-UY.js";import{forwardRef as n}from"react";import{Checkbox as t}from"../checkbox/Checkbox.js";import{RadioButton as i}from"../radio-button/RadioButton.js";import"../../hooks/useId/useId.js";import"../icon/icons/ErrorIcon.js";import"../icon/icons/SuccessIcon.js";import"../icon/icons/WarningIcon.js";import"../radio-button/radioGroupContext.js";import"../radio-button/BaseRadioButton.js";const r=n(function({className:n,description:r,type:s,label:c,amount:l,value:d=c,name:m="Panelvalg",children:p,extraLabel:u,alwaysOpen:j=!1,"data-size":h,"data-theme":x,...f},k){return a("div",{className:o("jkl-input-panel",`jkl-${s}-panel`,n),"data-always-open":j,"data-size":h,"data-theme":x,children:[a("div",{className:"jkl-input-panel__header",children:["checkbox"===s&&e(t,{value:d?.toString(),name:m,ref:k,...f,children:c}),"radio"===s&&e(i,{value:d?.toString(),name:m,ref:k,...f,children:c}),(l||u)&&e("span",{className:"jkl-input-panel__header__amount",children:l||u})]}),(r||p)&&e("div",{className:"jkl-input-panel__description",children:r||p})]})});export{r as InputPanel};
|
|
2
2
|
//# sourceMappingURL=InputPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputPanel.js","sources":["../../../../src/components/input-panel/InputPanel.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type ForwardedRef, forwardRef } from \"react\";\nimport { Checkbox } from \"../checkbox/index.js\";\nimport { RadioButton } from \"../radio-button/index.js\";\nimport type { InputPanelProps } from \"./types.js\";\n\nexport const InputPanel = forwardRef(function BasePanel(\n {\n className,\n description,\n type,\n label,\n amount,\n value = label,\n name = \"Panelvalg\",\n children,\n extraLabel,\n alwaysOpen = false,\n ...rest\n }: InputPanelProps,\n ref: ForwardedRef<HTMLInputElement>,\n) {\n return (\n <div\n className={clsx(\"jkl-input-panel\", `jkl-${type}-panel`, className)}\n
|
|
1
|
+
{"version":3,"file":"InputPanel.js","sources":["../../../../src/components/input-panel/InputPanel.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type ForwardedRef, forwardRef } from \"react\";\nimport { Checkbox } from \"../checkbox/index.js\";\nimport { RadioButton } from \"../radio-button/index.js\";\nimport type { InputPanelProps } from \"./types.js\";\n\nexport const InputPanel = forwardRef(function BasePanel(\n {\n className,\n description,\n type,\n label,\n amount,\n value = label,\n name = \"Panelvalg\",\n children,\n extraLabel,\n alwaysOpen = false,\n \"data-size\": dataSize,\n \"data-theme\": dataTheme,\n ...rest\n }: InputPanelProps,\n ref: ForwardedRef<HTMLInputElement>,\n) {\n return (\n <div\n className={clsx(\"jkl-input-panel\", `jkl-${type}-panel`, className)}\n data-always-open={alwaysOpen}\n data-size={dataSize}\n data-theme={dataTheme}\n >\n <div className=\"jkl-input-panel__header\">\n {type === \"checkbox\" && (\n <Checkbox\n value={value?.toString()}\n name={name}\n ref={ref}\n {...rest}\n >\n {label}\n </Checkbox>\n )}\n {type === \"radio\" && (\n <RadioButton\n value={value?.toString()}\n name={name}\n ref={ref}\n {...rest}\n >\n {label}\n </RadioButton>\n )}\n {(amount || extraLabel) && (\n <span className=\"jkl-input-panel__header__amount\">\n {amount || extraLabel}\n </span>\n )}\n </div>\n {(description || children) && (\n <div className=\"jkl-input-panel__description\">\n {description || children}\n </div>\n )}\n </div>\n );\n});\n"],"names":["InputPanel","forwardRef","className","description","type","label","amount","value","name","children","extraLabel","alwaysOpen","dataSize","dataTheme","rest","ref","jsxs","clsx","jsx","Checkbox","toString","RadioButton"],"mappings":"2dAMO,MAAMA,EAAaC,EAAW,UAE7BC,UAAAA,EACAC,YAAAA,EACAC,KAAAA,EACAC,MAAAA,EACAC,OAAAA,EACAC,MAAAA,EAAQF,EACRG,KAAAA,EAAO,YACPC,SAAAA,EACAC,WAAAA,EACAC,WAAAA,GAAa,EACb,YAAaC,EACb,aAAcC,KACXC,GAEPC,GAEA,OACIC,EAAC,MAAA,CACGd,UAAWe,EAAK,kBAAmB,OAAOb,UAAcF,GACxD,mBAAkBS,EAClB,YAAWC,EACX,aAAYC,EAEZJ,SAAA,CAAAO,EAAC,MAAA,CAAId,UAAU,0BACVO,SAAA,CAAS,aAATL,GACGc,EAACC,EAAA,CACGZ,MAAOA,GAAOa,WACdZ,KAAAA,EACAO,IAAAA,KACID,EAEHL,SAAAJ,IAGC,UAATD,GACGc,EAACG,EAAA,CACGd,MAAOA,GAAOa,WACdZ,KAAAA,EACAO,IAAAA,KACID,EAEHL,SAAAJ,KAGPC,GAAUI,IACRQ,EAAC,QAAKhB,UAAU,kCACXO,YAAUC,QAIrBP,GAAeM,IACbS,EAAC,OAAIhB,UAAU,+BACVO,YAAeA,MAKpC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
|
|
2
|
+
import { JokulModes } from '../../utilities/types.js';
|
|
3
|
+
export type InputPanelProps = Omit<InputHTMLAttributes<HTMLInputElement>, "children"> & JokulModes & {
|
|
3
4
|
label: string;
|
|
4
5
|
type: "radio" | "checkbox";
|
|
5
6
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as s,jsxs as e}from"react/jsx-runtime";import{c as a}from"../../../clsx-BeLtu-UY.js";import i,{forwardRef as n}from"react";import{useId as l}from"../../hooks/useId/useId.js";import{ErrorIcon as r}from"../icon/icons/ErrorIcon.js";import{InfoIcon as c}from"../icon/icons/InfoIcon.js";import{SuccessIcon as o}from"../icon/icons/SuccessIcon.js";import{WarningIcon as m}from"../icon/icons/WarningIcon.js";import{DismissButton as t}from"./DismissButton.js";const d=e=>{switch(e){case"error":return s(r,{className:"jkl-message__icon"});case"info":return s(c,{className:"jkl-message__icon"});case"success":return s(o,{className:"jkl-message__icon"});case"warning":return s(m,{className:"jkl-message__icon"});default:return null}};function g(r){const c=n((n,c)=>{const{id:o,title:m,fullWidth:g,className:u="",dismissed:f,dismissAction:j,children:
|
|
1
|
+
import{jsx as s,jsxs as e}from"react/jsx-runtime";import{c as a}from"../../../clsx-BeLtu-UY.js";import i,{forwardRef as n}from"react";import{useId as l}from"../../hooks/useId/useId.js";import{ErrorIcon as r}from"../icon/icons/ErrorIcon.js";import{InfoIcon as c}from"../icon/icons/InfoIcon.js";import{SuccessIcon as o}from"../icon/icons/SuccessIcon.js";import{WarningIcon as m}from"../icon/icons/WarningIcon.js";import{DismissButton as t}from"./DismissButton.js";const d=e=>{switch(e){case"error":return s(r,{className:"jkl-message__icon"});case"info":return s(c,{className:"jkl-message__icon"});case"success":return s(o,{className:"jkl-message__icon"});case"warning":return s(m,{className:"jkl-message__icon"});default:return null}};function g(r){const c=n((n,c)=>{const{id:o,title:m,fullWidth:g,className:u="",dismissed:f,dismissAction:j,children:k,role:h,..._}=n,p=l(o||"jkl-message",{generateSuffix:!o}),N=i.Children.map(k,s=>"string"==typeof s)?.[0]?s("p",{children:k}):k;return e("div",{..._,id:o,ref:c,className:a("jkl-message",`jkl-message--${r}`,u,{"jkl-message--full":g,"jkl-message--dismissed":f}),role:h,children:[d(r),e("div",{className:"jkl-message__content","data-theme":"light",children:[m&&s("p",{className:"jkl-message__title",children:m}),s("div",{className:"jkl-message__message",children:N})]}),j?.handleDismiss&&s(t,{"aria-controls":p,className:"jkl-message__dismiss-button",label:j.buttonTitle||"Lukk",onClick:j.handleDismiss})]})});return c.displayName="Message",c}const u=n((n,r)=>{const{id:c,title:o,fullWidth:m,className:g="",dismissed:u,dismissAction:f,children:j,variant:k="info",role:h,..._}=n,p=l(c||"jkl-message",{generateSuffix:!c}),N=i.Children.map(j,s=>"string"==typeof s)?.[0]?s("p",{children:j}):j;return e("div",{..._,id:c,ref:r,className:a("jkl-message",`jkl-message--${k}`,g,{"jkl-message--full":m,"jkl-message--dismissed":u}),role:h,children:[d(k),e("div",{className:"jkl-message__content","data-theme":"light",children:[o&&s("p",{className:"jkl-message__title",children:o}),s("div",{className:"jkl-message__message",children:N})]}),f?.handleDismiss&&s(t,{"aria-controls":p,className:"jkl-message__dismiss-button",label:f.buttonTitle||"Lukk",onClick:f.handleDismiss})]})}),f=g("info");f.displayName="InfoMessage";const j=g("error");j.displayName="ErrorMessage";const k=g("warning");k.displayName="WarningMessage";const h=g("success");h.displayName="SuccessMessage";export{j as ErrorMessage,f as InfoMessage,u as Message,h as SuccessMessage,k as WarningMessage};
|
|
2
2
|
//# sourceMappingURL=Message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Message.js","sources":["../../../../src/components/message/Message.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { ErrorIcon } from \"../icon/icons/ErrorIcon.js\";\nimport { InfoIcon } from \"../icon/icons/InfoIcon.js\";\nimport { SuccessIcon } from \"../icon/icons/SuccessIcon.js\";\nimport { WarningIcon } from \"../icon/icons/WarningIcon.js\";\nimport { DismissButton } from \"./DismissButton.js\";\nimport type { MessageProps } from \"./types.js\";\n\nconst getIcon = (messageType: MessageProps[\"variant\"]) => {\n switch (messageType) {\n case \"error\":\n return <ErrorIcon className=\"jkl-message__icon\" />;\n case \"info\":\n return <InfoIcon className=\"jkl-message__icon\" />;\n case \"success\":\n return <SuccessIcon className=\"jkl-message__icon\" />;\n case \"warning\":\n return <WarningIcon className=\"jkl-message__icon\" />;\n default:\n return null;\n }\n};\n\nfunction messageFactory(messageType: MessageProps[\"variant\"]) {\n const Message = forwardRef<HTMLDivElement, MessageProps>((props, ref) => {\n const {\n id,\n title,\n fullWidth,\n className = \"\",\n dismissed,\n dismissAction,\n children,\n role,\n ...rest\n } = props;\n\n const boxId = useId(id || \"jkl-message\", { generateSuffix: !id });\n\n const hasStringChild = React.Children.map(\n children,\n (child) => typeof child === \"string\",\n );\n const newChildren = hasStringChild?.[0] ? <p>{children}</p> : children;\n\n return (\n <div\n {...rest}\n id={id}\n ref={ref}\n className={clsx(\n \"jkl-message\",\n `jkl-message--${messageType}`,\n className,\n {\n \"jkl-message--full\": fullWidth,\n \"jkl-message--dismissed\": dismissed,\n },\n )}\n role={role}\n >\n {getIcon(messageType)}\n <div className=\"jkl-message__content\" data-theme=\"light\">\n {title && <p className=\"jkl-message__title\">{title}</p>}\n <div className=\"jkl-message__message\">{newChildren}</div>\n </div>\n {dismissAction?.handleDismiss && (\n <DismissButton\n
|
|
1
|
+
{"version":3,"file":"Message.js","sources":["../../../../src/components/message/Message.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { ErrorIcon } from \"../icon/icons/ErrorIcon.js\";\nimport { InfoIcon } from \"../icon/icons/InfoIcon.js\";\nimport { SuccessIcon } from \"../icon/icons/SuccessIcon.js\";\nimport { WarningIcon } from \"../icon/icons/WarningIcon.js\";\nimport { DismissButton } from \"./DismissButton.js\";\nimport type { MessageProps } from \"./types.js\";\n\nconst getIcon = (messageType: MessageProps[\"variant\"]) => {\n switch (messageType) {\n case \"error\":\n return <ErrorIcon className=\"jkl-message__icon\" />;\n case \"info\":\n return <InfoIcon className=\"jkl-message__icon\" />;\n case \"success\":\n return <SuccessIcon className=\"jkl-message__icon\" />;\n case \"warning\":\n return <WarningIcon className=\"jkl-message__icon\" />;\n default:\n return null;\n }\n};\n\nfunction messageFactory(messageType: MessageProps[\"variant\"]) {\n const Message = forwardRef<HTMLDivElement, MessageProps>((props, ref) => {\n const {\n id,\n title,\n fullWidth,\n className = \"\",\n dismissed,\n dismissAction,\n children,\n role,\n ...rest\n } = props;\n\n const boxId = useId(id || \"jkl-message\", { generateSuffix: !id });\n\n const hasStringChild = React.Children.map(\n children,\n (child) => typeof child === \"string\",\n );\n const newChildren = hasStringChild?.[0] ? <p>{children}</p> : children;\n\n return (\n <div\n {...rest}\n id={id}\n ref={ref}\n className={clsx(\n \"jkl-message\",\n `jkl-message--${messageType}`,\n className,\n {\n \"jkl-message--full\": fullWidth,\n \"jkl-message--dismissed\": dismissed,\n },\n )}\n role={role}\n >\n {getIcon(messageType)}\n <div className=\"jkl-message__content\" data-theme=\"light\">\n {title && <p className=\"jkl-message__title\">{title}</p>}\n <div className=\"jkl-message__message\">{newChildren}</div>\n </div>\n {dismissAction?.handleDismiss && (\n <DismissButton\n aria-controls={boxId}\n className=\"jkl-message__dismiss-button\"\n label={dismissAction.buttonTitle || \"Lukk\"}\n onClick={dismissAction.handleDismiss}\n />\n )}\n </div>\n );\n });\n\n Message.displayName = \"Message\";\n\n return Message;\n}\n\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(\n (props, ref) => {\n const {\n id,\n title,\n fullWidth,\n className = \"\",\n dismissed,\n dismissAction,\n children,\n variant = \"info\",\n role,\n ...rest\n } = props;\n\n const boxId = useId(id || \"jkl-message\", { generateSuffix: !id });\n\n const hasStringChild = React.Children.map(\n children,\n (child) => typeof child === \"string\",\n );\n const newChildren = hasStringChild?.[0] ? <p>{children}</p> : children;\n\n return (\n <div\n {...rest}\n id={id}\n ref={ref}\n className={clsx(\n \"jkl-message\",\n `jkl-message--${variant}`,\n className,\n {\n \"jkl-message--full\": fullWidth,\n \"jkl-message--dismissed\": dismissed,\n },\n )}\n role={role}\n >\n {getIcon(variant)}\n <div className=\"jkl-message__content\" data-theme=\"light\">\n {title && <p className=\"jkl-message__title\">{title}</p>}\n <div className=\"jkl-message__message\">{newChildren}</div>\n </div>\n {dismissAction?.handleDismiss && (\n <DismissButton\n aria-controls={boxId}\n className=\"jkl-message__dismiss-button\"\n label={dismissAction.buttonTitle || \"Lukk\"}\n onClick={dismissAction.handleDismiss}\n />\n )}\n </div>\n );\n },\n);\n\n/**\n * @deprecated bruk Message med variant=\"info\"\n */\nexport const InfoMessage = messageFactory(\"info\");\nInfoMessage.displayName = \"InfoMessage\";\n/**\n * @deprecated bruk Message med variant=\"error\"\n */\nexport const ErrorMessage = messageFactory(\"error\");\nErrorMessage.displayName = \"ErrorMessage\";\n/**\n * @deprecated bruk Message med variant=\"warning\"\n */\nexport const WarningMessage = messageFactory(\"warning\");\nWarningMessage.displayName = \"WarningMessage\";\n/**\n * @deprecated bruk Message med variant=\"success\"\n */\nexport const SuccessMessage = messageFactory(\"success\");\nSuccessMessage.displayName = \"SuccessMessage\";\n"],"names":["getIcon","messageType","jsx","ErrorIcon","className","InfoIcon","SuccessIcon","WarningIcon","messageFactory","Message","forwardRef","props","ref","id","title","fullWidth","dismissed","dismissAction","children","role","rest","boxId","useId","generateSuffix","newChildren","React","Children","map","child","jsxs","clsx","handleDismiss","DismissButton","label","buttonTitle","onClick","displayName","variant","InfoMessage","ErrorMessage","WarningMessage","SuccessMessage"],"mappings":"8cAUA,MAAMA,EAAWC,IACb,OAAQA,GACJ,IAAK,QACD,OAAOC,EAACC,EAAA,CAAUC,UAAU,sBAChC,IAAK,OACD,OAAOF,EAACG,EAAA,CAASD,UAAU,sBAC/B,IAAK,UACD,OAAOF,EAACI,EAAA,CAAYF,UAAU,sBAClC,IAAK,UACD,OAAOF,EAACK,EAAA,CAAYH,UAAU,sBAClC,QACI,OAAO,OAInB,SAASI,EAAeP,GACpB,MAAMQ,EAAUC,EAAyC,CAACC,EAAOC,KAC7D,MACIC,GAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAX,UAAAA,EAAY,GACZY,UAAAA,EACAC,cAAAA,EACAC,SAAAA,EACAC,KAAAA,KACGC,GACHT,EAEEU,EAAQC,EAAMT,GAAM,cAAe,CAAEU,gBAAiBV,IAMtDW,EAJiBC,EAAMC,SAASC,IAClCT,EACCU,GAA2B,iBAAVA,KAEe,GAAK1B,EAAC,IAAA,CAAGgB,SAAAA,IAAgBA,EAE9D,OACIW,EAAC,MAAA,IACOT,EACJP,GAAAA,EACAD,IAAAA,EACAR,UAAW0B,EACP,cACA,gBAAgB7B,IAChBG,EACA,CACI,oBAAqBW,EACrB,yBAA0BC,IAGlCG,KAAAA,EAECD,SAAA,CAAAlB,EAAQC,GACT4B,EAAC,MAAA,CAAIzB,UAAU,uBAAuB,aAAW,QAC5Cc,SAAA,CAAAJ,GAASZ,EAAC,IAAA,CAAEE,UAAU,qBAAsBc,SAAAJ,IAC7CZ,EAAC,MAAA,CAAIE,UAAU,uBAAwBc,SAAAM,OAE1CP,GAAec,eACZ7B,EAAC8B,EAAA,CACG,gBAAeX,EACfjB,UAAU,8BACV6B,MAAOhB,EAAciB,aAAe,OACpCC,QAASlB,EAAcc,qBAO3CtB,OAAAA,EAAQ2B,YAAc,UAEf3B,CACX,CAEO,MAAMA,EAAUC,EACnB,CAACC,EAAOC,KACJ,MACIC,GAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAX,UAAAA,EAAY,GACZY,UAAAA,EACAC,cAAAA,EACAC,SAAAA,EACAmB,QAAAA,EAAU,OACVlB,KAAAA,KACGC,GACHT,EAEEU,EAAQC,EAAMT,GAAM,cAAe,CAAEU,gBAAiBV,IAMtDW,EAJiBC,EAAMC,SAASC,IAClCT,EACCU,GAA2B,iBAAVA,KAEe,GAAK1B,EAAC,IAAA,CAAGgB,SAAAA,IAAgBA,EAE9D,OACIW,EAAC,MAAA,IACOT,EACJP,GAAAA,EACAD,IAAAA,EACAR,UAAW0B,EACP,cACA,gBAAgBO,IAChBjC,EACA,CACI,oBAAqBW,EACrB,yBAA0BC,IAGlCG,KAAAA,EAECD,SAAA,CAAAlB,EAAQqC,GACTR,EAAC,MAAA,CAAIzB,UAAU,uBAAuB,aAAW,QAC5Cc,SAAA,CAAAJ,GAASZ,EAAC,IAAA,CAAEE,UAAU,qBAAsBc,SAAAJ,IAC7CZ,EAAC,MAAA,CAAIE,UAAU,uBAAwBc,SAAAM,OAE1CP,GAAec,eACZ7B,EAAC8B,EAAA,CACG,gBAAeX,EACfjB,UAAU,8BACV6B,MAAOhB,EAAciB,aAAe,OACpCC,QAASlB,EAAcc,qBAWlCO,EAAc9B,EAAe,QAC1C8B,EAAYF,YAAc,cAInB,MAAMG,EAAe/B,EAAe,SAC3C+B,EAAaH,YAAc,eAIpB,MAAMI,EAAiBhC,EAAe,WAC7CgC,EAAeJ,YAAc,iBAItB,MAAMK,EAAiBjC,EAAe,WAC7CiC,EAAeL,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{forwardRef as t}from"react";import{InputPanel as a}from"../input-panel/InputPanel.js";const e=t(function(
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{forwardRef as t}from"react";import{InputPanel as a}from"../input-panel/InputPanel.js";const e=t(function(t,e){return r(a,{...t,type:"radio",ref:e})});export{e as RadioPanel};
|
|
2
2
|
//# sourceMappingURL=RadioPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioPanel.js","sources":["../../../../src/components/radio-panel/RadioPanel.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"RadioPanel.js","sources":["../../../../src/components/radio-panel/RadioPanel.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { InputPanel } from \"../input-panel/InputPanel.js\";\nimport type { RadioPanelProps } from \"./types.js\";\n\nexport const RadioPanel = forwardRef<HTMLInputElement, RadioPanelProps>(\n function RadioPanel(props, ref) {\n return <InputPanel {...props} type=\"radio\" ref={ref} />;\n },\n);\n"],"names":["RadioPanel","forwardRef","props","ref","InputPanel","type"],"mappings":"qIAIO,MAAMA,EAAaC,EACtB,SAAoBC,EAAOC,GACvB,SAAQC,EAAA,IAAeF,EAAOG,KAAK,QAAQF,IAAAA,GAC/C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,Fragment as t,jsx as
|
|
1
|
+
import{jsxs as e,Fragment as t,jsx as o}from"react/jsx-runtime";import{c as r}from"../../../clsx-BeLtu-UY.js";import n,{forwardRef as a,useState as s,useCallback as l,useMemo as i,useRef as c,useEffect as u}from"react";import{useId as p}from"../../hooks/useId/useId.js";import{useListNavigation as d}from"../../hooks/useListNavigation/useListNavigation.js";import{usePreviousValue as v}from"../../hooks/usePreviousValue/usePreviousValue.js";import{getValuePair as m}from"../../utilities/valuePair.js";import{ArrowVerticalAnimated as f}from"../icon/icons/animated/ArrowVerticalAnimated.js";import{InputGroup as b}from"../input-group/InputGroup.js";import{Popover as h}from"../popover/Popover.js";import{focusSelected as k,toLower as g}from"./select-utils.js";const y=()=>{},_=a((a,_)=>{const{id:j,name:w,items:P,value:$,label:x,labelProps:D,onChange:E,onBlur:L,onFocus:N,className:C,helpLabel:F,errorLabel:A,invalid:S,searchable:V=!1,inline:T=!1,defaultPrompt:I="Velg",width:O,maxShownOptions:K=5,style:B,tooltip:M,"data-testautoid":q,...z}=a,G=p(j||"jkl-select",{generateSuffix:!j}),R=`${G}_label`,U=`${G}_button`,W=`${G}_search-input`,Z=`--${G.replace(/[^a-zA-Z0-9-]/g,"-")}-anchor`,[H,J]=s(!1),Q=l(()=>{J(e=>!e)},[]),[X,Y]=s("bottom"),ee=l(e=>{Y(e.startsWith("top")?"top":"bottom")},[]),te=!!V,oe=te&&H,[re,ne]=s(""),ae=l(e=>!!e.label.toLowerCase().includes(re.toLowerCase())||"function"==typeof V&&V(re,e),[V,re]),se=i(()=>P.map(m).map(e=>{const t=!te||""===re||ae(e);return{...e,visible:t}}),[P,te,re,ae]),le=i(()=>!(typeof $>"u")&&P.some(e=>"string"==typeof e?e===$:e.value===$),[$,P]),[ie,ce]=s(le&&void 0!==$?$:""),ue=""!==ie,pe=i(()=>se.find(e=>e.value===ie)?.label||I,[se,ie,I]),de=c(null),ve=l(e=>{de.current=e,_&&("function"==typeof _?_(e):_.current=e),e&&ce(e.value)},[_]),me=v($);u(()=>{$!==me&&ce(typeof $>"u"||!le?"":$)},[$,me,le]);const fe=l(e=>{const t=e.value;ne(""),ce(t),Q(),ye.current?.focus()},[Q]),be=v(ie);u(()=>{typeof be>"u"||be===ie||ie===$||(E&&E({type:"change",target:{name:w,value:ie}}),de.current&&de.current.dispatchEvent(new Event("change",{bubbles:!0})))},[E,w,$,ie,be]);const he=c(null),ke=c(!1),ge=c(null),ye=c(null),_e=c(null),[je,we]=s(null),Pe=c(te),$e=c(ie);u(()=>{Pe.current=te,$e.current=ie});const xe=l(e=>{_e.current=e,we(e),e&&!Pe.current&&requestAnimationFrame(()=>{_e.current===e&&k(e,$e.current)})},[]),De=v(H);u(()=>{H!==De&&(H&&te?ge.current?.focus():!H&&ke.current&&ye.current&&ye.current.focus())},[H,De,te]),d({element:je});const Ee=l(()=>{te&&ne(""),L&&(L({type:"blur",target:{name:w,value:ie}}),de.current?.dispatchEvent(new Event("focusout",{bubbles:!0}))),ke.current=!1,J(!1)},[L,te,w,ie]),Le=l(e=>{const t=he.current,o=_e.current;t?.contains(e.relatedTarget)||o?.contains(e.relatedTarget)||Ee()},[Ee]),Ne=l(()=>{ke.current||(N&&N({type:"change",target:{name:w,value:ie}}),ke.current=!0)},[N,ie,w]),Ce=l(e=>{e.target.focus({preventScroll:!0})},[]);u(()=>{const e=de.current;if(!e)return;const t=()=>{oe?ge.current?.focus():ye.current?.focus()},o=e=>{const t=e.relatedTarget,o=he.current?.contains(t),r=_e.current?.contains(t);(o||r)&&e.preventDefault()};return e.addEventListener("focus",t),e.addEventListener("blur",o),()=>{e.removeEventListener("focus",t),e.removeEventListener("blur",o)}},[oe]);const Fe=l(e=>{"ArrowDown"!==e.key&&" "!==e.key||H?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),J(!1)):(e.preventDefault(),e.stopPropagation(),J(!0))},[H]),Ae=l(e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const t=_e.current;t&&k(t,te?void 0:ie)}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),J(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&H&&(e.preventDefault(),e.stopPropagation());else{const t=_e.current;t&&(e.preventDefault(),e.stopPropagation(),k(t,ie))}},[ie,te,H]),Se=l(e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&ge.current?ge.current.focus():ye.current&&(ce(e.currentTarget.value),J(!1),ye.current.focus());else if("ArrowUp"===e.key&&_e.current&&ge.current){const t=_e.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===t?.id&&ge.current&&ge.current.focus()}},[]);return u(()=>{const e=e=>{"Escape"===e.key&&H&&J(!1)};return typeof window<"u"&&H&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}},[H]),e(t,{children:[e("select",{name:w,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:ve,value:ie,onChange:y,children:[o("option",{value:""})," ",se.map(e=>o("option",{hidden:!e.visible,value:e.value,children:e.label},`${G}-opt-${e.value}`))]}),o(b,{ref:he,"data-testid":"jkl-select",className:r("jkl-select",C,{"jkl-select--inline":T,"jkl-select--open":H&&se.some(e=>e.visible),"jkl-select--no-value":!ue,"jkl-select--invalid":!!A||S}),"data-testautoid":q,tooltip:M&&n.isValidElement(M)?n.cloneElement(M,{triggerProps:{...M.props.triggerProps,onFocus:e=>{M.props.triggerProps?.onFocus?.(e),Ee()}}}):null,...z,id:te?W:U,style:B,label:x,labelProps:{id:R,srOnly:T,...D,htmlFor:te?W:U},helpLabel:F,errorLabel:A,render:({"aria-invalid":t,...n})=>{const a=H&&se.some(e=>e.visible);return e(h,{open:a,placement:"bottom-start",offset:0,modal:!1,onPlacementChange:ee,clickOptions:{enabled:!1},dismissOptions:{enabled:!1},roleOptions:{enabled:!1},children:[o(h.Trigger,{asChild:!0,children:e("div",{className:"jkl-select__outer-wrapper","data-popover-placement":X,style:{width:O,anchorName:Z},children:[te&&o("input",{...n,"aria-invalid":t,id:W,hidden:!oe,ref:ge,placeholder:"Søk",value:re,onChange:e=>ne(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":a&&ue?`${G}__${g(ie)}`:void 0,"aria-controls":a?G:void 0,"aria-expanded":a,role:"combobox",onKeyDown:Ae,onBlur:Le,onFocus:Ne,onClick:e=>{e.stopPropagation()}}),o("button",{"aria-invalid":t,...n,id:U,ref:ye,hidden:oe,type:"button",name:`${w}-btn`,className:r("jkl-select__button",{"jkl-select__button--active-value":!!ie}),"data-testid":"jkl-select__button","aria-label":`${pe||"Velg"},${x}`,"aria-expanded":a,"aria-controls":a?G:void 0,onBlur:Le,onFocus:Ne,onKeyDown:Fe,onClick:Q,onMouseDown:e=>{e.preventDefault(),ye.current?.focus()},children:pe}),o(f,{variant:"medium",pointingDown:!a,className:"jkl-select__arrow"})]})}),o(h.Content,{initialFocus:-1,returnFocus:!1,className:"jkl-select__popover",style:{width:`anchor-size(${Z} width)`},children:o("div",{id:G,ref:xe,role:"listbox",className:"jkl-select__options-menu","data-popover-placement":X,"aria-labelledby":R,tabIndex:-1,"data-testid":"jkl-select__listbox","data-testautoid":q?`${q}__listbox`:"jkl-select__listbox","data-focus":"controlled",style:{"--jkl-select-max-shown-options":K},children:se.map((t,r)=>t.visible?e("button",{hidden:!t.visible,type:"button",id:`${G}__${g(t.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":t.value===ie,role:"option",value:t.value,"data-testautoid":`jkl-select__option-${r}`,onBlur:Le,onFocus:Ne,onKeyDown:Se,onClick:e=>{e.preventDefault(),fe(t)},onMouseOver:Ce,children:[t.label,t.description?o("span",{className:"jkl-select__option-description",children:t.description}):null]},`${G}-${t.value}`):null)})})]})}})]})});_.displayName="Select";export{_ as Select};
|
|
2
2
|
//# sourceMappingURL=Select.js.map
|