@navikt/ds-react 7.13.0 → 7.14.0-alpha.1

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 (291) hide show
  1. package/cjs/date/Date.Dialog.d.ts +18 -0
  2. package/cjs/date/Date.Dialog.js +67 -0
  3. package/cjs/date/Date.Dialog.js.map +1 -0
  4. package/cjs/date/Date.Input.d.ts +50 -0
  5. package/cjs/date/Date.Input.js +96 -0
  6. package/cjs/date/Date.Input.js.map +1 -0
  7. package/cjs/date/Date.locale.d.ts +44 -0
  8. package/cjs/date/Date.locale.js +57 -0
  9. package/cjs/date/Date.locale.js.map +1 -0
  10. package/cjs/date/Date.typeutils.d.ts +14 -0
  11. package/cjs/date/Date.typeutils.js +15 -0
  12. package/cjs/date/Date.typeutils.js.map +1 -0
  13. package/cjs/date/date-utils/calendar-range.d.ts +11 -0
  14. package/cjs/date/date-utils/calendar-range.js +30 -0
  15. package/cjs/date/date-utils/calendar-range.js.map +1 -0
  16. package/cjs/date/date-utils/check-dates.d.ts +8 -0
  17. package/cjs/date/date-utils/check-dates.js +20 -0
  18. package/cjs/date/date-utils/check-dates.js.map +1 -0
  19. package/cjs/date/date-utils/clamp-dates.d.ts +19 -0
  20. package/cjs/date/date-utils/clamp-dates.js +41 -0
  21. package/cjs/date/date-utils/clamp-dates.js.map +1 -0
  22. package/cjs/date/date-utils/dates-disabled.d.ts +1 -0
  23. package/cjs/date/date-utils/dates-disabled.js +29 -0
  24. package/cjs/date/date-utils/dates-disabled.js.map +1 -0
  25. package/cjs/date/date-utils/dropdown-options.d.ts +13 -0
  26. package/cjs/date/date-utils/dropdown-options.js +45 -0
  27. package/cjs/date/date-utils/dropdown-options.js.map +1 -0
  28. package/cjs/date/date-utils/format-date.d.ts +2 -0
  29. package/cjs/date/date-utils/format-date.js +13 -0
  30. package/cjs/date/date-utils/format-date.js.map +1 -0
  31. package/cjs/date/date-utils/index.d.ts +8 -0
  32. package/cjs/date/date-utils/index.js +27 -0
  33. package/cjs/date/date-utils/index.js.map +1 -0
  34. package/cjs/date/date-utils/is-match.d.ts +3 -0
  35. package/cjs/date/date-utils/is-match.js +61 -0
  36. package/cjs/date/date-utils/is-match.js.map +1 -0
  37. package/cjs/date/date-utils/parse-date.d.ts +4 -0
  38. package/cjs/date/date-utils/parse-date.js +87 -0
  39. package/cjs/date/date-utils/parse-date.js.map +1 -0
  40. package/cjs/date/datepicker/DatePicker.d.ts +3 -3
  41. package/cjs/date/datepicker/DatePicker.js +47 -63
  42. package/cjs/date/datepicker/DatePicker.js.map +1 -1
  43. package/cjs/date/datepicker/DatePicker.types.d.ts +108 -0
  44. package/cjs/date/datepicker/DatePicker.types.js +3 -0
  45. package/cjs/date/datepicker/DatePicker.types.js.map +1 -0
  46. package/cjs/date/datepicker/hooks/useDatepicker.d.ts +90 -0
  47. package/cjs/date/datepicker/hooks/useDatepicker.js +164 -0
  48. package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -0
  49. package/cjs/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
  50. package/cjs/date/datepicker/hooks/useRangeDatepicker.js +322 -0
  51. package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  52. package/cjs/date/datepicker/index.d.ts +4 -3
  53. package/cjs/date/datepicker/index.js +8 -7
  54. package/cjs/date/datepicker/index.js.map +1 -1
  55. package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  56. package/cjs/date/datepicker/parts/DatePicker.DayButton.js +70 -0
  57. package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  58. package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  59. package/cjs/date/datepicker/parts/DatePicker.Months.js +84 -0
  60. package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  61. package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  62. package/cjs/date/datepicker/parts/DatePicker.RDP.js +103 -0
  63. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  64. package/cjs/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
  65. package/cjs/date/datepicker/parts/DatePicker.Standalone.js +60 -0
  66. package/cjs/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  67. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  68. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js +64 -0
  69. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  70. package/cjs/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  71. package/cjs/date/datepicker/parts/DatePicker.WeekRow.js +28 -0
  72. package/cjs/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  73. package/cjs/date/monthpicker/MonthPicker.context.d.ts +21 -0
  74. package/cjs/date/monthpicker/MonthPicker.context.js +48 -0
  75. package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -0
  76. package/cjs/date/monthpicker/MonthPicker.d.ts +3 -3
  77. package/cjs/date/monthpicker/MonthPicker.js +34 -43
  78. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  79. package/cjs/date/monthpicker/MonthPicker.types.d.ts +86 -0
  80. package/cjs/date/monthpicker/MonthPicker.types.js +3 -0
  81. package/cjs/date/monthpicker/MonthPicker.types.js.map +1 -0
  82. package/cjs/date/monthpicker/MonthPicker.util.d.ts +2 -0
  83. package/cjs/date/monthpicker/MonthPicker.util.js +156 -0
  84. package/cjs/date/monthpicker/MonthPicker.util.js.map +1 -0
  85. package/cjs/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
  86. package/cjs/date/monthpicker/hooks/useMonthPicker.js +179 -0
  87. package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  88. package/cjs/date/monthpicker/index.d.ts +4 -4
  89. package/cjs/date/monthpicker/index.js +6 -6
  90. package/cjs/date/monthpicker/index.js.map +1 -1
  91. package/cjs/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
  92. package/cjs/date/monthpicker/parts/MonthPicker.Button.js +82 -0
  93. package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  94. package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  95. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js +52 -0
  96. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  97. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
  98. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js +51 -0
  99. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  100. package/cjs/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  101. package/cjs/date/monthpicker/parts/MonthPicker.Table.js +79 -0
  102. package/cjs/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  103. package/cjs/form/combobox/Combobox.d.ts +1 -1
  104. package/cjs/form/combobox/Input/InputController.d.ts +1 -1
  105. package/cjs/modal/Modal.js +2 -2
  106. package/cjs/modal/Modal.js.map +1 -1
  107. package/cjs/popover/Popover.js +3 -3
  108. package/cjs/popover/Popover.js.map +1 -1
  109. package/cjs/tooltip/Tooltip.js +2 -5
  110. package/cjs/tooltip/Tooltip.js.map +1 -1
  111. package/esm/date/Date.Dialog.d.ts +18 -0
  112. package/esm/date/Date.Dialog.js +38 -0
  113. package/esm/date/Date.Dialog.js.map +1 -0
  114. package/esm/date/Date.Input.d.ts +50 -0
  115. package/esm/date/Date.Input.js +66 -0
  116. package/esm/date/Date.Input.js.map +1 -0
  117. package/esm/date/Date.locale.d.ts +44 -0
  118. package/esm/date/Date.locale.js +47 -0
  119. package/esm/date/Date.locale.js.map +1 -0
  120. package/esm/date/Date.typeutils.d.ts +14 -0
  121. package/esm/date/Date.typeutils.js +10 -0
  122. package/esm/date/Date.typeutils.js.map +1 -0
  123. package/esm/date/date-utils/calendar-range.d.ts +11 -0
  124. package/esm/date/date-utils/calendar-range.js +27 -0
  125. package/esm/date/date-utils/calendar-range.js.map +1 -0
  126. package/esm/date/date-utils/check-dates.d.ts +8 -0
  127. package/esm/date/date-utils/check-dates.js +14 -0
  128. package/esm/date/date-utils/check-dates.js.map +1 -0
  129. package/esm/date/date-utils/clamp-dates.d.ts +19 -0
  130. package/esm/date/date-utils/clamp-dates.js +37 -0
  131. package/esm/date/date-utils/clamp-dates.js.map +1 -0
  132. package/esm/date/date-utils/dates-disabled.d.ts +1 -0
  133. package/esm/date/date-utils/dates-disabled.js +25 -0
  134. package/esm/date/date-utils/dates-disabled.js.map +1 -0
  135. package/esm/date/date-utils/dropdown-options.d.ts +13 -0
  136. package/esm/date/date-utils/dropdown-options.js +41 -0
  137. package/esm/date/date-utils/dropdown-options.js.map +1 -0
  138. package/esm/date/date-utils/format-date.d.ts +2 -0
  139. package/esm/date/date-utils/format-date.js +9 -0
  140. package/esm/date/date-utils/format-date.js.map +1 -0
  141. package/esm/date/date-utils/index.d.ts +8 -0
  142. package/esm/date/date-utils/index.js +9 -0
  143. package/esm/date/date-utils/index.js.map +1 -0
  144. package/esm/date/date-utils/is-match.d.ts +3 -0
  145. package/esm/date/date-utils/is-match.js +57 -0
  146. package/esm/date/date-utils/is-match.js.map +1 -0
  147. package/esm/date/date-utils/parse-date.d.ts +4 -0
  148. package/esm/date/date-utils/parse-date.js +83 -0
  149. package/esm/date/date-utils/parse-date.js.map +1 -0
  150. package/esm/date/datepicker/DatePicker.d.ts +3 -3
  151. package/esm/date/datepicker/DatePicker.js +46 -62
  152. package/esm/date/datepicker/DatePicker.js.map +1 -1
  153. package/esm/date/datepicker/DatePicker.types.d.ts +108 -0
  154. package/esm/date/datepicker/DatePicker.types.js +2 -0
  155. package/esm/date/datepicker/DatePicker.types.js.map +1 -0
  156. package/esm/date/datepicker/hooks/useDatepicker.d.ts +90 -0
  157. package/esm/date/datepicker/hooks/useDatepicker.js +160 -0
  158. package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -0
  159. package/esm/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
  160. package/esm/date/datepicker/hooks/useRangeDatepicker.js +318 -0
  161. package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  162. package/esm/date/datepicker/index.d.ts +4 -3
  163. package/esm/date/datepicker/index.js +4 -3
  164. package/esm/date/datepicker/index.js.map +1 -1
  165. package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  166. package/esm/date/datepicker/parts/DatePicker.DayButton.js +41 -0
  167. package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  168. package/esm/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  169. package/esm/date/datepicker/parts/DatePicker.Months.js +58 -0
  170. package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  171. package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  172. package/esm/date/datepicker/parts/DatePicker.RDP.js +74 -0
  173. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  174. package/esm/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
  175. package/esm/date/datepicker/parts/DatePicker.Standalone.js +31 -0
  176. package/esm/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  177. package/esm/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  178. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js +35 -0
  179. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  180. package/esm/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  181. package/esm/date/datepicker/parts/DatePicker.WeekRow.js +22 -0
  182. package/esm/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  183. package/esm/date/monthpicker/MonthPicker.context.d.ts +21 -0
  184. package/esm/date/monthpicker/MonthPicker.context.js +41 -0
  185. package/esm/date/monthpicker/MonthPicker.context.js.map +1 -0
  186. package/esm/date/monthpicker/MonthPicker.d.ts +3 -3
  187. package/esm/date/monthpicker/MonthPicker.js +31 -40
  188. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  189. package/esm/date/monthpicker/MonthPicker.types.d.ts +86 -0
  190. package/esm/date/monthpicker/MonthPicker.types.js +2 -0
  191. package/esm/date/monthpicker/MonthPicker.types.js.map +1 -0
  192. package/esm/date/monthpicker/MonthPicker.util.d.ts +2 -0
  193. package/esm/date/monthpicker/MonthPicker.util.js +152 -0
  194. package/esm/date/monthpicker/MonthPicker.util.js.map +1 -0
  195. package/esm/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
  196. package/esm/date/monthpicker/hooks/useMonthPicker.js +175 -0
  197. package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  198. package/esm/date/monthpicker/index.d.ts +4 -4
  199. package/esm/date/monthpicker/index.js +3 -3
  200. package/esm/date/monthpicker/index.js.map +1 -1
  201. package/esm/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
  202. package/esm/date/monthpicker/parts/MonthPicker.Button.js +52 -0
  203. package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  204. package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  205. package/esm/date/monthpicker/parts/MonthPicker.Caption.js +46 -0
  206. package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  207. package/esm/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
  208. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js +22 -0
  209. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  210. package/esm/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  211. package/esm/date/monthpicker/parts/MonthPicker.Table.js +50 -0
  212. package/esm/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  213. package/esm/form/combobox/Combobox.d.ts +1 -1
  214. package/esm/form/combobox/Input/InputController.d.ts +1 -1
  215. package/esm/modal/Modal.js +3 -3
  216. package/esm/modal/Modal.js.map +1 -1
  217. package/esm/popover/Popover.js +4 -4
  218. package/esm/popover/Popover.js.map +1 -1
  219. package/esm/tooltip/Tooltip.js +2 -5
  220. package/esm/tooltip/Tooltip.js.map +1 -1
  221. package/package.json +6 -7
  222. package/src/date/{parts/DateWrapper.tsx → Date.Dialog.tsx} +12 -9
  223. package/src/date/{parts/DateInput.tsx → Date.Input.tsx} +30 -5
  224. package/src/date/{utils/locale.ts → Date.locale.ts} +11 -2
  225. package/src/date/Date.typeutils.ts +32 -0
  226. package/src/date/date-utils/calendar-range.test.ts +54 -0
  227. package/src/date/date-utils/calendar-range.ts +46 -0
  228. package/src/date/date-utils/check-dates.test.ts +49 -0
  229. package/src/date/date-utils/check-dates.ts +28 -0
  230. package/src/date/date-utils/clamp-dates.test.ts +156 -0
  231. package/src/date/date-utils/clamp-dates.ts +63 -0
  232. package/src/date/{utils/__tests__ → date-utils}/dates-disabled.test.ts +1 -1
  233. package/src/date/{utils → date-utils}/dates-disabled.ts +1 -2
  234. package/src/date/date-utils/dropdown-options.test.ts +143 -0
  235. package/src/date/date-utils/dropdown-options.ts +79 -0
  236. package/src/date/{utils/__tests__ → date-utils}/format-dates.test.ts +2 -2
  237. package/src/date/date-utils/index.ts +16 -0
  238. package/src/date/{utils/__tests__ → date-utils}/is-match.test.ts +1 -1
  239. package/src/date/{utils → date-utils}/is-match.ts +2 -11
  240. package/src/date/{utils/__tests__ → date-utils}/parse-dates.test.ts +2 -1
  241. package/src/date/datepicker/DatePicker.tsx +67 -92
  242. package/src/date/datepicker/{types.ts → DatePicker.types.ts} +10 -4
  243. package/src/date/{hooks → datepicker/hooks}/useDatepicker.tsx +12 -13
  244. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.test.tsx +1 -1
  245. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.tsx +19 -19
  246. package/src/date/datepicker/index.ts +4 -5
  247. package/src/date/datepicker/parts/DatePicker.DayButton.tsx +56 -0
  248. package/src/date/datepicker/parts/DatePicker.Months.tsx +149 -0
  249. package/src/date/datepicker/parts/DatePicker.RDP.tsx +170 -0
  250. package/src/date/datepicker/parts/DatePicker.Standalone.tsx +93 -0
  251. package/src/date/datepicker/parts/DatePicker.WeekNumber.tsx +86 -0
  252. package/src/date/datepicker/parts/{WeekRow.tsx → DatePicker.WeekRow.tsx} +20 -21
  253. package/src/date/monthpicker/MonthPicker.context.tsx +103 -0
  254. package/src/date/monthpicker/MonthPicker.tsx +63 -68
  255. package/src/date/monthpicker/{types.ts → MonthPicker.types.ts} +1 -1
  256. package/src/date/{utils/navigation.ts → monthpicker/MonthPicker.util.ts} +2 -1
  257. package/src/date/{hooks → monthpicker/hooks}/useMonthPicker.tsx +14 -13
  258. package/src/date/monthpicker/index.ts +4 -4
  259. package/src/date/monthpicker/{MonthButton.tsx → parts/MonthPicker.Button.tsx} +21 -10
  260. package/src/date/monthpicker/{MonthCaption.tsx → parts/MonthPicker.Caption.tsx} +20 -21
  261. package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +86 -0
  262. package/src/date/monthpicker/{MonthSelector.tsx → parts/MonthPicker.Table.tsx} +7 -7
  263. package/src/modal/Modal.tsx +3 -3
  264. package/src/popover/Popover.tsx +4 -4
  265. package/src/tooltip/Tooltip.tsx +2 -6
  266. package/src/date/context/index.ts +0 -9
  267. package/src/date/context/useDateInputContext.tsx +0 -34
  268. package/src/date/context/useDateTranslationContext.ts +0 -9
  269. package/src/date/context/useSharedMonthContext.tsx +0 -68
  270. package/src/date/datepicker/DatePickerStandalone.tsx +0 -136
  271. package/src/date/datepicker/datepicker.test.tsx +0 -28
  272. package/src/date/datepicker/parts/Caption.tsx +0 -54
  273. package/src/date/datepicker/parts/DayButton.tsx +0 -32
  274. package/src/date/datepicker/parts/DropdownCaption.tsx +0 -110
  275. package/src/date/datepicker/parts/HeadRow.tsx +0 -56
  276. package/src/date/datepicker/parts/Row.tsx +0 -48
  277. package/src/date/datepicker/parts/TableHead.tsx +0 -17
  278. package/src/date/datepicker/parts/WeekNumber.tsx +0 -75
  279. package/src/date/hooks/index.ts +0 -6
  280. package/src/date/monthpicker/MonthPickerStandalone.tsx +0 -102
  281. package/src/date/utils/__tests__/check-dates.test.ts +0 -22
  282. package/src/date/utils/__tests__/get-dates.test.ts +0 -121
  283. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -83
  284. package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -116
  285. package/src/date/utils/check-dates.ts +0 -13
  286. package/src/date/utils/get-dates.ts +0 -60
  287. package/src/date/utils/get-initial-year.ts +0 -25
  288. package/src/date/utils/get-month-weeks.ts +0 -93
  289. package/src/date/utils/index.ts +0 -18
  290. /package/src/date/{utils → date-utils}/format-date.ts +0 -0
  291. /package/src/date/{utils → date-utils}/parse-date.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import { ComponentTranslation } from "../../util/i18n/i18n.types";
2
- import { Matcher } from "../utils";
2
+ import { Matcher } from "../Date.typeutils";
3
3
 
4
4
  export interface MonthPickerProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  /**
@@ -1,5 +1,6 @@
1
1
  import { setYear } from "date-fns";
2
- import { Matcher, isMatch } from "./is-match";
2
+ import { Matcher } from "../Date.typeutils";
3
+ import { isMatch } from "../date-utils";
3
4
 
4
5
  export const nextEnabled = (
5
6
  months: Date[],
@@ -1,14 +1,10 @@
1
1
  import React, { useCallback, useMemo, useState } from "react";
2
- import { useDateLocale } from "../../util/i18n/i18n.hooks";
3
- import { MonthPickerProps } from "../monthpicker/types";
4
- import { DateInputProps } from "../parts/DateInput";
5
- import {
6
- formatDateForInput,
7
- getLocaleFromString,
8
- isMatch,
9
- isValidDate,
10
- parseDate,
11
- } from "../utils";
2
+ import { dateMatchModifiers } from "react-day-picker";
3
+ import { useDateLocale } from "../../../util/i18n/i18n.hooks";
4
+ import { DateInputProps } from "../../Date.Input";
5
+ import { getLocaleFromString } from "../../Date.locale";
6
+ import { formatDateForInput, isValidDate, parseDate } from "../../date-utils";
7
+ import { MonthPickerProps } from "../MonthPicker.types";
12
8
 
13
9
  export interface UseMonthPickerOptions
14
10
  extends Pick<
@@ -267,11 +263,14 @@ export const useMonthpicker = (
267
263
  const isBefore = getIsBefore({ fromDate, date: month });
268
264
  const isAfter = getIsAfter({ toDate, date: month });
269
265
 
270
- if (!isValidDate(month) || (disabled && isMatch(month, disabled))) {
266
+ if (
267
+ !isValidDate(month) ||
268
+ (disabled && dateMatchModifiers(month, disabled))
269
+ ) {
271
270
  updateMonth(undefined);
272
271
  updateValidation({
273
272
  isInvalid: isValidDate(month),
274
- isDisabled: disabled && isMatch(month, disabled),
273
+ isDisabled: disabled && dateMatchModifiers(month, disabled),
275
274
  isValidMonth: false,
276
275
  isEmpty: !e.target.value,
277
276
  isBefore: isBefore ?? false,
@@ -283,7 +282,9 @@ export const useMonthpicker = (
283
282
  if (
284
283
  isAfter ||
285
284
  isBefore ||
286
- (fromDate && toDate && !isMatch(month, [{ from: fromDate, to: toDate }]))
285
+ (fromDate &&
286
+ toDate &&
287
+ !dateMatchModifiers(month, [{ from: fromDate, to: toDate }]))
287
288
  ) {
288
289
  updateMonth(undefined);
289
290
  updateValidation({
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- export { useMonthpicker, type MonthValidationT } from "../hooks";
2
+ export { useMonthpicker, type MonthValidationT } from "./hooks/useMonthPicker";
3
3
  export { default as MonthPicker } from "./MonthPicker";
4
- export { type MonthPickerProps } from "./types";
4
+ export { type MonthPickerProps } from "./MonthPicker.types";
5
5
  export {
6
6
  MonthPickerStandalone,
7
7
  type MonthPickerStandaloneProps,
8
- } from "./MonthPickerStandalone";
9
- export { MonthPickerInput } from "../parts/DateInput";
8
+ } from "./parts/MonthPicker.Standalone";
9
+ export { MonthPickerInput } from "../Date.Input";
@@ -7,9 +7,9 @@ import {
7
7
  setYear,
8
8
  } from "date-fns";
9
9
  import React, { useEffect, useRef } from "react";
10
- import { useDayPicker } from "react-day-picker";
11
- import { useSharedMonthContext } from "../context";
12
- import { dateIsInCurrentMonth, isMatch, nextEnabled } from "../utils";
10
+ import { dateIsInCurrentMonth, isMatch } from "../../date-utils";
11
+ import { useMonthPickerContext } from "../MonthPicker.context";
12
+ import { nextEnabled } from "../MonthPicker.util";
13
13
 
14
14
  interface MonthType {
15
15
  month: Date;
@@ -47,10 +47,18 @@ export const MonthButton = ({
47
47
  setTabRoot,
48
48
  }: MonthType) => {
49
49
  const ref = useRef<HTMLButtonElement>(null);
50
- const { hasDropdown, selected, onSelect, year, toYear, disabled } =
51
- useSharedMonthContext();
52
50
 
53
- const { fromDate, toDate, locale } = useDayPicker();
51
+ const {
52
+ fromDate,
53
+ toDate,
54
+ locale,
55
+ selected,
56
+ disabled,
57
+ year,
58
+ onYearChange,
59
+ onMonthSelect,
60
+ caption,
61
+ } = useMonthPickerContext();
54
62
  const isSelected = selected && isSameMonth(month, selected);
55
63
 
56
64
  useEffect(() => {
@@ -64,15 +72,18 @@ export const MonthButton = ({
64
72
  isMatch(setYear(month, year.getFullYear()), disabled) ||
65
73
  disableMonth(month, fromDate, toDate);
66
74
 
75
+ const isThisMonth = dateIsInCurrentMonth(month, year);
76
+
67
77
  return (
68
78
  <button
69
79
  ref={ref}
70
80
  type="button"
71
- onClick={() => onSelect(isSelected ? undefined : month)}
81
+ onClick={() => onMonthSelect?.(isSelected ? undefined : month)}
72
82
  disabled={isDisabled}
73
83
  aria-pressed={!!isSelected}
84
+ data-current-month={isThisMonth}
74
85
  className={cl("navds-date__month-button", {
75
- "rdp-day_today": dateIsInCurrentMonth(month, year),
86
+ "rdp-day_today": isThisMonth,
76
87
  "rdp-day_selected": isSelected,
77
88
  "rdp-day_disabled": isDisabled,
78
89
  })}
@@ -87,9 +98,9 @@ export const MonthButton = ({
87
98
  e.key,
88
99
  disabled,
89
100
  month,
90
- toYear,
101
+ onYearChange,
91
102
  year,
92
- hasDropdown,
103
+ caption === "dropdown",
93
104
  fromDate,
94
105
  toDate,
95
106
  );
@@ -1,4 +1,5 @@
1
1
  import {
2
+ format,
2
3
  isAfter,
3
4
  isBefore,
4
5
  setYear,
@@ -6,25 +7,21 @@ import {
6
7
  startOfYear,
7
8
  } from "date-fns";
8
9
  import React from "react";
9
- import { useDayPicker } from "react-day-picker";
10
10
  import { ArrowLeftIcon, ArrowRightIcon } from "@navikt/aksel-icons";
11
- import { Button } from "../../button";
12
- import { Select } from "../../form/select";
13
- import { useDateTranslationContext, useSharedMonthContext } from "../context";
11
+ import { Button } from "../../../button";
12
+ import { Select } from "../../../form/select";
13
+ import { useDateTranslationContext } from "../../Date.locale";
14
+ import { useMonthPickerContext } from "../MonthPicker.context";
15
+
16
+ const MonthPickerCaption = () => {
17
+ const { fromDate, toDate, locale, year, onYearChange, caption } =
18
+ useMonthPickerContext();
14
19
 
15
- export const MonthCaption = () => {
16
- const {
17
- fromDate,
18
- toDate,
19
- formatters: { formatYearCaption },
20
- locale,
21
- } = useDayPicker();
22
- const { hasDropdown, year, toYear } = useSharedMonthContext();
23
20
  const translate = useDateTranslationContext().translate;
24
21
 
25
22
  const years: Date[] = [];
26
23
 
27
- if (hasDropdown && fromDate && toDate) {
24
+ if (caption === "dropdown" && fromDate && toDate) {
28
25
  const fromYear = fromDate.getFullYear();
29
26
  const toDateYear = toDate.getFullYear();
30
27
  for (let currYear = fromYear; currYear <= toDateYear; currYear++) {
@@ -37,12 +34,14 @@ export const MonthCaption = () => {
37
34
  years.sort((a, b) => b.getFullYear() - a.getFullYear());
38
35
  }
39
36
 
40
- const handleYearChange = (event: React.ChangeEvent<HTMLSelectElement>) =>
41
- toYear(setYear(startOfMonth(new Date()), Number(event.target.value)));
37
+ const handleYearChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
38
+ onYearChange(setYear(startOfMonth(new Date()), Number(event.target.value)));
39
+ };
42
40
 
43
41
  const handleButtonClick = (val: number) => {
44
42
  const newYear = Number(year.getFullYear() + val);
45
- toYear(setYear(year, newYear));
43
+
44
+ onYearChange(setYear(year, newYear));
46
45
  };
47
46
 
48
47
  const disablePreviousYear = () => {
@@ -64,11 +63,11 @@ export const MonthCaption = () => {
64
63
  disabled={disablePreviousYear()}
65
64
  onClick={() => handleButtonClick(-1)}
66
65
  icon={<ArrowLeftIcon title={translate("goToPreviousYear")} />}
67
- variant="tertiary"
66
+ variant="tertiary-neutral"
68
67
  type="button"
69
68
  />
70
69
 
71
- {hasDropdown ? (
70
+ {caption === "dropdown" ? (
72
71
  <Select
73
72
  label={translate("year")}
74
73
  hideLabel
@@ -78,7 +77,7 @@ export const MonthCaption = () => {
78
77
  >
79
78
  {years.map((yearOpt) => (
80
79
  <option key={yearOpt.getFullYear()} value={yearOpt.getFullYear()}>
81
- {formatYearCaption(yearOpt, { locale })}
80
+ {format(yearOpt, "yyyy", { locale })}
82
81
  </option>
83
82
  ))}
84
83
  </Select>
@@ -92,11 +91,11 @@ export const MonthCaption = () => {
92
91
  disabled={disableNextYear()}
93
92
  onClick={() => handleButtonClick(1)}
94
93
  icon={<ArrowRightIcon title={translate("goToNextYear")} />}
95
- variant="tertiary"
94
+ variant="tertiary-neutral"
96
95
  type="button"
97
96
  />
98
97
  </div>
99
98
  );
100
99
  };
101
100
 
102
- export default MonthCaption;
101
+ export { MonthPickerCaption };
@@ -0,0 +1,86 @@
1
+ import cl from "clsx";
2
+ import React, { forwardRef } from "react";
3
+ import { useDateLocale, useI18n } from "../../../util/i18n/i18n.hooks";
4
+ import {
5
+ DateTranslationContextProvider,
6
+ getLocaleFromString,
7
+ getTranslations,
8
+ } from "../../Date.locale";
9
+ import { MonthPickerProvider } from "../MonthPicker.context";
10
+ import { MonthPickerProps } from "../MonthPicker.types";
11
+ import { MonthPickerCaption } from "./MonthPicker.Caption";
12
+ import { MonthPickerTable } from "./MonthPicker.Table";
13
+
14
+ export interface MonthPickerStandaloneProps
15
+ extends Omit<
16
+ MonthPickerProps,
17
+ "open" | "onClose" | "onOpenToggle" | "wrapperClassName" | "strategy"
18
+ > {
19
+ /**
20
+ * Monthpicker classname
21
+ */
22
+ className?: string;
23
+ }
24
+
25
+ export type MonthPickerStandaloneType = React.ForwardRefExoticComponent<
26
+ MonthPickerStandaloneProps & React.RefAttributes<HTMLDivElement>
27
+ >;
28
+
29
+ export const MonthPickerStandalone = forwardRef<
30
+ HTMLDivElement,
31
+ MonthPickerStandaloneProps
32
+ >(
33
+ (
34
+ {
35
+ dropdownCaption = false,
36
+ fromDate,
37
+ toDate,
38
+ disabled = [],
39
+ selected,
40
+ className,
41
+ locale,
42
+ translations,
43
+ onMonthSelect,
44
+ defaultSelected,
45
+ year,
46
+ onYearChange,
47
+ },
48
+ ref,
49
+ ) => {
50
+ const translate = useI18n(
51
+ "DatePicker",
52
+ translations,
53
+ getTranslations(locale),
54
+ );
55
+ const langProviderLocale = useDateLocale();
56
+
57
+ if (dropdownCaption && (!fromDate || !toDate)) {
58
+ console.warn("Using dropdownCaption required fromDate and toDate");
59
+ return null;
60
+ }
61
+
62
+ return (
63
+ <div ref={ref} className={cl("navds-date__wrapper", className)}>
64
+ <DateTranslationContextProvider translate={translate}>
65
+ <MonthPickerProvider
66
+ dropdownCaption={dropdownCaption}
67
+ defaultSelected={defaultSelected}
68
+ selected={selected}
69
+ disabled={disabled}
70
+ fromDate={fromDate}
71
+ toDate={toDate}
72
+ year={year}
73
+ onYearChange={onYearChange}
74
+ onMonthSelect={onMonthSelect}
75
+ locale={locale ? getLocaleFromString(locale) : langProviderLocale}
76
+ >
77
+ <div className="navds-date rdp-month">
78
+ <MonthPickerCaption />
79
+ <MonthPickerTable />
80
+ </div>
81
+ </MonthPickerProvider>
82
+ </DateTranslationContextProvider>
83
+ </div>
84
+ );
85
+ },
86
+ );
@@ -1,9 +1,9 @@
1
1
  import { isSameMonth, setMonth, setYear, startOfMonth } from "date-fns";
2
2
  import React, { useState } from "react";
3
- import { BodyShort } from "../../typography";
4
- import { useSharedMonthContext } from "../context";
5
- import { isMatch } from "../utils";
6
- import MonthButton from "./MonthButton";
3
+ import { BodyShort } from "../../../typography";
4
+ import { isMatch } from "../../date-utils";
5
+ import { useMonthPickerContext } from "../MonthPicker.context";
6
+ import MonthButton from "./MonthPicker.Button";
7
7
 
8
8
  const getAllMonths = () => {
9
9
  const months: Date[] = [];
@@ -14,10 +14,10 @@ const getAllMonths = () => {
14
14
  return months;
15
15
  };
16
16
 
17
- export const MonthSelector = () => {
17
+ const MonthPickerTable = () => {
18
18
  const [focus, setFocus] = useState<Date>();
19
19
 
20
- const { selected, year, disabled } = useSharedMonthContext();
20
+ const { selected, year, disabled } = useMonthPickerContext();
21
21
 
22
22
  const months: Date[] = getAllMonths();
23
23
 
@@ -82,4 +82,4 @@ export const MonthSelector = () => {
82
82
  );
83
83
  };
84
84
 
85
- export default MonthSelector;
85
+ export { MonthPickerTable };
@@ -1,8 +1,8 @@
1
1
  import { useFloatingPortalNode } from "@floating-ui/react";
2
2
  import cl from "clsx";
3
- import React, { forwardRef, useContext, useEffect, useRef } from "react";
3
+ import React, { forwardRef, useEffect, useRef } from "react";
4
4
  import { createPortal } from "react-dom";
5
- import { DateInputContext } from "../date/context";
5
+ import { useDateInputContext } from "../date/Date.Input";
6
6
  import { useProvider } from "../provider/Provider";
7
7
  import { Detail, Heading } from "../typography";
8
8
  import { composeEventHandlers } from "../util/composeEventHandlers";
@@ -106,7 +106,7 @@ export const Modal = forwardRef<HTMLDialogElement, ModalProps>(
106
106
  const rootElement = useProvider()?.rootElement;
107
107
  const portalNode = useFloatingPortalNode({ root: rootElement });
108
108
 
109
- const dateContext = useContext(DateInputContext);
109
+ const dateContext = useDateInputContext(false);
110
110
  const isNested = useModalContext(false) !== undefined;
111
111
  if (isNested && !dateContext) {
112
112
  console.error("Modals should not be nested");
@@ -7,8 +7,8 @@ import {
7
7
  useFloating,
8
8
  } from "@floating-ui/react";
9
9
  import cl from "clsx";
10
- import React, { HTMLAttributes, forwardRef, useContext, useRef } from "react";
11
- import { DateInputContext } from "../date/context";
10
+ import React, { HTMLAttributes, forwardRef, useRef } from "react";
11
+ import { useDateInputContext } from "../date/Date.Input";
12
12
  import { useModalContext } from "../modal/Modal.context";
13
13
  import { DismissableLayer } from "../overlays/dismissablelayer/DismissableLayer";
14
14
  import { useThemeInternal } from "../theme/Theme";
@@ -121,9 +121,9 @@ export const Popover = forwardRef<HTMLDivElement, PopoverProps>(
121
121
  ) => {
122
122
  const arrowRef = useRef<HTMLDivElement | null>(null);
123
123
  const isInModal = useModalContext(false) !== undefined;
124
- const isInDatepicker = useContext(DateInputContext) !== null;
124
+ const datepickerContext = useDateInputContext(false);
125
125
  const chosenStrategy = userStrategy ?? (isInModal ? "fixed" : "absolute");
126
- const chosenFlip = isInDatepicker ? false : _flip;
126
+ const chosenFlip = datepickerContext ? false : _flip;
127
127
 
128
128
  const themeContext = useThemeInternal(false);
129
129
 
@@ -16,7 +16,6 @@ import React, { HTMLAttributes, forwardRef, useRef } from "react";
16
16
  import { useModalContext } from "../modal/Modal.context";
17
17
  import { Portal } from "../portal";
18
18
  import { Slot } from "../slot/Slot";
19
- import { useThemeInternal } from "../theme/Theme";
20
19
  import { Detail } from "../typography";
21
20
  import { useId } from "../util/hooks";
22
21
  import { useControllableState } from "../util/hooks/useControllableState";
@@ -124,9 +123,6 @@ export const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(
124
123
  },
125
124
  ref,
126
125
  ) => {
127
- const themeContext = useThemeInternal(false);
128
- const showArrow = _arrow && !themeContext;
129
-
130
126
  const [_open, _setOpen] = useControllableState({
131
127
  defaultValue: defaultOpen,
132
128
  value: open,
@@ -153,7 +149,7 @@ export const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(
153
149
  open: _open,
154
150
  onOpenChange: (newState) => _setOpen(newState),
155
151
  middleware: [
156
- offset(_offset ?? (themeContext ? 8 : _arrow ? 16 : 4)),
152
+ offset(_offset ?? (_arrow ? 8 : 4)),
157
153
  shift(),
158
154
  flip({ padding: 5, fallbackPlacements: ["bottom", "top"] }),
159
155
  flArrow({ element: arrowRef, padding: 5 }),
@@ -244,7 +240,7 @@ export const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(
244
240
  ))}
245
241
  </span>
246
242
  )}
247
- {showArrow && (
243
+ {_arrow && (
248
244
  <div
249
245
  ref={(node) => {
250
246
  arrowRef.current = node;
@@ -1,9 +0,0 @@
1
- export { useDateInputContext, DateInputContext } from "./useDateInputContext";
2
- export {
3
- useSharedMonthContext,
4
- SharedMonthProvider,
5
- } from "./useSharedMonthContext";
6
- export {
7
- useDateTranslationContext,
8
- DateTranslationContextProvider,
9
- } from "./useDateTranslationContext";
@@ -1,34 +0,0 @@
1
- import { createContext, useContext } from "react";
2
-
3
- interface DateInputContextProps {
4
- /**
5
- * Open state for popover
6
- */
7
- open: boolean;
8
- /**
9
- * Callback for opOpen toggle
10
- */
11
- onOpen: () => void;
12
- /**
13
- * Aria-connected ID
14
- */
15
- ariaId?: string;
16
- /**
17
- * Flag for enabled-check
18
- */
19
- defined: boolean;
20
- }
21
-
22
- export const DateInputContext = createContext<DateInputContextProps | null>(
23
- null,
24
- );
25
-
26
- export const useDateInputContext = () => {
27
- const context = useContext(DateInputContext);
28
-
29
- if (!context) {
30
- console.warn("useDateInputContext must be used with DateInputContext");
31
- }
32
-
33
- return context;
34
- };
@@ -1,9 +0,0 @@
1
- import { createContext } from "../../util/create-context";
2
- import { TFunction } from "../../util/i18n/i18n.types";
3
-
4
- interface DateTranslationContextProps {
5
- translate: TFunction<"DatePicker">;
6
- }
7
-
8
- export const [DateTranslationContextProvider, useDateTranslationContext] =
9
- createContext<DateTranslationContextProps>();
@@ -1,68 +0,0 @@
1
- import { setYear, startOfMonth } from "date-fns";
2
- import React, { createContext, useContext, useState } from "react";
3
- import { useDayPicker } from "react-day-picker";
4
- import { Matcher, getInitialYear } from "../utils";
5
-
6
- export type SharedMonthContextType = {
7
- hasDropdown: boolean;
8
- year: Date;
9
- toYear: (date: Date) => void;
10
- disabled: Matcher[];
11
- selected?: Date;
12
- onSelect: (v?: Date) => void;
13
- };
14
-
15
- export const SharedMonthContext = createContext<SharedMonthContextType>({
16
- hasDropdown: false,
17
- year: new Date(),
18
- toYear: () => null,
19
- disabled: [],
20
- onSelect: () => null,
21
- });
22
-
23
- export const useSharedMonthContext = () => useContext(SharedMonthContext);
24
-
25
- export const SharedMonthProvider = ({
26
- children,
27
- dropdownCaption,
28
- disabled,
29
- selected,
30
- onSelect,
31
- year: _year,
32
- onYearChange,
33
- }) => {
34
- const context = useDayPicker();
35
-
36
- const [year, toYear] = useState<Date>(getInitialYear(context));
37
-
38
- const hasDropdown = !!(dropdownCaption && context.fromDate && context.toDate);
39
-
40
- if (
41
- context.fromDate &&
42
- context.toDate &&
43
- context?.fromDate >= context?.toDate
44
- ) {
45
- console.warn("fromDate needs to be before toDate - MonthPicker");
46
- }
47
-
48
- return (
49
- <SharedMonthContext.Provider
50
- value={{
51
- year: _year ?? year,
52
- toYear: (y) => {
53
- toYear(y);
54
- onYearChange?.(y);
55
- },
56
- hasDropdown,
57
- disabled,
58
- selected,
59
- onSelect: (v?: Date) =>
60
- v
61
- ? onSelect(setYear(startOfMonth(v), (_year ?? year).getFullYear()))
62
- : onSelect(undefined),
63
- }}
64
- >
65
- {children}
66
- </SharedMonthContext.Provider>
67
- );
68
- };