@obosbbl/grunnmuren-react 1.14.0 → 1.14.2-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.
@@ -3,6 +3,7 @@ export type FieldValues = Record<string, unknown>;
3
3
  export declare function useFormContext(): {
4
4
  activeStep: number;
5
5
  formData: any;
6
+ setActiveStep: (step: number) => void;
6
7
  };
7
8
  export declare function useFormStepContext<FormStepData extends FieldValues>(formStep: number): {
8
9
  isActive: boolean;
@@ -10,8 +11,8 @@ export declare function useFormStepContext<FormStepData extends FieldValues>(for
10
11
  setActiveStep: (step: number) => void;
11
12
  previousFormStep: () => Promise<void>;
12
13
  nextFormStep: () => void;
13
- submitAndNextFormStep: (formValues: FormStepData) => void;
14
- setFormData: (formValues: FormStepData) => void;
14
+ submitAndNextFormStep: (formValues: FormStepData) => Promise<void>;
15
+ setFormData: (formValues: FormStepData) => Promise<void>;
15
16
  formData: any;
16
17
  };
17
18
  export declare function FormStepProvider({ children }: {
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as o, jsxs as f, Fragment as O } from "react/jsx-runtime";
3
- import { createContext as w, useContext as A, useState as q, useCallback as N, useEffect as fe, useId as $, forwardRef as h, Children as Z, isValidElement as ee, cloneElement as W, useRef as E, useMemo as C, useReducer as ge } from "react";
3
+ import { createContext as y, useContext as A, useState as q, useCallback as N, useEffect as fe, useId as $, forwardRef as h, Children as Z, isValidElement as ee, cloneElement as W, useRef as E, useMemo as C, useReducer as ge } from "react";
4
4
  import { ChevronDown as te, Warning as re, InfoCircle as ne, LoadingSpinner as he, CheckCircle as pe, MenuAlt as Ae, Close as xe, ChevronRight as ve, ChevronLeft as Ne } from "@obosbbl/grunnmuren-icons";
5
- import { useCollapse as we } from "react-collapsed";
5
+ import { useCollapse as ye } from "react-collapsed";
6
6
  import c from "clsx";
7
- import { useMediaQuery as ae, useUpdateEffect as ye } from "@react-hookz/web";
7
+ import { useMediaQuery as ae, useUpdateEffect as we } from "@react-hookz/web";
8
8
  import { mergeRefs as K } from "react-merge-refs";
9
9
  const I = () => {
10
10
  }, Ie = 300, Ce = "duration-300", X = (e) => {
11
11
  const { className: r, ...t } = e;
12
12
  return /* @__PURE__ */ o("div", { className: c(r, "flex flex-col gap-2"), ...t });
13
- }, Y = w({
13
+ }, Y = y({
14
14
  isExpanded: !1,
15
15
  setExpanded: I,
16
16
  // @ts-expect-error noop
@@ -19,7 +19,7 @@ const I = () => {
19
19
  getToggleProps: I,
20
20
  onChange: I
21
21
  }), Ee = (e) => {
22
- const { className: r, defaultOpen: t, onChange: n = I, open: a, ...s } = e, i = we({
22
+ const { className: r, defaultOpen: t, onChange: n = I, open: a, ...s } = e, i = ye({
23
23
  defaultExpanded: t,
24
24
  isExpanded: a,
25
25
  duration: Ie,
@@ -36,7 +36,7 @@ const I = () => {
36
36
  ...s
37
37
  }
38
38
  ) });
39
- }, Re = (e) => {
39
+ }, Se = (e) => {
40
40
  const { children: r, className: t, as: n = "h3", ...a } = e, { getToggleProps: s, onChange: i, isExpanded: d } = A(Y), u = s({ onClick: () => i(!d) });
41
41
  return /* @__PURE__ */ o(n, { children: /* @__PURE__ */ f(
42
42
  "button",
@@ -59,13 +59,13 @@ const I = () => {
59
59
  ]
60
60
  }
61
61
  ) });
62
- }, Se = (e) => {
62
+ }, Re = (e) => {
63
63
  const { getCollapseProps: r } = A(Y), { className: t, ...n } = e, a = r();
64
64
  return /* @__PURE__ */ o("div", { ...a, "aria-labelledby": oe(a.id), children: /* @__PURE__ */ o("div", { className: c(t, "p-5 pb-10"), ...n }) });
65
65
  }, oe = (e) => e + "toggle";
66
66
  X.Item = Ee;
67
- X.Header = Re;
68
- X.Content = Se;
67
+ X.Header = Se;
68
+ X.Content = Re;
69
69
  const ct = (e) => {
70
70
  const { className: r, children: t, heading: n, severity: a = "alert", ...s } = e;
71
71
  return /* @__PURE__ */ o(
@@ -107,8 +107,8 @@ function se(e) {
107
107
  return "bg-sky-light";
108
108
  }
109
109
  }
110
- const Le = (e) => ae("(max-width: 767.9px)", { initializeWithValue: e });
111
- function L(e, r = !0) {
110
+ const Pe = (e) => ae("(max-width: 767.9px)", { initializeWithValue: e });
111
+ function P(e, r = !0) {
112
112
  const [t, n] = q("indeterminate"), [a, s] = q(), i = N((l) => {
113
113
  l.target.checkValidity() && (n("valid"), s(void 0));
114
114
  }, []), d = N(
@@ -130,7 +130,7 @@ function L(e, r = !0) {
130
130
  };
131
131
  }, [r, d]), { validity: t, validationMessage: a };
132
132
  }
133
- function R(e) {
133
+ function S(e) {
134
134
  const r = $();
135
135
  return e ?? r;
136
136
  }
@@ -158,7 +158,7 @@ const mt = (e) => {
158
158
  className: "w-20 flex-none self-center md:w-32 md:self-start",
159
159
  ...e
160
160
  }
161
- ), Pe = {
161
+ ), Le = {
162
162
  "standard-primary": "bg-green border-green text-white",
163
163
  "standard-secondary": "bg-white border-green text-black",
164
164
  "mint-primary": "bg-mint border-mint text-black",
@@ -177,7 +177,7 @@ const mt = (e) => {
177
177
  type: d = "button",
178
178
  variant: u = "primary",
179
179
  ...l
180
- } = e, m = A(P), b = Pe[`${a ?? m}-${u}`], p = c(n, b, "button"), x = i ? /* @__PURE__ */ o(Me, { children: t }) : t;
180
+ } = e, m = A(L), b = Le[`${a ?? m}-${u}`], p = c(n, b, "button"), x = i ? /* @__PURE__ */ o(Me, { children: t }) : t;
181
181
  return /* @__PURE__ */ o(O, { children: s ? /* @__PURE__ */ o(
182
182
  "a",
183
183
  {
@@ -223,7 +223,7 @@ function ie(e) {
223
223
  return r;
224
224
  });
225
225
  }
226
- const P = w("standard"), le = w(!0), ze = (e, r) => {
226
+ const L = y("standard"), le = y(!0), ze = (e, r) => {
227
227
  const {
228
228
  as: t = "div",
229
229
  body: n,
@@ -350,10 +350,10 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
350
350
  id: s,
351
351
  disableValidation: i = !1,
352
352
  ...d
353
- } = e, u = E(null), { validity: l, validationMessage: m } = L(
353
+ } = e, u = E(null), { validity: l, validationMessage: m } = P(
354
354
  u,
355
355
  !i
356
- ), g = R(s), b = g + "err", p = a || m;
356
+ ), g = S(s), b = g + "err", p = a || m;
357
357
  return /* @__PURE__ */ f("div", { className: "grid gap-2", children: [
358
358
  /* @__PURE__ */ f("label", { className: c(n, "flex cursor-pointer gap-2.5"), children: [
359
359
  /* @__PURE__ */ o(
@@ -376,7 +376,7 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
376
376
  ),
377
377
  t
378
378
  ] }),
379
- p && /* @__PURE__ */ o(S, { id: b, children: p })
379
+ p && /* @__PURE__ */ o(R, { id: b, children: p })
380
380
  ] });
381
381
  }
382
382
  ), je = {
@@ -417,9 +417,9 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
417
417
  ]
418
418
  }
419
419
  );
420
- }, wt = (e) => {
420
+ }, yt = (e) => {
421
421
  const { className: r, children: t, ...n } = e;
422
- return /* @__PURE__ */ o(P.Provider, { value: "white", children: /* @__PURE__ */ o(
422
+ return /* @__PURE__ */ o(L.Provider, { value: "white", children: /* @__PURE__ */ o(
423
423
  "footer",
424
424
  {
425
425
  className: c(
@@ -431,7 +431,7 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
431
431
  children: /* @__PURE__ */ o("div", { className: "container", children: t })
432
432
  }
433
433
  ) });
434
- }, yt = (e) => {
434
+ }, wt = (e) => {
435
435
  const { heading: r, children: t, className: n, ...a } = e;
436
436
  return /* @__PURE__ */ f(
437
437
  "form",
@@ -473,7 +473,7 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
473
473
  children: "Beklager! Noe gikk dessverre galt under innesendingen av skjemaet. Prøv gjerne igjen om en stund."
474
474
  }
475
475
  );
476
- }, S = (e) => {
476
+ }, R = (e) => {
477
477
  const { children: r, className: t, ...n } = e;
478
478
  return /* @__PURE__ */ f(
479
479
  "div",
@@ -628,7 +628,7 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
628
628
  ]
629
629
  }
630
630
  );
631
- }, Q = w([
631
+ }, Q = y([
632
632
  {
633
633
  activeStep: 1,
634
634
  formData: {}
@@ -637,17 +637,18 @@ const P = w("standard"), le = w(!0), ze = (e, r) => {
637
637
  }
638
638
  ]);
639
639
  function Et() {
640
- const [e] = A(Q);
640
+ const [e, r] = A(Q);
641
641
  return {
642
642
  activeStep: e.activeStep,
643
- formData: e.formData
643
+ formData: e.formData,
644
+ setActiveStep: (t) => r({ type: "SET_STEP", step: t })
644
645
  };
645
646
  }
646
647
  function Xe(e) {
647
648
  const [r, t] = A(Q), n = N(async () => {
648
649
  t({ type: "PREV_STEP" });
649
650
  }, [t]), a = N(
650
- (d) => {
651
+ async (d) => {
651
652
  t({
652
653
  type: "SET_FORM_STEP_DATA",
653
654
  formId: `form${e}`,
@@ -658,8 +659,8 @@ function Xe(e) {
658
659
  ), s = N(() => {
659
660
  t({ type: "NEXT_STEP" });
660
661
  }, [t]), i = N(
661
- (d) => {
662
- a(d), s();
662
+ async (d) => {
663
+ await a(d), s();
663
664
  },
664
665
  [s, a]
665
666
  );
@@ -701,14 +702,14 @@ function Ye(e, r) {
701
702
  };
702
703
  }
703
704
  }
704
- function Rt({ children: e }) {
705
+ function St({ children: e }) {
705
706
  const [r, t] = ge(Ye, {
706
707
  activeStep: 1,
707
708
  formData: {}
708
709
  }), n = C(() => [r, t], [r, t]);
709
710
  return /* @__PURE__ */ o(Q.Provider, { value: n, children: e });
710
711
  }
711
- const St = (e) => {
712
+ const Rt = (e) => {
712
713
  const {
713
714
  children: r,
714
715
  heading: t,
@@ -721,7 +722,7 @@ const St = (e) => {
721
722
  } = e, { isActive: l, setActiveStep: m, activeStep: g } = Xe(n), b = E(null), p = N(() => {
722
723
  n < g && (d == null || d(n), m(n));
723
724
  }, [g, n, m, d]);
724
- return ye(() => {
725
+ return we(() => {
725
726
  var x;
726
727
  l && ((x = b.current) == null || x.scrollIntoView({ behavior: "smooth" }));
727
728
  }, [l]), /* @__PURE__ */ f(
@@ -752,7 +753,7 @@ const St = (e) => {
752
753
  function ce(e) {
753
754
  return e !== "vertical-split" && e !== "below-center" && e !== "below-left";
754
755
  }
755
- const V = w({ bgColor: "white", contentPosition: "below-center", hasImage: !1 }), kt = h((e, r) => {
756
+ const V = y({ bgColor: "white", contentPosition: "below-center", hasImage: !1 }), kt = h((e, r) => {
756
757
  const {
757
758
  bgColor: t = "white",
758
759
  children: n,
@@ -769,7 +770,7 @@ const V = w({ bgColor: "white", contentPosition: "below-center", hasImage: !1 })
769
770
  [t, l, u]
770
771
  );
771
772
  return /* @__PURE__ */ o(
772
- P.Provider,
773
+ L.Provider,
773
774
  {
774
775
  value: t === "white" ? "standard" : "mint",
775
776
  children: /* @__PURE__ */ o(V.Provider, { value: m, children: /* @__PURE__ */ f(
@@ -822,7 +823,7 @@ const V = w({ bgColor: "white", contentPosition: "below-center", hasImage: !1 })
822
823
  }
823
824
  );
824
825
  }
825
- ), Lt = h(
826
+ ), Pt = h(
826
827
  (e, r) => {
827
828
  const { bgColor: t, contentPosition: n, hasImage: a } = A(V), { children: s, className: i, heading: d, description: u, ...l } = e, m = ce(n);
828
829
  return /* @__PURE__ */ f(
@@ -866,7 +867,7 @@ const V = w({ bgColor: "white", contentPosition: "below-center", hasImage: !1 })
866
867
  }
867
868
  );
868
869
  }
869
- ), Pt = h(
870
+ ), Lt = h(
870
871
  (e, r) => {
871
872
  const { className: t, ...n } = e, { contentPosition: a } = A(V);
872
873
  return /* @__PURE__ */ o(
@@ -941,7 +942,7 @@ const Mt = (e) => {
941
942
  e.icon,
942
943
  e.children
943
944
  ] });
944
- }, k = w({
945
+ }, k = y({
945
946
  setIsExpanded: I,
946
947
  isExpanded: !1,
947
948
  collapsibleId: ""
@@ -950,7 +951,7 @@ const Mt = (e) => {
950
951
  () => ({ isExpanded: s, setIsExpanded: i, collapsibleId: a }),
951
952
  [s, a]
952
953
  );
953
- return /* @__PURE__ */ o(P.Provider, { value: "white", children: /* @__PURE__ */ o(k.Provider, { value: d, children: /* @__PURE__ */ o(
954
+ return /* @__PURE__ */ o(L.Provider, { value: "white", children: /* @__PURE__ */ o(k.Provider, { value: d, children: /* @__PURE__ */ o(
954
955
  "div",
955
956
  {
956
957
  className: c(
@@ -1043,9 +1044,9 @@ const Mt = (e) => {
1043
1044
  }
1044
1045
  );
1045
1046
  }, jt = (e) => {
1046
- const { isExpanded: r } = A(k), t = Le(!1);
1047
+ const { isExpanded: r } = A(k), t = Pe(!1);
1047
1048
  return !r || !t ? null : /* @__PURE__ */ o(O, { children: e.children });
1048
- }, y = 2, T = w({ currentPage: 0, pageCount: 0 }), Ot = (e) => {
1049
+ }, w = 2, T = y({ currentPage: 0, pageCount: 0 }), Ot = (e) => {
1049
1050
  const {
1050
1051
  className: r,
1051
1052
  page: t,
@@ -1089,7 +1090,7 @@ const Mt = (e) => {
1089
1090
  selected: t === 1
1090
1091
  }
1091
1092
  ),
1092
- n > 2 + y * 2 && t > y + 2 && /* @__PURE__ */ o(He, {}),
1093
+ n > 2 + w * 2 && t > w + 2 && /* @__PURE__ */ o(He, {}),
1093
1094
  /* @__PURE__ */ o(Ge, { children: (b) => /* @__PURE__ */ o(
1094
1095
  G,
1095
1096
  {
@@ -1153,18 +1154,18 @@ const Mt = (e) => {
1153
1154
  );
1154
1155
  }), He = () => /* @__PURE__ */ o("span", { className: "flex h-9 w-9 cursor-default items-center justify-center border-2 border-transparent sm:h-10 sm:w-10", children: "..." }), Ge = ({ children: e }) => {
1155
1156
  const { currentPage: r, pageCount: t } = A(T), n = Math.min(
1156
- Math.max(2 + y * 2, r + y),
1157
+ Math.max(2 + w * 2, r + w),
1157
1158
  t
1158
1159
  );
1159
1160
  let a = Math.max(
1160
- Math.min(r - y, n - y * 2),
1161
+ Math.min(r - w, n - w * 2),
1161
1162
  1
1162
1163
  );
1163
- return a - y === 0 && (a = a - 1), Array.from({ length: n - a }, (i, d) => a + d + 1).map((i) => e(i));
1164
+ return a - w === 0 && (a = a - 1), Array.from({ length: n - a }, (i, d) => a + d + 1).map((i) => e(i));
1164
1165
  }, G = h((e, r) => {
1165
1166
  const { page: t, selected: n, ...a } = e;
1166
1167
  return /* @__PURE__ */ o(U, { "aria-current": n ? "page" : void 0, ref: r, ...a, children: t });
1167
- }), me = w({
1168
+ }), me = y({
1168
1169
  defaultValue: void 0,
1169
1170
  isControlled: !1,
1170
1171
  name: void 0,
@@ -1223,7 +1224,7 @@ const Mt = (e) => {
1223
1224
  error: !!i
1224
1225
  }),
1225
1226
  [a, t, m, v, b, p, i]
1226
- ), J = R(d), B = `${J}:label`, D = `${J}:help`, H = J + "err", j = i;
1227
+ ), J = S(d), B = `${J}:label`, D = `${J}:help`, H = J + "err", j = i;
1227
1228
  return /* @__PURE__ */ o(me.Provider, { value: F, children: /* @__PURE__ */ f(
1228
1229
  "div",
1229
1230
  {
@@ -1241,7 +1242,7 @@ const Mt = (e) => {
1241
1242
  l && /* @__PURE__ */ o(z, { id: B, isRequired: b, isInvalid: !!i, children: l }),
1242
1243
  s && /* @__PURE__ */ o(M, { id: D, children: s }),
1243
1244
  u,
1244
- j && /* @__PURE__ */ o(S, { id: H, children: j })
1245
+ j && /* @__PURE__ */ o(R, { id: H, children: j })
1245
1246
  ]
1246
1247
  }
1247
1248
  ) });
@@ -1284,10 +1285,10 @@ const Mt = (e) => {
1284
1285
  label: s,
1285
1286
  disableValidation: i = !1,
1286
1287
  ...d
1287
- } = e, u = E(null), l = K([u, r]), { validity: m, validationMessage: g } = L(
1288
+ } = e, u = E(null), l = K([u, r]), { validity: m, validationMessage: g } = P(
1288
1289
  u,
1289
1290
  !i
1290
- ), b = R(a), p = b + "help", x = b + "err", v = n || g;
1291
+ ), b = S(a), p = b + "help", x = b + "err", v = n || g;
1291
1292
  return /* @__PURE__ */ f("div", { className: "grid gap-2", children: [
1292
1293
  /* @__PURE__ */ o(
1293
1294
  z,
@@ -1312,7 +1313,7 @@ const Mt = (e) => {
1312
1313
  }) || void 0
1313
1314
  }
1314
1315
  ),
1315
- v && /* @__PURE__ */ o(S, { id: x, children: v })
1316
+ v && /* @__PURE__ */ o(R, { id: x, children: v })
1316
1317
  ] });
1317
1318
  }
1318
1319
  ), Xt = (e) => {
@@ -1407,10 +1408,10 @@ const Qt = h(
1407
1408
  label: s,
1408
1409
  disableValidation: i = !1,
1409
1410
  ...d
1410
- } = e, u = E(null), l = K([u, r]), { validity: m, validationMessage: g } = L(
1411
+ } = e, u = E(null), l = K([u, r]), { validity: m, validationMessage: g } = P(
1411
1412
  u,
1412
1413
  !i
1413
- ), b = R(a), p = b + "help", x = b + "err", v = n || g;
1414
+ ), b = S(a), p = b + "help", x = b + "err", v = n || g;
1414
1415
  return /* @__PURE__ */ f("div", { className: "grid gap-2", children: [
1415
1416
  /* @__PURE__ */ o(
1416
1417
  z,
@@ -1436,7 +1437,7 @@ const Qt = h(
1436
1437
  }) || void 0
1437
1438
  }
1438
1439
  ),
1439
- v && /* @__PURE__ */ o(S, { id: x, children: v })
1440
+ v && /* @__PURE__ */ o(R, { id: x, children: v })
1440
1441
  ] });
1441
1442
  }
1442
1443
  ), Ut = h(
@@ -1449,10 +1450,10 @@ const Qt = h(
1449
1450
  type: i = "text",
1450
1451
  disableValidation: d = !1,
1451
1452
  ...u
1452
- } = e, l = E(null), { validity: m, validationMessage: g } = L(
1453
+ } = e, l = E(null), { validity: m, validationMessage: g } = P(
1453
1454
  l,
1454
1455
  !d
1455
- ), b = R(a), p = b + "help", x = b + "err", v = n || g, F = K([l, r]);
1456
+ ), b = S(a), p = b + "help", x = b + "err", v = n || g, F = K([l, r]);
1456
1457
  return /* @__PURE__ */ f("div", { className: "grid gap-2", children: [
1457
1458
  /* @__PURE__ */ o(
1458
1459
  z,
@@ -1478,20 +1479,20 @@ const Qt = h(
1478
1479
  }) || void 0
1479
1480
  }
1480
1481
  ),
1481
- v && /* @__PURE__ */ o(S, { id: x, children: v })
1482
+ v && /* @__PURE__ */ o(R, { id: x, children: v })
1482
1483
  ] });
1483
1484
  }
1484
1485
  );
1485
1486
  export {
1486
1487
  X as Accordion,
1487
- Se as AccordionContent,
1488
- Re as AccordionHeader,
1488
+ Re as AccordionContent,
1489
+ Se as AccordionHeader,
1489
1490
  Ee as AccordionItem,
1490
1491
  ct as Alert,
1491
1492
  mt as Banner,
1492
1493
  ut as BannerImage,
1493
1494
  bt as Button,
1494
- P as ButtonColorContext,
1495
+ L as ButtonColorContext,
1495
1496
  ft as Campaign,
1496
1497
  gt as Card,
1497
1498
  At as CardContent,
@@ -1500,21 +1501,21 @@ export {
1500
1501
  pt as CardList,
1501
1502
  vt as Checkbox,
1502
1503
  Nt as Chip,
1503
- wt as Footer,
1504
- yt as Form,
1504
+ yt as Footer,
1505
+ wt as Form,
1505
1506
  It as FormError,
1506
- S as FormErrorMessage,
1507
+ R as FormErrorMessage,
1507
1508
  Ze as FormHeading,
1508
1509
  M as FormHelperText,
1509
1510
  z as FormLabel,
1510
- St as FormStep,
1511
+ Rt as FormStep,
1511
1512
  We as FormStepHeader,
1512
1513
  Ke as FormStepHeaderContent,
1513
- Rt as FormStepProvider,
1514
+ St as FormStepProvider,
1514
1515
  Ct as FormSuccess,
1515
1516
  kt as Hero,
1516
- Pt as HeroActions,
1517
- Lt as HeroContent,
1517
+ Lt as HeroActions,
1518
+ Pt as HeroContent,
1518
1519
  V as HeroContext,
1519
1520
  qt as HeroImage,
1520
1521
  de as Input,
@@ -1537,10 +1538,10 @@ export {
1537
1538
  Qt as TextArea,
1538
1539
  Ut as TextField,
1539
1540
  se as useBlockBackgroundColor,
1540
- R as useFallbackId,
1541
+ S as useFallbackId,
1541
1542
  Et as useFormContext,
1542
- L as useFormControlValidity,
1543
+ P as useFormControlValidity,
1543
1544
  Xe as useFormStepContext,
1544
1545
  dt as usePrefersReducedMotion,
1545
- Le as useScreenMaxWidthMd
1546
+ Pe as useScreenMaxWidthMd
1546
1547
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@obosbbl/grunnmuren-react",
3
- "version": "1.14.0",
3
+ "version": "1.14.2-beta.0",
4
4
  "description": "OBOS Grunnmuren design system React components",
5
5
  "license": "MIT",
6
6
  "repository": {