{"version":3,"names":["createControlledState","FloatingTree","useFloatingParentNodeId","readOption","createDialog","useDialogRootContext","useDialogRootInternal","DialogRootComponent","props","resolvedOpen","setUncontrolledOpen","controlled","open","undefined","Boolean","default","defaultOpen","fallback","name","state","dialogPrimitive","modal","disablePointerDismissal","role","api","DialogRoot"],"sources":["dialog-root.tsx"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\n/**\n * `<Dialog.Root>` — Solid 2 port of Base UI React's `DialogRoot`\n * (`packages/react/src/dialog/root/DialogRoot.tsx`). A thin wrapper\n * around `useDialogRootInternal` (shared with `<AlertDialog.Root>`).\n */\n\nimport { createControlledState } from \"../../internals/create-controlled-state\";\nimport {\n\tFloatingTree,\n\tuseFloatingParentNodeId,\n} from \"../../internals/floating-ui/components/floating-tree\";\nimport { type MaybeAccessor, readOption } from \"../../internals/maybe-accessor\";\nimport { createDialog } from \"../create-dialog\";\nimport type {\n\tDialogModalKind,\n\tDialogRootChangeEventDetails,\n\tDialogRootChangeEventReason,\n} from \"../dialog-root-context\";\nimport { useDialogRootContext } from \"../dialog-root-context\";\nimport type { DialogHandle } from \"../store/dialog-store\";\nimport {\n\ttype DialogPayloadChildRenderFunction,\n\tuseDialogRootInternal,\n} from \"./use-dialog-root-internal\";\n\nexport type {\n\tDialogModalKind,\n\tDialogPayloadChildRenderFunction,\n\tDialogRootChangeEventDetails,\n\tDialogRootChangeEventReason,\n};\n\n/**\n * Imperative actions surface written into `actionsRef` on `<Dialog.Root>`.\n * Mirrors React's `DialogRoot.Actions`.\n */\nexport interface DialogRootActions {\n\t/** Close the dialog imperatively. */\n\tclose: () => void;\n\t/**\n\t * Force-unmount the dialog subtree. Useful when a consumer's\n\t * animation library controls unmount timing and the dialog needs to\n\t * be dropped after the animation finishes — pair with\n\t * `onOpenChange({ preventUnmountOnClose })`.\n\t */\n\tunmount: () => void;\n}\n\nexport interface DialogRootProps<Payload = unknown> {\n\t/**\n\t * Controlled open state. When provided (resolved value not\n\t * `undefined`), the consumer owns the state — pair with\n\t * {@link onOpenChange}. When omitted, the dialog manages its own open\n\t * state (seeded from {@link defaultOpen}).\n\t */\n\topen?: MaybeAccessor<boolean | undefined>;\n\t/**\n\t * Initial open state when uncontrolled. Read once at mount.\n\t * @default false\n\t */\n\tdefaultOpen?: MaybeAccessor<boolean | undefined>;\n\t/**\n\t * Modal kind. `true` (default) = focus-trap + scroll-lock + outside\n\t * pointer block. `false` = neither. `\"trap-focus\"` = focus trap only.\n\t * @default true\n\t */\n\tmodal?: MaybeAccessor<DialogModalKind | undefined>;\n\t/** Fires on every open/close request. */\n\tonOpenChange?:\n\t\t| ((open: boolean, eventDetails: DialogRootChangeEventDetails) => void)\n\t\t| undefined;\n\t/**\n\t * Fires once the open/close transition has settled. Called with the\n\t * new `open` value.\n\t */\n\tonOpenChangeComplete?: ((open: boolean) => void) | undefined;\n\t/**\n\t * When true, outside-press dismissal is disabled. Escape + Close +\n\t * imperative close still work.\n\t * @default false\n\t */\n\tdisablePointerDismissal?: MaybeAccessor<boolean | undefined>;\n\t/**\n\t * Ref (callback or `{ current }`) that receives the imperative\n\t * actions object on mount.\n\t */\n\tactionsRef?:\n\t\t| ((actions: DialogRootActions | null) => void)\n\t\t| { current: DialogRootActions | null }\n\t\t| undefined;\n\t/**\n\t * Handle to connect with detached `<Dialog.Trigger handle=...>`\n\t * components or to control the dialog imperatively.\n\t */\n\thandle?: DialogHandle<Payload> | undefined;\n\t/** Controlled active trigger id (multi-trigger setups). */\n\ttriggerId?: string | null | undefined;\n\t/**\n\t * Children — plain JSX or `({ payload }) => JSX.Element` render\n\t * function.\n\t */\n\tchildren?: JSX.Element | DialogPayloadChildRenderFunction<Payload>;\n}\n\nfunction DialogRootComponent<Payload>(\n\tprops: DialogRootProps<Payload>,\n): JSX.Element {\n\t// Controlled / uncontrolled open state (Base UI `open` / `defaultOpen`\n\t// contract): the `open` prop wins while its resolved value is defined;\n\t// otherwise an internal signal (seeded once from `defaultOpen`) backs\n\t// the state and the root's `setOpen` writes it.\n\tconst [resolvedOpen, setUncontrolledOpen] = createControlledState<boolean>({\n\t\tcontrolled: () => {\n\t\t\tconst controlled = readOption(props.open);\n\t\t\treturn controlled === undefined ? undefined : Boolean(controlled);\n\t\t},\n\t\tdefault: () => readOption(props.defaultOpen),\n\t\tfallback: false,\n\t\tname: \"<Dialog.Root>\",\n\t\tstate: \"open\",\n\t});\n\n\t// Compose the headless Dialog primitive — owns `open`, `modal`, and\n\t// `disablePointerDismissal`. The wrapper layers floating-UI, focus\n\t// trap, scroll lock, portal, and animation on top. `onOpenChange` is\n\t// NOT wired into the primitive — the wrapper's own `setOpen` is the\n\t// sole writer so it can thread reason/event details through the full\n\t// floating-UI pipeline.\n\tconst dialogPrimitive = createDialog({\n\t\topen: resolvedOpen,\n\t\tmodal: () => readOption(props.modal) ?? true,\n\t\tdisablePointerDismissal: () =>\n\t\t\treadOption(props.disablePointerDismissal) ?? false,\n\t});\n\n\treturn useDialogRootInternal<Payload>(props, {\n\t\trole: \"dialog\",\n\t\tapi: dialogPrimitive,\n\t\tsetUncontrolledOpen,\n\t});\n}\n\n/**\n * Groups all parts of the dialog. Doesn't render its own HTML element.\n */\nexport function DialogRoot<Payload = unknown>(\n\tprops: DialogRootProps<Payload>,\n): JSX.Element {\n\tif (useDialogRootContext(true) != null || useFloatingParentNodeId() != null) {\n\t\treturn <DialogRootComponent {...props} />;\n\t}\n\treturn (\n\t\t<FloatingTree>\n\t\t\t<DialogRootComponent {...props} />\n\t\t</FloatingTree>\n\t);\n}\n"],"mappings":"AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,qBAAqB,QAAQ,yCAAyC;AAC/E,SACCC,YAAY,EACZC,uBAAuB,QACjB,sDAAsD;AAC7D,SAA6BC,UAAU,QAAQ,gCAAgC;AAC/E,SAASC,YAAY,QAAQ,kBAAkB;AAM/C,SAASC,oBAAoB,QAAQ,wBAAwB;AAE7D,SAECC,qBAAqB,QACf,4BAA4B;;AASnC;AACA;AACA;AACA;;AAqEA,SAASC,mBAAmBA,CAC3BC,KAA+B,EACjB;EACd;EACA;EACA;EACA;EACA,MAAM,CAACC,YAAY,EAAEC,mBAAmB,CAAC,GAAGV,qBAAqB,CAAU;IAC1EW,UAAU,EAAEA,CAAA,KAAM;MACjB,MAAMA,UAAU,GAAGR,UAAU,CAACK,KAAK,CAACI,IAAI,CAAC;MACzC,OAAOD,UAAU,KAAKE,SAAS,GAAGA,SAAS,GAAGC,OAAO,CAACH,UAAU,CAAC;IAClE,CAAC;IACDI,OAAO,EAAEA,CAAA,KAAMZ,UAAU,CAACK,KAAK,CAACQ,WAAW,CAAC;IAC5CC,QAAQ,EAAE,KAAK;IACfC,IAAI,EAAE,eAAe;IACrBC,KAAK,EAAE;EACR,CAAC,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,eAAe,GAAGhB,YAAY,CAAC;IACpCQ,IAAI,EAAEH,YAAY;IAClBY,KAAK,EAAEA,CAAA,KAAMlB,UAAU,CAACK,KAAK,CAACa,KAAK,CAAC,IAAI,IAAI;IAC5CC,uBAAuB,EAAEA,CAAA,KACxBnB,UAAU,CAACK,KAAK,CAACc,uBAAuB,CAAC,IAAI;EAC/C,CAAC,CAAC;EAEF,OAAOhB,qBAAqB,CAAUE,KAAK,EAAE;IAC5Ce,IAAI,EAAE,QAAQ;IACdC,GAAG,EAAEJ,eAAe;IACpBV;EACD,CAAC,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASe,UAAUA,CACzBjB,KAA+B,EACjB;EACd,IAAIH,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAIH,uBAAuB,CAAC,CAAC,IAAI,IAAI,EAAE;IAC5E,OAAO,CAAC,mBAAmB,CAAC,IAAIM,KAAK,CAAC,GAAG;EAC1C;EACA,OACC,CAAC,YAAY;AACf,GAAG,CAAC,mBAAmB,CAAC,IAAIA,KAAK,CAAC;AAClC,EAAE,EAAE,YAAY,CAAC;AAEjB","ignoreList":[]}