@oslokommune/punkt-react 16.25.0 → 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 (157) hide show
  1. package/CHANGELOG.md +46 -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 -1364
  141. package/dist/punkt-react.cjs +1 -1
  142. package/dist/punkt-react.js +1000 -984
  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 +17 -16
  153. package/src/components/header/types.ts +2 -0
  154. package/src/components/tabs/Tabs.tsx +1 -0
  155. package/src/components/tag/Tag.tsx +1 -1
  156. package/src/components/timepicker/Timepicker.tsx +1 -2
  157. 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.0",
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": "d01de2b51e9c71b709202eb0d2fb3336e2932a20"
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,
@@ -29,6 +29,18 @@ import { IPktHeader, Representing, THeaderMenu, User, UserMenuFooterItem, UserMe
29
29
  export type { Representing, THeaderMenu, User, UserMenuFooterItem, UserMenuItem }
30
30
  export type IPktHeaderService = IPktHeader
31
31
 
32
+ declare global {
33
+ interface Window {
34
+ pktLogoPath?: string
35
+ }
36
+ }
37
+
38
+ const defaultLogoPath = 'https://punkt-cdn.oslo.kommune.no/latest/logos/'
39
+
40
+ if (typeof window !== 'undefined') {
41
+ window.pktLogoPath = window.pktLogoPath || defaultLogoPath
42
+ }
43
+
32
44
  export const PktHeaderService = forwardRef(
33
45
  (
34
46
  {
@@ -59,6 +71,7 @@ export const PktHeaderService = forwardRef(
59
71
  hideLogo = false,
60
72
  logoLink,
61
73
  logoClick,
74
+ logoPath = typeof window !== 'undefined' ? window.pktLogoPath : defaultLogoPath,
62
75
  position = 'fixed',
63
76
  scrollBehavior = 'hide',
64
77
  slotMenuVariant = 'icon-only',
@@ -158,7 +171,7 @@ export const PktHeaderService = forwardRef(
158
171
  const handleFocusOut = useCallback((event: FocusEvent<HTMLDivElement>, menuType: THeaderMenu) => {
159
172
  const relatedTarget = event.relatedTarget as HTMLElement | null
160
173
 
161
- let containerRef: RefObject<HTMLDivElement>
174
+ let containerRef: RefObject<HTMLDivElement | null>
162
175
  switch (menuType) {
163
176
  case 'user':
164
177
  containerRef = userContainerRef
@@ -337,11 +350,7 @@ export const PktHeaderService = forwardRef(
337
350
  <span className="pkt-header-service__logo">
338
351
  {logoLink ? (
339
352
  <a href={logoLink} aria-label="Tilbake til forside">
340
- <PktIcon
341
- name="oslologo"
342
- aria-hidden="true"
343
- path="https://punkt-cdn.oslo.kommune.no/latest/logos/"
344
- ></PktIcon>
353
+ <PktIcon name="oslologo" aria-hidden="true" path={logoPath}></PktIcon>
345
354
  </a>
346
355
  ) : logoClick ? (
347
356
  <button
@@ -349,18 +358,10 @@ export const PktHeaderService = forwardRef(
349
358
  className="pkt-link-button pkt-link pkt-header-service__logo-link"
350
359
  onClick={logoClick}
351
360
  >
352
- <PktIcon
353
- name="oslologo"
354
- aria-hidden="true"
355
- path="https://punkt-cdn.oslo.kommune.no/latest/logos/"
356
- ></PktIcon>
361
+ <PktIcon name="oslologo" aria-hidden="true" path={logoPath}></PktIcon>
357
362
  </button>
358
363
  ) : (
359
- <PktIcon
360
- name="oslologo"
361
- aria-hidden="true"
362
- path="https://punkt-cdn.oslo.kommune.no/latest/logos/"
363
- ></PktIcon>
364
+ <PktIcon name="oslologo" aria-hidden="true" path={logoPath}></PktIcon>
364
365
  )}
365
366
  </span>
366
367
  )}
@@ -54,6 +54,8 @@ export interface IPktHeader {
54
54
  hideLogo?: boolean
55
55
  /** Link URL for the logo */
56
56
  logoLink?: string
57
+ /** Override CDN path for the logo */
58
+ logoPath?: string
57
59
  /** Callback when logo is clicked */
58
60
  logoClick?: (event: MouseEvent) => void
59
61
  /** Name of the service displayed in the header */
@@ -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