@navikt/ds-react 7.35.3 → 7.37.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 (622) hide show
  1. package/cjs/accordion/AccordionContent.js +1 -1
  2. package/cjs/accordion/AccordionContent.js.map +1 -1
  3. package/cjs/accordion/AccordionHeader.js +1 -1
  4. package/cjs/accordion/AccordionHeader.js.map +1 -1
  5. package/cjs/alert/base-alert/content/BaseAlertContent.js +1 -1
  6. package/cjs/alert/base-alert/content/BaseAlertContent.js.map +1 -1
  7. package/cjs/alert/base-alert/root/BaseAlertRoot.context.d.ts +3 -2
  8. package/cjs/alert/base-alert/root/BaseAlertRoot.context.js +2 -3
  9. package/cjs/alert/base-alert/root/BaseAlertRoot.context.js.map +1 -1
  10. package/cjs/chips/Removable.js +1 -1
  11. package/cjs/chips/Removable.js.map +1 -1
  12. package/cjs/chips/Toggle.js +1 -1
  13. package/cjs/chips/Toggle.js.map +1 -1
  14. package/cjs/collapsible/Collapsible.context.d.ts +3 -2
  15. package/cjs/collapsible/Collapsible.context.js +3 -3
  16. package/cjs/collapsible/Collapsible.context.js.map +1 -1
  17. package/cjs/copybutton/CopyButton.js +5 -5
  18. package/cjs/copybutton/CopyButton.js.map +1 -1
  19. package/cjs/date/Date.Dialog.js +1 -1
  20. package/cjs/date/Date.Dialog.js.map +1 -1
  21. package/cjs/date/Date.Input.d.ts +3 -2
  22. package/cjs/date/Date.Input.js +4 -3
  23. package/cjs/date/Date.Input.js.map +1 -1
  24. package/cjs/date/Date.locale.d.ts +3 -2
  25. package/cjs/date/Date.locale.js +4 -2
  26. package/cjs/date/Date.locale.js.map +1 -1
  27. package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +1 -1
  28. package/cjs/date/datepicker/parts/DatePicker.DayButton.js +1 -1
  29. package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -1
  30. package/cjs/date/datepicker/parts/DatePicker.RDP.js +12 -2
  31. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  32. package/cjs/date/monthpicker/MonthPicker.context.d.ts +1 -1
  33. package/cjs/date/monthpicker/MonthPicker.context.js +2 -2
  34. package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -1
  35. package/cjs/date/monthpicker/MonthPicker.js +1 -2
  36. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  37. package/cjs/dialog/backdrop/DialogBackdropInternal.d.ts +5 -0
  38. package/cjs/dialog/backdrop/DialogBackdropInternal.js +59 -0
  39. package/cjs/dialog/backdrop/DialogBackdropInternal.js.map +1 -0
  40. package/cjs/dialog/body/DialogBody.d.ts +18 -0
  41. package/cjs/{link/stories/RandomIcon.js → dialog/body/DialogBody.js} +33 -13
  42. package/cjs/dialog/body/DialogBody.js.map +1 -0
  43. package/cjs/dialog/close-trigger/DialogCloseTrigger.d.ts +20 -0
  44. package/cjs/dialog/close-trigger/DialogCloseTrigger.js +76 -0
  45. package/cjs/dialog/close-trigger/DialogCloseTrigger.js.map +1 -0
  46. package/cjs/dialog/description/DialogDescription.d.ts +19 -0
  47. package/cjs/dialog/description/DialogDescription.js +73 -0
  48. package/cjs/dialog/description/DialogDescription.js.map +1 -0
  49. package/cjs/dialog/footer/DialogFooter.d.ts +20 -0
  50. package/cjs/dialog/footer/DialogFooter.js +71 -0
  51. package/cjs/dialog/footer/DialogFooter.js.map +1 -0
  52. package/cjs/dialog/header/DialogHeader.d.ts +25 -0
  53. package/cjs/dialog/header/DialogHeader.js +77 -0
  54. package/cjs/dialog/header/DialogHeader.js.map +1 -0
  55. package/cjs/dialog/index.d.ts +18 -0
  56. package/cjs/dialog/index.js +23 -0
  57. package/cjs/dialog/index.js.map +1 -0
  58. package/cjs/dialog/popup/DialogPopup.d.ts +22 -0
  59. package/cjs/dialog/popup/DialogPopup.js +75 -0
  60. package/cjs/dialog/popup/DialogPopup.js.map +1 -0
  61. package/cjs/dialog/popup/DialogPopupInternal.d.ts +60 -0
  62. package/cjs/dialog/popup/DialogPopupInternal.js +166 -0
  63. package/cjs/dialog/popup/DialogPopupInternal.js.map +1 -0
  64. package/cjs/dialog/root/DialogRoot.context.d.ts +84 -0
  65. package/cjs/dialog/root/DialogRoot.context.js +11 -0
  66. package/cjs/dialog/root/DialogRoot.context.js.map +1 -0
  67. package/cjs/dialog/root/DialogRoot.d.ts +179 -0
  68. package/cjs/dialog/root/DialogRoot.js +133 -0
  69. package/cjs/dialog/root/DialogRoot.js.map +1 -0
  70. package/cjs/dialog/title/DialogTitle.d.ts +18 -0
  71. package/cjs/dialog/title/DialogTitle.js +80 -0
  72. package/cjs/dialog/title/DialogTitle.js.map +1 -0
  73. package/cjs/dialog/trigger/DialogTrigger.d.ts +20 -0
  74. package/cjs/dialog/trigger/DialogTrigger.js +71 -0
  75. package/cjs/dialog/trigger/DialogTrigger.js.map +1 -0
  76. package/cjs/expansion-card/ExpansionCardContent.js +1 -1
  77. package/cjs/expansion-card/ExpansionCardContent.js.map +1 -1
  78. package/cjs/form/checkbox/Checkbox.js +1 -1
  79. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  80. package/cjs/form/combobox/ComboboxWrapper.js +3 -1
  81. package/cjs/form/combobox/ComboboxWrapper.js.map +1 -1
  82. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +2 -4
  83. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  84. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.d.ts +1 -1
  85. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -2
  86. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  87. package/cjs/form/combobox/Input/Input.context.d.ts +1 -1
  88. package/cjs/form/combobox/Input/Input.context.js +2 -2
  89. package/cjs/form/combobox/Input/Input.context.js.map +1 -1
  90. package/cjs/form/combobox/Input/InputController.js.map +1 -1
  91. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +1 -1
  92. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +4 -2
  93. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  94. package/cjs/form/combobox/customOptionsContext.d.ts +1 -1
  95. package/cjs/form/combobox/customOptionsContext.js +2 -2
  96. package/cjs/form/combobox/customOptionsContext.js.map +1 -1
  97. package/cjs/form/error-summary/ErrorSummary.js +3 -1
  98. package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
  99. package/cjs/form/file-upload/FileUpload.context.d.ts +3 -2
  100. package/cjs/form/file-upload/FileUpload.context.js +4 -2
  101. package/cjs/form/file-upload/FileUpload.context.js.map +1 -1
  102. package/cjs/form/file-upload/parts/dropzone/Dropzone.js +2 -0
  103. package/cjs/form/file-upload/parts/dropzone/Dropzone.js.map +1 -1
  104. package/cjs/form/radio/Radio.js +1 -1
  105. package/cjs/form/radio/Radio.js.map +1 -1
  106. package/cjs/form/search/Search.js +3 -2
  107. package/cjs/form/search/Search.js.map +1 -1
  108. package/cjs/guide-panel/GuidePanel.js +1 -1
  109. package/cjs/guide-panel/GuidePanel.js.map +1 -1
  110. package/cjs/help-text/HelpText.js +1 -1
  111. package/cjs/help-text/HelpText.js.map +1 -1
  112. package/cjs/index.d.ts +1 -0
  113. package/cjs/index.js +3 -1
  114. package/cjs/index.js.map +1 -1
  115. package/cjs/inline-message/root/InlineMessage.js +1 -1
  116. package/cjs/inline-message/root/InlineMessage.js.map +1 -1
  117. package/cjs/internal-header/InternalHeader.js +1 -1
  118. package/cjs/internal-header/InternalHeader.js.map +1 -1
  119. package/cjs/internal-header/InternalHeaderUser.d.ts +2 -2
  120. package/cjs/internal-header/InternalHeaderUser.js +1 -1
  121. package/cjs/internal-header/InternalHeaderUser.js.map +1 -1
  122. package/cjs/layout/base/BasePrimitive.js +1 -1
  123. package/cjs/layout/base/BasePrimitive.js.map +1 -1
  124. package/cjs/layout/bleed/Bleed.js +1 -1
  125. package/cjs/layout/bleed/Bleed.js.map +1 -1
  126. package/cjs/layout/box/Box.js +1 -1
  127. package/cjs/layout/box/Box.js.map +1 -1
  128. package/cjs/layout/grid/HGrid.js +1 -1
  129. package/cjs/layout/grid/HGrid.js.map +1 -1
  130. package/cjs/layout/page/Page.js +1 -1
  131. package/cjs/layout/page/Page.js.map +1 -1
  132. package/cjs/layout/stack/Stack.js +1 -1
  133. package/cjs/layout/stack/Stack.js.map +1 -1
  134. package/cjs/link/Link.js +1 -1
  135. package/cjs/link/Link.js.map +1 -1
  136. package/cjs/link-card/LinkCard.js +2 -2
  137. package/cjs/link-card/LinkCard.js.map +1 -1
  138. package/cjs/list/List.js +1 -1
  139. package/cjs/list/List.js.map +1 -1
  140. package/cjs/modal/Modal.context.d.ts +4 -3
  141. package/cjs/modal/Modal.context.js +3 -3
  142. package/cjs/modal/Modal.context.js.map +1 -1
  143. package/cjs/modal/Modal.js +1 -1
  144. package/cjs/modal/Modal.js.map +1 -1
  145. package/cjs/overlays/action-menu/ActionMenu.js +6 -4
  146. package/cjs/overlays/action-menu/ActionMenu.js.map +1 -1
  147. package/cjs/overlays/dismissablelayer/DismissableLayer.d.ts +16 -4
  148. package/cjs/overlays/dismissablelayer/DismissableLayer.js +34 -5
  149. package/cjs/overlays/dismissablelayer/DismissableLayer.js.map +1 -1
  150. package/cjs/overlays/dismissablelayer/util/dispatchCustomEvent.d.ts +3 -2
  151. package/cjs/overlays/dismissablelayer/util/dispatchCustomEvent.js +1 -0
  152. package/cjs/overlays/dismissablelayer/util/dispatchCustomEvent.js.map +1 -1
  153. package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js +2 -2
  154. package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js.map +1 -1
  155. package/cjs/overlays/dismissablelayer/util/useFocusOutside.js +2 -2
  156. package/cjs/overlays/dismissablelayer/util/useFocusOutside.js.map +1 -1
  157. package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.d.ts +2 -2
  158. package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js +2 -2
  159. package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js.map +1 -1
  160. package/cjs/overlays/dismissablelayer/util/usePointerUpOutside.d.ts +10 -0
  161. package/cjs/overlays/dismissablelayer/util/usePointerUpOutside.js +79 -0
  162. package/cjs/overlays/dismissablelayer/util/usePointerUpOutside.js.map +1 -0
  163. package/cjs/overlays/floating/Floating.d.ts +3 -2
  164. package/cjs/overlays/floating/Floating.js +9 -12
  165. package/cjs/overlays/floating/Floating.js.map +1 -1
  166. package/cjs/overlays/floating-menu/Menu.js +15 -19
  167. package/cjs/overlays/floating-menu/Menu.js.map +1 -1
  168. package/cjs/overlays/floating-menu/parts/RovingFocus.js +2 -1
  169. package/cjs/overlays/floating-menu/parts/RovingFocus.js.map +1 -1
  170. package/cjs/pagination/PaginationItem.js +1 -1
  171. package/cjs/pagination/PaginationItem.js.map +1 -1
  172. package/cjs/popover/Popover.js +28 -6
  173. package/cjs/popover/Popover.js.map +1 -1
  174. package/cjs/portal/Portal.js +1 -1
  175. package/cjs/portal/Portal.js.map +1 -1
  176. package/cjs/process/Process.js +2 -4
  177. package/cjs/process/Process.js.map +1 -1
  178. package/cjs/progress-bar/ProgressBar.js +4 -8
  179. package/cjs/progress-bar/ProgressBar.js.map +1 -1
  180. package/cjs/stepper/context.d.ts +3 -2
  181. package/cjs/stepper/context.js +3 -5
  182. package/cjs/stepper/context.js.map +1 -1
  183. package/cjs/tabs/Tabs.context.d.ts +4 -3
  184. package/cjs/tabs/Tabs.context.js +3 -5
  185. package/cjs/tabs/Tabs.context.js.map +1 -1
  186. package/cjs/theme/Theme.d.ts +2 -2
  187. package/cjs/theme/Theme.js +4 -8
  188. package/cjs/theme/Theme.js.map +1 -1
  189. package/cjs/timeline/period/ClickablePeriod.js +1 -1
  190. package/cjs/timeline/period/ClickablePeriod.js.map +1 -1
  191. package/cjs/timeline/period/index.js +1 -1
  192. package/cjs/timeline/period/index.js.map +1 -1
  193. package/cjs/toggle-group/ToggleGroup.context.d.ts +4 -3
  194. package/cjs/toggle-group/ToggleGroup.context.js +3 -5
  195. package/cjs/toggle-group/ToggleGroup.context.js.map +1 -1
  196. package/cjs/toggle-group/ToggleGroup.js +1 -1
  197. package/cjs/toggle-group/ToggleGroup.js.map +1 -1
  198. package/cjs/tooltip/Tooltip.js +3 -1
  199. package/cjs/tooltip/Tooltip.js.map +1 -1
  200. package/cjs/util/composition-warning/CompositionWarning.d.ts +3 -2
  201. package/cjs/util/composition-warning/CompositionWarning.js +3 -2
  202. package/cjs/util/composition-warning/CompositionWarning.js.map +1 -1
  203. package/cjs/util/create-strict-context.d.ts +40 -0
  204. package/cjs/util/{create-context.js → create-strict-context.js} +21 -19
  205. package/cjs/util/create-strict-context.js.map +1 -0
  206. package/cjs/util/focus-boundary/FocusBoundary.d.ts +1 -1
  207. package/cjs/util/focus-boundary/FocusBoundary.js +59 -16
  208. package/cjs/util/focus-boundary/FocusBoundary.js.map +1 -1
  209. package/cjs/util/hideNonTargetElements.js +2 -2
  210. package/cjs/util/hooks/descendants/useDescendant.d.ts +1 -1
  211. package/cjs/util/hooks/descendants/useDescendant.js +2 -2
  212. package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
  213. package/cjs/util/hooks/index.d.ts +0 -1
  214. package/cjs/util/hooks/index.js +1 -3
  215. package/cjs/util/hooks/index.js.map +1 -1
  216. package/{esm/overlays/overlay → cjs/util}/hooks/useAnimationsFinished.d.ts +1 -1
  217. package/cjs/{overlays/overlay → util}/hooks/useAnimationsFinished.js +7 -8
  218. package/cjs/util/hooks/useAnimationsFinished.js.map +1 -0
  219. package/cjs/util/hooks/useControllableState.js +4 -4
  220. package/cjs/util/hooks/useControllableState.js.map +1 -1
  221. package/cjs/util/hooks/useEventCallback.d.ts +2 -5
  222. package/cjs/util/hooks/useEventCallback.js +2 -3
  223. package/cjs/util/hooks/useEventCallback.js.map +1 -1
  224. package/cjs/util/hooks/useId.js +4 -1
  225. package/cjs/util/hooks/useId.js.map +1 -1
  226. package/cjs/util/hooks/useMergeRefs.js +2 -1
  227. package/cjs/util/hooks/useMergeRefs.js.map +1 -1
  228. package/cjs/{overlays/overlay → util}/hooks/useOpenChangeAnimationComplete.js +3 -3
  229. package/cjs/util/hooks/useOpenChangeAnimationComplete.js.map +1 -0
  230. package/cjs/util/hooks/usePrevious.js.map +1 -1
  231. package/cjs/util/hooks/useScrollLock.js.map +1 -1
  232. package/cjs/{overlays/overlay → util}/hooks/useTransitionStatus.d.ts +6 -1
  233. package/cjs/{overlays/overlay → util}/hooks/useTransitionStatus.js +15 -4
  234. package/cjs/util/hooks/useTransitionStatus.js.map +1 -0
  235. package/cjs/util/hooks/useValueAsRef.d.ts +6 -0
  236. package/cjs/util/hooks/{useLatestRef.js → useValueAsRef.js} +3 -3
  237. package/cjs/util/hooks/useValueAsRef.js.map +1 -0
  238. package/cjs/util/link-anchor/LinkAnchor.js +2 -2
  239. package/cjs/util/link-anchor/LinkAnchor.js.map +1 -1
  240. package/cjs/util/resolveRef.d.ts +8 -0
  241. package/cjs/util/resolveRef.js +16 -0
  242. package/cjs/util/resolveRef.js.map +1 -0
  243. package/cjs/util/virtualfocus/Context.d.ts +4 -3
  244. package/cjs/util/virtualfocus/Context.js +4 -2
  245. package/cjs/util/virtualfocus/Context.js.map +1 -1
  246. package/esm/accordion/AccordionContent.js +1 -1
  247. package/esm/accordion/AccordionContent.js.map +1 -1
  248. package/esm/accordion/AccordionHeader.js +1 -1
  249. package/esm/accordion/AccordionHeader.js.map +1 -1
  250. package/esm/alert/base-alert/content/BaseAlertContent.js +1 -1
  251. package/esm/alert/base-alert/content/BaseAlertContent.js.map +1 -1
  252. package/esm/alert/base-alert/root/BaseAlertRoot.context.d.ts +3 -2
  253. package/esm/alert/base-alert/root/BaseAlertRoot.context.js +2 -3
  254. package/esm/alert/base-alert/root/BaseAlertRoot.context.js.map +1 -1
  255. package/esm/chips/Removable.js +1 -1
  256. package/esm/chips/Removable.js.map +1 -1
  257. package/esm/chips/Toggle.js +1 -1
  258. package/esm/chips/Toggle.js.map +1 -1
  259. package/esm/collapsible/Collapsible.context.d.ts +3 -2
  260. package/esm/collapsible/Collapsible.context.js +2 -2
  261. package/esm/collapsible/Collapsible.context.js.map +1 -1
  262. package/esm/copybutton/CopyButton.js +5 -5
  263. package/esm/copybutton/CopyButton.js.map +1 -1
  264. package/esm/date/Date.Dialog.js +1 -1
  265. package/esm/date/Date.Dialog.js.map +1 -1
  266. package/esm/date/Date.Input.d.ts +3 -2
  267. package/esm/date/Date.Input.js +3 -2
  268. package/esm/date/Date.Input.js.map +1 -1
  269. package/esm/date/Date.locale.d.ts +3 -2
  270. package/esm/date/Date.locale.js +4 -2
  271. package/esm/date/Date.locale.js.map +1 -1
  272. package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +1 -1
  273. package/esm/date/datepicker/parts/DatePicker.DayButton.js +1 -1
  274. package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -1
  275. package/esm/date/datepicker/parts/DatePicker.RDP.js +12 -2
  276. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  277. package/esm/date/monthpicker/MonthPicker.context.d.ts +1 -1
  278. package/esm/date/monthpicker/MonthPicker.context.js +2 -2
  279. package/esm/date/monthpicker/MonthPicker.context.js.map +1 -1
  280. package/esm/date/monthpicker/MonthPicker.js +1 -2
  281. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  282. package/esm/dialog/backdrop/DialogBackdropInternal.d.ts +5 -0
  283. package/esm/dialog/backdrop/DialogBackdropInternal.js +23 -0
  284. package/esm/dialog/backdrop/DialogBackdropInternal.js.map +1 -0
  285. package/esm/dialog/body/DialogBody.d.ts +18 -0
  286. package/esm/dialog/body/DialogBody.js +33 -0
  287. package/esm/dialog/body/DialogBody.js.map +1 -0
  288. package/esm/dialog/close-trigger/DialogCloseTrigger.d.ts +20 -0
  289. package/esm/dialog/close-trigger/DialogCloseTrigger.js +40 -0
  290. package/esm/dialog/close-trigger/DialogCloseTrigger.js.map +1 -0
  291. package/esm/dialog/description/DialogDescription.d.ts +19 -0
  292. package/esm/dialog/description/DialogDescription.js +37 -0
  293. package/esm/dialog/description/DialogDescription.js.map +1 -0
  294. package/esm/dialog/footer/DialogFooter.d.ts +20 -0
  295. package/esm/dialog/footer/DialogFooter.js +35 -0
  296. package/esm/dialog/footer/DialogFooter.js.map +1 -0
  297. package/esm/dialog/header/DialogHeader.d.ts +25 -0
  298. package/esm/dialog/header/DialogHeader.js +41 -0
  299. package/esm/dialog/header/DialogHeader.js.map +1 -0
  300. package/esm/dialog/index.d.ts +18 -0
  301. package/esm/dialog/index.js +11 -0
  302. package/esm/dialog/index.js.map +1 -0
  303. package/esm/dialog/popup/DialogPopup.d.ts +22 -0
  304. package/esm/dialog/popup/DialogPopup.js +39 -0
  305. package/esm/dialog/popup/DialogPopup.js.map +1 -0
  306. package/esm/dialog/popup/DialogPopupInternal.d.ts +60 -0
  307. package/esm/dialog/popup/DialogPopupInternal.js +130 -0
  308. package/esm/dialog/popup/DialogPopupInternal.js.map +1 -0
  309. package/esm/dialog/root/DialogRoot.context.d.ts +84 -0
  310. package/esm/dialog/root/DialogRoot.context.js +7 -0
  311. package/esm/dialog/root/DialogRoot.context.js.map +1 -0
  312. package/esm/dialog/root/DialogRoot.d.ts +179 -0
  313. package/esm/dialog/root/DialogRoot.js +97 -0
  314. package/esm/dialog/root/DialogRoot.js.map +1 -0
  315. package/esm/dialog/title/DialogTitle.d.ts +18 -0
  316. package/esm/dialog/title/DialogTitle.js +44 -0
  317. package/esm/dialog/title/DialogTitle.js.map +1 -0
  318. package/esm/dialog/trigger/DialogTrigger.d.ts +20 -0
  319. package/esm/dialog/trigger/DialogTrigger.js +35 -0
  320. package/esm/dialog/trigger/DialogTrigger.js.map +1 -0
  321. package/esm/expansion-card/ExpansionCardContent.js +1 -1
  322. package/esm/expansion-card/ExpansionCardContent.js.map +1 -1
  323. package/esm/form/checkbox/Checkbox.js +1 -1
  324. package/esm/form/checkbox/Checkbox.js.map +1 -1
  325. package/esm/form/combobox/ComboboxWrapper.js +3 -1
  326. package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
  327. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +2 -4
  328. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  329. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.d.ts +1 -1
  330. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -2
  331. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  332. package/esm/form/combobox/Input/Input.context.d.ts +1 -1
  333. package/esm/form/combobox/Input/Input.context.js +2 -2
  334. package/esm/form/combobox/Input/Input.context.js.map +1 -1
  335. package/esm/form/combobox/Input/InputController.js.map +1 -1
  336. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +1 -1
  337. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +4 -2
  338. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  339. package/esm/form/combobox/customOptionsContext.d.ts +1 -1
  340. package/esm/form/combobox/customOptionsContext.js +2 -2
  341. package/esm/form/combobox/customOptionsContext.js.map +1 -1
  342. package/esm/form/error-summary/ErrorSummary.js +3 -1
  343. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  344. package/esm/form/file-upload/FileUpload.context.d.ts +3 -2
  345. package/esm/form/file-upload/FileUpload.context.js +4 -2
  346. package/esm/form/file-upload/FileUpload.context.js.map +1 -1
  347. package/esm/form/file-upload/parts/dropzone/Dropzone.js +2 -0
  348. package/esm/form/file-upload/parts/dropzone/Dropzone.js.map +1 -1
  349. package/esm/form/radio/Radio.js +1 -1
  350. package/esm/form/radio/Radio.js.map +1 -1
  351. package/esm/form/search/Search.js +3 -2
  352. package/esm/form/search/Search.js.map +1 -1
  353. package/esm/guide-panel/GuidePanel.js +1 -1
  354. package/esm/guide-panel/GuidePanel.js.map +1 -1
  355. package/esm/help-text/HelpText.js +1 -1
  356. package/esm/help-text/HelpText.js.map +1 -1
  357. package/esm/index.d.ts +1 -0
  358. package/esm/index.js +1 -0
  359. package/esm/index.js.map +1 -1
  360. package/esm/inline-message/root/InlineMessage.js +1 -1
  361. package/esm/inline-message/root/InlineMessage.js.map +1 -1
  362. package/esm/internal-header/InternalHeader.js +1 -1
  363. package/esm/internal-header/InternalHeader.js.map +1 -1
  364. package/esm/internal-header/InternalHeaderUser.d.ts +2 -2
  365. package/esm/internal-header/InternalHeaderUser.js +1 -1
  366. package/esm/internal-header/InternalHeaderUser.js.map +1 -1
  367. package/esm/layout/base/BasePrimitive.js +1 -1
  368. package/esm/layout/base/BasePrimitive.js.map +1 -1
  369. package/esm/layout/bleed/Bleed.js +1 -1
  370. package/esm/layout/bleed/Bleed.js.map +1 -1
  371. package/esm/layout/box/Box.js +1 -1
  372. package/esm/layout/box/Box.js.map +1 -1
  373. package/esm/layout/grid/HGrid.js +1 -1
  374. package/esm/layout/grid/HGrid.js.map +1 -1
  375. package/esm/layout/page/Page.js +1 -1
  376. package/esm/layout/page/Page.js.map +1 -1
  377. package/esm/layout/stack/Stack.js +1 -1
  378. package/esm/layout/stack/Stack.js.map +1 -1
  379. package/esm/link/Link.js +1 -1
  380. package/esm/link/Link.js.map +1 -1
  381. package/esm/link-card/LinkCard.js +2 -2
  382. package/esm/link-card/LinkCard.js.map +1 -1
  383. package/esm/list/List.js +1 -1
  384. package/esm/list/List.js.map +1 -1
  385. package/esm/modal/Modal.context.d.ts +4 -3
  386. package/esm/modal/Modal.context.js +2 -2
  387. package/esm/modal/Modal.context.js.map +1 -1
  388. package/esm/modal/Modal.js +1 -1
  389. package/esm/modal/Modal.js.map +1 -1
  390. package/esm/overlays/action-menu/ActionMenu.js +6 -4
  391. package/esm/overlays/action-menu/ActionMenu.js.map +1 -1
  392. package/esm/overlays/dismissablelayer/DismissableLayer.d.ts +16 -4
  393. package/esm/overlays/dismissablelayer/DismissableLayer.js +34 -5
  394. package/esm/overlays/dismissablelayer/DismissableLayer.js.map +1 -1
  395. package/esm/overlays/dismissablelayer/util/dispatchCustomEvent.d.ts +3 -2
  396. package/esm/overlays/dismissablelayer/util/dispatchCustomEvent.js +1 -0
  397. package/esm/overlays/dismissablelayer/util/dispatchCustomEvent.js.map +1 -1
  398. package/esm/overlays/dismissablelayer/util/useEscapeKeydown.js +2 -2
  399. package/esm/overlays/dismissablelayer/util/useEscapeKeydown.js.map +1 -1
  400. package/esm/overlays/dismissablelayer/util/useFocusOutside.js +2 -2
  401. package/esm/overlays/dismissablelayer/util/useFocusOutside.js.map +1 -1
  402. package/esm/overlays/dismissablelayer/util/usePointerDownOutside.d.ts +2 -2
  403. package/esm/overlays/dismissablelayer/util/usePointerDownOutside.js +2 -2
  404. package/esm/overlays/dismissablelayer/util/usePointerDownOutside.js.map +1 -1
  405. package/esm/overlays/dismissablelayer/util/usePointerUpOutside.d.ts +10 -0
  406. package/esm/overlays/dismissablelayer/util/usePointerUpOutside.js +76 -0
  407. package/esm/overlays/dismissablelayer/util/usePointerUpOutside.js.map +1 -0
  408. package/esm/overlays/floating/Floating.d.ts +3 -2
  409. package/esm/overlays/floating/Floating.js +9 -12
  410. package/esm/overlays/floating/Floating.js.map +1 -1
  411. package/esm/overlays/floating-menu/Menu.js +16 -20
  412. package/esm/overlays/floating-menu/Menu.js.map +1 -1
  413. package/esm/overlays/floating-menu/parts/RovingFocus.js +3 -2
  414. package/esm/overlays/floating-menu/parts/RovingFocus.js.map +1 -1
  415. package/esm/pagination/PaginationItem.js +1 -1
  416. package/esm/pagination/PaginationItem.js.map +1 -1
  417. package/esm/popover/Popover.js +28 -6
  418. package/esm/popover/Popover.js.map +1 -1
  419. package/esm/portal/Portal.js +1 -1
  420. package/esm/portal/Portal.js.map +1 -1
  421. package/esm/process/Process.js +2 -4
  422. package/esm/process/Process.js.map +1 -1
  423. package/esm/progress-bar/ProgressBar.js +4 -8
  424. package/esm/progress-bar/ProgressBar.js.map +1 -1
  425. package/esm/stepper/context.d.ts +3 -2
  426. package/esm/stepper/context.js +2 -4
  427. package/esm/stepper/context.js.map +1 -1
  428. package/esm/tabs/Tabs.context.d.ts +4 -3
  429. package/esm/tabs/Tabs.context.js +2 -4
  430. package/esm/tabs/Tabs.context.js.map +1 -1
  431. package/esm/theme/Theme.d.ts +2 -2
  432. package/esm/theme/Theme.js +4 -8
  433. package/esm/theme/Theme.js.map +1 -1
  434. package/esm/timeline/period/ClickablePeriod.js +1 -1
  435. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  436. package/esm/timeline/period/index.js +1 -1
  437. package/esm/timeline/period/index.js.map +1 -1
  438. package/esm/toggle-group/ToggleGroup.context.d.ts +4 -3
  439. package/esm/toggle-group/ToggleGroup.context.js +2 -4
  440. package/esm/toggle-group/ToggleGroup.context.js.map +1 -1
  441. package/esm/toggle-group/ToggleGroup.js +1 -1
  442. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  443. package/esm/tooltip/Tooltip.js +3 -1
  444. package/esm/tooltip/Tooltip.js.map +1 -1
  445. package/esm/util/composition-warning/CompositionWarning.d.ts +3 -2
  446. package/esm/util/composition-warning/CompositionWarning.js +3 -2
  447. package/esm/util/composition-warning/CompositionWarning.js.map +1 -1
  448. package/esm/util/create-strict-context.d.ts +40 -0
  449. package/esm/util/{create-context.js → create-strict-context.js} +22 -19
  450. package/esm/util/create-strict-context.js.map +1 -0
  451. package/esm/util/focus-boundary/FocusBoundary.d.ts +1 -1
  452. package/esm/util/focus-boundary/FocusBoundary.js +57 -14
  453. package/esm/util/focus-boundary/FocusBoundary.js.map +1 -1
  454. package/esm/util/hideNonTargetElements.js +2 -2
  455. package/esm/util/hooks/descendants/useDescendant.d.ts +1 -1
  456. package/esm/util/hooks/descendants/useDescendant.js +2 -2
  457. package/esm/util/hooks/descendants/useDescendant.js.map +1 -1
  458. package/esm/util/hooks/index.d.ts +0 -1
  459. package/esm/util/hooks/index.js +0 -1
  460. package/esm/util/hooks/index.js.map +1 -1
  461. package/{cjs/overlays/overlay → esm/util}/hooks/useAnimationsFinished.d.ts +1 -1
  462. package/esm/{overlays/overlay → util}/hooks/useAnimationsFinished.js +7 -8
  463. package/esm/util/hooks/useAnimationsFinished.js.map +1 -0
  464. package/esm/util/hooks/useControllableState.js +4 -4
  465. package/esm/util/hooks/useControllableState.js.map +1 -1
  466. package/esm/util/hooks/useEventCallback.d.ts +2 -5
  467. package/esm/util/hooks/useEventCallback.js +4 -4
  468. package/esm/util/hooks/useEventCallback.js.map +1 -1
  469. package/esm/util/hooks/useId.js +4 -1
  470. package/esm/util/hooks/useId.js.map +1 -1
  471. package/esm/util/hooks/useMergeRefs.js +2 -1
  472. package/esm/util/hooks/useMergeRefs.js.map +1 -1
  473. package/esm/{overlays/overlay → util}/hooks/useOpenChangeAnimationComplete.js +3 -3
  474. package/esm/util/hooks/useOpenChangeAnimationComplete.js.map +1 -0
  475. package/esm/util/hooks/usePrevious.js.map +1 -1
  476. package/esm/util/hooks/useScrollLock.js.map +1 -1
  477. package/esm/{overlays/overlay → util}/hooks/useTransitionStatus.d.ts +6 -1
  478. package/esm/{overlays/overlay → util}/hooks/useTransitionStatus.js +12 -2
  479. package/esm/util/hooks/useTransitionStatus.js.map +1 -0
  480. package/esm/util/hooks/useValueAsRef.d.ts +6 -0
  481. package/esm/util/hooks/{useLatestRef.js → useValueAsRef.js} +3 -2
  482. package/esm/util/hooks/useValueAsRef.js.map +1 -0
  483. package/esm/util/link-anchor/LinkAnchor.js +2 -2
  484. package/esm/util/link-anchor/LinkAnchor.js.map +1 -1
  485. package/esm/util/resolveRef.d.ts +8 -0
  486. package/esm/util/resolveRef.js +14 -0
  487. package/esm/util/resolveRef.js.map +1 -0
  488. package/esm/util/virtualfocus/Context.d.ts +4 -3
  489. package/esm/util/virtualfocus/Context.js +4 -2
  490. package/esm/util/virtualfocus/Context.js.map +1 -1
  491. package/package.json +13 -3
  492. package/src/accordion/AccordionContent.tsx +1 -1
  493. package/src/accordion/AccordionHeader.tsx +1 -1
  494. package/src/alert/base-alert/content/BaseAlertContent.tsx +1 -1
  495. package/src/alert/base-alert/root/BaseAlertRoot.context.tsx +5 -5
  496. package/src/chips/Removable.tsx +1 -1
  497. package/src/chips/Toggle.tsx +1 -1
  498. package/src/collapsible/Collapsible.context.tsx +9 -7
  499. package/src/copybutton/CopyButton.tsx +5 -5
  500. package/src/date/Date.Dialog.tsx +0 -1
  501. package/src/date/Date.Input.tsx +8 -5
  502. package/src/date/Date.locale.ts +7 -3
  503. package/src/date/datepicker/parts/DatePicker.DayButton.tsx +1 -1
  504. package/src/date/datepicker/parts/DatePicker.RDP.tsx +12 -2
  505. package/src/date/monthpicker/MonthPicker.context.tsx +9 -7
  506. package/src/date/monthpicker/MonthPicker.tsx +1 -2
  507. package/src/dialog/backdrop/DialogBackdropInternal.tsx +29 -0
  508. package/src/dialog/body/DialogBody.tsx +36 -0
  509. package/src/dialog/close-trigger/DialogCloseTrigger.tsx +51 -0
  510. package/src/dialog/description/DialogDescription.tsx +44 -0
  511. package/src/dialog/footer/DialogFooter.tsx +38 -0
  512. package/src/dialog/header/DialogHeader.tsx +62 -0
  513. package/src/dialog/index.ts +19 -0
  514. package/src/dialog/popup/DialogPopup.tsx +61 -0
  515. package/src/dialog/popup/DialogPopupInternal.tsx +285 -0
  516. package/src/dialog/root/DialogRoot.context.ts +89 -0
  517. package/src/dialog/root/DialogRoot.tsx +296 -0
  518. package/src/dialog/title/DialogTitle.tsx +52 -0
  519. package/src/dialog/trigger/DialogTrigger.tsx +47 -0
  520. package/src/expansion-card/ExpansionCardContent.tsx +1 -1
  521. package/src/form/checkbox/Checkbox.tsx +1 -1
  522. package/src/form/combobox/ComboboxWrapper.tsx +1 -0
  523. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +1 -2
  524. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +9 -7
  525. package/src/form/combobox/Input/Input.context.tsx +3 -3
  526. package/src/form/combobox/Input/InputController.tsx +1 -0
  527. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +7 -3
  528. package/src/form/combobox/customOptionsContext.tsx +9 -7
  529. package/src/form/error-summary/ErrorSummary.tsx +1 -0
  530. package/src/form/file-upload/FileUpload.context.tsx +7 -3
  531. package/src/form/file-upload/parts/dropzone/Dropzone.tsx +6 -4
  532. package/src/form/radio/Radio.tsx +1 -1
  533. package/src/form/search/Search.tsx +3 -2
  534. package/src/guide-panel/GuidePanel.tsx +1 -1
  535. package/src/help-text/HelpText.tsx +1 -1
  536. package/src/index.ts +12 -0
  537. package/src/inline-message/root/InlineMessage.tsx +2 -1
  538. package/src/internal-header/InternalHeader.tsx +1 -1
  539. package/src/internal-header/InternalHeaderUser.tsx +4 -4
  540. package/src/layout/base/BasePrimitive.tsx +1 -1
  541. package/src/layout/bleed/Bleed.tsx +1 -1
  542. package/src/layout/box/Box.tsx +1 -1
  543. package/src/layout/grid/HGrid.tsx +1 -1
  544. package/src/layout/page/Page.tsx +1 -1
  545. package/src/layout/stack/Stack.tsx +1 -1
  546. package/src/link/Link.tsx +1 -1
  547. package/src/link-card/LinkCard.tsx +3 -3
  548. package/src/list/List.tsx +1 -1
  549. package/src/modal/Modal.context.ts +4 -4
  550. package/src/modal/Modal.tsx +1 -1
  551. package/src/overlays/action-menu/ActionMenu.tsx +7 -5
  552. package/src/overlays/dismissablelayer/DismissableLayer.tsx +65 -13
  553. package/src/overlays/dismissablelayer/util/dispatchCustomEvent.ts +3 -2
  554. package/src/overlays/dismissablelayer/util/useEscapeKeydown.ts +2 -2
  555. package/src/overlays/dismissablelayer/util/useFocusOutside.ts +2 -2
  556. package/src/overlays/dismissablelayer/util/usePointerDownOutside.ts +4 -4
  557. package/src/overlays/dismissablelayer/util/usePointerUpOutside.ts +95 -0
  558. package/src/overlays/floating/Floating.tsx +15 -20
  559. package/src/overlays/floating-menu/Menu.tsx +25 -26
  560. package/src/overlays/floating-menu/parts/RovingFocus.tsx +3 -2
  561. package/src/pagination/PaginationItem.tsx +1 -1
  562. package/src/popover/Popover.tsx +35 -6
  563. package/src/portal/Portal.tsx +1 -1
  564. package/src/process/Process.tsx +3 -5
  565. package/src/progress-bar/ProgressBar.tsx +2 -4
  566. package/src/stepper/context.ts +8 -8
  567. package/src/tabs/Tabs.context.ts +7 -8
  568. package/src/theme/Theme.tsx +15 -17
  569. package/src/timeline/period/ClickablePeriod.tsx +1 -1
  570. package/src/timeline/period/index.tsx +2 -1
  571. package/src/toggle-group/ToggleGroup.context.ts +8 -8
  572. package/src/toggle-group/ToggleGroup.tsx +1 -1
  573. package/src/tooltip/Tooltip.tsx +3 -1
  574. package/src/util/composition-warning/CompositionWarning.tsx +4 -3
  575. package/src/util/create-strict-context.tsx +91 -0
  576. package/src/util/focus-boundary/FocusBoundary.tsx +76 -17
  577. package/src/util/hideNonTargetElements.ts +2 -2
  578. package/src/util/hooks/descendants/useDescendant.tsx +5 -4
  579. package/src/util/hooks/index.ts +0 -1
  580. package/src/{overlays/overlay → util}/hooks/useAnimationsFinished.ts +8 -9
  581. package/src/util/hooks/useControllableState.ts +10 -13
  582. package/src/util/hooks/useEventCallback.ts +5 -6
  583. package/src/util/hooks/useId.ts +6 -1
  584. package/src/util/hooks/useMergeRefs.ts +3 -1
  585. package/src/{overlays/overlay → util}/hooks/useOpenChangeAnimationComplete.ts +3 -3
  586. package/src/util/hooks/usePrevious.ts +1 -0
  587. package/src/util/hooks/useScrollLock.ts +0 -1
  588. package/src/{overlays/overlay → util}/hooks/useTransitionStatus.ts +14 -2
  589. package/src/util/hooks/{useLatestRef.ts → useValueAsRef.ts} +3 -1
  590. package/src/util/link-anchor/LinkAnchor.tsx +7 -5
  591. package/src/util/resolveRef.ts +20 -0
  592. package/src/util/virtualfocus/Context.tsx +8 -6
  593. package/cjs/link/stories/RandomIcon.d.ts +0 -2
  594. package/cjs/link/stories/RandomIcon.js.map +0 -1
  595. package/cjs/overlays/overlay/hooks/useAnimationsFinished.js.map +0 -1
  596. package/cjs/overlays/overlay/hooks/useOpenChangeAnimationComplete.js.map +0 -1
  597. package/cjs/overlays/overlay/hooks/useTransitionStatus.js.map +0 -1
  598. package/cjs/util/create-context.d.ts +0 -20
  599. package/cjs/util/create-context.js.map +0 -1
  600. package/cjs/util/hooks/useCallbackRef.d.ts +0 -6
  601. package/cjs/util/hooks/useCallbackRef.js +0 -18
  602. package/cjs/util/hooks/useCallbackRef.js.map +0 -1
  603. package/cjs/util/hooks/useLatestRef.d.ts +0 -5
  604. package/cjs/util/hooks/useLatestRef.js.map +0 -1
  605. package/esm/link/stories/RandomIcon.d.ts +0 -2
  606. package/esm/link/stories/RandomIcon.js +0 -9
  607. package/esm/link/stories/RandomIcon.js.map +0 -1
  608. package/esm/overlays/overlay/hooks/useAnimationsFinished.js.map +0 -1
  609. package/esm/overlays/overlay/hooks/useOpenChangeAnimationComplete.js.map +0 -1
  610. package/esm/overlays/overlay/hooks/useTransitionStatus.js.map +0 -1
  611. package/esm/util/create-context.d.ts +0 -20
  612. package/esm/util/create-context.js.map +0 -1
  613. package/esm/util/hooks/useCallbackRef.d.ts +0 -6
  614. package/esm/util/hooks/useCallbackRef.js +0 -15
  615. package/esm/util/hooks/useCallbackRef.js.map +0 -1
  616. package/esm/util/hooks/useLatestRef.d.ts +0 -5
  617. package/esm/util/hooks/useLatestRef.js.map +0 -1
  618. package/src/link/stories/RandomIcon.tsx +0 -10
  619. package/src/util/create-context.tsx +0 -79
  620. package/src/util/hooks/useCallbackRef.ts +0 -20
  621. /package/cjs/{overlays/overlay → util}/hooks/useOpenChangeAnimationComplete.d.ts +0 -0
  622. /package/esm/{overlays/overlay → util}/hooks/useOpenChangeAnimationComplete.d.ts +0 -0
@@ -0,0 +1,296 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from "react";
2
+ import { useId } from "../../util";
3
+ import { useControllableState } from "../../util/hooks/useControllableState";
4
+ import { useEventCallback } from "../../util/hooks/useEventCallback";
5
+ import { useTransitionStatus } from "../../util/hooks/useTransitionStatus";
6
+ import { DialogBody } from "../body/DialogBody";
7
+ import { DialogCloseTrigger } from "../close-trigger/DialogCloseTrigger";
8
+ import { DialogDescription } from "../description/DialogDescription";
9
+ import { DialogFooter } from "../footer/DialogFooter";
10
+ import { DialogHeader } from "../header/DialogHeader";
11
+ import { DialogPopup } from "../popup/DialogPopup";
12
+ import { DialogTitle } from "../title/DialogTitle";
13
+ import { DialogTrigger } from "../trigger/DialogTrigger";
14
+ import { DialogContextProvider, useDialogContext } from "./DialogRoot.context";
15
+
16
+ interface DialogProps {
17
+ children: React.ReactNode;
18
+ /**
19
+ * Whether the dialog is currently open.
20
+ */
21
+ open?: boolean;
22
+ /**
23
+ * Whether the dialog should be initially open.
24
+ *
25
+ * To render a controlled dialog, use the `open` prop instead.
26
+ * @default false
27
+ */
28
+ defaultOpen?: boolean;
29
+ /**
30
+ * Event handler called when the dialog is opened or closed.
31
+ */
32
+ onOpenChange?: (nextOpen: boolean, event: Event) => void;
33
+ /**
34
+ * Event handler called after any animations complete when the dialog is opened or closed.
35
+ */
36
+ onOpenChangeComplete?: (open: boolean) => void;
37
+ /**
38
+ * Updates sub-component padding + DialogTitle and DialogDescription font-size.
39
+ * @default "medium"
40
+ */
41
+ size?: "medium" | "small";
42
+ }
43
+
44
+ interface DialogComponent extends React.FC<DialogProps> {
45
+ /**
46
+ * @see 🏷️ {@link DialogTriggerProps}
47
+ * @example
48
+ * ```jsx
49
+ * <Dialog>
50
+ * <Dialog.Trigger>
51
+ * <Button>Open dialog</Button>
52
+ * </Dialog.Trigger>
53
+ * </Dialog>
54
+ * ```
55
+ */
56
+ Trigger: typeof DialogTrigger;
57
+ /**
58
+ * @see 🏷️ {@link DialogCloseTriggerProps}
59
+ * @example
60
+ * ```jsx
61
+ * <Dialog>
62
+ * <Dialog.Popup>
63
+ * <Dialog.CloseTrigger>
64
+ * <Button>Close dialog</Button>
65
+ * </Dialog.CloseTrigger>
66
+ * </Dialog.Popup>
67
+ * </Dialog>
68
+ * ```
69
+ */
70
+ CloseTrigger: typeof DialogCloseTrigger;
71
+ /**
72
+ * @see 🏷️ {@link DialogPopupProps}
73
+ * @example
74
+ * ```jsx
75
+ * <Dialog>
76
+ * <Dialog.Popup>
77
+ * ...
78
+ * </Dialog.Popup>
79
+ * </Dialog>
80
+ * ```
81
+ */
82
+ Popup: typeof DialogPopup;
83
+
84
+ /**
85
+ * @see 🏷️ {@link DialogHeaderProps}
86
+ * @example
87
+ * ```jsx
88
+ * <Dialog>
89
+ * <Dialog.Popup>
90
+ * <Dialog.Header>
91
+ * <Dialog.Title>Dialog title</Dialog.Title>
92
+ * </Dialog.Header>
93
+ * </Dialog.Popup>
94
+ * </Dialog>
95
+ * ```
96
+ */
97
+ Header: typeof DialogHeader;
98
+
99
+ /**
100
+ * @see 🏷️ {@link DialogTitleProps}
101
+ * @example
102
+ * ```jsx
103
+ * <Dialog>
104
+ * <Dialog.Popup>
105
+ * <Dialog.Header>
106
+ * <Dialog.Title>Dialog title</Dialog.Title>
107
+ * </Dialog.Header>
108
+ * </Dialog.Popup>
109
+ * </Dialog>
110
+ * ```
111
+ */
112
+ Title: typeof DialogTitle;
113
+
114
+ /**
115
+ * @see 🏷️ {@link DialogDescriptionProps}
116
+ * @example
117
+ * ```jsx
118
+ * <Dialog>
119
+ * <Dialog.Popup>
120
+ * <Dialog.Header>
121
+ * <Dialog.Title>Dialog title</Dialog.Title>
122
+ * <Dialog.Description>Dialog description</Dialog.Description>
123
+ * </Dialog.Header>
124
+ * </Dialog.Popup>
125
+ * </Dialog>
126
+ * ```
127
+ */
128
+ Description: typeof DialogDescription;
129
+
130
+ /**
131
+ * @see 🏷️ {@link DialogBodyProps}
132
+ * @example
133
+ * ```jsx
134
+ * <Dialog>
135
+ * <Dialog.Popup>
136
+ * <Dialog.Body>
137
+ * Dialog body content
138
+ * </Dialog.Body>
139
+ * </Dialog.Popup>
140
+ * </Dialog>
141
+ * ```
142
+ */
143
+ Body: typeof DialogBody;
144
+
145
+ /**
146
+ * @see 🏷️ {@link DialogFooterProps}
147
+ * @example
148
+ * ```jsx
149
+ * <Dialog>
150
+ * <Dialog.Popup>
151
+ * <Dialog.Footer>
152
+ * <Dialog.CloseTrigger>
153
+ * <Button>Close dialog</Button>
154
+ * </Dialog.CloseTrigger>
155
+ * </Dialog.Footer>
156
+ * </Dialog.Popup>
157
+ * </Dialog>
158
+ * ```
159
+ */
160
+ Footer: typeof DialogFooter;
161
+ }
162
+
163
+ /**
164
+ * Dialog component for displaying modal content on top of an application.
165
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/dialog)
166
+ * @see 🏷️ {@link DialogProps}
167
+ * @example
168
+ * ```jsx
169
+ * <Dialog>
170
+ * <Dialog.Trigger>
171
+ * <Button>Open dialog</Button>
172
+ * </Dialog.Trigger>
173
+ * <Dialog.Popup>
174
+ * <Dialog.Header>
175
+ * <Dialog.Title>Dialog title</Dialog.Title>
176
+ * <Dialog.Description>Dialog description</Dialog.Description>
177
+ * </Dialog.Header>
178
+ * <Dialog.Body>
179
+ * Dialog body content
180
+ * </Dialog.Body>
181
+ * <Dialog.Footer>
182
+ *. <Dialog.CloseTrigger>
183
+ *. <Button>Close dialog</Button>
184
+ *. </Dialog.CloseTrigger>
185
+ * </Dialog.Footer>
186
+ * </Dialog.Popup>
187
+ * </Dialog>
188
+ * ```
189
+ */
190
+ const Dialog: DialogComponent = (props: DialogProps) => {
191
+ const {
192
+ children,
193
+ defaultOpen = false,
194
+ open: openParam,
195
+ onOpenChange,
196
+ onOpenChangeComplete,
197
+ size = "medium",
198
+ } = props;
199
+
200
+ const [open, setOpenStateInternal] = useControllableState({
201
+ defaultValue: defaultOpen,
202
+ value: openParam,
203
+ });
204
+
205
+ const { mounted, setMounted, transitionStatus } = useTransitionStatus(open);
206
+
207
+ const popupRef = useRef<HTMLDivElement | null>(null);
208
+
209
+ const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(
210
+ null,
211
+ );
212
+ const [popupElement, setPopupElement] = useState<HTMLElement | null>(null);
213
+
214
+ const defaultId = useId();
215
+
216
+ const [titleId, setTitleId] = useState<string>();
217
+
218
+ const [ownNestedOpenDialogs, setOwnNestedOpenDialogs] = useState(0);
219
+
220
+ const nestedDialogOpened = useCallback((nestedCount: number) => {
221
+ setOwnNestedOpenDialogs(nestedCount + 1);
222
+ }, []);
223
+
224
+ const nestedDialogClosed = useCallback(() => {
225
+ setOwnNestedOpenDialogs(0);
226
+ }, []);
227
+
228
+ const parentContext = useDialogContext(false);
229
+
230
+ /**
231
+ * Notify parent dialog about nested dialogs opening/closing.
232
+ * This allows us to better hide/obscure parent dialogs when nested dialogs are opened.
233
+ *
234
+ * This pattern is not good for deep nesting since the context updates will cause cascading renders
235
+ * but should work fine for 1-2 levels of nesting which is the most common use case here.
236
+ */
237
+ useEffect(() => {
238
+ if (open && parentContext) {
239
+ parentContext.nestedDialogOpened(ownNestedOpenDialogs);
240
+ return () => parentContext.nestedDialogClosed();
241
+ }
242
+ }, [open, parentContext, ownNestedOpenDialogs]);
243
+
244
+ /**
245
+ * Passing the original event to onOpenChange to allow preventing the state change
246
+ */
247
+ const setOpen = useEventCallback(
248
+ (nextOpen: boolean, originalEvent: Event) => {
249
+ onOpenChange?.(nextOpen, originalEvent);
250
+
251
+ if (originalEvent?.defaultPrevented) {
252
+ return;
253
+ }
254
+
255
+ setOpenStateInternal(nextOpen);
256
+ },
257
+ );
258
+
259
+ return (
260
+ <DialogContextProvider
261
+ open={open}
262
+ setOpen={setOpen}
263
+ mounted={mounted}
264
+ transitionStatus={transitionStatus}
265
+ popupRef={popupRef}
266
+ setPopupElement={setPopupElement}
267
+ popupElement={popupElement}
268
+ popupId={popupElement?.id ?? defaultId}
269
+ setTriggerElement={setTriggerElement}
270
+ triggerElement={triggerElement}
271
+ nested={!!parentContext}
272
+ nestedDialogOpened={nestedDialogOpened}
273
+ nestedDialogClosed={nestedDialogClosed}
274
+ nestedOpenDialogCount={ownNestedOpenDialogs}
275
+ size={size}
276
+ titleId={titleId}
277
+ setTitleId={setTitleId}
278
+ onOpenChangeComplete={onOpenChangeComplete}
279
+ setMounted={setMounted}
280
+ >
281
+ {children}
282
+ </DialogContextProvider>
283
+ );
284
+ };
285
+
286
+ Dialog.Trigger = DialogTrigger;
287
+ Dialog.CloseTrigger = DialogCloseTrigger;
288
+ Dialog.Header = DialogHeader;
289
+ Dialog.Title = DialogTitle;
290
+ Dialog.Description = DialogDescription;
291
+ Dialog.Body = DialogBody;
292
+ Dialog.Footer = DialogFooter;
293
+ Dialog.Popup = DialogPopup;
294
+
295
+ export { Dialog };
296
+ export type { DialogProps };
@@ -0,0 +1,52 @@
1
+ import React, { forwardRef } from "react";
2
+ import { useRenameCSS } from "../../theme/Theme";
3
+ import { Heading } from "../../typography";
4
+ import { useClientLayoutEffect, useId } from "../../util";
5
+ import { useDialogContext } from "../root/DialogRoot.context";
6
+
7
+ type DialogTitleProps = React.HTMLAttributes<HTMLHeadingElement>;
8
+
9
+ /**
10
+ * @see 🏷️ {@link DialogTitleProps}
11
+ * @example
12
+ * ```jsx
13
+ * <Dialog>
14
+ * <Dialog.Popup>
15
+ * <Dialog.Header>
16
+ * <Dialog.Title>Dialog title</Dialog.Title>
17
+ * </Dialog.Header>
18
+ * </Dialog.Popup>
19
+ * </Dialog>
20
+ * ```
21
+ */
22
+ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
23
+ ({ className, children, id, ...restProps }, forwardedRef) => {
24
+ const { cn } = useRenameCSS();
25
+ const { size, setTitleId } = useDialogContext();
26
+
27
+ const titleId = useId(id);
28
+
29
+ useClientLayoutEffect(() => {
30
+ setTitleId(titleId);
31
+ return () => {
32
+ setTitleId(undefined);
33
+ };
34
+ }, [titleId, setTitleId]);
35
+
36
+ return (
37
+ <Heading
38
+ {...restProps}
39
+ id={titleId}
40
+ ref={forwardedRef}
41
+ className={cn("navds-dialog__title", className)}
42
+ size={size}
43
+ level="1"
44
+ >
45
+ {children}
46
+ </Heading>
47
+ );
48
+ },
49
+ );
50
+
51
+ export { DialogTitle };
52
+ export type { DialogTitleProps };
@@ -0,0 +1,47 @@
1
+ import React, { forwardRef } from "react";
2
+ import { Slot } from "../../slot/Slot";
3
+ import { composeEventHandlers } from "../../util/composeEventHandlers";
4
+ import { useMergeRefs } from "../../util/hooks";
5
+ import { useDialogContext } from "../root/DialogRoot.context";
6
+
7
+ type DialogTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
8
+ children: React.ReactElement;
9
+ };
10
+
11
+ /**
12
+ * @see 🏷️ {@link DialogTriggerProps}
13
+ * @example
14
+ * ```jsx
15
+ * <Dialog>
16
+ * <Dialog.Trigger>
17
+ * <Button>Open dialog</Button>
18
+ * </Dialog.Trigger>
19
+ * </Dialog>
20
+ * ```
21
+ */
22
+ const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(
23
+ ({ children, onClick, ...restProps }, forwardedRef) => {
24
+ const { open, setOpen, setTriggerElement, popupId } = useDialogContext();
25
+
26
+ const mergedRefs = useMergeRefs(forwardedRef, setTriggerElement);
27
+
28
+ return (
29
+ <Slot
30
+ type="button"
31
+ {...restProps}
32
+ ref={mergedRefs}
33
+ onClick={composeEventHandlers(onClick, (event) =>
34
+ setOpen(!open, event.nativeEvent),
35
+ )}
36
+ aria-haspopup="dialog"
37
+ aria-expanded={open}
38
+ aria-controls={open ? popupId : undefined}
39
+ >
40
+ {children}
41
+ </Slot>
42
+ );
43
+ },
44
+ );
45
+
46
+ export { DialogTrigger };
47
+ export type { DialogTriggerProps };
@@ -14,7 +14,7 @@ const ExpansionCardContent = forwardRef<
14
14
  >(({ children, className, ...rest }, ref) => {
15
15
  const { cn } = useRenameCSS();
16
16
  const panelContext = useContext(ExpansionCardContext);
17
- const themeContext = useThemeInternal(false);
17
+ const themeContext = useThemeInternal();
18
18
 
19
19
  if (panelContext === null) {
20
20
  console.error(
@@ -12,7 +12,7 @@ export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(
12
12
  const { cn } = useRenameCSS();
13
13
  const { inputProps, hasError, size, readOnly, nested } = useCheckbox(props);
14
14
  const descriptionId = useId();
15
- const themeContext = useThemeInternal(false);
15
+ const themeContext = useThemeInternal();
16
16
 
17
17
  if (themeContext?.isDarkside) {
18
18
  return (
@@ -43,6 +43,7 @@ const ComboboxWrapper = ({
43
43
  }
44
44
 
45
45
  return (
46
+ // biome-ignore lint/a11y/noStaticElementInteractions: Wrapper for combobox input and chips.
46
47
  <div
47
48
  ref={wrapperRef}
48
49
  className={cn(
@@ -15,7 +15,7 @@ import { useFilteredOptionsContext } from "./filteredOptionsContext";
15
15
 
16
16
  const FilteredOptions = () => {
17
17
  const { cn } = useRenameCSS();
18
- const themeContext = useThemeInternal(false);
18
+ const themeContext = useThemeInternal();
19
19
  const {
20
20
  inputProps: { id },
21
21
  anchorRef,
@@ -103,7 +103,6 @@ const FilteredOptions = () => {
103
103
  )}
104
104
 
105
105
  {shouldRenderFilteredOptionsList && (
106
- /* biome-ignore lint/a11y/useFocusableInteractive: Interaction is not handeled by listbox itself. */
107
106
  <ul
108
107
  ref={setFilteredOptionsRef}
109
108
  role="listbox"
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { SetStateAction, useCallback, useMemo, useState } from "react";
3
- import { createContext } from "../../../util/create-context";
3
+ import { createStrictContext } from "../../../util/create-strict-context";
4
4
  import { useClientLayoutEffect, usePrevious } from "../../../util/hooks";
5
5
  import { useInputContext } from "../Input/Input.context";
6
6
  import { useSelectedOptionsContext } from "../SelectedOptions/selectedOptionsContext";
@@ -36,12 +36,14 @@ type FilteredOptionsContextValue = {
36
36
  shouldAutocomplete?: boolean;
37
37
  virtualFocus: VirtualFocusType;
38
38
  };
39
- const [FilteredOptionsContextProvider, useFilteredOptionsContext] =
40
- createContext<FilteredOptionsContextValue>({
41
- name: "FilteredOptionsContext",
42
- errorMessage:
43
- "useFilteredOptionsContext must be used within a FilteredOptionsProvider",
44
- });
39
+ const {
40
+ Provider: FilteredOptionsContextProvider,
41
+ useContext: useFilteredOptionsContext,
42
+ } = createStrictContext<FilteredOptionsContextValue>({
43
+ name: "FilteredOptionsContext",
44
+ errorMessage:
45
+ "useFilteredOptionsContext must be used within a FilteredOptionsProvider",
46
+ });
45
47
 
46
48
  const FilteredOptionsProvider = ({
47
49
  children,
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useMemo, useRef, useState } from "react";
2
- import { createContext } from "../../../util/create-context";
2
+ import { createStrictContext } from "../../../util/create-strict-context";
3
3
  import { useClientLayoutEffect } from "../../../util/hooks";
4
4
  import { FormFieldType, useFormField } from "../../useFormField";
5
5
  import { ComboboxProps } from "../types";
@@ -22,8 +22,8 @@ interface InputContextValue extends FormFieldType {
22
22
  setAnchorRef: React.Dispatch<React.SetStateAction<HTMLDivElement | null>>;
23
23
  }
24
24
 
25
- const [InputContextProvider, useInputContext] =
26
- createContext<InputContextValue>({
25
+ const { Provider: InputContextProvider, useContext: useInputContext } =
26
+ createStrictContext<InputContextValue>({
27
27
  name: "InputContext",
28
28
  errorMessage: "useInputContext must be used within an InputContextProvider",
29
29
  });
@@ -59,6 +59,7 @@ export const InputController = forwardRef<
59
59
 
60
60
  return (
61
61
  <Floating.Anchor asChild ref={setAnchorRef}>
62
+ {/** biome-ignore lint/a11y/noStaticElementInteractions: Acts as wrapper list-toggle and input */}
62
63
  <div
63
64
  className={cn("navds-combobox__wrapper-inner navds-text-field__input", {
64
65
  "navds-combobox__wrapper-inner--virtually-unfocused":
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useEffect, useMemo, useState } from "react";
2
- import { createContext } from "../../../util/create-context";
2
+ import { createStrictContext } from "../../../util/create-strict-context";
3
3
  import { usePrevious } from "../../../util/hooks";
4
4
  import { useInputContext } from "../Input/Input.context";
5
5
  import { isInList } from "../combobox-utils";
@@ -20,8 +20,12 @@ type SelectedOptionsContextValue = {
20
20
  ) => void;
21
21
  };
22
22
 
23
- const [SelectedOptionsContextProvider, useSelectedOptionsContext] =
24
- createContext<SelectedOptionsContextValue>();
23
+ const {
24
+ Provider: SelectedOptionsContextProvider,
25
+ useContext: useSelectedOptionsContext,
26
+ } = createStrictContext<SelectedOptionsContextValue>({
27
+ name: "SelectedOptionsContext",
28
+ });
25
29
 
26
30
  const SelectedOptionsProvider = ({
27
31
  children,
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useState } from "react";
2
- import { createContext } from "../../util/create-context";
2
+ import { createStrictContext } from "../../util/create-strict-context";
3
3
  import { useInputContext } from "./Input/Input.context";
4
4
  import { ComboboxOption } from "./types";
5
5
 
@@ -10,12 +10,14 @@ type CustomOptionsContextValue = {
10
10
  setCustomOptions: React.Dispatch<React.SetStateAction<ComboboxOption[]>>;
11
11
  };
12
12
 
13
- const [ComboboxCustomOptionsProvider, useComboboxCustomOptions] =
14
- createContext<CustomOptionsContextValue>({
15
- name: "ComboboxCustomOptions",
16
- errorMessage:
17
- "useComboboxCustomOptions must be used within a ComboboxCustomOptionsProvider",
18
- });
13
+ const {
14
+ Provider: ComboboxCustomOptionsProvider,
15
+ useContext: useComboboxCustomOptions,
16
+ } = createStrictContext<CustomOptionsContextValue>({
17
+ name: "ComboboxCustomOptions",
18
+ errorMessage:
19
+ "useComboboxCustomOptions must be used within a ComboboxCustomOptionsProvider",
20
+ });
19
21
 
20
22
  const CustomOptionsProvider = ({
21
23
  children,
@@ -87,6 +87,7 @@ export const ErrorSummary = forwardRef<HTMLDivElement, ErrorSummaryProps>(
87
87
  const mergedRef = useMergeRefs(ref, wrapperRef);
88
88
 
89
89
  return (
90
+ // biome-ignore lint/a11y/noStaticElementInteractions: Allows focus-calls on div to move focus to heading.
90
91
  <div
91
92
  ref={mergedRef}
92
93
  {...rest}
@@ -1,9 +1,13 @@
1
- import { createContext } from "../../util/create-context";
1
+ import { createStrictContext } from "../../util/create-strict-context";
2
2
  import { ComponentTranslation } from "../../util/i18n/i18n.types";
3
3
 
4
4
  export type FileUploadLocaleContextProps = {
5
5
  translations?: ComponentTranslation<"FileUpload">;
6
6
  };
7
7
 
8
- export const [FileUploadLocaleContextProvider, useFileUploadTranslation] =
9
- createContext<FileUploadLocaleContextProps>();
8
+ export const {
9
+ Provider: FileUploadLocaleContextProvider,
10
+ useContext: useFileUploadTranslation,
11
+ } = createStrictContext<FileUploadLocaleContextProps>({
12
+ name: "FileUploadLocaleContext",
13
+ });
@@ -1,3 +1,6 @@
1
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
2
+
3
+ /* eslint-disable jsx-a11y/click-events-have-key-events */
1
4
  import cl from "clsx";
2
5
  import React, { forwardRef } from "react";
3
6
  import { CircleSlashIcon, CloudUpIcon } from "@navikt/aksel-icons";
@@ -98,16 +101,15 @@ const Dropzone = forwardRef<HTMLInputElement, FileUploadDropzoneProps>(
98
101
  {description}
99
102
  </BodyShort>
100
103
  )}
101
- {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
104
+ {/** biome-ignore lint/a11y/noStaticElementInteractions: Assistive technologies will use the input within. */}
102
105
  <div
103
106
  className={cn("navds-dropzone__area")}
104
107
  onDragEnter={dropzoneCtx.onDragEnter}
105
108
  onDragOver={dropzoneCtx.onDragOver}
106
109
  onDragLeave={dropzoneCtx.onDragLeave}
107
110
  onDrop={dropzoneCtx.onDrop}
108
- onClick={composeEventHandlers(
109
- onClick,
110
- () => inputRef.current?.click(),
111
+ onClick={composeEventHandlers(onClick, () =>
112
+ inputRef.current?.click(),
111
113
  )}
112
114
  data-disabled={inputProps.disabled}
113
115
  >
@@ -10,7 +10,7 @@ export const Radio = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {
10
10
  const { cn } = useRenameCSS();
11
11
  const { inputProps, size, hasError, readOnly } = useRadio(props);
12
12
  const descriptionId = useId();
13
- const themeContext = useThemeInternal(false);
13
+ const themeContext = useThemeInternal();
14
14
 
15
15
  if (themeContext?.isDarkside) {
16
16
  return (
@@ -1,3 +1,4 @@
1
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
1
2
  import React, {
2
3
  InputHTMLAttributes,
3
4
  forwardRef,
@@ -151,7 +152,7 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
151
152
  clearButton && !inputProps.disabled && (value ?? internalValue);
152
153
 
153
154
  return (
154
- // eslint-disable-next-line jsx-a11y/no-static-element-interactions
155
+ // biome-ignore lint/a11y/noStaticElementInteractions: Escape key handler for clearing input
155
156
  <div
156
157
  onKeyDown={(event) => {
157
158
  if (event.key !== "Escape") {
@@ -268,7 +269,7 @@ function ClearButton({
268
269
  }: SearchClearButtonProps) {
269
270
  const { cn } = useRenameCSS();
270
271
 
271
- const themeContext = useThemeInternal(false);
272
+ const themeContext = useThemeInternal();
272
273
  const translate = useI18n("Search");
273
274
 
274
275
  return themeContext?.isDarkside ? (
@@ -47,7 +47,7 @@ export const GuidePanel = forwardRef<HTMLDivElement, GuidePanelProps>(
47
47
  ref,
48
48
  ) => {
49
49
  const { cn } = useRenameCSS();
50
- const themeContext = useThemeInternal(false);
50
+ const themeContext = useThemeInternal();
51
51
 
52
52
  return (
53
53
  <div
@@ -53,7 +53,7 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
53
53
  const buttonRef = useRef<HTMLButtonElement | null>(null);
54
54
  const mergedRef = useMergeRefs(buttonRef, ref);
55
55
  const [open, setOpen] = useState(false);
56
- const themeContext = useThemeInternal(false);
56
+ const themeContext = useThemeInternal();
57
57
  const translate = useI18n("HelpText");
58
58
 
59
59
  const titleWithFallback = title || translate("title");
package/src/index.ts CHANGED
@@ -187,6 +187,18 @@ export {
187
187
  type LocalAlertContentProps,
188
188
  type LocalAlertCloseButtonProps,
189
189
  } from "./alert/local-alert";
190
+ export {
191
+ Dialog,
192
+ type DialogProps,
193
+ type DialogTriggerProps,
194
+ type DialogCloseTriggerProps,
195
+ type DialogPopupProps,
196
+ type DialogHeaderProps,
197
+ type DialogTitleProps,
198
+ type DialogDescriptionProps,
199
+ type DialogBodyProps,
200
+ type DialogFooterProps,
201
+ } from "./dialog";
190
202
 
191
203
  /**
192
204
  * Theming