, "href" | "children"> & {
+ /** Content rendered inside the Link */
+ children: React.ReactNode;
+ /**
+ * Applies a primary color to the link and removes the default `underline`.
+ * @default false
+ */
+ primary?: boolean;
+ /**
+ * Apply `text-decoration: underline` to the Link
+ * @default true
+ */
+ underline?: boolean;
+ /** Force external link behavior, which is automatically detected based on the URL. */
+ forceExternal?: boolean;
+};
+type MakeOptional = Omit
& Partial>>;
+type TextLink = | "a" = AppsSDKUI.LinkComponent>(props: Omit, "href"> & TextLinkProps & {
+ /**
+ * Override the default component used for the link. This is useful for
+ * using a routing library, or SSR rendering.
+ * purposes.
+ *
+ * @default 'a'
+ */
+ as?: T;
+} & MakeOptional, "href" | "to">) => ReactNode;
+export declare const TextLink: TextLink;
+export {};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/TextLink/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/TextLink/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..486870281fe02d478531fc9c62b97622045f9720
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/TextLink/index.d.ts
@@ -0,0 +1 @@
+export { TextLink } from "./TextLink";
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/Textarea.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/Textarea.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..560d7e03558ccce9f852a362e8f3a4f648d134db
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/Textarea.d.ts
@@ -0,0 +1,66 @@
+import { type ControlSize, type Sizes, type Variants } from "../../types";
+export type TextareaProps = {
+ /**
+ * Visual style of the textarea
+ * @default outline
+ */
+ variant?: Variants<"outline" | "soft">;
+ /**
+ * Controls the size of the textarea
+ *
+ * | 3xs | 2xs | xs | sm | md | lg | xl | 2xl | 3xl |
+ * | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |
+ * | `22px` | `24px` | `26px` | `28px` | `32px` | `36px` | `40px` | `44px` | `48px` |
+ *
+ * @default md
+ */
+ size?: ControlSize;
+ /**
+ * Controls gutter on the edges of the textarea, defaults to value from `size`.
+ *
+ * | 2xs | xs | sm | md | lg | xl |
+ * | ------ | ------ | ------ | ------ | ------ | ------ |
+ * | `6px` | `8px` | `10px` | `12px` | `14px` | `16px` |
+ */
+ gutterSize?: Sizes<"2xs" | "xs" | "sm" | "md" | "lg" | "xl">;
+ /**
+ * Disables the textarea visually and from interactions
+ * @default false
+ */
+ disabled?: boolean;
+ /**
+ * Mark the textarea as invalid
+ * @default false
+ */
+ invalid?: boolean;
+ /**
+ * Allow autofill extensions to appear in the textarea
+ * @default false
+ */
+ allowAutofillExtensions?: boolean;
+ /**
+ * Select all contents of the textarea when mounted.
+ * @default false
+ */
+ autoSelect?: boolean;
+ /** Callback invoked when the textarea is autofilled by the browser */
+ onAutofill?: () => void;
+ /**
+ * Default number of rows to display
+ * @default 3
+ */
+ rows?: number;
+ /**
+ * Automatically adjust the height of the textarea based on its contents.
+ * @default false
+ */
+ autoResize?: boolean;
+ /**
+ * Maximum number of rows that can be displayed when autoResize is enabled.
+ * @default Math.max(rows, 10)
+ */
+ maxRows?: number;
+ /** Ref for the textarea */
+ ref?: React.Ref;
+} & Omit, "disabled" | "size">;
+export declare const Textarea: (props: TextareaProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..707cba84bd478eefa172aa6883537b24c042d145
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Textarea/index.d.ts
@@ -0,0 +1 @@
+export { Textarea, type TextareaProps } from "./Textarea";
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/CopyTooltip.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/CopyTooltip.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..107d38144c714f989faca2165fc63fcd8bfed1b0
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/CopyTooltip.d.ts
@@ -0,0 +1,32 @@
+import { Tooltip as RadixTooltip } from "radix-ui";
+export type CopyTooltipProps = {
+ children: React.ReactNode;
+ /** Value to copy to the clipboard */
+ copyValue: string;
+ /**
+ * Delay of when the tooltip is shown from first interaction, in milliseconds.
+ * @default 150
+ */
+ openDelay?: number;
+ /**
+ * The preferred alignment against the trigger. May change when collisions occur.
+ * @default center
+ */
+ align?: RadixTooltip.TooltipContentProps["align"];
+ /**
+ * An offset in pixels from the "start" or "end" alignment options.
+ * @default 0
+ */
+ alignOffset?: RadixTooltip.TooltipContentProps["alignOffset"];
+ /**
+ * The preferred side of the trigger to render against when open. Will be reversed when collisions occur.
+ * @default top
+ */
+ side?: RadixTooltip.TooltipContentProps["side"];
+ /**
+ * The distance in pixels from the trigger.
+ * @default 5
+ */
+ sideOffset?: RadixTooltip.TooltipContentProps["sideOffset"];
+};
+export declare const CopyTooltip: ({ children, copyValue, openDelay, align, alignOffset, side, sideOffset, }: CopyTooltipProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/Tooltip.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/Tooltip.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..991c019154b8eb57bdf2217478fc58c24071a36f
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/Tooltip.d.ts
@@ -0,0 +1,111 @@
+import { Tooltip as RadixTooltip } from "radix-ui";
+import { type MouseEventHandler, type PointerEventHandler } from "react";
+export type TooltipProps = {
+ children: React.ReactNode;
+ /**
+ * The content of the tooltip. If `null`, the tooltip will not render.
+ */
+ content: React.ReactNode;
+ /**
+ * Defines the `max-width` of the tooltip content. `"none"` creates a single-line, naturally sized tooltip.
+ * @default 300
+ */
+ maxWidth?: number | "none";
+ /**
+ * Forces the tooltip to remain open or closed
+ */
+ forceOpen?: boolean;
+ /**
+ * Delay of when the tooltip is shown from first interaction, in milliseconds.
+ * @default 150
+ */
+ openDelay?: number;
+ /** Indicates that the tooltip has interactive content, and should remain open when hovered. */
+ interactive?: boolean;
+ /**
+ * Short, 1-3 word tooltips, stylized inversely from normal tooltips
+ */
+ compact?: boolean;
+ /**
+ * Prevents the tooltip from closing when the trigger is clicked right after opening
+ * @default false
+ */
+ preventUnintentionalClickToClose?: true;
+ /**
+ * The preferred alignment against the trigger. May change when collisions occur.
+ * @default center
+ */
+ align?: RadixTooltip.TooltipContentProps["align"];
+ /**
+ * An offset in pixels from the "start" or "end" alignment options.
+ * @default 0
+ */
+ alignOffset?: RadixTooltip.TooltipContentProps["alignOffset"];
+ /**
+ * The preferred side of the trigger to render against when open. Will be reversed when collisions occur.
+ * @default top
+ */
+ side?: RadixTooltip.TooltipContentProps["side"];
+ /**
+ * The distance in pixels from the trigger.
+ * @default 5
+ */
+ sideOffset?: RadixTooltip.TooltipContentProps["sideOffset"];
+ /**
+ * Gutter sizing inside the tooltip content
+ * @default md
+ */
+ gutterSize?: "sm" | "md" | "lg";
+ /** Ref for the tooltip */
+ ref?: React.Ref;
+ onPointerDown?: PointerEventHandler;
+ onClick?: MouseEventHandler;
+ /** Optional class name to apply to the tooltip content */
+ contentClassName?: string;
+};
+export declare const Tooltip: {
+ (props: TooltipProps): import("react/jsx-runtime").JSX.Element;
+ Root: ({ children, open, onOpenChange, ...restProps }: RadixTooltip.TooltipProps & {
+ open: boolean;
+ onOpenChange: (nextState: boolean) => void;
+ }) => import("react/jsx-runtime").JSX.Element;
+ Content: ({ children, maxWidth, compact, clickable, alignOffset, sideOffset, gutterSize, className, style, ...restProps }: TooltipContentProps) => import("react/jsx-runtime").JSX.Element;
+ Trigger: ({ children, asChild, ...restProps }: RadixTooltip.TooltipTriggerProps) => import("react/jsx-runtime").JSX.Element;
+ TriggerDecorator: (props: TooltipTriggerProps) => import("react/jsx-runtime").JSX.Element;
+};
+type TooltipContentProps = RadixTooltip.TooltipContentProps & {
+ children: React.ReactNode;
+ /**
+ * Defines the `max-width` of the tooltip content. `"none"` creates a single-line, naturally sized tooltip.
+ * @default 300
+ */
+ maxWidth?: number | "none";
+ /**
+ * Short, 1-3 word tooltips, stylized inversely from normal tooltips
+ */
+ compact?: boolean;
+ /**
+ * Gutter sizing inside the tooltip content
+ * @default md
+ */
+ gutterSize?: "sm" | "md" | "lg";
+ /** Determines if the tooltip content should respond to click events */
+ clickable?: boolean;
+};
+export declare const Content: ({ children, maxWidth, compact, clickable, alignOffset, sideOffset, gutterSize, className, style, ...restProps }: TooltipContentProps) => import("react/jsx-runtime").JSX.Element;
+type TooltipTriggerProps = RadixTooltip.TooltipTriggerProps & {
+ /**
+ * Determines if `tabindex=0` is applied to the trigger
+ * @default true
+ */
+ focusable?: boolean;
+ /**
+ * Optional class name to apply to the trigger
+ */
+ className?: string;
+ /** Ref for the trigger */
+ ref?: React.Ref;
+};
+export declare const Trigger: ({ children, asChild, ...restProps }: RadixTooltip.TooltipTriggerProps) => import("react/jsx-runtime").JSX.Element;
+export declare const TriggerDecorator: (props: TooltipTriggerProps) => import("react/jsx-runtime").JSX.Element;
+export {};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..54541cf44233377b6b8ab5f7725716a5d0de9203
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Tooltip/index.d.ts
@@ -0,0 +1,2 @@
+export { CopyTooltip, type CopyTooltipProps } from "./CopyTooltip";
+export { Tooltip, type TooltipProps } from "./Tooltip";
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/Animate.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/Animate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4718cc8388b82930e9590d42fc9652af849d7451
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/Animate.d.ts
@@ -0,0 +1,23 @@
+import { type TransitionGroupProps } from "./TransitionGroup";
+import { type InitialTransitionDefinition, type TransitionDefinition } from "./shared";
+export type AnimateProps = Pick & {
+ /** Class applied to the inner TransitionGroup */
+ transitionClassName?: string;
+ /** Styles applied to the enter transition */
+ enter?: TransitionDefinition;
+ /** Styles applied to the exit transition */
+ exit?: TransitionDefinition;
+ /** Styles applied before the enter transition occurs */
+ initial?: InitialTransitionDefinition;
+ /**
+ * Determines how transition states are positioned
+ * @default absolute
+ */
+ transitionPosition?: "absolute" | "static";
+ /**
+ * Applies `will-change` to force animating elements to composite layers. Use with caution!
+ * @default false
+ */
+ forceCompositeLayer?: boolean;
+};
+export declare const Animate: (props: AnimateProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayout.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayout.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d86051e6b2a995b57c5f8bad9d72825b79348a3
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayout.d.ts
@@ -0,0 +1,33 @@
+import { type TransitionGroupProps } from "./TransitionGroup";
+import { type InitialTransitionDefinition, type LayoutTransitionDefinition, type TransitionDefinition } from "./shared";
+export type AnimateLayoutProps = Pick & {
+ /**
+ * Determines if `overflow: hidden` is applied to the wrapper element
+ * @default false
+ */
+ hideOverflow?: boolean;
+ /**
+ * Determines which side of the container the items will pin to during enter/exit
+ * @default "start"
+ */
+ itemAnchor?: "start" | "end";
+ /**
+ * Determines which property will be animated during transitions
+ * @default "height"
+ */
+ dimension?: "width" | "height";
+ layoutEnter?: LayoutTransitionDefinition;
+ layoutExit?: LayoutTransitionDefinition;
+ layoutMove?: LayoutTransitionDefinition;
+ enter?: TransitionDefinition;
+ exit?: TransitionDefinition;
+ initial?: InitialTransitionDefinition;
+ /** Class applied to the inner TransitionGroup */
+ transitionClassName?: string;
+ /**
+ * Applies `will-change` to force animating elements to composite layers. Use with caution!
+ * @default false
+ */
+ forceCompositeLayer?: boolean;
+};
+export declare const AnimateLayout: (props: AnimateLayoutProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayoutGroup.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayoutGroup.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9492cd599b21e1b789a896ee2ab8040892107830
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/AnimateLayoutGroup.d.ts
@@ -0,0 +1,33 @@
+import { type TransitionGroupProps } from "./TransitionGroup";
+import { type InitialTransitionDefinition, type LayoutTransitionDefinition, type TransitionDefinition } from "./shared";
+export type AnimateLayoutGroupProps = Pick & {
+ /**
+ * Determines if `overflow: hidden` is applied to the wrapper element
+ * @default false
+ */
+ hideOverflow?: boolean;
+ /**
+ * Determines which side of the container the items will pin to during enter/exit
+ * @default "start"
+ */
+ itemAnchor?: "start" | "end";
+ /**
+ * Determines which property will be animated during transitions
+ * @default "height"
+ */
+ dimension?: "width" | "height";
+ layoutEnter?: LayoutTransitionDefinition;
+ layoutExit?: LayoutTransitionDefinition;
+ layoutMove?: LayoutTransitionDefinition;
+ enter?: TransitionDefinition;
+ exit?: TransitionDefinition;
+ initial?: InitialTransitionDefinition;
+ /** Class applied to the inner TransitionGroup */
+ transitionClassName?: string;
+ /**
+ * Applies `will-change` to force animating elements to composite layers. Use with caution!
+ * @default false
+ */
+ forceCompositeLayer?: boolean;
+};
+export declare const AnimateLayoutGroup: (props: AnimateLayoutGroupProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/SlotTransitionGroup.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/SlotTransitionGroup.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dede86ae192a16b8bf8377d1db1287b2a462081e
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/SlotTransitionGroup.d.ts
@@ -0,0 +1,24 @@
+import React from "react";
+import { type TransitionGroupChildCallbacks } from "./shared";
+export type SlotTransitionGroupProps = {
+ /** Components controlled by SlotTransitionGroup rendering */
+ children: React.ReactNode;
+ /** Determines the amount of time that the enter state is applied during mounting */
+ enterDuration?: number;
+ /** Determines the amount of time that the exit state is applied before unmounting */
+ exitDuration?: number;
+ /**
+ * Determines if children should have an enter transition applied during mounting of the group.
+ * @default true
+ */
+ preventInitialTransition?: boolean;
+ /** Delay in MS to wait before mounting a child. `null` for no delay (default). */
+ enterMountDelay?: number;
+ /** Render children changes immediately, bypassing transition timings */
+ disableAnimations?: boolean;
+ /** Determines how new children are added to the children array */
+ insertMethod?: "append" | "prepend";
+ /** Ref for the SlotTransitionGroup (applied to the single child when possible) */
+ ref?: React.Ref;
+} & Partial;
+export declare const SlotTransitionGroup: (props: SlotTransitionGroupProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/TransitionGroup.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/TransitionGroup.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1cd175f70da9f59f7995794e086538d718633461
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/TransitionGroup.d.ts
@@ -0,0 +1,32 @@
+import React, { type CSSProperties } from "react";
+import { type TransitionGroupChildCallbacks } from "./shared";
+export type TransitionGroupProps = {
+ /** Components controlled by TransitionGroup rendering */
+ children: React.ReactNode;
+ /** Determines the tag used by wrapping elements */
+ as?: "div" | "span";
+ /** Class passed to wrapping elements */
+ className?: string;
+ /** Identifier passed to wrapping elements as `[data-transition-id]` */
+ transitionId?: string;
+ /** Determines the amount of time that the enter state is applied during mounting */
+ enterDuration?: number;
+ /** Determines the amount of time that the exit state is applied before unmounting */
+ exitDuration?: number;
+ /**
+ * Determines if children should have an enter transition applied during mounting of the TransitionGroup.
+ * @default true
+ */
+ preventInitialTransition?: boolean;
+ /** Delay in MS to wait before mounting a child. `null` for no delay (default). */
+ enterMountDelay?: number;
+ /** Render children changes immediately, bypassing transition timings */
+ disableAnimations?: boolean;
+ /** Determines how new children are added to the children array */
+ insertMethod?: "append" | "prepend";
+ /** Styles applied to wrapping elements */
+ style?: CSSProperties;
+ /** Ref for the TransitionGroup */
+ ref?: React.Ref;
+} & Partial;
+export declare const TransitionGroup: (props: TransitionGroupProps) => import("react/jsx-runtime").JSX.Element;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/getDisableAnimations.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/getDisableAnimations.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b847c1729ad2cb7307a60aa4548aedbbc9b82f9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/getDisableAnimations.d.ts
@@ -0,0 +1,2 @@
+declare const _default: () => boolean;
+export default _default;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d1c6f568986746fad1abb0e6ead045d64af44dfe
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/index.d.ts
@@ -0,0 +1,5 @@
+export { Animate, type AnimateProps } from "./Animate";
+export { AnimateLayout, type AnimateLayoutProps } from "./AnimateLayout";
+export { AnimateLayoutGroup, type AnimateLayoutGroupProps } from "./AnimateLayoutGroup";
+export { SlotTransitionGroup, type SlotTransitionGroupProps } from "./SlotTransitionGroup";
+export { TransitionGroup, type TransitionGroupProps } from "./TransitionGroup";
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/shared.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/shared.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f4293e241fc529493156f90444fa6dbcb4bf6e25
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/shared.d.ts
@@ -0,0 +1,52 @@
+import React from "react";
+export type TransitionDefinition = {
+ opacity?: number;
+ /** The horizontal translation value in pixels */
+ x?: number;
+ /** The horizontal vertical value in pixels */
+ y?: number;
+ /** The opacity value ranging from 0 to 1. */
+ scale?: number;
+ rotate?: number | string;
+ skewX?: number | string;
+ skewY?: number | string;
+ blur?: number;
+ duration?: number;
+ delay?: number;
+ timingFunction?: string;
+};
+export type InitialTransitionDefinition = Omit;
+export type LayoutTransitionDefinition = {
+ duration?: number;
+ delay?: number;
+ timingFunction?: string;
+};
+export type CallbackType = "enter" | "enter-active" | "enter-complete" | "exit" | "exit-active" | "exit-complete";
+export type TransitionGroupChildCallback = (element: HTMLDivElement) => void;
+export type TransitionGroupChildCallbacks = {
+ /** Callback fired when an enter animation is staged (e.g., component mounted to the DOM) */
+ onEnter: TransitionGroupChildCallback;
+ /** Callback fired when an enter animation starts */
+ onEnterActive: TransitionGroupChildCallback;
+ /** Callback fired when an enter animation completes */
+ onEnterComplete: TransitionGroupChildCallback;
+ /** Callback fired when an exit animation is staged */
+ onExit: TransitionGroupChildCallback;
+ /** Callback fired when an exit animation starts */
+ onExitActive: TransitionGroupChildCallback;
+ /** Callback fired when an exit animation completes (e.g., component unmounted from the DOM) */
+ onExitComplete: TransitionGroupChildCallback;
+};
+export declare const NonNullChildren: (children: React.ReactNode) => (string | number | bigint | React.ReactElement> | Iterable | React.ReactPortal | Promise> | Iterable | null | undefined>)[];
+export interface ReactElementWithKey extends React.ReactElement {
+ key: string;
+}
+export declare const ChildrenWithKeys: (children: React.ReactNode, shouldThrow?: boolean, componentName?: string) => ReactElementWithKey[];
+export declare const noop: () => void;
+export declare const useChildCallback: (cb: (el: HTMLDivElement) => void) => (el: HTMLDivElement) => void;
+export type InsertMethod = "append" | "prepend";
+export declare function computeNextRenderChildren(propChildrenArray: ReactElementWithKey[], currentRenderChildren: RenderChild[], createDefaultRenderChildProps: (child: ReactElementWithKey) => RenderChild, insertMethod: InsertMethod): RenderChild[];
+export declare function assertSingleChildWhenRef(componentName: string, ref: React.Ref | undefined, childrenCount: number): void;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/transitionReducer.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/transitionReducer.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..55ce7c1c554d5a7ce199371d4c2de1b2bf351ff9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/components/Transition/transitionReducer.d.ts
@@ -0,0 +1,21 @@
+export type TransitionState = {
+ enter: boolean;
+ enterActive: boolean;
+ exit: boolean;
+ exitActive: boolean;
+ interrupted: boolean;
+};
+export type TransitionStateAction = {
+ type: "enter-before";
+} | {
+ type: "enter-active";
+} | {
+ type: "exit-before";
+} | {
+ type: "exit-active";
+} | {
+ type: "done";
+};
+export declare const RESTING_TRANSITION_STATE: TransitionState;
+export declare const getInitialTransitionState: (preventMountTransition: boolean) => TransitionState;
+export declare const transitionReducer: (state: TransitionState, action: TransitionStateAction) => TransitionState;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/global.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/global.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4644dba2c6703f215980fe271f5b3509f0d2da96
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/global.d.ts
@@ -0,0 +1,21 @@
+declare global {
+ interface DefaultConfig {
+ LinkComponent: "a"
+ Breakpoint: "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
+ interface AppsSDKUIOverrides {}
+
+ // Utility type to merge defaults with overrides. The override keys take precedence.
+ type MergeOverrides = Omit & Overrides
+
+ type Config = MergeOverrides
+
+ namespace AppsSDKUI {
+ export type LinkComponent = Config["LinkComponent"]
+ export type Breakpoint = Config["Breakpoint"]
+ }
+}
+
+export {}
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAnimatedScrollTo.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAnimatedScrollTo.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8197bf6f9781b72de7d50b39e83f2af5bf9b1729
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAnimatedScrollTo.d.ts
@@ -0,0 +1 @@
+export declare const useAnimatedScrollTo: (scrollRef: React.RefObject) => (targetScrollTop: number) => void;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAutoGrowTextarea.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAutoGrowTextarea.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b9ce5b9a10c74d05c41c36e16fe1f81f5c437677
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useAutoGrowTextarea.d.ts
@@ -0,0 +1,4 @@
+import { type RefObject } from "react";
+export declare const useAutoGrowTextarea: (ref: RefObject, value: string) => void;
+export declare const unsafeForceCalculateAutoGrowHeight: (textarea: HTMLTextAreaElement) => void;
+export declare const getAutoGrowTextareaHeight: (textarea: HTMLTextAreaElement) => any;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useBreakpoints.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useBreakpoints.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8caa6d296e6c9f78040c1292c575b82f2cc26f4b
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useBreakpoints.d.ts
@@ -0,0 +1,2 @@
+export declare const cache: Map;
+export declare const useBreakpoint: (bp: AppsSDKUI.Breakpoint) => boolean;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useCharactersPerSecond.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useCharactersPerSecond.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..508d60ae7e34e30fa4e8c3bb3b3f597d7f3a1dad
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useCharactersPerSecond.d.ts
@@ -0,0 +1 @@
+export declare function useCharactersPerSecond(text: string, streaming: boolean): () => number;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useDocumentVisible.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useDocumentVisible.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b52032ca9e6aa1a54d84b8af3ac78a5f6a342c81
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useDocumentVisible.d.ts
@@ -0,0 +1 @@
+export declare function useDocumentVisible(): boolean;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useEscCloseStack.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useEscCloseStack.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..44cd7def1797bef6dc5e0a706cd22eafa0c35ba5
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useEscCloseStack.d.ts
@@ -0,0 +1 @@
+export declare const useEscCloseStack: (listening: boolean, cb: () => void) => void;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useIsMounted.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useIsMounted.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e236789f2f9e986b63af18fd937fb0385ac7960c
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useIsMounted.d.ts
@@ -0,0 +1,2 @@
+export declare function useIsMounted(): boolean;
+export declare function useIsMountedRef(): import("react").RefObject;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useLatestValue.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useLatestValue.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ce868285541b7c0c0cedee7d9a9e4418ea87aaa
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useLatestValue.d.ts
@@ -0,0 +1 @@
+export declare function useLatestValue(value: T): import("react").RefObject;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/usePrevious.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/usePrevious.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9546dc1bc172a175197928aff1d14ae4bc2af0ce
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/usePrevious.d.ts
@@ -0,0 +1 @@
+export declare function usePrevious(value: T): T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useScrollable.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useScrollable.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..10711b5be8de50b580c7e701c753d6ba37e2050c
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useScrollable.d.ts
@@ -0,0 +1,6 @@
+import { type RefObject } from "react";
+export declare const useScrollable: (ref: RefObject) => {
+ isScrollable: boolean;
+ isAtStart: boolean;
+ isAtEnd: boolean;
+};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useSimulatedProgress.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useSimulatedProgress.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a93430ca42b87fecf1f63cd61843874524216d4b
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useSimulatedProgress.d.ts
@@ -0,0 +1,18 @@
+/**
+ * Deterministically returns a progress value between 0 and 100 that decays as it approaches 100,
+ * based on a maximum duration and the elapsed time.
+ *
+ * @param maxTime - The maximum duration (in ms) after which the progress will be 100
+ * @param elapsedTime - The elapsed time (in ms) since the start time
+ * @returns The simulated progress percentage
+ */
+export declare function getSimulatedProgress(maxTime: number, elapsedTime: number): number;
+/**
+ * Returns a number that will increase over time, decaying as it approaches 100,
+ * withouth ever reaching the end.
+ *
+ * @param startAt - The time at which the progress started
+ * @param maxDuration - The maximum duration (in ms) after which the progress will be 100
+ * @param completed - Sets progress to 100% immediately
+ */
+export declare const useSimulatedProgress: (startAt: number, maxDuration: number, completed?: boolean) => number;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useStableCallback.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useStableCallback.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ebff173190758fad3d5722c14481693abe592d14
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useStableCallback.d.ts
@@ -0,0 +1,3 @@
+type AnyFunction = (...args: any[]) => any;
+export declare function useStableCallback(callback: T): T;
+export {};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTextSelection.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTextSelection.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d530739895af22ee06873110e2d429c6dab4eeea
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTextSelection.d.ts
@@ -0,0 +1,2 @@
+export declare const useTextSelection: (listening: boolean, cb: (currentSelection: Selection | null) => void) => void;
+export declare const clearTextSelection: () => void;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTrailingValue.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTrailingValue.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3424b2c28ed4344ac5c32aa4e5c336a208d6426a
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/hooks/useTrailingValue.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns a version of `value` that updates to the latest `value` after `delay`
+ * milliseconds. Useful for holding on to a previous value for a short time
+ * after it changes (e.g. for coordinating animations).
+ */
+export declare function useTrailingValue(value: T, delay: number): T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/assert.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/assert.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ff6ef9b1d1d493b8da1522726636e62124b6d9b9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/assert.d.ts
@@ -0,0 +1 @@
+export declare function assertIs(a: unknown, b: T): asserts a is T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/casing.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/casing.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68160277a97fc4b0e47494320a0d0969002a50f0
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/casing.d.ts
@@ -0,0 +1,3 @@
+export declare function filenameToTitleCase(filename: string): string;
+export declare function kebabCaseToPascalCase(name: string): string;
+export declare function capitalize(str: T): Capitalize;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/constants.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/constants.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b6a17a52b560459c613e739b140e4d3ed84b0d13
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/constants.d.ts
@@ -0,0 +1,2 @@
+export { isDev, isTest } from "./environment";
+export declare const EMAIL_REGEX: RegExp;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/copyToClipboard.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/copyToClipboard.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..388738bf52828cecb410e9f7db0642cd63b28585
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/copyToClipboard.d.ts
@@ -0,0 +1,31 @@
+export type ClipboardContent = {
+ "text/plain"?: string;
+ "image/png"?: Blob;
+ "image/jpeg"?: Blob;
+ "image/webp"?: Blob;
+};
+export declare function toClipboardItem(content: ClipboardContent): ClipboardItem;
+/**
+ * Utility for copying rich content in a cross-browser way
+ *
+ * @param {string | ClipboardContent} content
+ * @param {HTMLElement} container - Fallback text copy method requires appending a textarea
+ * to the DOM and focusing it. If you don't want to shift focus out of the currently
+ * focused container (e.g. a popover) you can specify a custom container to append
+ * the textarea to keep focus in that container. This need for this edge case is
+ * exceedingly rare as navigator.clipboard.writeText support expands.
+ * @returns - A promise that resolves to true if the copy was successful, false otherwise.
+ */
+export declare function copyToClipboard(content: string | ClipboardContent, container?: HTMLElement): Promise;
+/**
+ * Utility for copying plaintext in a cross-browser way
+ *
+ * @param {string} text
+ * @param {HTMLElement} container - Fallback text copy method requires appending a textarea
+ * to the DOM and focusing it. If you don't want to shift focus out of the currently
+ * focused container (e.g. a popover) you can specify a custom container to append
+ * the textarea to keep focus in that container. This need for this edge case is
+ * exceedingly rare as navigator.clipboard.writeText support expands.
+ * @returns - A promise that resolves to true if the copy was successful, false otherwise.
+ */
+export declare function copyText(text: string, container?: HTMLElement): Promise;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/dateUtils.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/dateUtils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5ece70990519fc07c7054e37646a129a254236fd
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/dateUtils.d.ts
@@ -0,0 +1,32 @@
+import { DateTime } from "luxon";
+/**
+ * Get all days in a given month as DateTime objects
+ */
+export declare const getDaysOfMonth: (date: DateTime) => DateTime[];
+/**
+ * Check if the first date is before the second date
+ */
+export declare const isBefore: (targetDate: DateTime, compareDate: DateTime) => boolean;
+/**
+ * Check if the first date is after the second date
+ */
+export declare const isAfter: (targetDate: DateTime, compareDate: DateTime) => boolean;
+/**
+ * Check if two dates are the same day (ignoring time)
+ */
+export declare const isSameDay: (targetDate: DateTime, compareDate: DateTime) => boolean;
+/**
+ * Check if a date is today
+ */
+export declare const isToday: (dateTime: DateTime) => boolean;
+/**
+ * Split an array of days into weeks (arrays of 7 days each)
+ */
+export declare const chunkIntoWeeks: (daysInMonth: DateTime[], size?: number) => DateTime[][];
+/**
+ * Get the start and end date of the month the provided date is in, with optional min and max limits.
+ */
+export declare const getMonthStartAndEnd: (date: DateTime, { min, max }?: {
+ min?: DateTime;
+ max?: DateTime;
+}) => [DateTime, DateTime];
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/environment.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/environment.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0a3fa26d0a827e6aa7919a02badffd1ac259926d
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/environment.d.ts
@@ -0,0 +1,6 @@
+export declare const isDev: boolean;
+export declare const isJSDomLike: boolean;
+export declare const isTest: boolean;
+export declare const hasWindow: boolean;
+export declare const hasDocument: boolean;
+export declare const canUseDOM: boolean;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/helpers.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/helpers.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..25cbb07cb22be40dd3f4e7b646bf0449d0bc3557
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/helpers.d.ts
@@ -0,0 +1,41 @@
+import { type CSSProperties } from "react";
+export declare const prefersReducedMotion: () => boolean;
+export declare const handlePressableMouseEnter: (evt: React.MouseEvent) => void;
+interface CancelAnimationFrame {
+ (): void;
+}
+export declare const waitForAnimationFrame: (cb: () => void, options?: {
+ frames: number;
+}) => CancelAnimationFrame;
+export declare const toCssVariables: (variables: Record) => CSSProperties;
+export declare const toAngle: (value: number | string) => string;
+export declare const toOpacityProperty: (opacity: number) => string;
+export declare const toMsDurationProperty: (duration: number) => string;
+export declare const toTransformProperty: ({ x, y, scale, rotate, skewX, skewY, }?: {
+ x?: number;
+ y?: number;
+ scale?: number;
+ rotate?: number | string;
+ skewX?: number | string;
+ skewY?: number | string;
+}) => string;
+export declare const toFilterProperty: ({ blur }?: {
+ blur?: number | undefined;
+}) => string;
+export declare const preventDefaultHandler: (evt: Event) => void;
+export declare const focusableElements: (element: HTMLElement) => NodeListOf;
+export declare const sleep: (ms: number) => Promise;
+/**
+ * Group an array of objects by a property, preserving the *first-seen* order
+ * of each group.
+ *
+ * @example
+ * groupByOrdered(people, "team")
+ * // => [ { team: "infra", items:[...] }, { team:"design", items:[...] }, ... ]
+ */
+export declare function groupByProperty(items: T[], key: K, format?: (raw: T[K], item: T) => F): ({ [P in K]: F; } & {
+ items: T[];
+} extends infer T_1 extends Record ? { [K_1 in keyof T_1]: ({ [P in K]: F; } & {
+ items: T[];
+})[K_1]; } : never)[];
+export {};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/ids.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/ids.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c9b7954a028f34f776313cf79d47946399434e00
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/ids.d.ts
@@ -0,0 +1 @@
+export declare const createId: (prefix: string, maxLength?: number) => T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/renderHelpers.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/renderHelpers.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..125a04c3ce5bd953e31656c86e6938dc11fff57c
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/renderHelpers.d.ts
@@ -0,0 +1,2 @@
+import { type ReactNode } from "react";
+export declare const wrapTextNodeSiblings: (children: ReactNode) => ReactNode;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/safeBase64.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/safeBase64.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1ab0de8c34e6ffb146b3f2b7dffce6d569176673
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/safeBase64.d.ts
@@ -0,0 +1,2 @@
+export declare const encodeBase64: (value: unknown) => string;
+export declare const decodeBase64: (b64: string) => T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/theme.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/theme.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b0d89fd6ae26c2ce5ab27e51b54b3239ffb835bc
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/theme.d.ts
@@ -0,0 +1,4 @@
+export type DocumentTheme = "light" | "dark";
+export declare function useDocumentTheme(): "dark" | "light";
+export declare function getDocumentTheme(): "dark" | "light";
+export declare function applyDocumentTheme(theme: "light" | "dark"): void;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/userAgent.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/userAgent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3a1e9088a6385be680c64bed7efe7329835f288c
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/userAgent.d.ts
@@ -0,0 +1,10 @@
+export declare function isIosBrowser(): boolean;
+export declare function isAndroidBrowser(): boolean;
+export declare function isIosChromeBrowser(): boolean;
+export declare function isMobileDevice(): boolean;
+export declare function isSafariBrowser(): boolean;
+export declare function isAndroidChromeBrowser(): boolean;
+export declare function isMacDevice(): boolean;
+export declare function isWindowsDevice(): boolean;
+export declare function isChromeDesktopBrowser(): boolean;
+export declare function isFirefoxBrowser(): boolean;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/utilityTypes.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/utilityTypes.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..636206d19b0a2e1959732e8c71c3ccec9c194478
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/lib/utilityTypes.d.ts
@@ -0,0 +1,8 @@
+export type Pretty> = {} & {
+ [K in keyof T]: T[K];
+};
+declare const brand: unique symbol;
+export type Brand = T & {
+ [brand]: B;
+};
+export {};
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/types.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e7e5ed9243cac724f97f3c822cf60f3549dffcd4
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/types.d.ts
@@ -0,0 +1,15 @@
+export type Size = "5xs" | "4xs" | "3xs" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl";
+export type Sizes = T;
+export type ControlSize = Sizes<"3xs" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl">;
+export type Radius = "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "full";
+export type Radii = T;
+export type TextColor = "base" | "emphasis" | "secondary" | "tertiary";
+export type TextColors = T;
+export type SemanticColor = "primary" | "secondary" | "danger" | "success" | "warning" | "caution" | "discovery" | "info";
+export type SemanticColors = T;
+export type Variant = "solid" | "soft" | "outline" | "ghost";
+export type Variants = T;
+export type Alignment = "start" | "center" | "end";
+export type Alignments = T;
+export type FontWeight = "inherit" | "normal" | "medium" | "semibold" | "bold";
+export type FontWeights = T;
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/vite-env.d.ts b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/vite-env.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11f02fe2a0061d6e6e1f271b21da95423b448b32
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/dist/types/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/package.json b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dd123c56cb51420a728dd0ebf7c591217979b9d2
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@openai/apps-sdk-ui/package.json
@@ -0,0 +1,157 @@
+{
+ "name": "@openai/apps-sdk-ui",
+ "version": "0.2.2",
+ "description": "Design system for building apps for ChatGPT with Apps SDK",
+ "license": "MIT",
+ "homepage": "https://github.com/openai/apps-sdk-ui#readme",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/openai/apps-sdk-ui.git"
+ },
+ "bugs": {
+ "url": "https://github.com/openai/apps-sdk-ui/issues"
+ },
+ "private": false,
+ "files": [
+ "dist/es/**",
+ "dist/types/**"
+ ],
+ "exports": {
+ "./css": "./dist/es/styles/index.css",
+ "./components/*": {
+ "types": "./dist/types/components/*/index.d.ts",
+ "default": "./dist/es/components/*/index.js"
+ },
+ "./hooks/*": {
+ "types": "./dist/types/hooks/*.d.ts",
+ "default": "./dist/es/hooks/*.js"
+ },
+ "./theme": {
+ "types": "./dist/types/lib/theme.d.ts",
+ "default": "./dist/es/lib/theme.js"
+ },
+ "./helpers": {
+ "types": "./dist/types/lib/helpers.d.ts",
+ "default": "./dist/es/lib/helpers.js"
+ },
+ "./userAgent": {
+ "types": "./dist/types/lib/userAgent.d.ts",
+ "default": "./dist/es/lib/userAgent.js"
+ },
+ "./dateUtils": {
+ "types": "./dist/types/lib/dateUtils.d.ts",
+ "default": "./dist/es/lib/dateUtils.js"
+ }
+ },
+ "scripts": {
+ "format": "prettier --check --cache --ignore-path .gitignore --ignore-path .prettierignore '**/*.{js,jsx,ts,tsx,json,css,md}'",
+ "format:fix": "prettier --write --cache --ignore-path .gitignore --ignore-path .prettierignore '**/*.{js,jsx,ts,tsx,json,css,md}'",
+ "lint": "npm run lint:ts && npm run lint:css",
+ "lint:ts": "eslint . --ignore-pattern dist --ignore-pattern node_modules",
+ "lint:css": "stylelint \"src/**/*.css\" --ignore-path .stylelintignore",
+ "test": "vitest run",
+ "types": "tsc",
+ "build:clean": "rm -rf dist",
+ "build:js": "tsc -p tsconfig.build.json",
+ "build:css": "node ./scripts/build-css.mjs",
+ "build:assets": "rsync -a --include='*/' --include='*.d.ts' --exclude='*' src/ dist/types/",
+ "build": "npm run build:clean && npm run build:js && npm run build:css && npm run build:assets",
+ "prepublishOnly": "npm run format:fix && npm run lint && npm run types && npm run test && npm run build",
+ "storybook": "storybook dev -p 6006 --config-dir .storybook-base",
+ "build-storybook": "storybook build --disable-telemetry --config-dir .storybook-base"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0",
+ "tailwindcss": "^4.0.10"
+ },
+ "dependencies": {
+ "clsx": "^2.1.1",
+ "lodash": "4.17.21",
+ "luxon": "3.7.1",
+ "radix-ui": "^1.1.3",
+ "react-markdown": "^9.0.3",
+ "react-merge-refs": "^2.1.1",
+ "react-syntax-highlighter": "^16.1.0",
+ "rehype-katex": "7.0.1",
+ "remark-breaks": "^4.0.0",
+ "remark-directive": "^3.0.1",
+ "remark-gfm": "^4.0.0",
+ "remark-math": "6.0.0",
+ "unist-util-visit": "^5.0.0",
+ "usehooks-ts": "^3.1.1"
+ },
+ "devDependencies": {
+ "@chromatic-com/storybook": "^3.2.4",
+ "@eslint/js": "^9.19.0",
+ "@happy-dom/global-registrator": "20.0.10",
+ "@mdx-js/react": "^3.1.0",
+ "@mdx-js/rollup": "^3.1.0",
+ "@storybook/addon-essentials": "^8.6.12",
+ "@storybook/addon-interactions": "^8.6.12",
+ "@storybook/addon-links": "^8.6.12",
+ "@storybook/addon-storysource": "^8.6.12",
+ "@storybook/addon-toolbars": "^8.6.12",
+ "@storybook/blocks": "^8.6.12",
+ "@storybook/components": "^8.6.12",
+ "@storybook/manager-api": "^8.6.12",
+ "@storybook/react": "^8.6.12",
+ "@storybook/react-vite": "^8.6.12",
+ "@storybook/test": "^8.6.12",
+ "@storybook/theming": "^8.6.12",
+ "@tailwindcss/postcss": "4.0.17",
+ "@testing-library/dom": "10.4.0",
+ "@testing-library/jest-dom": "^6.5.0",
+ "@testing-library/react": "16.3.0",
+ "@types/jsdom": "21.1.7",
+ "@types/lodash": "4.17.16",
+ "@types/luxon": "3.6.2",
+ "@types/mdast": "^4.0.4",
+ "@types/mdx": "^2.0.13",
+ "@types/postcss-functions": "4.0.4",
+ "@types/postcss-mixins": "9.0.6",
+ "@types/react": "19.0.8",
+ "@types/react-dom": "19.0.3",
+ "@types/react-syntax-highlighter": "^15.5.13",
+ "@vitejs/plugin-react": "^4.3.4",
+ "autoprefixer": "10.4.20",
+ "eslint": "^9.19.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-mdx": "^3.1.5",
+ "eslint-plugin-path": "1.4.0-beta.0",
+ "eslint-plugin-react": "^7.37.4",
+ "eslint-plugin-react-compiler": "19.0.0-beta-27714ef-20250124",
+ "eslint-plugin-react-hooks": "^5.0.0",
+ "eslint-plugin-react-refresh": "^0.4.18",
+ "eslint-plugin-storybook": "^0.11.3",
+ "globals": "^15.14.0",
+ "happy-dom": "20.0.10",
+ "jsdom": "24.1.3",
+ "openai": "4.87.3",
+ "postcss": "^8",
+ "postcss-functions": "^4.0.2",
+ "postcss-mixins": "^11.0.3",
+ "postcss-nested": "^7.0.2",
+ "postcss-selector-parser": "7.1.0",
+ "postcss-value-parser": "4.2.0",
+ "prettier": "3.2.5",
+ "prettier-plugin-organize-imports": "4.1.0",
+ "prettier-plugin-tailwindcss": "^0.6.11",
+ "react": "19.0.0",
+ "react-dom": "19.0.0",
+ "react-router": "^7.1.5",
+ "rollup": "4.35.0",
+ "rollup-plugin-dts": "6.2.3",
+ "storybook": "^8.6.12",
+ "stylelint": "16.18.0",
+ "stylelint-config-standard": "^37.0.0",
+ "stylelint-order": "^6.0.4",
+ "stylelint-prettier": "^5.0.3",
+ "stylelint-scss": "6.12.1",
+ "tailwindcss": "4.0.10",
+ "typescript": "5.7.3",
+ "typescript-eslint": "^8.22.0",
+ "vite": "6.2.4",
+ "vite-tsconfig-paths": "5.1.4",
+ "vitest": "^2.1.5"
+ }
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/LICENSE b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..444bffc00e5190817c0092e5e6fde787102977d2
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2024-present VoidZero Inc. & Contributors
+Copyright (c) 2023 Boshen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/README.md b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d5b248ac3fc1e8673b6fc55bda1c04e9a0464d02
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/README.md
@@ -0,0 +1,3 @@
+# Oxc Types
+
+Typescript definitions for Oxc AST nodes.
diff --git a/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/package.json b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8d60f9032f2747458743a3e73ab0582171d82deb
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@oxc-project/types",
+ "version": "0.137.0",
+ "description": "Types for Oxc AST nodes",
+ "keywords": [
+ "AST",
+ "Parser"
+ ],
+ "homepage": "https://oxc.rs",
+ "bugs": "https://github.com/oxc-project/oxc/issues",
+ "license": "MIT",
+ "author": "Boshen and oxc contributors",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/oxc-project/oxc.git",
+ "directory": "npm/oxc-types"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ },
+ "files": [
+ "types.d.ts"
+ ],
+ "type": "module",
+ "types": "types.d.ts"
+}
\ No newline at end of file
diff --git a/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/types.d.ts b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c94c1159e6302de98254582d9f3aeea5514bdd71
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@oxc-project/types/types.d.ts
@@ -0,0 +1,1912 @@
+// Auto-generated code, DO NOT EDIT DIRECTLY!
+// To edit this generated file you have to edit `tasks/ast_tools/src/generators/typescript.rs`.
+
+export interface Program extends Span {
+ type: "Program";
+ body: Array;
+ sourceType: ModuleKind;
+ hashbang: Hashbang | null;
+ parent?: null;
+}
+
+export type Expression =
+ | BooleanLiteral
+ | NullLiteral
+ | NumericLiteral
+ | BigIntLiteral
+ | RegExpLiteral
+ | StringLiteral
+ | TemplateLiteral
+ | IdentifierReference
+ | MetaProperty
+ | Super
+ | ArrayExpression
+ | ArrowFunctionExpression
+ | AssignmentExpression
+ | AwaitExpression
+ | BinaryExpression
+ | CallExpression
+ | ChainExpression
+ | Class
+ | ConditionalExpression
+ | Function
+ | ImportExpression
+ | LogicalExpression
+ | NewExpression
+ | ObjectExpression
+ | ParenthesizedExpression
+ | SequenceExpression
+ | TaggedTemplateExpression
+ | ThisExpression
+ | UnaryExpression
+ | UpdateExpression
+ | YieldExpression
+ | PrivateInExpression
+ | JSXElement
+ | JSXFragment
+ | TSAsExpression
+ | TSSatisfiesExpression
+ | TSTypeAssertion
+ | TSNonNullExpression
+ | TSInstantiationExpression
+ | V8IntrinsicExpression
+ | MemberExpression;
+
+export interface IdentifierName extends Span {
+ type: "Identifier";
+ decorators?: [];
+ name: string;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface IdentifierReference extends Span {
+ type: "Identifier";
+ decorators?: [];
+ name: string;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface BindingIdentifier extends Span {
+ type: "Identifier";
+ decorators?: [];
+ name: string;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface LabelIdentifier extends Span {
+ type: "Identifier";
+ decorators?: [];
+ name: string;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface ThisExpression extends Span {
+ type: "ThisExpression";
+ parent?: Node;
+}
+
+export interface ArrayExpression extends Span {
+ type: "ArrayExpression";
+ elements: Array;
+ parent?: Node;
+}
+
+export type ArrayExpressionElement = SpreadElement | null | Expression;
+
+export interface ObjectExpression extends Span {
+ type: "ObjectExpression";
+ properties: Array;
+ parent?: Node;
+}
+
+export type ObjectPropertyKind = ObjectProperty | SpreadElement;
+
+export interface ObjectProperty extends Span {
+ type: "Property";
+ kind: PropertyKind;
+ key: PropertyKey;
+ value: Expression;
+ method: boolean;
+ shorthand: boolean;
+ computed: boolean;
+ optional?: false;
+ parent?: Node;
+}
+
+export type PropertyKey = IdentifierName | PrivateIdentifier | Expression;
+
+export type PropertyKind = "init" | "get" | "set";
+
+export interface TemplateLiteral extends Span {
+ type: "TemplateLiteral";
+ quasis: Array;
+ expressions: Array;
+ parent?: Node;
+}
+
+export interface TaggedTemplateExpression extends Span {
+ type: "TaggedTemplateExpression";
+ tag: Expression;
+ typeArguments?: TSTypeParameterInstantiation | null;
+ quasi: TemplateLiteral;
+ parent?: Node;
+}
+
+export interface TemplateElement extends Span {
+ type: "TemplateElement";
+ value: TemplateElementValue;
+ tail: boolean;
+ parent?: Node;
+}
+
+export interface TemplateElementValue {
+ raw: string;
+ cooked: string | null;
+}
+
+export type MemberExpression =
+ | ComputedMemberExpression
+ | StaticMemberExpression
+ | PrivateFieldExpression;
+
+export interface ComputedMemberExpression extends Span {
+ type: "MemberExpression";
+ object: Expression;
+ property: Expression;
+ optional: boolean;
+ computed: true;
+ parent?: Node;
+}
+
+export interface StaticMemberExpression extends Span {
+ type: "MemberExpression";
+ object: Expression;
+ property: IdentifierName;
+ optional: boolean;
+ computed: false;
+ parent?: Node;
+}
+
+export interface PrivateFieldExpression extends Span {
+ type: "MemberExpression";
+ object: Expression;
+ property: PrivateIdentifier;
+ optional: boolean;
+ computed: false;
+ parent?: Node;
+}
+
+export interface CallExpression extends Span {
+ type: "CallExpression";
+ callee: Expression;
+ typeArguments?: TSTypeParameterInstantiation | null;
+ arguments: Array;
+ optional: boolean;
+ parent?: Node;
+}
+
+export interface NewExpression extends Span {
+ type: "NewExpression";
+ callee: Expression;
+ typeArguments?: TSTypeParameterInstantiation | null;
+ arguments: Array;
+ parent?: Node;
+}
+
+export interface MetaProperty extends Span {
+ type: "MetaProperty";
+ meta: IdentifierName;
+ property: IdentifierName;
+ parent?: Node;
+}
+
+export interface SpreadElement extends Span {
+ type: "SpreadElement";
+ argument: Expression;
+ parent?: Node;
+}
+
+export type Argument = SpreadElement | Expression;
+
+export interface UpdateExpression extends Span {
+ type: "UpdateExpression";
+ operator: UpdateOperator;
+ prefix: boolean;
+ argument: SimpleAssignmentTarget;
+ parent?: Node;
+}
+
+export interface UnaryExpression extends Span {
+ type: "UnaryExpression";
+ operator: UnaryOperator;
+ argument: Expression;
+ prefix: true;
+ parent?: Node;
+}
+
+export interface BinaryExpression extends Span {
+ type: "BinaryExpression";
+ left: Expression;
+ operator: BinaryOperator;
+ right: Expression;
+ parent?: Node;
+}
+
+export interface PrivateInExpression extends Span {
+ type: "BinaryExpression";
+ left: PrivateIdentifier;
+ operator: "in";
+ right: Expression;
+ parent?: Node;
+}
+
+export interface LogicalExpression extends Span {
+ type: "LogicalExpression";
+ left: Expression;
+ operator: LogicalOperator;
+ right: Expression;
+ parent?: Node;
+}
+
+export interface ConditionalExpression extends Span {
+ type: "ConditionalExpression";
+ test: Expression;
+ consequent: Expression;
+ alternate: Expression;
+ parent?: Node;
+}
+
+export interface AssignmentExpression extends Span {
+ type: "AssignmentExpression";
+ operator: AssignmentOperator;
+ left: AssignmentTarget;
+ right: Expression;
+ parent?: Node;
+}
+
+export type AssignmentTarget = SimpleAssignmentTarget | AssignmentTargetPattern;
+
+export type SimpleAssignmentTarget =
+ | IdentifierReference
+ | TSAsExpression
+ | TSSatisfiesExpression
+ | TSNonNullExpression
+ | TSTypeAssertion
+ | MemberExpression;
+
+export type AssignmentTargetPattern = ArrayAssignmentTarget | ObjectAssignmentTarget;
+
+export interface ArrayAssignmentTarget extends Span {
+ type: "ArrayPattern";
+ decorators?: [];
+ elements: Array;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface ObjectAssignmentTarget extends Span {
+ type: "ObjectPattern";
+ decorators?: [];
+ properties: Array;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface AssignmentTargetRest extends Span {
+ type: "RestElement";
+ decorators?: [];
+ argument: AssignmentTarget;
+ optional?: false;
+ typeAnnotation?: null;
+ value?: null;
+ parent?: Node;
+}
+
+export type AssignmentTargetMaybeDefault = AssignmentTargetWithDefault | AssignmentTarget;
+
+export interface AssignmentTargetWithDefault extends Span {
+ type: "AssignmentPattern";
+ decorators?: [];
+ left: AssignmentTarget;
+ right: Expression;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export type AssignmentTargetProperty =
+ | AssignmentTargetPropertyIdentifier
+ | AssignmentTargetPropertyProperty;
+
+export interface AssignmentTargetPropertyIdentifier extends Span {
+ type: "Property";
+ kind: "init";
+ key: IdentifierReference;
+ value: IdentifierReference | AssignmentTargetWithDefault;
+ method: false;
+ shorthand: true;
+ computed: false;
+ optional?: false;
+ parent?: Node;
+}
+
+export interface AssignmentTargetPropertyProperty extends Span {
+ type: "Property";
+ kind: "init";
+ key: PropertyKey;
+ value: AssignmentTargetMaybeDefault;
+ method: false;
+ shorthand: false;
+ computed: boolean;
+ optional?: false;
+ parent?: Node;
+}
+
+export interface SequenceExpression extends Span {
+ type: "SequenceExpression";
+ expressions: Array;
+ parent?: Node;
+}
+
+export interface Super extends Span {
+ type: "Super";
+ parent?: Node;
+}
+
+export interface AwaitExpression extends Span {
+ type: "AwaitExpression";
+ argument: Expression;
+ parent?: Node;
+}
+
+export interface ChainExpression extends Span {
+ type: "ChainExpression";
+ expression: ChainElement;
+ parent?: Node;
+}
+
+export type ChainElement = CallExpression | TSNonNullExpression | MemberExpression;
+
+export interface ParenthesizedExpression extends Span {
+ type: "ParenthesizedExpression";
+ expression: Expression;
+ parent?: Node;
+}
+
+export type Statement =
+ | BlockStatement
+ | BreakStatement
+ | ContinueStatement
+ | DebuggerStatement
+ | DoWhileStatement
+ | EmptyStatement
+ | ExpressionStatement
+ | ForInStatement
+ | ForOfStatement
+ | ForStatement
+ | IfStatement
+ | LabeledStatement
+ | ReturnStatement
+ | SwitchStatement
+ | ThrowStatement
+ | TryStatement
+ | WhileStatement
+ | WithStatement
+ | Declaration
+ | ModuleDeclaration;
+
+export interface Directive extends Span {
+ type: "ExpressionStatement";
+ expression: StringLiteral;
+ directive: string;
+ parent?: Node;
+}
+
+export interface Hashbang extends Span {
+ type: "Hashbang";
+ value: string;
+ parent?: Node;
+}
+
+export interface BlockStatement extends Span {
+ type: "BlockStatement";
+ body: Array;
+ parent?: Node;
+}
+
+export type Declaration =
+ | VariableDeclaration
+ | Function
+ | Class
+ | TSTypeAliasDeclaration
+ | TSInterfaceDeclaration
+ | TSEnumDeclaration
+ | TSModuleDeclaration
+ | TSGlobalDeclaration
+ | TSImportEqualsDeclaration;
+
+export interface VariableDeclaration extends Span {
+ type: "VariableDeclaration";
+ kind: VariableDeclarationKind;
+ declarations: Array;
+ declare?: boolean;
+ parent?: Node;
+}
+
+export type VariableDeclarationKind = "var" | "let" | "const" | "using" | "await using";
+
+export interface VariableDeclarator extends Span {
+ type: "VariableDeclarator";
+ id: BindingPattern;
+ init: Expression | null;
+ definite?: boolean;
+ parent?: Node;
+}
+
+export interface EmptyStatement extends Span {
+ type: "EmptyStatement";
+ parent?: Node;
+}
+
+export interface ExpressionStatement extends Span {
+ type: "ExpressionStatement";
+ expression: Expression;
+ directive?: string | null;
+ parent?: Node;
+}
+
+export interface IfStatement extends Span {
+ type: "IfStatement";
+ test: Expression;
+ consequent: Statement;
+ alternate: Statement | null;
+ parent?: Node;
+}
+
+export interface DoWhileStatement extends Span {
+ type: "DoWhileStatement";
+ body: Statement;
+ test: Expression;
+ parent?: Node;
+}
+
+export interface WhileStatement extends Span {
+ type: "WhileStatement";
+ test: Expression;
+ body: Statement;
+ parent?: Node;
+}
+
+export interface ForStatement extends Span {
+ type: "ForStatement";
+ init: ForStatementInit | null;
+ test: Expression | null;
+ update: Expression | null;
+ body: Statement;
+ parent?: Node;
+}
+
+export type ForStatementInit = VariableDeclaration | Expression;
+
+export interface ForInStatement extends Span {
+ type: "ForInStatement";
+ left: ForStatementLeft;
+ right: Expression;
+ body: Statement;
+ parent?: Node;
+}
+
+export type ForStatementLeft = VariableDeclaration | AssignmentTarget;
+
+export interface ForOfStatement extends Span {
+ type: "ForOfStatement";
+ await: boolean;
+ left: ForStatementLeft;
+ right: Expression;
+ body: Statement;
+ parent?: Node;
+}
+
+export interface ContinueStatement extends Span {
+ type: "ContinueStatement";
+ label: LabelIdentifier | null;
+ parent?: Node;
+}
+
+export interface BreakStatement extends Span {
+ type: "BreakStatement";
+ label: LabelIdentifier | null;
+ parent?: Node;
+}
+
+export interface ReturnStatement extends Span {
+ type: "ReturnStatement";
+ argument: Expression | null;
+ parent?: Node;
+}
+
+export interface WithStatement extends Span {
+ type: "WithStatement";
+ object: Expression;
+ body: Statement;
+ parent?: Node;
+}
+
+export interface SwitchStatement extends Span {
+ type: "SwitchStatement";
+ discriminant: Expression;
+ cases: Array;
+ parent?: Node;
+}
+
+export interface SwitchCase extends Span {
+ type: "SwitchCase";
+ test: Expression | null;
+ consequent: Array;
+ parent?: Node;
+}
+
+export interface LabeledStatement extends Span {
+ type: "LabeledStatement";
+ label: LabelIdentifier;
+ body: Statement;
+ parent?: Node;
+}
+
+export interface ThrowStatement extends Span {
+ type: "ThrowStatement";
+ argument: Expression;
+ parent?: Node;
+}
+
+export interface TryStatement extends Span {
+ type: "TryStatement";
+ block: BlockStatement;
+ handler: CatchClause | null;
+ finalizer: BlockStatement | null;
+ parent?: Node;
+}
+
+export interface CatchClause extends Span {
+ type: "CatchClause";
+ param: BindingPattern | null;
+ body: BlockStatement;
+ parent?: Node;
+}
+
+export interface DebuggerStatement extends Span {
+ type: "DebuggerStatement";
+ parent?: Node;
+}
+
+export type BindingPattern = BindingIdentifier | ObjectPattern | ArrayPattern | AssignmentPattern;
+
+export interface AssignmentPattern extends Span {
+ type: "AssignmentPattern";
+ decorators?: [];
+ left: BindingPattern;
+ right: Expression;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface ObjectPattern extends Span {
+ type: "ObjectPattern";
+ decorators?: [];
+ properties: Array;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface BindingProperty extends Span {
+ type: "Property";
+ kind: "init";
+ key: PropertyKey;
+ value: BindingPattern;
+ method: false;
+ shorthand: boolean;
+ computed: boolean;
+ optional?: false;
+ parent?: Node;
+}
+
+export interface ArrayPattern extends Span {
+ type: "ArrayPattern";
+ decorators?: [];
+ elements: Array;
+ optional?: false;
+ typeAnnotation?: null;
+ parent?: Node;
+}
+
+export interface BindingRestElement extends Span {
+ type: "RestElement";
+ decorators?: [];
+ argument: BindingPattern;
+ optional?: false;
+ typeAnnotation?: null;
+ value?: null;
+ parent?: Node;
+}
+
+export interface Function extends Span {
+ type: FunctionType;
+ id: BindingIdentifier | null;
+ generator: boolean;
+ async: boolean;
+ declare?: boolean;
+ typeParameters?: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType?: TSTypeAnnotation | null;
+ body: FunctionBody | null;
+ expression: false;
+ parent?: Node;
+}
+
+export type ParamPattern = FormalParameter | TSParameterProperty | FormalParameterRest;
+
+export type FunctionType =
+ | "FunctionDeclaration"
+ | "FunctionExpression"
+ | "TSDeclareFunction"
+ | "TSEmptyBodyFunctionExpression";
+
+export interface FormalParameterRest extends Span {
+ type: "RestElement";
+ argument: BindingPattern;
+ decorators?: [];
+ optional?: boolean;
+ typeAnnotation?: TSTypeAnnotation | null;
+ value?: null;
+ parent?: Node;
+}
+
+export type FormalParameter = {
+ decorators?: Array;
+} & BindingPattern;
+
+export interface TSParameterProperty extends Span {
+ type: "TSParameterProperty";
+ accessibility: TSAccessibility | null;
+ decorators: Array;
+ override: boolean;
+ parameter: FormalParameter;
+ readonly: boolean;
+ static: boolean;
+ parent?: Node;
+}
+
+export interface FunctionBody extends Span {
+ type: "BlockStatement";
+ body: Array;
+ parent?: Node;
+}
+
+export interface ArrowFunctionExpression extends Span {
+ type: "ArrowFunctionExpression";
+ expression: boolean;
+ async: boolean;
+ typeParameters?: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType?: TSTypeAnnotation | null;
+ body: FunctionBody | Expression;
+ id: null;
+ generator: false;
+ parent?: Node;
+}
+
+export interface YieldExpression extends Span {
+ type: "YieldExpression";
+ delegate: boolean;
+ argument: Expression | null;
+ parent?: Node;
+}
+
+export interface Class extends Span {
+ type: ClassType;
+ decorators: Array;
+ id: BindingIdentifier | null;
+ typeParameters?: TSTypeParameterDeclaration | null;
+ superClass: Expression | null;
+ superTypeArguments?: TSTypeParameterInstantiation | null;
+ implements?: Array;
+ body: ClassBody;
+ abstract?: boolean;
+ declare?: boolean;
+ parent?: Node;
+}
+
+export type ClassType = "ClassDeclaration" | "ClassExpression";
+
+export interface ClassBody extends Span {
+ type: "ClassBody";
+ body: Array;
+ parent?: Node;
+}
+
+export type ClassElement =
+ | StaticBlock
+ | MethodDefinition
+ | PropertyDefinition
+ | AccessorProperty
+ | TSIndexSignature;
+
+export interface MethodDefinition extends Span {
+ type: MethodDefinitionType;
+ decorators: Array;
+ key: PropertyKey;
+ value: Function;
+ kind: MethodDefinitionKind;
+ computed: boolean;
+ static: boolean;
+ override?: boolean;
+ optional?: boolean;
+ accessibility?: TSAccessibility | null;
+ parent?: Node;
+}
+
+export type MethodDefinitionType = "MethodDefinition" | "TSAbstractMethodDefinition";
+
+export interface PropertyDefinition extends Span {
+ type: PropertyDefinitionType;
+ decorators: Array;
+ key: PropertyKey;
+ typeAnnotation?: TSTypeAnnotation | null;
+ value: Expression | null;
+ computed: boolean;
+ static: boolean;
+ declare?: boolean;
+ override?: boolean;
+ optional?: boolean;
+ definite?: boolean;
+ readonly?: boolean;
+ accessibility?: TSAccessibility | null;
+ parent?: Node;
+}
+
+export type PropertyDefinitionType = "PropertyDefinition" | "TSAbstractPropertyDefinition";
+
+export type MethodDefinitionKind = "constructor" | "method" | "get" | "set";
+
+export interface PrivateIdentifier extends Span {
+ type: "PrivateIdentifier";
+ name: string;
+ parent?: Node;
+}
+
+export interface StaticBlock extends Span {
+ type: "StaticBlock";
+ body: Array;
+ parent?: Node;
+}
+
+export type ModuleDeclaration =
+ | ImportDeclaration
+ | ExportAllDeclaration
+ | ExportDefaultDeclaration
+ | ExportNamedDeclaration
+ | TSExportAssignment
+ | TSNamespaceExportDeclaration;
+
+export type AccessorPropertyType = "AccessorProperty" | "TSAbstractAccessorProperty";
+
+export interface AccessorProperty extends Span {
+ type: AccessorPropertyType;
+ decorators: Array;
+ key: PropertyKey;
+ typeAnnotation?: TSTypeAnnotation | null;
+ value: Expression | null;
+ computed: boolean;
+ static: boolean;
+ override?: boolean;
+ definite?: boolean;
+ accessibility?: TSAccessibility | null;
+ declare?: false;
+ optional?: false;
+ readonly?: false;
+ parent?: Node;
+}
+
+export interface ImportExpression extends Span {
+ type: "ImportExpression";
+ source: Expression;
+ options: Expression | null;
+ phase: ImportPhase | null;
+ parent?: Node;
+}
+
+export interface ImportDeclaration extends Span {
+ type: "ImportDeclaration";
+ specifiers: Array;
+ source: StringLiteral;
+ phase: ImportPhase | null;
+ attributes: Array;
+ importKind?: ImportOrExportKind;
+ parent?: Node;
+}
+
+export type ImportPhase = "source" | "defer";
+
+export type ImportDeclarationSpecifier =
+ | ImportSpecifier
+ | ImportDefaultSpecifier
+ | ImportNamespaceSpecifier;
+
+export interface ImportSpecifier extends Span {
+ type: "ImportSpecifier";
+ imported: ModuleExportName;
+ local: BindingIdentifier;
+ importKind?: ImportOrExportKind;
+ parent?: Node;
+}
+
+export interface ImportDefaultSpecifier extends Span {
+ type: "ImportDefaultSpecifier";
+ local: BindingIdentifier;
+ parent?: Node;
+}
+
+export interface ImportNamespaceSpecifier extends Span {
+ type: "ImportNamespaceSpecifier";
+ local: BindingIdentifier;
+ parent?: Node;
+}
+
+export interface ImportAttribute extends Span {
+ type: "ImportAttribute";
+ key: ImportAttributeKey;
+ value: StringLiteral;
+ parent?: Node;
+}
+
+export type ImportAttributeKey = IdentifierName | StringLiteral;
+
+export interface ExportNamedDeclaration extends Span {
+ type: "ExportNamedDeclaration";
+ declaration: Declaration | null;
+ specifiers: Array;
+ source: StringLiteral | null;
+ exportKind?: ImportOrExportKind;
+ attributes: Array;
+ parent?: Node;
+}
+
+export interface ExportDefaultDeclaration extends Span {
+ type: "ExportDefaultDeclaration";
+ declaration: ExportDefaultDeclarationKind;
+ exportKind?: "value";
+ parent?: Node;
+}
+
+export interface ExportAllDeclaration extends Span {
+ type: "ExportAllDeclaration";
+ exported: ModuleExportName | null;
+ source: StringLiteral;
+ attributes: Array;
+ exportKind?: ImportOrExportKind;
+ parent?: Node;
+}
+
+export interface ExportSpecifier extends Span {
+ type: "ExportSpecifier";
+ local: ModuleExportName;
+ exported: ModuleExportName;
+ exportKind?: ImportOrExportKind;
+ parent?: Node;
+}
+
+export type ExportDefaultDeclarationKind = Function | Class | TSInterfaceDeclaration | Expression;
+
+export type ModuleExportName = IdentifierName | IdentifierReference | StringLiteral;
+
+export interface V8IntrinsicExpression extends Span {
+ type: "V8IntrinsicExpression";
+ name: IdentifierName;
+ arguments: Array;
+ parent?: Node;
+}
+
+export interface BooleanLiteral extends Span {
+ type: "Literal";
+ value: boolean;
+ raw: string | null;
+ parent?: Node;
+}
+
+export interface NullLiteral extends Span {
+ type: "Literal";
+ value: null;
+ raw: "null" | null;
+ parent?: Node;
+}
+
+export interface NumericLiteral extends Span {
+ type: "Literal";
+ value: number;
+ raw: string | null;
+ parent?: Node;
+}
+
+export interface StringLiteral extends Span {
+ type: "Literal";
+ value: string;
+ raw: string | null;
+ parent?: Node;
+}
+
+export interface BigIntLiteral extends Span {
+ type: "Literal";
+ value: bigint;
+ raw: string | null;
+ bigint: string;
+ parent?: Node;
+}
+
+export interface RegExpLiteral extends Span {
+ type: "Literal";
+ value: RegExp | null;
+ raw: string | null;
+ regex: { pattern: string; flags: string };
+ parent?: Node;
+}
+
+export interface JSXElement extends Span {
+ type: "JSXElement";
+ openingElement: JSXOpeningElement;
+ children: Array;
+ closingElement: JSXClosingElement | null;
+ parent?: Node;
+}
+
+export interface JSXOpeningElement extends Span {
+ type: "JSXOpeningElement";
+ name: JSXElementName;
+ typeArguments?: TSTypeParameterInstantiation | null;
+ attributes: Array;
+ selfClosing: boolean;
+ parent?: Node;
+}
+
+export interface JSXClosingElement extends Span {
+ type: "JSXClosingElement";
+ name: JSXElementName;
+ parent?: Node;
+}
+
+export interface JSXFragment extends Span {
+ type: "JSXFragment";
+ openingFragment: JSXOpeningFragment;
+ children: Array;
+ closingFragment: JSXClosingFragment;
+ parent?: Node;
+}
+
+export interface JSXOpeningFragment extends Span {
+ type: "JSXOpeningFragment";
+ attributes?: [];
+ selfClosing?: false;
+ parent?: Node;
+}
+
+export interface JSXClosingFragment extends Span {
+ type: "JSXClosingFragment";
+ parent?: Node;
+}
+
+export type JSXElementName = JSXIdentifier | JSXNamespacedName | JSXMemberExpression;
+
+export interface JSXNamespacedName extends Span {
+ type: "JSXNamespacedName";
+ namespace: JSXIdentifier;
+ name: JSXIdentifier;
+ parent?: Node;
+}
+
+export interface JSXMemberExpression extends Span {
+ type: "JSXMemberExpression";
+ object: JSXMemberExpressionObject;
+ property: JSXIdentifier;
+ parent?: Node;
+}
+
+export type JSXMemberExpressionObject = JSXIdentifier | JSXMemberExpression;
+
+export interface JSXExpressionContainer extends Span {
+ type: "JSXExpressionContainer";
+ expression: JSXExpression;
+ parent?: Node;
+}
+
+export type JSXExpression = JSXEmptyExpression | Expression;
+
+export interface JSXEmptyExpression extends Span {
+ type: "JSXEmptyExpression";
+ parent?: Node;
+}
+
+export type JSXAttributeItem = JSXAttribute | JSXSpreadAttribute;
+
+export interface JSXAttribute extends Span {
+ type: "JSXAttribute";
+ name: JSXAttributeName;
+ value: JSXAttributeValue | null;
+ parent?: Node;
+}
+
+export interface JSXSpreadAttribute extends Span {
+ type: "JSXSpreadAttribute";
+ argument: Expression;
+ parent?: Node;
+}
+
+export type JSXAttributeName = JSXIdentifier | JSXNamespacedName;
+
+export type JSXAttributeValue = StringLiteral | JSXExpressionContainer | JSXElement | JSXFragment;
+
+export interface JSXIdentifier extends Span {
+ type: "JSXIdentifier";
+ name: string;
+ parent?: Node;
+}
+
+export type JSXChild = JSXText | JSXElement | JSXFragment | JSXExpressionContainer | JSXSpreadChild;
+
+export interface JSXSpreadChild extends Span {
+ type: "JSXSpreadChild";
+ expression: Expression;
+ parent?: Node;
+}
+
+export interface JSXText extends Span {
+ type: "JSXText";
+ value: string;
+ raw: string | null;
+ parent?: Node;
+}
+
+export interface TSThisParameter extends Span {
+ type: "Identifier";
+ decorators: [];
+ name: "this";
+ optional: false;
+ typeAnnotation: TSTypeAnnotation | null;
+ parent?: Node;
+}
+
+export interface TSEnumDeclaration extends Span {
+ type: "TSEnumDeclaration";
+ id: BindingIdentifier;
+ body: TSEnumBody;
+ const: boolean;
+ declare: boolean;
+ parent?: Node;
+}
+
+export interface TSEnumBody extends Span {
+ type: "TSEnumBody";
+ members: Array;
+ parent?: Node;
+}
+
+export interface TSEnumMember extends Span {
+ type: "TSEnumMember";
+ id: TSEnumMemberName;
+ initializer: Expression | null;
+ computed: boolean;
+ parent?: Node;
+}
+
+export type TSEnumMemberName = IdentifierName | StringLiteral | TemplateLiteral;
+
+export interface TSTypeAnnotation extends Span {
+ type: "TSTypeAnnotation";
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export interface TSLiteralType extends Span {
+ type: "TSLiteralType";
+ literal: TSLiteral;
+ parent?: Node;
+}
+
+export type TSLiteral =
+ | BooleanLiteral
+ | NumericLiteral
+ | BigIntLiteral
+ | StringLiteral
+ | TemplateLiteral
+ | UnaryExpression;
+
+export type TSType =
+ | TSAnyKeyword
+ | TSBigIntKeyword
+ | TSBooleanKeyword
+ | TSIntrinsicKeyword
+ | TSNeverKeyword
+ | TSNullKeyword
+ | TSNumberKeyword
+ | TSObjectKeyword
+ | TSStringKeyword
+ | TSSymbolKeyword
+ | TSUndefinedKeyword
+ | TSUnknownKeyword
+ | TSVoidKeyword
+ | TSArrayType
+ | TSConditionalType
+ | TSConstructorType
+ | TSFunctionType
+ | TSImportType
+ | TSIndexedAccessType
+ | TSInferType
+ | TSIntersectionType
+ | TSLiteralType
+ | TSMappedType
+ | TSNamedTupleMember
+ | TSTemplateLiteralType
+ | TSThisType
+ | TSTupleType
+ | TSTypeLiteral
+ | TSTypeOperator
+ | TSTypePredicate
+ | TSTypeQuery
+ | TSTypeReference
+ | TSUnionType
+ | TSParenthesizedType
+ | JSDocNullableType
+ | JSDocNonNullableType
+ | JSDocUnknownType;
+
+export interface TSConditionalType extends Span {
+ type: "TSConditionalType";
+ checkType: TSType;
+ extendsType: TSType;
+ trueType: TSType;
+ falseType: TSType;
+ parent?: Node;
+}
+
+export interface TSUnionType extends Span {
+ type: "TSUnionType";
+ types: Array;
+ parent?: Node;
+}
+
+export interface TSIntersectionType extends Span {
+ type: "TSIntersectionType";
+ types: Array;
+ parent?: Node;
+}
+
+export interface TSParenthesizedType extends Span {
+ type: "TSParenthesizedType";
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export interface TSTypeOperator extends Span {
+ type: "TSTypeOperator";
+ operator: TSTypeOperatorOperator;
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export type TSTypeOperatorOperator = "keyof" | "unique" | "readonly";
+
+export interface TSArrayType extends Span {
+ type: "TSArrayType";
+ elementType: TSType;
+ parent?: Node;
+}
+
+export interface TSIndexedAccessType extends Span {
+ type: "TSIndexedAccessType";
+ objectType: TSType;
+ indexType: TSType;
+ parent?: Node;
+}
+
+export interface TSTupleType extends Span {
+ type: "TSTupleType";
+ elementTypes: Array;
+ parent?: Node;
+}
+
+export interface TSNamedTupleMember extends Span {
+ type: "TSNamedTupleMember";
+ label: IdentifierName;
+ elementType: TSTupleElement;
+ optional: boolean;
+ parent?: Node;
+}
+
+export interface TSOptionalType extends Span {
+ type: "TSOptionalType";
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export interface TSRestType extends Span {
+ type: "TSRestType";
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export type TSTupleElement = TSOptionalType | TSRestType | TSType;
+
+export interface TSAnyKeyword extends Span {
+ type: "TSAnyKeyword";
+ parent?: Node;
+}
+
+export interface TSStringKeyword extends Span {
+ type: "TSStringKeyword";
+ parent?: Node;
+}
+
+export interface TSBooleanKeyword extends Span {
+ type: "TSBooleanKeyword";
+ parent?: Node;
+}
+
+export interface TSNumberKeyword extends Span {
+ type: "TSNumberKeyword";
+ parent?: Node;
+}
+
+export interface TSNeverKeyword extends Span {
+ type: "TSNeverKeyword";
+ parent?: Node;
+}
+
+export interface TSIntrinsicKeyword extends Span {
+ type: "TSIntrinsicKeyword";
+ parent?: Node;
+}
+
+export interface TSUnknownKeyword extends Span {
+ type: "TSUnknownKeyword";
+ parent?: Node;
+}
+
+export interface TSNullKeyword extends Span {
+ type: "TSNullKeyword";
+ parent?: Node;
+}
+
+export interface TSUndefinedKeyword extends Span {
+ type: "TSUndefinedKeyword";
+ parent?: Node;
+}
+
+export interface TSVoidKeyword extends Span {
+ type: "TSVoidKeyword";
+ parent?: Node;
+}
+
+export interface TSSymbolKeyword extends Span {
+ type: "TSSymbolKeyword";
+ parent?: Node;
+}
+
+export interface TSThisType extends Span {
+ type: "TSThisType";
+ parent?: Node;
+}
+
+export interface TSObjectKeyword extends Span {
+ type: "TSObjectKeyword";
+ parent?: Node;
+}
+
+export interface TSBigIntKeyword extends Span {
+ type: "TSBigIntKeyword";
+ parent?: Node;
+}
+
+export interface TSTypeReference extends Span {
+ type: "TSTypeReference";
+ typeName: TSTypeName;
+ typeArguments: TSTypeParameterInstantiation | null;
+ parent?: Node;
+}
+
+export type TSTypeName = IdentifierReference | TSQualifiedName | ThisExpression;
+
+export interface TSQualifiedName extends Span {
+ type: "TSQualifiedName";
+ left: TSTypeName;
+ right: IdentifierName;
+ parent?: Node;
+}
+
+export interface TSTypeParameterInstantiation extends Span {
+ type: "TSTypeParameterInstantiation";
+ params: Array;
+ parent?: Node;
+}
+
+export interface TSTypeParameter extends Span {
+ type: "TSTypeParameter";
+ name: BindingIdentifier;
+ constraint: TSType | null;
+ default: TSType | null;
+ in: boolean;
+ out: boolean;
+ const: boolean;
+ parent?: Node;
+}
+
+export interface TSTypeParameterDeclaration extends Span {
+ type: "TSTypeParameterDeclaration";
+ params: Array;
+ parent?: Node;
+}
+
+export interface TSTypeAliasDeclaration extends Span {
+ type: "TSTypeAliasDeclaration";
+ id: BindingIdentifier;
+ typeParameters: TSTypeParameterDeclaration | null;
+ typeAnnotation: TSType;
+ declare: boolean;
+ parent?: Node;
+}
+
+export type TSAccessibility = "private" | "protected" | "public";
+
+export interface TSClassImplements extends Span {
+ type: "TSClassImplements";
+ expression: IdentifierReference | ThisExpression | MemberExpression;
+ typeArguments: TSTypeParameterInstantiation | null;
+ parent?: Node;
+}
+
+export interface TSInterfaceDeclaration extends Span {
+ type: "TSInterfaceDeclaration";
+ id: BindingIdentifier;
+ typeParameters: TSTypeParameterDeclaration | null;
+ extends: Array;
+ body: TSInterfaceBody;
+ declare: boolean;
+ parent?: Node;
+}
+
+export interface TSInterfaceBody extends Span {
+ type: "TSInterfaceBody";
+ body: Array;
+ parent?: Node;
+}
+
+export interface TSPropertySignature extends Span {
+ type: "TSPropertySignature";
+ computed: boolean;
+ optional: boolean;
+ readonly: boolean;
+ key: PropertyKey;
+ typeAnnotation: TSTypeAnnotation | null;
+ accessibility: null;
+ static: false;
+ parent?: Node;
+}
+
+export type TSSignature =
+ | TSIndexSignature
+ | TSPropertySignature
+ | TSCallSignatureDeclaration
+ | TSConstructSignatureDeclaration
+ | TSMethodSignature;
+
+export interface TSIndexSignature extends Span {
+ type: "TSIndexSignature";
+ parameters: Array;
+ typeAnnotation: TSTypeAnnotation;
+ readonly: boolean;
+ static: boolean;
+ accessibility: null;
+ parent?: Node;
+}
+
+export interface TSCallSignatureDeclaration extends Span {
+ type: "TSCallSignatureDeclaration";
+ typeParameters: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType: TSTypeAnnotation | null;
+ parent?: Node;
+}
+
+export type TSMethodSignatureKind = "method" | "get" | "set";
+
+export interface TSMethodSignature extends Span {
+ type: "TSMethodSignature";
+ key: PropertyKey;
+ computed: boolean;
+ optional: boolean;
+ kind: TSMethodSignatureKind;
+ typeParameters: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType: TSTypeAnnotation | null;
+ accessibility: null;
+ readonly: false;
+ static: false;
+ parent?: Node;
+}
+
+export interface TSConstructSignatureDeclaration extends Span {
+ type: "TSConstructSignatureDeclaration";
+ typeParameters: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType: TSTypeAnnotation | null;
+ parent?: Node;
+}
+
+export interface TSIndexSignatureName extends Span {
+ type: "Identifier";
+ decorators: [];
+ name: string;
+ optional: false;
+ typeAnnotation: TSTypeAnnotation;
+ parent?: Node;
+}
+
+export interface TSInterfaceHeritage extends Span {
+ type: "TSInterfaceHeritage";
+ expression: Expression;
+ typeArguments: TSTypeParameterInstantiation | null;
+ parent?: Node;
+}
+
+export interface TSTypePredicate extends Span {
+ type: "TSTypePredicate";
+ parameterName: TSTypePredicateName;
+ asserts: boolean;
+ typeAnnotation: TSTypeAnnotation | null;
+ parent?: Node;
+}
+
+export type TSTypePredicateName = IdentifierName | TSThisType;
+
+export interface TSModuleDeclaration extends Span {
+ type: "TSModuleDeclaration";
+ id: BindingIdentifier | StringLiteral | TSQualifiedName;
+ body: TSModuleBlock | null;
+ kind: TSModuleDeclarationKind;
+ declare: boolean;
+ global: false;
+ parent?: Node;
+}
+
+export type TSModuleDeclarationKind = "module" | "namespace";
+
+export interface TSGlobalDeclaration extends Span {
+ type: "TSModuleDeclaration";
+ id: IdentifierName;
+ body: TSModuleBlock;
+ kind: "global";
+ declare: boolean;
+ global: true;
+ parent?: Node;
+}
+
+export interface TSModuleBlock extends Span {
+ type: "TSModuleBlock";
+ body: Array;
+ parent?: Node;
+}
+
+export interface TSTypeLiteral extends Span {
+ type: "TSTypeLiteral";
+ members: Array;
+ parent?: Node;
+}
+
+export interface TSInferType extends Span {
+ type: "TSInferType";
+ typeParameter: TSTypeParameter;
+ parent?: Node;
+}
+
+export interface TSTypeQuery extends Span {
+ type: "TSTypeQuery";
+ exprName: TSTypeQueryExprName;
+ typeArguments: TSTypeParameterInstantiation | null;
+ parent?: Node;
+}
+
+export type TSTypeQueryExprName = TSImportType | TSTypeName;
+
+export interface TSImportType extends Span {
+ type: "TSImportType";
+ source: StringLiteral;
+ options: ObjectExpression | null;
+ qualifier: TSImportTypeQualifier | null;
+ typeArguments: TSTypeParameterInstantiation | null;
+ parent?: Node;
+}
+
+export type TSImportTypeQualifier = IdentifierName | TSImportTypeQualifiedName;
+
+export interface TSImportTypeQualifiedName extends Span {
+ type: "TSQualifiedName";
+ left: TSImportTypeQualifier;
+ right: IdentifierName;
+ parent?: Node;
+}
+
+export interface TSFunctionType extends Span {
+ type: "TSFunctionType";
+ typeParameters: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType: TSTypeAnnotation;
+ parent?: Node;
+}
+
+export interface TSConstructorType extends Span {
+ type: "TSConstructorType";
+ abstract: boolean;
+ typeParameters: TSTypeParameterDeclaration | null;
+ params: ParamPattern[];
+ returnType: TSTypeAnnotation;
+ parent?: Node;
+}
+
+export interface TSMappedType extends Span {
+ type: "TSMappedType";
+ key: BindingIdentifier;
+ constraint: TSType;
+ nameType: TSType | null;
+ typeAnnotation: TSType | null;
+ optional: TSMappedTypeModifierOperator | false;
+ readonly: TSMappedTypeModifierOperator | null;
+ parent?: Node;
+}
+
+export type TSMappedTypeModifierOperator = true | "+" | "-";
+
+export interface TSTemplateLiteralType extends Span {
+ type: "TSTemplateLiteralType";
+ quasis: Array;
+ types: Array;
+ parent?: Node;
+}
+
+export interface TSAsExpression extends Span {
+ type: "TSAsExpression";
+ expression: Expression;
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export interface TSSatisfiesExpression extends Span {
+ type: "TSSatisfiesExpression";
+ expression: Expression;
+ typeAnnotation: TSType;
+ parent?: Node;
+}
+
+export interface TSTypeAssertion extends Span {
+ type: "TSTypeAssertion";
+ typeAnnotation: TSType;
+ expression: Expression;
+ parent?: Node;
+}
+
+export interface TSImportEqualsDeclaration extends Span {
+ type: "TSImportEqualsDeclaration";
+ id: BindingIdentifier;
+ moduleReference: TSModuleReference;
+ importKind: ImportOrExportKind;
+ parent?: Node;
+}
+
+export type TSModuleReference = TSExternalModuleReference | IdentifierReference | TSQualifiedName;
+
+export interface TSExternalModuleReference extends Span {
+ type: "TSExternalModuleReference";
+ expression: StringLiteral;
+ parent?: Node;
+}
+
+export interface TSNonNullExpression extends Span {
+ type: "TSNonNullExpression";
+ expression: Expression;
+ parent?: Node;
+}
+
+export interface Decorator extends Span {
+ type: "Decorator";
+ expression: Expression;
+ parent?: Node;
+}
+
+export interface TSExportAssignment extends Span {
+ type: "TSExportAssignment";
+ expression: Expression;
+ parent?: Node;
+}
+
+export interface TSNamespaceExportDeclaration extends Span {
+ type: "TSNamespaceExportDeclaration";
+ id: IdentifierName;
+ parent?: Node;
+}
+
+export interface TSInstantiationExpression extends Span {
+ type: "TSInstantiationExpression";
+ expression: Expression;
+ typeArguments: TSTypeParameterInstantiation;
+ parent?: Node;
+}
+
+export type ImportOrExportKind = "value" | "type";
+
+export interface JSDocNullableType extends Span {
+ type: "TSJSDocNullableType";
+ typeAnnotation: TSType;
+ postfix: boolean;
+ parent?: Node;
+}
+
+export interface JSDocNonNullableType extends Span {
+ type: "TSJSDocNonNullableType";
+ typeAnnotation: TSType;
+ postfix: boolean;
+ parent?: Node;
+}
+
+export interface JSDocUnknownType extends Span {
+ type: "TSJSDocUnknownType";
+ parent?: Node;
+}
+
+export type ModuleKind = "script" | "module" | "commonjs";
+
+export interface Span {
+ start: number;
+ end: number;
+ range?: [number, number];
+}
+
+export type AssignmentOperator =
+ | "="
+ | "+="
+ | "-="
+ | "*="
+ | "/="
+ | "%="
+ | "**="
+ | "<<="
+ | ">>="
+ | ">>>="
+ | "|="
+ | "^="
+ | "&="
+ | "||="
+ | "&&="
+ | "??=";
+
+export type BinaryOperator =
+ | "=="
+ | "!="
+ | "==="
+ | "!=="
+ | "<"
+ | "<="
+ | ">"
+ | ">="
+ | "+"
+ | "-"
+ | "*"
+ | "/"
+ | "%"
+ | "**"
+ | "<<"
+ | ">>"
+ | ">>>"
+ | "|"
+ | "^"
+ | "&"
+ | "in"
+ | "instanceof";
+
+export type LogicalOperator = "||" | "&&" | "??";
+
+export type UnaryOperator = "+" | "-" | "!" | "~" | "typeof" | "void" | "delete";
+
+export type UpdateOperator = "++" | "--";
+
+export type Node =
+ | Program
+ | IdentifierName
+ | IdentifierReference
+ | BindingIdentifier
+ | LabelIdentifier
+ | ThisExpression
+ | ArrayExpression
+ | ObjectExpression
+ | ObjectProperty
+ | TemplateLiteral
+ | TaggedTemplateExpression
+ | TemplateElement
+ | ComputedMemberExpression
+ | StaticMemberExpression
+ | PrivateFieldExpression
+ | CallExpression
+ | NewExpression
+ | MetaProperty
+ | SpreadElement
+ | UpdateExpression
+ | UnaryExpression
+ | BinaryExpression
+ | PrivateInExpression
+ | LogicalExpression
+ | ConditionalExpression
+ | AssignmentExpression
+ | ArrayAssignmentTarget
+ | ObjectAssignmentTarget
+ | AssignmentTargetRest
+ | AssignmentTargetWithDefault
+ | AssignmentTargetPropertyIdentifier
+ | AssignmentTargetPropertyProperty
+ | SequenceExpression
+ | Super
+ | AwaitExpression
+ | ChainExpression
+ | ParenthesizedExpression
+ | Directive
+ | Hashbang
+ | BlockStatement
+ | VariableDeclaration
+ | VariableDeclarator
+ | EmptyStatement
+ | ExpressionStatement
+ | IfStatement
+ | DoWhileStatement
+ | WhileStatement
+ | ForStatement
+ | ForInStatement
+ | ForOfStatement
+ | ContinueStatement
+ | BreakStatement
+ | ReturnStatement
+ | WithStatement
+ | SwitchStatement
+ | SwitchCase
+ | LabeledStatement
+ | ThrowStatement
+ | TryStatement
+ | CatchClause
+ | DebuggerStatement
+ | AssignmentPattern
+ | ObjectPattern
+ | BindingProperty
+ | ArrayPattern
+ | BindingRestElement
+ | Function
+ | FunctionBody
+ | ArrowFunctionExpression
+ | YieldExpression
+ | Class
+ | ClassBody
+ | MethodDefinition
+ | PropertyDefinition
+ | PrivateIdentifier
+ | StaticBlock
+ | AccessorProperty
+ | ImportExpression
+ | ImportDeclaration
+ | ImportSpecifier
+ | ImportDefaultSpecifier
+ | ImportNamespaceSpecifier
+ | ImportAttribute
+ | ExportNamedDeclaration
+ | ExportDefaultDeclaration
+ | ExportAllDeclaration
+ | ExportSpecifier
+ | V8IntrinsicExpression
+ | BooleanLiteral
+ | NullLiteral
+ | NumericLiteral
+ | StringLiteral
+ | BigIntLiteral
+ | RegExpLiteral
+ | JSXElement
+ | JSXOpeningElement
+ | JSXClosingElement
+ | JSXFragment
+ | JSXOpeningFragment
+ | JSXClosingFragment
+ | JSXNamespacedName
+ | JSXMemberExpression
+ | JSXExpressionContainer
+ | JSXEmptyExpression
+ | JSXAttribute
+ | JSXSpreadAttribute
+ | JSXIdentifier
+ | JSXSpreadChild
+ | JSXText
+ | TSThisParameter
+ | TSEnumDeclaration
+ | TSEnumBody
+ | TSEnumMember
+ | TSTypeAnnotation
+ | TSLiteralType
+ | TSConditionalType
+ | TSUnionType
+ | TSIntersectionType
+ | TSParenthesizedType
+ | TSTypeOperator
+ | TSArrayType
+ | TSIndexedAccessType
+ | TSTupleType
+ | TSNamedTupleMember
+ | TSOptionalType
+ | TSRestType
+ | TSAnyKeyword
+ | TSStringKeyword
+ | TSBooleanKeyword
+ | TSNumberKeyword
+ | TSNeverKeyword
+ | TSIntrinsicKeyword
+ | TSUnknownKeyword
+ | TSNullKeyword
+ | TSUndefinedKeyword
+ | TSVoidKeyword
+ | TSSymbolKeyword
+ | TSThisType
+ | TSObjectKeyword
+ | TSBigIntKeyword
+ | TSTypeReference
+ | TSQualifiedName
+ | TSTypeParameterInstantiation
+ | TSTypeParameter
+ | TSTypeParameterDeclaration
+ | TSTypeAliasDeclaration
+ | TSClassImplements
+ | TSInterfaceDeclaration
+ | TSInterfaceBody
+ | TSPropertySignature
+ | TSIndexSignature
+ | TSCallSignatureDeclaration
+ | TSMethodSignature
+ | TSConstructSignatureDeclaration
+ | TSIndexSignatureName
+ | TSInterfaceHeritage
+ | TSTypePredicate
+ | TSModuleDeclaration
+ | TSGlobalDeclaration
+ | TSModuleBlock
+ | TSTypeLiteral
+ | TSInferType
+ | TSTypeQuery
+ | TSImportType
+ | TSImportTypeQualifiedName
+ | TSFunctionType
+ | TSConstructorType
+ | TSMappedType
+ | TSTemplateLiteralType
+ | TSAsExpression
+ | TSSatisfiesExpression
+ | TSTypeAssertion
+ | TSImportEqualsDeclaration
+ | TSExternalModuleReference
+ | TSNonNullExpression
+ | Decorator
+ | TSExportAssignment
+ | TSNamespaceExportDeclaration
+ | TSInstantiationExpression
+ | JSDocNullableType
+ | JSDocNonNullableType
+ | JSDocUnknownType
+ | ParamPattern;
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/LICENSE b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a18858fb7b014098cba85703e66609be66a26ef5
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 WorkOS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/README.md b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..783d5f4ac0f455d774be5ceb7beeaddf8ffb1004
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/README.md
@@ -0,0 +1,3 @@
+# `number`
+
+This is an internal utility, not intended for public usage.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.mts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.mts
new file mode 100644
index 0000000000000000000000000000000000000000..971ef6b9aa0cd15adfe3b5ab314f9c5d9e1ff4e9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.mts
@@ -0,0 +1,3 @@
+declare function clamp(value: number, [min, max]: [number, number]): number;
+
+export { clamp };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..971ef6b9aa0cd15adfe3b5ab314f9c5d9e1ff4e9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.d.ts
@@ -0,0 +1,3 @@
+declare function clamp(value: number, [min, max]: [number, number]): number;
+
+export { clamp };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..099db098fef88f99522bf86a6eeaf81b611fa9fb
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js
@@ -0,0 +1,31 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+ clamp: () => clamp
+});
+module.exports = __toCommonJS(index_exports);
+
+// src/number.ts
+function clamp(value, [min, max]) {
+ return Math.min(max, Math.max(min, value));
+}
+//# sourceMappingURL=index.js.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..f438a44bc1621a36ee8ebab089463cb51c2cc92c
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/index.ts", "../src/number.ts"],
+ "sourcesContent": ["export { clamp } from './number';\n", "function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n"],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,MAAM,OAAe,CAAC,KAAK,GAAG,GAA6B;AAClE,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;",
+ "names": []
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c4bec233cd1477472897e65a88a9dee1464f926a
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs
@@ -0,0 +1,8 @@
+// src/number.ts
+function clamp(value, [min, max]) {
+ return Math.min(max, Math.max(min, value));
+}
+export {
+ clamp
+};
+//# sourceMappingURL=index.mjs.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs.map
new file mode 100644
index 0000000000000000000000000000000000000000..3357e7e141da5de9457af4c7c590ea4e958cf5be
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/dist/index.mjs.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/number.ts"],
+ "sourcesContent": ["function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n"],
+ "mappings": ";AAAA,SAAS,MAAM,OAAe,CAAC,KAAK,GAAG,GAA6B;AAClE,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;",
+ "names": []
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/package.json b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8c5ef83425104d5b94f0c09687517aa0124903af
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/number/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "@radix-ui/number",
+ "version": "1.1.2",
+ "license": "MIT",
+ "source": "./src/index.ts",
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "files": [
+ "dist",
+ "README.md"
+ ],
+ "sideEffects": false,
+ "devDependencies": {
+ "typescript": "^5.9.3",
+ "@repo/builder": "0.0.0",
+ "@repo/typescript-config": "0.0.0"
+ },
+ "homepage": "https://radix-ui.com/primitives",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/radix-ui/primitives.git",
+ "directory": "packages/core/number"
+ },
+ "bugs": {
+ "url": "https://github.com/radix-ui/primitives/issues"
+ },
+ "scripts": {
+ "lint": "oxlint --max-warnings 0 src",
+ "clean": "rm -rf dist",
+ "reset": "rm -rf dist node_modules",
+ "typecheck": "tsc --noEmit",
+ "build": "radix-build"
+ },
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "require": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/LICENSE b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a18858fb7b014098cba85703e66609be66a26ef5
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 WorkOS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/README.md b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..79d1eef22a1eb564a20adc03814dd443ccc5bf8e
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/README.md
@@ -0,0 +1,3 @@
+# `primitive`
+
+This is an internal utility, not intended for public usage.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.mts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.mts
new file mode 100644
index 0000000000000000000000000000000000000000..dad4db4aeb2ff16aa0f006b132a1f98b8ca7006e
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.mts
@@ -0,0 +1,20 @@
+declare const canUseDOM: boolean;
+declare function composeEventHandlers(originalEventHandler?: (event: E) => void, ourEventHandler?: (event: E) => void, { checkForDefaultPrevented }?: {
+ checkForDefaultPrevented?: boolean | undefined;
+}): (event: E) => void;
+declare function getOwnerWindow(element: Node | null | undefined): Window & typeof globalThis;
+declare function getOwnerDocument(element: Node | null | undefined): Document;
+/**
+ * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37
+ * MIT License, Copyright (c) AriaKit.
+ */
+declare function getActiveElement(node: Node | null | undefined, activeDescendant?: boolean): HTMLElement | null;
+declare function isFrame(element: Element): element is HTMLIFrameElement;
+
+type Timeout = ReturnType;
+type Interval = ReturnType;
+type Immediate = ReturnType;
+
+export { type Immediate, type Interval, type Timeout, canUseDOM, composeEventHandlers, getActiveElement, getOwnerDocument, getOwnerWindow, isFrame };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dad4db4aeb2ff16aa0f006b132a1f98b8ca7006e
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.d.ts
@@ -0,0 +1,20 @@
+declare const canUseDOM: boolean;
+declare function composeEventHandlers(originalEventHandler?: (event: E) => void, ourEventHandler?: (event: E) => void, { checkForDefaultPrevented }?: {
+ checkForDefaultPrevented?: boolean | undefined;
+}): (event: E) => void;
+declare function getOwnerWindow(element: Node | null | undefined): Window & typeof globalThis;
+declare function getOwnerDocument(element: Node | null | undefined): Document;
+/**
+ * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37
+ * MIT License, Copyright (c) AriaKit.
+ */
+declare function getActiveElement(node: Node | null | undefined, activeDescendant?: boolean): HTMLElement | null;
+declare function isFrame(element: Element): element is HTMLIFrameElement;
+
+type Timeout = ReturnType;
+type Interval = ReturnType;
+type Immediate = ReturnType;
+
+export { type Immediate, type Interval, type Timeout, canUseDOM, composeEventHandlers, getActiveElement, getOwnerDocument, getOwnerWindow, isFrame };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..24ae5dea44e598438e32dda15623ecd5a2146c75
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js
@@ -0,0 +1,76 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+ canUseDOM: () => canUseDOM,
+ composeEventHandlers: () => composeEventHandlers,
+ getActiveElement: () => getActiveElement,
+ getOwnerDocument: () => getOwnerDocument,
+ getOwnerWindow: () => getOwnerWindow,
+ isFrame: () => isFrame
+});
+module.exports = __toCommonJS(index_exports);
+
+// src/primitive.tsx
+var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);
+function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
+ return function handleEvent(event) {
+ originalEventHandler?.(event);
+ if (checkForDefaultPrevented === false || !event.defaultPrevented) {
+ return ourEventHandler?.(event);
+ }
+ };
+}
+function getOwnerWindow(element) {
+ if (!canUseDOM) {
+ throw new Error("Cannot access window outside of the DOM");
+ }
+ return element?.ownerDocument?.defaultView ?? window;
+}
+function getOwnerDocument(element) {
+ if (!canUseDOM) {
+ throw new Error("Cannot access document outside of the DOM");
+ }
+ return element?.ownerDocument ?? document;
+}
+function getActiveElement(node, activeDescendant = false) {
+ const { activeElement } = getOwnerDocument(node);
+ if (!activeElement?.nodeName) {
+ return null;
+ }
+ if (isFrame(activeElement) && activeElement.contentDocument) {
+ return getActiveElement(activeElement.contentDocument.body, activeDescendant);
+ }
+ if (activeDescendant) {
+ const id = activeElement.getAttribute("aria-activedescendant");
+ if (id) {
+ const element = getOwnerDocument(activeElement).getElementById(id);
+ if (element) {
+ return element;
+ }
+ }
+ }
+ return activeElement;
+}
+function isFrame(element) {
+ return element.tagName === "IFRAME";
+}
+//# sourceMappingURL=index.js.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6a97e5c521821e01b1aee08c9f2f4e80b878dc05
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/index.ts", "../src/primitive.tsx"],
+ "sourcesContent": ["export * from './primitive';\nexport type * from './types';\n", "/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {},\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false,\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n"],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGO,IAAM,YAAY,CAAC,EACxB,OAAO,WAAW,eAClB,OAAO,YACP,OAAO,SAAS;AAIX,SAAS,qBACd,sBACA,iBACA,EAAE,2BAA2B,KAAK,IAAI,CAAC,GACvC;AACA,SAAO,SAAS,YAAY,OAAU;AACpC,2BAAuB,KAAK;AAE5B,QAAI,6BAA6B,SAAS,CAAC,MAAM,kBAAkB;AACjE,aAAO,kBAAkB,KAAK;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,eAAe,SAAkC;AAC/D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,SAAO,SAAS,eAAe,eAAe;AAChD;AAEO,SAAS,iBAAiB,SAAkC;AACjE,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO,SAAS,iBAAiB;AACnC;AAMO,SAAS,iBACd,MACA,mBAAmB,OACC;AACpB,QAAM,EAAE,cAAc,IAAI,iBAAiB,IAAI;AAC/C,MAAI,CAAC,eAAe,UAAU;AAG5B,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,aAAa,KAAK,cAAc,iBAAiB;AAC3D,WAAO,iBAAiB,cAAc,gBAAgB,MAAM,gBAAgB;AAAA,EAC9E;AAEA,MAAI,kBAAkB;AACpB,UAAM,KAAK,cAAc,aAAa,uBAAuB;AAC7D,QAAI,IAAI;AACN,YAAM,UAAU,iBAAiB,aAAa,EAAE,eAAe,EAAE;AACjE,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,QAAQ,SAAgD;AACtE,SAAO,QAAQ,YAAY;AAC7B;",
+ "names": []
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d28e40879e85ea74263f3a3dcb8d987d35d09891
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs
@@ -0,0 +1,53 @@
+// src/primitive.tsx
+var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);
+function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
+ return function handleEvent(event) {
+ originalEventHandler?.(event);
+ if (checkForDefaultPrevented === false || !event.defaultPrevented) {
+ return ourEventHandler?.(event);
+ }
+ };
+}
+function getOwnerWindow(element) {
+ if (!canUseDOM) {
+ throw new Error("Cannot access window outside of the DOM");
+ }
+ return element?.ownerDocument?.defaultView ?? window;
+}
+function getOwnerDocument(element) {
+ if (!canUseDOM) {
+ throw new Error("Cannot access document outside of the DOM");
+ }
+ return element?.ownerDocument ?? document;
+}
+function getActiveElement(node, activeDescendant = false) {
+ const { activeElement } = getOwnerDocument(node);
+ if (!activeElement?.nodeName) {
+ return null;
+ }
+ if (isFrame(activeElement) && activeElement.contentDocument) {
+ return getActiveElement(activeElement.contentDocument.body, activeDescendant);
+ }
+ if (activeDescendant) {
+ const id = activeElement.getAttribute("aria-activedescendant");
+ if (id) {
+ const element = getOwnerDocument(activeElement).getElementById(id);
+ if (element) {
+ return element;
+ }
+ }
+ }
+ return activeElement;
+}
+function isFrame(element) {
+ return element.tagName === "IFRAME";
+}
+export {
+ canUseDOM,
+ composeEventHandlers,
+ getActiveElement,
+ getOwnerDocument,
+ getOwnerWindow,
+ isFrame
+};
+//# sourceMappingURL=index.mjs.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs.map
new file mode 100644
index 0000000000000000000000000000000000000000..123834e91eb793dd1e147fa5cef480bac7350de2
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/dist/index.mjs.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/primitive.tsx"],
+ "sourcesContent": ["/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {},\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false,\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n"],
+ "mappings": ";AAGO,IAAM,YAAY,CAAC,EACxB,OAAO,WAAW,eAClB,OAAO,YACP,OAAO,SAAS;AAIX,SAAS,qBACd,sBACA,iBACA,EAAE,2BAA2B,KAAK,IAAI,CAAC,GACvC;AACA,SAAO,SAAS,YAAY,OAAU;AACpC,2BAAuB,KAAK;AAE5B,QAAI,6BAA6B,SAAS,CAAC,MAAM,kBAAkB;AACjE,aAAO,kBAAkB,KAAK;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,eAAe,SAAkC;AAC/D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,SAAO,SAAS,eAAe,eAAe;AAChD;AAEO,SAAS,iBAAiB,SAAkC;AACjE,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO,SAAS,iBAAiB;AACnC;AAMO,SAAS,iBACd,MACA,mBAAmB,OACC;AACpB,QAAM,EAAE,cAAc,IAAI,iBAAiB,IAAI;AAC/C,MAAI,CAAC,eAAe,UAAU;AAG5B,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,aAAa,KAAK,cAAc,iBAAiB;AAC3D,WAAO,iBAAiB,cAAc,gBAAgB,MAAM,gBAAgB;AAAA,EAC9E;AAEA,MAAI,kBAAkB;AACpB,UAAM,KAAK,cAAc,aAAa,uBAAuB;AAC7D,QAAI,IAAI;AACN,YAAM,UAAU,iBAAiB,aAAa,EAAE,eAAe,EAAE;AACjE,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,QAAQ,SAAgD;AACtE,SAAO,QAAQ,YAAY;AAC7B;",
+ "names": []
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/package.json b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d652f746f4cecd141f3eed15b97e28c16b3544a9
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/primitive/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "@radix-ui/primitive",
+ "version": "1.1.4",
+ "license": "MIT",
+ "source": "./src/index.ts",
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "files": [
+ "dist",
+ "README.md"
+ ],
+ "sideEffects": false,
+ "devDependencies": {
+ "typescript": "^5.9.3",
+ "@repo/builder": "0.0.0",
+ "@repo/typescript-config": "0.0.0"
+ },
+ "homepage": "https://radix-ui.com/primitives",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/radix-ui/primitives.git",
+ "directory": "packages/core/primitive"
+ },
+ "bugs": {
+ "url": "https://github.com/radix-ui/primitives/issues"
+ },
+ "scripts": {
+ "lint": "oxlint --max-warnings 0 src",
+ "clean": "rm -rf dist",
+ "reset": "rm -rf dist node_modules",
+ "typecheck": "tsc --noEmit",
+ "build": "radix-build"
+ },
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "require": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/LICENSE b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a18858fb7b014098cba85703e66609be66a26ef5
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 WorkOS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/README.md b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e1df5d0897f32687c5ebd1b5c18b6a201f5a910
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/README.md
@@ -0,0 +1,3 @@
+# `react-accessible-icon`
+
+View docs [here](https://radix-ui.com/primitives/docs/utilities/accessible-icon).
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.mts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.mts
new file mode 100644
index 0000000000000000000000000000000000000000..f105c4087a22303b5f9229abe385fff624ab47b6
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.mts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+
+interface AccessibleIconProps {
+ children?: React.ReactNode;
+ /**
+ * The accessible label for the icon. This label will be visually hidden but announced to screen
+ * reader users, similar to `alt` text for `img` tags.
+ */
+ label: string;
+}
+declare const AccessibleIcon: React.FC;
+declare const Root: React.FC;
+
+export { AccessibleIcon, type AccessibleIconProps, Root };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f105c4087a22303b5f9229abe385fff624ab47b6
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+
+interface AccessibleIconProps {
+ children?: React.ReactNode;
+ /**
+ * The accessible label for the icon. This label will be visually hidden but announced to screen
+ * reader users, similar to `alt` text for `img` tags.
+ */
+ label: string;
+}
+declare const AccessibleIcon: React.FC;
+declare const Root: React.FC;
+
+export { AccessibleIcon, type AccessibleIconProps, Root };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9492711c291638b3453c887a63de348a0c5a419e
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js
@@ -0,0 +1,57 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+ AccessibleIcon: () => AccessibleIcon,
+ Root: () => Root2
+});
+module.exports = __toCommonJS(index_exports);
+
+// src/accessible-icon.tsx
+var React = __toESM(require("react"));
+var VisuallyHiddenPrimitive = __toESM(require("@radix-ui/react-visually-hidden"));
+var import_jsx_runtime = require("react/jsx-runtime");
+var NAME = "AccessibleIcon";
+var AccessibleIcon = ({ children, label }) => {
+ const child = React.Children.only(children);
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
+ React.cloneElement(child, {
+ // accessibility
+ "aria-hidden": "true",
+ focusable: "false"
+ // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable
+ }),
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VisuallyHiddenPrimitive.Root, { children: label })
+ ] });
+};
+AccessibleIcon.displayName = NAME;
+var Root2 = AccessibleIcon;
+//# sourceMappingURL=index.js.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7be0c158e69a620bb4cefc2f580c2e7d11105c59
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/index.ts", "../src/accessible-icon.tsx"],
+ "sourcesContent": ["export {\n AccessibleIcon,\n //\n Root,\n} from './accessible-icon';\nexport type { AccessibleIconProps } from './accessible-icon';\n", "import * as React from 'react';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nconst NAME = 'AccessibleIcon';\n\ninterface AccessibleIconProps {\n children?: React.ReactNode;\n /**\n * The accessible label for the icon. This label will be visually hidden but announced to screen\n * reader users, similar to `alt` text for `img` tags.\n */\n label: string;\n}\n\nconst AccessibleIcon: React.FC = ({ children, label }) => {\n const child = React.Children.only(children);\n return (\n <>\n {React.cloneElement(child as React.ReactElement>, {\n // accessibility\n 'aria-hidden': 'true',\n focusable: 'false', // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable\n })}\n {label}\n >\n );\n};\n\nAccessibleIcon.displayName = NAME;\n\nconst Root = AccessibleIcon;\n\nexport {\n AccessibleIcon,\n //\n Root,\n};\nexport type { AccessibleIconProps };\n"],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,cAAAA;AAAA;AAAA;;;ACAA,YAAuB;AACvB,8BAAyC;AAgBrC;AAdJ,IAAM,OAAO;AAWb,IAAM,iBAAgD,CAAC,EAAE,UAAU,MAAM,MAAM;AAC7E,QAAM,QAAc,eAAS,KAAK,QAAQ;AAC1C,SACE,4EACG;AAAA,IAAM,mBAAa,OAA8D;AAAA;AAAA,MAEhF,eAAe;AAAA,MACf,WAAW;AAAA;AAAA,IACb,CAAC;AAAA,IACD,4CAAyB,8BAAxB,EAA8B,iBAAM;AAAA,KACvC;AAEJ;AAEA,eAAe,cAAc;AAE7B,IAAMC,QAAO;",
+ "names": ["Root", "Root"]
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..735a6494a5e038ce6ffb90523b0dd2a820d4ed29
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs
@@ -0,0 +1,24 @@
+// src/accessible-icon.tsx
+import * as React from "react";
+import * as VisuallyHiddenPrimitive from "@radix-ui/react-visually-hidden";
+import { Fragment, jsx, jsxs } from "react/jsx-runtime";
+var NAME = "AccessibleIcon";
+var AccessibleIcon = ({ children, label }) => {
+ const child = React.Children.only(children);
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
+ React.cloneElement(child, {
+ // accessibility
+ "aria-hidden": "true",
+ focusable: "false"
+ // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable
+ }),
+ /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { children: label })
+ ] });
+};
+AccessibleIcon.displayName = NAME;
+var Root2 = AccessibleIcon;
+export {
+ AccessibleIcon,
+ Root2 as Root
+};
+//# sourceMappingURL=index.mjs.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs.map
new file mode 100644
index 0000000000000000000000000000000000000000..41543e2235a38473ec53da099cf42b89477649d6
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/dist/index.mjs.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/accessible-icon.tsx"],
+ "sourcesContent": ["import * as React from 'react';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nconst NAME = 'AccessibleIcon';\n\ninterface AccessibleIconProps {\n children?: React.ReactNode;\n /**\n * The accessible label for the icon. This label will be visually hidden but announced to screen\n * reader users, similar to `alt` text for `img` tags.\n */\n label: string;\n}\n\nconst AccessibleIcon: React.FC = ({ children, label }) => {\n const child = React.Children.only(children);\n return (\n <>\n {React.cloneElement(child as React.ReactElement>, {\n // accessibility\n 'aria-hidden': 'true',\n focusable: 'false', // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable\n })}\n {label}\n >\n );\n};\n\nAccessibleIcon.displayName = NAME;\n\nconst Root = AccessibleIcon;\n\nexport {\n AccessibleIcon,\n //\n Root,\n};\nexport type { AccessibleIconProps };\n"],
+ "mappings": ";AAAA,YAAY,WAAW;AACvB,YAAY,6BAA6B;AAgBrC,mBAME,KANF;AAdJ,IAAM,OAAO;AAWb,IAAM,iBAAgD,CAAC,EAAE,UAAU,MAAM,MAAM;AAC7E,QAAM,QAAc,eAAS,KAAK,QAAQ;AAC1C,SACE,iCACG;AAAA,IAAM,mBAAa,OAA8D;AAAA;AAAA,MAEhF,eAAe;AAAA,MACf,WAAW;AAAA;AAAA,IACb,CAAC;AAAA,IACD,oBAAyB,8BAAxB,EAA8B,iBAAM;AAAA,KACvC;AAEJ;AAEA,eAAe,cAAc;AAE7B,IAAMA,QAAO;",
+ "names": ["Root"]
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/package.json b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..03f8dda0712cf0e7c376b8a0ae10913c52c697c4
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accessible-icon/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "@radix-ui/react-accessible-icon",
+ "version": "1.1.10",
+ "license": "MIT",
+ "source": "./src/index.ts",
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "files": [
+ "dist",
+ "README.md"
+ ],
+ "sideEffects": false,
+ "dependencies": {
+ "@radix-ui/react-visually-hidden": "1.2.6"
+ },
+ "devDependencies": {
+ "@types/react": "^19.2.2",
+ "@types/react-dom": "^19.2.2",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "typescript": "^5.9.3",
+ "@repo/builder": "0.0.0",
+ "@repo/typescript-config": "0.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ },
+ "homepage": "https://radix-ui.com/primitives",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/radix-ui/primitives.git",
+ "directory": "packages/react/accessible-icon"
+ },
+ "bugs": {
+ "url": "https://github.com/radix-ui/primitives/issues"
+ },
+ "scripts": {
+ "lint": "oxlint --max-warnings 0 src",
+ "clean": "rm -rf dist",
+ "reset": "rm -rf dist node_modules",
+ "typecheck": "tsc --noEmit",
+ "build": "radix-build"
+ },
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "require": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/LICENSE b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a18858fb7b014098cba85703e66609be66a26ef5
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 WorkOS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/README.md b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e5f7dc9cea73a6d8b275baf6413a71075acbc687
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/README.md
@@ -0,0 +1,3 @@
+# `react-accordion`
+
+View docs [here](https://radix-ui.com/primitives/docs/components/accordion).
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.mts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.mts
new file mode 100644
index 0000000000000000000000000000000000000000..76cbbc45958717c9ec72e9bf416e31fe05226d74
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.mts
@@ -0,0 +1,114 @@
+import * as _radix_ui_react_context from '@radix-ui/react-context';
+import * as React from 'react';
+import { Primitive } from '@radix-ui/react-primitive';
+import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
+
+type Direction = 'ltr' | 'rtl';
+declare const createAccordionScope: _radix_ui_react_context.CreateScope;
+interface AccordionSingleProps extends AccordionImplSingleProps {
+ type: 'single';
+}
+interface AccordionMultipleProps extends AccordionImplMultipleProps {
+ type: 'multiple';
+}
+declare const Accordion: React.ForwardRefExoticComponent<(AccordionSingleProps | AccordionMultipleProps) & React.RefAttributes>;
+interface AccordionImplSingleProps extends AccordionImplProps {
+ /**
+ * The controlled stateful value of the accordion item whose content is expanded.
+ */
+ value?: string;
+ /**
+ * The value of the item whose content is expanded when the accordion is initially rendered. Use
+ * `defaultValue` if you do not need to control the state of an accordion.
+ */
+ defaultValue?: string;
+ /**
+ * The callback that fires when the state of the accordion changes.
+ */
+ onValueChange?(value: string): void;
+ /**
+ * Whether an accordion item can be collapsed after it has been opened.
+ * @default false
+ */
+ collapsible?: boolean;
+}
+interface AccordionImplMultipleProps extends AccordionImplProps {
+ /**
+ * The controlled stateful value of the accordion items whose contents are expanded.
+ */
+ value?: string[];
+ /**
+ * The value of the items whose contents are expanded when the accordion is initially rendered. Use
+ * `defaultValue` if you do not need to control the state of an accordion.
+ */
+ defaultValue?: string[];
+ /**
+ * The callback that fires when the state of the accordion changes.
+ */
+ onValueChange?(value: string[]): void;
+}
+type PrimitiveDivProps = React.ComponentPropsWithoutRef;
+interface AccordionImplProps extends PrimitiveDivProps {
+ /**
+ * Whether or not an accordion is disabled from user interaction.
+ *
+ * @defaultValue false
+ */
+ disabled?: boolean;
+ /**
+ * The layout in which the Accordion operates.
+ * @default vertical
+ */
+ orientation?: React.AriaAttributes['aria-orientation'];
+ /**
+ * The language read direction.
+ */
+ dir?: Direction;
+}
+type CollapsibleProps = React.ComponentPropsWithoutRef;
+interface AccordionItemProps extends Omit {
+ /**
+ * Whether or not an accordion item is disabled from user interaction.
+ *
+ * @defaultValue false
+ */
+ disabled?: boolean;
+ /**
+ * A string value for the accordion item. All items within an accordion should use a unique value.
+ */
+ value: string;
+}
+/**
+ * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.
+ */
+declare const AccordionItem: React.ForwardRefExoticComponent>;
+type PrimitiveHeading3Props = React.ComponentPropsWithoutRef;
+interface AccordionHeaderProps extends PrimitiveHeading3Props {
+}
+/**
+ * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible
+ * whether or not its content is collapsed.
+ */
+declare const AccordionHeader: React.ForwardRefExoticComponent>;
+type CollapsibleTriggerProps = React.ComponentPropsWithoutRef;
+interface AccordionTriggerProps extends CollapsibleTriggerProps {
+}
+/**
+ * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It
+ * should always be nested inside of an `AccordionHeader`.
+ */
+declare const AccordionTrigger: React.ForwardRefExoticComponent>;
+type CollapsibleContentProps = React.ComponentPropsWithoutRef;
+interface AccordionContentProps extends CollapsibleContentProps {
+}
+/**
+ * `AccordionContent` contains the collapsible content for an `AccordionItem`.
+ */
+declare const AccordionContent: React.ForwardRefExoticComponent>;
+declare const Root: React.ForwardRefExoticComponent<(AccordionSingleProps | AccordionMultipleProps) & React.RefAttributes>;
+declare const Item: React.ForwardRefExoticComponent>;
+declare const Header: React.ForwardRefExoticComponent>;
+declare const Trigger: React.ForwardRefExoticComponent>;
+declare const Content: React.ForwardRefExoticComponent>;
+
+export { Accordion, AccordionContent, type AccordionContentProps, AccordionHeader, type AccordionHeaderProps, AccordionItem, type AccordionItemProps, type AccordionMultipleProps, type AccordionSingleProps, AccordionTrigger, type AccordionTriggerProps, Content, Header, Item, Root, Trigger, createAccordionScope };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.ts b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..76cbbc45958717c9ec72e9bf416e31fe05226d74
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.d.ts
@@ -0,0 +1,114 @@
+import * as _radix_ui_react_context from '@radix-ui/react-context';
+import * as React from 'react';
+import { Primitive } from '@radix-ui/react-primitive';
+import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
+
+type Direction = 'ltr' | 'rtl';
+declare const createAccordionScope: _radix_ui_react_context.CreateScope;
+interface AccordionSingleProps extends AccordionImplSingleProps {
+ type: 'single';
+}
+interface AccordionMultipleProps extends AccordionImplMultipleProps {
+ type: 'multiple';
+}
+declare const Accordion: React.ForwardRefExoticComponent<(AccordionSingleProps | AccordionMultipleProps) & React.RefAttributes>;
+interface AccordionImplSingleProps extends AccordionImplProps {
+ /**
+ * The controlled stateful value of the accordion item whose content is expanded.
+ */
+ value?: string;
+ /**
+ * The value of the item whose content is expanded when the accordion is initially rendered. Use
+ * `defaultValue` if you do not need to control the state of an accordion.
+ */
+ defaultValue?: string;
+ /**
+ * The callback that fires when the state of the accordion changes.
+ */
+ onValueChange?(value: string): void;
+ /**
+ * Whether an accordion item can be collapsed after it has been opened.
+ * @default false
+ */
+ collapsible?: boolean;
+}
+interface AccordionImplMultipleProps extends AccordionImplProps {
+ /**
+ * The controlled stateful value of the accordion items whose contents are expanded.
+ */
+ value?: string[];
+ /**
+ * The value of the items whose contents are expanded when the accordion is initially rendered. Use
+ * `defaultValue` if you do not need to control the state of an accordion.
+ */
+ defaultValue?: string[];
+ /**
+ * The callback that fires when the state of the accordion changes.
+ */
+ onValueChange?(value: string[]): void;
+}
+type PrimitiveDivProps = React.ComponentPropsWithoutRef;
+interface AccordionImplProps extends PrimitiveDivProps {
+ /**
+ * Whether or not an accordion is disabled from user interaction.
+ *
+ * @defaultValue false
+ */
+ disabled?: boolean;
+ /**
+ * The layout in which the Accordion operates.
+ * @default vertical
+ */
+ orientation?: React.AriaAttributes['aria-orientation'];
+ /**
+ * The language read direction.
+ */
+ dir?: Direction;
+}
+type CollapsibleProps = React.ComponentPropsWithoutRef;
+interface AccordionItemProps extends Omit {
+ /**
+ * Whether or not an accordion item is disabled from user interaction.
+ *
+ * @defaultValue false
+ */
+ disabled?: boolean;
+ /**
+ * A string value for the accordion item. All items within an accordion should use a unique value.
+ */
+ value: string;
+}
+/**
+ * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.
+ */
+declare const AccordionItem: React.ForwardRefExoticComponent>;
+type PrimitiveHeading3Props = React.ComponentPropsWithoutRef;
+interface AccordionHeaderProps extends PrimitiveHeading3Props {
+}
+/**
+ * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible
+ * whether or not its content is collapsed.
+ */
+declare const AccordionHeader: React.ForwardRefExoticComponent>;
+type CollapsibleTriggerProps = React.ComponentPropsWithoutRef;
+interface AccordionTriggerProps extends CollapsibleTriggerProps {
+}
+/**
+ * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It
+ * should always be nested inside of an `AccordionHeader`.
+ */
+declare const AccordionTrigger: React.ForwardRefExoticComponent>;
+type CollapsibleContentProps = React.ComponentPropsWithoutRef;
+interface AccordionContentProps extends CollapsibleContentProps {
+}
+/**
+ * `AccordionContent` contains the collapsible content for an `AccordionItem`.
+ */
+declare const AccordionContent: React.ForwardRefExoticComponent>;
+declare const Root: React.ForwardRefExoticComponent<(AccordionSingleProps | AccordionMultipleProps) & React.RefAttributes>;
+declare const Item: React.ForwardRefExoticComponent>;
+declare const Header: React.ForwardRefExoticComponent>;
+declare const Trigger: React.ForwardRefExoticComponent>;
+declare const Content: React.ForwardRefExoticComponent>;
+
+export { Accordion, AccordionContent, type AccordionContentProps, AccordionHeader, type AccordionHeaderProps, AccordionItem, type AccordionItemProps, type AccordionMultipleProps, type AccordionSingleProps, AccordionTrigger, type AccordionTriggerProps, Content, Header, Item, Root, Trigger, createAccordionScope };
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ab1a7fd0131fa108983c3085ca48c86a46a5dfe
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js
@@ -0,0 +1,352 @@
+"use strict";
+"use client";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var index_exports = {};
+__export(index_exports, {
+ Accordion: () => Accordion,
+ AccordionContent: () => AccordionContent,
+ AccordionHeader: () => AccordionHeader,
+ AccordionItem: () => AccordionItem,
+ AccordionTrigger: () => AccordionTrigger,
+ Content: () => Content2,
+ Header: () => Header,
+ Item: () => Item,
+ Root: () => Root2,
+ Trigger: () => Trigger2,
+ createAccordionScope: () => createAccordionScope
+});
+module.exports = __toCommonJS(index_exports);
+
+// src/accordion.tsx
+var React = __toESM(require("react"));
+var import_react_context = require("@radix-ui/react-context");
+var import_react_collection = require("@radix-ui/react-collection");
+var import_react_compose_refs = require("@radix-ui/react-compose-refs");
+var import_primitive = require("@radix-ui/primitive");
+var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
+var import_react_primitive = require("@radix-ui/react-primitive");
+var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"));
+var import_react_collapsible = require("@radix-ui/react-collapsible");
+var import_react_id = require("@radix-ui/react-id");
+var import_react_direction = require("@radix-ui/react-direction");
+var import_jsx_runtime = require("react/jsx-runtime");
+var ACCORDION_NAME = "Accordion";
+var ACCORDION_KEYS = ["Home", "End", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight"];
+var [Collection, useCollection, createCollectionScope] = (0, import_react_collection.createCollection)(ACCORDION_NAME);
+var [createAccordionContext, createAccordionScope] = (0, import_react_context.createContextScope)(ACCORDION_NAME, [
+ createCollectionScope,
+ import_react_collapsible.createCollapsibleScope
+]);
+var useCollapsibleScope = (0, import_react_collapsible.createCollapsibleScope)();
+var Accordion = React.forwardRef(
+ (props, forwardedRef) => {
+ const { type, ...accordionProps } = props;
+ const singleProps = accordionProps;
+ const multipleProps = accordionProps;
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.Provider, { scope: props.__scopeAccordion, children: type === "multiple" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });
+ }
+);
+Accordion.displayName = ACCORDION_NAME;
+var [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);
+var [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(
+ ACCORDION_NAME,
+ { collapsible: false }
+);
+var AccordionImplSingle = React.forwardRef(
+ (props, forwardedRef) => {
+ const {
+ value: valueProp,
+ defaultValue,
+ onValueChange = () => {
+ },
+ collapsible = false,
+ ...accordionSingleProps
+ } = props;
+ const [value, setValue] = (0, import_react_use_controllable_state.useControllableState)({
+ prop: valueProp,
+ defaultProp: defaultValue ?? "",
+ onChange: onValueChange,
+ caller: ACCORDION_NAME
+ });
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ AccordionValueProvider,
+ {
+ scope: props.__scopeAccordion,
+ value: React.useMemo(() => value ? [value] : [], [value]),
+ onItemOpen: setValue,
+ onItemClose: React.useCallback(() => collapsible && setValue(""), [collapsible, setValue]),
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })
+ }
+ );
+ }
+);
+var AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {
+ const {
+ value: valueProp,
+ defaultValue,
+ onValueChange = () => {
+ },
+ ...accordionMultipleProps
+ } = props;
+ const [value, setValue] = (0, import_react_use_controllable_state.useControllableState)({
+ prop: valueProp,
+ defaultProp: defaultValue ?? [],
+ onChange: onValueChange,
+ caller: ACCORDION_NAME
+ });
+ const handleItemOpen = React.useCallback(
+ (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),
+ [setValue]
+ );
+ const handleItemClose = React.useCallback(
+ (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),
+ [setValue]
+ );
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ AccordionValueProvider,
+ {
+ scope: props.__scopeAccordion,
+ value,
+ onItemOpen: handleItemOpen,
+ onItemClose: handleItemClose,
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })
+ }
+ );
+});
+var [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);
+var AccordionImpl = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, disabled, dir, orientation = "vertical", ...accordionProps } = props;
+ const accordionRef = React.useRef(null);
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(accordionRef, forwardedRef);
+ const getItems = useCollection(__scopeAccordion);
+ const direction = (0, import_react_direction.useDirection)(dir);
+ const isDirectionLTR = direction === "ltr";
+ const handleKeyDown = (0, import_primitive.composeEventHandlers)(props.onKeyDown, (event) => {
+ if (!ACCORDION_KEYS.includes(event.key)) return;
+ const target = event.target;
+ const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);
+ const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);
+ const triggerCount = triggerCollection.length;
+ if (triggerIndex === -1) return;
+ event.preventDefault();
+ let nextIndex = triggerIndex;
+ const homeIndex = 0;
+ const endIndex = triggerCount - 1;
+ const moveNext = () => {
+ nextIndex = triggerIndex + 1;
+ if (nextIndex > endIndex) {
+ nextIndex = homeIndex;
+ }
+ };
+ const movePrev = () => {
+ nextIndex = triggerIndex - 1;
+ if (nextIndex < homeIndex) {
+ nextIndex = endIndex;
+ }
+ };
+ switch (event.key) {
+ case "Home":
+ nextIndex = homeIndex;
+ break;
+ case "End":
+ nextIndex = endIndex;
+ break;
+ case "ArrowRight":
+ if (orientation === "horizontal") {
+ if (isDirectionLTR) {
+ moveNext();
+ } else {
+ movePrev();
+ }
+ }
+ break;
+ case "ArrowDown":
+ if (orientation === "vertical") {
+ moveNext();
+ }
+ break;
+ case "ArrowLeft":
+ if (orientation === "horizontal") {
+ if (isDirectionLTR) {
+ movePrev();
+ } else {
+ moveNext();
+ }
+ }
+ break;
+ case "ArrowUp":
+ if (orientation === "vertical") {
+ movePrev();
+ }
+ break;
+ }
+ const clampedIndex = nextIndex % triggerCount;
+ triggerCollection[clampedIndex].ref.current?.focus();
+ });
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ AccordionImplProvider,
+ {
+ scope: __scopeAccordion,
+ disabled,
+ direction: dir,
+ orientation,
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ import_react_primitive.Primitive.div,
+ {
+ ...accordionProps,
+ "data-orientation": orientation,
+ ref: composedRefs,
+ onKeyDown: disabled ? void 0 : handleKeyDown
+ }
+ ) })
+ }
+ );
+ }
+);
+var ITEM_NAME = "AccordionItem";
+var [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);
+var AccordionItem = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, value, ...accordionItemProps } = props;
+ const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);
+ const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ const triggerId = (0, import_react_id.useId)();
+ const open = value && valueContext.value.includes(value) || false;
+ const disabled = accordionContext.disabled || props.disabled;
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ AccordionItemProvider,
+ {
+ scope: __scopeAccordion,
+ open,
+ disabled,
+ triggerId,
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ CollapsiblePrimitive.Root,
+ {
+ "data-orientation": accordionContext.orientation,
+ "data-state": getState(open),
+ ...collapsibleScope,
+ ...accordionItemProps,
+ ref: forwardedRef,
+ disabled,
+ open,
+ onOpenChange: (open2) => {
+ if (open2) {
+ valueContext.onItemOpen(value);
+ } else {
+ valueContext.onItemClose(value);
+ }
+ }
+ }
+ )
+ }
+ );
+ }
+);
+AccordionItem.displayName = ITEM_NAME;
+var HEADER_NAME = "AccordionHeader";
+var AccordionHeader = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...headerProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ import_react_primitive.Primitive.h3,
+ {
+ "data-orientation": accordionContext.orientation,
+ "data-state": getState(itemContext.open),
+ "data-disabled": itemContext.disabled ? "" : void 0,
+ ...headerProps,
+ ref: forwardedRef
+ }
+ );
+ }
+);
+AccordionHeader.displayName = HEADER_NAME;
+var TRIGGER_NAME = "AccordionTrigger";
+var AccordionTrigger = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...triggerProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);
+ const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ CollapsiblePrimitive.Trigger,
+ {
+ "aria-disabled": itemContext.open && !collapsibleContext.collapsible || void 0,
+ "data-orientation": accordionContext.orientation,
+ id: itemContext.triggerId,
+ ...collapsibleScope,
+ ...triggerProps,
+ ref: forwardedRef
+ }
+ ) });
+ }
+);
+AccordionTrigger.displayName = TRIGGER_NAME;
+var CONTENT_NAME = "AccordionContent";
+var AccordionContent = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...contentProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
+ CollapsiblePrimitive.Content,
+ {
+ role: "region",
+ "aria-labelledby": itemContext.triggerId,
+ "data-orientation": accordionContext.orientation,
+ ...collapsibleScope,
+ ...contentProps,
+ ref: forwardedRef,
+ style: {
+ "--radix-accordion-content-height": "var(--radix-collapsible-content-height)",
+ "--radix-accordion-content-width": "var(--radix-collapsible-content-width)",
+ ...props.style
+ }
+ }
+ );
+ }
+);
+AccordionContent.displayName = CONTENT_NAME;
+function getState(open) {
+ return open ? "open" : "closed";
+}
+var Root2 = Accordion;
+var Item = AccordionItem;
+var Header = AccordionHeader;
+var Trigger2 = AccordionTrigger;
+var Content2 = AccordionContent;
+//# sourceMappingURL=index.js.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e019861b526055a649378ec8fcddacf62a389cf2
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/index.ts", "../src/accordion.tsx"],
+ "sourcesContent": ["'use client';\nexport {\n createAccordionScope,\n //\n Accordion,\n AccordionItem,\n AccordionHeader,\n AccordionTrigger,\n AccordionContent,\n //\n Root,\n Item,\n Header,\n Trigger,\n Content,\n} from './accordion';\nexport type {\n AccordionSingleProps,\n AccordionMultipleProps,\n AccordionItemProps,\n AccordionHeaderProps,\n AccordionTriggerProps,\n AccordionContentProps,\n} from './accordion';\n", "import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { createCollapsibleScope } from '@radix-ui/react-collapsible';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACCORDION_NAME = 'Accordion';\nconst ACCORDION_KEYS = ['Home', 'End', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection(ACCORDION_NAME);\n\ntype ScopedProps = P & { __scopeAccordion?: Scope };\nconst [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope,\n]);\nconst useCollapsibleScope = createCollapsibleScope();\n\ntype AccordionElement = AccordionImplMultipleElement | AccordionImplSingleElement;\ninterface AccordionSingleProps extends AccordionImplSingleProps {\n type: 'single';\n}\ninterface AccordionMultipleProps extends AccordionImplMultipleProps {\n type: 'multiple';\n}\n\nconst Accordion = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps as AccordionImplSingleProps;\n const multipleProps = accordionProps as AccordionImplMultipleProps;\n return (\n \n {type === 'multiple' ? (\n \n ) : (\n \n )}\n \n );\n },\n);\n\nAccordion.displayName = ACCORDION_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionValueContextValue = {\n value: string[];\n onItemOpen(value: string): void;\n onItemClose(value: string): void;\n};\n\nconst [AccordionValueProvider, useAccordionValueContext] =\n createAccordionContext(ACCORDION_NAME);\n\nconst [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false },\n);\n\ntype AccordionImplSingleElement = AccordionImplElement;\ninterface AccordionImplSingleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion item whose content is expanded.\n */\n value?: string;\n /**\n * The value of the item whose content is expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string;\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string): void;\n /**\n * Whether an accordion item can be collapsed after it has been opened.\n * @default false\n */\n collapsible?: boolean;\n}\n\nconst AccordionImplSingle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n collapsible = false,\n ...accordionSingleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? '',\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n return (\n (value ? [value] : []), [value])}\n onItemOpen={setValue}\n onItemClose={React.useCallback(() => collapsible && setValue(''), [collapsible, setValue])}\n >\n \n \n \n \n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplMultipleElement = AccordionImplElement;\ninterface AccordionImplMultipleProps extends AccordionImplProps {\n /**\n * The controlled stateful value of the accordion items whose contents are expanded.\n */\n value?: string[];\n /**\n * The value of the items whose contents are expanded when the accordion is initially rendered. Use\n * `defaultValue` if you do not need to control the state of an accordion.\n */\n defaultValue?: string[];\n /**\n * The callback that fires when the state of the accordion changes.\n */\n onValueChange?(value: string[]): void;\n}\n\nconst AccordionImplMultiple = React.forwardRef<\n AccordionImplMultipleElement,\n AccordionImplMultipleProps\n>((props: ScopedProps, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {},\n ...accordionMultipleProps\n } = props;\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME,\n });\n\n const handleItemOpen = React.useCallback(\n (itemValue: string) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue],\n );\n\n const handleItemClose = React.useCallback(\n (itemValue: string) =>\n setValue((prevValue = []) => prevValue.filter((value) => value !== itemValue)),\n [setValue],\n );\n\n return (\n \n \n \n \n \n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplContextValue = {\n disabled?: boolean;\n direction: AccordionImplProps['dir'];\n orientation: AccordionImplProps['orientation'];\n};\n\nconst [AccordionImplProvider, useAccordionContext] =\n createAccordionContext(ACCORDION_NAME);\n\ntype AccordionImplElement = React.ComponentRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface AccordionImplProps extends PrimitiveDivProps {\n /**\n * Whether or not an accordion is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * The layout in which the Accordion operates.\n * @default vertical\n */\n orientation?: React.AriaAttributes['aria-orientation'];\n /**\n * The language read direction.\n */\n dir?: Direction;\n}\n\nconst AccordionImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = 'vertical', ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === 'ltr';\n\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target as HTMLElement;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n\n if (triggerIndex === -1) return;\n\n // Prevents page scroll while user is navigating\n event.preventDefault();\n\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n\n switch (event.key) {\n case 'Home':\n nextIndex = homeIndex;\n break;\n case 'End':\n nextIndex = endIndex;\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n moveNext();\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n movePrev();\n }\n break;\n }\n\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex]!.ref.current?.focus();\n });\n\n return (\n \n \n \n \n \n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContextValue = { open?: boolean; disabled?: boolean; triggerId: string };\nconst [AccordionItemProvider, useAccordionItemContext] =\n createAccordionContext(ITEM_NAME);\n\ntype AccordionItemElement = React.ComponentRef;\ntype CollapsibleProps = React.ComponentPropsWithoutRef;\ninterface AccordionItemProps extends Omit<\n CollapsibleProps,\n 'open' | 'defaultOpen' | 'onOpenChange'\n> {\n /**\n * Whether or not an accordion item is disabled from user interaction.\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * A string value for the accordion item. All items within an accordion should use a unique value.\n */\n value: string;\n}\n\n/**\n * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.\n */\nconst AccordionItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = (value && valueContext.value.includes(value)) || false;\n const disabled = accordionContext.disabled || props.disabled;\n\n return (\n \n {\n if (open) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }}\n />\n \n );\n },\n);\n\nAccordionItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst HEADER_NAME = 'AccordionHeader';\n\ntype AccordionHeaderElement = React.ComponentRef;\ntype PrimitiveHeading3Props = React.ComponentPropsWithoutRef;\ninterface AccordionHeaderProps extends PrimitiveHeading3Props {}\n\n/**\n * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible\n * whether or not its content is collapsed.\n */\nconst AccordionHeader = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return (\n \n );\n },\n);\n\nAccordionHeader.displayName = HEADER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'AccordionTrigger';\n\ntype AccordionTriggerElement = React.ComponentRef;\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef;\ninterface AccordionTriggerProps extends CollapsibleTriggerProps {}\n\n/**\n * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It\n * should always be nested inside of an `AccordionHeader`.\n */\nconst AccordionTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n \n \n \n );\n },\n);\n\nAccordionTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AccordionContent';\n\ntype AccordionContentElement = React.ComponentRef;\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef;\ninterface AccordionContentProps extends CollapsibleContentProps {}\n\n/**\n * `AccordionContent` contains the collapsible content for an `AccordionItem`.\n */\nconst AccordionContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return (\n \n );\n },\n);\n\nAccordionContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst Root = Accordion;\nconst Item = AccordionItem;\nconst Header = AccordionHeader;\nconst Trigger = AccordionTrigger;\nconst Content = AccordionContent;\n\nexport {\n createAccordionScope,\n //\n Accordion,\n AccordionItem,\n AccordionHeader,\n AccordionTrigger,\n AccordionContent,\n //\n Root,\n Item,\n Header,\n Trigger,\n Content,\n};\nexport type {\n AccordionSingleProps,\n AccordionMultipleProps,\n AccordionItemProps,\n AccordionHeaderProps,\n AccordionTriggerProps,\n AccordionContentProps,\n};\n"],
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAAA;AAAA,EAAA;AAAA;AAAA,cAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;;;ACAA,YAAuB;AACvB,2BAAmC;AACnC,8BAAiC;AACjC,gCAAgC;AAChC,uBAAqC;AACrC,0CAAqC;AACrC,6BAA0B;AAC1B,2BAAsC;AACtC,+BAAuC;AACvC,sBAAsB;AAGtB,6BAA6B;AAqCnB;AA7BV,IAAM,iBAAiB;AACvB,IAAM,iBAAiB,CAAC,QAAQ,OAAO,aAAa,WAAW,aAAa,YAAY;AAExF,IAAM,CAAC,YAAY,eAAe,qBAAqB,QACrD,0CAA0C,cAAc;AAG1D,IAAM,CAAC,wBAAwB,oBAAoB,QAAI,yCAAmB,gBAAgB;AAAA,EACxF;AAAA,EACA;AACF,CAAC;AACD,IAAM,0BAAsB,iDAAuB;AAUnD,IAAM,YAAkB;AAAA,EACtB,CAAC,OAAmE,iBAAiB;AACnF,UAAM,EAAE,MAAM,GAAG,eAAe,IAAI;AACpC,UAAM,cAAc;AACpB,UAAM,gBAAgB;AACtB,WACE,4CAAC,WAAW,UAAX,EAAoB,OAAO,MAAM,kBAC/B,mBAAS,aACR,4CAAC,yBAAuB,GAAG,eAAe,KAAK,cAAc,IAE7D,4CAAC,uBAAqB,GAAG,aAAa,KAAK,cAAc,GAE7D;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;AAUxB,IAAM,CAAC,wBAAwB,wBAAwB,IACrD,uBAAmD,cAAc;AAEnE,IAAM,CAAC,8BAA8B,8BAA8B,IAAI;AAAA,EACrE;AAAA,EACA,EAAE,aAAa,MAAM;AACvB;AAwBA,IAAM,sBAA4B;AAAA,EAChC,CAAC,OAA8C,iBAAiB;AAC9D,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,gBAAgB,MAAM;AAAA,MAAC;AAAA,MACvB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,CAAC,OAAO,QAAQ,QAAI,0DAAqB;AAAA,MAC7C,MAAM;AAAA,MACN,aAAa,gBAAgB;AAAA,MAC7B,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,CAAC;AAED,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,MAAM;AAAA,QACb,OAAa,cAAQ,MAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAI,CAAC,KAAK,CAAC;AAAA,QAC1D,YAAY;AAAA,QACZ,aAAmB,kBAAY,MAAM,eAAe,SAAS,EAAE,GAAG,CAAC,aAAa,QAAQ,CAAC;AAAA,QAEzF,sDAAC,gCAA6B,OAAO,MAAM,kBAAkB,aAC3D,sDAAC,iBAAe,GAAG,sBAAsB,KAAK,cAAc,GAC9D;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAqBA,IAAM,wBAA8B,iBAGlC,CAAC,OAAgD,iBAAiB;AAClE,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA,gBAAgB,MAAM;AAAA,IAAC;AAAA,IACvB,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,CAAC,OAAO,QAAQ,QAAI,0DAAqB;AAAA,IAC7C,MAAM;AAAA,IACN,aAAa,gBAAgB,CAAC;AAAA,IAC9B,UAAU;AAAA,IACV,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,iBAAuB;AAAA,IAC3B,CAAC,cAAsB,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,WAAW,SAAS,CAAC;AAAA,IAC7E,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,kBAAwB;AAAA,IAC5B,CAAC,cACC,SAAS,CAAC,YAAY,CAAC,MAAM,UAAU,OAAO,CAACC,WAAUA,WAAU,SAAS,CAAC;AAAA,IAC/E,CAAC,QAAQ;AAAA,EACX;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,MAAM;AAAA,MACb;AAAA,MACA,YAAY;AAAA,MACZ,aAAa;AAAA,MAEb,sDAAC,gCAA6B,OAAO,MAAM,kBAAkB,aAAa,MACxE,sDAAC,iBAAe,GAAG,wBAAwB,KAAK,cAAc,GAChE;AAAA;AAAA,EACF;AAEJ,CAAC;AAUD,IAAM,CAAC,uBAAuB,mBAAmB,IAC/C,uBAAkD,cAAc;AAsBlE,IAAM,gBAAsB;AAAA,EAC1B,CAAC,OAAwC,iBAAiB;AACxD,UAAM,EAAE,kBAAkB,UAAU,KAAK,cAAc,YAAY,GAAG,eAAe,IAAI;AACzF,UAAM,eAAqB,aAA6B,IAAI;AAC5D,UAAM,mBAAe,2CAAgB,cAAc,YAAY;AAC/D,UAAM,WAAW,cAAc,gBAAgB;AAC/C,UAAM,gBAAY,qCAAa,GAAG;AAClC,UAAM,iBAAiB,cAAc;AAErC,UAAM,oBAAgB,uCAAqB,MAAM,WAAW,CAAC,UAAU;AACrE,UAAI,CAAC,eAAe,SAAS,MAAM,GAAG,EAAG;AACzC,YAAM,SAAS,MAAM;AACrB,YAAM,oBAAoB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,QAAQ;AACjF,YAAM,eAAe,kBAAkB,UAAU,CAAC,SAAS,KAAK,IAAI,YAAY,MAAM;AACtF,YAAM,eAAe,kBAAkB;AAEvC,UAAI,iBAAiB,GAAI;AAGzB,YAAM,eAAe;AAErB,UAAI,YAAY;AAChB,YAAM,YAAY;AAClB,YAAM,WAAW,eAAe;AAEhC,YAAM,WAAW,MAAM;AACrB,oBAAY,eAAe;AAC3B,YAAI,YAAY,UAAU;AACxB,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,WAAW,MAAM;AACrB,oBAAY,eAAe;AAC3B,YAAI,YAAY,WAAW;AACzB,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,cAAQ,MAAM,KAAK;AAAA,QACjB,KAAK;AACH,sBAAY;AACZ;AAAA,QACF,KAAK;AACH,sBAAY;AACZ;AAAA,QACF,KAAK;AACH,cAAI,gBAAgB,cAAc;AAChC,gBAAI,gBAAgB;AAClB,uBAAS;AAAA,YACX,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,cAAI,gBAAgB,YAAY;AAC9B,qBAAS;AAAA,UACX;AACA;AAAA,QACF,KAAK;AACH,cAAI,gBAAgB,cAAc;AAChC,gBAAI,gBAAgB;AAClB,uBAAS;AAAA,YACX,OAAO;AACL,uBAAS;AAAA,YACX;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,cAAI,gBAAgB,YAAY;AAC9B,qBAAS;AAAA,UACX;AACA;AAAA,MACJ;AAEA,YAAM,eAAe,YAAY;AACjC,wBAAkB,YAAY,EAAG,IAAI,SAAS,MAAM;AAAA,IACtD,CAAC;AAED,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QAEA,sDAAC,WAAW,MAAX,EAAgB,OAAO,kBACtB;AAAA,UAAC,iCAAU;AAAA,UAAV;AAAA,YACE,GAAG;AAAA,YACJ,oBAAkB;AAAA,YAClB,KAAK;AAAA,YACL,WAAW,WAAW,SAAY;AAAA;AAAA,QACpC,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAMA,IAAM,YAAY;AAGlB,IAAM,CAAC,uBAAuB,uBAAuB,IACnD,uBAAkD,SAAS;AAuB7D,IAAM,gBAAsB;AAAA,EAC1B,CAAC,OAAwC,iBAAiB;AACxD,UAAM,EAAE,kBAAkB,OAAO,GAAG,mBAAmB,IAAI;AAC3D,UAAM,mBAAmB,oBAAoB,WAAW,gBAAgB;AACxE,UAAM,eAAe,yBAAyB,WAAW,gBAAgB;AACzE,UAAM,mBAAmB,oBAAoB,gBAAgB;AAC7D,UAAM,gBAAY,uBAAM;AACxB,UAAM,OAAQ,SAAS,aAAa,MAAM,SAAS,KAAK,KAAM;AAC9D,UAAM,WAAW,iBAAiB,YAAY,MAAM;AAEpD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,UAAsB;AAAA,UAArB;AAAA,YACC,oBAAkB,iBAAiB;AAAA,YACnC,cAAY,SAAS,IAAI;AAAA,YACxB,GAAG;AAAA,YACH,GAAG;AAAA,YACJ,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,cAAc,CAACC,UAAS;AACtB,kBAAIA,OAAM;AACR,6BAAa,WAAW,KAAK;AAAA,cAC/B,OAAO;AACL,6BAAa,YAAY,KAAK;AAAA,cAChC;AAAA,YACF;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,cAAc,cAAc;AAM5B,IAAM,cAAc;AAUpB,IAAM,kBAAwB;AAAA,EAC5B,CAAC,OAA0C,iBAAiB;AAC1D,UAAM,EAAE,kBAAkB,GAAG,YAAY,IAAI;AAC7C,UAAM,mBAAmB,oBAAoB,gBAAgB,gBAAgB;AAC7E,UAAM,cAAc,wBAAwB,aAAa,gBAAgB;AACzE,WACE;AAAA,MAAC,iCAAU;AAAA,MAAV;AAAA,QACC,oBAAkB,iBAAiB;AAAA,QACnC,cAAY,SAAS,YAAY,IAAI;AAAA,QACrC,iBAAe,YAAY,WAAW,KAAK;AAAA,QAC1C,GAAG;AAAA,QACJ,KAAK;AAAA;AAAA,IACP;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;AAM9B,IAAM,eAAe;AAUrB,IAAM,mBAAyB;AAAA,EAC7B,CAAC,OAA2C,iBAAiB;AAC3D,UAAM,EAAE,kBAAkB,GAAG,aAAa,IAAI;AAC9C,UAAM,mBAAmB,oBAAoB,gBAAgB,gBAAgB;AAC7E,UAAM,cAAc,wBAAwB,cAAc,gBAAgB;AAC1E,UAAM,qBAAqB,+BAA+B,cAAc,gBAAgB;AACxF,UAAM,mBAAmB,oBAAoB,gBAAgB;AAC7D,WACE,4CAAC,WAAW,UAAX,EAAoB,OAAO,kBAC1B;AAAA,MAAsB;AAAA,MAArB;AAAA,QACC,iBAAgB,YAAY,QAAQ,CAAC,mBAAmB,eAAgB;AAAA,QACxE,oBAAkB,iBAAiB;AAAA,QACnC,IAAI,YAAY;AAAA,QACf,GAAG;AAAA,QACH,GAAG;AAAA,QACJ,KAAK;AAAA;AAAA,IACP,GACF;AAAA,EAEJ;AACF;AAEA,iBAAiB,cAAc;AAM/B,IAAM,eAAe;AASrB,IAAM,mBAAyB;AAAA,EAC7B,CAAC,OAA2C,iBAAiB;AAC3D,UAAM,EAAE,kBAAkB,GAAG,aAAa,IAAI;AAC9C,UAAM,mBAAmB,oBAAoB,gBAAgB,gBAAgB;AAC7E,UAAM,cAAc,wBAAwB,cAAc,gBAAgB;AAC1E,UAAM,mBAAmB,oBAAoB,gBAAgB;AAC7D,WACE;AAAA,MAAsB;AAAA,MAArB;AAAA,QACC,MAAK;AAAA,QACL,mBAAiB,YAAY;AAAA,QAC7B,oBAAkB,iBAAiB;AAAA,QAClC,GAAG;AAAA,QACH,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,OAAO;AAAA,UACL,oCAAoC;AAAA,UACpC,mCAAmC;AAAA,UACnC,GAAG,MAAM;AAAA,QACX;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,iBAAiB,cAAc;AAI/B,SAAS,SAAS,MAAgB;AAChC,SAAO,OAAO,SAAS;AACzB;AAEA,IAAMC,QAAO;AACb,IAAM,OAAO;AACb,IAAM,SAAS;AACf,IAAMC,WAAU;AAChB,IAAMC,WAAU;",
+ "names": ["Content", "Root", "Trigger", "value", "open", "Root", "Trigger", "Content"]
+}
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..06e730e399bdc5800ffd0cffd6bdd1fc3e6cd58b
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs
@@ -0,0 +1,320 @@
+"use client";
+
+// src/accordion.tsx
+import * as React from "react";
+import { createContextScope } from "@radix-ui/react-context";
+import { createCollection } from "@radix-ui/react-collection";
+import { useComposedRefs } from "@radix-ui/react-compose-refs";
+import { composeEventHandlers } from "@radix-ui/primitive";
+import { useControllableState } from "@radix-ui/react-use-controllable-state";
+import { Primitive } from "@radix-ui/react-primitive";
+import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
+import { createCollapsibleScope } from "@radix-ui/react-collapsible";
+import { useId } from "@radix-ui/react-id";
+import { useDirection } from "@radix-ui/react-direction";
+import { jsx } from "react/jsx-runtime";
+var ACCORDION_NAME = "Accordion";
+var ACCORDION_KEYS = ["Home", "End", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight"];
+var [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);
+var [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [
+ createCollectionScope,
+ createCollapsibleScope
+]);
+var useCollapsibleScope = createCollapsibleScope();
+var Accordion = React.forwardRef(
+ (props, forwardedRef) => {
+ const { type, ...accordionProps } = props;
+ const singleProps = accordionProps;
+ const multipleProps = accordionProps;
+ return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === "multiple" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });
+ }
+);
+Accordion.displayName = ACCORDION_NAME;
+var [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);
+var [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(
+ ACCORDION_NAME,
+ { collapsible: false }
+);
+var AccordionImplSingle = React.forwardRef(
+ (props, forwardedRef) => {
+ const {
+ value: valueProp,
+ defaultValue,
+ onValueChange = () => {
+ },
+ collapsible = false,
+ ...accordionSingleProps
+ } = props;
+ const [value, setValue] = useControllableState({
+ prop: valueProp,
+ defaultProp: defaultValue ?? "",
+ onChange: onValueChange,
+ caller: ACCORDION_NAME
+ });
+ return /* @__PURE__ */ jsx(
+ AccordionValueProvider,
+ {
+ scope: props.__scopeAccordion,
+ value: React.useMemo(() => value ? [value] : [], [value]),
+ onItemOpen: setValue,
+ onItemClose: React.useCallback(() => collapsible && setValue(""), [collapsible, setValue]),
+ children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })
+ }
+ );
+ }
+);
+var AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {
+ const {
+ value: valueProp,
+ defaultValue,
+ onValueChange = () => {
+ },
+ ...accordionMultipleProps
+ } = props;
+ const [value, setValue] = useControllableState({
+ prop: valueProp,
+ defaultProp: defaultValue ?? [],
+ onChange: onValueChange,
+ caller: ACCORDION_NAME
+ });
+ const handleItemOpen = React.useCallback(
+ (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),
+ [setValue]
+ );
+ const handleItemClose = React.useCallback(
+ (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),
+ [setValue]
+ );
+ return /* @__PURE__ */ jsx(
+ AccordionValueProvider,
+ {
+ scope: props.__scopeAccordion,
+ value,
+ onItemOpen: handleItemOpen,
+ onItemClose: handleItemClose,
+ children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })
+ }
+ );
+});
+var [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);
+var AccordionImpl = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, disabled, dir, orientation = "vertical", ...accordionProps } = props;
+ const accordionRef = React.useRef(null);
+ const composedRefs = useComposedRefs(accordionRef, forwardedRef);
+ const getItems = useCollection(__scopeAccordion);
+ const direction = useDirection(dir);
+ const isDirectionLTR = direction === "ltr";
+ const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {
+ if (!ACCORDION_KEYS.includes(event.key)) return;
+ const target = event.target;
+ const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);
+ const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);
+ const triggerCount = triggerCollection.length;
+ if (triggerIndex === -1) return;
+ event.preventDefault();
+ let nextIndex = triggerIndex;
+ const homeIndex = 0;
+ const endIndex = triggerCount - 1;
+ const moveNext = () => {
+ nextIndex = triggerIndex + 1;
+ if (nextIndex > endIndex) {
+ nextIndex = homeIndex;
+ }
+ };
+ const movePrev = () => {
+ nextIndex = triggerIndex - 1;
+ if (nextIndex < homeIndex) {
+ nextIndex = endIndex;
+ }
+ };
+ switch (event.key) {
+ case "Home":
+ nextIndex = homeIndex;
+ break;
+ case "End":
+ nextIndex = endIndex;
+ break;
+ case "ArrowRight":
+ if (orientation === "horizontal") {
+ if (isDirectionLTR) {
+ moveNext();
+ } else {
+ movePrev();
+ }
+ }
+ break;
+ case "ArrowDown":
+ if (orientation === "vertical") {
+ moveNext();
+ }
+ break;
+ case "ArrowLeft":
+ if (orientation === "horizontal") {
+ if (isDirectionLTR) {
+ movePrev();
+ } else {
+ moveNext();
+ }
+ }
+ break;
+ case "ArrowUp":
+ if (orientation === "vertical") {
+ movePrev();
+ }
+ break;
+ }
+ const clampedIndex = nextIndex % triggerCount;
+ triggerCollection[clampedIndex].ref.current?.focus();
+ });
+ return /* @__PURE__ */ jsx(
+ AccordionImplProvider,
+ {
+ scope: __scopeAccordion,
+ disabled,
+ direction: dir,
+ orientation,
+ children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(
+ Primitive.div,
+ {
+ ...accordionProps,
+ "data-orientation": orientation,
+ ref: composedRefs,
+ onKeyDown: disabled ? void 0 : handleKeyDown
+ }
+ ) })
+ }
+ );
+ }
+);
+var ITEM_NAME = "AccordionItem";
+var [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);
+var AccordionItem = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, value, ...accordionItemProps } = props;
+ const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);
+ const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ const triggerId = useId();
+ const open = value && valueContext.value.includes(value) || false;
+ const disabled = accordionContext.disabled || props.disabled;
+ return /* @__PURE__ */ jsx(
+ AccordionItemProvider,
+ {
+ scope: __scopeAccordion,
+ open,
+ disabled,
+ triggerId,
+ children: /* @__PURE__ */ jsx(
+ CollapsiblePrimitive.Root,
+ {
+ "data-orientation": accordionContext.orientation,
+ "data-state": getState(open),
+ ...collapsibleScope,
+ ...accordionItemProps,
+ ref: forwardedRef,
+ disabled,
+ open,
+ onOpenChange: (open2) => {
+ if (open2) {
+ valueContext.onItemOpen(value);
+ } else {
+ valueContext.onItemClose(value);
+ }
+ }
+ }
+ )
+ }
+ );
+ }
+);
+AccordionItem.displayName = ITEM_NAME;
+var HEADER_NAME = "AccordionHeader";
+var AccordionHeader = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...headerProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);
+ return /* @__PURE__ */ jsx(
+ Primitive.h3,
+ {
+ "data-orientation": accordionContext.orientation,
+ "data-state": getState(itemContext.open),
+ "data-disabled": itemContext.disabled ? "" : void 0,
+ ...headerProps,
+ ref: forwardedRef
+ }
+ );
+ }
+);
+AccordionHeader.displayName = HEADER_NAME;
+var TRIGGER_NAME = "AccordionTrigger";
+var AccordionTrigger = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...triggerProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);
+ const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(
+ CollapsiblePrimitive.Trigger,
+ {
+ "aria-disabled": itemContext.open && !collapsibleContext.collapsible || void 0,
+ "data-orientation": accordionContext.orientation,
+ id: itemContext.triggerId,
+ ...collapsibleScope,
+ ...triggerProps,
+ ref: forwardedRef
+ }
+ ) });
+ }
+);
+AccordionTrigger.displayName = TRIGGER_NAME;
+var CONTENT_NAME = "AccordionContent";
+var AccordionContent = React.forwardRef(
+ (props, forwardedRef) => {
+ const { __scopeAccordion, ...contentProps } = props;
+ const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);
+ const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);
+ const collapsibleScope = useCollapsibleScope(__scopeAccordion);
+ return /* @__PURE__ */ jsx(
+ CollapsiblePrimitive.Content,
+ {
+ role: "region",
+ "aria-labelledby": itemContext.triggerId,
+ "data-orientation": accordionContext.orientation,
+ ...collapsibleScope,
+ ...contentProps,
+ ref: forwardedRef,
+ style: {
+ "--radix-accordion-content-height": "var(--radix-collapsible-content-height)",
+ "--radix-accordion-content-width": "var(--radix-collapsible-content-width)",
+ ...props.style
+ }
+ }
+ );
+ }
+);
+AccordionContent.displayName = CONTENT_NAME;
+function getState(open) {
+ return open ? "open" : "closed";
+}
+var Root2 = Accordion;
+var Item = AccordionItem;
+var Header = AccordionHeader;
+var Trigger2 = AccordionTrigger;
+var Content2 = AccordionContent;
+export {
+ Accordion,
+ AccordionContent,
+ AccordionHeader,
+ AccordionItem,
+ AccordionTrigger,
+ Content2 as Content,
+ Header,
+ Item,
+ Root2 as Root,
+ Trigger2 as Trigger,
+ createAccordionScope
+};
+//# sourceMappingURL=index.mjs.map
diff --git a/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs.map b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs.map
new file mode 100644
index 0000000000000000000000000000000000000000..8e7f00a04751e49880b190bdd35805bacc56c7c6
--- /dev/null
+++ b/loan-advisor-chatgpt-app/node_modules/@radix-ui/react-accordion/dist/index.mjs.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../src/accordion.tsx"],
+ "sourcesContent": ["import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { createCollapsibleScope } from '@radix-ui/react-collapsible';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACCORDION_NAME = 'Accordion';\nconst ACCORDION_KEYS = ['Home', 'End', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection(ACCORDION_NAME);\n\ntype ScopedProps = P & { __scopeAccordion?: Scope };\nconst [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope,\n]);\nconst useCollapsibleScope = createCollapsibleScope();\n\ntype AccordionElement = AccordionImplMultipleElement | AccordionImplSingleElement;\ninterface AccordionSingleProps extends AccordionImplSingleProps {\n type: 'single';\n}\ninterface AccordionMultipleProps extends AccordionImplMultipleProps {\n type: 'multiple';\n}\n\nconst Accordion = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps as AccordionImplSingleProps;\n const multipleProps = accordionProps as AccordionImplMultipleProps;\n return (\n \n {type === 'multiple' ? (\n