@oslokommune/punkt-react 16.25.1 → 16.26.2

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 (156) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/components/accordion/Accordion.d.ts +21 -0
  5. package/dist/components/accordion/Accordion.test.d.ts +0 -0
  6. package/dist/components/accordion/AccordionItem.d.ts +17 -0
  7. package/dist/components/alert/Alert.d.ts +14 -0
  8. package/dist/components/alert/Alert.test.d.ts +0 -0
  9. package/dist/components/backlink/BackLink.d.ts +14 -0
  10. package/dist/components/backlink/BackLink.test.d.ts +0 -0
  11. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +16 -0
  12. package/dist/components/breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  13. package/dist/components/button/Button.d.ts +24 -0
  14. package/dist/components/button/Button.test.d.ts +0 -0
  15. package/dist/components/calendar/Calendar.accessibility.test.d.ts +0 -0
  16. package/dist/components/calendar/Calendar.constraints.test.d.ts +0 -0
  17. package/dist/components/calendar/Calendar.core.test.d.ts +0 -0
  18. package/dist/components/calendar/Calendar.d.ts +3 -0
  19. package/dist/components/calendar/Calendar.interaction.test.d.ts +0 -0
  20. package/dist/components/calendar/Calendar.selection.test.d.ts +0 -0
  21. package/dist/components/calendar/CalendarGrid.d.ts +4 -0
  22. package/dist/components/calendar/CalendarNav.d.ts +2 -0
  23. package/dist/components/calendar/calendar-utils.d.ts +20 -0
  24. package/dist/components/calendar/types.d.ts +104 -0
  25. package/dist/components/calendar/useCalendarState.d.ts +2 -0
  26. package/dist/components/card/Card.d.ts +37 -0
  27. package/dist/components/card/Card.test.d.ts +0 -0
  28. package/dist/components/checkbox/Checkbox.d.ts +23 -0
  29. package/dist/components/checkbox/Checkbox.test.d.ts +0 -0
  30. package/dist/components/combobox/Combobox.accessibility.test.d.ts +0 -0
  31. package/dist/components/combobox/Combobox.core.test.d.ts +0 -0
  32. package/dist/components/combobox/Combobox.d.ts +3 -0
  33. package/dist/components/combobox/Combobox.interaction.test.d.ts +0 -0
  34. package/dist/components/combobox/Combobox.selection.test.d.ts +0 -0
  35. package/dist/components/combobox/ComboboxInput.d.ts +6 -0
  36. package/dist/components/combobox/ComboboxTags.d.ts +11 -0
  37. package/dist/components/combobox/Listbox.d.ts +6 -0
  38. package/dist/components/combobox/types.d.ts +104 -0
  39. package/dist/components/combobox/useComboboxState.d.ts +2 -0
  40. package/dist/components/consent/Consent.d.ts +51 -0
  41. package/dist/components/consent/Consent.test.d.ts +0 -0
  42. package/dist/components/consent/strings.d.ts +85 -0
  43. package/dist/components/datepicker/DateTags.d.ts +10 -0
  44. package/dist/components/datepicker/Datepicker.accessibility.test.d.ts +0 -0
  45. package/dist/components/datepicker/Datepicker.core.test.d.ts +0 -0
  46. package/dist/components/datepicker/Datepicker.d.ts +3 -0
  47. package/dist/components/datepicker/Datepicker.input.test.d.ts +0 -0
  48. package/dist/components/datepicker/Datepicker.selection.test.d.ts +0 -0
  49. package/dist/components/datepicker/Datepicker.validation.test.d.ts +0 -0
  50. package/dist/components/datepicker/DatepickerInputs.d.ts +4 -0
  51. package/dist/components/datepicker/DatepickerPopup.d.ts +21 -0
  52. package/dist/components/datepicker/types.d.ts +109 -0
  53. package/dist/components/datepicker/useDatepickerState.d.ts +2 -0
  54. package/dist/components/fileupload/DropZone.d.ts +42 -0
  55. package/dist/components/fileupload/FileUpload.d.ts +84 -0
  56. package/dist/components/fileupload/FileUpload.test.d.ts +0 -0
  57. package/dist/components/fileupload/QueueDisplay.d.ts +19 -0
  58. package/dist/components/fileupload/QueueDisplay.test.d.ts +0 -0
  59. package/dist/components/fileupload/QueueItemContent.d.ts +44 -0
  60. package/dist/components/fileupload/Subcomponents.d.ts +36 -0
  61. package/dist/components/fileupload/Truncate.d.ts +20 -0
  62. package/dist/components/fileupload/Truncate.test.d.ts +0 -0
  63. package/dist/components/fileupload/extensions/Comments.d.ts +6 -0
  64. package/dist/components/fileupload/extensions/Remove.d.ts +2 -0
  65. package/dist/components/fileupload/extensions/Rename.d.ts +2 -0
  66. package/dist/components/fileupload/hooks/index.d.ts +4 -0
  67. package/dist/components/fileupload/hooks/useFileAttributes.d.ts +10 -0
  68. package/dist/components/fileupload/hooks/useImagePreview.d.ts +9 -0
  69. package/dist/components/fileupload/hooks/useOperationState.d.ts +6 -0
  70. package/dist/components/fileupload/hooks/useRequiredFormValidation.d.ts +16 -0
  71. package/dist/components/fileupload/hooks.d.ts +4 -0
  72. package/dist/components/fileupload/types.d.ts +88 -0
  73. package/dist/components/fileupload/utils.d.ts +5 -0
  74. package/dist/components/footer/Footer.d.ts +36 -0
  75. package/dist/components/footer/Footer.test.d.ts +0 -0
  76. package/dist/components/footerSimple/FooterSimple.d.ts +21 -0
  77. package/dist/components/footerSimple/FooterSimple.test.d.ts +0 -0
  78. package/dist/components/header/Header.d.ts +15 -0
  79. package/dist/components/header/Header.test.d.ts +0 -0
  80. package/dist/components/header/HeaderService.d.ts +9 -0
  81. package/dist/components/header/HeaderService.test.d.ts +0 -0
  82. package/dist/components/header/types.d.ts +93 -0
  83. package/dist/components/header-menu/HeaderMenu.d.ts +26 -0
  84. package/dist/components/header-menu/HeaderMenu.test.d.ts +0 -0
  85. package/dist/components/headerUserMenu/UserMenu.d.ts +11 -0
  86. package/dist/components/headerUserMenu/UserMenu.test.d.ts +0 -0
  87. package/dist/components/heading/Heading.d.ts +14 -0
  88. package/dist/components/heading/Heading.test.d.ts +0 -0
  89. package/dist/components/helptext/Helptext.d.ts +9 -0
  90. package/dist/components/helptext/Helptext.test.d.ts +0 -0
  91. package/dist/components/icon/Icon.d.ts +10 -0
  92. package/dist/components/icon/Icon.test.d.ts +9 -0
  93. package/dist/components/index.d.ts +50 -0
  94. package/dist/components/input/Input.d.ts +21 -0
  95. package/dist/components/inputwrapper/InputWrapper.d.ts +28 -0
  96. package/dist/components/interfaces.d.ts +30 -0
  97. package/dist/components/link/Link.d.ts +17 -0
  98. package/dist/components/link/Link.test.d.ts +1 -0
  99. package/dist/components/linkcard/LinkCard.d.ts +14 -0
  100. package/dist/components/linkcard/LinkCard.test.d.ts +0 -0
  101. package/dist/components/loader/Loader.d.ts +41 -0
  102. package/dist/components/loader/Loader.test.d.ts +0 -0
  103. package/dist/components/messagebox/Messagebox.d.ts +11 -0
  104. package/dist/components/messagebox/Messagebox.test.d.ts +1 -0
  105. package/dist/components/modal/Modal.d.ts +17 -0
  106. package/dist/components/modal/Modal.test.d.ts +0 -0
  107. package/dist/components/progressbar/Progressbar.d.ts +21 -0
  108. package/dist/components/progressbar/Progressbar.test.d.ts +0 -0
  109. package/dist/components/radio/RadioButton.d.ts +20 -0
  110. package/dist/components/radio/RadioButton.test.d.ts +0 -0
  111. package/dist/components/searchinput/SearchInput.d.ts +36 -0
  112. package/dist/components/searchinput/SearchInput.test.d.ts +0 -0
  113. package/dist/components/select/Select.d.ts +30 -0
  114. package/dist/components/select/Select.test.d.ts +0 -0
  115. package/dist/components/stepper/Step.d.ts +21 -0
  116. package/dist/components/stepper/Stepper.d.ts +32 -0
  117. package/dist/components/stepper/Stepper.test.d.ts +0 -0
  118. package/dist/components/table/Table.d.ts +11 -0
  119. package/dist/components/table/Table.test.d.ts +0 -0
  120. package/dist/components/table/TableBody.d.ts +7 -0
  121. package/dist/components/table/TableData.d.ts +7 -0
  122. package/dist/components/table/TableDataCell.d.ts +8 -0
  123. package/dist/components/table/TableHeader.d.ts +7 -0
  124. package/dist/components/table/TableHeaderCell.d.ts +7 -0
  125. package/dist/components/table/TableRow.d.ts +7 -0
  126. package/dist/components/tabs/TabItem.d.ts +15 -0
  127. package/dist/components/tabs/Tabs.d.ts +33 -0
  128. package/dist/components/tabs/Tabs.test.d.ts +0 -0
  129. package/dist/components/tag/Tag.d.ts +24 -0
  130. package/dist/components/tag/Tag.test.d.ts +0 -0
  131. package/dist/components/textarea/Textarea.d.ts +35 -0
  132. package/dist/components/textarea/Textarea.test.d.ts +0 -0
  133. package/dist/components/textinput/Textinput.d.ts +44 -0
  134. package/dist/components/textinput/Textinput.test.d.ts +0 -0
  135. package/dist/components/timepicker/Timepicker.d.ts +3 -0
  136. package/dist/components/timepicker/Timepicker.test.d.ts +0 -0
  137. package/dist/components/timepicker/types.d.ts +81 -0
  138. package/dist/components/timepicker/useTimepickerState.d.ts +58 -0
  139. package/dist/components/types.d.ts +2 -0
  140. package/dist/index.d.ts +1 -1366
  141. package/dist/punkt-react.cjs +1 -1
  142. package/dist/punkt-react.js +698 -684
  143. package/package.json +33 -32
  144. package/src/components/calendar/types.ts +1 -1
  145. package/src/components/card/Card.tsx +1 -1
  146. package/src/components/combobox/types.ts +5 -5
  147. package/src/components/datepicker/types.ts +5 -5
  148. package/src/components/fileupload/FileUpload.tsx +1 -1
  149. package/src/components/fileupload/Subcomponents.tsx +1 -1
  150. package/src/components/fileupload/Truncate.tsx +1 -1
  151. package/src/components/fileupload/hooks/useRequiredFormValidation.ts +1 -1
  152. package/src/components/header/HeaderService.tsx +1 -1
  153. package/src/components/tabs/Tabs.tsx +1 -0
  154. package/src/components/tag/Tag.tsx +1 -1
  155. package/src/components/timepicker/Timepicker.tsx +1 -2
  156. package/src/components/timepicker/types.ts +2 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-react",
3
- "version": "16.25.1",
3
+ "version": "16.26.2",
4
4
  "description": "React komponentbibliotek til Punkt, et designsystem laget av Oslo Origo",
5
5
  "homepage": "https://punkt.oslo.kommune.no",
6
6
  "author": "Team Designsystem, Oslo Origo",
@@ -35,38 +35,39 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "classnames": "^2.5.1",
38
- "prettier": "^3.3.3",
39
- "react-hook-form": "^7.53.0"
38
+ "prettier": "^3.8.4",
39
+ "react-hook-form": "^7.79.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@babel/plugin-transform-private-property-in-object": "^7.25.9",
43
- "@eslint/compat": "^2.0.2",
44
- "@eslint/eslintrc": "^3.3.3",
45
- "@eslint/js": "^9.37.0",
46
- "@oslokommune/punkt-assets": "^16.16.1",
47
- "@oslokommune/punkt-css": "^16.18.0",
48
- "@testing-library/jest-dom": "^6.5.0",
49
- "@testing-library/react": "^16.0.1",
50
- "@testing-library/user-event": "^14.5.2",
42
+ "@babel/plugin-transform-private-property-in-object": "^7.27.1",
43
+ "@eslint-react/eslint-plugin": "^5.9.0",
44
+ "@eslint/compat": "^2.1.0",
45
+ "@eslint/eslintrc": "^3.3.5",
46
+ "@eslint/js": "^10.0.1",
47
+ "@oslokommune/punkt-assets": "^16.26.2",
48
+ "@oslokommune/punkt-css": "^16.26.2",
49
+ "@testing-library/jest-dom": "^6.9.1",
50
+ "@testing-library/react": "^16.3.2",
51
+ "@testing-library/user-event": "^14.6.1",
51
52
  "@types/jest-axe": "^3.5.9",
52
- "@types/node": "^20.12.10",
53
- "@types/react": "^18.3.5",
54
- "@types/react-dom": "^18.3.0",
55
- "@vitejs/plugin-react": "^6.0.0",
56
- "eslint": "^9.37.0",
57
- "eslint-config-prettier": "^9.1.0",
58
- "eslint-plugin-prettier": "^5.2.1",
59
- "eslint-plugin-react": "^7.37.5",
60
- "eslint-plugin-react-hooks": "^7.0.1",
61
- "eslint-plugin-simple-import-sort": "^12.1.1",
62
- "globals": "^14.0.0",
63
- "jest-axe": "^9.0.0",
64
- "react-hooks": "^1.0.1",
65
- "sass": "^1.78.0",
66
- "typescript": "^6.0.2",
67
- "vite": "^8.0.8",
68
- "vite-plugin-dts": "^4.5.4",
69
- "vitest": "^4.1.4"
53
+ "@types/node": "^25.9.3",
54
+ "@types/react": "^19.2.17",
55
+ "@types/react-dom": "^19.2.3",
56
+ "@vitejs/plugin-react": "^6.0.2",
57
+ "eslint": "^10.5.0",
58
+ "eslint-config-prettier": "^10.1.8",
59
+ "eslint-plugin-prettier": "^5.5.6",
60
+ "eslint-plugin-react-hooks": "^7.1.1",
61
+ "eslint-plugin-simple-import-sort": "^13.0.0",
62
+ "globals": "^17.6.0",
63
+ "jest-axe": "^10.0.0",
64
+ "jsdom": "^29.1.1",
65
+ "sass": "^1.101.0",
66
+ "typescript": "^6.0.3",
67
+ "typescript-eslint": "^8.61.1",
68
+ "vite": "^8.0.16",
69
+ "vite-plugin-dts": "^5.0.2",
70
+ "vitest": "^4.1.9"
70
71
  },
71
72
  "peerDependencies": {
72
73
  "@oslokommune/punkt-assets": "*",
@@ -76,7 +77,7 @@
76
77
  "react-router-dom": "^6.26.2"
77
78
  },
78
79
  "engines": {
79
- "node": ">=20.19.1"
80
+ "node": ">=22.12.0"
80
81
  },
81
82
  "private": false,
82
83
  "publishConfig": {
@@ -100,5 +101,5 @@
100
101
  "url": "https://github.com/oslokommune/punkt/issues"
101
102
  },
102
103
  "license": "MIT",
103
- "gitHead": "5fe880d7964ac407f7271a8d80c178f72ca028a1"
104
+ "gitHead": "b667fcd160da4b1c4e556fdd0bb23d50cc433827"
104
105
  }
@@ -118,7 +118,7 @@ export interface ICalendarState {
118
118
  dateConstraints: IDateConstraints
119
119
 
120
120
  // Refs
121
- calendarRef: React.RefObject<HTMLDivElement>
121
+ calendarRef: React.RefObject<HTMLDivElement | null>
122
122
  selectableDatesRef: React.MutableRefObject<{ currentDateISO: string; isDisabled: boolean; tabindex: string }[]>
123
123
  tabIndexSetRef: React.MutableRefObject<number>
124
124
 
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
 
3
3
  import classNames from 'classnames'
4
- import { forwardRef, HTMLAttributes, ReactNode, Ref } from 'react'
4
+ import { forwardRef, HTMLAttributes, type JSX, ReactNode, Ref } from 'react'
5
5
  import type { TCardSkin, TLayout, TTagSkin } from 'shared-types'
6
6
 
7
7
  import { PktTag } from '../tag/Tag'
@@ -116,11 +116,11 @@ export interface IComboboxState {
116
116
  hasCounter: boolean
117
117
 
118
118
  // Refs
119
- inputRef: RefObject<HTMLInputElement>
120
- changeInputRef: RefObject<HTMLInputElement>
121
- triggerRef: RefObject<HTMLDivElement>
122
- listboxRef: RefObject<HTMLDivElement>
123
- wrapperRef: RefObject<HTMLDivElement>
119
+ inputRef: RefObject<HTMLInputElement | null>
120
+ changeInputRef: RefObject<HTMLInputElement | null>
121
+ triggerRef: RefObject<HTMLDivElement | null>
122
+ listboxRef: RefObject<HTMLDivElement | null>
123
+ wrapperRef: RefObject<HTMLDivElement | null>
124
124
 
125
125
  // Event handlers
126
126
  handleInputChange: (e: ChangeEvent<HTMLInputElement>) => void
@@ -107,11 +107,11 @@ export interface IDatepickerState {
107
107
  hasCounter: boolean
108
108
 
109
109
  // Refs
110
- inputRef: React.RefObject<HTMLInputElement>
111
- inputRefTo: React.RefObject<HTMLInputElement>
112
- changeInputRef: React.RefObject<HTMLInputElement>
113
- btnRef: React.RefObject<HTMLButtonElement>
114
- wrapperRef: React.RefObject<HTMLDivElement>
110
+ inputRef: React.RefObject<HTMLInputElement | null>
111
+ inputRefTo: React.RefObject<HTMLInputElement | null>
112
+ changeInputRef: React.RefObject<HTMLInputElement | null>
113
+ btnRef: React.RefObject<HTMLButtonElement | null>
114
+ wrapperRef: React.RefObject<HTMLDivElement | null>
115
115
 
116
116
  // onChange passthrough for hidden input
117
117
  onChange?: (e: ChangeEvent<HTMLInputElement>) => void
@@ -343,7 +343,7 @@ export const PktFileUpload: FC<IPktFileUpload> = forwardRef<HTMLInputElement, IP
343
343
  'pkt-fileupload--disabled': disabled,
344
344
  })}
345
345
  aria-disabled={disabled}
346
- {...(disabled ? { inert: '' } : {})}
346
+ {...(disabled ? { inert: true } : {})}
347
347
  >
348
348
  <PktFileUploadContext.Provider value={{ name: props.name || '', multiple: !!multiple, id }}>
349
349
  <div className="pkt-sr-only" aria-live="polite" aria-atomic="true">
@@ -302,7 +302,7 @@ interface IImagePreviewModal {
302
302
  currentIndex: number
303
303
  onClose: () => void
304
304
  onNavigate: (direction: 'prev' | 'next') => void
305
- modalRef: RefObject<HTMLDialogElement>
305
+ modalRef: RefObject<HTMLDialogElement | null>
306
306
  }
307
307
 
308
308
  export const ImagePreviewModal = ({
@@ -1,4 +1,4 @@
1
- import { createContext, useContext } from 'react'
1
+ import { createContext, type JSX, useContext } from 'react'
2
2
 
3
3
  import { splitFilenameForTruncation } from 'shared-utils/fileupload'
4
4
 
@@ -10,7 +10,7 @@ import { RefObject, useEffect } from 'react'
10
10
  * Passive in `form` strategy — native validation handles that case.
11
11
  */
12
12
  export const useRequiredFormValidation = (
13
- fileInputRef: RefObject<HTMLInputElement>,
13
+ fileInputRef: RefObject<HTMLInputElement | null>,
14
14
  {
15
15
  uploadStrategy,
16
16
  required,
@@ -171,7 +171,7 @@ export const PktHeaderService = forwardRef(
171
171
  const handleFocusOut = useCallback((event: FocusEvent<HTMLDivElement>, menuType: THeaderMenu) => {
172
172
  const relatedTarget = event.relatedTarget as HTMLElement | null
173
173
 
174
- let containerRef: RefObject<HTMLDivElement>
174
+ let containerRef: RefObject<HTMLDivElement | null>
175
175
  switch (menuType) {
176
176
  case 'user':
177
177
  containerRef = userContainerRef
@@ -4,6 +4,7 @@ import {
4
4
  Children,
5
5
  createContext,
6
6
  forwardRef,
7
+ type JSX,
7
8
  KeyboardEvent,
8
9
  ReactNode,
9
10
  Ref,
@@ -69,7 +69,7 @@ export const PktTag = forwardRef<HTMLSpanElement | HTMLButtonElement, ButtonPktT
69
69
  }
70
70
  }, [onClose])
71
71
 
72
- const spanRef: RefObject<HTMLButtonElement | HTMLSpanElement> = useRef<HTMLButtonElement | HTMLSpanElement>(null)
72
+ const spanRef: RefObject<HTMLButtonElement | HTMLSpanElement | null> = useRef<HTMLButtonElement | HTMLSpanElement>(null)
73
73
  const [labelText, setLabelText] = useState('')
74
74
 
75
75
  useEffect(() => {
@@ -10,7 +10,7 @@ import type { IPktTimepicker } from './types'
10
10
  export type { IPktTimepicker } from './types'
11
11
 
12
12
  export const PktTimepicker = forwardRef<HTMLDivElement, IPktTimepicker>((props, ref) => {
13
- const { onChange, onInput } = props
13
+ const { onChange } = props
14
14
  const state = useTimepickerState(props, ref)
15
15
 
16
16
  const hoursLabel = state.strings.hours
@@ -205,7 +205,6 @@ export const PktTimepicker = forwardRef<HTMLDivElement, IPktTimepicker>((props,
205
205
  tabIndex={-1}
206
206
  aria-hidden={true}
207
207
  onChange={onChange}
208
- onInput={onInput}
209
208
  />
210
209
  </div>
211
210
  )
@@ -10,7 +10,7 @@ import type { ITimepickerStrings } from 'shared-types/timepicker'
10
10
  export interface IPktTimepicker
11
11
  extends Omit<
12
12
  InputHTMLAttributes<HTMLInputElement>,
13
- 'value' | 'onChange' | 'min' | 'max' | 'step' | 'onFocus' | 'onBlur'
13
+ 'value' | 'onChange' | 'onInput' | 'min' | 'max' | 'step' | 'onFocus' | 'onBlur'
14
14
  > {
15
15
  /** Unique id; used for hour, minute, popup, and hidden input ids. */
16
16
  id: string
@@ -95,12 +95,9 @@ export interface IPktTimepicker
95
95
  /** Copy for hours, minutes, buttons, and popup. */
96
96
  strings?: ITimepickerStrings
97
97
 
98
- /** Change event from the hidden input (`e.target.value` is `HH:MM`). */
98
+ /** Change event from the hidden input (`e.target.value` is `HH:MM`). In React, `onChange` already fires on input. */
99
99
  onChange?: (e: ChangeEvent<HTMLInputElement>) => void
100
100
 
101
- /** Input events while typing or using spinners. */
102
- onInput?: (e: ChangeEvent<HTMLInputElement>) => void
103
-
104
101
  /** Callback with the committed `HH:MM` string. */
105
102
  onValueChange?: (value: string) => void
106
103