@biblioteksentralen/react 4.0.0-beta.5 → 4.0.0-beta.6

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/dist/index.js CHANGED
@@ -4,6 +4,9 @@ function _array_like_to_array(arr, len) {
4
4
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
5
  return arr2;
6
6
  }
7
+ function _array_with_holes(arr) {
8
+ if (Array.isArray(arr)) return arr;
9
+ }
7
10
  function _array_without_holes(arr) {
8
11
  if (Array.isArray(arr)) return _array_like_to_array(arr);
9
12
  }
@@ -67,6 +70,33 @@ function _inherits(subClass, superClass) {
67
70
  function _iterable_to_array(iter) {
68
71
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
69
72
  }
73
+ function _iterable_to_array_limit(arr, i) {
74
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
75
+ if (_i == null) return;
76
+ var _arr = [];
77
+ var _n = true;
78
+ var _d = false;
79
+ var _s, _e;
80
+ try {
81
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
82
+ _arr.push(_s.value);
83
+ if (i && _arr.length === i) break;
84
+ }
85
+ } catch (err) {
86
+ _d = true;
87
+ _e = err;
88
+ } finally{
89
+ try {
90
+ if (!_n && _i["return"] != null) _i["return"]();
91
+ } finally{
92
+ if (_d) throw _e;
93
+ }
94
+ }
95
+ return _arr;
96
+ }
97
+ function _non_iterable_rest() {
98
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
99
+ }
70
100
  function _non_iterable_spread() {
71
101
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
72
102
  }
@@ -125,6 +155,9 @@ function _set_prototype_of(o, p) {
125
155
  };
126
156
  return _set_prototype_of(o, p);
127
157
  }
158
+ function _sliced_to_array(arr, i) {
159
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
160
+ }
128
161
  function _to_consumable_array(arr) {
129
162
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
130
163
  }
@@ -730,11 +763,233 @@ var withErrorBoundaryBS = function(Component, boundaryName) {
730
763
  };
731
764
  };
732
765
  // src/components/BiblioteksentralenProvider.tsx
733
- var _system = require("@chakra-ui/system");
766
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-UQDW7KKV.mjs
767
+ var ColorModeContext = _react3.createContext.call(void 0, {});
768
+ ColorModeContext.displayName = "ColorModeContext";
769
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-X7ZBZ4KW.mjs
770
+ var classNames = {
771
+ light: "chakra-ui-light",
772
+ dark: "chakra-ui-dark"
773
+ };
774
+ function getColorModeUtils() {
775
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
776
+ var _options_preventTransition = options.preventTransition, preventTransition = _options_preventTransition === void 0 ? true : _options_preventTransition;
777
+ var utils = {
778
+ setDataset: function(value) {
779
+ var cleanup = preventTransition ? utils.preventTransition() : void 0;
780
+ document.documentElement.dataset.theme = value;
781
+ document.documentElement.style.colorScheme = value;
782
+ cleanup == null ? void 0 : cleanup();
783
+ },
784
+ setClassName: function setClassName(dark) {
785
+ document.body.classList.add(dark ? classNames.dark : classNames.light);
786
+ document.body.classList.remove(dark ? classNames.light : classNames.dark);
787
+ },
788
+ query: function query() {
789
+ return window.matchMedia("(prefers-color-scheme: dark)");
790
+ },
791
+ getSystemTheme: function getSystemTheme(fallback) {
792
+ var _a;
793
+ var dark = (_a = utils.query().matches) != null ? _a : fallback === "dark";
794
+ return dark ? "dark" : "light";
795
+ },
796
+ addListener: function addListener(fn) {
797
+ var mql = utils.query();
798
+ var listener = function(e) {
799
+ fn(e.matches ? "dark" : "light");
800
+ };
801
+ if (typeof mql.addListener === "function") mql.addListener(listener);
802
+ else mql.addEventListener("change", listener);
803
+ return function() {
804
+ if (typeof mql.removeListener === "function") mql.removeListener(listener);
805
+ else mql.removeEventListener("change", listener);
806
+ };
807
+ },
808
+ preventTransition: function preventTransition() {
809
+ var css = document.createElement("style");
810
+ css.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"));
811
+ document.head.appendChild(css);
812
+ return function() {
813
+ ;
814
+ (function() {
815
+ return window.getComputedStyle(document.body);
816
+ })();
817
+ requestAnimationFrame(function() {
818
+ requestAnimationFrame(function() {
819
+ document.head.removeChild(css);
820
+ });
821
+ });
822
+ };
823
+ }
824
+ };
825
+ return utils;
826
+ }
827
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-44OWBZ77.mjs
828
+ var STORAGE_KEY = "chakra-ui-color-mode";
829
+ function createLocalStorageManager(key) {
830
+ return {
831
+ ssr: false,
832
+ type: "localStorage",
833
+ get: function get(init) {
834
+ if (!(globalThis == null ? void 0 : globalThis.document)) return init;
835
+ var value;
836
+ try {
837
+ value = localStorage.getItem(key) || init;
838
+ } catch (e) {}
839
+ return value || init;
840
+ },
841
+ set: function set(value) {
842
+ try {
843
+ localStorage.setItem(key, value);
844
+ } catch (e) {}
845
+ }
846
+ };
847
+ }
848
+ var localStorageManager = createLocalStorageManager(STORAGE_KEY);
849
+ function parseCookie(cookie, key) {
850
+ var match = cookie.match(new RegExp("(^| )".concat(key, "=([^;]+)")));
851
+ return match == null ? void 0 : match[2];
852
+ }
853
+ function createCookieStorageManager(key, cookie) {
854
+ return {
855
+ ssr: !!cookie,
856
+ type: "cookie",
857
+ get: function get(init) {
858
+ if (cookie) return parseCookie(cookie, key);
859
+ if (!(globalThis == null ? void 0 : globalThis.document)) return init;
860
+ return parseCookie(document.cookie, key) || init;
861
+ },
862
+ set: function set(value) {
863
+ document.cookie = "".concat(key, "=").concat(value, "; max-age=31536000; path=/");
864
+ }
865
+ };
866
+ }
867
+ var cookieStorageManager = createCookieStorageManager(STORAGE_KEY);
868
+ // ../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/dist/index.mjs
869
+ var useSafeLayoutEffect = Boolean(globalThis == null ? void 0 : globalThis.document) ? _react3.useLayoutEffect : _react3.useEffect;
870
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-AMBGAKG2.mjs
871
+ var _jsxruntime = require("react/jsx-runtime");
872
+ var noop = function() {};
873
+ function getTheme(manager, fallback) {
874
+ return manager.type === "cookie" && manager.ssr ? manager.get(fallback) : fallback;
875
+ }
876
+ function ColorModeProvider(props) {
877
+ var value = props.value, children = props.children, tmp = props.options, _ref = tmp === void 0 ? {} : tmp, useSystemColorMode = _ref.useSystemColorMode, initialColorMode = _ref.initialColorMode, disableTransitionOnChange = _ref.disableTransitionOnChange, _props_colorModeManager = props.colorModeManager, colorModeManager = _props_colorModeManager === void 0 ? localStorageManager : _props_colorModeManager;
878
+ var defaultColorMode = initialColorMode === "dark" ? "dark" : "light";
879
+ var _react3_useState_call = _sliced_to_array(_react3.useState.call(void 0, function() {
880
+ return getTheme(colorModeManager, defaultColorMode);
881
+ }), 2), colorMode = _react3_useState_call[0], rawSetColorMode = _react3_useState_call[1];
882
+ var _react3_useState_call1 = _sliced_to_array(_react3.useState.call(void 0, function() {
883
+ return getTheme(colorModeManager);
884
+ }), 2), resolvedColorMode = _react3_useState_call1[0], setResolvedColorMode = _react3_useState_call1[1];
885
+ var _react3_useMemo_call = _react3.useMemo.call(void 0, function() {
886
+ return getColorModeUtils({
887
+ preventTransition: disableTransitionOnChange
888
+ });
889
+ }, [
890
+ disableTransitionOnChange
891
+ ]), getSystemTheme = _react3_useMemo_call.getSystemTheme, setClassName = _react3_useMemo_call.setClassName, setDataset = _react3_useMemo_call.setDataset, addListener = _react3_useMemo_call.addListener;
892
+ var resolvedValue = initialColorMode === "system" && !colorMode ? resolvedColorMode : colorMode;
893
+ var setColorMode = _react3.useCallback.call(void 0, function(value2) {
894
+ var resolved = value2 === "system" ? getSystemTheme() : value2;
895
+ rawSetColorMode(resolved);
896
+ setClassName(resolved === "dark");
897
+ setDataset(resolved);
898
+ colorModeManager.set(resolved);
899
+ }, [
900
+ colorModeManager,
901
+ getSystemTheme,
902
+ setClassName,
903
+ setDataset
904
+ ]);
905
+ useSafeLayoutEffect(function() {
906
+ if (initialColorMode === "system") {
907
+ setResolvedColorMode(getSystemTheme());
908
+ }
909
+ }, []);
910
+ _react3.useEffect.call(void 0, function() {
911
+ var managerValue = colorModeManager.get();
912
+ if (managerValue) {
913
+ setColorMode(managerValue);
914
+ return;
915
+ }
916
+ if (initialColorMode === "system") {
917
+ setColorMode("system");
918
+ return;
919
+ }
920
+ setColorMode(defaultColorMode);
921
+ }, [
922
+ colorModeManager,
923
+ defaultColorMode,
924
+ initialColorMode,
925
+ setColorMode
926
+ ]);
927
+ var toggleColorMode = _react3.useCallback.call(void 0, function() {
928
+ setColorMode(resolvedValue === "dark" ? "light" : "dark");
929
+ }, [
930
+ resolvedValue,
931
+ setColorMode
932
+ ]);
933
+ _react3.useEffect.call(void 0, function() {
934
+ if (!useSystemColorMode) return;
935
+ return addListener(setColorMode);
936
+ }, [
937
+ useSystemColorMode,
938
+ addListener,
939
+ setColorMode
940
+ ]);
941
+ var context = _react3.useMemo.call(void 0, function() {
942
+ return {
943
+ colorMode: value != null ? value : resolvedValue,
944
+ toggleColorMode: value ? noop : toggleColorMode,
945
+ setColorMode: value ? noop : setColorMode,
946
+ forced: value !== void 0
947
+ };
948
+ }, [
949
+ resolvedValue,
950
+ toggleColorMode,
951
+ setColorMode,
952
+ value
953
+ ]);
954
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, {
955
+ value: context,
956
+ children: children
957
+ });
958
+ }
959
+ ColorModeProvider.displayName = "ColorModeProvider";
960
+ function DarkMode(props) {
961
+ var context = _react3.useMemo.call(void 0, function() {
962
+ return {
963
+ colorMode: "dark",
964
+ toggleColorMode: noop,
965
+ setColorMode: noop,
966
+ forced: true
967
+ };
968
+ }, []);
969
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, _object_spread({
970
+ value: context
971
+ }, props));
972
+ }
973
+ DarkMode.displayName = "DarkMode";
974
+ function LightMode(props) {
975
+ var context = _react3.useMemo.call(void 0, function() {
976
+ return {
977
+ colorMode: "light",
978
+ toggleColorMode: noop,
979
+ setColorMode: noop,
980
+ forced: true
981
+ };
982
+ }, []);
983
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, _object_spread({
984
+ value: context
985
+ }, props));
986
+ }
987
+ LightMode.displayName = "LightMode";
988
+ // src/components/BiblioteksentralenProvider.tsx
734
989
  var BiblioteksentralenProvider = function(props) {
735
990
  return /* @__PURE__ */ _react4.default.createElement(_react.ChakraProvider, {
736
991
  value: _react.createSystem.call(void 0, _react.defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {})
737
- }, /* @__PURE__ */ _react4.default.createElement(_system.ColorModeProvider, _object_spread({}, props)));
992
+ }, /* @__PURE__ */ _react4.default.createElement(ColorModeProvider, _object_spread({}, props)));
738
993
  };
739
994
  exports.AlertBS = AlertBS;
740
995
  exports.BiblioteksentralenProvider = BiblioteksentralenProvider;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/danielwinsvold/Code/js-utils/packages/react/dist/index.js","../../utils/src/date.ts","../../utils/src/colors.ts","../../utils/src/environment.ts","../src/components/AlertBS.tsx","../src/components/ButtonBS.tsx","../src/components/IconButtonBS.tsx","../src/components/InputBS.tsx","../src/components/ConditionalWrapperBS.tsx","../src/components/ErrorBoundaryBS.tsx","../src/styles/chakraTheme/ButtonStyles.ts","../src/styles/chakraTheme/ContainerStyles.ts","../src/styles/chakraTheme/HeadingStyles.ts","../src/styles/chakraTheme/InputStyles.ts","../src/styles/chakraTheme/SpinnerStyles.ts","../src/styles/chakraTheme/sizes.ts","../src/styles/chakraTheme/LinkStyles.ts","../src/styles/chakraTheme/biblioteksentralenChakraTheme.ts","../src/components/HashLinkTargetBS.tsx","../src/components/withErrorBoundaryBS.tsx","../src/components/BiblioteksentralenProvider.tsx"],"names":["Object","defineProperty","exports","value","_interopRequireDefault","obj","__esModule","default","_optionalChain","ops","lastAccessLHS","undefined","i","length","op","fn","args","call","_format","require","_nb","colors","black","grey90","grey80","grey60","grey45","grey30","grey15","grey10","grey05","white","bsRødDark","bsRødMedium","accentPurple","accentPeach","accentGreen","accentBlueDark","accentBlueMedium","accentYellow","lightBlue","lightGreen","lightPeach","lightPurple","statusRed","statusYellow","statusGreen","statusGreenLight","statusRedLight","statusYellowLight","neptune","isDevelopment","process","env","NODE_ENV","_react","_react3","_react4","_reactfeather","colorLookup","info","bg","color","warning","success","error","iconLookup","createElement","Info","strokeWidth","role","AlertCircle","CheckCircle","XCircle","variantStyles","inline","borderColor","backgroundColor","padding","AlertBS","status","children","variant","header","rest","Alert","Root","fontSize","border","display","flexWrap","Indicator","marginX","Content","Title","Description","ButtonBS","Button","IconButtonBS","IconButton","InputBS","props","labelProps","label","helperText","errorMessage","hideLabel","inputProps","formLabel","React","Field","Label","invalid","VisuallyHidden","HelperText","Input","ErrorText","ConditionalWrapperBS","condition","wrapper","Wrapper","Fragment","StyledPre","Box","as","paddingTop","wordBreak","whiteSpace","ErrorBoundaryBS","state","hasError","componentDidCatch","errorInfo","setState","console","boundaryName","render","stackTrace","_","_2","_3","componentStack","errormsg","_4","_5","_6","message","getDerivedStateFromError","Component","variants","primary","_hover","secondary","tertiary","defaultConfig","_7","theme","_8","recipes","_9","button","_10","_11","ButtonStyles","defineRecipe","base","borderWidth","fontWeight","_disabled","opacity","size","sm","h","px","textStyle","md","lg","defaultVariants","variants2","subtle","_light","_dark","outline","flushed","_placeholder","animationDuration","container","xl","sizes","variants3","plain","textDecoration","textDecorationColor","underline","_focus","tokens","defineTokens","globalHyphens","hyphens","hyphenateLimitChars","focusStyle","boxShadow","transition","biblioteksentralenChakraTheme","defineConfig","heading","HeadingStyles","input","InputStyles","link","LinkStyles","ContainerStyles","spinner","SpinnerStyles","globalCss","html","scrollBehavior","body","focusOnRelativeParentStyle","_focusWithin","position","content","top","left","height","width","pointerEvents","borderRadius","HashLinkTargetBS","css","focusOnParent","id","tabIndex","spaceAbove","withErrorBoundaryBS","_system","BiblioteksentralenProvider","ChakraProvider","createSystem","customTheme","ColorModeProvider"],"mappings":"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","sourcesContent":["\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\"use client\";\n\n// ../utils/dist/index.mjs\nvar _format = require('date-fns/format');\nvar _nb = require('date-fns/locale/nb');\nvar colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsR\\u00F8dDark: \"#870010\",\n bsR\\u00F8dMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\"\n }\n};\nfunction isDevelopment() {\n return process.env.NODE_ENV === \"development\";\n}\n\n// src/components/AlertBS.tsx\nvar _react = require('@chakra-ui/react');\nvar _react3 = require('react'); var _react4 = _interopRequireDefault(_react3);\nvar _reactfeather = require('react-feather');\nvar colorLookup = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed }\n};\nvar iconLookup = {\n info: /* @__PURE__ */ _react4.default.createElement(_reactfeather.Info, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Informasjon\" }),\n warning: /* @__PURE__ */ _react4.default.createElement(_reactfeather.AlertCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Advarsel\" }),\n success: /* @__PURE__ */ _react4.default.createElement(_reactfeather.CheckCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Suksess\" }),\n error: /* @__PURE__ */ _react4.default.createElement(_reactfeather.XCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Feil\" })\n};\nvar variantStyles = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\"\n }\n};\nfunction AlertBS({ status, children, variant, header, ...rest }) {\n const colors2 = colorLookup[status];\n return /* @__PURE__ */ _react4.default.createElement(\n _react.Alert.Root,\n {\n status,\n fontSize: \"md\",\n border: `0.1rem solid`,\n borderColor: colors2.color,\n backgroundColor: colors2.bg,\n display: \"flex\",\n flexWrap: \"wrap\",\n ...variant === \"inline\" ? variantStyles[variant] : {},\n ...rest\n },\n /* @__PURE__ */ _react4.default.createElement(_react.Alert.Indicator, { marginX: \"auto\" }, iconLookup[status]),\n /* @__PURE__ */ _react4.default.createElement(_react.Alert.Content, { color: \"black\" }, header && /* @__PURE__ */ _react4.default.createElement(_react.Alert.Title, null, header), /* @__PURE__ */ _react4.default.createElement(_react.Alert.Description, null, children))\n );\n}\n\n// src/components/ButtonBS.tsx\n\nvar ButtonBS = _react.Button;\n\n// src/components/IconButtonBS.tsx\n\nvar IconButtonBS = _react.IconButton;\n\n// src/components/InputBS.tsx\n\n\nvar InputBS = (props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n const formLabel = /* @__PURE__ */ _react4.default.createElement(_react.Field.Label, { ...labelProps }, label);\n return /* @__PURE__ */ _react4.default.createElement(_react.Field.Root, { invalid: !!errorMessage }, hideLabel ? /* @__PURE__ */ _react4.default.createElement(_react.VisuallyHidden, null, formLabel) : formLabel, helperText && /* @__PURE__ */ _react4.default.createElement(_react.Field.HelperText, null, helperText), /* @__PURE__ */ _react4.default.createElement(_react.Input, { ...inputProps }), errorMessage && /* @__PURE__ */ _react4.default.createElement(_react.Field.ErrorText, null, errorMessage));\n};\n\n// src/components/ConditionalWrapperBS.tsx\n\nvar ConditionalWrapperBS = ({ condition, children, wrapper: Wrapper }) => condition ? /* @__PURE__ */ _react4.default.createElement(Wrapper, null, children) : /* @__PURE__ */ _react4.default.createElement(_react4.default.Fragment, null, children);\n\n// src/components/ErrorBoundaryBS.tsx\n\n\nvar StyledPre = (props) => /* @__PURE__ */ _react4.default.createElement(_react.Box, { as: \"pre\", paddingTop: \"0.5rem\", wordBreak: \"break-all\", whiteSpace: \"pre-wrap\", fontSize: \"0.8rem\", ...props });\nvar ErrorBoundaryBS = class extends _react4.default.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n componentDidCatch(error, errorInfo) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n render() {\n if (this.state.hasError) {\n const stackTrace = _optionalChain([this, 'access', _ => _.state, 'access', _2 => _2.errorInfo, 'optionalAccess', _3 => _3.componentStack]);\n const errormsg = _optionalChain([this, 'access', _4 => _4.state, 'access', _5 => _5.error, 'optionalAccess', _6 => _6.message]);\n const info = this.props.boundaryName;\n return /* @__PURE__ */ _react4.default.createElement(\"div\", null, /* @__PURE__ */ _react4.default.createElement(AlertBS, { status: \"error\" }, /* @__PURE__ */ _react4.default.createElement(\"p\", null, \"Beklager, det skjedde en teknisk feil.\"), isDevelopment() && (stackTrace || errormsg) && /* @__PURE__ */ _react4.default.createElement(\"div\", null, /* @__PURE__ */ _react4.default.createElement(StyledPre, null, errormsg || \"\"), /* @__PURE__ */ _react4.default.createElement(StyledPre, null, info || \"\"), /* @__PURE__ */ _react4.default.createElement(StyledPre, null, stackTrace || \"\"))));\n }\n return this.props.children;\n }\n};\n\n// src/components/HashLinkTargetBS.tsx\n\n\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\n\n\n// src/styles/chakraTheme/ButtonStyles.ts\n\nvar variants = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\"\n }\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ..._optionalChain([_react.defaultConfig, 'access', _7 => _7.theme, 'optionalAccess', _8 => _8.recipes, 'optionalAccess', _9 => _9.button, 'optionalAccess', _10 => _10.variants, 'optionalAccess', _11 => _11.variant])\n};\nvar ButtonStyles = _react.defineRecipe.call(void 0, {\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1\n }\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\"\n },\n md: {\n textStyle: \"md\"\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\"\n }\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n});\n\n// src/styles/chakraTheme/ContainerStyles.ts\n\nvar ContainerStyles = _react.defineRecipe.call(void 0, {\n base: {\n px: \".75rem\"\n // Padding left/right\n }\n});\n\n// src/styles/chakraTheme/HeadingStyles.ts\n\nvar HeadingStyles = _react.defineRecipe.call(void 0, {\n base: {\n fontWeight: \"600\"\n }\n});\n\n// src/styles/chakraTheme/InputStyles.ts\n\nvar variants2 = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" }\n }\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n }\n};\nvar InputStyles = _react.defineRecipe.call(void 0, {\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" }\n }\n },\n variants: {\n variant: variants2\n },\n defaultVariants: {\n variant: \"subtle\"\n }\n});\n\n// src/styles/chakraTheme/SpinnerStyles.ts\n\nvar SpinnerStyles = _react.defineRecipe.call(void 0, {\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\"\n }\n});\n\n// src/styles/chakraTheme/sizes.ts\nvar container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" },\n // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" }\n};\nvar sizes = {\n container\n};\n\n// src/styles/chakraTheme/LinkStyles.ts\n\nvar variants3 = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\"\n }\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\"\n }\n }\n};\nvar LinkStyles = _react.defineRecipe.call(void 0, {\n base: {\n _focus: {\n outline: \"none\"\n }\n },\n variants: {\n variant: variants3\n },\n defaultVariants: {\n variant: \"underline\"\n }\n});\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nvar tokens = _react.defineTokens.call(void 0, {\n sizes\n});\nvar globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\"\n // minimum word-length / min letters first line / min letters second line\n};\nvar focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\"\n // Transition makes the newly focused element \"pop in\" and easier to spot\n};\nvar biblioteksentralenChakraTheme = _react.defineConfig.call(void 0, {\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles\n }\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" }\n },\n body: {\n ...globalHyphens\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle\n }\n});\n\n// src/components/HashLinkTargetBS.tsx\nvar focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle\n }\n }\n};\nfunction HashLinkTargetBS(props) {\n return /* @__PURE__ */ _react4.default.createElement(_react.Box, { position: \"relative\", css: props.focusOnParent ? focusOnRelativeParentStyle : void 0 }, /* @__PURE__ */ _react4.default.createElement(\n _react.Box,\n {\n id: props.id,\n tabIndex: props.focusOnParent ? -1 : void 0,\n position: \"absolute\",\n top: `-${props.spaceAbove || \"2.5rem\"}`,\n _focus: {\n boxShadow: \"none !important\"\n }\n }\n ));\n}\n\n// src/components/withErrorBoundaryBS.tsx\n\nvar withErrorBoundaryBS = (Component, boundaryName) => {\n return (props) => /* @__PURE__ */ _react4.default.createElement(ErrorBoundaryBS, { boundaryName }, /* @__PURE__ */ _react4.default.createElement(Component, { ...props }));\n};\n\n// src/components/BiblioteksentralenProvider.tsx\n\n\nvar _system = require('@chakra-ui/system');\nvar BiblioteksentralenProvider = (props) => /* @__PURE__ */ _react4.default.createElement(_react.ChakraProvider, { value: _react.createSystem.call(void 0, _react.defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {}) }, /* @__PURE__ */ _react4.default.createElement(_system.ColorModeProvider, { ...props }));\n\n\n\n\n\n\n\n\n\n\nexports.AlertBS = AlertBS; exports.BiblioteksentralenProvider = BiblioteksentralenProvider; exports.ButtonBS = ButtonBS; exports.ConditionalWrapperBS = ConditionalWrapperBS; exports.ErrorBoundaryBS = ErrorBoundaryBS; exports.HashLinkTargetBS = HashLinkTargetBS; exports.IconButtonBS = IconButtonBS; exports.InputBS = InputBS; exports.withErrorBoundaryBS = withErrorBoundaryBS;\n","import { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\n\nexport function formaterDato(dato?: string, dateFnsformat = \"Pp\") {\n if (typeof dato !== \"string\") return \"Ukjent dato\";\n\n try {\n return format(new Date(dato), dateFnsformat, { locale: nb });\n } catch (e) {\n console.error(\"Kunne ikke formattere dato:\" + dato, e);\n return dato;\n }\n}\n","export const colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsRødDark: \"#870010\",\n bsRødMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\",\n },\n};\n","export function isDevelopment(): boolean {\n return process.env.NODE_ENV === \"development\";\n}\n\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\nexport function isServer(): boolean {\n return !isClient();\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { colors } from \"@biblioteksentralen/utils\";\nimport { AlertRootProps, Alert as ChakraAlert, SystemStyleObject } from \"@chakra-ui/react\";\nimport React, { ReactNode } from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\n\ntype Status = \"info\" | \"warning\" | \"success\" | \"error\";\ntype CustomVariants = \"inline\";\ntype Variants = AlertRootProps[\"variant\"] | CustomVariants;\n\nconst colorLookup: Record<Status, { bg: string; color: string }> = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed },\n};\n\nconst iconLookup: Record<Status, React.ReactElement> = {\n info: <Info strokeWidth={1.75} role=\"img\" aria-label=\"Informasjon\" />,\n warning: <AlertCircle strokeWidth={1.75} role=\"img\" aria-label=\"Advarsel\" />,\n success: <CheckCircle strokeWidth={1.75} role=\"img\" aria-label=\"Suksess\" />,\n error: <XCircle strokeWidth={1.75} role=\"img\" aria-label=\"Feil\" />,\n};\n\ninterface Props extends Modify<AlertRootProps, { variant?: Variants }> {\n children: ReactNode;\n header?: ReactNode;\n status: Status;\n variant?: Variants;\n}\n\nconst variantStyles: Record<CustomVariants, SystemStyleObject> = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n },\n};\n\nexport function AlertBS({ status, children, variant, header, ...rest }: Props) {\n const colors = colorLookup[status];\n return (\n <ChakraAlert.Root\n status={status}\n fontSize=\"md\"\n border={`0.1rem solid`}\n borderColor={colors.color}\n backgroundColor={colors.bg}\n display=\"flex\"\n flexWrap=\"wrap\"\n {...(variant === \"inline\" ? variantStyles[variant] : {})}\n {...rest}\n >\n <ChakraAlert.Indicator marginX=\"auto\">{iconLookup[status]}</ChakraAlert.Indicator>\n <ChakraAlert.Content color=\"black\">\n {header && <ChakraAlert.Title>{header}</ChakraAlert.Title>}\n <ChakraAlert.Description>{children}</ChakraAlert.Description>\n </ChakraAlert.Content>\n </ChakraAlert.Root>\n );\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { Button as ChakraButton, ButtonProps as NativeButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras Button with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype ButtonVariants = NativeButtonProps[\"variant\"] | CustomButtonVariants;\nexport type ButtonBSProps = Modify<NativeButtonProps, { variant?: ButtonVariants }>;\nexport const ButtonBS = ChakraButton as ComponentWithAs<\"button\", ButtonBSProps>;\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { IconButton as ChakraIconButton, IconButtonProps as ChakraIconButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras IconButton with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype IconButtonVariants = ChakraIconButtonProps[\"variant\"] | CustomButtonVariants;\nexport type IconButtonBSProps = Modify<ChakraIconButtonProps, { variant?: IconButtonVariants }>;\nexport const IconButtonBS = ChakraIconButton as ComponentWithAs<\"button\", IconButtonBSProps>;\n","import { Input as ChakraInput, Field, FieldLabelProps, InputProps, VisuallyHidden } from \"@chakra-ui/react\";\nimport React, { RefObject } from \"react\";\n\ninterface Props extends InputProps {\n label: string;\n hideLabel?: boolean;\n labelProps?: FieldLabelProps;\n helperText?: string;\n errorMessage?: string;\n ref?: RefObject<HTMLInputElement | null>;\n}\n\n/**\n * Creating custom input-component to make sure label is always set (for accessibility)\n * Also handles some common needs (helper text and error message. For more advanced input-components we leave it to the consumers to compose custom input-components based on Chakra\n */\nexport const InputBS = (props: Props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n\n const formLabel = <Field.Label {...labelProps}>{label}</Field.Label>;\n\n return (\n <Field.Root invalid={!!errorMessage}>\n {hideLabel ? <VisuallyHidden>{formLabel}</VisuallyHidden> : formLabel}\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n <ChakraInput {...inputProps} />\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {errorMessage && <Field.ErrorText>{errorMessage}</Field.ErrorText>}\n </Field.Root>\n );\n};\n","import React, { FunctionComponent, ReactNode } from \"react\";\n\ntype Props = {\n children: ReactNode;\n wrapper: FunctionComponent<{ children: ReactNode }>;\n condition: boolean;\n};\n\n/**\n * Conditionally wrapps children with a component. If conditions are not met children mounted without the wrapper.\n */\nexport const ConditionalWrapperBS: FunctionComponent<Props> = ({ condition, children, wrapper: Wrapper }) =>\n condition ? <Wrapper>{children}</Wrapper> : <>{children}</>;\n","import { isDevelopment } from \"@biblioteksentralen/utils\";\nimport { Box, BoxProps } from \"@chakra-ui/react\";\nimport React, { ErrorInfo, ReactNode } from \"react\";\nimport { AlertBS } from \"./AlertBS\";\n\ninterface Props {\n boundaryName?: string;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n}\n\nconst StyledPre = (props: BoxProps) => (\n <Box as=\"pre\" paddingTop=\"0.5rem\" wordBreak=\"break-all\" whiteSpace=\"pre-wrap\" fontSize=\"0.8rem\" {...props} />\n);\n\nexport class ErrorBoundaryBS extends React.Component<Props, State> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n\n return (\n <div>\n <AlertBS status=\"error\">\n <p>Beklager, det skjedde en teknisk feil.</p>\n {isDevelopment() && (stackTrace || errormsg) && (\n <div>\n <StyledPre>{errormsg || \"\"}</StyledPre>\n <StyledPre>{info || \"\"}</StyledPre>\n <StyledPre>{stackTrace || \"\"}</StyledPre>\n </div>\n )}\n </AlertBS>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defaultConfig, defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomButtonVariants = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst variants: Record<CustomButtonVariants, SystemStyleObject> = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\",\n },\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant,\n};\n\nexport const ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1,\n },\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\",\n },\n md: {\n textStyle: \"md\",\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\",\n },\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const ContainerStyles = defineRecipe({\n base: {\n px: \".75rem\", // Padding left/right\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const HeadingStyles = defineRecipe({\n base: {\n fontWeight: \"600\",\n },\n});\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nconst variants: Record<string, SystemStyleObject> = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" },\n },\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n};\n\nexport const InputStyles = defineRecipe({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" },\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"subtle\",\n },\n});\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defineRecipe } from \"@chakra-ui/react\";\n\nexport const SpinnerStyles = defineRecipe({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\",\n },\n});\n","const container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" }, // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" },\n};\n\nexport const sizes = {\n container,\n};\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomLinkVariants = \"plain\" | \"underline\";\n\nconst variants: Record<CustomLinkVariants, SystemStyleObject> = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\",\n },\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\",\n },\n },\n};\n\nexport const LinkStyles = defineRecipe({\n base: {\n _focus: {\n outline: \"none\",\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"underline\",\n },\n});\n","import { defineConfig, defineTokens } from \"@chakra-ui/react\";\nimport { ButtonStyles } from \"./ButtonStyles\";\nimport { ContainerStyles } from \"./ContainerStyles\";\nimport { HeadingStyles } from \"./HeadingStyles\";\nimport { InputStyles } from \"./InputStyles\";\nimport { SpinnerStyles } from \"./SpinnerStyles\";\nimport { sizes } from \"./sizes\";\nimport { LinkStyles } from \"./LinkStyles\";\nimport { colors } from \"@biblioteksentralen/utils\";\n\nconst tokens = defineTokens({\n sizes,\n});\n\n// https://blog.logrocket.com/guide-css-word-wrap-overflow-wrap-word-break/\n// https://medium.com/clear-left-thinking/all-you-need-to-know-about-hyphenation-in-css-2baee2d89179\n// Skrur på hyphens auto som default fordi vi har masse mikrotekster og små elementer der layout knekker uten dette, og vi lager stadig nye og glemmer å ta hensyn til dette.\n// Så kan man optionaly sette hyphens: none de stedene man ikke ønsker det, men har ikke sett noe som knekker/blir rart pga dette enda\nconst globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\", // minimum word-length / min letters first line / min letters second line\n};\n\nexport const focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\", // Transition makes the newly focused element \"pop in\" and easier to spot\n};\n\nexport const biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles,\n },\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" },\n },\n body: {\n ...globalHyphens,\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle,\n },\n});\n","import { Box } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { focusStyle } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\n\ninterface Props {\n id: string;\n /**\n * angir hvor mye luft til vil ha over HashLinkTarget ved bruk av hash-lenke, eks '4rem'\n */\n spaceAbove?: string;\n /**\n * angir om du vil ha fokusramme rundt komponenten som mounter HashLinkTarget. Da må komponenten du wrapper med ha position: relative | absolute el\n */\n focusOnParent?: boolean;\n}\n\nconst focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle,\n },\n },\n};\n\n/*\n * Komponent som sørger for luft over anchors (elementer man kan lenke til med hash-lenker feks <a href=\"#min-overskrift\">Ta meg til overskrift</a>)\n */\nexport function HashLinkTargetBS(props: Props) {\n return (\n <Box position=\"relative\" css={props.focusOnParent ? focusOnRelativeParentStyle : undefined}>\n <Box\n id={props.id}\n tabIndex={props.focusOnParent ? -1 : undefined}\n position=\"absolute\"\n top={`-${props.spaceAbove || \"2.5rem\"}`}\n _focus={{\n boxShadow: \"none !important\",\n }}\n />\n </Box>\n );\n}\n","import React from \"react\";\nimport { ErrorBoundaryBS } from \"./ErrorBoundaryBS\";\n\nexport const withErrorBoundaryBS = <Props,>(Component: React.ComponentType<Props>, boundaryName: string) => {\n return (props: Props & React.JSX.IntrinsicAttributes) => (\n <ErrorBoundaryBS boundaryName={boundaryName}>\n <Component {...props} />\n </ErrorBoundaryBS>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig, SystemConfig } from \"@chakra-ui/react\";\nimport { biblioteksentralenChakraTheme } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\nimport { ColorModeProvider } from \"@chakra-ui/system\";\n\ninterface Props {\n children: ReactNode;\n customTheme?: SystemConfig;\n}\n\nexport const BiblioteksentralenProvider = (props: Props) => (\n <ChakraProvider value={createSystem(defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {})}>\n <ColorModeProvider {...props} />\n </ChakraProvider>\n);\n"]}
1
+ {"version":3,"sources":["/Users/danielwinsvold/Code/js-utils/packages/react/dist/index.js","../../utils/src/date.ts","../../utils/src/colors.ts","../../utils/src/environment.ts","../src/components/AlertBS.tsx","../src/components/ButtonBS.tsx","../src/components/IconButtonBS.tsx","../src/components/InputBS.tsx","../src/components/ConditionalWrapperBS.tsx","../src/components/ErrorBoundaryBS.tsx","../src/styles/chakraTheme/ButtonStyles.ts","../src/styles/chakraTheme/ContainerStyles.ts","../src/styles/chakraTheme/HeadingStyles.ts","../src/styles/chakraTheme/InputStyles.ts","../src/styles/chakraTheme/SpinnerStyles.ts","../src/styles/chakraTheme/sizes.ts","../src/styles/chakraTheme/LinkStyles.ts","../src/styles/chakraTheme/biblioteksentralenChakraTheme.ts","../src/components/HashLinkTargetBS.tsx","../src/components/withErrorBoundaryBS.tsx","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode-context.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode.utils.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/storage-manager.ts","../../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/src/index.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode-provider.tsx","../src/components/BiblioteksentralenProvider.tsx"],"names":["Object","defineProperty","exports","value","_interopRequireDefault","obj","__esModule","default","_optionalChain","ops","lastAccessLHS","undefined","i","length","op","fn","args","call","_format","require","_nb","colors","black","grey90","grey80","grey60","grey45","grey30","grey15","grey10","grey05","white","bsRødDark","bsRødMedium","accentPurple","accentPeach","accentGreen","accentBlueDark","accentBlueMedium","accentYellow","lightBlue","lightGreen","lightPeach","lightPurple","statusRed","statusYellow","statusGreen","statusGreenLight","statusRedLight","statusYellowLight","neptune","isDevelopment","process","env","NODE_ENV","_react","_react3","_react4","_reactfeather","colorLookup","info","bg","color","warning","success","error","iconLookup","createElement","Info","strokeWidth","role","AlertCircle","CheckCircle","XCircle","variantStyles","inline","borderColor","backgroundColor","padding","AlertBS","status","children","variant","header","rest","Alert","Root","fontSize","border","display","flexWrap","Indicator","marginX","Content","Title","Description","ButtonBS","Button","IconButtonBS","IconButton","InputBS","props","labelProps","label","helperText","errorMessage","hideLabel","inputProps","formLabel","React","Field","Label","invalid","VisuallyHidden","HelperText","Input","ErrorText","ConditionalWrapperBS","condition","wrapper","Wrapper","Fragment","StyledPre","Box","as","paddingTop","wordBreak","whiteSpace","ErrorBoundaryBS","state","hasError","componentDidCatch","errorInfo","setState","console","boundaryName","render","stackTrace","_","_2","_3","componentStack","errormsg","_4","_5","_6","message","getDerivedStateFromError","Component","variants","primary","_hover","secondary","tertiary","defaultConfig","_7","theme","_8","recipes","_9","button","_10","_11","ButtonStyles","defineRecipe","base","borderWidth","fontWeight","_disabled","opacity","size","sm","h","px","textStyle","md","lg","defaultVariants","variants2","subtle","_light","_dark","outline","flushed","_placeholder","animationDuration","container","xl","sizes","variants3","plain","textDecoration","textDecorationColor","underline","_focus","tokens","defineTokens","globalHyphens","hyphens","hyphenateLimitChars","focusStyle","boxShadow","transition","biblioteksentralenChakraTheme","defineConfig","heading","HeadingStyles","input","InputStyles","link","LinkStyles","ContainerStyles","spinner","SpinnerStyles","globalCss","html","scrollBehavior","body","focusOnRelativeParentStyle","_focusWithin","position","content","top","left","height","width","pointerEvents","borderRadius","HashLinkTargetBS","css","focusOnParent","id","tabIndex","spaceAbove","withErrorBoundaryBS","ColorModeContext","createContext","displayName","classNames","light","dark","getColorModeUtils","options","preventTransition","utils","setDataset","cleanup","document","documentElement","dataset","style","colorScheme","setClassName","classList","add","remove","query","window","matchMedia","getSystemTheme","fallback","_a","matches","addListener","mql","listener","e","addEventListener","removeListener","removeEventListener","appendChild","createTextNode","head","getComputedStyle","requestAnimationFrame","removeChild","STORAGE_KEY","createLocalStorageManager","key","ssr","type","get","init","globalThis","localStorage","getItem","set","setItem","localStorageManager","parseCookie","cookie","match","RegExp","createCookieStorageManager","cookieStorageManager","useSafeLayoutEffect","Boolean","useLayoutEffect","useEffect","_jsxruntime","noop","getTheme","manager","ColorModeProvider","useSystemColorMode","initialColorMode","disableTransitionOnChange","colorModeManager","defaultColorMode","useState","colorMode","rawSetColorMode","resolvedColorMode","setResolvedColorMode","useMemo","resolvedValue","setColorMode","useCallback","value2","resolved","managerValue","toggleColorMode","context","forced","jsx","Provider","DarkMode","LightMode","BiblioteksentralenProvider","ChakraProvider","createSystem","customTheme"],"mappings":"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","sourcesContent":["\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\"use client\";\n\n// ../utils/dist/index.mjs\nvar _format = require('date-fns/format');\nvar _nb = require('date-fns/locale/nb');\nvar colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsR\\u00F8dDark: \"#870010\",\n bsR\\u00F8dMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\"\n }\n};\nfunction isDevelopment() {\n return process.env.NODE_ENV === \"development\";\n}\n\n// src/components/AlertBS.tsx\nvar _react = require('@chakra-ui/react');\nvar _react3 = require('react'); var _react4 = _interopRequireDefault(_react3);\nvar _reactfeather = require('react-feather');\nvar colorLookup = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed }\n};\nvar iconLookup = {\n info: /* @__PURE__ */ _react4.default.createElement(_reactfeather.Info, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Informasjon\" }),\n warning: /* @__PURE__ */ _react4.default.createElement(_reactfeather.AlertCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Advarsel\" }),\n success: /* @__PURE__ */ _react4.default.createElement(_reactfeather.CheckCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Suksess\" }),\n error: /* @__PURE__ */ _react4.default.createElement(_reactfeather.XCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Feil\" })\n};\nvar variantStyles = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\"\n }\n};\nfunction AlertBS({ status, children, variant, header, ...rest }) {\n const colors2 = colorLookup[status];\n return /* @__PURE__ */ _react4.default.createElement(\n _react.Alert.Root,\n {\n status,\n fontSize: \"md\",\n border: `0.1rem solid`,\n borderColor: colors2.color,\n backgroundColor: colors2.bg,\n display: \"flex\",\n flexWrap: \"wrap\",\n ...variant === \"inline\" ? variantStyles[variant] : {},\n ...rest\n },\n /* @__PURE__ */ _react4.default.createElement(_react.Alert.Indicator, { marginX: \"auto\" }, iconLookup[status]),\n /* @__PURE__ */ _react4.default.createElement(_react.Alert.Content, { color: \"black\" }, header && /* @__PURE__ */ _react4.default.createElement(_react.Alert.Title, null, header), /* @__PURE__ */ _react4.default.createElement(_react.Alert.Description, null, children))\n );\n}\n\n// src/components/ButtonBS.tsx\n\nvar ButtonBS = _react.Button;\n\n// src/components/IconButtonBS.tsx\n\nvar IconButtonBS = _react.IconButton;\n\n// src/components/InputBS.tsx\n\n\nvar InputBS = (props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n const formLabel = /* @__PURE__ */ _react4.default.createElement(_react.Field.Label, { ...labelProps }, label);\n return /* @__PURE__ */ _react4.default.createElement(_react.Field.Root, { invalid: !!errorMessage }, hideLabel ? /* @__PURE__ */ _react4.default.createElement(_react.VisuallyHidden, null, formLabel) : formLabel, helperText && /* @__PURE__ */ _react4.default.createElement(_react.Field.HelperText, null, helperText), /* @__PURE__ */ _react4.default.createElement(_react.Input, { ...inputProps }), errorMessage && /* @__PURE__ */ _react4.default.createElement(_react.Field.ErrorText, null, errorMessage));\n};\n\n// src/components/ConditionalWrapperBS.tsx\n\nvar ConditionalWrapperBS = ({ condition, children, wrapper: Wrapper }) => condition ? /* @__PURE__ */ _react4.default.createElement(Wrapper, null, children) : /* @__PURE__ */ _react4.default.createElement(_react4.default.Fragment, null, children);\n\n// src/components/ErrorBoundaryBS.tsx\n\n\nvar StyledPre = (props) => /* @__PURE__ */ _react4.default.createElement(_react.Box, { as: \"pre\", paddingTop: \"0.5rem\", wordBreak: \"break-all\", whiteSpace: \"pre-wrap\", fontSize: \"0.8rem\", ...props });\nvar ErrorBoundaryBS = class extends _react4.default.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n componentDidCatch(error, errorInfo) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n render() {\n if (this.state.hasError) {\n const stackTrace = _optionalChain([this, 'access', _ => _.state, 'access', _2 => _2.errorInfo, 'optionalAccess', _3 => _3.componentStack]);\n const errormsg = _optionalChain([this, 'access', _4 => _4.state, 'access', _5 => _5.error, 'optionalAccess', _6 => _6.message]);\n const info = this.props.boundaryName;\n return /* @__PURE__ */ _react4.default.createElement(\"div\", null, /* @__PURE__ */ _react4.default.createElement(AlertBS, { status: \"error\" }, /* @__PURE__ */ _react4.default.createElement(\"p\", null, \"Beklager, det skjedde en teknisk feil.\"), isDevelopment() && (stackTrace || errormsg) && /* @__PURE__ */ _react4.default.createElement(\"div\", null, /* @__PURE__ */ _react4.default.createElement(StyledPre, null, errormsg || \"\"), /* @__PURE__ */ _react4.default.createElement(StyledPre, null, info || \"\"), /* @__PURE__ */ _react4.default.createElement(StyledPre, null, stackTrace || \"\"))));\n }\n return this.props.children;\n }\n};\n\n// src/components/HashLinkTargetBS.tsx\n\n\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\n\n\n// src/styles/chakraTheme/ButtonStyles.ts\n\nvar variants = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\"\n }\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ..._optionalChain([_react.defaultConfig, 'access', _7 => _7.theme, 'optionalAccess', _8 => _8.recipes, 'optionalAccess', _9 => _9.button, 'optionalAccess', _10 => _10.variants, 'optionalAccess', _11 => _11.variant])\n};\nvar ButtonStyles = _react.defineRecipe.call(void 0, {\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1\n }\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\"\n },\n md: {\n textStyle: \"md\"\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\"\n }\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n});\n\n// src/styles/chakraTheme/ContainerStyles.ts\n\nvar ContainerStyles = _react.defineRecipe.call(void 0, {\n base: {\n px: \".75rem\"\n // Padding left/right\n }\n});\n\n// src/styles/chakraTheme/HeadingStyles.ts\n\nvar HeadingStyles = _react.defineRecipe.call(void 0, {\n base: {\n fontWeight: \"600\"\n }\n});\n\n// src/styles/chakraTheme/InputStyles.ts\n\nvar variants2 = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" }\n }\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n }\n};\nvar InputStyles = _react.defineRecipe.call(void 0, {\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" }\n }\n },\n variants: {\n variant: variants2\n },\n defaultVariants: {\n variant: \"subtle\"\n }\n});\n\n// src/styles/chakraTheme/SpinnerStyles.ts\n\nvar SpinnerStyles = _react.defineRecipe.call(void 0, {\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\"\n }\n});\n\n// src/styles/chakraTheme/sizes.ts\nvar container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" },\n // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" }\n};\nvar sizes = {\n container\n};\n\n// src/styles/chakraTheme/LinkStyles.ts\n\nvar variants3 = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\"\n }\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\"\n }\n }\n};\nvar LinkStyles = _react.defineRecipe.call(void 0, {\n base: {\n _focus: {\n outline: \"none\"\n }\n },\n variants: {\n variant: variants3\n },\n defaultVariants: {\n variant: \"underline\"\n }\n});\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nvar tokens = _react.defineTokens.call(void 0, {\n sizes\n});\nvar globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\"\n // minimum word-length / min letters first line / min letters second line\n};\nvar focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\"\n // Transition makes the newly focused element \"pop in\" and easier to spot\n};\nvar biblioteksentralenChakraTheme = _react.defineConfig.call(void 0, {\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles\n }\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" }\n },\n body: {\n ...globalHyphens\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle\n }\n});\n\n// src/components/HashLinkTargetBS.tsx\nvar focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle\n }\n }\n};\nfunction HashLinkTargetBS(props) {\n return /* @__PURE__ */ _react4.default.createElement(_react.Box, { position: \"relative\", css: props.focusOnParent ? focusOnRelativeParentStyle : void 0 }, /* @__PURE__ */ _react4.default.createElement(\n _react.Box,\n {\n id: props.id,\n tabIndex: props.focusOnParent ? -1 : void 0,\n position: \"absolute\",\n top: `-${props.spaceAbove || \"2.5rem\"}`,\n _focus: {\n boxShadow: \"none !important\"\n }\n }\n ));\n}\n\n// src/components/withErrorBoundaryBS.tsx\n\nvar withErrorBoundaryBS = (Component, boundaryName) => {\n return (props) => /* @__PURE__ */ _react4.default.createElement(ErrorBoundaryBS, { boundaryName }, /* @__PURE__ */ _react4.default.createElement(Component, { ...props }));\n};\n\n// src/components/BiblioteksentralenProvider.tsx\n\n\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-UQDW7KKV.mjs\n\nvar ColorModeContext = _react3.createContext.call(void 0, {});\nColorModeContext.displayName = \"ColorModeContext\";\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-X7ZBZ4KW.mjs\nvar classNames = {\n light: \"chakra-ui-light\",\n dark: \"chakra-ui-dark\"\n};\nfunction getColorModeUtils(options = {}) {\n const { preventTransition = true } = options;\n const utils = {\n setDataset: (value) => {\n const cleanup = preventTransition ? utils.preventTransition() : void 0;\n document.documentElement.dataset.theme = value;\n document.documentElement.style.colorScheme = value;\n cleanup == null ? void 0 : cleanup();\n },\n setClassName(dark) {\n document.body.classList.add(dark ? classNames.dark : classNames.light);\n document.body.classList.remove(dark ? classNames.light : classNames.dark);\n },\n query() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\");\n },\n getSystemTheme(fallback) {\n var _a;\n const dark = (_a = utils.query().matches) != null ? _a : fallback === \"dark\";\n return dark ? \"dark\" : \"light\";\n },\n addListener(fn) {\n const mql = utils.query();\n const listener = (e) => {\n fn(e.matches ? \"dark\" : \"light\");\n };\n if (typeof mql.addListener === \"function\")\n mql.addListener(listener);\n else\n mql.addEventListener(\"change\", listener);\n return () => {\n if (typeof mql.removeListener === \"function\")\n mql.removeListener(listener);\n else\n mql.removeEventListener(\"change\", listener);\n };\n },\n preventTransition() {\n const css = document.createElement(\"style\");\n css.appendChild(\n document.createTextNode(\n `*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`\n )\n );\n document.head.appendChild(css);\n return () => {\n ;\n (() => window.getComputedStyle(document.body))();\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n document.head.removeChild(css);\n });\n });\n };\n }\n };\n return utils;\n}\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-44OWBZ77.mjs\nvar STORAGE_KEY = \"chakra-ui-color-mode\";\nfunction createLocalStorageManager(key) {\n return {\n ssr: false,\n type: \"localStorage\",\n get(init) {\n if (!(globalThis == null ? void 0 : globalThis.document))\n return init;\n let value;\n try {\n value = localStorage.getItem(key) || init;\n } catch (e) {\n }\n return value || init;\n },\n set(value) {\n try {\n localStorage.setItem(key, value);\n } catch (e) {\n }\n }\n };\n}\nvar localStorageManager = createLocalStorageManager(STORAGE_KEY);\nfunction parseCookie(cookie, key) {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`));\n return match == null ? void 0 : match[2];\n}\nfunction createCookieStorageManager(key, cookie) {\n return {\n ssr: !!cookie,\n type: \"cookie\",\n get(init) {\n if (cookie)\n return parseCookie(cookie, key);\n if (!(globalThis == null ? void 0 : globalThis.document))\n return init;\n return parseCookie(document.cookie, key) || init;\n },\n set(value) {\n document.cookie = `${key}=${value}; max-age=31536000; path=/`;\n }\n };\n}\nvar cookieStorageManager = createCookieStorageManager(STORAGE_KEY);\n\n// ../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/dist/index.mjs\n\nvar useSafeLayoutEffect = Boolean(globalThis == null ? void 0 : globalThis.document) ? _react3.useLayoutEffect : _react3.useEffect;\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-AMBGAKG2.mjs\n\nvar _jsxruntime = require('react/jsx-runtime');\nvar noop = () => {\n};\nfunction getTheme(manager, fallback) {\n return manager.type === \"cookie\" && manager.ssr ? manager.get(fallback) : fallback;\n}\nfunction ColorModeProvider(props) {\n const {\n value,\n children,\n options: {\n useSystemColorMode,\n initialColorMode,\n disableTransitionOnChange\n } = {},\n colorModeManager = localStorageManager\n } = props;\n const defaultColorMode = initialColorMode === \"dark\" ? \"dark\" : \"light\";\n const [colorMode, rawSetColorMode] = _react3.useState.call(void 0, \n () => getTheme(colorModeManager, defaultColorMode)\n );\n const [resolvedColorMode, setResolvedColorMode] = _react3.useState.call(void 0, \n () => getTheme(colorModeManager)\n );\n const { getSystemTheme, setClassName, setDataset, addListener } = _react3.useMemo.call(void 0, \n () => getColorModeUtils({ preventTransition: disableTransitionOnChange }),\n [disableTransitionOnChange]\n );\n const resolvedValue = initialColorMode === \"system\" && !colorMode ? resolvedColorMode : colorMode;\n const setColorMode = _react3.useCallback.call(void 0, \n (value2) => {\n const resolved = value2 === \"system\" ? getSystemTheme() : value2;\n rawSetColorMode(resolved);\n setClassName(resolved === \"dark\");\n setDataset(resolved);\n colorModeManager.set(resolved);\n },\n [colorModeManager, getSystemTheme, setClassName, setDataset]\n );\n useSafeLayoutEffect(() => {\n if (initialColorMode === \"system\") {\n setResolvedColorMode(getSystemTheme());\n }\n }, []);\n _react3.useEffect.call(void 0, () => {\n const managerValue = colorModeManager.get();\n if (managerValue) {\n setColorMode(managerValue);\n return;\n }\n if (initialColorMode === \"system\") {\n setColorMode(\"system\");\n return;\n }\n setColorMode(defaultColorMode);\n }, [colorModeManager, defaultColorMode, initialColorMode, setColorMode]);\n const toggleColorMode = _react3.useCallback.call(void 0, () => {\n setColorMode(resolvedValue === \"dark\" ? \"light\" : \"dark\");\n }, [resolvedValue, setColorMode]);\n _react3.useEffect.call(void 0, () => {\n if (!useSystemColorMode)\n return;\n return addListener(setColorMode);\n }, [useSystemColorMode, addListener, setColorMode]);\n const context = _react3.useMemo.call(void 0, \n () => ({\n colorMode: value != null ? value : resolvedValue,\n toggleColorMode: value ? noop : toggleColorMode,\n setColorMode: value ? noop : setColorMode,\n forced: value !== void 0\n }),\n [resolvedValue, toggleColorMode, setColorMode, value]\n );\n return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, { value: context, children });\n}\nColorModeProvider.displayName = \"ColorModeProvider\";\nfunction DarkMode(props) {\n const context = _react3.useMemo.call(void 0, \n () => ({\n colorMode: \"dark\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true\n }),\n []\n );\n return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, { value: context, ...props });\n}\nDarkMode.displayName = \"DarkMode\";\nfunction LightMode(props) {\n const context = _react3.useMemo.call(void 0, \n () => ({\n colorMode: \"light\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true\n }),\n []\n );\n return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColorModeContext.Provider, { value: context, ...props });\n}\nLightMode.displayName = \"LightMode\";\n\n// src/components/BiblioteksentralenProvider.tsx\nvar BiblioteksentralenProvider = (props) => /* @__PURE__ */ _react4.default.createElement(_react.ChakraProvider, { value: _react.createSystem.call(void 0, _react.defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {}) }, /* @__PURE__ */ _react4.default.createElement(ColorModeProvider, { ...props }));\n\n\n\n\n\n\n\n\n\n\nexports.AlertBS = AlertBS; exports.BiblioteksentralenProvider = BiblioteksentralenProvider; exports.ButtonBS = ButtonBS; exports.ConditionalWrapperBS = ConditionalWrapperBS; exports.ErrorBoundaryBS = ErrorBoundaryBS; exports.HashLinkTargetBS = HashLinkTargetBS; exports.IconButtonBS = IconButtonBS; exports.InputBS = InputBS; exports.withErrorBoundaryBS = withErrorBoundaryBS;\n","import { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\n\nexport function formaterDato(dato?: string, dateFnsformat = \"Pp\") {\n if (typeof dato !== \"string\") return \"Ukjent dato\";\n\n try {\n return format(new Date(dato), dateFnsformat, { locale: nb });\n } catch (e) {\n console.error(\"Kunne ikke formattere dato:\" + dato, e);\n return dato;\n }\n}\n","export const colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsRødDark: \"#870010\",\n bsRødMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\",\n },\n};\n","export function isDevelopment(): boolean {\n return process.env.NODE_ENV === \"development\";\n}\n\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\nexport function isServer(): boolean {\n return !isClient();\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { colors } from \"@biblioteksentralen/utils\";\nimport { AlertRootProps, Alert as ChakraAlert, SystemStyleObject } from \"@chakra-ui/react\";\nimport React, { ReactNode } from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\n\ntype Status = \"info\" | \"warning\" | \"success\" | \"error\";\ntype CustomVariants = \"inline\";\ntype Variants = AlertRootProps[\"variant\"] | CustomVariants;\n\nconst colorLookup: Record<Status, { bg: string; color: string }> = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed },\n};\n\nconst iconLookup: Record<Status, React.ReactElement> = {\n info: <Info strokeWidth={1.75} role=\"img\" aria-label=\"Informasjon\" />,\n warning: <AlertCircle strokeWidth={1.75} role=\"img\" aria-label=\"Advarsel\" />,\n success: <CheckCircle strokeWidth={1.75} role=\"img\" aria-label=\"Suksess\" />,\n error: <XCircle strokeWidth={1.75} role=\"img\" aria-label=\"Feil\" />,\n};\n\ninterface Props extends Modify<AlertRootProps, { variant?: Variants }> {\n children: ReactNode;\n header?: ReactNode;\n status: Status;\n variant?: Variants;\n}\n\nconst variantStyles: Record<CustomVariants, SystemStyleObject> = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n },\n};\n\nexport function AlertBS({ status, children, variant, header, ...rest }: Props) {\n const colors = colorLookup[status];\n return (\n <ChakraAlert.Root\n status={status}\n fontSize=\"md\"\n border={`0.1rem solid`}\n borderColor={colors.color}\n backgroundColor={colors.bg}\n display=\"flex\"\n flexWrap=\"wrap\"\n {...(variant === \"inline\" ? variantStyles[variant] : {})}\n {...rest}\n >\n <ChakraAlert.Indicator marginX=\"auto\">{iconLookup[status]}</ChakraAlert.Indicator>\n <ChakraAlert.Content color=\"black\">\n {header && <ChakraAlert.Title>{header}</ChakraAlert.Title>}\n <ChakraAlert.Description>{children}</ChakraAlert.Description>\n </ChakraAlert.Content>\n </ChakraAlert.Root>\n );\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { Button as ChakraButton, ButtonProps as NativeButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras Button with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype ButtonVariants = NativeButtonProps[\"variant\"] | CustomButtonVariants;\nexport type ButtonBSProps = Modify<NativeButtonProps, { variant?: ButtonVariants }>;\nexport const ButtonBS = ChakraButton as ComponentWithAs<\"button\", ButtonBSProps>;\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { IconButton as ChakraIconButton, IconButtonProps as ChakraIconButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras IconButton with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype IconButtonVariants = ChakraIconButtonProps[\"variant\"] | CustomButtonVariants;\nexport type IconButtonBSProps = Modify<ChakraIconButtonProps, { variant?: IconButtonVariants }>;\nexport const IconButtonBS = ChakraIconButton as ComponentWithAs<\"button\", IconButtonBSProps>;\n","import { Input as ChakraInput, Field, FieldLabelProps, InputProps, VisuallyHidden } from \"@chakra-ui/react\";\nimport React, { RefObject } from \"react\";\n\ninterface Props extends InputProps {\n label: string;\n hideLabel?: boolean;\n labelProps?: FieldLabelProps;\n helperText?: string;\n errorMessage?: string;\n ref?: RefObject<HTMLInputElement | null>;\n}\n\n/**\n * Creating custom input-component to make sure label is always set (for accessibility)\n * Also handles some common needs (helper text and error message. For more advanced input-components we leave it to the consumers to compose custom input-components based on Chakra\n */\nexport const InputBS = (props: Props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n\n const formLabel = <Field.Label {...labelProps}>{label}</Field.Label>;\n\n return (\n <Field.Root invalid={!!errorMessage}>\n {hideLabel ? <VisuallyHidden>{formLabel}</VisuallyHidden> : formLabel}\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n <ChakraInput {...inputProps} />\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {errorMessage && <Field.ErrorText>{errorMessage}</Field.ErrorText>}\n </Field.Root>\n );\n};\n","import React, { FunctionComponent, ReactNode } from \"react\";\n\ntype Props = {\n children: ReactNode;\n wrapper: FunctionComponent<{ children: ReactNode }>;\n condition: boolean;\n};\n\n/**\n * Conditionally wrapps children with a component. If conditions are not met children mounted without the wrapper.\n */\nexport const ConditionalWrapperBS: FunctionComponent<Props> = ({ condition, children, wrapper: Wrapper }) =>\n condition ? <Wrapper>{children}</Wrapper> : <>{children}</>;\n","import { isDevelopment } from \"@biblioteksentralen/utils\";\nimport { Box, BoxProps } from \"@chakra-ui/react\";\nimport React, { ErrorInfo, ReactNode } from \"react\";\nimport { AlertBS } from \"./AlertBS\";\n\ninterface Props {\n boundaryName?: string;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n}\n\nconst StyledPre = (props: BoxProps) => (\n <Box as=\"pre\" paddingTop=\"0.5rem\" wordBreak=\"break-all\" whiteSpace=\"pre-wrap\" fontSize=\"0.8rem\" {...props} />\n);\n\nexport class ErrorBoundaryBS extends React.Component<Props, State> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n\n return (\n <div>\n <AlertBS status=\"error\">\n <p>Beklager, det skjedde en teknisk feil.</p>\n {isDevelopment() && (stackTrace || errormsg) && (\n <div>\n <StyledPre>{errormsg || \"\"}</StyledPre>\n <StyledPre>{info || \"\"}</StyledPre>\n <StyledPre>{stackTrace || \"\"}</StyledPre>\n </div>\n )}\n </AlertBS>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defaultConfig, defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomButtonVariants = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst variants: Record<CustomButtonVariants, SystemStyleObject> = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\",\n },\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant,\n};\n\nexport const ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1,\n },\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\",\n },\n md: {\n textStyle: \"md\",\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\",\n },\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const ContainerStyles = defineRecipe({\n base: {\n px: \".75rem\", // Padding left/right\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const HeadingStyles = defineRecipe({\n base: {\n fontWeight: \"600\",\n },\n});\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nconst variants: Record<string, SystemStyleObject> = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" },\n },\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n};\n\nexport const InputStyles = defineRecipe({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" },\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"subtle\",\n },\n});\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defineRecipe } from \"@chakra-ui/react\";\n\nexport const SpinnerStyles = defineRecipe({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\",\n },\n});\n","const container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" }, // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" },\n};\n\nexport const sizes = {\n container,\n};\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomLinkVariants = \"plain\" | \"underline\";\n\nconst variants: Record<CustomLinkVariants, SystemStyleObject> = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\",\n },\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\",\n },\n },\n};\n\nexport const LinkStyles = defineRecipe({\n base: {\n _focus: {\n outline: \"none\",\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"underline\",\n },\n});\n","import { defineConfig, defineTokens } from \"@chakra-ui/react\";\nimport { ButtonStyles } from \"./ButtonStyles\";\nimport { ContainerStyles } from \"./ContainerStyles\";\nimport { HeadingStyles } from \"./HeadingStyles\";\nimport { InputStyles } from \"./InputStyles\";\nimport { SpinnerStyles } from \"./SpinnerStyles\";\nimport { sizes } from \"./sizes\";\nimport { LinkStyles } from \"./LinkStyles\";\nimport { colors } from \"@biblioteksentralen/utils\";\n\nconst tokens = defineTokens({\n sizes,\n});\n\n// https://blog.logrocket.com/guide-css-word-wrap-overflow-wrap-word-break/\n// https://medium.com/clear-left-thinking/all-you-need-to-know-about-hyphenation-in-css-2baee2d89179\n// Skrur på hyphens auto som default fordi vi har masse mikrotekster og små elementer der layout knekker uten dette, og vi lager stadig nye og glemmer å ta hensyn til dette.\n// Så kan man optionaly sette hyphens: none de stedene man ikke ønsker det, men har ikke sett noe som knekker/blir rart pga dette enda\nconst globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\", // minimum word-length / min letters first line / min letters second line\n};\n\nexport const focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\", // Transition makes the newly focused element \"pop in\" and easier to spot\n};\n\nexport const biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles,\n },\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" },\n },\n body: {\n ...globalHyphens,\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle,\n },\n});\n","import { Box } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { focusStyle } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\n\ninterface Props {\n id: string;\n /**\n * angir hvor mye luft til vil ha over HashLinkTarget ved bruk av hash-lenke, eks '4rem'\n */\n spaceAbove?: string;\n /**\n * angir om du vil ha fokusramme rundt komponenten som mounter HashLinkTarget. Da må komponenten du wrapper med ha position: relative | absolute el\n */\n focusOnParent?: boolean;\n}\n\nconst focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle,\n },\n },\n};\n\n/*\n * Komponent som sørger for luft over anchors (elementer man kan lenke til med hash-lenker feks <a href=\"#min-overskrift\">Ta meg til overskrift</a>)\n */\nexport function HashLinkTargetBS(props: Props) {\n return (\n <Box position=\"relative\" css={props.focusOnParent ? focusOnRelativeParentStyle : undefined}>\n <Box\n id={props.id}\n tabIndex={props.focusOnParent ? -1 : undefined}\n position=\"absolute\"\n top={`-${props.spaceAbove || \"2.5rem\"}`}\n _focus={{\n boxShadow: \"none !important\",\n }}\n />\n </Box>\n );\n}\n","import React from \"react\";\nimport { ErrorBoundaryBS } from \"./ErrorBoundaryBS\";\n\nexport const withErrorBoundaryBS = <Props,>(Component: React.ComponentType<Props>, boundaryName: string) => {\n return (props: Props & React.JSX.IntrinsicAttributes) => (\n <ErrorBoundaryBS boundaryName={boundaryName}>\n <Component {...props} />\n </ErrorBoundaryBS>\n );\n};\n","import { createContext, useContext } from \"react\"\nimport { ColorModeContextType } from \"./color-mode-types\"\n\nexport const ColorModeContext = createContext({} as ColorModeContextType)\n\nColorModeContext.displayName = \"ColorModeContext\"\n\n/**\n * React hook that reads from `ColorModeProvider` context\n * Returns the color mode and function to toggle it\n */\nexport function useColorMode() {\n const context = useContext(ColorModeContext)\n if (context === undefined) {\n throw new Error(\"useColorMode must be used within a ColorModeProvider\")\n }\n return context\n}\n\n/**\n * Change value based on color mode.\n *\n * @param light the light mode value\n * @param dark the dark mode value\n *\n * @example\n *\n * ```js\n * const Icon = useColorModeValue(MoonIcon, SunIcon)\n * ```\n */\nexport function useColorModeValue<TLight = unknown, TDark = unknown>(\n light: TLight,\n dark: TDark,\n) {\n const { colorMode } = useColorMode()\n return colorMode === \"dark\" ? dark : light\n}\n","import { ColorMode } from \"./color-mode-types\"\n\nconst classNames = {\n light: \"chakra-ui-light\",\n dark: \"chakra-ui-dark\",\n}\n\ntype UtilOptions = {\n preventTransition?: boolean\n}\n\nexport function getColorModeUtils(options: UtilOptions = {}) {\n const { preventTransition = true } = options\n\n const utils = {\n setDataset: (value: ColorMode) => {\n const cleanup = preventTransition ? utils.preventTransition() : undefined\n document.documentElement.dataset.theme = value\n document.documentElement.style.colorScheme = value\n cleanup?.()\n },\n setClassName(dark: boolean) {\n document.body.classList.add(dark ? classNames.dark : classNames.light)\n document.body.classList.remove(dark ? classNames.light : classNames.dark)\n },\n query() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\")\n },\n getSystemTheme(fallback?: ColorMode) {\n const dark = utils.query().matches ?? fallback === \"dark\"\n return dark ? \"dark\" : \"light\"\n },\n addListener(fn: (cm: ColorMode) => unknown) {\n const mql = utils.query()\n const listener = (e: MediaQueryListEvent) => {\n fn(e.matches ? \"dark\" : \"light\")\n }\n\n if (typeof mql.addListener === \"function\") mql.addListener(listener)\n else mql.addEventListener(\"change\", listener)\n\n return () => {\n if (typeof mql.removeListener === \"function\")\n mql.removeListener(listener)\n else mql.removeEventListener(\"change\", listener)\n }\n },\n preventTransition() {\n const css = document.createElement(\"style\")\n css.appendChild(\n document.createTextNode(\n `*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`,\n ),\n )\n document.head.appendChild(css)\n\n return () => {\n // force a reflow\n ;(() => window.getComputedStyle(document.body))()\n\n // wait for next tick\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n document.head.removeChild(css)\n })\n })\n }\n },\n }\n\n return utils\n}\n","import { ColorMode } from \"./color-mode-types\"\n\nexport const STORAGE_KEY = \"chakra-ui-color-mode\"\n\ntype MaybeColorMode = ColorMode | undefined\n\nexport interface StorageManager {\n type: \"cookie\" | \"localStorage\"\n ssr?: boolean\n get(init?: ColorMode): MaybeColorMode\n set(value: ColorMode | \"system\"): void\n}\n\nexport function createLocalStorageManager(key: string): StorageManager {\n return {\n ssr: false,\n type: \"localStorage\",\n get(init?) {\n if (!globalThis?.document) return init\n let value: any\n try {\n value = localStorage.getItem(key) || init\n } catch (e) {\n // no op\n }\n\n return value || init\n },\n set(value) {\n try {\n localStorage.setItem(key, value)\n } catch (e) {\n // no op\n }\n },\n }\n}\n\nexport const localStorageManager = createLocalStorageManager(STORAGE_KEY)\n\nfunction parseCookie(cookie: string, key: string): MaybeColorMode {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`))\n return match?.[2] as MaybeColorMode\n}\n\nexport function createCookieStorageManager(\n key: string,\n cookie?: string,\n): StorageManager {\n return {\n ssr: !!cookie,\n type: \"cookie\",\n get(init?): MaybeColorMode {\n if (cookie) return parseCookie(cookie, key)\n if (!globalThis?.document) return init\n return parseCookie(document.cookie, key) || init\n },\n set(value) {\n document.cookie = `${key}=${value}; max-age=31536000; path=/`\n },\n }\n}\n\nexport const cookieStorageManager = createCookieStorageManager(STORAGE_KEY)\n\nexport const cookieStorageManagerSSR = (cookie: string) =>\n createCookieStorageManager(STORAGE_KEY, cookie)\n","import { useEffect, useLayoutEffect } from \"react\"\n\nexport const useSafeLayoutEffect = Boolean(globalThis?.document)\n ? useLayoutEffect\n : useEffect\n","import { useSafeLayoutEffect } from \"@chakra-ui/react-use-safe-layout-effect\"\nimport { useCallback, useEffect, useMemo, useState } from \"react\"\nimport { ColorModeContext } from \"./color-mode-context\"\nimport {\n ColorMode,\n ColorModeContextType,\n ColorModeOptions,\n} from \"./color-mode-types\"\nimport { getColorModeUtils } from \"./color-mode.utils\"\nimport { localStorageManager, StorageManager } from \"./storage-manager\"\n\nconst noop = () => {}\n\nexport interface ColorModeProviderProps {\n value?: ColorMode\n children?: React.ReactNode\n options?: ColorModeOptions\n colorModeManager?: StorageManager\n}\n\nfunction getTheme(manager: StorageManager, fallback?: ColorMode) {\n return manager.type === \"cookie\" && manager.ssr\n ? manager.get(fallback)\n : fallback\n}\n\n/**\n * Provides context for the color mode based on config in `theme`\n * Returns the color mode and function to toggle the color mode\n */\nexport function ColorModeProvider(props: ColorModeProviderProps) {\n const {\n value,\n children,\n options: {\n useSystemColorMode,\n initialColorMode,\n disableTransitionOnChange,\n } = {},\n colorModeManager = localStorageManager,\n } = props\n\n const defaultColorMode = initialColorMode === \"dark\" ? \"dark\" : \"light\"\n\n const [colorMode, rawSetColorMode] = useState(() =>\n getTheme(colorModeManager, defaultColorMode),\n )\n\n const [resolvedColorMode, setResolvedColorMode] = useState(() =>\n getTheme(colorModeManager),\n )\n\n const { getSystemTheme, setClassName, setDataset, addListener } = useMemo(\n () => getColorModeUtils({ preventTransition: disableTransitionOnChange }),\n [disableTransitionOnChange],\n )\n\n const resolvedValue =\n initialColorMode === \"system\" && !colorMode ? resolvedColorMode : colorMode\n\n const setColorMode = useCallback(\n (value: ColorMode | \"system\") => {\n //\n const resolved = value === \"system\" ? getSystemTheme() : value\n rawSetColorMode(resolved)\n\n setClassName(resolved === \"dark\")\n setDataset(resolved)\n\n colorModeManager.set(resolved)\n },\n [colorModeManager, getSystemTheme, setClassName, setDataset],\n )\n\n useSafeLayoutEffect(() => {\n if (initialColorMode === \"system\") {\n setResolvedColorMode(getSystemTheme())\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n const managerValue = colorModeManager.get()\n\n if (managerValue) {\n setColorMode(managerValue)\n return\n }\n\n if (initialColorMode === \"system\") {\n setColorMode(\"system\")\n return\n }\n\n setColorMode(defaultColorMode)\n }, [colorModeManager, defaultColorMode, initialColorMode, setColorMode])\n\n const toggleColorMode = useCallback(() => {\n setColorMode(resolvedValue === \"dark\" ? \"light\" : \"dark\")\n }, [resolvedValue, setColorMode])\n\n useEffect(() => {\n if (!useSystemColorMode) return\n return addListener(setColorMode)\n }, [useSystemColorMode, addListener, setColorMode])\n\n // presence of `value` indicates a controlled context\n const context = useMemo(\n () => ({\n colorMode: value ?? (resolvedValue as ColorMode),\n toggleColorMode: value ? noop : toggleColorMode,\n setColorMode: value ? noop : setColorMode,\n forced: value !== undefined,\n }),\n [resolvedValue, toggleColorMode, setColorMode, value],\n )\n\n return (\n <ColorModeContext.Provider value={context}>\n {children}\n </ColorModeContext.Provider>\n )\n}\n\nColorModeProvider.displayName = \"ColorModeProvider\"\n\n/**\n * Locks the color mode to `dark`, without any way to change it.\n */\nexport function DarkMode(props: React.PropsWithChildren<{}>) {\n const context = useMemo<ColorModeContextType>(\n () => ({\n colorMode: \"dark\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true,\n }),\n [],\n )\n\n return <ColorModeContext.Provider value={context} {...props} />\n}\n\nDarkMode.displayName = \"DarkMode\"\n\n/**\n * Locks the color mode to `light` without any way to change it.\n */\nexport function LightMode(props: React.PropsWithChildren<{}>) {\n const context = useMemo<ColorModeContextType>(\n () => ({\n colorMode: \"light\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true,\n }),\n [],\n )\n\n return <ColorModeContext.Provider value={context} {...props} />\n}\n\nLightMode.displayName = \"LightMode\"\n","import React, { ReactNode } from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig, SystemConfig } from \"@chakra-ui/react\";\nimport { biblioteksentralenChakraTheme } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\nimport { ColorModeProvider } from \"@chakra-ui/system\";\n\ninterface Props {\n children: ReactNode;\n customTheme?: SystemConfig;\n}\n\nexport const BiblioteksentralenProvider = (props: Props) => (\n <ChakraProvider value={createSystem(defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {})}>\n <ColorModeProvider {...props} />\n </ChakraProvider>\n);\n"]}
package/dist/index.mjs CHANGED
@@ -1,4 +1,12 @@
1
1
  "use client";
2
+ function _array_like_to_array(arr, len) {
3
+ if (len == null || len > arr.length) len = arr.length;
4
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
+ return arr2;
6
+ }
7
+ function _array_with_holes(arr) {
8
+ if (Array.isArray(arr)) return arr;
9
+ }
2
10
  function _assert_this_initialized(self) {
3
11
  if (self === void 0) {
4
12
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -56,6 +64,33 @@ function _inherits(subClass, superClass) {
56
64
  });
57
65
  if (superClass) _set_prototype_of(subClass, superClass);
58
66
  }
67
+ function _iterable_to_array_limit(arr, i) {
68
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
69
+ if (_i == null) return;
70
+ var _arr = [];
71
+ var _n = true;
72
+ var _d = false;
73
+ var _s, _e;
74
+ try {
75
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
76
+ _arr.push(_s.value);
77
+ if (i && _arr.length === i) break;
78
+ }
79
+ } catch (err) {
80
+ _d = true;
81
+ _e = err;
82
+ } finally{
83
+ try {
84
+ if (!_n && _i["return"] != null) _i["return"]();
85
+ } finally{
86
+ if (_d) throw _e;
87
+ }
88
+ }
89
+ return _arr;
90
+ }
91
+ function _non_iterable_rest() {
92
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
93
+ }
59
94
  function _object_spread(target) {
60
95
  for(var i = 1; i < arguments.length; i++){
61
96
  var source = arguments[i] != null ? arguments[i] : {};
@@ -111,10 +146,21 @@ function _set_prototype_of(o, p) {
111
146
  };
112
147
  return _set_prototype_of(o, p);
113
148
  }
149
+ function _sliced_to_array(arr, i) {
150
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
151
+ }
114
152
  function _type_of(obj) {
115
153
  "@swc/helpers - typeof";
116
154
  return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
117
155
  }
156
+ function _unsupported_iterable_to_array(o, minLen) {
157
+ if (!o) return;
158
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
159
+ var n = Object.prototype.toString.call(o).slice(8, -1);
160
+ if (n === "Object" && o.constructor) n = o.constructor.name;
161
+ if (n === "Map" || n === "Set") return Array.from(n);
162
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
163
+ }
118
164
  function _is_native_reflect_construct() {
119
165
  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
120
166
  if (Reflect.construct.sham) return false;
@@ -638,7 +684,232 @@ var withErrorBoundaryBS = function(Component, boundaryName) {
638
684
  // src/components/BiblioteksentralenProvider.tsx
639
685
  import React7 from "react";
640
686
  import { ChakraProvider, createSystem, defaultConfig as defaultConfig2 } from "@chakra-ui/react";
641
- import { ColorModeProvider } from "@chakra-ui/system";
687
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-UQDW7KKV.mjs
688
+ import { createContext, useContext } from "react";
689
+ var ColorModeContext = createContext({});
690
+ ColorModeContext.displayName = "ColorModeContext";
691
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-X7ZBZ4KW.mjs
692
+ var classNames = {
693
+ light: "chakra-ui-light",
694
+ dark: "chakra-ui-dark"
695
+ };
696
+ function getColorModeUtils() {
697
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
698
+ var _options_preventTransition = options.preventTransition, preventTransition = _options_preventTransition === void 0 ? true : _options_preventTransition;
699
+ var utils = {
700
+ setDataset: function(value) {
701
+ var cleanup = preventTransition ? utils.preventTransition() : void 0;
702
+ document.documentElement.dataset.theme = value;
703
+ document.documentElement.style.colorScheme = value;
704
+ cleanup == null ? void 0 : cleanup();
705
+ },
706
+ setClassName: function setClassName(dark) {
707
+ document.body.classList.add(dark ? classNames.dark : classNames.light);
708
+ document.body.classList.remove(dark ? classNames.light : classNames.dark);
709
+ },
710
+ query: function query() {
711
+ return window.matchMedia("(prefers-color-scheme: dark)");
712
+ },
713
+ getSystemTheme: function getSystemTheme(fallback) {
714
+ var _a;
715
+ var dark = (_a = utils.query().matches) != null ? _a : fallback === "dark";
716
+ return dark ? "dark" : "light";
717
+ },
718
+ addListener: function addListener(fn) {
719
+ var mql = utils.query();
720
+ var listener = function(e) {
721
+ fn(e.matches ? "dark" : "light");
722
+ };
723
+ if (typeof mql.addListener === "function") mql.addListener(listener);
724
+ else mql.addEventListener("change", listener);
725
+ return function() {
726
+ if (typeof mql.removeListener === "function") mql.removeListener(listener);
727
+ else mql.removeEventListener("change", listener);
728
+ };
729
+ },
730
+ preventTransition: function preventTransition() {
731
+ var css = document.createElement("style");
732
+ css.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"));
733
+ document.head.appendChild(css);
734
+ return function() {
735
+ ;
736
+ (function() {
737
+ return window.getComputedStyle(document.body);
738
+ })();
739
+ requestAnimationFrame(function() {
740
+ requestAnimationFrame(function() {
741
+ document.head.removeChild(css);
742
+ });
743
+ });
744
+ };
745
+ }
746
+ };
747
+ return utils;
748
+ }
749
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-44OWBZ77.mjs
750
+ var STORAGE_KEY = "chakra-ui-color-mode";
751
+ function createLocalStorageManager(key) {
752
+ return {
753
+ ssr: false,
754
+ type: "localStorage",
755
+ get: function get(init) {
756
+ if (!(globalThis == null ? void 0 : globalThis.document)) return init;
757
+ var value;
758
+ try {
759
+ value = localStorage.getItem(key) || init;
760
+ } catch (e) {}
761
+ return value || init;
762
+ },
763
+ set: function set(value) {
764
+ try {
765
+ localStorage.setItem(key, value);
766
+ } catch (e) {}
767
+ }
768
+ };
769
+ }
770
+ var localStorageManager = createLocalStorageManager(STORAGE_KEY);
771
+ function parseCookie(cookie, key) {
772
+ var match = cookie.match(new RegExp("(^| )".concat(key, "=([^;]+)")));
773
+ return match == null ? void 0 : match[2];
774
+ }
775
+ function createCookieStorageManager(key, cookie) {
776
+ return {
777
+ ssr: !!cookie,
778
+ type: "cookie",
779
+ get: function get(init) {
780
+ if (cookie) return parseCookie(cookie, key);
781
+ if (!(globalThis == null ? void 0 : globalThis.document)) return init;
782
+ return parseCookie(document.cookie, key) || init;
783
+ },
784
+ set: function set(value) {
785
+ document.cookie = "".concat(key, "=").concat(value, "; max-age=31536000; path=/");
786
+ }
787
+ };
788
+ }
789
+ var cookieStorageManager = createCookieStorageManager(STORAGE_KEY);
790
+ // ../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/dist/index.mjs
791
+ import { useEffect, useLayoutEffect } from "react";
792
+ var useSafeLayoutEffect = Boolean(globalThis == null ? void 0 : globalThis.document) ? useLayoutEffect : useEffect;
793
+ // ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-AMBGAKG2.mjs
794
+ import { useCallback, useEffect as useEffect2, useMemo, useState } from "react";
795
+ import { jsx } from "react/jsx-runtime";
796
+ var noop = function() {};
797
+ function getTheme(manager, fallback) {
798
+ return manager.type === "cookie" && manager.ssr ? manager.get(fallback) : fallback;
799
+ }
800
+ function ColorModeProvider(props) {
801
+ var value = props.value, children = props.children, tmp = props.options, _ref = tmp === void 0 ? {} : tmp, useSystemColorMode = _ref.useSystemColorMode, initialColorMode = _ref.initialColorMode, disableTransitionOnChange = _ref.disableTransitionOnChange, _props_colorModeManager = props.colorModeManager, colorModeManager = _props_colorModeManager === void 0 ? localStorageManager : _props_colorModeManager;
802
+ var defaultColorMode = initialColorMode === "dark" ? "dark" : "light";
803
+ var _useState = _sliced_to_array(useState(function() {
804
+ return getTheme(colorModeManager, defaultColorMode);
805
+ }), 2), colorMode = _useState[0], rawSetColorMode = _useState[1];
806
+ var _useState1 = _sliced_to_array(useState(function() {
807
+ return getTheme(colorModeManager);
808
+ }), 2), resolvedColorMode = _useState1[0], setResolvedColorMode = _useState1[1];
809
+ var _useMemo = useMemo(function() {
810
+ return getColorModeUtils({
811
+ preventTransition: disableTransitionOnChange
812
+ });
813
+ }, [
814
+ disableTransitionOnChange
815
+ ]), getSystemTheme = _useMemo.getSystemTheme, setClassName = _useMemo.setClassName, setDataset = _useMemo.setDataset, addListener = _useMemo.addListener;
816
+ var resolvedValue = initialColorMode === "system" && !colorMode ? resolvedColorMode : colorMode;
817
+ var setColorMode = useCallback(function(value2) {
818
+ var resolved = value2 === "system" ? getSystemTheme() : value2;
819
+ rawSetColorMode(resolved);
820
+ setClassName(resolved === "dark");
821
+ setDataset(resolved);
822
+ colorModeManager.set(resolved);
823
+ }, [
824
+ colorModeManager,
825
+ getSystemTheme,
826
+ setClassName,
827
+ setDataset
828
+ ]);
829
+ useSafeLayoutEffect(function() {
830
+ if (initialColorMode === "system") {
831
+ setResolvedColorMode(getSystemTheme());
832
+ }
833
+ }, []);
834
+ useEffect2(function() {
835
+ var managerValue = colorModeManager.get();
836
+ if (managerValue) {
837
+ setColorMode(managerValue);
838
+ return;
839
+ }
840
+ if (initialColorMode === "system") {
841
+ setColorMode("system");
842
+ return;
843
+ }
844
+ setColorMode(defaultColorMode);
845
+ }, [
846
+ colorModeManager,
847
+ defaultColorMode,
848
+ initialColorMode,
849
+ setColorMode
850
+ ]);
851
+ var toggleColorMode = useCallback(function() {
852
+ setColorMode(resolvedValue === "dark" ? "light" : "dark");
853
+ }, [
854
+ resolvedValue,
855
+ setColorMode
856
+ ]);
857
+ useEffect2(function() {
858
+ if (!useSystemColorMode) return;
859
+ return addListener(setColorMode);
860
+ }, [
861
+ useSystemColorMode,
862
+ addListener,
863
+ setColorMode
864
+ ]);
865
+ var context = useMemo(function() {
866
+ return {
867
+ colorMode: value != null ? value : resolvedValue,
868
+ toggleColorMode: value ? noop : toggleColorMode,
869
+ setColorMode: value ? noop : setColorMode,
870
+ forced: value !== void 0
871
+ };
872
+ }, [
873
+ resolvedValue,
874
+ toggleColorMode,
875
+ setColorMode,
876
+ value
877
+ ]);
878
+ return /* @__PURE__ */ jsx(ColorModeContext.Provider, {
879
+ value: context,
880
+ children: children
881
+ });
882
+ }
883
+ ColorModeProvider.displayName = "ColorModeProvider";
884
+ function DarkMode(props) {
885
+ var context = useMemo(function() {
886
+ return {
887
+ colorMode: "dark",
888
+ toggleColorMode: noop,
889
+ setColorMode: noop,
890
+ forced: true
891
+ };
892
+ }, []);
893
+ return /* @__PURE__ */ jsx(ColorModeContext.Provider, _object_spread({
894
+ value: context
895
+ }, props));
896
+ }
897
+ DarkMode.displayName = "DarkMode";
898
+ function LightMode(props) {
899
+ var context = useMemo(function() {
900
+ return {
901
+ colorMode: "light",
902
+ toggleColorMode: noop,
903
+ setColorMode: noop,
904
+ forced: true
905
+ };
906
+ }, []);
907
+ return /* @__PURE__ */ jsx(ColorModeContext.Provider, _object_spread({
908
+ value: context
909
+ }, props));
910
+ }
911
+ LightMode.displayName = "LightMode";
912
+ // src/components/BiblioteksentralenProvider.tsx
642
913
  var BiblioteksentralenProvider = function(props) {
643
914
  return /* @__PURE__ */ React7.createElement(ChakraProvider, {
644
915
  value: createSystem(defaultConfig2, biblioteksentralenChakraTheme, props.customTheme || {})
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/danielwinsvold/Code/js-utils/packages/react/dist/index.mjs","../src/styles/chakraTheme/ButtonStyles.ts","../../utils/src/date.ts","../../utils/src/colors.ts","../../utils/src/environment.ts","../src/components/AlertBS.tsx","../src/components/ButtonBS.tsx","../src/components/IconButtonBS.tsx","../src/components/InputBS.tsx","../src/components/ConditionalWrapperBS.tsx","../src/components/ErrorBoundaryBS.tsx","../src/components/HashLinkTargetBS.tsx","../src/styles/chakraTheme/biblioteksentralenChakraTheme.ts","../src/styles/chakraTheme/ContainerStyles.ts","../src/styles/chakraTheme/HeadingStyles.ts","../src/styles/chakraTheme/InputStyles.ts","../src/styles/chakraTheme/SpinnerStyles.ts","../src/styles/chakraTheme/sizes.ts","../src/styles/chakraTheme/LinkStyles.ts","../src/components/withErrorBoundaryBS.tsx","../src/components/BiblioteksentralenProvider.tsx"],"names":["defaultConfig","format","nb","colors","black","grey90","grey80","grey60","grey45","grey30","grey15","grey10","grey05","white","bsRødDark","bsRødMedium","accentPurple","accentPeach","accentGreen","accentBlueDark","accentBlueMedium","accentYellow","lightBlue","lightGreen","lightPeach","lightPurple","statusRed","statusYellow","statusGreen","statusGreenLight","statusRedLight","statusYellowLight","neptune","isDevelopment","process","env","NODE_ENV","Alert","ChakraAlert","React","AlertCircle","CheckCircle","Info","XCircle","colorLookup","info","bg","color","warning","success","error","iconLookup","createElement","strokeWidth","role","variantStyles","inline","borderColor","backgroundColor","padding","AlertBS","status","children","variant","header","rest","Root","fontSize","border","display","flexWrap","Indicator","marginX","Content","Title","Description","Button","ChakraButton","ButtonBS","IconButton","ChakraIconButton","IconButtonBS","Input","ChakraInput","Field","VisuallyHidden","InputBS","props","labelProps","label","helperText","errorMessage","hideLabel","inputProps","formLabel","Label","invalid","HelperText","ErrorText","ConditionalWrapperBS","condition","wrapper","Wrapper","Fragment","Box","StyledPre","as","paddingTop","wordBreak","whiteSpace","ErrorBoundaryBS","state","hasError","componentDidCatch","errorInfo","setState","console","boundaryName","render","stackTrace","componentStack","errormsg","message","getDerivedStateFromError","Component","defineConfig","defineTokens","defineRecipe","variants","primary","_hover","secondary","tertiary","theme","recipes","button","ButtonStyles","base","borderWidth","fontWeight","_disabled","opacity","size","sm","h","px","textStyle","md","lg","defaultVariants","ContainerStyles","HeadingStyles","subtle","_light","_dark","outline","flushed","InputStyles","_placeholder","SpinnerStyles","animationDuration","container","value","xl","sizes","plain","textDecoration","textDecorationColor","underline","LinkStyles","_focus","tokens","globalHyphens","hyphens","hyphenateLimitChars","focusStyle","boxShadow","transition","biblioteksentralenChakraTheme","heading","input","link","spinner","globalCss","html","scrollBehavior","body","focusOnRelativeParentStyle","_focusWithin","position","content","top","left","height","width","pointerEvents","borderRadius","HashLinkTargetBS","css","focusOnParent","id","tabIndex","spaceAbove","withErrorBoundaryBS","ChakraProvider","createSystem","ColorModeProvider","BiblioteksentralenProvider","customTheme"],"mappings":"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","sourcesContent":["\"use client\";\n\n// ../utils/dist/index.mjs\nimport { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\nvar colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsR\\u00F8dDark: \"#870010\",\n bsR\\u00F8dMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\"\n }\n};\nfunction isDevelopment() {\n return process.env.NODE_ENV === \"development\";\n}\n\n// src/components/AlertBS.tsx\nimport { Alert as ChakraAlert } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\nvar colorLookup = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed }\n};\nvar iconLookup = {\n info: /* @__PURE__ */ React.createElement(Info, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Informasjon\" }),\n warning: /* @__PURE__ */ React.createElement(AlertCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Advarsel\" }),\n success: /* @__PURE__ */ React.createElement(CheckCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Suksess\" }),\n error: /* @__PURE__ */ React.createElement(XCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Feil\" })\n};\nvar variantStyles = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\"\n }\n};\nfunction AlertBS({ status, children, variant, header, ...rest }) {\n const colors2 = colorLookup[status];\n return /* @__PURE__ */ React.createElement(\n ChakraAlert.Root,\n {\n status,\n fontSize: \"md\",\n border: `0.1rem solid`,\n borderColor: colors2.color,\n backgroundColor: colors2.bg,\n display: \"flex\",\n flexWrap: \"wrap\",\n ...variant === \"inline\" ? variantStyles[variant] : {},\n ...rest\n },\n /* @__PURE__ */ React.createElement(ChakraAlert.Indicator, { marginX: \"auto\" }, iconLookup[status]),\n /* @__PURE__ */ React.createElement(ChakraAlert.Content, { color: \"black\" }, header && /* @__PURE__ */ React.createElement(ChakraAlert.Title, null, header), /* @__PURE__ */ React.createElement(ChakraAlert.Description, null, children))\n );\n}\n\n// src/components/ButtonBS.tsx\nimport { Button as ChakraButton } from \"@chakra-ui/react\";\nvar ButtonBS = ChakraButton;\n\n// src/components/IconButtonBS.tsx\nimport { IconButton as ChakraIconButton } from \"@chakra-ui/react\";\nvar IconButtonBS = ChakraIconButton;\n\n// src/components/InputBS.tsx\nimport { Input as ChakraInput, Field, VisuallyHidden } from \"@chakra-ui/react\";\nimport React2 from \"react\";\nvar InputBS = (props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n const formLabel = /* @__PURE__ */ React2.createElement(Field.Label, { ...labelProps }, label);\n return /* @__PURE__ */ React2.createElement(Field.Root, { invalid: !!errorMessage }, hideLabel ? /* @__PURE__ */ React2.createElement(VisuallyHidden, null, formLabel) : formLabel, helperText && /* @__PURE__ */ React2.createElement(Field.HelperText, null, helperText), /* @__PURE__ */ React2.createElement(ChakraInput, { ...inputProps }), errorMessage && /* @__PURE__ */ React2.createElement(Field.ErrorText, null, errorMessage));\n};\n\n// src/components/ConditionalWrapperBS.tsx\nimport React3 from \"react\";\nvar ConditionalWrapperBS = ({ condition, children, wrapper: Wrapper }) => condition ? /* @__PURE__ */ React3.createElement(Wrapper, null, children) : /* @__PURE__ */ React3.createElement(React3.Fragment, null, children);\n\n// src/components/ErrorBoundaryBS.tsx\nimport { Box } from \"@chakra-ui/react\";\nimport React4 from \"react\";\nvar StyledPre = (props) => /* @__PURE__ */ React4.createElement(Box, { as: \"pre\", paddingTop: \"0.5rem\", wordBreak: \"break-all\", whiteSpace: \"pre-wrap\", fontSize: \"0.8rem\", ...props });\nvar ErrorBoundaryBS = class extends React4.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n componentDidCatch(error, errorInfo) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n return /* @__PURE__ */ React4.createElement(\"div\", null, /* @__PURE__ */ React4.createElement(AlertBS, { status: \"error\" }, /* @__PURE__ */ React4.createElement(\"p\", null, \"Beklager, det skjedde en teknisk feil.\"), isDevelopment() && (stackTrace || errormsg) && /* @__PURE__ */ React4.createElement(\"div\", null, /* @__PURE__ */ React4.createElement(StyledPre, null, errormsg || \"\"), /* @__PURE__ */ React4.createElement(StyledPre, null, info || \"\"), /* @__PURE__ */ React4.createElement(StyledPre, null, stackTrace || \"\"))));\n }\n return this.props.children;\n }\n};\n\n// src/components/HashLinkTargetBS.tsx\nimport { Box as Box2 } from \"@chakra-ui/react\";\nimport React5 from \"react\";\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nimport { defineConfig, defineTokens } from \"@chakra-ui/react\";\n\n// src/styles/chakraTheme/ButtonStyles.ts\nimport { defaultConfig, defineRecipe } from \"@chakra-ui/react\";\nvar variants = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\"\n }\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant\n};\nvar ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1\n }\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\"\n },\n md: {\n textStyle: \"md\"\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\"\n }\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n});\n\n// src/styles/chakraTheme/ContainerStyles.ts\nimport { defineRecipe as defineRecipe2 } from \"@chakra-ui/react\";\nvar ContainerStyles = defineRecipe2({\n base: {\n px: \".75rem\"\n // Padding left/right\n }\n});\n\n// src/styles/chakraTheme/HeadingStyles.ts\nimport { defineRecipe as defineRecipe3 } from \"@chakra-ui/react\";\nvar HeadingStyles = defineRecipe3({\n base: {\n fontWeight: \"600\"\n }\n});\n\n// src/styles/chakraTheme/InputStyles.ts\nimport { defineRecipe as defineRecipe4 } from \"@chakra-ui/react\";\nvar variants2 = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" }\n }\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n }\n};\nvar InputStyles = defineRecipe4({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" }\n }\n },\n variants: {\n variant: variants2\n },\n defaultVariants: {\n variant: \"subtle\"\n }\n});\n\n// src/styles/chakraTheme/SpinnerStyles.ts\nimport { defineRecipe as defineRecipe5 } from \"@chakra-ui/react\";\nvar SpinnerStyles = defineRecipe5({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\"\n }\n});\n\n// src/styles/chakraTheme/sizes.ts\nvar container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" },\n // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" }\n};\nvar sizes = {\n container\n};\n\n// src/styles/chakraTheme/LinkStyles.ts\nimport { defineRecipe as defineRecipe6 } from \"@chakra-ui/react\";\nvar variants3 = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\"\n }\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\"\n }\n }\n};\nvar LinkStyles = defineRecipe6({\n base: {\n _focus: {\n outline: \"none\"\n }\n },\n variants: {\n variant: variants3\n },\n defaultVariants: {\n variant: \"underline\"\n }\n});\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nvar tokens = defineTokens({\n sizes\n});\nvar globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\"\n // minimum word-length / min letters first line / min letters second line\n};\nvar focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\"\n // Transition makes the newly focused element \"pop in\" and easier to spot\n};\nvar biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles\n }\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" }\n },\n body: {\n ...globalHyphens\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle\n }\n});\n\n// src/components/HashLinkTargetBS.tsx\nvar focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle\n }\n }\n};\nfunction HashLinkTargetBS(props) {\n return /* @__PURE__ */ React5.createElement(Box2, { position: \"relative\", css: props.focusOnParent ? focusOnRelativeParentStyle : void 0 }, /* @__PURE__ */ React5.createElement(\n Box2,\n {\n id: props.id,\n tabIndex: props.focusOnParent ? -1 : void 0,\n position: \"absolute\",\n top: `-${props.spaceAbove || \"2.5rem\"}`,\n _focus: {\n boxShadow: \"none !important\"\n }\n }\n ));\n}\n\n// src/components/withErrorBoundaryBS.tsx\nimport React6 from \"react\";\nvar withErrorBoundaryBS = (Component, boundaryName) => {\n return (props) => /* @__PURE__ */ React6.createElement(ErrorBoundaryBS, { boundaryName }, /* @__PURE__ */ React6.createElement(Component, { ...props }));\n};\n\n// src/components/BiblioteksentralenProvider.tsx\nimport React7 from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig as defaultConfig2 } from \"@chakra-ui/react\";\nimport { ColorModeProvider } from \"@chakra-ui/system\";\nvar BiblioteksentralenProvider = (props) => /* @__PURE__ */ React7.createElement(ChakraProvider, { value: createSystem(defaultConfig2, biblioteksentralenChakraTheme, props.customTheme || {}) }, /* @__PURE__ */ React7.createElement(ColorModeProvider, { ...props }));\nexport {\n AlertBS,\n BiblioteksentralenProvider,\n ButtonBS,\n ConditionalWrapperBS,\n ErrorBoundaryBS,\n HashLinkTargetBS,\n IconButtonBS,\n InputBS,\n withErrorBoundaryBS\n};\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defaultConfig, defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomButtonVariants = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst variants: Record<CustomButtonVariants, SystemStyleObject> = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\",\n },\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant,\n};\n\nexport const ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1,\n },\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\",\n },\n md: {\n textStyle: \"md\",\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\",\n },\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\n","import { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\n\nexport function formaterDato(dato?: string, dateFnsformat = \"Pp\") {\n if (typeof dato !== \"string\") return \"Ukjent dato\";\n\n try {\n return format(new Date(dato), dateFnsformat, { locale: nb });\n } catch (e) {\n console.error(\"Kunne ikke formattere dato:\" + dato, e);\n return dato;\n }\n}\n","export const colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsRødDark: \"#870010\",\n bsRødMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\",\n },\n};\n","export function isDevelopment(): boolean {\n return process.env.NODE_ENV === \"development\";\n}\n\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\nexport function isServer(): boolean {\n return !isClient();\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { colors } from \"@biblioteksentralen/utils\";\nimport { AlertRootProps, Alert as ChakraAlert, SystemStyleObject } from \"@chakra-ui/react\";\nimport React, { ReactNode } from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\n\ntype Status = \"info\" | \"warning\" | \"success\" | \"error\";\ntype CustomVariants = \"inline\";\ntype Variants = AlertRootProps[\"variant\"] | CustomVariants;\n\nconst colorLookup: Record<Status, { bg: string; color: string }> = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed },\n};\n\nconst iconLookup: Record<Status, React.ReactElement> = {\n info: <Info strokeWidth={1.75} role=\"img\" aria-label=\"Informasjon\" />,\n warning: <AlertCircle strokeWidth={1.75} role=\"img\" aria-label=\"Advarsel\" />,\n success: <CheckCircle strokeWidth={1.75} role=\"img\" aria-label=\"Suksess\" />,\n error: <XCircle strokeWidth={1.75} role=\"img\" aria-label=\"Feil\" />,\n};\n\ninterface Props extends Modify<AlertRootProps, { variant?: Variants }> {\n children: ReactNode;\n header?: ReactNode;\n status: Status;\n variant?: Variants;\n}\n\nconst variantStyles: Record<CustomVariants, SystemStyleObject> = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n },\n};\n\nexport function AlertBS({ status, children, variant, header, ...rest }: Props) {\n const colors = colorLookup[status];\n return (\n <ChakraAlert.Root\n status={status}\n fontSize=\"md\"\n border={`0.1rem solid`}\n borderColor={colors.color}\n backgroundColor={colors.bg}\n display=\"flex\"\n flexWrap=\"wrap\"\n {...(variant === \"inline\" ? variantStyles[variant] : {})}\n {...rest}\n >\n <ChakraAlert.Indicator marginX=\"auto\">{iconLookup[status]}</ChakraAlert.Indicator>\n <ChakraAlert.Content color=\"black\">\n {header && <ChakraAlert.Title>{header}</ChakraAlert.Title>}\n <ChakraAlert.Description>{children}</ChakraAlert.Description>\n </ChakraAlert.Content>\n </ChakraAlert.Root>\n );\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { Button as ChakraButton, ButtonProps as NativeButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras Button with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype ButtonVariants = NativeButtonProps[\"variant\"] | CustomButtonVariants;\nexport type ButtonBSProps = Modify<NativeButtonProps, { variant?: ButtonVariants }>;\nexport const ButtonBS = ChakraButton as ComponentWithAs<\"button\", ButtonBSProps>;\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { IconButton as ChakraIconButton, IconButtonProps as ChakraIconButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras IconButton with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype IconButtonVariants = ChakraIconButtonProps[\"variant\"] | CustomButtonVariants;\nexport type IconButtonBSProps = Modify<ChakraIconButtonProps, { variant?: IconButtonVariants }>;\nexport const IconButtonBS = ChakraIconButton as ComponentWithAs<\"button\", IconButtonBSProps>;\n","import { Input as ChakraInput, Field, FieldLabelProps, InputProps, VisuallyHidden } from \"@chakra-ui/react\";\nimport React, { RefObject } from \"react\";\n\ninterface Props extends InputProps {\n label: string;\n hideLabel?: boolean;\n labelProps?: FieldLabelProps;\n helperText?: string;\n errorMessage?: string;\n ref?: RefObject<HTMLInputElement | null>;\n}\n\n/**\n * Creating custom input-component to make sure label is always set (for accessibility)\n * Also handles some common needs (helper text and error message. For more advanced input-components we leave it to the consumers to compose custom input-components based on Chakra\n */\nexport const InputBS = (props: Props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n\n const formLabel = <Field.Label {...labelProps}>{label}</Field.Label>;\n\n return (\n <Field.Root invalid={!!errorMessage}>\n {hideLabel ? <VisuallyHidden>{formLabel}</VisuallyHidden> : formLabel}\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n <ChakraInput {...inputProps} />\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {errorMessage && <Field.ErrorText>{errorMessage}</Field.ErrorText>}\n </Field.Root>\n );\n};\n","import React, { FunctionComponent, ReactNode } from \"react\";\n\ntype Props = {\n children: ReactNode;\n wrapper: FunctionComponent<{ children: ReactNode }>;\n condition: boolean;\n};\n\n/**\n * Conditionally wrapps children with a component. If conditions are not met children mounted without the wrapper.\n */\nexport const ConditionalWrapperBS: FunctionComponent<Props> = ({ condition, children, wrapper: Wrapper }) =>\n condition ? <Wrapper>{children}</Wrapper> : <>{children}</>;\n","import { isDevelopment } from \"@biblioteksentralen/utils\";\nimport { Box, BoxProps } from \"@chakra-ui/react\";\nimport React, { ErrorInfo, ReactNode } from \"react\";\nimport { AlertBS } from \"./AlertBS\";\n\ninterface Props {\n boundaryName?: string;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n}\n\nconst StyledPre = (props: BoxProps) => (\n <Box as=\"pre\" paddingTop=\"0.5rem\" wordBreak=\"break-all\" whiteSpace=\"pre-wrap\" fontSize=\"0.8rem\" {...props} />\n);\n\nexport class ErrorBoundaryBS extends React.Component<Props, State> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n\n return (\n <div>\n <AlertBS status=\"error\">\n <p>Beklager, det skjedde en teknisk feil.</p>\n {isDevelopment() && (stackTrace || errormsg) && (\n <div>\n <StyledPre>{errormsg || \"\"}</StyledPre>\n <StyledPre>{info || \"\"}</StyledPre>\n <StyledPre>{stackTrace || \"\"}</StyledPre>\n </div>\n )}\n </AlertBS>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import { Box } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { focusStyle } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\n\ninterface Props {\n id: string;\n /**\n * angir hvor mye luft til vil ha over HashLinkTarget ved bruk av hash-lenke, eks '4rem'\n */\n spaceAbove?: string;\n /**\n * angir om du vil ha fokusramme rundt komponenten som mounter HashLinkTarget. Da må komponenten du wrapper med ha position: relative | absolute el\n */\n focusOnParent?: boolean;\n}\n\nconst focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle,\n },\n },\n};\n\n/*\n * Komponent som sørger for luft over anchors (elementer man kan lenke til med hash-lenker feks <a href=\"#min-overskrift\">Ta meg til overskrift</a>)\n */\nexport function HashLinkTargetBS(props: Props) {\n return (\n <Box position=\"relative\" css={props.focusOnParent ? focusOnRelativeParentStyle : undefined}>\n <Box\n id={props.id}\n tabIndex={props.focusOnParent ? -1 : undefined}\n position=\"absolute\"\n top={`-${props.spaceAbove || \"2.5rem\"}`}\n _focus={{\n boxShadow: \"none !important\",\n }}\n />\n </Box>\n );\n}\n","import { defineConfig, defineTokens } from \"@chakra-ui/react\";\nimport { ButtonStyles } from \"./ButtonStyles\";\nimport { ContainerStyles } from \"./ContainerStyles\";\nimport { HeadingStyles } from \"./HeadingStyles\";\nimport { InputStyles } from \"./InputStyles\";\nimport { SpinnerStyles } from \"./SpinnerStyles\";\nimport { sizes } from \"./sizes\";\nimport { LinkStyles } from \"./LinkStyles\";\nimport { colors } from \"@biblioteksentralen/utils\";\n\nconst tokens = defineTokens({\n sizes,\n});\n\n// https://blog.logrocket.com/guide-css-word-wrap-overflow-wrap-word-break/\n// https://medium.com/clear-left-thinking/all-you-need-to-know-about-hyphenation-in-css-2baee2d89179\n// Skrur på hyphens auto som default fordi vi har masse mikrotekster og små elementer der layout knekker uten dette, og vi lager stadig nye og glemmer å ta hensyn til dette.\n// Så kan man optionaly sette hyphens: none de stedene man ikke ønsker det, men har ikke sett noe som knekker/blir rart pga dette enda\nconst globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\", // minimum word-length / min letters first line / min letters second line\n};\n\nexport const focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\", // Transition makes the newly focused element \"pop in\" and easier to spot\n};\n\nexport const biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles,\n },\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" },\n },\n body: {\n ...globalHyphens,\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle,\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const ContainerStyles = defineRecipe({\n base: {\n px: \".75rem\", // Padding left/right\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const HeadingStyles = defineRecipe({\n base: {\n fontWeight: \"600\",\n },\n});\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nconst variants: Record<string, SystemStyleObject> = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" },\n },\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n};\n\nexport const InputStyles = defineRecipe({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" },\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"subtle\",\n },\n});\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defineRecipe } from \"@chakra-ui/react\";\n\nexport const SpinnerStyles = defineRecipe({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\",\n },\n});\n","const container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" }, // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" },\n};\n\nexport const sizes = {\n container,\n};\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomLinkVariants = \"plain\" | \"underline\";\n\nconst variants: Record<CustomLinkVariants, SystemStyleObject> = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\",\n },\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\",\n },\n },\n};\n\nexport const LinkStyles = defineRecipe({\n base: {\n _focus: {\n outline: \"none\",\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"underline\",\n },\n});\n","import React from \"react\";\nimport { ErrorBoundaryBS } from \"./ErrorBoundaryBS\";\n\nexport const withErrorBoundaryBS = <Props,>(Component: React.ComponentType<Props>, boundaryName: string) => {\n return (props: Props & React.JSX.IntrinsicAttributes) => (\n <ErrorBoundaryBS boundaryName={boundaryName}>\n <Component {...props} />\n </ErrorBoundaryBS>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig, SystemConfig } from \"@chakra-ui/react\";\nimport { biblioteksentralenChakraTheme } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\nimport { ColorModeProvider } from \"@chakra-ui/system\";\n\ninterface Props {\n children: ReactNode;\n customTheme?: SystemConfig;\n}\n\nexport const BiblioteksentralenProvider = (props: Props) => (\n <ChakraProvider value={createSystem(defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {})}>\n <ColorModeProvider {...props} />\n </ChakraProvider>\n);\n"]}
1
+ {"version":3,"sources":["/Users/danielwinsvold/Code/js-utils/packages/react/dist/index.mjs","../src/styles/chakraTheme/ButtonStyles.ts","../../utils/src/date.ts","../../utils/src/colors.ts","../../utils/src/environment.ts","../src/components/AlertBS.tsx","../src/components/ButtonBS.tsx","../src/components/IconButtonBS.tsx","../src/components/InputBS.tsx","../src/components/ConditionalWrapperBS.tsx","../src/components/ErrorBoundaryBS.tsx","../src/components/HashLinkTargetBS.tsx","../src/styles/chakraTheme/biblioteksentralenChakraTheme.ts","../src/styles/chakraTheme/ContainerStyles.ts","../src/styles/chakraTheme/HeadingStyles.ts","../src/styles/chakraTheme/InputStyles.ts","../src/styles/chakraTheme/SpinnerStyles.ts","../src/styles/chakraTheme/sizes.ts","../src/styles/chakraTheme/LinkStyles.ts","../src/components/withErrorBoundaryBS.tsx","../src/components/BiblioteksentralenProvider.tsx","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode-context.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode.utils.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/storage-manager.ts","../../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/src/index.ts","../../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/src/color-mode-provider.tsx"],"names":["defaultConfig","format","nb","colors","black","grey90","grey80","grey60","grey45","grey30","grey15","grey10","grey05","white","bsRødDark","bsRødMedium","accentPurple","accentPeach","accentGreen","accentBlueDark","accentBlueMedium","accentYellow","lightBlue","lightGreen","lightPeach","lightPurple","statusRed","statusYellow","statusGreen","statusGreenLight","statusRedLight","statusYellowLight","neptune","isDevelopment","process","env","NODE_ENV","Alert","ChakraAlert","React","AlertCircle","CheckCircle","Info","XCircle","colorLookup","info","bg","color","warning","success","error","iconLookup","createElement","strokeWidth","role","variantStyles","inline","borderColor","backgroundColor","padding","AlertBS","status","children","variant","header","rest","Root","fontSize","border","display","flexWrap","Indicator","marginX","Content","Title","Description","Button","ChakraButton","ButtonBS","IconButton","ChakraIconButton","IconButtonBS","Input","ChakraInput","Field","VisuallyHidden","InputBS","props","labelProps","label","helperText","errorMessage","hideLabel","inputProps","formLabel","Label","invalid","HelperText","ErrorText","ConditionalWrapperBS","condition","wrapper","Wrapper","Fragment","Box","StyledPre","as","paddingTop","wordBreak","whiteSpace","ErrorBoundaryBS","state","hasError","componentDidCatch","errorInfo","setState","console","boundaryName","render","stackTrace","componentStack","errormsg","message","getDerivedStateFromError","Component","defineConfig","defineTokens","defineRecipe","variants","primary","_hover","secondary","tertiary","theme","recipes","button","ButtonStyles","base","borderWidth","fontWeight","_disabled","opacity","size","sm","h","px","textStyle","md","lg","defaultVariants","ContainerStyles","HeadingStyles","subtle","_light","_dark","outline","flushed","InputStyles","_placeholder","SpinnerStyles","animationDuration","container","value","xl","sizes","plain","textDecoration","textDecorationColor","underline","LinkStyles","_focus","tokens","globalHyphens","hyphens","hyphenateLimitChars","focusStyle","boxShadow","transition","biblioteksentralenChakraTheme","heading","input","link","spinner","globalCss","html","scrollBehavior","body","focusOnRelativeParentStyle","_focusWithin","position","content","top","left","height","width","pointerEvents","borderRadius","HashLinkTargetBS","css","focusOnParent","id","tabIndex","spaceAbove","withErrorBoundaryBS","ChakraProvider","createSystem","createContext","useContext","ColorModeContext","displayName","classNames","light","dark","getColorModeUtils","options","preventTransition","utils","setDataset","cleanup","document","documentElement","dataset","style","colorScheme","setClassName","classList","add","remove","query","window","matchMedia","getSystemTheme","fallback","_a","matches","addListener","fn","mql","listener","e","addEventListener","removeListener","removeEventListener","appendChild","createTextNode","head","getComputedStyle","requestAnimationFrame","removeChild","STORAGE_KEY","createLocalStorageManager","key","ssr","type","get","init","globalThis","localStorage","getItem","set","setItem","localStorageManager","parseCookie","cookie","match","RegExp","createCookieStorageManager","cookieStorageManager","useEffect","useLayoutEffect","useSafeLayoutEffect","Boolean","useCallback","useMemo","useState","jsx","noop","getTheme","manager","ColorModeProvider","useSystemColorMode","initialColorMode","disableTransitionOnChange","colorModeManager","defaultColorMode","colorMode","rawSetColorMode","resolvedColorMode","setResolvedColorMode","resolvedValue","setColorMode","resolved","managerValue","toggleColorMode","context","forced","Provider","DarkMode","LightMode","BiblioteksentralenProvider","customTheme"],"mappings":"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","sourcesContent":["\"use client\";\n\n// ../utils/dist/index.mjs\nimport { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\nvar colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsR\\u00F8dDark: \"#870010\",\n bsR\\u00F8dMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\"\n }\n};\nfunction isDevelopment() {\n return process.env.NODE_ENV === \"development\";\n}\n\n// src/components/AlertBS.tsx\nimport { Alert as ChakraAlert } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\nvar colorLookup = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed }\n};\nvar iconLookup = {\n info: /* @__PURE__ */ React.createElement(Info, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Informasjon\" }),\n warning: /* @__PURE__ */ React.createElement(AlertCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Advarsel\" }),\n success: /* @__PURE__ */ React.createElement(CheckCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Suksess\" }),\n error: /* @__PURE__ */ React.createElement(XCircle, { strokeWidth: 1.75, role: \"img\", \"aria-label\": \"Feil\" })\n};\nvar variantStyles = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\"\n }\n};\nfunction AlertBS({ status, children, variant, header, ...rest }) {\n const colors2 = colorLookup[status];\n return /* @__PURE__ */ React.createElement(\n ChakraAlert.Root,\n {\n status,\n fontSize: \"md\",\n border: `0.1rem solid`,\n borderColor: colors2.color,\n backgroundColor: colors2.bg,\n display: \"flex\",\n flexWrap: \"wrap\",\n ...variant === \"inline\" ? variantStyles[variant] : {},\n ...rest\n },\n /* @__PURE__ */ React.createElement(ChakraAlert.Indicator, { marginX: \"auto\" }, iconLookup[status]),\n /* @__PURE__ */ React.createElement(ChakraAlert.Content, { color: \"black\" }, header && /* @__PURE__ */ React.createElement(ChakraAlert.Title, null, header), /* @__PURE__ */ React.createElement(ChakraAlert.Description, null, children))\n );\n}\n\n// src/components/ButtonBS.tsx\nimport { Button as ChakraButton } from \"@chakra-ui/react\";\nvar ButtonBS = ChakraButton;\n\n// src/components/IconButtonBS.tsx\nimport { IconButton as ChakraIconButton } from \"@chakra-ui/react\";\nvar IconButtonBS = ChakraIconButton;\n\n// src/components/InputBS.tsx\nimport { Input as ChakraInput, Field, VisuallyHidden } from \"@chakra-ui/react\";\nimport React2 from \"react\";\nvar InputBS = (props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n const formLabel = /* @__PURE__ */ React2.createElement(Field.Label, { ...labelProps }, label);\n return /* @__PURE__ */ React2.createElement(Field.Root, { invalid: !!errorMessage }, hideLabel ? /* @__PURE__ */ React2.createElement(VisuallyHidden, null, formLabel) : formLabel, helperText && /* @__PURE__ */ React2.createElement(Field.HelperText, null, helperText), /* @__PURE__ */ React2.createElement(ChakraInput, { ...inputProps }), errorMessage && /* @__PURE__ */ React2.createElement(Field.ErrorText, null, errorMessage));\n};\n\n// src/components/ConditionalWrapperBS.tsx\nimport React3 from \"react\";\nvar ConditionalWrapperBS = ({ condition, children, wrapper: Wrapper }) => condition ? /* @__PURE__ */ React3.createElement(Wrapper, null, children) : /* @__PURE__ */ React3.createElement(React3.Fragment, null, children);\n\n// src/components/ErrorBoundaryBS.tsx\nimport { Box } from \"@chakra-ui/react\";\nimport React4 from \"react\";\nvar StyledPre = (props) => /* @__PURE__ */ React4.createElement(Box, { as: \"pre\", paddingTop: \"0.5rem\", wordBreak: \"break-all\", whiteSpace: \"pre-wrap\", fontSize: \"0.8rem\", ...props });\nvar ErrorBoundaryBS = class extends React4.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n componentDidCatch(error, errorInfo) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n return /* @__PURE__ */ React4.createElement(\"div\", null, /* @__PURE__ */ React4.createElement(AlertBS, { status: \"error\" }, /* @__PURE__ */ React4.createElement(\"p\", null, \"Beklager, det skjedde en teknisk feil.\"), isDevelopment() && (stackTrace || errormsg) && /* @__PURE__ */ React4.createElement(\"div\", null, /* @__PURE__ */ React4.createElement(StyledPre, null, errormsg || \"\"), /* @__PURE__ */ React4.createElement(StyledPre, null, info || \"\"), /* @__PURE__ */ React4.createElement(StyledPre, null, stackTrace || \"\"))));\n }\n return this.props.children;\n }\n};\n\n// src/components/HashLinkTargetBS.tsx\nimport { Box as Box2 } from \"@chakra-ui/react\";\nimport React5 from \"react\";\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nimport { defineConfig, defineTokens } from \"@chakra-ui/react\";\n\n// src/styles/chakraTheme/ButtonStyles.ts\nimport { defaultConfig, defineRecipe } from \"@chakra-ui/react\";\nvar variants = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\"\n }\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\"\n }\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant\n};\nvar ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1\n }\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\"\n },\n md: {\n textStyle: \"md\"\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\"\n }\n }\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n});\n\n// src/styles/chakraTheme/ContainerStyles.ts\nimport { defineRecipe as defineRecipe2 } from \"@chakra-ui/react\";\nvar ContainerStyles = defineRecipe2({\n base: {\n px: \".75rem\"\n // Padding left/right\n }\n});\n\n// src/styles/chakraTheme/HeadingStyles.ts\nimport { defineRecipe as defineRecipe3 } from \"@chakra-ui/react\";\nvar HeadingStyles = defineRecipe3({\n base: {\n fontWeight: \"600\"\n }\n});\n\n// src/styles/chakraTheme/InputStyles.ts\nimport { defineRecipe as defineRecipe4 } from \"@chakra-ui/react\";\nvar variants2 = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" }\n }\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" }\n }\n }\n};\nvar InputStyles = defineRecipe4({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" }\n }\n },\n variants: {\n variant: variants2\n },\n defaultVariants: {\n variant: \"subtle\"\n }\n});\n\n// src/styles/chakraTheme/SpinnerStyles.ts\nimport { defineRecipe as defineRecipe5 } from \"@chakra-ui/react\";\nvar SpinnerStyles = defineRecipe5({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\"\n }\n});\n\n// src/styles/chakraTheme/sizes.ts\nvar container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" },\n // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" }\n};\nvar sizes = {\n container\n};\n\n// src/styles/chakraTheme/LinkStyles.ts\nimport { defineRecipe as defineRecipe6 } from \"@chakra-ui/react\";\nvar variants3 = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\"\n }\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\"\n }\n }\n};\nvar LinkStyles = defineRecipe6({\n base: {\n _focus: {\n outline: \"none\"\n }\n },\n variants: {\n variant: variants3\n },\n defaultVariants: {\n variant: \"underline\"\n }\n});\n\n// src/styles/chakraTheme/biblioteksentralenChakraTheme.ts\nvar tokens = defineTokens({\n sizes\n});\nvar globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\"\n // minimum word-length / min letters first line / min letters second line\n};\nvar focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\"\n // Transition makes the newly focused element \"pop in\" and easier to spot\n};\nvar biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles\n }\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" }\n },\n body: {\n ...globalHyphens\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle\n }\n});\n\n// src/components/HashLinkTargetBS.tsx\nvar focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle\n }\n }\n};\nfunction HashLinkTargetBS(props) {\n return /* @__PURE__ */ React5.createElement(Box2, { position: \"relative\", css: props.focusOnParent ? focusOnRelativeParentStyle : void 0 }, /* @__PURE__ */ React5.createElement(\n Box2,\n {\n id: props.id,\n tabIndex: props.focusOnParent ? -1 : void 0,\n position: \"absolute\",\n top: `-${props.spaceAbove || \"2.5rem\"}`,\n _focus: {\n boxShadow: \"none !important\"\n }\n }\n ));\n}\n\n// src/components/withErrorBoundaryBS.tsx\nimport React6 from \"react\";\nvar withErrorBoundaryBS = (Component, boundaryName) => {\n return (props) => /* @__PURE__ */ React6.createElement(ErrorBoundaryBS, { boundaryName }, /* @__PURE__ */ React6.createElement(Component, { ...props }));\n};\n\n// src/components/BiblioteksentralenProvider.tsx\nimport React7 from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig as defaultConfig2 } from \"@chakra-ui/react\";\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-UQDW7KKV.mjs\nimport { createContext, useContext } from \"react\";\nvar ColorModeContext = createContext({});\nColorModeContext.displayName = \"ColorModeContext\";\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-X7ZBZ4KW.mjs\nvar classNames = {\n light: \"chakra-ui-light\",\n dark: \"chakra-ui-dark\"\n};\nfunction getColorModeUtils(options = {}) {\n const { preventTransition = true } = options;\n const utils = {\n setDataset: (value) => {\n const cleanup = preventTransition ? utils.preventTransition() : void 0;\n document.documentElement.dataset.theme = value;\n document.documentElement.style.colorScheme = value;\n cleanup == null ? void 0 : cleanup();\n },\n setClassName(dark) {\n document.body.classList.add(dark ? classNames.dark : classNames.light);\n document.body.classList.remove(dark ? classNames.light : classNames.dark);\n },\n query() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\");\n },\n getSystemTheme(fallback) {\n var _a;\n const dark = (_a = utils.query().matches) != null ? _a : fallback === \"dark\";\n return dark ? \"dark\" : \"light\";\n },\n addListener(fn) {\n const mql = utils.query();\n const listener = (e) => {\n fn(e.matches ? \"dark\" : \"light\");\n };\n if (typeof mql.addListener === \"function\")\n mql.addListener(listener);\n else\n mql.addEventListener(\"change\", listener);\n return () => {\n if (typeof mql.removeListener === \"function\")\n mql.removeListener(listener);\n else\n mql.removeEventListener(\"change\", listener);\n };\n },\n preventTransition() {\n const css = document.createElement(\"style\");\n css.appendChild(\n document.createTextNode(\n `*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`\n )\n );\n document.head.appendChild(css);\n return () => {\n ;\n (() => window.getComputedStyle(document.body))();\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n document.head.removeChild(css);\n });\n });\n };\n }\n };\n return utils;\n}\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-44OWBZ77.mjs\nvar STORAGE_KEY = \"chakra-ui-color-mode\";\nfunction createLocalStorageManager(key) {\n return {\n ssr: false,\n type: \"localStorage\",\n get(init) {\n if (!(globalThis == null ? void 0 : globalThis.document))\n return init;\n let value;\n try {\n value = localStorage.getItem(key) || init;\n } catch (e) {\n }\n return value || init;\n },\n set(value) {\n try {\n localStorage.setItem(key, value);\n } catch (e) {\n }\n }\n };\n}\nvar localStorageManager = createLocalStorageManager(STORAGE_KEY);\nfunction parseCookie(cookie, key) {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`));\n return match == null ? void 0 : match[2];\n}\nfunction createCookieStorageManager(key, cookie) {\n return {\n ssr: !!cookie,\n type: \"cookie\",\n get(init) {\n if (cookie)\n return parseCookie(cookie, key);\n if (!(globalThis == null ? void 0 : globalThis.document))\n return init;\n return parseCookie(document.cookie, key) || init;\n },\n set(value) {\n document.cookie = `${key}=${value}; max-age=31536000; path=/`;\n }\n };\n}\nvar cookieStorageManager = createCookieStorageManager(STORAGE_KEY);\n\n// ../../node_modules/.pnpm/@chakra-ui+react-use-safe-layout-effect@2.1.0_react@19.1.0/node_modules/@chakra-ui/react-use-safe-layout-effect/dist/index.mjs\nimport { useEffect, useLayoutEffect } from \"react\";\nvar useSafeLayoutEffect = Boolean(globalThis == null ? void 0 : globalThis.document) ? useLayoutEffect : useEffect;\n\n// ../../node_modules/.pnpm/@chakra-ui+color-mode@2.2.0_react@19.1.0/node_modules/@chakra-ui/color-mode/dist/chunk-AMBGAKG2.mjs\nimport { useCallback, useEffect as useEffect2, useMemo, useState } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar noop = () => {\n};\nfunction getTheme(manager, fallback) {\n return manager.type === \"cookie\" && manager.ssr ? manager.get(fallback) : fallback;\n}\nfunction ColorModeProvider(props) {\n const {\n value,\n children,\n options: {\n useSystemColorMode,\n initialColorMode,\n disableTransitionOnChange\n } = {},\n colorModeManager = localStorageManager\n } = props;\n const defaultColorMode = initialColorMode === \"dark\" ? \"dark\" : \"light\";\n const [colorMode, rawSetColorMode] = useState(\n () => getTheme(colorModeManager, defaultColorMode)\n );\n const [resolvedColorMode, setResolvedColorMode] = useState(\n () => getTheme(colorModeManager)\n );\n const { getSystemTheme, setClassName, setDataset, addListener } = useMemo(\n () => getColorModeUtils({ preventTransition: disableTransitionOnChange }),\n [disableTransitionOnChange]\n );\n const resolvedValue = initialColorMode === \"system\" && !colorMode ? resolvedColorMode : colorMode;\n const setColorMode = useCallback(\n (value2) => {\n const resolved = value2 === \"system\" ? getSystemTheme() : value2;\n rawSetColorMode(resolved);\n setClassName(resolved === \"dark\");\n setDataset(resolved);\n colorModeManager.set(resolved);\n },\n [colorModeManager, getSystemTheme, setClassName, setDataset]\n );\n useSafeLayoutEffect(() => {\n if (initialColorMode === \"system\") {\n setResolvedColorMode(getSystemTheme());\n }\n }, []);\n useEffect2(() => {\n const managerValue = colorModeManager.get();\n if (managerValue) {\n setColorMode(managerValue);\n return;\n }\n if (initialColorMode === \"system\") {\n setColorMode(\"system\");\n return;\n }\n setColorMode(defaultColorMode);\n }, [colorModeManager, defaultColorMode, initialColorMode, setColorMode]);\n const toggleColorMode = useCallback(() => {\n setColorMode(resolvedValue === \"dark\" ? \"light\" : \"dark\");\n }, [resolvedValue, setColorMode]);\n useEffect2(() => {\n if (!useSystemColorMode)\n return;\n return addListener(setColorMode);\n }, [useSystemColorMode, addListener, setColorMode]);\n const context = useMemo(\n () => ({\n colorMode: value != null ? value : resolvedValue,\n toggleColorMode: value ? noop : toggleColorMode,\n setColorMode: value ? noop : setColorMode,\n forced: value !== void 0\n }),\n [resolvedValue, toggleColorMode, setColorMode, value]\n );\n return /* @__PURE__ */ jsx(ColorModeContext.Provider, { value: context, children });\n}\nColorModeProvider.displayName = \"ColorModeProvider\";\nfunction DarkMode(props) {\n const context = useMemo(\n () => ({\n colorMode: \"dark\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true\n }),\n []\n );\n return /* @__PURE__ */ jsx(ColorModeContext.Provider, { value: context, ...props });\n}\nDarkMode.displayName = \"DarkMode\";\nfunction LightMode(props) {\n const context = useMemo(\n () => ({\n colorMode: \"light\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true\n }),\n []\n );\n return /* @__PURE__ */ jsx(ColorModeContext.Provider, { value: context, ...props });\n}\nLightMode.displayName = \"LightMode\";\n\n// src/components/BiblioteksentralenProvider.tsx\nvar BiblioteksentralenProvider = (props) => /* @__PURE__ */ React7.createElement(ChakraProvider, { value: createSystem(defaultConfig2, biblioteksentralenChakraTheme, props.customTheme || {}) }, /* @__PURE__ */ React7.createElement(ColorModeProvider, { ...props }));\nexport {\n AlertBS,\n BiblioteksentralenProvider,\n ButtonBS,\n ConditionalWrapperBS,\n ErrorBoundaryBS,\n HashLinkTargetBS,\n IconButtonBS,\n InputBS,\n withErrorBoundaryBS\n};\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defaultConfig, defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomButtonVariants = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst variants: Record<CustomButtonVariants, SystemStyleObject> = {\n primary: {\n backgroundColor: colors.black,\n color: \"white\",\n _hover: {\n backgroundColor: \"hsla(0deg, 0%, 70%, 1)\",\n color: \"black\",\n },\n },\n secondary: {\n borderColor: \"currentColor\",\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n tertiary: {\n color: \"currentColor\",\n backgroundColor: \"transparent\",\n _hover: {\n backgroundColor: \"currentColor/7\",\n },\n },\n // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.\n ...defaultConfig.theme?.recipes?.button?.variants?.variant,\n};\n\nexport const ButtonStyles = defineRecipe({\n base: {\n borderColor: \"transparent\",\n borderWidth: \"0.1em\",\n fontWeight: 600,\n _disabled: {\n backgroundColor: `${colors.grey45}`,\n color: \"white\",\n opacity: 1,\n },\n },\n variants: {\n variant: variants,\n size: {\n sm: {\n h: \"8\",\n px: \"2\",\n textStyle: \"md\",\n },\n md: {\n textStyle: \"md\",\n },\n lg: {\n h: \"12\",\n textStyle: \"lg\",\n },\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n});\n","import { format } from \"date-fns/format\";\nimport { nb } from \"date-fns/locale/nb\";\n\nexport function formaterDato(dato?: string, dateFnsformat = \"Pp\") {\n if (typeof dato !== \"string\") return \"Ukjent dato\";\n\n try {\n return format(new Date(dato), dateFnsformat, { locale: nb });\n } catch (e) {\n console.error(\"Kunne ikke formattere dato:\" + dato, e);\n return dato;\n }\n}\n","export const colors = {\n black: \"#000000\",\n grey90: \"#181818\",\n grey80: \"#333333\",\n grey60: \"#585858\",\n grey45: \"#8c8c8c\",\n grey30: \"#b2b2b2\",\n grey15: \"#d9d9d9\",\n grey10: \"#e5e5e5\",\n grey05: \"#f2f2f2\",\n white: \"#ffffff\",\n bsRødDark: \"#870010\",\n bsRødMedium: \"#d53d40\",\n accentPurple: \"#331433\",\n accentPeach: \"#ffba99\",\n accentGreen: \"#003b29\",\n accentBlueDark: \"#001740\",\n accentBlueMedium: \"#5996de\",\n accentYellow: \"#ffc970\",\n lightBlue: \"#dbe8ef\",\n lightGreen: \"#dbe0db\",\n lightPeach: \"#f4e7de\",\n lightPurple: \"#ece8f3\",\n statusRed: \"#ad313c\",\n statusYellow: \"#bc5600\",\n statusGreen: \"#24845b\",\n statusGreenLight: \"#edf4f1\",\n statusRedLight: \"#f8efef\",\n statusYellowLight: \"#fff6e4\",\n neptune: {\n \"100\": \"#CFE6E8\",\n \"200\": \"#9FCDD2\",\n \"300\": \"#6FB5BB\",\n \"400\": \"#3F9CA5\",\n \"500\": \"#0F838E\",\n \"600\": \"#0C6972\",\n \"700\": \"#094F55\",\n \"800\": \"#063439\",\n \"900\": \"#031A1C\",\n },\n};\n","export function isDevelopment(): boolean {\n return process.env.NODE_ENV === \"development\";\n}\n\nexport function isClient(): boolean {\n return typeof window !== \"undefined\";\n}\n\nexport function isServer(): boolean {\n return !isClient();\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { colors } from \"@biblioteksentralen/utils\";\nimport { AlertRootProps, Alert as ChakraAlert, SystemStyleObject } from \"@chakra-ui/react\";\nimport React, { ReactNode } from \"react\";\nimport { AlertCircle, CheckCircle, Info, XCircle } from \"react-feather\";\n\ntype Status = \"info\" | \"warning\" | \"success\" | \"error\";\ntype CustomVariants = \"inline\";\ntype Variants = AlertRootProps[\"variant\"] | CustomVariants;\n\nconst colorLookup: Record<Status, { bg: string; color: string }> = {\n info: { bg: colors.lightBlue, color: colors.accentBlueMedium },\n warning: { bg: colors.statusYellowLight, color: colors.statusYellow },\n success: { bg: colors.statusGreenLight, color: colors.statusGreen },\n error: { bg: colors.statusRedLight, color: colors.statusRed },\n};\n\nconst iconLookup: Record<Status, React.ReactElement> = {\n info: <Info strokeWidth={1.75} role=\"img\" aria-label=\"Informasjon\" />,\n warning: <AlertCircle strokeWidth={1.75} role=\"img\" aria-label=\"Advarsel\" />,\n success: <CheckCircle strokeWidth={1.75} role=\"img\" aria-label=\"Suksess\" />,\n error: <XCircle strokeWidth={1.75} role=\"img\" aria-label=\"Feil\" />,\n};\n\ninterface Props extends Modify<AlertRootProps, { variant?: Variants }> {\n children: ReactNode;\n header?: ReactNode;\n status: Status;\n variant?: Variants;\n}\n\nconst variantStyles: Record<CustomVariants, SystemStyleObject> = {\n inline: {\n borderColor: \"transparent\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n },\n};\n\nexport function AlertBS({ status, children, variant, header, ...rest }: Props) {\n const colors = colorLookup[status];\n return (\n <ChakraAlert.Root\n status={status}\n fontSize=\"md\"\n border={`0.1rem solid`}\n borderColor={colors.color}\n backgroundColor={colors.bg}\n display=\"flex\"\n flexWrap=\"wrap\"\n {...(variant === \"inline\" ? variantStyles[variant] : {})}\n {...rest}\n >\n <ChakraAlert.Indicator marginX=\"auto\">{iconLookup[status]}</ChakraAlert.Indicator>\n <ChakraAlert.Content color=\"black\">\n {header && <ChakraAlert.Title>{header}</ChakraAlert.Title>}\n <ChakraAlert.Description>{children}</ChakraAlert.Description>\n </ChakraAlert.Content>\n </ChakraAlert.Root>\n );\n}\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { Button as ChakraButton, ButtonProps as NativeButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras Button with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype ButtonVariants = NativeButtonProps[\"variant\"] | CustomButtonVariants;\nexport type ButtonBSProps = Modify<NativeButtonProps, { variant?: ButtonVariants }>;\nexport const ButtonBS = ChakraButton as ComponentWithAs<\"button\", ButtonBSProps>;\n","import { Modify } from \"@biblioteksentralen/types\";\nimport { IconButton as ChakraIconButton, IconButtonProps as ChakraIconButtonProps } from \"@chakra-ui/react\";\nimport { ComponentWithAs } from \"@chakra-ui/system\";\nimport { CustomButtonVariants } from \"../styles/chakraTheme/ButtonStyles\";\n\n/**\n * Re-exporting chackras IconButton with a customised types\n * This causes both chakras native variants and our home-made variants to show up in auto-complete\n */\ntype IconButtonVariants = ChakraIconButtonProps[\"variant\"] | CustomButtonVariants;\nexport type IconButtonBSProps = Modify<ChakraIconButtonProps, { variant?: IconButtonVariants }>;\nexport const IconButtonBS = ChakraIconButton as ComponentWithAs<\"button\", IconButtonBSProps>;\n","import { Input as ChakraInput, Field, FieldLabelProps, InputProps, VisuallyHidden } from \"@chakra-ui/react\";\nimport React, { RefObject } from \"react\";\n\ninterface Props extends InputProps {\n label: string;\n hideLabel?: boolean;\n labelProps?: FieldLabelProps;\n helperText?: string;\n errorMessage?: string;\n ref?: RefObject<HTMLInputElement | null>;\n}\n\n/**\n * Creating custom input-component to make sure label is always set (for accessibility)\n * Also handles some common needs (helper text and error message. For more advanced input-components we leave it to the consumers to compose custom input-components based on Chakra\n */\nexport const InputBS = (props: Props) => {\n const { labelProps, label, helperText, errorMessage, hideLabel, ...inputProps } = props;\n\n const formLabel = <Field.Label {...labelProps}>{label}</Field.Label>;\n\n return (\n <Field.Root invalid={!!errorMessage}>\n {hideLabel ? <VisuallyHidden>{formLabel}</VisuallyHidden> : formLabel}\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n <ChakraInput {...inputProps} />\n {/* @ts-expect-error Chakra v3 Field.HelperText and Field.ErrorText don't include children in their types */}\n {errorMessage && <Field.ErrorText>{errorMessage}</Field.ErrorText>}\n </Field.Root>\n );\n};\n","import React, { FunctionComponent, ReactNode } from \"react\";\n\ntype Props = {\n children: ReactNode;\n wrapper: FunctionComponent<{ children: ReactNode }>;\n condition: boolean;\n};\n\n/**\n * Conditionally wrapps children with a component. If conditions are not met children mounted without the wrapper.\n */\nexport const ConditionalWrapperBS: FunctionComponent<Props> = ({ condition, children, wrapper: Wrapper }) =>\n condition ? <Wrapper>{children}</Wrapper> : <>{children}</>;\n","import { isDevelopment } from \"@biblioteksentralen/utils\";\nimport { Box, BoxProps } from \"@chakra-ui/react\";\nimport React, { ErrorInfo, ReactNode } from \"react\";\nimport { AlertBS } from \"./AlertBS\";\n\ninterface Props {\n boundaryName?: string;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error?: Error;\n errorInfo?: ErrorInfo;\n}\n\nconst StyledPre = (props: BoxProps) => (\n <Box as=\"pre\" paddingTop=\"0.5rem\" wordBreak=\"break-all\" whiteSpace=\"pre-wrap\" fontSize=\"0.8rem\" {...props} />\n);\n\nexport class ErrorBoundaryBS extends React.Component<Props, State> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n this.setState({ hasError: true, error, errorInfo });\n console.error(error, { errorInfo, boundaryName: this.props.boundaryName });\n }\n\n render() {\n if (this.state.hasError) {\n const stackTrace = this.state.errorInfo?.componentStack;\n const errormsg = this.state.error?.message;\n const info = this.props.boundaryName;\n\n return (\n <div>\n <AlertBS status=\"error\">\n <p>Beklager, det skjedde en teknisk feil.</p>\n {isDevelopment() && (stackTrace || errormsg) && (\n <div>\n <StyledPre>{errormsg || \"\"}</StyledPre>\n <StyledPre>{info || \"\"}</StyledPre>\n <StyledPre>{stackTrace || \"\"}</StyledPre>\n </div>\n )}\n </AlertBS>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n","import { Box } from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { focusStyle } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\n\ninterface Props {\n id: string;\n /**\n * angir hvor mye luft til vil ha over HashLinkTarget ved bruk av hash-lenke, eks '4rem'\n */\n spaceAbove?: string;\n /**\n * angir om du vil ha fokusramme rundt komponenten som mounter HashLinkTarget. Da må komponenten du wrapper med ha position: relative | absolute el\n */\n focusOnParent?: boolean;\n}\n\nconst focusOnRelativeParentStyle = {\n _focusWithin: {\n position: \"static\",\n boxShadow: \"none\",\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n width: \"100%\",\n pointerEvents: \"none\",\n borderRadius: \"0.25rem\",\n ...focusStyle,\n },\n },\n};\n\n/*\n * Komponent som sørger for luft over anchors (elementer man kan lenke til med hash-lenker feks <a href=\"#min-overskrift\">Ta meg til overskrift</a>)\n */\nexport function HashLinkTargetBS(props: Props) {\n return (\n <Box position=\"relative\" css={props.focusOnParent ? focusOnRelativeParentStyle : undefined}>\n <Box\n id={props.id}\n tabIndex={props.focusOnParent ? -1 : undefined}\n position=\"absolute\"\n top={`-${props.spaceAbove || \"2.5rem\"}`}\n _focus={{\n boxShadow: \"none !important\",\n }}\n />\n </Box>\n );\n}\n","import { defineConfig, defineTokens } from \"@chakra-ui/react\";\nimport { ButtonStyles } from \"./ButtonStyles\";\nimport { ContainerStyles } from \"./ContainerStyles\";\nimport { HeadingStyles } from \"./HeadingStyles\";\nimport { InputStyles } from \"./InputStyles\";\nimport { SpinnerStyles } from \"./SpinnerStyles\";\nimport { sizes } from \"./sizes\";\nimport { LinkStyles } from \"./LinkStyles\";\nimport { colors } from \"@biblioteksentralen/utils\";\n\nconst tokens = defineTokens({\n sizes,\n});\n\n// https://blog.logrocket.com/guide-css-word-wrap-overflow-wrap-word-break/\n// https://medium.com/clear-left-thinking/all-you-need-to-know-about-hyphenation-in-css-2baee2d89179\n// Skrur på hyphens auto som default fordi vi har masse mikrotekster og små elementer der layout knekker uten dette, og vi lager stadig nye og glemmer å ta hensyn til dette.\n// Så kan man optionaly sette hyphens: none de stedene man ikke ønsker det, men har ikke sett noe som knekker/blir rart pga dette enda\nconst globalHyphens = {\n hyphens: \"auto\",\n hyphenateLimitChars: \"8 5 3\", // minimum word-length / min letters first line / min letters second line\n};\n\nexport const focusStyle = {\n outline: \"none !important\",\n boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,\n transition: \"box-shadow 0.1s ease-out\", // Transition makes the newly focused element \"pop in\" and easier to spot\n};\n\nexport const biblioteksentralenChakraTheme = defineConfig({\n theme: {\n tokens,\n recipes: {\n heading: HeadingStyles,\n button: ButtonStyles,\n input: InputStyles,\n link: LinkStyles,\n container: ContainerStyles,\n spinner: SpinnerStyles,\n },\n },\n globalCss: {\n html: {\n fontSize: { base: \"112.5%\", md: \"120%\" },\n // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,\n // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)\n \"&:focus-within\": { scrollBehavior: \"smooth !important\" },\n },\n body: {\n ...globalHyphens,\n },\n // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus\n \"*:focus-visible\": focusStyle,\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const ContainerStyles = defineRecipe({\n base: {\n px: \".75rem\", // Padding left/right\n },\n});\n","import { defineRecipe } from \"@chakra-ui/react\";\n\nexport const HeadingStyles = defineRecipe({\n base: {\n fontWeight: \"600\",\n },\n});\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nconst variants: Record<string, SystemStyleObject> = {\n subtle: {\n backgroundColor: { _light: \"gray.200\", _dark: \"whiteAlpha.100\" },\n _hover: {\n bg: { _light: \"gray.300\", _dark: \"whiteAlpha.200\" },\n },\n },\n outline: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n flushed: {\n borderColor: { _light: \"gray.300\", _dark: \"whiteAlpha.300\" },\n _hover: {\n borderColor: { _light: \"gray.400\", _dark: \"whiteAlpha.400\" },\n },\n },\n};\n\nexport const InputStyles = defineRecipe({\n base: {\n _placeholder: {\n color: { _light: \"gray.500\", _dark: \"whiteAlpha.500\" },\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"subtle\",\n },\n});\n","import { colors } from \"@biblioteksentralen/utils\";\nimport { defineRecipe } from \"@chakra-ui/react\";\n\nexport const SpinnerStyles = defineRecipe({\n base: {\n animationDuration: \".8s\",\n color: colors.accentBlueMedium,\n // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color\n borderWidth: \".175em\",\n },\n});\n","const container = {\n sm: { value: \"40rem\" },\n md: { value: \"48rem\" },\n lg: { value: \"56rem\" }, // Forsøker 56rem som standardbredde etter testing med Katrine\n xl: { value: \"80rem\" },\n};\n\nexport const sizes = {\n container,\n};\n","import { defineRecipe, SystemStyleObject } from \"@chakra-ui/react\";\n\nexport type CustomLinkVariants = \"plain\" | \"underline\";\n\nconst variants: Record<CustomLinkVariants, SystemStyleObject> = {\n plain: {\n color: \"currentColor\",\n textDecoration: \"none\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecorationColor: \"currentColor\",\n textDecoration: \"underline\",\n },\n },\n underline: {\n color: \"currentColor\",\n textDecoration: \"underline\",\n textDecorationColor: \"currentColor\",\n _hover: {\n textDecoration: \"none\",\n },\n },\n};\n\nexport const LinkStyles = defineRecipe({\n base: {\n _focus: {\n outline: \"none\",\n },\n },\n variants: {\n variant: variants,\n },\n defaultVariants: {\n variant: \"underline\",\n },\n});\n","import React from \"react\";\nimport { ErrorBoundaryBS } from \"./ErrorBoundaryBS\";\n\nexport const withErrorBoundaryBS = <Props,>(Component: React.ComponentType<Props>, boundaryName: string) => {\n return (props: Props & React.JSX.IntrinsicAttributes) => (\n <ErrorBoundaryBS boundaryName={boundaryName}>\n <Component {...props} />\n </ErrorBoundaryBS>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport { ChakraProvider, createSystem, defaultConfig, SystemConfig } from \"@chakra-ui/react\";\nimport { biblioteksentralenChakraTheme } from \"../styles/chakraTheme/biblioteksentralenChakraTheme\";\nimport { ColorModeProvider } from \"@chakra-ui/system\";\n\ninterface Props {\n children: ReactNode;\n customTheme?: SystemConfig;\n}\n\nexport const BiblioteksentralenProvider = (props: Props) => (\n <ChakraProvider value={createSystem(defaultConfig, biblioteksentralenChakraTheme, props.customTheme || {})}>\n <ColorModeProvider {...props} />\n </ChakraProvider>\n);\n","import { createContext, useContext } from \"react\"\nimport { ColorModeContextType } from \"./color-mode-types\"\n\nexport const ColorModeContext = createContext({} as ColorModeContextType)\n\nColorModeContext.displayName = \"ColorModeContext\"\n\n/**\n * React hook that reads from `ColorModeProvider` context\n * Returns the color mode and function to toggle it\n */\nexport function useColorMode() {\n const context = useContext(ColorModeContext)\n if (context === undefined) {\n throw new Error(\"useColorMode must be used within a ColorModeProvider\")\n }\n return context\n}\n\n/**\n * Change value based on color mode.\n *\n * @param light the light mode value\n * @param dark the dark mode value\n *\n * @example\n *\n * ```js\n * const Icon = useColorModeValue(MoonIcon, SunIcon)\n * ```\n */\nexport function useColorModeValue<TLight = unknown, TDark = unknown>(\n light: TLight,\n dark: TDark,\n) {\n const { colorMode } = useColorMode()\n return colorMode === \"dark\" ? dark : light\n}\n","import { ColorMode } from \"./color-mode-types\"\n\nconst classNames = {\n light: \"chakra-ui-light\",\n dark: \"chakra-ui-dark\",\n}\n\ntype UtilOptions = {\n preventTransition?: boolean\n}\n\nexport function getColorModeUtils(options: UtilOptions = {}) {\n const { preventTransition = true } = options\n\n const utils = {\n setDataset: (value: ColorMode) => {\n const cleanup = preventTransition ? utils.preventTransition() : undefined\n document.documentElement.dataset.theme = value\n document.documentElement.style.colorScheme = value\n cleanup?.()\n },\n setClassName(dark: boolean) {\n document.body.classList.add(dark ? classNames.dark : classNames.light)\n document.body.classList.remove(dark ? classNames.light : classNames.dark)\n },\n query() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\")\n },\n getSystemTheme(fallback?: ColorMode) {\n const dark = utils.query().matches ?? fallback === \"dark\"\n return dark ? \"dark\" : \"light\"\n },\n addListener(fn: (cm: ColorMode) => unknown) {\n const mql = utils.query()\n const listener = (e: MediaQueryListEvent) => {\n fn(e.matches ? \"dark\" : \"light\")\n }\n\n if (typeof mql.addListener === \"function\") mql.addListener(listener)\n else mql.addEventListener(\"change\", listener)\n\n return () => {\n if (typeof mql.removeListener === \"function\")\n mql.removeListener(listener)\n else mql.removeEventListener(\"change\", listener)\n }\n },\n preventTransition() {\n const css = document.createElement(\"style\")\n css.appendChild(\n document.createTextNode(\n `*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`,\n ),\n )\n document.head.appendChild(css)\n\n return () => {\n // force a reflow\n ;(() => window.getComputedStyle(document.body))()\n\n // wait for next tick\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n document.head.removeChild(css)\n })\n })\n }\n },\n }\n\n return utils\n}\n","import { ColorMode } from \"./color-mode-types\"\n\nexport const STORAGE_KEY = \"chakra-ui-color-mode\"\n\ntype MaybeColorMode = ColorMode | undefined\n\nexport interface StorageManager {\n type: \"cookie\" | \"localStorage\"\n ssr?: boolean\n get(init?: ColorMode): MaybeColorMode\n set(value: ColorMode | \"system\"): void\n}\n\nexport function createLocalStorageManager(key: string): StorageManager {\n return {\n ssr: false,\n type: \"localStorage\",\n get(init?) {\n if (!globalThis?.document) return init\n let value: any\n try {\n value = localStorage.getItem(key) || init\n } catch (e) {\n // no op\n }\n\n return value || init\n },\n set(value) {\n try {\n localStorage.setItem(key, value)\n } catch (e) {\n // no op\n }\n },\n }\n}\n\nexport const localStorageManager = createLocalStorageManager(STORAGE_KEY)\n\nfunction parseCookie(cookie: string, key: string): MaybeColorMode {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`))\n return match?.[2] as MaybeColorMode\n}\n\nexport function createCookieStorageManager(\n key: string,\n cookie?: string,\n): StorageManager {\n return {\n ssr: !!cookie,\n type: \"cookie\",\n get(init?): MaybeColorMode {\n if (cookie) return parseCookie(cookie, key)\n if (!globalThis?.document) return init\n return parseCookie(document.cookie, key) || init\n },\n set(value) {\n document.cookie = `${key}=${value}; max-age=31536000; path=/`\n },\n }\n}\n\nexport const cookieStorageManager = createCookieStorageManager(STORAGE_KEY)\n\nexport const cookieStorageManagerSSR = (cookie: string) =>\n createCookieStorageManager(STORAGE_KEY, cookie)\n","import { useEffect, useLayoutEffect } from \"react\"\n\nexport const useSafeLayoutEffect = Boolean(globalThis?.document)\n ? useLayoutEffect\n : useEffect\n","import { useSafeLayoutEffect } from \"@chakra-ui/react-use-safe-layout-effect\"\nimport { useCallback, useEffect, useMemo, useState } from \"react\"\nimport { ColorModeContext } from \"./color-mode-context\"\nimport {\n ColorMode,\n ColorModeContextType,\n ColorModeOptions,\n} from \"./color-mode-types\"\nimport { getColorModeUtils } from \"./color-mode.utils\"\nimport { localStorageManager, StorageManager } from \"./storage-manager\"\n\nconst noop = () => {}\n\nexport interface ColorModeProviderProps {\n value?: ColorMode\n children?: React.ReactNode\n options?: ColorModeOptions\n colorModeManager?: StorageManager\n}\n\nfunction getTheme(manager: StorageManager, fallback?: ColorMode) {\n return manager.type === \"cookie\" && manager.ssr\n ? manager.get(fallback)\n : fallback\n}\n\n/**\n * Provides context for the color mode based on config in `theme`\n * Returns the color mode and function to toggle the color mode\n */\nexport function ColorModeProvider(props: ColorModeProviderProps) {\n const {\n value,\n children,\n options: {\n useSystemColorMode,\n initialColorMode,\n disableTransitionOnChange,\n } = {},\n colorModeManager = localStorageManager,\n } = props\n\n const defaultColorMode = initialColorMode === \"dark\" ? \"dark\" : \"light\"\n\n const [colorMode, rawSetColorMode] = useState(() =>\n getTheme(colorModeManager, defaultColorMode),\n )\n\n const [resolvedColorMode, setResolvedColorMode] = useState(() =>\n getTheme(colorModeManager),\n )\n\n const { getSystemTheme, setClassName, setDataset, addListener } = useMemo(\n () => getColorModeUtils({ preventTransition: disableTransitionOnChange }),\n [disableTransitionOnChange],\n )\n\n const resolvedValue =\n initialColorMode === \"system\" && !colorMode ? resolvedColorMode : colorMode\n\n const setColorMode = useCallback(\n (value: ColorMode | \"system\") => {\n //\n const resolved = value === \"system\" ? getSystemTheme() : value\n rawSetColorMode(resolved)\n\n setClassName(resolved === \"dark\")\n setDataset(resolved)\n\n colorModeManager.set(resolved)\n },\n [colorModeManager, getSystemTheme, setClassName, setDataset],\n )\n\n useSafeLayoutEffect(() => {\n if (initialColorMode === \"system\") {\n setResolvedColorMode(getSystemTheme())\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n const managerValue = colorModeManager.get()\n\n if (managerValue) {\n setColorMode(managerValue)\n return\n }\n\n if (initialColorMode === \"system\") {\n setColorMode(\"system\")\n return\n }\n\n setColorMode(defaultColorMode)\n }, [colorModeManager, defaultColorMode, initialColorMode, setColorMode])\n\n const toggleColorMode = useCallback(() => {\n setColorMode(resolvedValue === \"dark\" ? \"light\" : \"dark\")\n }, [resolvedValue, setColorMode])\n\n useEffect(() => {\n if (!useSystemColorMode) return\n return addListener(setColorMode)\n }, [useSystemColorMode, addListener, setColorMode])\n\n // presence of `value` indicates a controlled context\n const context = useMemo(\n () => ({\n colorMode: value ?? (resolvedValue as ColorMode),\n toggleColorMode: value ? noop : toggleColorMode,\n setColorMode: value ? noop : setColorMode,\n forced: value !== undefined,\n }),\n [resolvedValue, toggleColorMode, setColorMode, value],\n )\n\n return (\n <ColorModeContext.Provider value={context}>\n {children}\n </ColorModeContext.Provider>\n )\n}\n\nColorModeProvider.displayName = \"ColorModeProvider\"\n\n/**\n * Locks the color mode to `dark`, without any way to change it.\n */\nexport function DarkMode(props: React.PropsWithChildren<{}>) {\n const context = useMemo<ColorModeContextType>(\n () => ({\n colorMode: \"dark\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true,\n }),\n [],\n )\n\n return <ColorModeContext.Provider value={context} {...props} />\n}\n\nDarkMode.displayName = \"DarkMode\"\n\n/**\n * Locks the color mode to `light` without any way to change it.\n */\nexport function LightMode(props: React.PropsWithChildren<{}>) {\n const context = useMemo<ColorModeContextType>(\n () => ({\n colorMode: \"light\",\n toggleColorMode: noop,\n setColorMode: noop,\n forced: true,\n }),\n [],\n )\n\n return <ColorModeContext.Provider value={context} {...props} />\n}\n\nLightMode.displayName = \"LightMode\"\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@biblioteksentralen/react",
3
- "version": "4.0.0-beta.5",
3
+ "version": "4.0.0-beta.6",
4
4
  "description": "React library for reusable code in Biblioteksentralens js-apps",
5
5
  "keywords": [],
6
6
  "author": "Biblioteksentralen",
@@ -44,15 +44,14 @@
44
44
  "react": "^19.1.0",
45
45
  "react-dom": "^19.1.0",
46
46
  "tsup": "^8.5.1",
47
- "@biblioteksentralen/utils": "2.0.0",
48
47
  "@biblioteksentralen/types": "1.0.0",
48
+ "@biblioteksentralen/utils": "2.0.0",
49
49
  "@biblioteksentralen/icons": "2.1.1"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "react": "^19.x",
53
53
  "react-dom": "^19.x",
54
- "@chakra-ui/react": "^3.x",
55
- "@chakra-ui/system": "^2.x"
54
+ "@chakra-ui/react": "^3.x"
56
55
  },
57
56
  "scripts": {
58
57
  "test": "vitest --watch=false",