@norges-domstoler/dds-components 19.1.0 → 19.2.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.
package/dist/index.d.mts CHANGED
@@ -448,14 +448,14 @@ declare const useMountTransition: (isMounted: boolean, unmountDelay: number) =>
448
448
  * ```
449
449
  * const [isOpen, setOpen] = useState(true);
450
450
  * const ref = useRef<HTMLElement>(null);
451
- * useOnClickOutside(ref, () => setOpen(false));
451
+ * useOnClickOutside(ref.current, () => setOpen(false));
452
452
  *
453
453
  * return <div ref={ref}>innhold</div>
454
454
  * ```
455
455
  * @param element HTML elementet man klikker utenfor.
456
456
  * @param handler funksjonen som kjøres ved klikk utenfor.
457
457
  */
458
- declare function useOnClickOutside(element: HTMLElement | null | Array<HTMLElement | null>, handler: (event: MouseEvent | TouchEvent) => void): void;
458
+ declare function useOnClickOutside(element: HTMLElement | null | Array<HTMLElement | null | undefined>, handler: (event: MouseEvent | TouchEvent) => void): void;
459
459
 
460
460
  /**
461
461
  * Kjører logikk når en spesifisert tast blir trykt ned.
@@ -2391,6 +2391,12 @@ type PopoverProps = BaseComponentPropsWithChildren<HTMLDivElement, {
2391
2391
  * @default true
2392
2392
  */
2393
2393
  returnFocusOnBlur?: boolean;
2394
+ /**Anchor ref ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2395
+ anchorRef?: RefObject<HTMLElement | null>;
2396
+ /**Spesifiserer om popover er åpen ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2397
+ isOpen?: boolean;
2398
+ /**Callback for lukking ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2399
+ onClose?: () => void;
2394
2400
  }>;
2395
2401
  declare const Popover: react.ForwardRefExoticComponent<Pick<react.HTMLAttributes<HTMLDivElement>, "id" | "className"> & {
2396
2402
  /**Header. Bruker default semantisk heading hvis verdien er en `string`. */
@@ -2415,6 +2421,12 @@ declare const Popover: react.ForwardRefExoticComponent<Pick<react.HTMLAttributes
2415
2421
  * @default true
2416
2422
  */
2417
2423
  returnFocusOnBlur?: boolean;
2424
+ /**Anchor ref ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2425
+ anchorRef?: RefObject<HTMLElement | null>;
2426
+ /**Spesifiserer om popover er åpen ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2427
+ isOpen?: boolean;
2428
+ /**Callback for lukking ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2429
+ onClose?: () => void;
2418
2430
  } & {
2419
2431
  children?: ReactNode | undefined;
2420
2432
  } & {
package/dist/index.d.ts CHANGED
@@ -448,14 +448,14 @@ declare const useMountTransition: (isMounted: boolean, unmountDelay: number) =>
448
448
  * ```
449
449
  * const [isOpen, setOpen] = useState(true);
450
450
  * const ref = useRef<HTMLElement>(null);
451
- * useOnClickOutside(ref, () => setOpen(false));
451
+ * useOnClickOutside(ref.current, () => setOpen(false));
452
452
  *
453
453
  * return <div ref={ref}>innhold</div>
454
454
  * ```
455
455
  * @param element HTML elementet man klikker utenfor.
456
456
  * @param handler funksjonen som kjøres ved klikk utenfor.
457
457
  */
458
- declare function useOnClickOutside(element: HTMLElement | null | Array<HTMLElement | null>, handler: (event: MouseEvent | TouchEvent) => void): void;
458
+ declare function useOnClickOutside(element: HTMLElement | null | Array<HTMLElement | null | undefined>, handler: (event: MouseEvent | TouchEvent) => void): void;
459
459
 
460
460
  /**
461
461
  * Kjører logikk når en spesifisert tast blir trykt ned.
@@ -2391,6 +2391,12 @@ type PopoverProps = BaseComponentPropsWithChildren<HTMLDivElement, {
2391
2391
  * @default true
2392
2392
  */
2393
2393
  returnFocusOnBlur?: boolean;
2394
+ /**Anchor ref ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2395
+ anchorRef?: RefObject<HTMLElement | null>;
2396
+ /**Spesifiserer om popover er åpen ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2397
+ isOpen?: boolean;
2398
+ /**Callback for lukking ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2399
+ onClose?: () => void;
2394
2400
  }>;
2395
2401
  declare const Popover: react.ForwardRefExoticComponent<Pick<react.HTMLAttributes<HTMLDivElement>, "id" | "className"> & {
2396
2402
  /**Header. Bruker default semantisk heading hvis verdien er en `string`. */
@@ -2415,6 +2421,12 @@ declare const Popover: react.ForwardRefExoticComponent<Pick<react.HTMLAttributes
2415
2421
  * @default true
2416
2422
  */
2417
2423
  returnFocusOnBlur?: boolean;
2424
+ /**Anchor ref ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2425
+ anchorRef?: RefObject<HTMLElement | null>;
2426
+ /**Spesifiserer om popover er åpen ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2427
+ isOpen?: boolean;
2428
+ /**Callback for lukking ved custom kontrollert bruk uten `<PopoverGroup>` Kun for corner cases. */
2429
+ onClose?: () => void;
2418
2430
  } & {
2419
2431
  children?: ReactNode | undefined;
2420
2432
  } & {
package/dist/index.js CHANGED
@@ -2868,7 +2868,7 @@ var import_react19 = require("react");
2868
2868
  function useOnClickOutside(element, handler) {
2869
2869
  (0, import_react19.useEffect)(() => {
2870
2870
  const listener = (event) => {
2871
- const elements = Array.isArray(element) ? element : [element];
2871
+ const elements = Array.isArray(element) ? element : [element].filter(Boolean);
2872
2872
  const hasClickedInside = elements.some(
2873
2873
  (el) => el == null ? void 0 : el.contains(event.target)
2874
2874
  );
@@ -9933,6 +9933,7 @@ var import_jsx_runtime271 = require("react/jsx-runtime");
9933
9933
  var Popover = (0, import_react113.forwardRef)(
9934
9934
  (props, ref) => {
9935
9935
  const {
9936
+ id,
9936
9937
  header,
9937
9938
  withCloseButton = true,
9938
9939
  onBlur,
@@ -9943,23 +9944,59 @@ var Popover = (0, import_react113.forwardRef)(
9943
9944
  returnFocusOnBlur = true,
9944
9945
  className,
9945
9946
  htmlProps = {},
9947
+ anchorRef,
9948
+ isOpen: propIsOpen,
9949
+ onClose: propOnClose,
9946
9950
  ...rest
9947
9951
  } = props;
9952
+ const { refs, styles: positionStyles } = useFloatPosition(null, {
9953
+ offset,
9954
+ placement
9955
+ });
9956
+ const context = usePopoverContext();
9948
9957
  const {
9949
- floatStyling,
9958
+ floatStyling: contextFloatStyling,
9950
9959
  setFloatOptions,
9951
- floatingRef,
9960
+ floatingRef: contextFloatingRef,
9961
+ popoverId: contextPopoverId,
9962
+ onClose: contextOnClose,
9963
+ isOpen: contextIsOpen,
9964
+ anchorEl: contextAnchorEl
9965
+ } = context;
9966
+ const hasContext = contextPopoverId !== void 0;
9967
+ const generatedId = (0, import_react113.useId)();
9968
+ const uniquePopoverId = id != null ? id : `${generatedId}-popover`;
9969
+ const [
9952
9970
  popoverId,
9953
- onClose,
9971
+ anchorEl,
9954
9972
  isOpen = false,
9955
- anchorEl
9956
- } = usePopoverContext();
9973
+ floatingRef,
9974
+ floatStyling,
9975
+ onClose
9976
+ ] = hasContext ? [
9977
+ contextPopoverId,
9978
+ contextAnchorEl,
9979
+ contextIsOpen,
9980
+ contextFloatingRef,
9981
+ contextFloatStyling,
9982
+ contextOnClose
9983
+ ] : [
9984
+ uniquePopoverId,
9985
+ (anchorRef == null ? void 0 : anchorRef.current) && anchorRef.current,
9986
+ propIsOpen,
9987
+ refs.setFloating,
9988
+ positionStyles.floating,
9989
+ propOnClose
9990
+ ];
9991
+ if (!hasContext) {
9992
+ refs.setReference(anchorEl || null);
9993
+ }
9957
9994
  const hasTransitionedIn = useMountTransition(isOpen, 400);
9958
9995
  const popoverRef = useReturnFocusOnBlur(
9959
9996
  isOpen && hasTransitionedIn && returnFocusOnBlur,
9960
9997
  () => {
9961
- onClose && onClose();
9962
- onBlur && onBlur();
9998
+ onClose == null ? void 0 : onClose();
9999
+ onBlur == null ? void 0 : onBlur();
9963
10000
  },
9964
10001
  anchorEl && anchorEl
9965
10002
  );
@@ -9967,6 +10004,12 @@ var Popover = (0, import_react113.forwardRef)(
9967
10004
  (0, import_react113.useEffect)(() => {
9968
10005
  setFloatOptions && setFloatOptions({ placement, offset });
9969
10006
  }, [placement, offset]);
10007
+ useOnClickOutside([popoverRef.current, anchorEl], () => {
10008
+ if (isOpen && !hasContext) onClose == null ? void 0 : onClose();
10009
+ });
10010
+ useOnKeyDown("Escape", () => {
10011
+ if (isOpen && !hasContext) onClose == null ? void 0 : onClose();
10012
+ });
9970
10013
  const hasTitle = !!header;
9971
10014
  const openCn = hasTransitionedIn && isOpen ? "open" : "closed";
9972
10015
  return isOpen || hasTransitionedIn ? /* @__PURE__ */ (0, import_jsx_runtime271.jsxs)(