@biblioteksentralen/react 3.1.0 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/ButtonStyles-7ASDoOwZ.d.mts +3 -0
  2. package/dist/ButtonStyles-7ASDoOwZ.d.ts +3 -0
  3. package/dist/chunk-2KZDHLEJ.mjs +10 -0
  4. package/dist/chunk-2KZDHLEJ.mjs.map +1 -0
  5. package/dist/chunk-3IJ454KG.mjs +39 -0
  6. package/dist/chunk-3IJ454KG.mjs.map +1 -0
  7. package/dist/chunk-5GJBW3WE.mjs +229 -0
  8. package/dist/chunk-5GJBW3WE.mjs.map +1 -0
  9. package/dist/chunk-7MKFY66H.mjs +44 -0
  10. package/dist/chunk-7MKFY66H.mjs.map +1 -0
  11. package/dist/chunk-BCT5QU5W.js +142 -0
  12. package/dist/chunk-BCT5QU5W.js.map +1 -0
  13. package/dist/chunk-BN5W6FVN.mjs +55 -0
  14. package/dist/chunk-BN5W6FVN.mjs.map +1 -0
  15. package/dist/chunk-BRFRPPOW.js +10 -0
  16. package/dist/chunk-BRFRPPOW.js.map +1 -0
  17. package/dist/chunk-BZS3AX26.mjs +10 -0
  18. package/dist/chunk-BZS3AX26.mjs.map +1 -0
  19. package/dist/chunk-CGCBID7S.mjs +15 -0
  20. package/dist/chunk-CGCBID7S.mjs.map +1 -0
  21. package/dist/chunk-J5IF7WUN.js +10 -0
  22. package/dist/chunk-J5IF7WUN.js.map +1 -0
  23. package/dist/chunk-NSYSPEHR.js +86 -0
  24. package/dist/chunk-NSYSPEHR.js.map +1 -0
  25. package/dist/chunk-NYKSRUWF.js +51 -0
  26. package/dist/chunk-NYKSRUWF.js.map +1 -0
  27. package/dist/chunk-O4EXBCND.js +19 -0
  28. package/dist/chunk-O4EXBCND.js.map +1 -0
  29. package/dist/chunk-PLWK7HEC.js +75 -0
  30. package/dist/chunk-PLWK7HEC.js.map +1 -0
  31. package/dist/chunk-PQLTQYZ3.mjs +15 -0
  32. package/dist/chunk-PQLTQYZ3.mjs.map +1 -0
  33. package/dist/chunk-QAW4IRLI.js +55 -0
  34. package/dist/chunk-QAW4IRLI.js.map +1 -0
  35. package/dist/chunk-QBXCCJ24.js +344 -0
  36. package/dist/chunk-QBXCCJ24.js.map +1 -0
  37. package/dist/chunk-QX75QJ7F.mjs +52 -0
  38. package/dist/chunk-QX75QJ7F.mjs.map +1 -0
  39. package/dist/chunk-RZUGRIUF.mjs +17 -0
  40. package/dist/chunk-RZUGRIUF.mjs.map +1 -0
  41. package/dist/chunk-UFIMO32F.js +275 -0
  42. package/dist/chunk-UFIMO32F.js.map +1 -0
  43. package/dist/chunk-VSICUYFB.js +51 -0
  44. package/dist/chunk-VSICUYFB.js.map +1 -0
  45. package/dist/chunk-WYQNSPEX.mjs +10 -0
  46. package/dist/chunk-WYQNSPEX.mjs.map +1 -0
  47. package/dist/components/AlertBS.d.mts +18 -0
  48. package/dist/components/AlertBS.d.ts +18 -0
  49. package/dist/components/AlertBS.js +9 -0
  50. package/dist/components/AlertBS.js.map +1 -0
  51. package/dist/components/AlertBS.mjs +9 -0
  52. package/dist/components/AlertBS.mjs.map +1 -0
  53. package/dist/components/BiblioteksentralenProvider.d.mts +10 -0
  54. package/dist/components/BiblioteksentralenProvider.d.ts +10 -0
  55. package/dist/components/BiblioteksentralenProvider.js +10 -0
  56. package/dist/components/BiblioteksentralenProvider.js.map +1 -0
  57. package/dist/components/BiblioteksentralenProvider.mjs +10 -0
  58. package/dist/components/BiblioteksentralenProvider.mjs.map +1 -0
  59. package/dist/components/ButtonBS.d.mts +16 -0
  60. package/dist/components/ButtonBS.d.ts +16 -0
  61. package/dist/components/ButtonBS.js +8 -0
  62. package/dist/components/ButtonBS.js.map +1 -0
  63. package/dist/components/ButtonBS.mjs +8 -0
  64. package/dist/components/ButtonBS.mjs.map +1 -0
  65. package/dist/components/ConditionalWrapperBS.d.mts +15 -0
  66. package/dist/components/ConditionalWrapperBS.d.ts +15 -0
  67. package/dist/components/ConditionalWrapperBS.js +8 -0
  68. package/dist/components/ConditionalWrapperBS.js.map +1 -0
  69. package/dist/components/ConditionalWrapperBS.mjs +8 -0
  70. package/dist/components/ConditionalWrapperBS.mjs.map +1 -0
  71. package/dist/components/ErrorBoundaryBS.d.mts +21 -0
  72. package/dist/components/ErrorBoundaryBS.d.ts +21 -0
  73. package/dist/components/ErrorBoundaryBS.js +10 -0
  74. package/dist/components/ErrorBoundaryBS.js.map +1 -0
  75. package/dist/components/ErrorBoundaryBS.mjs +10 -0
  76. package/dist/components/ErrorBoundaryBS.mjs.map +1 -0
  77. package/dist/components/HashLinkTargetBS.d.mts +16 -0
  78. package/dist/components/HashLinkTargetBS.d.ts +16 -0
  79. package/dist/components/HashLinkTargetBS.js +10 -0
  80. package/dist/components/HashLinkTargetBS.js.map +1 -0
  81. package/dist/components/HashLinkTargetBS.mjs +10 -0
  82. package/dist/components/HashLinkTargetBS.mjs.map +1 -0
  83. package/dist/components/IconButtonBS.d.mts +16 -0
  84. package/dist/components/IconButtonBS.d.ts +16 -0
  85. package/dist/components/IconButtonBS.js +8 -0
  86. package/dist/components/IconButtonBS.js.map +1 -0
  87. package/dist/components/IconButtonBS.mjs +8 -0
  88. package/dist/components/IconButtonBS.mjs.map +1 -0
  89. package/dist/components/InputBS.d.mts +18 -0
  90. package/dist/components/InputBS.d.ts +18 -0
  91. package/dist/components/InputBS.js +8 -0
  92. package/dist/components/InputBS.js.map +1 -0
  93. package/dist/components/InputBS.mjs +8 -0
  94. package/dist/components/InputBS.mjs.map +1 -0
  95. package/dist/components/withErrorBoundaryBS.d.mts +5 -0
  96. package/dist/components/withErrorBoundaryBS.d.ts +5 -0
  97. package/dist/components/withErrorBoundaryBS.js +11 -0
  98. package/dist/components/withErrorBoundaryBS.js.map +1 -0
  99. package/dist/components/withErrorBoundaryBS.mjs +11 -0
  100. package/dist/components/withErrorBoundaryBS.mjs.map +1 -0
  101. package/dist/index.d.mts +15 -0
  102. package/dist/index.d.ts +13 -106
  103. package/dist/index.js +38 -748
  104. package/dist/index.js.map +1 -1
  105. package/dist/index.mjs +33 -407
  106. package/dist/index.mjs.map +1 -1
  107. package/package.json +27 -11
  108. /package/{LICENSE → dist/LICENSE} +0 -0
@@ -0,0 +1,3 @@
1
+ type CustomButtonVariants = "primary" | "secondary" | "tertiary";
2
+
3
+ export type { CustomButtonVariants as C };
@@ -0,0 +1,3 @@
1
+ type CustomButtonVariants = "primary" | "secondary" | "tertiary";
2
+
3
+ export type { CustomButtonVariants as C };
@@ -0,0 +1,10 @@
1
+ "use client";
2
+
3
+ // src/components/ConditionalWrapperBS.tsx
4
+ import React from "react";
5
+ var ConditionalWrapperBS = ({ condition, children, wrapper: Wrapper }) => condition ? /* @__PURE__ */ React.createElement(Wrapper, null, children) : /* @__PURE__ */ React.createElement(React.Fragment, null, children);
6
+
7
+ export {
8
+ ConditionalWrapperBS
9
+ };
10
+ //# sourceMappingURL=chunk-2KZDHLEJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ConditionalWrapperBS.tsx"],"sourcesContent":["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"],"mappings":";;;AAAA,OAAO,WAA6C;AAW7C,IAAM,uBAAiD,CAAC,EAAE,WAAW,UAAU,SAAS,QAAQ,MACrG,YAAY,oCAAC,eAAS,QAAS,IAAa,0DAAG,QAAS;","names":[]}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import {
3
+ AlertBS
4
+ } from "./chunk-QX75QJ7F.mjs";
5
+ import {
6
+ isDevelopment
7
+ } from "./chunk-BN5W6FVN.mjs";
8
+
9
+ // src/components/ErrorBoundaryBS.tsx
10
+ import { Box } from "@chakra-ui/react";
11
+ import React from "react";
12
+ var StyledPre = (props) => /* @__PURE__ */ React.createElement(Box, { as: "pre", paddingTop: "0.5rem", wordBreak: "break-all", whiteSpace: "pre-wrap", fontSize: "0.8rem", ...props });
13
+ var ErrorBoundaryBS = class extends React.Component {
14
+ constructor(props) {
15
+ super(props);
16
+ this.state = { hasError: false };
17
+ }
18
+ static getDerivedStateFromError(error) {
19
+ return { hasError: true };
20
+ }
21
+ componentDidCatch(error, errorInfo) {
22
+ this.setState({ hasError: true, error, errorInfo });
23
+ console.error(error, { errorInfo, boundaryName: this.props.boundaryName });
24
+ }
25
+ render() {
26
+ if (this.state.hasError) {
27
+ const stackTrace = this.state.errorInfo?.componentStack;
28
+ const errormsg = this.state.error?.message;
29
+ const info = this.props.boundaryName;
30
+ return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(AlertBS, { status: "error" }, /* @__PURE__ */ React.createElement("p", null, "Beklager, det skjedde en teknisk feil."), isDevelopment() && (stackTrace || errormsg) && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(StyledPre, null, errormsg || ""), /* @__PURE__ */ React.createElement(StyledPre, null, info || ""), /* @__PURE__ */ React.createElement(StyledPre, null, stackTrace || ""))));
31
+ }
32
+ return this.props.children;
33
+ }
34
+ };
35
+
36
+ export {
37
+ ErrorBoundaryBS
38
+ };
39
+ //# sourceMappingURL=chunk-3IJ454KG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ErrorBoundaryBS.tsx"],"sourcesContent":["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"],"mappings":";;;;;;;;;AACA,SAAS,WAAqB;AAC9B,OAAO,WAAqC;AAc5C,IAAM,YAAY,CAAC,UACjB,oCAAC,OAAI,IAAG,OAAM,YAAW,UAAS,WAAU,aAAY,YAAW,YAAW,UAAS,UAAU,GAAG,OAAO;AAGtG,IAAM,kBAAN,cAA8B,MAAM,UAAwB;AAAA,EACjE,YAAY,OAAY;AACtB,UAAM,KAAK;AACX,SAAK,QAAQ,EAAE,UAAU,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,yBAAyB,OAAY;AAC1C,WAAO,EAAE,UAAU,KAAK;AAAA,EAC1B;AAAA,EAEA,kBAAkB,OAAY,WAAgB;AAC5C,SAAK,SAAS,EAAE,UAAU,MAAM,OAAO,UAAU,CAAC;AAClD,YAAQ,MAAM,OAAO,EAAE,WAAW,cAAc,KAAK,MAAM,aAAa,CAAC;AAAA,EAC3E;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,MAAM,UAAU;AACvB,YAAM,aAAa,KAAK,MAAM,WAAW;AACzC,YAAM,WAAW,KAAK,MAAM,OAAO;AACnC,YAAM,OAAO,KAAK,MAAM;AAExB,aACE,oCAAC,aACC,oCAAC,WAAQ,QAAO,WACd,oCAAC,WAAE,wCAAsC,GACxC,cAAc,MAAM,cAAc,aACjC,oCAAC,aACC,oCAAC,iBAAW,YAAY,EAAG,GAC3B,oCAAC,iBAAW,QAAQ,EAAG,GACvB,oCAAC,iBAAW,cAAc,EAAG,CAC/B,CAEJ,CACF;AAAA,IAEJ;AAEA,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;","names":[]}
@@ -0,0 +1,229 @@
1
+ "use client";
2
+ import {
3
+ colors
4
+ } from "./chunk-BN5W6FVN.mjs";
5
+
6
+ // src/styles/chakraTheme/biblioteksentralenChakraTheme.ts
7
+ import { defineConfig, defineTokens } from "@chakra-ui/react";
8
+
9
+ // src/styles/chakraTheme/ButtonStyles.ts
10
+ import { defaultConfig, defineRecipe } from "@chakra-ui/react";
11
+ var variants = {
12
+ primary: {
13
+ backgroundColor: colors.black,
14
+ color: "white",
15
+ _hover: {
16
+ backgroundColor: "hsla(0deg, 0%, 70%, 1)",
17
+ color: "black"
18
+ }
19
+ },
20
+ secondary: {
21
+ borderColor: "currentColor",
22
+ color: "currentColor",
23
+ backgroundColor: "transparent",
24
+ _hover: {
25
+ backgroundColor: "currentColor/7"
26
+ }
27
+ },
28
+ tertiary: {
29
+ color: "currentColor",
30
+ backgroundColor: "transparent",
31
+ _hover: {
32
+ backgroundColor: "currentColor/7"
33
+ }
34
+ },
35
+ // Inherit variants from Chakra's default config. Seems like they are overridden by our custom variants by default.
36
+ ...defaultConfig.theme?.recipes?.button?.variants?.variant
37
+ };
38
+ var ButtonStyles = defineRecipe({
39
+ base: {
40
+ borderColor: "transparent",
41
+ borderWidth: "0.1em",
42
+ fontWeight: 600,
43
+ _disabled: {
44
+ backgroundColor: `${colors.grey45}`,
45
+ color: "white",
46
+ opacity: 1
47
+ }
48
+ },
49
+ variants: {
50
+ variant: variants,
51
+ size: {
52
+ sm: {
53
+ h: "8",
54
+ px: "2",
55
+ textStyle: "md"
56
+ },
57
+ md: {
58
+ textStyle: "md"
59
+ },
60
+ lg: {
61
+ h: "12",
62
+ textStyle: "lg"
63
+ }
64
+ }
65
+ },
66
+ defaultVariants: {
67
+ variant: "primary",
68
+ size: "md"
69
+ }
70
+ });
71
+
72
+ // src/styles/chakraTheme/ContainerStyles.ts
73
+ import { defineRecipe as defineRecipe2 } from "@chakra-ui/react";
74
+ var ContainerStyles = defineRecipe2({
75
+ base: {
76
+ px: ".75rem"
77
+ // Padding left/right
78
+ }
79
+ });
80
+
81
+ // src/styles/chakraTheme/HeadingStyles.ts
82
+ import { defineRecipe as defineRecipe3 } from "@chakra-ui/react";
83
+ var HeadingStyles = defineRecipe3({
84
+ base: {
85
+ fontWeight: "600"
86
+ }
87
+ });
88
+
89
+ // src/styles/chakraTheme/InputStyles.ts
90
+ import { defineRecipe as defineRecipe4 } from "@chakra-ui/react";
91
+ var variants2 = {
92
+ subtle: {
93
+ backgroundColor: { _light: "gray.200", _dark: "whiteAlpha.100" },
94
+ _hover: {
95
+ bg: { _light: "gray.300", _dark: "whiteAlpha.200" }
96
+ }
97
+ },
98
+ outline: {
99
+ borderColor: { _light: "gray.300", _dark: "whiteAlpha.300" },
100
+ _hover: {
101
+ borderColor: { _light: "gray.400", _dark: "whiteAlpha.400" }
102
+ }
103
+ },
104
+ flushed: {
105
+ borderColor: { _light: "gray.300", _dark: "whiteAlpha.300" },
106
+ _hover: {
107
+ borderColor: { _light: "gray.400", _dark: "whiteAlpha.400" }
108
+ }
109
+ }
110
+ };
111
+ var InputStyles = defineRecipe4({
112
+ base: {
113
+ _placeholder: {
114
+ color: { _light: "gray.500", _dark: "whiteAlpha.500" }
115
+ }
116
+ },
117
+ variants: {
118
+ variant: variants2
119
+ },
120
+ defaultVariants: {
121
+ variant: "subtle"
122
+ }
123
+ });
124
+
125
+ // src/styles/chakraTheme/SpinnerStyles.ts
126
+ import { defineRecipe as defineRecipe5 } from "@chakra-ui/react";
127
+ var SpinnerStyles = defineRecipe5({
128
+ base: {
129
+ animationDuration: ".8s",
130
+ color: colors.accentBlueMedium,
131
+ // Todo: Legg til trackColor: https://chakra-ui.com/docs/components/spinner#track-color
132
+ borderWidth: ".175em"
133
+ }
134
+ });
135
+
136
+ // src/styles/chakraTheme/sizes.ts
137
+ var container = {
138
+ sm: { value: "40rem" },
139
+ md: { value: "48rem" },
140
+ lg: { value: "56rem" },
141
+ // Forsøker 56rem som standardbredde etter testing med Katrine
142
+ xl: { value: "80rem" }
143
+ };
144
+ var sizes = {
145
+ container
146
+ };
147
+
148
+ // src/styles/chakraTheme/LinkStyles.ts
149
+ import { defineRecipe as defineRecipe6 } from "@chakra-ui/react";
150
+ var variants3 = {
151
+ plain: {
152
+ color: "currentColor",
153
+ textDecoration: "none",
154
+ textDecorationColor: "currentColor",
155
+ _hover: {
156
+ textDecorationColor: "currentColor",
157
+ textDecoration: "underline"
158
+ }
159
+ },
160
+ underline: {
161
+ color: "currentColor",
162
+ textDecoration: "underline",
163
+ textDecorationColor: "currentColor",
164
+ _hover: {
165
+ textDecoration: "none"
166
+ }
167
+ }
168
+ };
169
+ var LinkStyles = defineRecipe6({
170
+ base: {
171
+ _focus: {
172
+ outline: "none"
173
+ }
174
+ },
175
+ variants: {
176
+ variant: variants3
177
+ },
178
+ defaultVariants: {
179
+ variant: "underline"
180
+ }
181
+ });
182
+
183
+ // src/styles/chakraTheme/biblioteksentralenChakraTheme.ts
184
+ var tokens = defineTokens({
185
+ sizes
186
+ });
187
+ var globalHyphens = {
188
+ hyphens: "auto",
189
+ hyphenateLimitChars: "8 5 3"
190
+ // minimum word-length / min letters first line / min letters second line
191
+ };
192
+ var focusStyle = {
193
+ outline: "none !important",
194
+ boxShadow: `0 0 0 .05rem ${colors.white}, 0 0 0 .25rem ${colors.accentBlueMedium}, 0 0 0 .3rem ${colors.white} !important`,
195
+ transition: "box-shadow 0.1s ease-out"
196
+ // Transition makes the newly focused element "pop in" and easier to spot
197
+ };
198
+ var biblioteksentralenChakraTheme = defineConfig({
199
+ theme: {
200
+ tokens,
201
+ recipes: {
202
+ heading: HeadingStyles,
203
+ button: ButtonStyles,
204
+ input: InputStyles,
205
+ link: LinkStyles,
206
+ container: ContainerStyles,
207
+ spinner: SpinnerStyles
208
+ }
209
+ },
210
+ globalCss: {
211
+ html: {
212
+ fontSize: { base: "112.5%", md: "120%" },
213
+ // Sørger for smooth scrolling for interne lenker som scroller til annet sted på siden,
214
+ // men ikke hvis fokus er utenfor viduet, feks ved søk i tekst (ctrl + f)
215
+ "&:focus-within": { scrollBehavior: "smooth !important" }
216
+ },
217
+ body: {
218
+ ...globalHyphens
219
+ },
220
+ // Felles fokus-styling for alle elementer for å sikre at de har en tydelig og uniform visuell indikasjon når de er i fokus
221
+ "*:focus-visible": focusStyle
222
+ }
223
+ });
224
+
225
+ export {
226
+ focusStyle,
227
+ biblioteksentralenChakraTheme
228
+ };
229
+ //# sourceMappingURL=chunk-5GJBW3WE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/styles/chakraTheme/biblioteksentralenChakraTheme.ts","../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"],"sourcesContent":["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 { 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"],"mappings":"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","names":["defineRecipe","defineRecipe","defineRecipe","variants","defineRecipe","defineRecipe","variants"]}
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import {
3
+ focusStyle
4
+ } from "./chunk-5GJBW3WE.mjs";
5
+
6
+ // src/components/HashLinkTargetBS.tsx
7
+ import { Box } from "@chakra-ui/react";
8
+ import React from "react";
9
+ var focusOnRelativeParentStyle = {
10
+ _focusWithin: {
11
+ position: "static",
12
+ boxShadow: "none",
13
+ "&::after": {
14
+ content: '""',
15
+ position: "absolute",
16
+ top: 0,
17
+ left: 0,
18
+ height: "100%",
19
+ width: "100%",
20
+ pointerEvents: "none",
21
+ borderRadius: "0.25rem",
22
+ ...focusStyle
23
+ }
24
+ }
25
+ };
26
+ function HashLinkTargetBS(props) {
27
+ return /* @__PURE__ */ React.createElement(Box, { position: "relative", css: props.focusOnParent ? focusOnRelativeParentStyle : void 0 }, /* @__PURE__ */ React.createElement(
28
+ Box,
29
+ {
30
+ id: props.id,
31
+ tabIndex: props.focusOnParent ? -1 : void 0,
32
+ position: "absolute",
33
+ top: `-${props.spaceAbove || "2.5rem"}`,
34
+ _focus: {
35
+ boxShadow: "none !important"
36
+ }
37
+ }
38
+ ));
39
+ }
40
+
41
+ export {
42
+ HashLinkTargetBS
43
+ };
44
+ //# sourceMappingURL=chunk-7MKFY66H.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/HashLinkTargetBS.tsx"],"sourcesContent":["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"],"mappings":";;;;;;AAAA,SAAS,WAAW;AACpB,OAAO,WAAW;AAelB,IAAM,6BAA6B;AAAA,EACjC,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,eAAe;AAAA,MACf,cAAc;AAAA,MACd,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAKO,SAAS,iBAAiB,OAAc;AAC7C,SACE,oCAAC,OAAI,UAAS,YAAW,KAAK,MAAM,gBAAgB,6BAA6B,UAC/E;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,MAAM;AAAA,MACV,UAAU,MAAM,gBAAgB,KAAK;AAAA,MACrC,UAAS;AAAA,MACT,KAAK,IAAI,MAAM,cAAc,QAAQ;AAAA,MACrC,QAAQ;AAAA,QACN,WAAW;AAAA,MACb;AAAA;AAAA,EACF,CACF;AAEJ;","names":[]}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) {
4
+ Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ } else {
11
+ obj[key] = value;
12
+ }
13
+ return obj;
14
+ }
15
+ function _object_spread(target) {
16
+ for(var i = 1; i < arguments.length; i++){
17
+ var source = arguments[i] != null ? arguments[i] : {};
18
+ var ownKeys = Object.keys(source);
19
+ if (typeof Object.getOwnPropertySymbols === "function") {
20
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
21
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
22
+ }));
23
+ }
24
+ ownKeys.forEach(function(key) {
25
+ _define_property(target, key, source[key]);
26
+ });
27
+ }
28
+ return target;
29
+ }
30
+ function _object_without_properties(source, excluded) {
31
+ if (source == null) return {};
32
+ var target = _object_without_properties_loose(source, excluded);
33
+ var key, i;
34
+ if (Object.getOwnPropertySymbols) {
35
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
36
+ for(i = 0; i < sourceSymbolKeys.length; i++){
37
+ key = sourceSymbolKeys[i];
38
+ if (excluded.indexOf(key) >= 0) continue;
39
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
40
+ target[key] = source[key];
41
+ }
42
+ }
43
+ return target;
44
+ }
45
+ function _object_without_properties_loose(source, excluded) {
46
+ if (source == null) return {};
47
+ var target = {};
48
+ var sourceKeys = Object.keys(source);
49
+ var key, i;
50
+ for(i = 0; i < sourceKeys.length; i++){
51
+ key = sourceKeys[i];
52
+ if (excluded.indexOf(key) >= 0) continue;
53
+ target[key] = source[key];
54
+ }
55
+ return target;
56
+ }
57
+ Object.defineProperty(exports, "__esModule", {
58
+ value: true
59
+ });
60
+ function _interopRequireDefault(obj) {
61
+ return obj && obj.__esModule ? obj : {
62
+ default: obj
63
+ };
64
+ }
65
+ "use client";
66
+ var _chunkQAW4IRLIjs = require("./chunk-QAW4IRLI.js");
67
+ // src/components/AlertBS.tsx
68
+ var _react = require("@chakra-ui/react");
69
+ var _react3 = require("react");
70
+ var _react4 = _interopRequireDefault(_react3);
71
+ var _reactfeather = require("react-feather");
72
+ var colorLookup = {
73
+ info: {
74
+ bg: _chunkQAW4IRLIjs.colors.lightBlue,
75
+ color: _chunkQAW4IRLIjs.colors.accentBlueMedium
76
+ },
77
+ warning: {
78
+ bg: _chunkQAW4IRLIjs.colors.statusYellowLight,
79
+ color: _chunkQAW4IRLIjs.colors.statusYellow
80
+ },
81
+ success: {
82
+ bg: _chunkQAW4IRLIjs.colors.statusGreenLight,
83
+ color: _chunkQAW4IRLIjs.colors.statusGreen
84
+ },
85
+ error: {
86
+ bg: _chunkQAW4IRLIjs.colors.statusRedLight,
87
+ color: _chunkQAW4IRLIjs.colors.statusRed
88
+ }
89
+ };
90
+ var iconLookup = {
91
+ info: /* @__PURE__ */ _react4.default.createElement(_reactfeather.Info, {
92
+ strokeWidth: 1.75,
93
+ role: "img",
94
+ "aria-label": "Informasjon"
95
+ }),
96
+ warning: /* @__PURE__ */ _react4.default.createElement(_reactfeather.AlertCircle, {
97
+ strokeWidth: 1.75,
98
+ role: "img",
99
+ "aria-label": "Advarsel"
100
+ }),
101
+ success: /* @__PURE__ */ _react4.default.createElement(_reactfeather.CheckCircle, {
102
+ strokeWidth: 1.75,
103
+ role: "img",
104
+ "aria-label": "Suksess"
105
+ }),
106
+ error: /* @__PURE__ */ _react4.default.createElement(_reactfeather.XCircle, {
107
+ strokeWidth: 1.75,
108
+ role: "img",
109
+ "aria-label": "Feil"
110
+ })
111
+ };
112
+ var variantStyles = {
113
+ inline: {
114
+ borderColor: "transparent",
115
+ backgroundColor: "transparent",
116
+ padding: "0"
117
+ }
118
+ };
119
+ function AlertBS(_param) {
120
+ var status = _param.status, children = _param.children, variant = _param.variant, header = _param.header, rest = _object_without_properties(_param, [
121
+ "status",
122
+ "children",
123
+ "variant",
124
+ "header"
125
+ ]);
126
+ var colors2 = colorLookup[status];
127
+ return /* @__PURE__ */ _react4.default.createElement(_react.Alert.Root, _object_spread({
128
+ status: status,
129
+ fontSize: "md",
130
+ border: "0.1rem solid",
131
+ borderColor: colors2.color,
132
+ backgroundColor: colors2.bg,
133
+ display: "flex",
134
+ flexWrap: "wrap"
135
+ }, variant === "inline" ? variantStyles[variant] : {}, rest), /* @__PURE__ */ _react4.default.createElement(_react.Alert.Indicator, {
136
+ marginX: "auto"
137
+ }, iconLookup[status]), /* @__PURE__ */ _react4.default.createElement(_react.Alert.Content, {
138
+ color: "black"
139
+ }, header && /* @__PURE__ */ _react4.default.createElement(_react.Alert.Title, null, header), /* @__PURE__ */ _react4.default.createElement(_react.Alert.Description, null, children)));
140
+ }
141
+ exports.AlertBS = AlertBS;
142
+ //# sourceMappingURL=chunk-BCT5QU5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AlertBS.tsx"],"names":["colors"],"mappings":";;;;;;AAEA,SAAyB,SAAS,mBAAsC;AACxE,OAAO,WAA0B;AACjC,SAAS,aAAa,aAAa,MAAM,eAAe;AAMxD,IAAM,cAA6D;AAAA,EACjE,MAAM,EAAE,IAAI,OAAO,WAAW,OAAO,OAAO,iBAAiB;AAAA,EAC7D,SAAS,EAAE,IAAI,OAAO,mBAAmB,OAAO,OAAO,aAAa;AAAA,EACpE,SAAS,EAAE,IAAI,OAAO,kBAAkB,OAAO,OAAO,YAAY;AAAA,EAClE,OAAO,EAAE,IAAI,OAAO,gBAAgB,OAAO,OAAO,UAAU;AAC9D;AAEA,IAAM,aAAiD;AAAA,EACrD,MAAM,oCAAC,QAAK,aAAa,MAAM,MAAK,OAAM,cAAW,eAAc;AAAA,EACnE,SAAS,oCAAC,eAAY,aAAa,MAAM,MAAK,OAAM,cAAW,YAAW;AAAA,EAC1E,SAAS,oCAAC,eAAY,aAAa,MAAM,MAAK,OAAM,cAAW,WAAU;AAAA,EACzE,OAAO,oCAAC,WAAQ,aAAa,MAAM,MAAK,OAAM,cAAW,QAAO;AAClE;AASA,IAAM,gBAA2D;AAAA,EAC/D,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AACF;AAEO,SAAS,QAAQ,EAAE,QAAQ,UAAU,SAAS,QAAQ,GAAG,KAAK,GAAU;AAC7E,QAAMA,UAAS,YAAY,MAAM;AACjC,SACE;AAAA,IAAC,YAAY;AAAA,IAAZ;AAAA,MACC;AAAA,MACA,UAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAaA,QAAO;AAAA,MACpB,iBAAiBA,QAAO;AAAA,MACxB,SAAQ;AAAA,MACR,UAAS;AAAA,MACR,GAAI,YAAY,WAAW,cAAc,OAAO,IAAI,CAAC;AAAA,MACrD,GAAG;AAAA;AAAA,IAEJ,oCAAC,YAAY,WAAZ,EAAsB,SAAQ,UAAQ,WAAW,MAAM,CAAE;AAAA,IAC1D,oCAAC,YAAY,SAAZ,EAAoB,OAAM,WACxB,UAAU,oCAAC,YAAY,OAAZ,MAAmB,MAAO,GACtC,oCAAC,YAAY,aAAZ,MAAyB,QAAS,CACrC;AAAA,EACF;AAEJ","sourcesContent":["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"]}
@@ -0,0 +1,55 @@
1
+ "use client";
2
+
3
+ // ../utils/dist/index.mjs
4
+ import { format } from "date-fns/format";
5
+ import { nb } from "date-fns/locale/nb";
6
+ var colors = {
7
+ black: "#000000",
8
+ grey90: "#181818",
9
+ grey80: "#333333",
10
+ grey60: "#585858",
11
+ grey45: "#8c8c8c",
12
+ grey30: "#b2b2b2",
13
+ grey15: "#d9d9d9",
14
+ grey10: "#e5e5e5",
15
+ grey05: "#f2f2f2",
16
+ white: "#ffffff",
17
+ bsR\u00F8dDark: "#870010",
18
+ bsR\u00F8dMedium: "#d53d40",
19
+ accentPurple: "#331433",
20
+ accentPeach: "#ffba99",
21
+ accentGreen: "#003b29",
22
+ accentBlueDark: "#001740",
23
+ accentBlueMedium: "#5996de",
24
+ accentYellow: "#ffc970",
25
+ lightBlue: "#dbe8ef",
26
+ lightGreen: "#dbe0db",
27
+ lightPeach: "#f4e7de",
28
+ lightPurple: "#ece8f3",
29
+ statusRed: "#ad313c",
30
+ statusYellow: "#bc5600",
31
+ statusGreen: "#24845b",
32
+ statusGreenLight: "#edf4f1",
33
+ statusRedLight: "#f8efef",
34
+ statusYellowLight: "#fff6e4",
35
+ neptune: {
36
+ "100": "#CFE6E8",
37
+ "200": "#9FCDD2",
38
+ "300": "#6FB5BB",
39
+ "400": "#3F9CA5",
40
+ "500": "#0F838E",
41
+ "600": "#0C6972",
42
+ "700": "#094F55",
43
+ "800": "#063439",
44
+ "900": "#031A1C"
45
+ }
46
+ };
47
+ function isDevelopment() {
48
+ return process.env.NODE_ENV === "development";
49
+ }
50
+
51
+ export {
52
+ colors,
53
+ isDevelopment
54
+ };
55
+ //# sourceMappingURL=chunk-BN5W6FVN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../utils/src/colors.ts","../../utils/src/date.ts","../../utils/src/environment.ts","../../utils/src/random.ts","../../utils/src/slugifyString.ts","../../utils/src/sort/common.ts","../../utils/src/sort/sortAlphabetical.ts","../../utils/src/sort/sortArrayInGroups.ts","../../utils/src/sort/sortByMultiple.ts"],"sourcesContent":["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","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 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","export function randomFromArray<T>(array: T[]): T {\n return array[Math.floor(Math.random() * array.length)];\n}\n\nexport function seededRandomFromArray<T>(array: T[], seed: string): T {\n return array[Math.floor(seededRandom(seed) * array.length)];\n}\n\n// Returns a pseudo-random floating-point number in the range [0.0 -> 1.0] from a string seed\n// TODO, ser ikke ut til å gi helt jevn fordeling mellom 0 og 1, trenger kanskje litt kjærlighet\nexport function seededRandom(seed: string) {\n // Oversetter ikke-numeriske tegn til tall så de kan brukes som seed\n const numericSeed = Number(seed.replace(/\\D/g, (match) => `${match.charCodeAt(0)}`));\n const x = Math.sin(numericSeed) * 3333;\n return x - Math.floor(x);\n}\n","export const slugifyString = (value = \"\") =>\n value\n .trim()\n .toLowerCase()\n // Bytter ut typisk norske bokstaver æøå\n .replace(/æ/g, \"ae\")\n .replace(/å/g, \"a\")\n .replace(/ø/g, \"o\")\n // Bytter alle tegn som ikke er et regex-word med '-'\n .replace(/\\W/g, \"-\")\n // Bytter ut flere streker med enkelt strek \"----\" => \"-\"\n .replace(/-+/g, \"-\")\n .slice(0, 30);\n","export type GetSortIndex<T> = (element: T) => number | string;\n\nconst compareAlphabetically = (left: string, right: string) => left.localeCompare(right, [\"no-NO\"]);\n\nexport const compare = <T>(left: T, right: T, indexFunction?: GetSortIndex<T>) => {\n const leftIndex = indexFunction ? indexFunction(left) : left;\n const rightIndex = indexFunction ? indexFunction(right) : right;\n\n if (typeof leftIndex == \"number\" && typeof rightIndex == \"number\") return leftIndex - rightIndex;\n\n if (typeof leftIndex == \"string\" && typeof rightIndex == \"string\") {\n return compareAlphabetically(leftIndex, rightIndex);\n }\n\n throw new Error(\"Sort index function gives inconsistent index types\");\n};\n","import { GetSortIndex, compare } from \"./common\";\n\n/**\n * Alphabetical sorting restricted to Norwegian locale, for consistent sorting on server and client\n * (radash's `alphabetical()` is inconsistent between these two)\n */\nexport const sortAlphabetical = <T>(array: T[], indexFunction?: GetSortIndex<T>): T[] =>\n array.slice().sort((left, right) => compare(left, right, indexFunction));\n","export interface Group<T> {\n label: string;\n items: T[];\n}\n\nexport interface GroupedArray<T> extends Array<Group<T>> {}\n\n/* Tar et array og putter ting i grupper basert på gruppekategorier\n *\n * Feks\n *\n * const myArray = ['Apple', 'Aubergine', 'Lemon'];\n *\n * const inGroups = groupArray(myArray, item => item[0]);\n *\n * console.log(inGroups);\n *\n * // [{groupLabel: 'A', groupItems: ['Apple', 'Aubergine']}, {groupLabel: 'L', groupItems: ['Lemon']}]\n *\n * */\nexport function sortArrayInGroups<T>(\n items: T[],\n getGroupLabel: (element: T) => string,\n options?: { sortAlphabetically?: boolean }\n): GroupedArray<T> {\n const groups = items.reduce((acc: GroupedArray<T>, arrayEntry) => {\n const currentCategory = getGroupLabel(arrayEntry);\n const categoryIndex = acc.findIndex((group) => group.label === currentCategory);\n if (categoryIndex >= 0) {\n acc[categoryIndex].items.push(arrayEntry);\n } else {\n acc.push({\n label: currentCategory,\n items: [arrayEntry],\n });\n }\n return acc;\n }, []);\n\n return options?.sortAlphabetically ? groups.sort(sortByLabel) : groups;\n}\n\nfunction sortByLabel<T>(a: Group<T>, b: Group<T>) {\n if (a.label.toLowerCase() > b.label.toLowerCase()) return 1;\n if (a.label.toLowerCase() < b.label.toLowerCase()) return -1;\n return 0;\n}\n","import { AtLeastOne } from \"@biblioteksentralen/types\";\nimport { GetSortIndex, compare } from \"./common\";\n\n/**\n * Corresponds to lodash's sortBy called with several comparison functions (no equivalent in radash)\n */\nexport const sortByMultiple = <T>(array: T[], ...indexFunctions: AtLeastOne<GetSortIndex<T>>): T[] =>\n array.slice().sort((left, right) =>\n indexFunctions.slice(1).reduce(\n // If the previous comparison is 0, it means left and right are equal according to the previous\n // comparison function. That's also the only way it'll be falsy, therefore we can\n // use the or operator || to then apply the next comparison function.\n (previous, indexFunction) => previous || compare(left, right, indexFunction),\n compare(left, right, indexFunctions[0]) // Initial comparison\n )\n );\n"],"mappings":";;;ACAA,SAAS,cAAc;AACvB,SAAS,UAAU;ADDZ,IAAM,SAAS;EACpB,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,gBAAW;EACX,kBAAa;EACb,cAAc;EACd,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,aAAa;EACb,WAAW;EACX,cAAc;EACd,aAAa;EACb,kBAAkB;EAClB,gBAAgB;EAChB,mBAAmB;EACnB,SAAS;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;EACT;AACF;AExCO,SAAS,gBAAyB;AACvC,SAAO,QAAQ,IAAI,aAAa;AAClC;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ "use client";
6
+ // src/components/ButtonBS.tsx
7
+ var _react = require("@chakra-ui/react");
8
+ var ButtonBS = _react.Button;
9
+ exports.ButtonBS = ButtonBS;
10
+ //# sourceMappingURL=chunk-BRFRPPOW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ButtonBS.tsx"],"names":[],"mappings":";;;AACA,SAAS,UAAU,oBAAsD;AAUlE,IAAM,WAAW","sourcesContent":["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"]}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+
3
+ // src/components/IconButtonBS.tsx
4
+ import { IconButton as ChakraIconButton } from "@chakra-ui/react";
5
+ var IconButtonBS = ChakraIconButton;
6
+
7
+ export {
8
+ IconButtonBS
9
+ };
10
+ //# sourceMappingURL=chunk-BZS3AX26.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/IconButtonBS.tsx"],"sourcesContent":["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"],"mappings":";;;AACA,SAAS,cAAc,wBAAkE;AAUlF,IAAM,eAAe;","names":[]}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import {
3
+ ErrorBoundaryBS
4
+ } from "./chunk-3IJ454KG.mjs";
5
+
6
+ // src/components/withErrorBoundaryBS.tsx
7
+ import React from "react";
8
+ var withErrorBoundaryBS = (Component, boundaryName) => {
9
+ return (props) => /* @__PURE__ */ React.createElement(ErrorBoundaryBS, { boundaryName }, /* @__PURE__ */ React.createElement(Component, { ...props }));
10
+ };
11
+
12
+ export {
13
+ withErrorBoundaryBS
14
+ };
15
+ //# sourceMappingURL=chunk-CGCBID7S.mjs.map