@navikt/ds-react 5.6.0-beta.0 → 5.6.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 (162) hide show
  1. package/_docs.json +1495 -652
  2. package/cjs/accordion/Accordion.js +1 -0
  3. package/cjs/accordion/AccordionContext.js +1 -1
  4. package/cjs/accordion/AccordionHeader.js +2 -2
  5. package/cjs/accordion/AccordionItem.js +3 -0
  6. package/cjs/date/datepicker/DatePicker.js +30 -34
  7. package/cjs/date/datepicker/DatePickerStandalone.js +23 -26
  8. package/cjs/date/datepicker/parts/Caption.js +28 -0
  9. package/cjs/date/datepicker/{DayButton.js → parts/DayButton.js} +1 -2
  10. package/cjs/date/datepicker/{caption → parts}/DropdownCaption.js +13 -7
  11. package/cjs/date/datepicker/parts/HeadRow.js +36 -0
  12. package/cjs/date/datepicker/parts/Row.js +23 -0
  13. package/cjs/date/datepicker/{TableHead.js → parts/TableHead.js} +4 -3
  14. package/cjs/date/datepicker/parts/WeekNumber.js +35 -0
  15. package/cjs/date/datepicker/parts/WeekRow.js +34 -0
  16. package/cjs/date/utils/get-month-weeks.js +46 -0
  17. package/cjs/date/utils/labels.js +40 -1
  18. package/cjs/index.js +1 -0
  19. package/cjs/layout/bleed/Bleed.js +25 -5
  20. package/cjs/layout/bleed/index.js +1 -4
  21. package/cjs/layout/box/Box.js +1 -1
  22. package/cjs/layout/responsive/Responsive.js +8 -6
  23. package/cjs/layout/utilities/css.js +37 -14
  24. package/esm/accordion/Accordion.js +1 -0
  25. package/esm/accordion/Accordion.js.map +1 -1
  26. package/esm/accordion/AccordionContext.d.ts +1 -0
  27. package/esm/accordion/AccordionContext.js +1 -1
  28. package/esm/accordion/AccordionContext.js.map +1 -1
  29. package/esm/accordion/AccordionHeader.js +2 -2
  30. package/esm/accordion/AccordionHeader.js.map +1 -1
  31. package/esm/accordion/AccordionItem.js +3 -0
  32. package/esm/accordion/AccordionItem.js.map +1 -1
  33. package/esm/date/datepicker/DatePicker.d.ts +14 -5
  34. package/esm/date/datepicker/DatePicker.js +29 -33
  35. package/esm/date/datepicker/DatePicker.js.map +1 -1
  36. package/esm/date/datepicker/DatePickerStandalone.d.ts +3 -2
  37. package/esm/date/datepicker/DatePickerStandalone.js +22 -25
  38. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  39. package/esm/date/datepicker/{caption → parts}/Caption.d.ts +3 -0
  40. package/esm/date/datepicker/parts/Caption.js +22 -0
  41. package/esm/date/datepicker/parts/Caption.js.map +1 -0
  42. package/esm/date/datepicker/parts/DayButton.d.ts +4 -0
  43. package/esm/date/datepicker/{DayButton.js → parts/DayButton.js} +2 -1
  44. package/esm/date/datepicker/parts/DayButton.js.map +1 -0
  45. package/esm/date/datepicker/{caption → parts}/DropdownCaption.d.ts +3 -0
  46. package/esm/date/datepicker/parts/DropdownCaption.js +44 -0
  47. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -0
  48. package/esm/date/datepicker/parts/HeadRow.d.ts +11 -0
  49. package/esm/date/datepicker/parts/HeadRow.js +29 -0
  50. package/esm/date/datepicker/parts/HeadRow.js.map +1 -0
  51. package/esm/date/datepicker/parts/Row.d.ts +17 -0
  52. package/esm/date/datepicker/parts/Row.js +19 -0
  53. package/esm/date/datepicker/parts/Row.js.map +1 -0
  54. package/esm/date/datepicker/parts/TableHead.d.ts +6 -0
  55. package/esm/date/datepicker/{TableHead.js → parts/TableHead.js} +5 -2
  56. package/esm/date/datepicker/parts/TableHead.js.map +1 -0
  57. package/esm/date/datepicker/parts/WeekNumber.d.ts +13 -0
  58. package/esm/date/datepicker/parts/WeekNumber.js +31 -0
  59. package/esm/date/datepicker/parts/WeekNumber.js.map +1 -0
  60. package/esm/date/datepicker/parts/WeekRow.d.ts +5 -0
  61. package/esm/date/datepicker/parts/WeekRow.js +30 -0
  62. package/esm/date/datepicker/parts/WeekRow.js.map +1 -0
  63. package/esm/date/utils/get-month-weeks.d.ts +16 -0
  64. package/esm/date/utils/get-month-weeks.js +42 -0
  65. package/esm/date/utils/get-month-weeks.js.map +1 -0
  66. package/esm/date/utils/labels.d.ts +9 -0
  67. package/esm/date/utils/labels.js +36 -0
  68. package/esm/date/utils/labels.js.map +1 -1
  69. package/esm/form/Fieldset/useFieldset.d.ts +1 -1
  70. package/esm/form/checkbox/useCheckbox.d.ts +1 -1
  71. package/esm/form/combobox/Combobox.d.ts +1 -1
  72. package/esm/form/radio/useRadio.d.ts +1 -1
  73. package/esm/index.d.ts +1 -0
  74. package/esm/index.js +1 -0
  75. package/esm/index.js.map +1 -1
  76. package/esm/layout/bleed/Bleed.d.ts +46 -7
  77. package/esm/layout/bleed/Bleed.js +25 -5
  78. package/esm/layout/bleed/Bleed.js.map +1 -1
  79. package/esm/layout/bleed/index.d.ts +1 -1
  80. package/esm/layout/bleed/index.js +1 -1
  81. package/esm/layout/bleed/index.js.map +1 -1
  82. package/esm/layout/box/Box.js +1 -1
  83. package/esm/layout/box/Box.js.map +1 -1
  84. package/esm/layout/responsive/Responsive.d.ts +8 -4
  85. package/esm/layout/responsive/Responsive.js +8 -6
  86. package/esm/layout/responsive/Responsive.js.map +1 -1
  87. package/esm/layout/utilities/css.d.ts +1 -1
  88. package/esm/layout/utilities/css.js +37 -14
  89. package/esm/layout/utilities/css.js.map +1 -1
  90. package/package.json +5 -4
  91. package/src/accordion/Accordion.tsx +1 -0
  92. package/src/accordion/AccordionContext.tsx +2 -1
  93. package/src/accordion/AccordionHeader.tsx +2 -2
  94. package/src/accordion/AccordionItem.tsx +4 -0
  95. package/src/date/datepicker/DatePicker.tsx +63 -58
  96. package/src/date/datepicker/DatePickerStandalone.tsx +36 -37
  97. package/src/date/datepicker/datepicker.stories.tsx +66 -1
  98. package/src/date/datepicker/{caption → parts}/Caption.tsx +19 -17
  99. package/src/date/datepicker/{DayButton.tsx → parts/DayButton.tsx} +3 -1
  100. package/src/date/datepicker/parts/DropdownCaption.tsx +113 -0
  101. package/src/date/datepicker/parts/HeadRow.tsx +56 -0
  102. package/src/date/datepicker/parts/Row.tsx +47 -0
  103. package/src/date/datepicker/{TableHead.tsx → parts/TableHead.tsx} +6 -2
  104. package/src/date/datepicker/parts/WeekNumber.tsx +79 -0
  105. package/src/date/datepicker/parts/WeekRow.tsx +60 -0
  106. package/src/date/utils/__tests__/get-month-weeks.test.ts +113 -0
  107. package/src/date/utils/get-month-weeks.ts +93 -0
  108. package/src/date/utils/labels.ts +51 -0
  109. package/src/index.ts +1 -0
  110. package/src/layout/bleed/Bleed.stories.tsx +381 -0
  111. package/src/layout/bleed/Bleed.tsx +130 -0
  112. package/src/layout/bleed/index.ts +1 -0
  113. package/src/layout/box/Box.tsx +1 -0
  114. package/src/layout/responsive/Responsive.tsx +21 -6
  115. package/src/layout/responsive/hide.stories.tsx +35 -0
  116. package/src/layout/responsive/show.stories.tsx +35 -0
  117. package/src/layout/utilities/css.ts +59 -19
  118. package/cjs/date/datepicker/caption/Caption.js +0 -23
  119. package/cjs/date/datepicker/caption/index.js +0 -10
  120. package/cjs/date/datepicker/caption/package.json +0 -6
  121. package/cjs/layout/content-box/ContentBox.js +0 -56
  122. package/cjs/layout/content-box/index.js +0 -8
  123. package/cjs/layout/content-box/package.json +0 -6
  124. package/cjs/layout/page-demo/AvatarPanel.js +0 -18
  125. package/cjs/layout/page-demo/Filter.js +0 -21
  126. package/cjs/layout/page-demo/Header.js +0 -48
  127. package/cjs/layout/page-demo/Intro.js +0 -36
  128. package/cjs/layout/page-demo/Sidebar.js +0 -49
  129. package/esm/date/datepicker/DayButton.d.ts +0 -3
  130. package/esm/date/datepicker/DayButton.js.map +0 -1
  131. package/esm/date/datepicker/TableHead.d.ts +0 -3
  132. package/esm/date/datepicker/TableHead.js.map +0 -1
  133. package/esm/date/datepicker/caption/Caption.js +0 -17
  134. package/esm/date/datepicker/caption/Caption.js.map +0 -1
  135. package/esm/date/datepicker/caption/DropdownCaption.js +0 -38
  136. package/esm/date/datepicker/caption/DropdownCaption.js.map +0 -1
  137. package/esm/date/datepicker/caption/index.d.ts +0 -2
  138. package/esm/date/datepicker/caption/index.js +0 -3
  139. package/esm/date/datepicker/caption/index.js.map +0 -1
  140. package/esm/layout/content-box/ContentBox.d.ts +0 -8
  141. package/esm/layout/content-box/ContentBox.js +0 -28
  142. package/esm/layout/content-box/ContentBox.js.map +0 -1
  143. package/esm/layout/content-box/index.d.ts +0 -1
  144. package/esm/layout/content-box/index.js +0 -2
  145. package/esm/layout/content-box/index.js.map +0 -1
  146. package/esm/layout/page-demo/AvatarPanel.d.ts +0 -4
  147. package/esm/layout/page-demo/AvatarPanel.js +0 -12
  148. package/esm/layout/page-demo/AvatarPanel.js.map +0 -1
  149. package/esm/layout/page-demo/Filter.d.ts +0 -2
  150. package/esm/layout/page-demo/Filter.js +0 -15
  151. package/esm/layout/page-demo/Filter.js.map +0 -1
  152. package/esm/layout/page-demo/Header.d.ts +0 -2
  153. package/esm/layout/page-demo/Header.js +0 -42
  154. package/esm/layout/page-demo/Header.js.map +0 -1
  155. package/esm/layout/page-demo/Intro.d.ts +0 -2
  156. package/esm/layout/page-demo/Intro.js +0 -30
  157. package/esm/layout/page-demo/Intro.js.map +0 -1
  158. package/esm/layout/page-demo/Sidebar.d.ts +0 -4
  159. package/esm/layout/page-demo/Sidebar.js +0 -41
  160. package/esm/layout/page-demo/Sidebar.js.map +0 -1
  161. package/src/date/datepicker/caption/DropdownCaption.tsx +0 -108
  162. package/src/date/datepicker/caption/index.ts +0 -2
@@ -11,11 +11,13 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import cl from "clsx";
13
13
  import React, { forwardRef } from "react";
14
+ import { Slot } from "../../util/Slot";
14
15
  const Responsive = forwardRef((_a, ref) => {
15
- var { as: Component = "div", className, above, below, variant } = _a, rest = __rest(_a, ["as", "className", "above", "below", "variant"]);
16
+ var { as: Component = "div", className, above, below, variant, asChild } = _a, rest = __rest(_a, ["as", "className", "above", "below", "variant", "asChild"]);
16
17
  const aboveProp = variant === "show" ? above : below;
17
18
  const belowProp = variant === "show" ? below : above;
18
- return (React.createElement(Component, Object.assign({}, rest, { ref: ref, className: cl("navds-responsive", className, {
19
+ const Comp = asChild ? Slot : Component;
20
+ return (React.createElement(Comp, Object.assign({}, rest, { ref: ref, className: cl("navds-responsive", className, {
19
21
  [`navds-responsive__above--${aboveProp}`]: aboveProp,
20
22
  [`navds-responsive__below--${belowProp}`]: belowProp,
21
23
  }) })));
@@ -29,14 +31,14 @@ const Responsive = forwardRef((_a, ref) => {
29
31
  * @example
30
32
  * <HGrid columns={{ xs: 1, md: 2 }} gap="4">
31
33
  * <div/>
32
- * <Hide below="md">
34
+ * <Hide below="md" asChild>
33
35
  * // Only visible above "md"
34
36
  * </Hide>
35
37
  * </HGrid>
36
38
  * @example
37
39
  * <HGrid columns={{ xs: 1, md: 2 }} gap="4">
38
40
  * <div/>
39
- * <Hide above="md">
41
+ * <Hide above="md" asChild>
40
42
  * // Only visible below "md"
41
43
  * </Hide>
42
44
  * </HGrid>
@@ -51,14 +53,14 @@ export const Hide = forwardRef((props, ref) => React.createElement(Responsive, O
51
53
  * @example
52
54
  * <HGrid columns={{ xs: 1, md: 2 }} gap="4">
53
55
  * <div/>
54
- * <Show below="md">
56
+ * <Show below="md" asChild>
55
57
  * // Only visible below "md"
56
58
  * </Show>
57
59
  * </HGrid>
58
60
  * @example
59
61
  * <HGrid columns={{ xs: 1, md: 2 }} gap="4">
60
62
  * <div/>
61
- * <Show above="md">
63
+ * <Show above="md" asChild>
62
64
  * // Only visible above "md"
63
65
  * </Show>
64
66
  * </HGrid>
@@ -1 +1 @@
1
- {"version":3,"file":"Responsive.js","sourceRoot":"","sources":["../../../src/layout/responsive/Responsive.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAsB1D,MAAM,UAAU,GAAG,UAAU,CAI3B,CACE,EAAoE,EACpE,GAAG,EACH,EAAE;QAFF,EAAE,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,OAAW,EAAN,IAAI,cAAlE,gDAAoE,CAAF;IAGlE,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAErD,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE;YAC3C,CAAC,4BAA4B,SAAS,EAAE,CAAC,EAAE,SAAS;YACpD,CAAC,4BAA4B,SAAS,EAAE,CAAC,EAAE,SAAS;SACrD,CAAC,IACF,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,oBAAC,UAAU,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,IAAG,CACnE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,oBAAC,UAAU,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,IAAG,CACnE,CAAC"}
1
+ {"version":3,"file":"Responsive.js","sourceRoot":"","sources":["../../../src/layout/responsive/Responsive.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAyBvC,MAAM,UAAU,GAAG,UAAU,CAI3B,CACE,EAQC,EACD,GAAG,EACH,EAAE;QAVF,EACE,EAAE,EAAE,SAAS,GAAG,KAAK,EACrB,SAAS,EACT,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,OAER,EADI,IAAI,cAPT,2DAQC,CADQ;IAIT,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAErD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAExC,OAAO,CACL,oBAAC,IAAI,oBACC,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE;YAC3C,CAAC,4BAA4B,SAAS,EAAE,CAAC,EAAE,SAAS;YACpD,CAAC,4BAA4B,SAAS,EAAE,CAAC,EAAE,SAAS;SACrD,CAAC,IACF,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,oBAAC,UAAU,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,IAAG,CACnE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,oBAAC,UAAU,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,IAAG,CACnE,CAAC"}
@@ -8,7 +8,7 @@ export type ResponsiveProp<T> = T | FixedResponsiveT<T>;
8
8
  export declare function getResponsiveValue<T = string>(componentName: string, componentProp: string, responsiveProp?: ResponsiveProp<T>): {
9
9
  [k: string]: T;
10
10
  };
11
- export declare function getResponsiveProps<T extends string>(componentName: string, componentProp: string, tokenSubgroup: string, responsiveProp?: ResponsiveProp<T>, tokenExceptions?: string[]): {
11
+ export declare function getResponsiveProps<T extends string>(componentName: string, componentProp: string, tokenSubgroup: string, responsiveProp?: ResponsiveProp<T>, invert?: boolean, tokenExceptions?: string[]): {
12
12
  [x: string]: string;
13
13
  };
14
14
  export {};
@@ -12,26 +12,49 @@ export function getResponsiveValue(componentName, componentProp, responsiveProp)
12
12
  responsiveValue,
13
13
  ]));
14
14
  }
15
- export function getResponsiveProps(componentName, componentProp, tokenSubgroup, responsiveProp, tokenExceptions = []) {
15
+ const translateExceptionToCSS = (exception) => {
16
+ switch (exception) {
17
+ case "px":
18
+ return "1px";
19
+ }
20
+ return exception;
21
+ };
22
+ const translateTokenStringToCSS = (componentProp, tokenString, tokenSubgroup, tokenExceptions, invert) => {
23
+ return tokenString
24
+ .split(" ")
25
+ .map((x, _, arr) => {
26
+ if (componentProp === "margin-inline" && x === "full") {
27
+ const width = 100 / arr.length;
28
+ return `calc((100vw - ${width}%)/-2)`;
29
+ }
30
+ let output = `var(--a-${tokenSubgroup}-${x})`;
31
+ if (tokenExceptions.includes(x)) {
32
+ output = translateExceptionToCSS(x);
33
+ }
34
+ if (invert) {
35
+ if (x === "0") {
36
+ return `0`;
37
+ }
38
+ return `calc(-1 * ${output})`;
39
+ }
40
+ return output;
41
+ })
42
+ .join(" ");
43
+ };
44
+ export function getResponsiveProps(componentName, componentProp, tokenSubgroup, responsiveProp, invert = false, tokenExceptions = []) {
16
45
  if (!responsiveProp) {
17
46
  return {};
18
47
  }
19
48
  if (typeof responsiveProp === "string") {
20
49
  return {
21
- [`--__ac-${componentName}-${componentProp}-xs`]: responsiveProp
22
- .split(" ")
23
- .map((x) => tokenExceptions.includes(x) ? x : `var(--a-${tokenSubgroup}-${x})`)
24
- .join(" "),
50
+ [`--__ac-${componentName}-${componentProp}-xs`]: translateTokenStringToCSS(componentProp, responsiveProp, tokenSubgroup, tokenExceptions, invert),
25
51
  };
26
52
  }
27
- return Object.fromEntries(Object.entries(responsiveProp).map(([breakpointAlias, aliasOrScale]) => {
28
- return [
29
- `--__ac-${componentName}-${componentProp}-${breakpointAlias}`,
30
- aliasOrScale
31
- .split(" ")
32
- .map((x) => tokenExceptions.includes(x) ? x : `var(--a-${tokenSubgroup}-${x})`)
33
- .join(" "),
34
- ];
35
- }));
53
+ const styleProps = {};
54
+ Object.entries(responsiveProp).forEach(([breakpointAlias, aliasOrScale]) => {
55
+ styleProps[`--__ac-${componentName}-${componentProp}-${breakpointAlias}`] =
56
+ translateTokenStringToCSS(componentProp, aliasOrScale, tokenSubgroup, tokenExceptions, invert);
57
+ });
58
+ return styleProps;
36
59
  }
37
60
  //# sourceMappingURL=css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/layout/utilities/css.ts"],"names":[],"mappings":"AAoCA,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,cAAkC;IAElC,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAAE,cAAc;SAChE,CAAC;KACH;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC;QACzE,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;QAC7D,eAAe;KAChB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,aAAqB,EACrB,cAAkC,EAClC,kBAA4B,EAAE;IAE9B,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAAE,cAAc;iBAC5D,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,aAAa,IAAI,CAAC,GAAG,CACnE;iBACA,IAAI,CAAC,GAAG,CAAC;SACb,CAAC;KACH;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE;QACrE,OAAO;YACL,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;YAC7D,YAAY;iBACT,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,aAAa,IAAI,CAAC,GAAG,CACnE;iBACA,IAAI,CAAC,GAAG,CAAC;SACb,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/layout/utilities/css.ts"],"names":[],"mappings":"AAoCA,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,cAAkC;IAElC,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAAE,cAAc;SAChE,CAAC;KACH;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC;QACzE,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;QAC7D,eAAe;KAChB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACpD,QAAQ,SAAS,EAAE;QACjB,KAAK,IAAI;YACP,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAChC,aAAqB,EACrB,WAAmB,EACnB,aAAqB,EACrB,eAAyB,EACzB,MAAe,EACf,EAAE;IACF,OAAO,WAAW;SACf,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;QACjB,IAAI,aAAa,KAAK,eAAe,IAAI,CAAC,KAAK,MAAM,EAAE;YACrD,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YAC/B,OAAO,iBAAiB,KAAK,QAAQ,CAAC;SACvC;QAED,IAAI,MAAM,GAAG,WAAW,aAAa,IAAI,CAAC,GAAG,CAAC;QAC9C,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC/B,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,EAAE;gBACb,OAAO,GAAG,CAAC;aACZ;YACD,OAAO,aAAa,MAAM,GAAG,CAAC;SAC/B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,aAAqB,EACrB,aAAqB,EACrB,cAAkC,EAClC,MAAM,GAAG,KAAK,EACd,kBAA4B,EAAE;IAE9B,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QACtC,OAAO;YACL,CAAC,UAAU,aAAa,IAAI,aAAa,KAAK,CAAC,EAC7C,yBAAyB,CACvB,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,MAAM,CACP;SACJ,CAAC;KACH;IAED,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE;QACzE,UAAU,CAAC,UAAU,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YACvE,yBAAyB,CACvB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,MAAM,CACP,CAAC;IACN,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "5.6.0-beta.0",
3
+ "version": "5.6.0",
4
4
  "description": "Aksel react-components for NAV designsystem",
5
5
  "author": "Aksel | NAV designsystem team",
6
6
  "license": "MIT",
@@ -18,7 +18,8 @@
18
18
  "module": "./esm/index.js",
19
19
  "typings": "./esm/index.d.ts",
20
20
  "publishConfig": {
21
- "access": "public"
21
+ "access": "public",
22
+ "provenance": true
22
23
  },
23
24
  "files": [
24
25
  "/cjs",
@@ -37,8 +38,8 @@
37
38
  },
38
39
  "dependencies": {
39
40
  "@floating-ui/react": "0.25.4",
40
- "@navikt/aksel-icons": "^5.5.0",
41
- "@navikt/ds-tokens": "^5.5.0",
41
+ "@navikt/aksel-icons": "^5.6.0",
42
+ "@navikt/ds-tokens": "^5.6.0",
42
43
  "@radix-ui/react-tabs": "1.0.0",
43
44
  "@radix-ui/react-toggle-group": "1.0.0",
44
45
  "clsx": "^1.2.1",
@@ -91,6 +91,7 @@ export const Accordion = forwardRef<HTMLDivElement, AccordionProps>(
91
91
  variant,
92
92
  headingSize,
93
93
  size,
94
+ mounted: true,
94
95
  }}
95
96
  >
96
97
  <div
@@ -5,11 +5,12 @@ export type AccordionContextProps = {
5
5
  headingSize?: "large" | "medium" | "small" | "xsmall";
6
6
  size?: "large" | "medium" | "small";
7
7
  openItems?: number[];
8
+ mounted: boolean;
8
9
  };
9
10
 
10
11
  export const AccordionContext = createContext<AccordionContextProps | null>({
11
- variant: "default",
12
12
  headingSize: "small",
13
13
  size: "medium",
14
14
  openItems: [],
15
+ mounted: false,
15
16
  });
@@ -18,7 +18,7 @@ const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProps>(
18
18
  const itemContext = useContext(AccordionItemContext);
19
19
  const accordionContext = useContext(AccordionContext);
20
20
 
21
- if (accordionContext === null || itemContext === null) {
21
+ if (itemContext === null) {
22
22
  console.error(
23
23
  "<Accordion.Header> has to be used within an <Accordion.Item>, which in turn must be within an <Accordion>"
24
24
  );
@@ -45,7 +45,7 @@ const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProps>(
45
45
  />
46
46
  </div>
47
47
  <Heading
48
- size={accordionContext.headingSize ?? "small"}
48
+ size={accordionContext?.headingSize ?? "small"}
49
49
  as="span"
50
50
  className="navds-accordion__header-content"
51
51
  >
@@ -54,6 +54,10 @@ const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
54
54
  shouldAnimate.current = true;
55
55
  };
56
56
 
57
+ if (!context?.mounted) {
58
+ console.error("<Accordion.Item> has to be used within an <Accordion>");
59
+ }
60
+
57
61
  return (
58
62
  <div
59
63
  className={cl("navds-accordion__item", className, {
@@ -5,46 +5,56 @@ import {
5
5
  DateRange,
6
6
  DayPicker,
7
7
  DayPickerBase,
8
- isMatch,
9
8
  Matcher,
10
- SelectMultipleEventHandler,
11
- SelectRangeEventHandler,
12
- SelectSingleEventHandler,
9
+ isMatch,
13
10
  } from "react-day-picker";
14
- import { omit, Popover, useId } from "../..";
11
+ import { Popover, omit, useId } from "../..";
15
12
  import { DateInputProps, DatePickerInput } from "../DateInput";
16
13
  import { DateContext } from "../context";
17
14
  import { getLocaleFromString, labels } from "../utils";
18
- import { Caption, DropdownCaption } from "./caption";
19
15
  import DatePickerStandalone, {
20
16
  DatePickerStandaloneType,
21
17
  } from "./DatePickerStandalone";
22
- import { DayButton } from "./DayButton";
23
- import { TableHead } from "./TableHead";
18
+ import Caption from "./parts/Caption";
19
+ import DayButton from "./parts/DayButton";
20
+ import DropdownCaption from "./parts/DropdownCaption";
21
+ import { HeadRow } from "./parts/HeadRow";
22
+ import Row from "./parts/Row";
23
+ import TableHead from "./parts/TableHead";
24
+ import WeekNumber from "./parts/WeekNumber";
24
25
 
25
- export type ConditionalModeProps =
26
- | {
27
- mode?: "single";
28
- onSelect?: (val?: Date) => void;
29
- selected?: Date;
30
- defaultSelected?: Date;
31
- }
32
- | {
33
- mode?: "multiple";
34
- onSelect?: (val?: Date[]) => void;
35
- selected?: Date[];
36
- defaultSelected?: Date[];
37
- min?: number;
38
- max?: number;
39
- }
40
- | {
41
- mode?: "range";
42
- onSelect?: (val?: DateRange) => void;
43
- selected?: DateRange;
44
- defaultSelected?: DateRange;
45
- min?: number;
46
- max?: number;
47
- };
26
+ export type SingleMode = {
27
+ mode?: "single";
28
+ onSelect?: (val?: Date) => void;
29
+ selected?: Date;
30
+ defaultSelected?: Date;
31
+ onWeekNumberClick?: never;
32
+ };
33
+
34
+ export type MultipleMode = {
35
+ mode: "multiple";
36
+ onSelect?: (val?: Date[]) => void;
37
+ selected?: Date[];
38
+ defaultSelected?: Date[];
39
+ min?: number;
40
+ max?: number;
41
+ /**
42
+ * Allows selecting a week at a time. Only used with mode="multiple".
43
+ */
44
+ onWeekNumberClick?: DayPickerBase["onWeekNumberClick"];
45
+ };
46
+
47
+ export type RangeMode = {
48
+ mode: "range";
49
+ onSelect?: (val?: DateRange) => void;
50
+ selected?: DateRange;
51
+ defaultSelected?: DateRange;
52
+ min?: number;
53
+ max?: number;
54
+ onWeekNumberClick?: never;
55
+ };
56
+
57
+ type ConditionalModeProps = SingleMode | MultipleMode | RangeMode;
48
58
 
49
59
  //github.com/gpbl/react-day-picker/blob/50b6dba/packages/react-day-picker/src/types/DayPickerBase.ts#L139
50
60
  export interface DatePickerDefaultProps
@@ -186,6 +196,7 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
186
196
  onOpenToggle,
187
197
  strategy,
188
198
  bubbleEscape = false,
199
+ onWeekNumberClick,
189
200
  ...rest
190
201
  },
191
202
  ref
@@ -199,33 +210,20 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
199
210
  Date | Date[] | DateRange | undefined
200
211
  >(defaultSelected);
201
212
 
202
- const handleSingleSelect: SelectSingleEventHandler = (selectedDay) => {
203
- setSelectedDates(selectedDay);
204
- selectedDay && (onClose?.() ?? setOpen(false));
205
- rest?.onSelect && (rest?.onSelect as (val?: Date) => void)(selectedDay);
206
- };
213
+ const mode = rest.mode ?? ("single" as any);
207
214
 
208
- const handleMultipleSelect: SelectMultipleEventHandler = (selectedDays) => {
209
- setSelectedDates(selectedDays);
210
- rest?.onSelect &&
211
- (rest?.onSelect as (val?: Date[]) => void)(selectedDays);
212
- };
215
+ /**
216
+ * @param selected Date | Date[] | DateRange | undefined
217
+ */
218
+ const handleSelect = (selected) => {
219
+ setSelectedDates(selected);
213
220
 
214
- const handleRangeSelect: SelectRangeEventHandler = (selectedDays) => {
215
- setSelectedDates(selectedDays);
216
- selectedDays?.from && selectedDays?.to && (onClose?.() ?? setOpen(false));
217
- rest?.onSelect &&
218
- (rest?.onSelect as (val?: DateRange) => void)(selectedDays);
219
- };
220
-
221
- const overrideProps = {
222
- mode: rest.mode ?? ("single" as any),
223
- onSelect:
224
- rest?.mode === "single"
225
- ? handleSingleSelect
226
- : rest?.mode === "multiple"
227
- ? handleMultipleSelect
228
- : handleRangeSelect,
221
+ if (rest.mode === "single") {
222
+ selected && (onClose?.() ?? setOpen(false));
223
+ } else if (rest.mode === "range") {
224
+ selected?.from && selected?.to && (onClose?.() ?? setOpen(false));
225
+ }
226
+ rest?.onSelect?.(selected);
229
227
  };
230
228
 
231
229
  return (
@@ -262,12 +260,16 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
262
260
  >
263
261
  <DayPicker
264
262
  locale={getLocaleFromString(locale)}
265
- {...overrideProps}
263
+ mode={mode}
264
+ onSelect={handleSelect}
266
265
  selected={selected ?? selectedDates}
267
266
  components={{
268
267
  Caption: dropdownCaption ? DropdownCaption : Caption,
269
- Day: DayButton,
270
268
  Head: TableHead,
269
+ HeadRow,
270
+ WeekNumber,
271
+ Row,
272
+ Day: DayButton,
271
273
  }}
272
274
  className={cl("navds-date", className)}
273
275
  classNames={{
@@ -289,6 +291,9 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
289
291
  weekend: "rdp-day__weekend",
290
292
  }}
291
293
  showWeekNumber={showWeekNumber}
294
+ onWeekNumberClick={
295
+ mode === "multiple" ? onWeekNumberClick : undefined
296
+ }
292
297
  fixedWeeks
293
298
  showOutsideDays
294
299
  {...omit(rest, ["onSelect"])}
@@ -1,19 +1,22 @@
1
1
  import cl from "clsx";
2
2
  import isWeekend from "date-fns/isWeekend";
3
3
  import React, { forwardRef } from "react";
4
- import {
5
- DateRange,
6
- DayPicker,
7
- isMatch,
8
- SelectMultipleEventHandler,
9
- SelectRangeEventHandler,
10
- SelectSingleEventHandler,
11
- } from "react-day-picker";
4
+ import { DateRange, DayPicker, isMatch } from "react-day-picker";
12
5
  import { omit } from "../..";
13
6
  import { getLocaleFromString, labels } from "../utils";
14
- import { Caption, DropdownCaption } from "./caption";
15
- import { ConditionalModeProps, DatePickerDefaultProps } from "./DatePicker";
16
- import { TableHead } from "./TableHead";
7
+ import {
8
+ DatePickerDefaultProps,
9
+ MultipleMode,
10
+ RangeMode,
11
+ SingleMode,
12
+ } from "./DatePicker";
13
+ import TableHead from "./parts/TableHead";
14
+ import WeekNumber from "./parts/WeekNumber";
15
+ import Caption from "./parts/Caption";
16
+ import DropdownCaption from "./parts/DropdownCaption";
17
+ import Row from "./parts/Row";
18
+ import { HeadRow } from "./parts/HeadRow";
19
+ import DayButton from "./parts/DayButton";
17
20
 
18
21
  interface DatePickerStandaloneDefaultProps
19
22
  extends Omit<
@@ -31,8 +34,10 @@ interface DatePickerStandaloneDefaultProps
31
34
  fixedWeeks?: boolean;
32
35
  }
33
36
 
37
+ type StandaloneConditionalModeProps = SingleMode | MultipleMode | RangeMode;
38
+
34
39
  export type DatePickerStandaloneProps = DatePickerStandaloneDefaultProps &
35
- ConditionalModeProps;
40
+ StandaloneConditionalModeProps;
36
41
 
37
42
  export type DatePickerStandaloneType = React.ForwardRefExoticComponent<
38
43
  DatePickerStandaloneProps & React.RefAttributes<HTMLDivElement>
@@ -53,7 +58,8 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
53
58
  selected,
54
59
  defaultSelected,
55
60
  onSelect,
56
- fixedWeeks = true,
61
+ fixedWeeks = false,
62
+ onWeekNumberClick,
57
63
  ...rest
58
64
  },
59
65
  ref
@@ -62,29 +68,14 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
62
68
  Date | Date[] | DateRange | undefined
63
69
  >(defaultSelected);
64
70
 
65
- const handleSingleSelect: SelectSingleEventHandler = (selectedDay) => {
66
- setSelectedDates(selectedDay);
67
- onSelect && (onSelect as (val?: Date) => void)(selectedDay);
68
- };
69
-
70
- const handleMultipleSelect: SelectMultipleEventHandler = (selectedDays) => {
71
- setSelectedDates(selectedDays);
72
- onSelect && (onSelect as (val?: Date[]) => void)(selectedDays);
73
- };
74
-
75
- const handleRangeSelect: SelectRangeEventHandler = (selectedDays) => {
76
- setSelectedDates(selectedDays);
77
- onSelect && (onSelect as (val?: DateRange) => void)(selectedDays);
78
- };
71
+ const mode = rest.mode ?? ("single" as any);
79
72
 
80
- const overrideProps = {
81
- mode: rest.mode ?? ("single" as any),
82
- onSelect:
83
- rest?.mode === "single"
84
- ? handleSingleSelect
85
- : rest?.mode === "multiple"
86
- ? handleMultipleSelect
87
- : handleRangeSelect,
73
+ /**
74
+ * @param selected Date | Date[] | DateRange | undefined
75
+ */
76
+ const handleSelect = (selected) => {
77
+ setSelectedDates(selected);
78
+ onSelect?.(selected);
88
79
  };
89
80
 
90
81
  return (
@@ -94,11 +85,16 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
94
85
  >
95
86
  <DayPicker
96
87
  locale={getLocaleFromString(locale)}
97
- {...overrideProps}
88
+ mode={mode}
89
+ onSelect={handleSelect}
98
90
  selected={selected ?? selectedDates}
99
91
  components={{
100
92
  Caption: dropdownCaption ? DropdownCaption : Caption,
101
93
  Head: TableHead,
94
+ HeadRow,
95
+ WeekNumber,
96
+ Row,
97
+ Day: DayButton,
102
98
  }}
103
99
  className="navds-date"
104
100
  classNames={{ vhidden: "navds-sr-only" }}
@@ -117,9 +113,12 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
117
113
  weekend: "rdp-day__weekend",
118
114
  }}
119
115
  showWeekNumber={showWeekNumber}
116
+ onWeekNumberClick={
117
+ mode === "multiple" ? onWeekNumberClick : undefined
118
+ }
120
119
  fixedWeeks={fixedWeeks}
121
120
  showOutsideDays
122
- {...omit(rest, ["onSelect", "children", "id"])}
121
+ {...omit(rest, ["children", "id"])}
123
122
  />
124
123
  </div>
125
124
  );
@@ -2,8 +2,9 @@
2
2
  import { Meta, StoryObj } from "@storybook/react";
3
3
  import React, { useId, useState } from "react";
4
4
  import { useDatepicker, useRangeDatepicker } from "..";
5
- import { Button } from "../..";
5
+ import { Button, HGrid, VStack } from "../..";
6
6
  import DatePicker, { DatePickerProps } from "./DatePicker";
7
+ import isSameDay from "date-fns/isSameDay";
7
8
 
8
9
  const disabledDays = [
9
10
  new Date("Oct 10 2022"),
@@ -367,3 +368,67 @@ export const Readonly = () => {
367
368
  </div>
368
369
  );
369
370
  };
371
+
372
+ export const StandaloneOptions = () => {
373
+ return (
374
+ <HGrid columns={{ xs: 1, md: 2 }} gap="8">
375
+ <DatePicker.Standalone today={new Date("Nov 23 2022")} />
376
+ <DatePicker.Standalone
377
+ dropdownCaption
378
+ fromDate={new Date("Aug 23 2019")}
379
+ toDate={new Date("Feb 23 2024")}
380
+ today={new Date("Nov 23 2022")}
381
+ />
382
+ <DatePicker.Standalone showWeekNumber today={new Date("Nov 23 2022")} />
383
+ <DatePicker.Standalone
384
+ showWeekNumber
385
+ mode="multiple"
386
+ onWeekNumberClick={console.log}
387
+ today={new Date("Nov 23 2022")}
388
+ disableWeekends
389
+ />
390
+ <DatePicker.Standalone
391
+ mode="range"
392
+ today={new Date("Nov 23 2022")}
393
+ disableWeekends
394
+ />
395
+ </HGrid>
396
+ );
397
+ };
398
+
399
+ export const WeekDayClick = () => {
400
+ const [days, setDays] = useState<Date[]>([]);
401
+
402
+ const handleWeekClick = (dates: Date[]) => {
403
+ const hasDayInWeek = !!days.find((x) => dates.find((y) => isSameDay(x, y)));
404
+
405
+ const cleanup = days.filter((y) => !dates.find((z) => isSameDay(y, z)));
406
+ if (hasDayInWeek) {
407
+ setDays(cleanup);
408
+ } else {
409
+ setDays([...dates, ...cleanup]);
410
+ }
411
+ };
412
+
413
+ return (
414
+ <VStack gap="8">
415
+ <DatePicker.Standalone
416
+ showWeekNumber
417
+ mode="multiple"
418
+ onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
419
+ onSelect={(dates) => dates && setDays(dates)}
420
+ selected={days}
421
+ today={new Date("Nov 23 2022")}
422
+ />
423
+ <DatePicker.Standalone
424
+ showWeekNumber
425
+ mode="multiple"
426
+ onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
427
+ onSelect={(dates) => dates && setDays(dates)}
428
+ selected={days}
429
+ today={new Date("Nov 23 2022")}
430
+ disableWeekends
431
+ />
432
+ </VStack>
433
+ );
434
+ };