Dialog Overflow Behavior

When using the dialog with content larger than the screen height, the dialog gets cut off on top and bottom without the ability to scroll.
Steps to reproduce: Put component with height > screen height inside of Dialog.
Intended behavior: Scroll
First ever Issue, sorry if its unclear. Happy to elaborate.
Thanks a lot for making this open source. It is invaluable!

I thought it might help to add a repo demonstrating the issue, so I threw one together: https://github.com/joshwaiam/ui.shadcn.com-dialog-overflow-issue

Is this a Radix UI issue or?

I had a similar problem with the sheet component and too much content, but the overflow-y-scroll max-h-screen fix worked there too

But, this adds a scrollboard to the right – at least in my case:

I always had the issue with the scrollbar on the right side of the content.

There is a solution by RadixUI that worked fine for me:
https://www.radix-ui.com/docs/primitives/components/dialog#scrollable-overlay
I enables scroll the background thus "moving" the dialog instead of scrolling inside which I found to be a nicer interaction. You need to move the content inside the overlay and change the way it handles the positioning of the content.
(I removed some of the animations because I was too lazy to adjust them)
DialogOverlay
<DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-50 bg-black/30 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 overflow-y-auto max-h-screen grid place-items-center",
      className
    )}
    {...props}
  />

DialogContent
<DialogPortal>
    <DialogOverlay>
      <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "z-50 grid w-full max-w-lg gap-4 bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg md:w-full",
          className
        )}
        {...props}
      >
        {children}
        <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
          <X className="h-4 w-4" />
          Close
        </DialogPrimitive.Close>
      </DialogPrimitive.Content>
    </DialogOverlay>
  </DialogPortal>

@max-hans
If I try to replicate your example -> I get a darkened screen without the Dialog being displayed at all.
I tried following https://www.radix-ui.com/docs/primitives/components/dialog#scrollable-overlay , but It did not show the Dialog too.
Maybe I'am doing something wrong?

DialogOverlay

const DialogOverlay = React.forwardRef<
React.ElementRef<typeof DialogPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, children, ...props }, ref) => (
<DialogPrimitive.Overlay
  className={cn(
    "fixed inset-0 z-50 ", // overlay
    "bg-black/50 backdrop-blur-sm", // bg
    "transition-all duration-100 data-[state=closed]:animate-out data-[state=open]:fade-in data-[state=closed]:fade-out", // animations
    "grid place-items-center overflow-y-auto", // layout children
    className,
  )}
  {...props}
  ref={ref}
/>
))
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName

DialogContent
const DialogContent = React.forwardRef<
React.ElementRef<typeof DialogPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<DialogPortal>
  <DialogOverlay>
    <DialogPrimitive.Content
      ref={ref}
      // shadcn / Dialog Overflow Behavior - https://github.com/shadcn/ui/issues/16
      // radix-ui / Scrollable overlay - https://www.radix-ui.com/docs/primitives/components/dialog#scrollable-overlay
      // radix-ui / dialog src - https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/src/Dialog.tsx
      className={cn(
        "z-50", // overlay
        "relative",
        "min-width-[300px]",
        "grid gap-4 ", // container
        "bg-white dark:bg-slate-900", // bg
        "p-6 rounded-b-lg sm:rounded-lg", // border
        "w-full sm:max-w-screen-sm md:max-w-screen-md", // width
        // "overflow-y-scroll max-h-screen", // prevent overflow / add scrolling -> produces scrollbar even if not needed
        "animate-in data-[state=open]:fade-in-90 data-[state=open]:slide-in-from-bottom-10 sm:zoom-in-90 data-[state=open]:sm:slide-in-from-bottom-0", // animations
        className,
      )}
      {...props}
    >
      {children}
      <DialogPrimitive.Close className="absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-slate-100 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-900 dark:data-[state=open]:bg-slate-800">
        <X className="h-4 w-4" />
        Close
      </DialogPrimitive.Close>
    </DialogPrimitive.Content>
  </DialogOverlay>
</DialogPortal>
))
DialogContent.displayName = DialogPrimitive.Content.displayName

I will try to create something that works. Maybe I changes something else that seems unrelated at first. But I think I just followed the guide by radix

I started from a blank Next13 template and tried to recreate it. To make it overflow nicely I just had to adjust the components inside the dialog.tsx created by shadcn.
Your issues might be due to the way the dialog is positioned. It initially used some css-transform to center it on the screen. I couldnt find anything in your code on a first glance. Or you are using the Dialog inside some other element that is positioned relative affecting the way the absolute elements inside the dialog component are positioned?
Should we maybe add the Link to the radix documentation regarding overflow somewhere in the docs?
This is my dialog-component:
"use client";

import * as React from "react";
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { X } from "lucide-react";

import { cn } from "@/lib/utils";

const Dialog = DialogPrimitive.Root;

const DialogTrigger = DialogPrimitive.Trigger;

const DialogPortal = ({
  className,
  ...props
}: DialogPrimitive.DialogPortalProps) => (
  <DialogPrimitive.Portal className={cn(className)} {...props} />
);
DialogPortal.displayName = DialogPrimitive.Portal.displayName;

const DialogOverlay = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-50 bg-black/30 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 overflow-y-auto py-16 grid place-items-center",
      className
    )}
    {...props}
  />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

const DialogContent = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
  <DialogPortal>
    <DialogOverlay>
      <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "z-50 grid w-full max-w-lg gap-4 bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg md:w-full relative",
          className
        )}
        {...props}
      >
        {children}
        <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
          <X className="h-4 w-4" />
          Close
        </DialogPrimitive.Close>
      </DialogPrimitive.Content>
    </DialogOverlay>
  </DialogPortal>
));
DialogContent.displayName = DialogPrimitive.Content.displayName;

const DialogHeader = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogHeader.displayName = "DialogHeader";

const DialogFooter = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogFooter.displayName = "DialogFooter";

const DialogTitle = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Title>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Title
    ref={ref}
    className={cn(
      "text-lg font-semibold leading-none tracking-tight",
      className
    )}
    {...props}
  />
));
DialogTitle.displayName = DialogPrimitive.Title.displayName;

const DialogDescription = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Description>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Description
    ref={ref}
    className={cn("text-sm text-muted-foreground", className)}
    {...props}
  />
));
DialogDescription.displayName = DialogPrimitive.Description.displayName;

export {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogFooter,
  DialogTitle,
  DialogDescription,
};

thanks @intuity-hans
I can confirm your full version is working
Comparing mine and your version, I think you forgot to mention the changes in DialogPortal

DialogPortal
const DialogPortal = ({ className, children, ...props }: DialogPrimitive.DialogPortalProps) => (
  <DialogPrimitive.Portal className={cn(className)} {...props}>

{children}

  </DialogPrimitive.Portal>
)

im have same issue

i had same error so i tried to solve my way and this actually work
i did this by removing the style of pointer events like so:
`  onClose: () => {
set({ type: null, isOpen: false });
// Delay restoring pointer events for 2 seconds
setTimeout(() => {
  document.body.style.pointerEvents = "auto";
}, 1000);

},
}));`
Note, i did it with small timeout to make sure that first all modal scripts are completed and then im manually removing that. Hope it helps!

Is this still an issue? Does @intuity-hans solution fix this?

I can confirm, that

the current dialog component from the CLI is not scrollable
@intuity-hans version fixed the issue for me

I can look deeper into this and create a PR

Workaround: I fixed this problem for myself by adding overflow-y-scroll max-h-screen classes to DialogContent
example usage:
<Dialog>
  <DialogTrigger asChild>
    <Button variant={"ghost"} title={"Text""} />
  </DialogTrigger>
  <DialogContent className={"lg:max-w-screen-lg overflow-y-scroll max-h-screen"}>
   todo...
  </DialogContent>
</Dialog>

This is a really nice workaround because it is not so much invasive, liked this approach!

overflow-y-scroll

To complement this solution, you may want to hide the vertical scrollbars without compromising on the scroll functionality. To do so, declare the following two CSS classes and use them as an additional class.
`/* For Webkit-based browsers (Chrome, Safari and Opera) */
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
/* For IE, Edge and Firefox /
.scrollbar-hide {
-ms-overflow-style: none; / IE and Edge /
scrollbar-width: none; / Firefox */
}`

I'm having scroll issue with flexbox inside DialogContent
For example:
<DialogContent className='h-full'>

Title

Long long long content

</DialogContent>

The long content should be scollable when the screen is smaller than 1000px - Title height but it's not.
The most simple solution is making DialogContent block instead of grid
<DialogContent className='block h-full'>

Title

Long long long content

</DialogContent>

Are there any specify reason why the DialogContent is grid?
since it's content only have 1 element {children} and also have no grid related styling.

Managed to solve this based on the solution by @intuity-hans.
The small detail that made the difference was to render DialogContent inside DialogOverlay, instead of rendering them side-by-side as it is currently described in the docs:
const DialogContent = (...) => (
    <DialogPortal>
        <DialogOverlay />
        <DialogPrimitive.Content ... >
         ...
        </DialogPrimitive.Content>
    </DialogPortal>
)

so I changed to this:
const DialogContent = (...) => (
  <DialogPortal>
      <DialogOverlay>
          <DialogPrimitive.Content ... >
               ...
          </DialogPrimitive.Content>
      </DialogOverlay>
  </DialogPortal>
)

I found it quite frustrating that the footer and header are not fixed while the content is scrollable.
For everyone that wants to achieve something similar as on the attached video
https://github.com/shadcn-ui/ui/assets/7522096/395352f9-5f4f-446b-aa10-d302cd4c9e88
Switch grid for flex flex-col in the DialogPrimitive.Content classnames
 <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "fixed left-[50%] top-[50%] z-50 flex w-full max-w-lg translate-x-[-50%] translate-y-[-50%] flex-col gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
          className,
        )}
        {...props}
      >

Example Dialog

<Dialog>
  <DialogTrigger asChild>
        Show Dialog
    </DialogTrigger>
    // adding max-h-[98%] so the modal is sticking to the borders
    <DialogContent className="max-h-[98%] overflow-hidden px-0">
      <DialogHeader className="px-6">
        <DialogTitle>Filters</DialogTitle>
      </DialogHeader>
      // making the content to take all height available with flex-1 and scrollable

       // your content here

      <DialogFooter className="px-6">
        <Button variant="secondary">Reset all filters</Button>
        <Button>Apply filters</Button>
      </DialogFooter>
    </DialogContent>
</Dialog>

Enjoy!

Just use shadcn ScrollArea component.

<Dialog open={open} onOpenChange={onOpenChange}>
      <DialogContent className="sm:max-w-lg p-0">
        <ScrollArea className="max-h-[80vh] p-6">
          <DialogHeader>
            <DialogTitle>Title</DialogTitle>
          </DialogHeader>

          <DialogFooter>
          </DialogFooter>
        </ScrollArea>
      </DialogContent>
    </Dialog>

I found it quite frustrating that the footer and header are not fixed while the content is scrollable. For everyone that wants to achieve something similar as on my attached video
Screen.Recording.2023-12-21.at.3.14.39.PM.mov
Switch grid for flex flex-col in the DialogPrimitive.Content classnames
 <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "fixed left-[50%] top-[50%] z-50 flex w-full max-w-lg translate-x-[-50%] translate-y-[-50%] flex-col gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
          className,
        )}
        {...props}
      >

Example Dialog
<Dialog>
  <DialogTrigger asChild>
        Show Dialog
    </DialogTrigger>
    // adding max-h-[98%] so the modal is not sticking to the borders, but stays within the screen height
    <DialogContent className="max-h-[98%] overflow-hidden px-0">
      <DialogHeader className="px-6">
        <DialogTitle>Filters</DialogTitle>
      </DialogHeader>
      // making the content to take all height available with flex-1 and scrollable

       // your content here

      <DialogFooter className="px-6">
        <Button variant="secondary">Reset all filters</Button>
        <Button>Apply filters</Button>
      </DialogFooter>
    </DialogContent>
</Dialog>

Enjoy!

This is ok, but how can i use the styles for the scroll bar that are used in the ScollArea component?

does anyone know why I get this weird bar at the right side of Dialog? and what is the solution for it?

does anyone know why I get this weird bar at the right side of Dialog? and what is the solution for it?

You can hide it like this: https://github.com/shadcn-ui/ui/issues/16#issuecomment-1812929398
Hope it helps :)

does anyone know why I get this weird bar at the right side of Dialog? and what is the solution for it?

You can hide it like this: #16 (comment)
Hope it helps :)

I see, that completely hides the scroll bar even while scrolling, what if we want to show the bar only while scrolling?

does anyone know why I get this weird bar at the right side of Dialog? and what is the solution for it?

using overflow-auto will fix and only show the scrollbar if necessary.

I had a similar problem with the sheet component and too much content, but the overflow-y-scroll max-h-screen fix worked there too. Thanks a lot!

hello, which component exactly did you put this code? I've been trying but doesn't work for me. Cheers!

I had a similar problem with the sheet component and too much content, but the overflow-y-scroll max-h-screen fix worked there too. Thanks a lot!

hello, which component exactly did you put this code? I've been trying but doesn't work for me. Cheers!

Hello,
Were you able to get this to work?

// sheet.tsx

   <SheetPrimitive.Content
      ref={ref}
      className={cn(sheetVariants({ side }), className)}
      // automatically scrolling up bug fixed
      onCloseAutoFocus={event => event.preventDefault()}
      {...props}

Go to sheet component and add the onCloseAutoFocus prop and the code I sent.
#this code is not my own, I also just found this #somewhere.

This is the solution to make the entire overlay scrollable without errors, just change the Overlay and the Content as below.
const DialogOverlay = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-50 bg-black/80 grid place-items-center overflow-y-auto data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
      className
    )}
    {...props}
  />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

const DialogContent = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
  <DialogPortal>
    <DialogOverlay className="p-16">
      <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "relative border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 sm:rounded-lg",
          className
        )}
        {...props}
      >
        {children}
        <DialogPrimitive.Close asChild>
          <Button
            size="icon"
            variant="ghost"
            className="absolute top-3 right-3"
          >
            <X className="h-5 w-5" />
            Close
          </Button>
        </DialogPrimitive.Close>
      </DialogPrimitive.Content>
    </DialogOverlay>
  </DialogPortal>
));
DialogContent.displayName = DialogPrimitive.Content.displayName;

i think so @askides solution is better

Has anyone managed to make the dialog fixed position at top, but move the dialog scroll to the background scroll? Meaning that, if you have a dialog with content that can increase - the dialog will only expand downwards, not expand both up and down. This is similar to how dialogs at Trello work, I believe.
I tried @max-hans solution - which worked great for making the dialog scroll with the background scrollbar, but it doesn't fix the position of the dialog to the top.
I will attach how my dialog and overlay looks right now. I tried to make the dialog fixed and add top-[4%], which did fix the position of the overlay, but then the background scroll does not work since the relative  position is removed.
`const DialogOverlay = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef

(({ className, ...props }, ref) => (
<DialogPrimitive.Overlay
ref={ref}
className={cn(
data-[state=open]:fade-in-0', fixed inset-0 z-50 grid max-h-screen  place-items-center overflow-y-auto bg-darkGrey/90  data-state=open]:animate-in data-[state=closed]:animate-out  data-[state=closed]:fade-out-0,
className
)}
{...props}
/>
))
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName

const DialogContent = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef

(({ className, children, ...props }, ref) => (

<DialogPrimitive.Content
ref={ref}
className={cn(
relative z-50 grid w-full max-w-2xl gap-4 rounded-xl border-2  border-darkGrey bg-background p-0 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out  data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 md:w-full,
className
)}
{...props}

    {children}
  </DialogPrimitive.Content>
</DialogOverlay>

))
DialogContent.displayName = DialogPrimitive.Content.displayName`

Found this: https://www.youtube.com/watch?v=B8EgmMkI8n0
Hope it helps

WASTED A WHOLE LOT TIME IMPLEMENTING SOLUTIONS PROVIDED ABOVE

no matter what you done as said above, some part is cropped
in the end the only fix that worked for me was using "scroll-area"
I myself wouldn't want to club components
but have too as my usecase is Stripe embedded payment using dialog

BUT STILL 100% WORKING FIX FOR NOW:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-dvh"> // add max-h-dvh to dialog content
+  <ScrollArea className="max-h-dvh">{children}</ScrollArea>
</ DialogPrimitive.Content>

Above works like magic. But if want the same with even better UI, try this:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-[calc(100dvh-1.5rem)] max-h-[calc(100dvw-1.5rem)]">
+  <ScrollArea className="max-h-[calc(100dvh-3rem)]>{children}</ScrollArea>
</ DialogPrimitive.Content>

This issue has been automatically closed because it received no activity for a while. If you think it was closed by accident, please leave a comment. Thank you.

WASTED A WHOLE LOT TIME IMPLEMENTING SOLUTIONS PROVIDED ABOVE

no matter what is done as said above, some part is cropped or not aligned
in the end the only fix that worked for me was using "scroll-area"
I myself wouldn't want to club components
but have to, as my usecase is Stripe embedded payment using dialog

BUT STILL 100% WORKING FIX FOR NOW:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-dvh"> // add max-h-dvh to dialog content
+  <ScrollArea className="max-h-dvh">{children}</ScrollArea>
</ DialogPrimitive.Content>

Above works like magic. But if want the same with even better UI, try this:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-[calc(100dvh-1.5rem)] w-[calc(100dvw-1.5rem)]">
+  <ScrollArea className="max-h-[calc(100dvh-3rem)]>{children}</ScrollArea>
</ DialogPrimitive.Content>

This should be marked as the solution, worked perfectly for me. Just needed to wrap the troublesome component with the ScrollArea component.

I believe this is still a problem. There is a big issue with this when virtual keyboard on mobile devices is open. It is not possible to scroll and view the entire dialog if keyboard is open.

I am having this issue too. My current solution is to make the content inside  scrollable (same as others are doing), but it would be preferable if the entire dialog container itself is scrollable. When a user sees the content being clipped by the window, it creates an "affordance" of scrolling. Where with having the content of the dialog itself, sometimes the point that gets cutoff is just white space, so it's difficult to know that the dialog is scrollable. Would love the entire dialog to extend past the window, would be a more natural user experience.

I prefer to do a general scroll for the entire document rather than specifically adding a scroll to the dialog.
For this, the content must be inside the overlay, by default shadcn they are at the same nesting level, which is why the scroll could not be done.
This is how I did it:
`
const DialogOverlay = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef

(({ className, children, ...props }, ref) => (
<DialogPrimitive.Overlay
ref={ref}
className={clsx(
'fixed inset-0 z-50 bg-neutrals-100/40 backdrop-blur-sm grid place-items-center overflow-y-scroll data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0'
)}
{...props}>
{children}
</DialogPrimitive.Overlay>
))
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName

const dialogContentVariations = cva(
'relative flex flex-col gap-5 inset-0 my-10 bg-neutrals-white p-6 rounded-lg shadow-popup duration-400 ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-0 data-[state=closed]:slide-out-to-top-0 data-[state=open]:slide-in-from-left-0 data-[state=open]:slide-in-from-top-0',
{
variants: {
// если понадобится какой-нибудь другой размер просто в
size: {
default: 'max-w-lg',
sm: 'max-w-sm',
md: 'max-w-md',
lg: 'max-w-4xl',
full: 'max-w-full my-0 !rounded-none'
}
},
defaultVariants: {
size: 'default'
}
}
)
const DialogContent = React.forwardRef<
React.ElementRef,
VariantProps &
React.ComponentPropsWithoutRef

(({ className, size, children, ...props }, ref) => (

<DialogPrimitive.Content
ref={ref}
className={cx(dialogContentVariations({ size, className }))}
{...props}>
{children}
<DialogPrimitive.Close asChild className='absolute right-4 top-4'>
<Button variant={'ghost_grey'} size={'icon_sm'}>

Закрыть

</DialogPrimitive.Close>
</DialogPrimitive.Content>

))
DialogContent.displayName = DialogPrimitive.Content.displayName
`

I found it quite frustrating that the footer and header are not fixed while the content is scrollable. For everyone that wants to achieve something similar as on my attached video
Screen.Recording.2023-12-21.at.3.14.39.PM.mov
Switch grid for flex flex-col in the DialogPrimitive.Content classnames
 <DialogPrimitive.Content
        ref={ref}
        className={cn(
          "fixed left-[50%] top-[50%] z-50 flex w-full max-w-lg translate-x-[-50%] translate-y-[-50%] flex-col gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
          className,
        )}
        {...props}
      >

Example Dialog
<Dialog>
  <DialogTrigger asChild>
        Show Dialog
    </DialogTrigger>
    // adding max-h-[98%] so the modal is not sticking to the borders, but stays within the screen height
    <DialogContent className="max-h-[98%] overflow-hidden px-0">
      <DialogHeader className="px-6">
        <DialogTitle>Filters</DialogTitle>
      </DialogHeader>
      // making the content to take all height available with flex-1 and scrollable

       // your content here

      <DialogFooter className="px-6">
        <Button variant="secondary">Reset all filters</Button>
        <Button>Apply filters</Button>
      </DialogFooter>
    </DialogContent>
</Dialog>

Enjoy!

Do you have a gist for this please i'm struggling with the scrollbar

Wrapping with ScrollArea kindof removes customization so below is my favorite;
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
import * as React from "react";

import { cn } from "@/lib/utils";

const Dialog = DialogPrimitive.Root;

const DialogTrigger = DialogPrimitive.Trigger;

const DialogPortal = DialogPrimitive.Portal;

const DialogClose = DialogPrimitive.Close;

const DialogOverlay = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-40 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
      className,
    )}
    {...props}
  />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

const DialogContent = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
  <DialogPortal>
    <DialogOverlay />
    <DialogPrimitive.Content
      ref={ref}
      className={cn(
        "max-h-[90vh] scrollbar overflow-y-auto fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background px-6 pb-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
        className,
      )}
      {...props}>
      {children}
    </DialogPrimitive.Content>
  </DialogPortal>
));
DialogContent.displayName = DialogPrimitive.Content.displayName;

const DialogHeader = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogHeader.displayName = "DialogHeader";

const DialogFooter = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogFooter.displayName = "DialogFooter";

const DialogTitle = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Title>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
>(({ className, children, ...props }, ref) => (
  <DialogPrimitive.Title
    ref={ref}
    className={cn(
      "text-lg font-semibold leading-none tracking-tight",
      className,
    )}
    {...props}>
    {children}
    <DialogPrimitive.Close className='absolute z-50 right-0 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground'>
      <Cross2Icon className='h-4 w-4' />
      Close
    </DialogPrimitive.Close>
  </DialogPrimitive.Title>
));
DialogTitle.displayName = DialogPrimitive.Title.displayName;

const DialogDescription = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Description>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Description
    ref={ref}
    className={cn("text-sm text-muted-foreground", className)}
    {...props}
  />
));
DialogDescription.displayName = DialogPrimitive.Description.displayName;

export {
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogOverlay,
  DialogPortal,
  DialogTitle,
  DialogTrigger,
};

@layer utilities {
  .scrollbar::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  .scrollbar::-webkit-scrollbar-track {
    border-radius: 100vh;
    background: transparent;
  }

  .scrollbar::-webkit-scrollbar-thumb {
    background: transparent;
    border-radius: 100vh;
  }

  .scrollbar::-webkit-scrollbar-thumb:hover {
    background: #333333;
  }
}

O encapsulamento com ScrollArea meio que remove a personalização, então abaixo está o meu favorito;
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
import * as React from "react";

import { cn } from "@/lib/utils";

const Dialog = DialogPrimitive.Root;

const DialogTrigger = DialogPrimitive.Trigger;

const DialogPortal = DialogPrimitive.Portal;

const DialogClose = DialogPrimitive.Close;

const DialogOverlay = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-40 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
      className,
    )}
    {...props}
  />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

const DialogContent = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
  <DialogPortal>
    <DialogOverlay />
    <DialogPrimitive.Content
      ref={ref}
      className={cn(
        "max-h-[90vh] scrollbar overflow-y-auto fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background px-6 pb-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
        className,
      )}
      {...props}>
      {children}
    </DialogPrimitive.Content>
  </DialogPortal>
));
DialogContent.displayName = DialogPrimitive.Content.displayName;

const DialogHeader = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogHeader.displayName = "DialogHeader";

const DialogFooter = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogFooter.displayName = "DialogFooter";

const DialogTitle = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Title>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
>(({ className, children, ...props }, ref) => (
  <DialogPrimitive.Title
    ref={ref}
    className={cn(
      "text-lg font-semibold leading-none tracking-tight",
      className,
    )}
    {...props}>
    {children}
    <DialogPrimitive.Close className='absolute z-50 right-0 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground'>
      <Cross2Icon className='h-4 w-4' />
      Close
    </DialogPrimitive.Close>
  </DialogPrimitive.Title>
));
DialogTitle.displayName = DialogPrimitive.Title.displayName;

const DialogDescription = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Description>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Description
    ref={ref}
    className={cn("text-sm text-muted-foreground", className)}
    {...props}
  />
));
DialogDescription.displayName = DialogPrimitive.Description.displayName;

export {
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogOverlay,
  DialogPortal,
  DialogTitle,
  DialogTrigger,
};

@layer utilities {
  .scrollbar::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  .scrollbar::-webkit-scrollbar-track {
    border-radius: 100vh;
    background: transparent;
  }

  .scrollbar::-webkit-scrollbar-thumb {
    background: transparent;
    border-radius: 100vh;
  }

  .scrollbar::-webkit-scrollbar-thumb:hover {
    background: #333333;
  }
}

isso aqui funciona perfeitamente, Obrigado!

O encapsulamento com ScrollArea meio que remove a personalização, então abaixo está o meu favorito;
import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
import * as React from "react";

import { cn } from "@/lib/utils";

const Dialog = DialogPrimitive.Root;

const DialogTrigger = DialogPrimitive.Trigger;

const DialogPortal = DialogPrimitive.Portal;

const DialogClose = DialogPrimitive.Close;

const DialogOverlay = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay
    ref={ref}
    className={cn(
      "fixed inset-0 z-40 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
      className,
    )}
    {...props}
  />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

const DialogContent = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
>(({ className, children, ...props }, ref) => (
  <DialogPortal>
    <DialogOverlay />
    <DialogPrimitive.Content
      ref={ref}
      className={cn(
        "max-h-[90vh] scrollbar overflow-y-auto fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background px-6 pb-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
        className,
      )}
      {...props}>
      {children}
    </DialogPrimitive.Content>
  </DialogPortal>
));
DialogContent.displayName = DialogPrimitive.Content.displayName;

const DialogHeader = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogHeader.displayName = "DialogHeader";

const DialogFooter = ({
  className,
  ...props
}: React.HTMLAttributes<HTMLDivElement>) => (

);
DialogFooter.displayName = "DialogFooter";

const DialogTitle = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Title>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
>(({ className, children, ...props }, ref) => (
  <DialogPrimitive.Title
    ref={ref}
    className={cn(
      "text-lg font-semibold leading-none tracking-tight",
      className,
    )}
    {...props}>
    {children}
    <DialogPrimitive.Close className='absolute z-50 right-0 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground'>
      <Cross2Icon className='h-4 w-4' />
      Close
    </DialogPrimitive.Close>
  </DialogPrimitive.Title>
));
DialogTitle.displayName = DialogPrimitive.Title.displayName;

const DialogDescription = React.forwardRef<
  React.ElementRef<typeof DialogPrimitive.Description>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Description
    ref={ref}
    className={cn("text-sm text-muted-foreground", className)}
    {...props}
  />
));
DialogDescription.displayName = DialogPrimitive.Description.displayName;

export {
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogOverlay,
  DialogPortal,
  DialogTitle,
  DialogTrigger,
};

@layer utilities {
  .scrollbar::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  .scrollbar::-webkit-scrollbar-track {
    border-radius: 100vh;
    background: transparent;
  }

  .scrollbar::-webkit-scrollbar-thumb {
    background: transparent;
    border-radius: 100vh;
  }

  .scrollbar::-webkit-scrollbar-thumb:hover {
    background: #333333;
  }
}

isso aqui funciona perfeitamente, Obrigado!

After trying every method on this issue... this appears to be the best option!

This worked for me:
 <DialogContent> <ScrollArea className="overflow-y-scroll max-h-[90vh]"></ScrollArea></DialogContent>

This worked for me:
 <DialogContent> <ScrollArea className="overflow-y-scroll max-h-[90vh]"></ScrollArea></DialogContent>

this works but limits styling.

yes just came back to edit it, there is a blank footer area now when scrolling

WASTED A WHOLE LOT TIME IMPLEMENTING SOLUTIONS PROVIDED ABOVE

no matter what is done as said above, some part is cropped or not aligned
in the end the only fix that worked for me was using "scroll-area"
I myself wouldn't want to club components
but have to, as my usecase is Stripe embedded payment using dialog

BUT STILL 100% WORKING FIX FOR NOW:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-dvh"> // add max-h-dvh to dialog content
+  <ScrollArea className="max-h-dvh">{children}</ScrollArea>
</ DialogPrimitive.Content>

Above works like magic. But if want the same with even better UI, try this:
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="max-h-[calc(100dvh-1.5rem)] w-[calc(100dvw-1.5rem)]">
+  <ScrollArea className="max-h-[calc(100dvh-3rem)]>{children}</ScrollArea>
</ DialogPrimitive.Content>

    [

        ![Onset-ezgif com-video-to-gif-converter](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

    ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

      [

      ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

   [ ![Onset-ezgif com-video-to-gif-converter](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA) ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

    [

        ![Onset-ezgif com-video-to-gif-converter](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

    ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

      [

      ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

   [ ](https://private-user-images.githubusercontent.com/58145505/337811025-f4b24a75-9308-4bf9-b086-5a4df90b778f.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjI5ODA4NTIsIm5iZiI6MTcyMjk4MDU1MiwicGF0aCI6Ii81ODE0NTUwNS8zMzc4MTEwMjUtZjRiMjRhNzUtOTMwOC00YmY5LWIwODYtNWE0ZGY5MGI3NzhmLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODA2VDIxNDIzMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ2OGUzNWQ4YmU0YTdkN2FiZDE5OTFjYTczNjJhZTMyZjgyOTMwOGRlNDMxOThiNDE4OTZkYmExMTNiZDMwMTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OqAv92MXOzv28L2-9cU38YKY1veT3cMludD2GFgjwrA)

This should be marked as the solution, worked perfectly for me. Just needed to wrap the troublesome component with the ScrollArea component.

thanks man, for the users saying, "it works but limits styling"
what exactly do you mean by that? do you have any refs?

saw some issues with form, and improved the version as
+ import { ScrollArea } from '@/components/ui/scroll-area'

<DialogPrimitive.Content className="h-min max-h-[calc(100dvh-1.5rem)] w-[calc(100dvw-1.5rem)] p-0">
+  <ScrollArea className="max-h-[calc(100dvh-1.5rem)] p-5">
+
{children}

+   </ScrollArea>
</ DialogPrimitive.Content>

alternative solution that I will be using
+  <DialogPrimitive.Content className="max-h-[calc(100dvh-0.75rem)] w-[calc(100dvw-0.75rem)] overflow-y-auto">
  ...
</ DialogPrimitive.Content>

This is my component:
`"use client";
import {
Dialog,
DialogContent,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
DialogClose,
} from "@/components/ui/dialog";
import { Button } from "./ui/button";
type Props = {
content: React.ReactNode;
title: string;
trigger?: React.ReactNode;
isOpen?: boolean;
onClose?: () => void;
};
export function Modal({ content, title, trigger, isOpen, onClose }: Props) {
const isControlled = !!isOpen || !!onClose;
return (
<Dialog
open={isOpen}
onOpenChange={(shouldOpen) => {
if (shouldOpen) return;
if (!onClose) return;
onClose();
}}
>
{!!trigger && {trigger}}
  <DialogContent className="max-h-[100%] overflow-y-scroll sm:max-w-screen-sm">
    <DialogHeader>
      <DialogTitle className="mb-4 text-3xl">{title}</DialogTitle>
    </DialogHeader>
    {content}
    <DialogFooter className="sm:justify-end">
      <DialogClose asChild>
        <Button
          type="button"
          variant="secondary"
          onClick={isControlled ? onClose : undefined}
        >
          Close
        </Button>
      </DialogClose>
    </DialogFooter>
  </DialogContent>
</Dialog>

);
}
`
All other solutions did not work for me on desktop AND mobile. The only thing I really changed was to add "max-h-[100%] overflow-y-scroll sm:max-w-screen-sm" on the <DialogContent.
Watch out "max-h-full overflow-y-scroll sm:max-w-screen-sm" did NOT work on mobile

The solutions did not work for me on Desktop and Mobile. I found a simple solution:
The key is <DialogContent className="max-h-full overflow-y-scroll sm:max-w-screen-sm">
Watch out: The className="max-h-screen did not work for me on mobile, it has to be max-h-full
`    <Dialog
open={isOpen}
onOpenChange={(shouldOpen) => {
if (shouldOpen) return;
if (!onClose) return;
onClose();
}}
>
{!!trigger && {trigger}}
  <DialogContent className="max-h-full overflow-y-scroll sm:max-w-screen-sm">
    <DialogHeader>
      <DialogTitle>Title</DialogTitle>
    </DialogHeader>

    <DialogFooter>
      <DialogClose asChild>

      </DialogClose>
    </DialogFooter>
  </DialogContent>
</Dialog>`

The solutions did not work for me on Desktop and Mobile. I found a simple solution:
The key is <DialogContent className="max-h-full overflow-y-scroll sm:max-w-screen-sm"> Watch out: The className="max-h-screen did not work for me on mobile, it has to be max-h-full
<Dialog
      open={isOpen}
      onOpenChange={(shouldOpen) => {
        if (shouldOpen) return;
        if (!onClose) return;
        onClose();
      }}
    >
      {!!trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}

      <DialogContent className="max-h-full overflow-y-scroll sm:max-w-screen-sm">
        <DialogHeader>
          <DialogTitle>Title</DialogTitle>
        </DialogHeader>

        <DialogFooter>
          <DialogClose asChild>

          </DialogClose>
        </DialogFooter>
      </DialogContent>
    </Dialog>

it's almost 2025 now, you are still using full? use dvh, svh or something, don't go using full and commenting over

@samfromaway it's almost 2025 now, you are still using full? use dvh, svh or something, don't go using full and commenting over
I am not being rude, it's just full is full of shiz on mobile devices and what not, dvh is much recommended

I tested max-h-dvh and it works, thanks.
Can you ellaborate exactly what the issues are for me to learn, I never encountered issues yet with "full"

when you use a mobile say your screen estate is 640px, and your content is 320px
when you use max-h-full/screen based on last parent, there would be a scroll, it should not be there
when using dvh, it amounts the reduction of browser searchbar, bottombar, etc, and when scrolled and screen size expands, it does too dynamically


Log paging controls

Should implement:

Shift+G to go to end
g to go to start
Ctrl+F to go forward a page
Ctrl+B to go back a page

Handled by #11


Save SIFT2 mu parameter

Addresses #772
Currently the SIFT2 mu parameter is connected to mu in the outputnode, but is never written to the output folder. Given that this is a necessary correction factor when using sum of streamlines connectomes after SIFT2, this will write the mu parameter to the derivatives folder.

Thanks for implementing this @araikes. It looks good, the tests are failing because they weren't expecting the mu files. I added these and hopefully everything will pass now 🤞

Codecov Report
Attention: Patch coverage is 0% with 3 lines in your changes missing coverage. Please review.

Project coverage is 29.77%. Comparing base (555556c) to head (b56c159).
Report is 1 commits behind head on master.

Files
Patch %
Lines

qsiprep/workflows/recon/mrtrix.py
0.00%
3 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #774      +/-   ##
==========================================
- Coverage   29.77%   29.77%   -0.01%
==========================================
  Files          97       97
  Lines       14577    14580       +3
  Branches     1885     1886       +1
==========================================
  Hits         4341     4341
- Misses      10110    10113       +3
  Partials      126      126

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Sort out files names for VC

Look into TSV files and sort it out there.
Check all VC to see that.

I'll update README with best practices for TSV files.
something like:
XXN for normal/blood
YYT for tumor
ZZR for relapse
If you have an idpatient AA, use it, otherwise, use XX


Recording doesnt start from first time

When I click on record icon, it doesn't start recording immediately, I have to click it another time for it to actually start recording.

Hello @KhaledAbdElNasserAhmed
check permission if OK then the record will start record directly

I'm having the same problem. It has nothing to do with permission!

@dogukanatakul
did you add permissions that added inside Readme ?


What does --disable-openapi-validation do exactly?

Hello,
I try to understand the exact role of the option --disable-openapi-validation.
I created a simple chart with just this pod resource:
apiVersion: v1
kind: Pod
metadata:
  name: testdenouche
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

Then I tested the following modifications:

add a spec.toto = tutu
add a metadata.labels.tutu = test@denouche
change the data format of spec.containers from an array to a map (just by removing the - before name: nginx)

For each of these changes I tested the helm ugrade with and without the option --disable-openapi-validation and the behavior is exactly the same each time : I have an error and a new secret is created, and I call see the failed release in helm history ... output list.
The only things I found on this option is the doc if set, the upgrade process will not validate rendered templates against the Kubernetes OpenAPI Schema and some issues and PR when this option have been introduced #6819 of @bacongobbler but I cannot find a case where I can deploy something using the option --disable-openapi-validation which is not allowed without this flag.
Thanks for your help.
Output of helm version:
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
Output of kubectl version:
Client Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.5", GitCommit:"890a139214b4de1f01543d15003b5bda71aae9c7", GitTreeState:"clean", BuildDate:"2023-05-17T14:14:46Z", GoVersion:"go1.19.9", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.7-gke.500", GitCommit:"178d88870d1ad59817801635c1da4b49cb46a016", GitTreeState:"clean", BuildDate:"2023-07-26T09:33:20Z", GoVersion:"go1.20.6 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}

Cloud Provider/Platform (AKS, GKE, Minikube etc.):
GKE

That flag is meant to toggle Kubenetes API object validation, the same as kubectl apply --validate='ignore'|'strict'
https://github.com/helm/helm/blob/1b260d0a796882a1e90f0fa3c832659dbe2e675c/pkg/action/install.go#L320
https://github.com/helm/helm/blob/1b260d0a796882a1e90f0fa3c832659dbe2e675c/pkg/kube/client.go#L344-L347
To your point through, I have no idea why it isn't working.

@gjenkins8 Can you maybe give us an example/usecase of kubectl apply --validate='ignore'|'strict' please ?

The problem is this option have a really big impact on memory usage.
Let me take an example.
I have a Golang program using the Helm library github.com/helm/helm/pkg/action.Upgrade and my program is doing 3 Helm Upgrade in a row, with the same chart.
Here is the MemStats.Alloc evolution during the execution:

That's why I'm asking for the real interest of this option.
Currently we have some memory issues (our app is oomkilled) when doing 30 helm upgrade simultaneously (memory goes superior to 3Go), while when à add the DisableOpenAPIValidation = true flag I can handle more than 300 helm upgrade simultaneously without any problem (memory never exceed 550Mib).

Here is pprof extracts in both situations (with and without the DisableOpenAPIValidation option) where we can clearly see the memory impact of the manifest validation:
With the validation:

And without:

It would be required to dig into Kubernetes' client-go code in order to understand the difference in memory usage depending on validation options I think. I guess it is performing additional serialization and checking of the object contents against openapi schemas.
I would be hesitant to use disabling this feature as a memory saving technique personally.

OK after some investigation I think I found the source of the problem. I will create a PR.

I'm not sure if this should be captured in a different issue but searching lead me here for schema validation things.

That flag is meant to toggle Kubernetes API object validation, the same as kubectl apply --validate='ignore'|'strict'

It seems like kubectl apply (defaulting to strict validation) actually validates/enforces more than helm does. Take for example the below pod manifest:
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  badSchema: true
  anotherOne: true
  containers:
    - name: thing
      image: busybox

kubectl apply strictly blocks this with the error: Pod in version "v1" cannot be handled as a Pod: strict decoding error: unknown field "spec.anotherOne", unknown field "spec.badSchema". Helm on the other hand will allow this to be installed/applied and only throw a warning. I'm not seeing any other possible flags for stricter schema validation, but if the desire is for helm to align with kubectl on default schema behavior I think this is a current gap. For context I actually encountered this issue due to a misspelling in a spec field - kubectl would've caught this for me, but because it was not a required field helm allowed it.

I'm going to close this issue in favor of https://github.com/helm/helm/issues/13053, since the description to the broken behavior of object schema validation is clearer there.


External inputs inside an inline block look bad

Perhaps there's something we could do here, like stretching the shorter blocks to align on the right

I am very sympathetic to the idea that we should implement a different model for this.  Rather than independently choosing between inline and external for each block, I think perhaps there should be an option on a block that makes that block and all its descendents into inline blocks, or that makes that block and all its parents into the external style.  These options could be called "Unwrap line" and "Wrap line", for example.


Unable to use action inside a self-hosted runner

We're currently in the process of migrating to a self-hosted runner setup. We've been actively using 1.10 in our workflows for months without a problem with Github-hosted runners.
When trying to run this action inside of our self-hosted runners we receive the following error:
Error: ~/.gradle-cache-action/layer-dependencies-gradle.json is not found

Downgrading the action to 1.9 resolved the above error and we were able to run the workflow without issue in our branch, however, when we merged into our default branch, the action failed with the same error.
Our current self-hosted runner image is fairly bare-bones. We're extending the summerwind/actions-runner only to add node and kubectl, relying on setup actions for other necessary dependencies, primarily<EMAIL_ADDRESS>in this case.
For reference, this is how we're using the action in one place:
      - name: Gradle Build
        uses<EMAIL_ADDRESS>        env:
          GITHUB_TOKEN: ${{ secrets.TOKEN }}
        with:
          arguments: build -x test
          gradle-version: wrapper
          save-local-build-cache: ${{ github.ref == env.default_branch_ref }}
          save-generated-gradle-jars: ${{ github.ref == env.default_branch_ref }}

Are you aware of any necessary dependencies that must be present on the runner for us to leverage this action? We're pretty stumped on this one!
Here's a gist of the complete output including debug logs for this step:
https://gist.github.com/braedongough/4aa7aa6311d8caad7470c0512f70b9ab

I figured out what our issue was. For anyone else leveraging actions-runner-controller, we updated our working dir in the RunnerDeployment to be /home/runner/work/ to align with the working dir of the Github-hosted runners.
By default the working dir is set to /home/runner/_work/

Hi, we stumbled on the same issue, I believe. We have several older projects built on self-hosted runners, and those work fine. A newly created project doesn't with the error message above. I don't know which version the other projects used originally, but to me it seems like a regression. Older version can set up correctly on self-hosted runners, newer cannot.


Permission READ_PHONE_STATE could be removed?

For speech announcements  a PhoneStateListener is used to determine if a call is ongoing or no, and thus decide if these should be skipped or not.
However, this requires android.permission.READ_PHONE_STATE - which also allows to phone numbers of the device etc.
It might be possible to use AudioManager.OnAudioFocusChangeListener and check if the new mode is MODE_IN_CALL to reproduce the existing behavior.
See:
https://developer.android.com/reference/android/media/AudioManager.html#MODE_IN_CALL
NOTE: Also check these if these features are actually used:
<uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />
<uses-feature
        android:name="android.hardware.telephony.gsm"
        android:required="false" />

Implemented in 303abac9804d56dc2fce91acfa2fc68bef9c50ec.


[WIP] Replacing paradim with events or experimental paradigm as per BIDS

Must be merged only AFTER merging #238
For issue #216

OK, I have started merging branches to master, which elicits these conflicts :-(

Yeah, no worries, we'll resolve this one once you are done with those merges.

There are lots of potential merge conflicts. I will resume work on this one on Sunday, until then most of the other PRs will likely be merged


information about devices and other configuration

Thanks for your excellent job! We are interested in this project and we wonder your devices for this job.
When we tried doing reproduction work, we found that we can only achieve around 52% at Rank-1 for SYSU-MM01 but you can reach 57% in your log, and can you give me some suggestions on this result? By the way, our devices are 2 GPUs of V100-SXM2-32GB.

IR Clustering criterion: eps: 0.600
RGB Clustering criterion: eps: 0.600
==> Create pseudo labels for unlabeled RGB data
Traceback (most recent call last):
File "/media/lele/e/zzg/USL/train_sysu.py", line 1110, in
main()
File "/media/lele/e/zzg/USL/train_sysu.py", line 377, in main
main_worker_stage1(args,log_s1_name) # Stage 1
File "/media/lele/e/zzg/USL/train_sysu.py", line 456, in main_worker_stage1
features_rgb, labels_rgb = extract_features(model, cluster_loader_rgb, print_freq=50,mode=1)
File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 43, in extract_features
outputs = extract_cnn_feature(model, imgs, mode)
File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 25, in extract_cnn_feature
outputs = model(inputs, inputs, modal=mode)
File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 159, in forward
return self.module(*inputs[0], **kwargs[0])
File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
TypeError: forward() got an unexpected keyword argument 'modal'
Hello, the code has this problem, how to solve it?

IR Clustering criterion: eps: 0.600 RGB Clustering criterion: eps: 0.600 ==> Create pseudo labels for unlabeled RGB data Traceback (most recent call last): File "/media/lele/e/zzg/USL/train_sysu.py", line 1110, in main() File "/media/lele/e/zzg/USL/train_sysu.py", line 377, in main main_worker_stage1(args,log_s1_name) # Stage 1 File "/media/lele/e/zzg/USL/train_sysu.py", line 456, in main_worker_stage1 features_rgb, labels_rgb = extract_features(model, cluster_loader_rgb, print_freq=50,mode=1) File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 43, in extract_features outputs = extract_cnn_feature(model, imgs, mode) File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 25, in extract_cnn_feature outputs = model(inputs, inputs, modal=mode) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 159, in forward return self.module(*inputs[0], **kwargs[0]) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) TypeError: forward() got an unexpected keyword argument 'modal'
Hello, the code has this problem, how to solve it?

Hello, have you ever changed the code? We think this error happens when changing the model or relative functions.

IR Clustering criterion: eps: 0.600 RGB Clustering criterion: eps: 0.600 ==> Create pseudo labels for unlabeled RGB data Traceback (most recent call last): File "/media/lele/e/zzg/USL/train_sysu.py", line 1110, in main() File "/media/lele/e/zzg/USL/train_sysu.py", line 377, in main main_worker_stage1(args,log_s1_name) # Stage 1 File "/media/lele/e/zzg/USL/train_sysu.py", line 456, in main_worker_stage1 features_rgb, labels_rgb = extract_features(model, cluster_loader_rgb, print_freq=50,mode=1) File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 43, in extract_features outputs = extract_cnn_feature(model, imgs, mode) File "/media/lele/e/zzg/USL/clustercontrast/evaluators.py", line 25, in extract_cnn_feature outputs = model(inputs, inputs, modal=mode) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/parallel/data_parallel.py", line 159, in forward return self.module(*inputs[0], **kwargs[0]) File "/home/lele/miniconda3/envs/pytorch1.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl result = self.forward(*input, **kwargs) TypeError: forward() got an unexpected keyword argument 'modal'
Hello, the code has this problem, how to solve it?

Hello, have you ever changed the code? We think this error happens when changing the model or relative functions.

您好，我没有改动任何代码，仅修改了自己的数据集路径

请问解决了吗？

请问解决了吗？应该怎么处理

未解决


IP Limiting

I am building a service that needs to fetch user-provided URLs. I have added some protection such that the user can't request localhost, whatever.internal or <IP_ADDRESS>. However I have not found a way to block a request such as internal.some-real-domain.example which resolves to an internal IP address. I think it would be valuable if reqwest could provide an internal hook, much like the redirect hook that could validate (and maybe rewrite) IP addresses before connections are made.
The following cases should be handled:

Top level requests to IP addresses.
Top level requests to domains.
Redirects to either of the above.

A possible API would be something like this:
impl ClientBuilder {
  pub fn ip(self, policy: reqwest::ip::Policy) -> Self;
}

mod ip {
  struct Policy;

  impl Policy {
    pub fn custom(fn: impl Fn(Attempt<'_>) -> Action + Send + Sync + 'static) -> Self;
  }

  struct Attempt;

  impl Attempt {
    pub fn url(&self) -> &Url;
    pub fn ip(&self) -> std::net::SocketAddr;

    pub fn allow(self) -> Action;
    pub fn connect_to(self, std::net::SocketAddr) -> Action;
    pub fn error(self, error: impl Into<Box<dyn StdError + Send + Sync>>) -> Action;
  }

  struct Action;
}

(This is modeled after the redirect module but maybe the naming could be tweaked to be more clear in this case.)
For my use I would do something like this:
reqwest::Client::build()
  .ip(request::ip::Policy::custom(|attempt| {
    if attempt.ip().is_global() {
      attempt.allow()
    } else {
      attempt.error(FeedError::Host(attempt.ip().to_string())
    }
  })

Unanswered questions:

Async?
How to handle non-IP connections. For example UNIX sockets or Tor addresses. I think maybe the IP policy can be skipped for these as they are both knowable based on the URL (a hostname can't resolve to either of these AFAIK).
This always resolves the IP. Maybe it could be made lazy to make this essentially a full DNS resolution hook, but then we are back to "async?"

Alternatives:

The user can manually resolve the hostname then pass the IP to reqwest along with Host: header and SSL verification configuration. This is difficult and error prone.
A general DNS resolution hook can be added. This may be a bit more flexible but would make it harder to support things like SRV records (or whatever alternative is currently being proposed).
Do nothing. Then users of reqwest are at risk of information leaks if they connect to user-provided URLs.

A related solution would be to just open up more the ability to set a custom DNS resolver: #1125. I think that would be preferable and more powerful for all use cases.

That would be one option (as included in alternatives). However it has a number of downsides:

Requires the user to write quite a bit of code that already exists in reqwest.
May be hard to make work with SRV records which are supposedly on the horizon for HTTP. Hopefully the DNS API added can handle this. Maybe I should comment on that issue.

But maybe this can be alleviated by a DNS resolver hook paired with making the existing resolution logic somewhat reusable so that you can just add a filter on top.
In fact it may be better to go even further and provide a "global requests only" mode which provides a single switch to provide a generic set of security policies without users have to worry themselves with what are global IPs and what are internal or reserved hostnames. I suspect that this is a common use case and making it as easy to get right as possible would be beneficial. I suspect that there are a lot of people who should be using this mode and haven't considered it, maybe seeing the ClientBuilder::public_urls_only would put the idea into their mind. Of course this depends if it is possible to get a widely enough agreed upon definition of "global" (or make it easy enough to override reqwest's policy for exceptions).


[docs] Fix crash access to localStorage in Firefox

This avoids the page crashing when accessed in Firefox with cookies disabled

[x] I have followed (at least) the PR section of the contributing guide.

Fixes #37514

@oliviertassinari Can you approve it?


Getx Deeplink Issue when app terminate

When i am using Getx and uni_links I am getting an Error on LabledGlobelKey. Need Help. Thanks in advance
App Opened Normally (Icon Tap) Working
App in Background and Link Tap Working
App Terminated, Opened Normally then it is working
App Terminated, Opened Tapping Link then it is not working. Then it is giving error.

Im also facing the same issue . A GlobalKey was used multiple times inside one widget's child list.
The offending GlobalKey was: [LabeledGlobalKey#0f54f Key Created by default]
The parent of the widgets with that key was: _FocusInheritedScope
The first child to get instantiated with that key became: Navigator-[LabeledGlobalKey#0f54f Key Created by default]
dirty
dependencies: [UnmanagedRestorationScope]
state: NavigatorState#64d70(lifecycle state: initialized)
The second child that was to be instantiated with that key was: _FocusInheritedScope

I am also facing same issue, when trying to get to the profile page with the id

Hello @xelent-nabeel, @jahidsakan, @TC-Shubh  I have same issue in my old projects
after spending a lot of time I found two the solutions that you can choose

Make sure the initialRoute name is '/'
or
When the deeplink came from cold start, its always open the '/' as initial route and if your initial route name is not '/', getx throw to the unknown route property so you must set unknownRoute in the GetMaterialApp

See the code here
Hope this help you
*Note: it was fixed in the last merge. It's not just published. I wish he could now because trying to pull from the git commit is impossible. https://github.com/jonataslaw/getx/pull/3067

Hi @nandakista
Still same issue, show LabeledGlobalKey if app after terminated.

I am also facing same issue, show LabeledGlobalKey if app after terminated.


about run_rank_llm.py

Why does the error "Unable to find javac" when I run the code？

Can you provide more details?
This is perhaps something to do with the anserini/pyserini side of things for retrieval. I suggest moving the same issue over there if you are still facing it.

@wsa-dhu can you confirm this is still an issue? Else I'll resolve it

Hi @wsa-dhu,
I was facing the same issue and it is caused because you might not have the java compiler installed in your environment.
If you are on Ubuntu then running this might fix the error -
sudo apt install default-jdk


Change image repo CO uses

Change the image repo CO uses from quay to ghcr, we need to wait for https://github.com/ComplianceAsCode/compliance-operator/pull/263 to merge.

We also need to wait for https://github.com/ComplianceAsCode/compliance-operator/pull/270 to merge, so we can have the test content ready

/retest
Since it looks like the required patches merged.

/retest

Adding other required labels since this is specific to upstream maintenance and testing.


MSTest v3 Assert.ThrowsExceptionAsync is marked as returns nullable

Describe the bug
MSTest 3.0.0-preview-20221110-04
Assert.ThrowsExceptionAsync<T> now returns Task<T?> which causes null ref warnings/errors everywhere.
Expected behavior
Assert.ThrowsExceptionAsync<T> should return Task<T> (where T : Exception)
Actual behavior
Assert.ThrowsExceptionAsync<T> returns Task<T?>

Hi @Mertsch,
You are also right here. I got confused by the fact that the method does return null in some path but that path was indicated as unreachable in some method. I will fix the API and the code comments.


upload progress is not coming in main thread.

self.sessionManager.upload(multipartFormData: { multiPart in
    self.createParams(for: url, with: multiPart, images: images)
}, to: uploadURL, usingThreshold: .init(), method: method, headers: headers)
.uploadProgress(queue: .main, closure: { progress in
    if ApiManager.debug {
        debugPrint("Upload Progress: \(progress.fractionCompleted)")
    }
    success(nil, Float(progress.fractionCompleted), false)
})
.responseJSON(completionHandler: { [unowned self] data in
    if data.data == nil {
        return
    }
    switch self.parser.parse(responseData: data) {
    case .fulfilled(let value):
        success(value, 1.0, true)
    case .rejected(let error):
        failure(error)
    }

})

it works fine with background session configuration.

What queue is it called on?
Also, I'd don't know what you mean by "it works fine with background session configuration", as Alamofire doesn't support background URLSessionConfigurations at all.
Please fill out our issue template to include more details and the versions we ask for.

now its running in main queue and version is 5.2
and in my previous build i run the api on background URLSessionConfiguration there it is workig fine i m able to get the progress value but now i m running the api in main queue but i am not able to get the progress value. can you help me in this.
thanks.

It's entirely possible the progress isn't updated in a background session. However, Alamofire 4 is no longer supported, barring a severe issue, so I suggest you update to version 5.

i m using almofire 5.2 version.


Integration tests

use gestalt for integration tests.
add lease query
quick-fix output cleanup
quiets some flapping tests

fixes #120
fixes #33
refs #128
refs #116

Pull Request Test Coverage Report for Build 110

31 of 114 (27.19%) changed or added relevant lines in 14 files are covered.
253 unchanged lines in 9 files lost coverage.
Overall coverage decreased (-5.9%) to 59.974%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

cmd/common/monitor.go
0
1
0.0%

app/market/driver.go
0
1
0.0%

marketplace/monitor.go
0
1
0.0%

app/market/facilitator.go
0
2
0.0%

cmd/akash/status.go
0
3
0.0%

cmd/akash/query/query.go
2
6
33.33%

cmd/akash/deployment.go
0
7
0.0%

cmd/akash/provider.go
0
8
0.0%

cmd/akash/query/lease.go
10
20
50.0%

app/lease/app.go
0
21
0.0%

Files with Coverage Reduction
New Missed Lines
%

cmd/akash/query/query.go
1
68.89%

cmd/akash/context/flags.go
3
78.57%

cmd/common/monitor.go
5
73.53%

cmd/akash/status.go
18
0.0%

cmd/akash/marketplace.go
20
0.0%

cmd/akash/send.go
37
0.0%

cmd/akash/context/context.go
39
48.46%

cmd/akash/deployment.go
58
0.0%

cmd/akash/provider.go
72
0.0%

Totals

Change from base Build 98:
-5.9%

Covered Lines:
2814

Relevant Lines:
4692

💛  - Coveralls


chore (GRO-1015): Change gene for HomeAuctionLotsRail

The type of this PR is: Feature
This PR solves GRO-1015
Description
Replace highlights-at-auction with our-top-auction-lots

lgtm since switching to querying forartworksConnection works out in the end


Formatting batch fragment results to help debug

You can dump the stage_graph into a json (traversing the graph) and verify the resulting json for correctness.
Otherwise you will have to write much boilerplate code for every case.
Originally posted by @neverchanje in https://github.com/singularity-data/risingwave-dev/pull/65#discussion_r802199512

Closed until we really need this.


New method: GetSecuredApiKeyRemainingValidity

Summary
When a secured API keys expire, search breaks. The current workaround is more complex
than it needs to be.
The options for developers using Algolia require, at every place where a search
operation is performed, catching an operation error, identify it as a
"ValidUntil" error, then regenerate the API key, and perform the search
operation again.
The idea is to define a method which tells if a SecuredAPIKey
is expired or not without making a single call to Algolia's API.
References

Specs: https://github.com/algolia/algoliasearch-client-specs-internal/pull/25

Is it an option to have a method getSecuredApiKeyValidity(key), so a person can do their own calculation, and this method can be side-effect free?

Note that decoding from base64 is different in browser (atob) than in Node (using Buffer)


e_tls_server_cert_valid_time_longer_than_398_days calculation is off by 1 second

RFC 5280 section <IP_ADDRESS> (and the BRs by reference) defines the Validity Period as the period of time from notBefore through notAfter, inclusive. This means that a certificate whose notBefore and notAfter field values are the same has a validity period of 1 second. Expanding from this base case, this means that certificates with a notAfter of exactly 398 days (34,387,200 seconds) greater than the notBefore value are actually valid for 34,387,201 seconds and thus are valid for 399 days per the rounding rules found in section 6.3.2 of the BRs.
It appears that the e_tls_server_cert_valid_time_longer_than_398_days lint does a simple time difference between the notBefore and notAfter and does not add 1 second to this interval to determine the certificate's Validity Period. To accurately detect certificates that do not comply with the validity period restrictions in the BRs, this additional second needs to be added to the interval and used for comparison.

Hopefully folks paid attention to the SHOULD be 397 days, which was for exactly this scenario.


add copying the changes in the PR to the subdomain tests

We're not running the full setup-playwright-tests script because subdomain multisites don't need most of the setup. However, it does need some of the setup (specifically copying the changes from the PR to the fixture site), so we need to manually add those back into that workflow.
In the future we might be able to run just portions of the script for the purpose of subdomain multisite so we're not duplicating code here.
This PR is blocked by #147 -- the changes the robot fixed were part of what was updated in that PR. Merging this PR before that one will create a commit that gets dropped during deploy.

@pwtyler re-requesting review since I've made changes since your ✅


[Delta Green] Bug fix Change relative path of images to absolute

substitute the relative path to the absolute relative to github for showing the art
I used relative path for all the images, resulting in art not showing up on roll20. I've updated all the relative path to an absolute one with respect to the absolute path on github (i.e. https://github.com/Roll20/roll20-character-sheets/DeltaGreenRPG/img/?raw=true)
Changes / Comments
Roll20 Requests
Comments are very helpful for reviewing the code changes. Please answer the relevant questions below in your comment.

[x] Does the pull request title have the sheet name(s)? Include each sheet name.
[x] Is this a bug fix?
[ ] Does this add functional enhancements (new features or extending existing features) ?
[x] Does this add or change functional aesthetics (such as layout or color scheme) ?
[ ] If changing or removing attributes, what steps have you taken, if any, to preserve player data ?
[ ] If this is a new sheet, did you follow Building Character Sheets standards ?

If you do not know English. Please leave a comment in your native language.

@clevett I have updated the path from relative to absolute to show the art in the sheet :)


Problem with build on ubuntu 22.04 help

Hello sir,
Here is the link its the .cs plugin on Ethereum when will you able to fix it?
https://github.com/xiaolin1579/miningcore/actions/runs/9592377585/job/26450831258)](https://github.com/xiaolin1579/miningcore/actions/runs/9592377585/job/26450831258)
let me know  pls soon as possible
thanks

https://github.com/xiaolin1579/miningcore/tree/dev/src    here

yes installation is broken @xiaolin1579 please have a look and try to fix it.

There were some issues after merging blackmennewstyle's code, which were not resolved, so I moved to develop in this new git.
https://github.com/Kudaraidee/miningcore


Don't lstrip remote storage URL because it could strip the bucket name

It’s conceivable that the bucket starts with g or s, in which case this
lstrip would remove characters from the bucket name. Instead, remove
the URI protocol explicitly, then strip the /, then split the remainder.
I think this is the issue that was being described in #767 and should supersede that PR.

Coverage remained the same at 66.381% when pulling b9ef88efe0e47efdf12bac55d40f0415fd484c4f on jlowin:remote-logging-fix into 0e325d9e344d71136c469ab3404deb79cd5d3291 on airbnb:master.

Would it not be more robust to use urllib.parse (py3) or urlparse (py2) to cut off the scheme. And in this particular case I wonder if in this code the issue would ever pop up as the check to reach this code is based on "startswith('gs:/')". Still it is nice to have it fixed.

@bolkedebruin yes -- that's the proper way :) I'll resubmit.

Coverage decreased (-0.03%) to 66.422% when pulling 41427a59d97c675967f2293cbdc8a6299a82f951 on jlowin:remote-logging-fix into 1db892b36d789d34facbb78e92c74dd3d34d4ee2 on airbnb:master.

Nice! Now bonus points for adding a test to the public method and for squashing the commit ;-).

Coverage increased (+0.2%) to 66.636% when pulling 147c51ebdc34e22f7946ec93de5c16490003b6a6 on jlowin:remote-logging-fix into 1db892b36d789d34facbb78e92c74dd3d34d4ee2 on airbnb:master.

Coverage increased (+0.2%) to 66.711% when pulling 2e1159cbc86b77fa6f5f18ef499a7d34b10db066 on jlowin:remote-logging-fix into c14d2ea0e0392a7cfef7d06b4b29ac1e1f47827a on airbnb:master.

Can you rebase? Then we can merge!

@bolkedebruin rebased, pending travis.

Coverage increased (+0.2%) to 67.305% when pulling dfdec8954f9aaeb15c53ee8eb61303416b281799 on jlowin:remote-logging-fix into ec2e02acc4489cb88071b510a4e35351e9cc6aa1 on airbnb:master.


Remove/replace Natural Earth data from Transport Lines in tiles

Over in #89 @tsinn  found that for transport_lines, the layer we can style includes both NE and OHM data, so we can't exclude NE through styling alone.
Here's NE:
https://github.com/developmentseed/osm-seed/blob/ohm/tiler-server/config/config.toml#L570-L612
And here's OHM:
https://github.com/developmentseed/osm-seed/blob/ohm/tiler-server/config/config.toml#L129-L157
I imagine this means we need to replace the NE lines with OHM source. Will that present problems for generalization?

@danrademacher I think this is as simple as removing the ne. layers from the transport_lines group. I don't think we need to worry about generalization right now as there's not much data.

@danrademacher @tsinn this is now fixed on staging https://vtiles-staging.openhistoricalmap.org/#6.74/-34.189/150.241. Once you confirm it's looking good, I'll deploy to production!

Trying to verify this. Left is staging, right is production, showing only transport_lines:

So they look different, but it looks more like tiling artifacts than what I would expect. I would expect MUCH less data at these views once we remove NE data from this layer.

@danrademacher the queries are pretty evidently only pulling from OSM tables for this layer https://github.com/developmentseed/osm-seed/blob/ohm/tiler-server/config/config.toml#L576-L612
I suspect this would be the tile cache. Let me try to purge the cache and let's see what happens.

@danrademacher i purged the cache for North America and now all the NE artifacts are gone.

Once you confirm this is ok, I'll purge cache for the entire world.

Looks like there's still a NE populated places layer that needs to be removed.
I'd confirm, but vtiles-staging is unreachable right now...

Note that the approach we have taken so far is that DevSeed needs to change tiles ONLY for layers that mix OHM+NE data (eg transport_lines ). For pure NE layers, Tim is removing those from the style side, so they just never appear on the map, even though they are still in the tiles

This is done.


sqlite3/test env: raw knex queries can cause inconsistency with dates

I’ve noticed an issue with dates and our test env.
Our test utils offer a way to insert data into the database without using the model layer (raw knex queries like db.knex('posts').insert(...)). Especially in case of dates our model date hook is not triggered (fixWhenSave). This hook takes care of inserting dates in the correct format.
It can happen in the test env (using raw knex queries) that for sqlite3 timestamps are stored instead of our new date format YYYY-MM-DD HH:mm:ss.
Here is an example where it can cause heavy bugs:

you add posts via the test env with a specific date
they are stored in sqlite3 as timestamps
you add an endpoint which queries posts with from/to
because your dates are stored as timestamps, you would filter something like filter = 'created_at>moment(date).valueOf())
you add a test and your test is green
now you start your server in production using sqlite3, but it doesn't work
why?because in production the model layer is used and the fixWhenSave model hook converts every date into the format YYYY-MM-DD HH:mm:ss and also stores it like this into sqlite3

One solution could be: getting rid of raw knex queries.
Advantage:

everything (especially dates) is normalized

Disadvantage:

it's harder to insert data because the whole model logic (validation etc) is involved

Another solution could be: extend the test utils to normalize dates
Advantage:

we can still insert data fast without the model layer

Disadvantage:

unneeded complexity in the test env

Third solution could be: keep as is and developer needs to be aware of this fact
Advantage:

no code change at all

Disadvantage:

can cause trouble

These are just three spontaneous solutions, i am happy and open for more ideas.
For now everyone who test with dates should use the model layer. (like models.Post.add(...)).

I think both this issue and #6898 are pointing to us needing to upgrade our test fixtures framework a bit.
In the case where we are using knex to insert fixture data really fast, we need to be more careful about creating objects which match the behaviour of the models.
We have lots and lots of utils atm for creating data, many tests need the DB initialised into a particular state. Some grab the raw JS objects to use during the tests, but some want data for inserting via knex (direct inserts) some want data for models and some want data for the API.
I think we need to work on cleaning up the way in which this data can be accessed to use a cleaner API, and then making sure that the data provided via the API is in the correct state.
i.e.  if you ask the data generator for data to insert into the db, the date should be correctly prepared for you.

This seems very similar to #7196 @acburdine / @kirrg001 maybe close one or the other?

Closing in favour of #7196, but we have to consider this issue in. Added as sub task.


⚠ SolarOscp has degraded performance

In 0b8a906, SolarOscp ($SOLAROSCP_URL) experienced degraded performance:

HTTP code: 200
Response time: 140 ms

Resolved: SolarOscp performance has improved in 8555fc8 after 52 minutes.


Emit notifications instead of logging to console.

This will emit Atom notifications on various error conditions instead of printing to the console, to make it clearer when racer fails for any reason.
An additional notification is added in the situation where exit code<PHONE_NUMBER> is yielded by racer -- on Windows, this means a DLL file is missing (usually libgcc). This happens most often when racer is run right out of its target directory. This issue tripped me up for months.

This looks great. Thanks for your contribution.