@candidhealth/react-vitals 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/base.css +105 -0
- package/dist/index.css +88 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +1821 -0
- package/dist/index.d.ts +1821 -0
- package/dist/index.js +4476 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4315 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +63 -0
- package/theme.css +456 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../button/Button.tsx","../button/buttonStyles.ts","../button/ButtonGroup.tsx","../callout/Callout.tsx","../icon/Icon.tsx","../checkbox/Checkbox.tsx","../collapsible/Collapsible.tsx","../collapsible-section/CollapsibleSection.tsx","../utils/useToggle.tsx","../utils/create-context-helper.tsx","../copyable/Copyable.tsx","../tooltip/Tooltip.tsx","../utils/useOverflowObserver.tsx","../copyable/use-copyable.ts","../date-picker/DatePickerRange.tsx","../date-picker/DatePickerHeader.tsx","../date-picker/shared.tsx","../date-picker/DatePickerInput.tsx","../types.ts","../date-picker/TimeInput.tsx","../input/InputBox.tsx","../input/inputBoxStyles.ts","../date-picker/DatePickerSingle.tsx","../date-picker/DatePicker.tsx","../divider/Divider.tsx","../error-text/ErrorText.tsx","../form/index.ts","../form/components/ControlledField.tsx","../form/hooks.ts","../form/components/UncontrolledField.tsx","../form/utils.ts","../form/components/form-item/index.tsx","../form/components/form-item/InlineFormItem.tsx","../form/components/form-item/FieldErrorTooltip.tsx","../form/components/form-item/NoneFormItem.tsx","../form/components/form-item/FieldDescription.tsx","../form/components/form-item/FieldErrorMessage.tsx","../overflow-tooltip/OverflowTooltip.tsx","../form/components/form-item/FieldLabelWithTooltip.tsx","../form/components/form-item/FieldLabel.tsx","../form/components/form-item/SideBySideFormItem.tsx","../form/components/form-item/StackedFormItem.tsx","../form/components/FormInput.tsx","../form/components/FormDollarInput.tsx","../utils/useSyncState.ts","../form/components/FormPercentInput.tsx","../form/components/FormCheckbox.tsx","../form/components/ControlledFormItem.tsx","../select/props.ts","../select/selectItem.ts","../select/useAsyncMultiSelect.ts","../select/AsyncMultiSelect.tsx","../dropdown-chevron/DropdownChevron.tsx","../popover/Popover.tsx","../select/SelectListItem.tsx","../select/AsyncSelect.tsx","../select/MultiSelect.tsx","../select/Select.tsx","../select/SelectWtihUnselect.tsx","../form/components/FormSelect.tsx","../form/components/FormMultiSelect.tsx","../form/components/FormTextArea.tsx","../textarea/TextArea.tsx","../form/components/FormSwitch.tsx","../switch/Switch.tsx","../radio-button-group/RadioButtonItem.tsx","../radio-button-group/RadioButtonGroup.tsx","../form/components/FormRadioButtonGroup.tsx","../form/components/FormDatePicker.tsx","../form/components/schemas/currency-schemas.ts","../form/components/schemas/form-schemas.ts","../form/components/schemas/helper-schemas.ts","../form/components/schemas/selected-amount-schema.ts","../form/components/schemas/utils.ts","../drawer/Drawer.tsx","../loaders/Spinner.tsx","../loaders/LoadingState.tsx","../loaders/LoadingBar.tsx","../drawer/drawerState.ts","../drawer/useDrawerResize.ts","../drawer/DrawerHeader.tsx","../text/Text.tsx","../skeleton/Skeleton.tsx","../skeleton/TabsSkeleton/TabsSkeleton.tsx","../skeleton/TableSkeleton/TableSkeleton.tsx","../skeleton/TableSkeleton/TableCheckboxSkeleton.tsx","../empty-state/EmptyState.tsx","../header-tile/HeaderTile.tsx","../label/Label.tsx","../label/labelStyles.ts","../menu/Menu.tsx","../modal/components/ModalActions.tsx","../modal/components/ModalBody.tsx","../modal/components/ModalCloseButton.tsx","../modal/components/ModalContent.tsx","../modal/components/ModalDescription.tsx","../modal/components/ModalErrorCallout.tsx","../modal/components/ModalRoot.tsx","../modal/components/ModalTitle.tsx","../modal/components/ModalCloseX.tsx","../modal/components/ModalTriggerButton.tsx","../modal/Modal.tsx","../modal/FullscreenModalHeader.tsx","../modal/FullscreenModal.tsx","../modal/AlertModal.tsx","../phone-number/PhoneNumber.tsx","../table/Table.tsx","../table/TableBody.tsx","../table/TableRow.tsx","../table/utils.ts","../table/TableHeader.tsx","../table/useTable.ts","../tab-group/TabGroup.tsx","../tabs/Tabs.tsx","../tabs/Trigger.tsx","../tabs/ScrollTabsLayout.tsx","../tabs/ComposableTabs.tsx","../tag/Tag.tsx","../utils/useIsHovered.ts"],"sourcesContent":["import * as React from \"react\";\n// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { ButtonStyleProps, buttonStyles } from \"./buttonStyles\";\n\nexport type ButtonProps = Simplify<ButtonStyleProps & React.ComponentPropsWithoutRef<\"button\">>;\n\nconst ButtonImpl = (\n\t{\n\t\tfullWidth,\n\t\tsize,\n\t\tintent,\n\t\tvariant,\n\t\tdisabled,\n\t\tloading,\n\t\tsoften,\n\t\troundedness,\n\t\tclassName,\n\t\tchildren,\n\t\t...rest\n\t}: ButtonProps,\n\tref: React.ForwardedRef<HTMLButtonElement>,\n) => {\n\treturn (\n\t\t<button\n\t\t\t// these props can be overridden by {...rest}\n\t\t\ttype=\"button\"\n\t\t\tclassName={twMerge(buttonStyles({ fullWidth, size, intent, variant, loading, soften, roundedness }), className)}\n\t\t\t// spread in props that can be used as-is\n\t\t\t{...rest}\n\t\t\t// these props won't be overridden as they come after {...rest}\n\t\t\tref={ref}\n\t\t\tdisabled={disabled || loading}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n};\n\nexport const Button = React.forwardRef(ButtonImpl);\n","import { twJoin } from \"tailwind-merge\";\n\nimport { Intent, Size, Soften, Variant } from \"../variants\";\n\nexport const linkStyles =\n\t\"text-indigo-600 hover:underline active:text-indigo-400 focus:outline-indigo-400 focus:outline-offset-2\";\n\ntype ButtonSize = Extract<Size, \"xs\" | \"sm\" | \"md\" | \"lg\">;\ntype ButtonIntent = Extract<Intent, \"primary\" | \"default\" | \"danger\"> | \"error\";\ntype ButtonRoundedness = \"default\" | \"large\";\n\nexport type ButtonStyleProps = {\n\tfullWidth?: boolean;\n\tsize?: ButtonSize;\n\tintent?: ButtonIntent;\n\tvariant?: Variant | \"link\";\n\tdisabled?: boolean;\n\tloading?: boolean;\n\tsoften?: Soften;\n\troundedness?: ButtonRoundedness;\n};\n\nconst roundedMdStyles: Record<Soften, string> = {\n\tnone: \"\",\n\tright: \"rounded-r-md\",\n\tleft: \"rounded-l-md\",\n\tboth: \"rounded-md\",\n};\nconst roundedLgStyles: Record<Soften, string> = {\n\tnone: \"\",\n\tright: \"rounded-r-lg\",\n\tleft: \"rounded-l-lg\",\n\tboth: \"rounded-lg\",\n};\nconst roundedXlStyles: Record<Soften, string> = {\n\tnone: \"\",\n\tright: \"rounded-r-xl\",\n\tleft: \"rounded-l-xl\",\n\tboth: \"rounded-xl\",\n};\nconst borderRadiusStyles: Record<ButtonRoundedness, Record<ButtonSize, Record<Soften, string>>> = {\n\tdefault: {\n\t\txs: roundedMdStyles,\n\t\tsm: roundedMdStyles,\n\t\tmd: roundedMdStyles,\n\t\tlg: roundedLgStyles,\n\t},\n\tlarge: {\n\t\txs: roundedLgStyles,\n\t\tsm: roundedLgStyles,\n\t\tmd: roundedLgStyles,\n\t\tlg: roundedXlStyles,\n\t},\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n\txs: \"h-xs gap-1 px-2 text-sm\",\n\tsm: \"h-sm gap-1 px-2 text-sm\",\n\tmd: \"h-md gap-1.5 px-3 text-base\",\n\tlg: \"h-lg gap-2 px-4 text-lg\",\n};\n\nconst colorStyles: Record<Variant, Record<ButtonIntent, string>> = {\n\tdefault: {\n\t\tprimary: \"bg-indigo-600 hover:bg-indigo-700 data-[state='open']:bg-indigo-700 border border-indigo-700 text-white\",\n\t\tdefault: \"bg-white hover:bg-gray-100 data-[state='open']:bg-gray-100 border border-gray-200 text-gray-700\",\n\t\tdanger: \"bg-red-600 hover:bg-red-700 data-[state='open']:bg-red-700 border border-red-700 text-white\",\n\t\terror: \"bg-white hover:bg-red-50 data-[state='open']:bg-red-50 text-red-500 border border-red-300\",\n\t},\n\ttransparent: {\n\t\tprimary: \"bg-indigo-900/0 hover:bg-indigo-900/10 data-[state='open']:bg-indigo-900/10 text-indigo-700\",\n\t\tdefault: \"bg-gray-900/0 hover:bg-gray-900/10 data-[state='open']:bg-gray-900/10 text-gray-700\",\n\t\tdanger: \"bg-red-900/0 hover:bg-red-900/10 data-[state='open']:bg-red-900/10 text-red-700\",\n\t\terror: \"bg-red-900/0 hover:bg-red-900/10 data-[state='open']:bg-red-900/10 text-red-500\",\n\t},\n\tdark: {\n\t\tprimary: \"bg-indigo-600 hover:bg-indigo-700 data-[state='open']:bg-indigo-700 border border-indigo-700 text-white\",\n\t\tdefault: \"bg-gray-900 hover:bg-gray-600 data-[state='open']:bg-gray-600 text-white\",\n\t\tdanger: \"bg-red-600 hover:bg-red-700 data-[state='open']:bg-red-700 text-white\",\n\t\terror: \"bg-white hover:bg-red-50 data-[state='open']:bg-red-50 text-red-500\",\n\t},\n};\n\nexport const buttonStyles = ({\n\tfullWidth = false,\n\tsize = \"md\",\n\tintent = \"default\",\n\tvariant = \"default\",\n\tsoften = \"both\",\n\tloading,\n\troundedness = \"default\",\n}: Omit<ButtonStyleProps, \"disabled\">) => {\n\tif (variant === \"link\") {\n\t\treturn twJoin(fullWidth && \"w-full\", loading && \"animate-loading-pulse\", linkStyles);\n\t}\n\treturn twJoin(\n\t\t\"flex items-center justify-center whitespace-nowrap focus-visible:ring-2 focus-visible:ring-indigo-400 focus-visible:ring-inset disabled:pointer-events-none disabled:opacity-50\",\n\t\tfullWidth && \"w-full\",\n\t\tborderRadiusStyles[roundedness][size][soften],\n\t\tsizeStyles[size],\n\t\tcolorStyles[variant][intent],\n\t\tloading && \"animate-loading-pulse\",\n\t);\n};\n","import { Button, ButtonProps } from \"./Button\";\n\nexport type ButtonGroupProps<TValue extends string | number> = {\n\tsize?: ButtonProps[\"size\"];\n\tvalue: TValue;\n\tonChange: (value: TValue) => void;\n\tbuttons: readonly {\n\t\tcontent: React.ReactNode;\n\t\tvalue: TValue;\n\t}[];\n};\n\nexport const ButtonGroup = <TValue extends string | number>({\n\tsize,\n\tvalue,\n\tonChange,\n\tbuttons,\n}: ButtonGroupProps<TValue>) => (\n\t<div className=\"flex\">\n\t\t{buttons.map((button, i) => (\n\t\t\t<Button\n\t\t\t\tsize={size}\n\t\t\t\tkey={button.value}\n\t\t\t\tonClick={() => onChange(button.value)}\n\t\t\t\tsoften={i === 0 ? \"left\" : i === buttons.length - 1 ? \"right\" : \"none\"}\n\t\t\t\tintent={value === button.value ? \"primary\" : undefined}\n\t\t\t>\n\t\t\t\t{button.content}\n\t\t\t</Button>\n\t\t))}\n\t</div>\n);\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faCircle, faCircleInfo, faDiamond, faTriangleExclamation } from \"@fortawesome/free-solid-svg-icons\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"../icon\";\nimport { Intent } from \"../variants\";\n\nexport type CalloutIntent = Extract<Intent, \"default\" | \"warning\" | \"primary\" | \"danger\">;\n\nexport type CalloutProps = {\n\tintent?: CalloutIntent;\n\ttitle?: string;\n\trightSlot?: React.ReactNode;\n\tchildren?: React.ReactNode;\n\tcustomIcon?: IconDefinition;\n\tisAttachedAtBottom?: boolean;\n\tisCentered?: boolean;\n};\n\nconst calloutBackgroundStyles: Record<CalloutIntent, string> = {\n\tdefault: \"bg-gray-100\",\n\twarning: \"bg-yellow-50\",\n\tprimary: \"bg-indigo-50\",\n\tdanger: \"bg-red-50\",\n};\n\nconst calloutIconStyles: Record<CalloutIntent, string> = {\n\tdefault: \"text-gray-500\",\n\twarning: \"text-yellow-700\",\n\tprimary: \"text-indigo-500\",\n\tdanger: \"text-red-800\",\n};\n\nconst calloutBorderStyles: Record<CalloutIntent, string> = {\n\tdefault: \"border-[1px] border-gray-200\",\n\tprimary: \"border-[1px] border-indigo-100\",\n\twarning: \"border-[1px] border-yellow-200\",\n\tdanger: \"border-[1px] border-red-100\",\n};\n\nconst calloutIcons: Record<CalloutIntent, IconDefinition> = {\n\tdefault: faCircleInfo,\n\twarning: faTriangleExclamation,\n\tprimary: faDiamond,\n\tdanger: faCircle,\n};\n\nexport const Callout = ({\n\ttitle,\n\tintent = \"default\",\n\trightSlot,\n\tchildren,\n\tcustomIcon,\n\tisAttachedAtBottom,\n\tisCentered,\n}: CalloutProps) => (\n\t<div\n\t\tclassName={twJoin(\n\t\t\t\"flex w-full justify-between rounded-lg p-2.5\",\n\t\t\tcalloutBackgroundStyles[intent],\n\t\t\tcalloutBorderStyles[intent],\n\t\t\tisAttachedAtBottom ? \"rounded-b-none\" : \"rounded-b-lg\",\n\t\t\tisCentered ? \"items-center\" : \"items-start\",\n\t\t)}\n\t>\n\t\t<div className=\"flex gap-2\">\n\t\t\t<div className={twJoin(\"text-sm\", title ? \"leading-6.5\" : \"leading-5\", calloutIconStyles[intent])}>\n\t\t\t\t<Icon icon={customIcon ?? calloutIcons[intent]} />\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-1 flex-col gap-1\">\n\t\t\t\t{title && <div className=\"leading-6.5 font-medium whitespace-pre-line text-gray-700\">{title}</div>}\n\t\t\t\t{children && <div className=\"text-sm leading-5 text-gray-500\">{children}</div>}\n\t\t\t</div>\n\t\t</div>\n\t\t{rightSlot}\n\t</div>\n);\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype IconProps = {\n\ticon: IconDefinition;\n};\n\nexport const Icon = ({ icon }: IconProps) => <FontAwesomeIcon icon={icon} />;\n","import { forwardRef, InputHTMLAttributes, useEffect, useRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\ntype ErrorProps = {\n\thasError?: boolean;\n\terrorNode?: React.ReactNode;\n};\n\nexport type CheckboxProps = InputHTMLAttributes<HTMLInputElement> & ErrorProps;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(({ className, hasError, ...rest }, ref) => (\n\t<input\n\t\ttype=\"checkbox\"\n\t\tclassName={twJoin(\n\t\t\tclassName,\n\t\t\t\"block rounded-sm text-indigo-600 checked:bg-indigo-600 indeterminate:bg-indigo-600 focus:ring-0 focus:ring-offset-0 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-400 disabled:cursor-not-allowed disabled:bg-gray-200 disabled:hover:bg-gray-200\",\n\t\t\thasError ? \"border-red-300 text-red-900 placeholder-red-300\" : \"border-gray-200 disabled:border-gray-200\",\n\t\t)}\n\t\t{...rest}\n\t\tref={ref}\n\t/>\n));\n\nexport const IndeterminateCheckbox = ({\n\tindeterminate = false,\n\t...rest\n}: { indeterminate?: boolean } & CheckboxProps) => {\n\tconst ref = useRef<HTMLInputElement>(null);\n\n\tuseEffect(() => {\n\t\tif (ref.current) {\n\t\t\tref.current.indeterminate = indeterminate;\n\t\t}\n\t}, [indeterminate]);\n\n\treturn <Checkbox ref={ref} {...rest} />;\n};\n","import { faChevronDown, faChevronRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { Content, Root, Trigger } from \"@radix-ui/react-collapsible\";\nimport * as React from \"react\";\nimport { useState } from \"react\";\n// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { Icon } from \"../icon\";\n\ntype CollapsibleProps = {\n\ttitle: React.ReactNode;\n\tchildren: React.ReactNode;\n\tdefaultOpen?: boolean;\n\ticonPosition?: \"left\" | \"right\" | undefined;\n\thideIcon?: boolean;\n\topen?: boolean;\n\tsetOpen?: (open: boolean) => void;\n\ttriggerClassName?: string;\n};\n\nexport const Collapsible = ({\n\ttitle,\n\tchildren,\n\tdefaultOpen = false,\n\ticonPosition = \"left\",\n\thideIcon,\n\topen: controlledOpen,\n\tsetOpen: controlledSetOpen,\n\ttriggerClassName,\n}: CollapsibleProps) => {\n\tconst isControlled = controlledOpen !== undefined && controlledSetOpen !== undefined;\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\n\tconst isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\tconst setIsOpen = isControlled ? controlledSetOpen : setUncontrolledOpen;\n\n\treturn (\n\t\t<Root className=\"flex flex-col gap-2\" open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<Trigger\n\t\t\t\tasChild\n\t\t\t\tclassName={twMerge(\"flex cursor-pointer items-center gap-2 font-medium text-gray-500\", triggerClassName)}\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t{!hideIcon && iconPosition === \"left\" && (\n\t\t\t\t\t\t<div className=\"min-w-3.5\">\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\tisOpen\n\t\t\t\t\t\t\t\t\t\t? faChevronDown\n\t\t\t\t\t\t\t\t\t\t: faChevronRight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{title}\n\t\t\t\t\t{!hideIcon && iconPosition === \"right\" && (\n\t\t\t\t\t\t<div className=\"min-w-3.5\">\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\tisOpen\n\t\t\t\t\t\t\t\t\t\t? faChevronDown\n\t\t\t\t\t\t\t\t\t\t: faChevronRight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</Trigger>\n\t\t\t<Content className=\"overflow-y-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down\">\n\t\t\t\t<div className=\"flex flex-col gap-2\">{children}</div>\n\t\t\t</Content>\n\t\t</Root>\n\t);\n};\n","import { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Button, ButtonProps } from \"@/core/button\";\nimport { Icon } from \"@/core/icon\";\nimport { IsVisibleProvider, useIsVisible } from \"@/core/utils/useToggle\";\n\ntype ToggleButtonProps = ButtonProps;\nconst ToggleButton = ({ children, ...rest }: ToggleButtonProps) => {\n\tconst { state: isVisible, toggle } = useIsVisible();\n\n\treturn (\n\t\t<Slot onClick={toggle}>\n\t\t\t<Button variant=\"transparent\" size=\"xs\" {...rest}>\n\t\t\t\t<span className={twJoin(\"transition-transform\", !isVisible && \"-rotate-90\")}>\n\t\t\t\t\t<Icon icon={faChevronDown} />\n\t\t\t\t</span>\n\t\t\t\t{children}\n\t\t\t</Button>\n\t\t</Slot>\n\t);\n};\n\nconst Content = ({ children }: { children: React.ReactNode }) => {\n\tconst { state: isVisible } = useIsVisible();\n\n\tif (isVisible) return children;\n\treturn null;\n};\n\ntype CollapsibleSectionProps = {\n\tchildren: React.ReactNode;\n\tdefaultOpen?: boolean;\n};\nexport const CollapsibleSection = ({ children, defaultOpen }: CollapsibleSectionProps) => {\n\treturn <IsVisibleProvider state={defaultOpen}>{children}</IsVisibleProvider>;\n};\n\nCollapsibleSection.ToggleButton = ToggleButton;\nCollapsibleSection.Content = Content;\n","import * as React from \"react\";\n\nimport { createContextHelper } from \"./create-context-helper\";\n\ntype ToggleContext = ReturnType<typeof useToggle>;\nconst [ToggleProvider, useToggleHook] = createContextHelper<ToggleContext>({\n\tstate: false,\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tupdate: () => {},\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\ttoggle: () => {},\n});\n/**\n * @example\n * const defaultState = false; // optional as false is the default\n * const [Provider, useToggle] = createToggleContextHelper(defaultState);\n *\n * const {\n * \tstate,\t// boolean\n * \tupdate,\t// (state: boolean) => void\n * \ttoggle\t// () => void\n * } = useToggle();\n */\nexport const createToggleContextHelper = (defaultState = false) => {\n\tconst Provider = ({ children, state: initState }: { children: React.ReactNode; state?: boolean }) => {\n\t\tconst hook = useToggle(initState ?? defaultState);\n\t\treturn <ToggleProvider {...hook}>{children}</ToggleProvider>;\n\t};\n\n\tProvider.displayName = \"ToggleProvider\";\n\treturn [Provider, useToggleHook] as const;\n};\n\n// -----------------------------------------------------\n// provider and hook combos\n// -----------------------------------------------------\n/**\n * @example\n * const defaultState = true;\n * const { state, update, toggle } = useIsVisible(defaultState);\n */\nexport const [IsVisibleProvider, useIsVisible] = createToggleContextHelper(true);\n/**\n * @example\n * const defaultState = false;\n * const { state, update, toggle } = useIsEditing(defaultState);\n */\nexport const [IsEditingProvider, useIsEditing] = createToggleContextHelper(false);\n\n// -----------------------------------------------------\n// hooks like you know and love\n// -----------------------------------------------------\n/**\n * @example\n * const defaultState = false; // optional as false is the default\n * const { state, update, toggle } = useToggle(defaultState);\n */\nexport const useToggle = (initState?: boolean) => {\n\tconst [state, update] = React.useState(initState ?? false);\n\tconst toggle = React.useCallback(() => update((state) => !state), []);\n\treturn { state, update, toggle };\n};\n","import * as React from \"react\";\n\n/**\n * @example\n * type FooContextValue = { foo: string };\n * const [FooProvider, useFoo] = createContextHelper<FooContextValue>({ foo: \"bar\" });\n */\nexport const createContextHelper = <ContextValue extends object | null>(defaultContext?: ContextValue) => {\n\tconst Context = React.createContext<ContextValue | undefined>(defaultContext);\n\n\tconst Provider = ({ children, ...rest }: ContextValue & { children: React.ReactNode }) => {\n\t\t// Only re-memoize when prop values change\n\t\t// eslint-disable-next-line react-compiler/react-compiler\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\tconst value = React.useMemo(() => rest, Object.values(rest)) as ContextValue;\n\t\treturn <Context.Provider value={value}>{children}</Context.Provider>;\n\t};\n\n\tconst useContext = () => {\n\t\tconst context = React.useContext(Context);\n\t\tif (context) {\n\t\t\treturn context;\n\t\t}\n\t\tif (defaultContext !== undefined) {\n\t\t\treturn defaultContext;\n\t\t}\n\t\t// if a defaultContext wasn't specified, it's a required context.\n\t\tthrow new Error(\"Required context: useContext likely outside of a Provider\");\n\t};\n\n\treturn [Provider, useContext] as const;\n};\n","import { faCheck, faCopy } from \"@fortawesome/free-solid-svg-icons\";\nimport * as RadixTooltip from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"../icon\";\nimport { Tooltip, TooltipContent } from \"../tooltip\";\nimport { useCopyable } from \"./use-copyable\";\n\ntype CopyEasyProps = {\n\tchildren: React.ReactNode;\n\tvalue: string | undefined;\n\ttooltip?: React.ReactNode;\n\tonClick?: () => void;\n\tasChild?: boolean;\n};\n\nexport const Copyable = ({ children, value, tooltip, onClick, asChild }: CopyEasyProps) => {\n\tconst { state, copy } = useCopyable();\n\tconst handleCopy = async (e: React.MouseEvent) => {\n\t\te.stopPropagation();\n\t\tawait copy(value, onClick);\n\t};\n\n\tif (!value && tooltip) {\n\t\treturn <Tooltip trigger={children} content={tooltip} />;\n\t}\n\tif (!value) {\n\t\treturn children;\n\t}\n\treturn (\n\t\t<RadixTooltip.Root open={state === \"copied\" ? true : undefined} delayDuration={150}>\n\t\t\t<RadixTooltip.Trigger\n\t\t\t\tasChild\n\t\t\t\tonClick={handleCopy}\n\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\"w-fit cursor-pointer rounded-xs\",\n\t\t\t\t\tstate !== \"copied\" && \"hover:bg-[#E8E8EB] hover:shadow-[0_0_0_2px_#E8E8EB] active:opacity-60\",\n\t\t\t\t\tstate === \"copying\" && \"opacity-60\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{asChild ? children : <span>{children}</span>}\n\t\t\t</RadixTooltip.Trigger>\n\t\t\t{tooltip && state === \"idle\" && <TooltipContent side=\"bottom\">{tooltip}</TooltipContent>}\n\t\t\t<RadixTooltip.Portal>\n\t\t\t\t<RadixTooltip.Content\n\t\t\t\t\tsideOffset={6}\n\t\t\t\t\tside=\"right\"\n\t\t\t\t\t// TODO: remove z-index once z-index wars settle down\n\t\t\t\t\t// currently modal bg in /app is z-100\n\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\"z-101 grid h-6 w-6 place-items-center rounded-sm bg-white shadow-lg\",\n\t\t\t\t\t\tstate !== \"copying\" && \"animate-fade-in\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className={state === \"copied\" ? \"text-green-500\" : \"text-gray-500\"}>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\tstate === \"copied\"\n\t\t\t\t\t\t\t\t\t? faCheck\n\t\t\t\t\t\t\t\t\t: faCopy\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</RadixTooltip.Content>\n\t\t\t</RadixTooltip.Portal>\n\t\t</RadixTooltip.Root>\n\t);\n};\n","import * as RadixTooltip from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\n\nimport { useOverflowObserver } from \"@/core/utils/useOverflowObserver\";\n\ntype TooltipContentProps = Pick<RadixTooltip.TooltipContentProps, \"side\"> & {\n\tchildren: React.ReactNode;\n\tvariant?: \"dark\" | \"light\";\n};\nexport const TooltipContent = ({ children, variant = \"dark\", ...rest }: TooltipContentProps) => {\n\treturn (\n\t\t<RadixTooltip.Portal>\n\t\t\t<RadixTooltip.Content\n\t\t\t\t{...rest}\n\t\t\t\thideWhenDetached\n\t\t\t\tsideOffset={6}\n\t\t\t\t// TODO: remove z-index once z-index wars settle down\n\t\t\t\t// currently modal bg in /app is z-100\n\t\t\t\tclassName={`z-9000000000 max-w-prose rounded-lg px-5 py-3 text-sm break-words shadow-lg ${\n\t\t\t\t\tvariant === \"dark\" ? \"bg-gray-900 text-white\" : \"bg-white text-gray-600\"\n\t\t\t\t}`}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<RadixTooltip.Arrow className={variant === \"dark\" ? \"fill-gray-900\" : \"fill-white\"} offset={8} />\n\t\t\t</RadixTooltip.Content>\n\t\t</RadixTooltip.Portal>\n\t);\n};\nTooltipContent.displayName = RadixTooltip.Content.displayName;\n\ntype OverflowTriggerProps<TElement extends HTMLElement> = Omit<RadixTooltip.TooltipTriggerProps, \"children\"> & {\n\t/** The `elementRef` render prop should attach to a measurable DOM element.\n\t *\n\t * @example\n\t * element={elementRef => (\n\t * <span ref={elementRef} className=\"truncate ...\">\n\t * {text}\n\t * </span>\n\t * )}\n\t */\n\telement: (elementRef: React.RefObject<TElement>) => React.ReactElement;\n};\nconst OverflowTrigger = <TElement extends HTMLElement = HTMLDivElement>({\n\telement,\n\t...rest\n}: OverflowTriggerProps<TElement>) => {\n\tconst { elementRef, hasOverflow } = useOverflowObserver<TElement>();\n\n\tif (!hasOverflow) {\n\t\treturn element(elementRef);\n\t}\n\treturn (\n\t\t<RadixTooltip.Trigger asChild {...rest}>\n\t\t\t{element(elementRef)}\n\t\t</RadixTooltip.Trigger>\n\t);\n};\n\nconst TooltipTrigger = (props: RadixTooltip.TooltipTriggerProps) => <RadixTooltip.Trigger asChild {...props} />;\n\nconst TooltipProvider = (props: RadixTooltip.TooltipProviderProps) => (\n\t<RadixTooltip.Provider disableHoverableContent delayDuration={0} {...props} />\n);\n\nconst TooltipRoot = (props: RadixTooltip.TooltipProps) => <RadixTooltip.Root {...props} />;\n\nexport type TooltipProps = Simplify<\n\tOmit<RadixTooltip.TooltipProps, \"children\"> &\n\t\tOmit<TooltipContentProps, \"children\"> & {\n\t\t\ttrigger?: React.ReactNode;\n\t\t\tcontent?: React.ReactNode;\n\t\t}\n>;\n/**\n * @example\n * <Tooltip\n * trigger={<Button>Cool action</Button>}\n * \tcontent={<p className=\"text-xs\">This is the tooltip content</p>}\n * />\n */\nexport const Tooltip = ({ trigger, content, variant, side, ...rest }: TooltipProps) => {\n\treturn (\n\t\t<Tooltip.Root {...rest}>\n\t\t\t<Tooltip.Trigger>{trigger}</Tooltip.Trigger>\n\t\t\t{content && (\n\t\t\t\t<Tooltip.Content side={side} variant={variant}>\n\t\t\t\t\t{content}\n\t\t\t\t</Tooltip.Content>\n\t\t\t)}\n\t\t</Tooltip.Root>\n\t);\n};\n\nTooltip.Provider = TooltipProvider;\nTooltip.Root = TooltipRoot;\nTooltip.Trigger = TooltipTrigger;\nTooltip.OverflowTrigger = OverflowTrigger;\nTooltip.Content = TooltipContent;\n","import * as React from \"react\";\n\nexport const useOverflowObserver = <T extends HTMLElement>() => {\n\tconst [hasOverflow, setHasOverflow] = React.useState(false);\n\tconst elementRef = React.useRef<T>(null);\n\n\t// React.useLayoutEffect can hurt perf as advised by React docs,\n\t// so useEffect until it becomes obvious to React.useLayoutEffect.\n\tReact.useEffect(() => {\n\t\tif (elementRef.current == null) return;\n\n\t\tconst resizeObserver = new ResizeObserver(([entry]) => {\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tconst element = entry?.target as T;\n\n\t\t\t\tconst hasOverflowWidth = element.offsetWidth < element.scrollWidth;\n\t\t\t\tconst hasOverflowHeight = element.offsetHeight < element.scrollHeight;\n\t\t\t\tconst calcHasOverflow = hasOverflowWidth || hasOverflowHeight;\n\t\t\t\t// setting state will cause re-render, so only set if actually changed\n\t\t\t\tif (calcHasOverflow !== hasOverflow) {\n\t\t\t\t\tsetHasOverflow(calcHasOverflow);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tresizeObserver.observe(elementRef.current);\n\n\t\treturn () => resizeObserver.disconnect();\n\t}, [hasOverflow]);\n\n\treturn { elementRef, hasOverflow };\n};\n","import * as React from \"react\";\n\nconst waitMs = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst oldSchoolCopy = (text: string) => {\n\tconst tempTextArea = document.createElement(\"textarea\");\n\ttempTextArea.value = text;\n\tdocument.body.appendChild(tempTextArea);\n\ttempTextArea.select();\n\tdocument.execCommand(\"copy\");\n\tdocument.body.removeChild(tempTextArea);\n};\n\nexport const copyToClipboard = async (value: string) => {\n\ttry {\n\t\tif (navigator?.clipboard?.writeText) {\n\t\t\tawait navigator.clipboard.writeText(value);\n\t\t} else {\n\t\t\tthrow new Error(\"writeText not supported\");\n\t\t}\n\t} catch {\n\t\toldSchoolCopy(value);\n\t}\n};\n\nexport const useCopyable = () => {\n\tconst [state, setState] = React.useState<\"idle\" | \"copying\" | \"copied\">(\"idle\");\n\n\tconst copy = React.useCallback(async (value: string | undefined, onClick?: () => void) => {\n\t\tif (!value) {\n\t\t\treturn;\n\t\t}\n\t\tsetState(\"copying\");\n\t\tawait Promise.all([copyToClipboard(value), waitMs(350)]);\n\t\tonClick?.();\n\n\t\tsetState(\"copied\");\n\t\t// give user a chance to grok the copy has succeeded\n\t\tawait waitMs(1750);\n\t\tsetState(\"idle\");\n\t}, []);\n\n\treturn { state, copy };\n};\n","import { useCallback } from \"react\";\nimport DatePickerLib from \"react-datepicker\";\n\nimport { DatePickerHeader } from \"./DatePickerHeader\";\nimport { customInputFieldFactory, DatePickerSharedProps } from \"./shared\";\nimport { TimeInput } from \"./TimeInput\";\n\nexport type DatePickerRangeProps = DatePickerSharedProps & {\n\tvalue: [Date | undefined, Date | undefined];\n\trange: true;\n\n\tonChange?: (newDate: [Date | undefined, Date | undefined]) => void;\n};\n\nexport const DatePickerRange = ({\n\tvalue = [undefined, undefined],\n\terrorNode,\n\thasError,\n\tinputProps,\n\tplaceholder,\n\tonChange,\n\tposition = \"bottom-start\",\n\t...props\n}: DatePickerRangeProps) => {\n\tconst handleChange = useCallback(\n\t\t(date: [Date | null, Date | null]) => onChange?.([date[0] || undefined, date[1] || undefined]),\n\t\t[onChange],\n\t);\n\n\tconst clearDatePicker = useCallback(\n\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\te.preventDefault();\n\t\t\tonChange?.([undefined, undefined]);\n\t\t},\n\t\t[onChange],\n\t);\n\n\treturn (\n\t\t<DatePickerLib\n\t\t\t{...props}\n\t\t\tclassName=\"placeholder:text-gray-400\"\n\t\t\tselected={value[0]}\n\t\t\tonChange={handleChange}\n\t\t\tstartDate={value[0]}\n\t\t\tendDate={value[1]}\n\t\t\tdateFormat={props.showTimeInput ? \"MM/dd/yyyy h:mm aa\" : \"MM/dd/yyyy\"}\n\t\t\tselectsRange\n\t\t\tpopperPlacement={position}\n\t\t\tplaceholderText={placeholder}\n\t\t\tcustomInput={\n\t\t\t\t!props.inline\n\t\t\t\t\t? customInputFieldFactory({\n\t\t\t\t\t\t\tinputProps,\n\t\t\t\t\t\t\tisEmpty: value[0] == null && value[1] == null,\n\t\t\t\t\t\t\tdisabled: props.disabled,\n\t\t\t\t\t\t\terrorNode,\n\t\t\t\t\t\t\thasError,\n\t\t\t\t\t\t\tonClearInput: clearDatePicker,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tcustomTimeInput={<TimeInput />}\n\t\t\trenderCustomHeader={DatePickerHeader}\n\t\t/>\n\t);\n};\n","import { faChevronLeft, faChevronRight } from \"@fortawesome/free-solid-svg-icons\";\nimport { getMonth, getYear } from \"date-fns\";\nimport { range } from \"lodash-es\";\nimport { ReactDatePickerCustomHeaderProps } from \"react-datepicker\";\n\nimport { Button, Icon, Select } from \"@/core\";\n\nconst years = range(1920, getYear(new Date()) + 1, 1).sort((a, b) => b - a);\nconst months = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nexport const DatePickerHeader = ({\n\tdate,\n\tdecreaseMonth,\n\tincreaseMonth,\n\tchangeMonth,\n\tchangeYear,\n\tprevMonthButtonDisabled,\n\tnextMonthButtonDisabled,\n}: ReactDatePickerCustomHeaderProps) => {\n\tconst datePickerContainer = document.querySelector(\".react-datepicker\") ?? undefined;\n\treturn (\n\t\t<div className=\"space-y-2 p-2\">\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Button onClick={decreaseMonth} disabled={prevMonthButtonDisabled} variant=\"transparent\" size=\"sm\">\n\t\t\t\t\t<Icon icon={faChevronLeft} />\n\t\t\t\t</Button>\n\t\t\t\t<Select\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tpopover={{\n\t\t\t\t\t\tcontainer: datePickerContainer,\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={months[getMonth(date)]}\n\t\t\t\t\tonChange={(value) => changeMonth(months.indexOf(value))}\n\t\t\t\t\titems={months.map((month) => ({ label: month, value: month }))}\n\t\t\t\t/>\n\t\t\t\t<Select\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tpopover={{\n\t\t\t\t\t\tcontainer: datePickerContainer,\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={getYear(date).toString()}\n\t\t\t\t\tonChange={(value) => changeYear(parseInt(value))}\n\t\t\t\t\titems={years.map((year) => ({ label: year.toString(), value: year.toString() }))}\n\t\t\t\t/>\n\t\t\t\t<Button onClick={increaseMonth} disabled={nextMonthButtonDisabled} variant=\"transparent\" size=\"sm\">\n\t\t\t\t\t<Icon icon={faChevronRight} />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { type Placement } from \"@floating-ui/react\";\nimport { faCalendar, faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { DatePickerProps } from \"react-datepicker\";\n\nimport { Button, Icon } from \"@/core\";\n\nimport { ErrorProps } from \"../types\";\nimport { DatePickerInput, DatePickerInputProps } from \"./DatePickerInput\";\n\nexport type DatePickerSharedProps = Pick<\n\tDatePickerProps,\n\t\"inline\" | \"autoFocus\" | \"showTimeInput\" | \"preventOpenOnFocus\" | \"minDate\" | \"maxDate\" | \"disabled\"\n> & {\n\tinputProps?: DatePickerInputProps;\n\tplaceholder?: string;\n\tposition?: Placement;\n} & ErrorProps;\n\n// This is a factory that creates components, rather than a component itself because\n// of the way that react-datepicker uses refs for the input field. While it may be possible,\n// I couldn't figure out how to forward the ref correctly such that the date picker popup appeared\n// when selecting the input.\nexport const customInputFieldFactory = ({\n\tinputProps,\n\terrorNode,\n\thasError,\n\tisEmpty,\n\tdisabled,\n\tonClearInput,\n}: {\n\tinputProps?: DatePickerInputProps;\n\tisEmpty: boolean;\n\tdisabled?: boolean;\n\tplaceholder?: string;\n\tonClearInput: (event: React.MouseEvent<HTMLButtonElement>) => void;\n} & ErrorProps) => (\n\t<DatePickerInput\n\t\tinputProps={inputProps}\n\t\terrorNode={errorNode}\n\t\thasError={hasError}\n\t\trightAction={\n\t\t\tisEmpty ? (\n\t\t\t\t<span className=\"text-gray-300\">\n\t\t\t\t\t<Icon icon={faCalendar} />\n\t\t\t\t</span>\n\t\t\t) : !disabled ? (\n\t\t\t\t<Button size=\"xs\" onClick={onClearInput} variant=\"transparent\">\n\t\t\t\t\t<span className=\"text-gray-500\">\n\t\t\t\t\t\t<Icon icon={faXmark} />\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t) : null\n\t\t}\n\t/>\n);\n","import { forwardRef, InputHTMLAttributes } from \"react\";\n// eslint-disable-next-line no-restricted-imports\nimport { twJoin, twMerge } from \"tailwind-merge\";\n\nimport { ErrorProps, RING_COLOR_CLASSNAME } from \"../types\";\n\nexport type DatePickerInputProps = InputHTMLAttributes<HTMLInputElement>;\n\ntype DatePickerInputInternalProps = {\n\tinputProps?: DatePickerInputProps;\n\trightAction?: React.ReactNode;\n\tdisabled?: boolean;\n} & ErrorProps;\n\nexport const DatePickerInput = forwardRef<HTMLInputElement, DatePickerInputInternalProps & DatePickerInputProps>(\n\t({ inputProps, errorNode, hasError, rightAction, disabled, className, ...rest }, ref) => {\n\t\tconst ringClassName = disabled\n\t\t\t? \"focus:outline-hidden focus:ring-0\"\n\t\t\t: hasError\n\t\t\t\t? \"focus:outline-hidden focus:ring-red-500 focus:border-red-500\"\n\t\t\t\t: RING_COLOR_CLASSNAME;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"relative block w-full rounded-md shadow-sm\">\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\t\"block w-full rounded-md disabled:bg-gray-100\",\n\t\t\t\t\t\t\trightAction && \"pr-8\",\n\t\t\t\t\t\t\thasError ? \"border-red-300 text-red-900 placeholder-red-300\" : \"border-gray-200\",\n\t\t\t\t\t\t\tringClassName,\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\tinputProps?.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t/>\n\t\t\t\t\t{rightAction && (\n\t\t\t\t\t\t<div className={twJoin(\"absolute inset-y-0 right-0 flex items-center pr-3\", disabled && \"cursor-auto\")}>\n\t\t\t\t\t\t\t{rightAction}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{hasError != null && errorNode != null && (\n\t\t\t\t\t<p className=\"mt-2 max-h-[100px] overflow-auto text-sm text-red-600\">{errorNode}</p>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t},\n);\n","import { PropsWithChildren, ReactNode } from \"react\";\n\nexport type FalsyValues = false | null | undefined | 0;\nexport type ClassNameProps = { className?: string };\nexport type ChildrenProps = PropsWithChildren<unknown>;\nexport type DisabledProps = { disabled?: boolean };\nexport type StylesProps = { styles?: string | FalsyValues };\nexport type PropsWithClassName<T> = T & ClassNameProps;\n\nexport type ErrorProps = {\n\thasError?: boolean;\n\terrorNode?: ReactNode;\n};\n\nexport type AllAsNever<T> = {\n\t[P in keyof Partial<T>]: T[P] extends object ? AllAsNever<T[P]> : never;\n};\n\nexport const RING_COLOR_CLASSNAME = \"focus:ring-2 focus:ring-indigo-200\";\n","import { InputHTMLAttributes, useCallback, useState } from \"react\";\n\nimport { Input } from \"../input\";\n\nexport const TimeInput = ({\n\tvalue: inputValue,\n\tonChange,\n}: Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> & { onChange?: (newDate: string | undefined) => void }) => {\n\tconst [value, setValue] = useState<string | undefined>(inputValue?.toString());\n\n\tconst handleUpdateTime = useCallback(() => {\n\t\tonChange?.(value);\n\t}, [value, onChange]);\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\thandleUpdateTime();\n\t\t}\n\t};\n\n\treturn (\n\t\t<Input\n\t\t\tvalue={value}\n\t\t\tonChange={(e) => setValue(e.target.value)}\n\t\t\tonBlur={handleUpdateTime}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\ttype=\"time\"\n\t\t\trequired\n\t\t/>\n\t);\n};\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { InputBoxStyleProps, inputBoxStyles, inputStyles } from \"./inputBoxStyles\";\n\nexport type InputBoxProps = InputBoxStyleProps & {\n\tchildren: React.ReactNode;\n};\n\ntype InputBaseProps = React.ComponentPropsWithoutRef<\"input\">;\n\nconst NestedInputImpl = (props: InputBaseProps, ref: React.ForwardedRef<HTMLInputElement>) => {\n\treturn (\n\t\t<input\n\t\t\t// these props can be overridden by {...props}\n\t\t\ttype=\"text\"\n\t\t\tclassName={`${inputStyles} border-none bg-transparent p-0 focus:ring-0 focus:outline-hidden`}\n\t\t\tautoComplete=\"off\"\n\t\t\t// spread in props that can be used as-is\n\t\t\t{...props}\n\t\t\t// these props won't be overridden as they come after {...props}\n\t\t\tref={ref}\n\t\t/>\n\t);\n};\n\nconst NestedInput = forwardRef(NestedInputImpl);\n\nconst InputBoxImpl = ({ children, ...style }: InputBoxProps, ref: React.ForwardedRef<HTMLLabelElement>) => (\n\t// Styling text to propagate stateful text color inheritance for the children of InputBox\n\t// (think Icons, other non-input elements). Avoids style collisions when Input is used solo.\n\t<label ref={ref} className={`${style.hasError ? \"text-red-300\" : \"text-gray-400\"} ${inputBoxStyles(style)}`}>\n\t\t{children}\n\t</label>\n);\n\ntype CompoundInputBox = React.ForwardRefExoticComponent<InputBoxProps & React.RefAttributes<HTMLLabelElement>> & {\n\tInput: typeof NestedInput;\n};\nexport const InputBox = React.forwardRef(InputBoxImpl) as CompoundInputBox;\n\nInputBox.Input = NestedInput;\n\nexport type InputProps = InputBoxStyleProps & InputBaseProps;\nconst InputImpl = (\n\t{ size, variant, hasError, hasWarning, prefix, ...rest }: InputProps,\n\tref: React.ForwardedRef<HTMLInputElement>,\n) => {\n\treturn prefix ? (\n\t\t<div className=\"flex flex-row items-center\">\n\t\t\t<label className=\"p-1 text-gray-500\">{prefix}</label>\n\t\t\t<input\n\t\t\t\t// these props can be overridden by {...props}\n\t\t\t\ttype=\"text\"\n\t\t\t\tclassName={`${inputStyles} ${inputBoxStyles({ size, variant, hasError, hasWarning })}`}\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\t// spread in props that can be used as-is\n\t\t\t\t{...rest}\n\t\t\t\t// these props won't be overridden as they come after {...props}\n\t\t\t\tref={ref}\n\t\t\t/>\n\t\t</div>\n\t) : (\n\t\t<input\n\t\t\t// these props can be overridden by {...props}\n\t\t\ttype=\"text\"\n\t\t\tclassName={`${inputStyles} ${inputBoxStyles({ size, variant, hasError, hasWarning })}`}\n\t\t\tautoComplete=\"off\"\n\t\t\t// spread in props that can be used as-is\n\t\t\t{...rest}\n\t\t\t// these props won't be overridden as they come after {...props}\n\t\t\tref={ref}\n\t\t/>\n\t);\n};\n\nexport const Input = forwardRef(InputImpl);\n","import { twJoin } from \"tailwind-merge\";\n\nimport { Size } from \"../variants\";\n\ntype InputSize = Extract<Size, \"sm\" | \"md\" | \"lg\">;\ntype InputBoxStates = \"default\" | \"error\" | \"warning\";\ntype InputVariants = \"default\" | \"transparent\";\n\nexport type InputBoxStyleProps = {\n\tsize?: InputSize;\n\tvariant?: InputVariants;\n\thasError?: boolean;\n\thasWarning?: boolean;\n};\n\nconst sizeStyles: Record<InputSize, string> = {\n\tsm: \"h-sm gap-1 px-2 text-sm [&>input]:text-sm\",\n\tmd: \"h-md gap-2 px-2.5 text-base [&>input]:text-base\",\n\tlg: \"h-lg gap-2.5 px-3 text-lg [&>input]:text-lg\",\n};\n\nconst defaultVariantStyles =\n\t\"rounded-md border bg-white focus-within:outline focus:outline focus-within:outline-offset-0 focus:outline-offset-0 focus-within:outline-2 focus:outline-2\";\nconst transparentVariantStyles = \"border-none bg-transparent focus-within:outline-hidden focus:outline-hidden\";\n\nconst variantStyles: Record<InputVariants, Record<InputBoxStates, string>> = {\n\tdefault: {\n\t\tdefault: `${defaultVariantStyles} disabled:bg-gray-100 disabled:text-gray-400 border-gray-200 focus-within:border-indigo-400 focus-within:outline-indigo-200 focus:border-indigo-400 focus:outline-indigo-200`,\n\t\terror: `${defaultVariantStyles} border-red-300 focus-within:border-red-300 focus-within:outline-red-200 focus:border-red-300 focus:outline-red-200`,\n\t\twarning: `${defaultVariantStyles} border-yellow-300 focus-within:border-yellow-300 focus-within:outline-yellow-200 focus:border-yellow-300 focus:outline-yellow-200`,\n\t},\n\ttransparent: {\n\t\tdefault: `${transparentVariantStyles} disabled:bg-gray-100 disabled:text-gray-400`,\n\t\terror: transparentVariantStyles,\n\t\twarning: transparentVariantStyles,\n\t},\n};\n\nexport const inputBoxStyles = ({ size = \"md\", variant = \"default\", hasError, hasWarning }: InputBoxStyleProps) =>\n\ttwJoin(\n\t\t\"flex w-full items-center focus-within:ring-0 focus:ring-0 has-disabled:bg-gray-100 has-disabled:text-gray-400\",\n\t\tsizeStyles[size],\n\t\tvariantStyles[variant][hasError ? \"error\" : hasWarning ? \"warning\" : \"default\"],\n\t);\n\nexport const inputStyles = \"w-full text-gray-800 placeholder:text-gray-400 disabled:text-gray-400\";\n","import { useCallback } from \"react\";\nimport DatePickerLib from \"react-datepicker\";\n\nimport { DatePickerHeader } from \"./DatePickerHeader\";\nimport { customInputFieldFactory, DatePickerSharedProps } from \"./shared\";\nimport { TimeInput } from \"./TimeInput\";\n\nexport type DatePickerSingleProps = DatePickerSharedProps & {\n\tvalue: Date | undefined;\n\trange?: false;\n\tonChange?: (newDate: Date | undefined) => void;\n};\n\nexport const DatePickerSingle = ({\n\tvalue,\n\terrorNode,\n\thasError,\n\tinputProps,\n\tplaceholder,\n\tonChange,\n\tposition = \"bottom-start\",\n\tpreventOpenOnFocus = true,\n\t...props\n}: DatePickerSingleProps) => {\n\tconst handleChange = useCallback((date: Date | null) => onChange?.(date ?? undefined), [onChange]);\n\n\tconst clearDatePicker = useCallback(\n\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\te.preventDefault();\n\t\t\tonChange?.(undefined);\n\t\t},\n\t\t[onChange],\n\t);\n\n\treturn (\n\t\t<DatePickerLib\n\t\t\t{...props}\n\t\t\tclassName=\"placeholder:text-gray-400\"\n\t\t\tpreventOpenOnFocus={preventOpenOnFocus}\n\t\t\tselected={value}\n\t\t\tonChange={handleChange}\n\t\t\ttimeInputLabel=\"\"\n\t\t\tdateFormat={props.showTimeInput ? \"MM/dd/yyyy h:mm aa\" : \"MM/dd/yyyy\"}\n\t\t\tplaceholderText={placeholder}\n\t\t\tcustomInput={\n\t\t\t\t!props.inline\n\t\t\t\t\t? customInputFieldFactory({\n\t\t\t\t\t\t\tinputProps,\n\t\t\t\t\t\t\tisEmpty: value == null,\n\t\t\t\t\t\t\tdisabled: props.disabled,\n\t\t\t\t\t\t\terrorNode,\n\t\t\t\t\t\t\thasError,\n\t\t\t\t\t\t\tonClearInput: clearDatePicker,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tcustomTimeInput={<TimeInput />}\n\t\t\trenderCustomHeader={DatePickerHeader}\n\t\t\tpopperPlacement={position}\n\t\t/>\n\t);\n};\n","import \"./DatePicker.css\";\n\nimport { DatePickerRange, DatePickerRangeProps } from \"./DatePickerRange\";\nimport { DatePickerSingle, DatePickerSingleProps } from \"./DatePickerSingle\";\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nexport const DatePicker = (props: DatePickerProps) =>\n\tprops.range ? <DatePickerRange {...props} /> : <DatePickerSingle {...props} />;\n","// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { ClassNameProps } from \"@/core/types\";\n\nexport type DividerProps = ClassNameProps;\n\nexport const Divider = ({ className }: DividerProps) => (\n\t<div className={twMerge(\"h-[1px] w-full border-b border-gray-200\", className)} />\n);\n","import React, { forwardRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\ntype ErrorTextProps = React.ComponentPropsWithoutRef<\"p\"> & { className?: string };\n\nconst ErrorTextImpl = ({ className, ...props }: ErrorTextProps, ref: React.ForwardedRef<HTMLParagraphElement>) => {\n\tif (!props.children) {\n\t\treturn null;\n\t}\n\treturn <p {...props} ref={ref} className={twJoin(\"text-red-600\", className)} />;\n};\n/** ErrorText will return `null` if `children` is falsy */\nexport const ErrorText = forwardRef(ErrorTextImpl);\n","export { FormProvider, useFieldArray, useFormState, useWatch, useController } from \"react-hook-form\";\nexport type {\n\tControllerRenderProps,\n\tField,\n\tFieldArrayWithId,\n\tFieldError,\n\tFieldErrors,\n\tFieldPath,\n\tFieldValues,\n\tPath,\n\tUseControllerProps,\n\tUseControllerReturn,\n\tUseFieldArrayProps,\n\tUseFieldArrayReturn,\n\tUseFormProps,\n\tUseFormReturn,\n\tUseFormReset,\n\tUseFormGetValues,\n\tUseFieldArrayUpdate,\n\tUseFieldArrayRemove,\n\tUseFieldArrayMove,\n} from \"react-hook-form\";\n\nexport * from \"./components/ControlledField\";\nexport * from \"./components/UncontrolledField\";\nexport * from \"./hooks\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","import { createContext, PropsWithChildren, useContext, useMemo } from \"react\";\n\nimport { FormFieldNameProps, useControlledFormField } from \"../hooks\";\n\nconst ControlledFieldContext = createContext<ReturnType<typeof useControlledFormField> | undefined>(undefined);\n\nexport const ControlledFieldProvider = ({ children, ...restField }: FormFieldNameProps & PropsWithChildren) => {\n\tconst field = useControlledFormField(restField);\n\tconst value = useMemo(() => field, [field]);\n\treturn <ControlledFieldContext.Provider value={value}>{children}</ControlledFieldContext.Provider>;\n};\n\nControlledFieldProvider.displayName = \"ControlledFieldProvider\";\n\nexport const useControlledField = () => {\n\tconst context = useContext(ControlledFieldContext);\n\tif (context) {\n\t\treturn context;\n\t}\n\t// if a defaultContext wasn't specified, it's a required context.\n\tthrow new Error(\"useControlledField must be used within ControlledFieldProvider\");\n};\n\nuseControlledField.displayName = \"useControlledField\";\n\ntype ControlledFieldProps = FormFieldNameProps & {\n\trender: (props: ReturnType<typeof useControlledFormField>) => React.ReactNode;\n};\nexport const ControlledField = ({ render, ...restField }: ControlledFieldProps) => {\n\treturn <>{render(useControlledFormField(restField))}</>;\n};\n\nControlledField.displayName = \"ControlledField\";\n","// eslint-disable-next-line import/no-internal-modules\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport * as React from \"react\";\nimport type { FieldValues, UseFormProps } from \"react-hook-form\";\nimport { useController, useForm as _useForm, useFormContext as _useFormContext, useFormState } from \"react-hook-form\";\nimport type { z } from \"zod\";\n\nimport type { EventFor, FormSchema } from \"./types\";\n\ntype UseFormOptions<TSchema extends FormSchema> = Pick<\n\tUseFormProps<z.infer<TSchema>>,\n\t\"defaultValues\" | \"shouldUnregister\" | \"values\" | \"reValidateMode\"\n>;\n\nexport type FormFieldNameProps = {\n\tname: string;\n};\n\nexport type UncontrolledFormFieldProps = FormFieldNameProps & {\n\tonChange?: (e: EventFor<\"input\" | \"textarea\", \"onChange\">) => void;\n\tonBlur?: (e: EventFor<\"input\" | \"textarea\", \"onBlur\">) => void;\n};\n\n// is there a way to prevent an empty {} from being passed?\nexport const useForm = <T extends FormSchema>(schema: T, options?: UseFormOptions<T>) => {\n\tconst methods = _useForm(\n\t\toptions != null ? { resolver: zodResolver(schema), ...options } : { resolver: zodResolver(schema) },\n\t);\n\tconst { setError } = methods;\n\tconst setRootError = React.useCallback(\n\t\t(message: string) => {\n\t\t\tsetError(\"root\", { type: \"root\", message });\n\t\t},\n\t\t[setError],\n\t);\n\n\treturn { ...methods, setRootError };\n};\n\nuseForm.displayName = \"useForm\";\n\nexport const useFormContext = <T extends FieldValues>() => {\n\tconst methods = _useFormContext<T>();\n\tconst { setError } = methods;\n\tconst setRootError = React.useCallback(\n\t\t(message: string) => {\n\t\t\tsetError(\"root\", { type: \"root\", message });\n\t\t},\n\t\t[setError],\n\t);\n\n\treturn { ...methods, setRootError };\n};\n\nuseFormContext.displayName = \"useFormContext\";\n\nexport const useControlledFormField = ({ name: fieldName }: FormFieldNameProps) => {\n\tconst { field, fieldState } = useController({ name: fieldName });\n\tconst { error } = fieldState;\n\n\treturn { ...field, error };\n};\n\nuseControlledFormField.displayName = \"useControlledFormField\";\n\nexport const useUncontrolledFormField = ({ name: fieldName, ...changeHandlers }: UncontrolledFormFieldProps) => {\n\tconst { register, getFieldState } = useFormContext();\n\tconst formState = useFormState();\n\n\tconst memoizedRegister = React.useCallback(() => {\n\t\tif (!changeHandlers) {\n\t\t\treturn register(fieldName);\n\t\t}\n\n\t\tconst { onChange, onBlur, ...restRegister } = register(fieldName);\n\n\t\tconst handleOnChange = async (event: EventFor<\"input\" | \"textarea\", \"onChange\">) => {\n\t\t\tawait onChange(event);\n\t\t\tchangeHandlers?.onChange?.(event);\n\t\t};\n\t\tconst handleOnBlur = async (event: EventFor<\"input\" | \"textarea\", \"onBlur\">) => {\n\t\t\tawait onBlur(event);\n\t\t\tchangeHandlers?.onBlur?.(event);\n\t\t};\n\n\t\treturn {\n\t\t\t// TODO: add id to register for easier linking with labels\n\t\t\t// id: register().name,\n\t\t\t...restRegister,\n\t\t\tonChange: changeHandlers?.onChange ? handleOnChange : onChange,\n\t\t\tonBlur: changeHandlers?.onBlur ? handleOnBlur : onBlur,\n\t\t};\n\t}, [changeHandlers, register, fieldName]);\n\n\tconst { error } = getFieldState(fieldName, formState);\n\n\treturn { register: memoizedRegister, error };\n};\n\nuseUncontrolledFormField.displayName = \"useUncontrolledFormField\";\n","import { createContext, PropsWithChildren, useContext, useMemo } from \"react\";\n\nimport { UncontrolledFormFieldProps, useUncontrolledFormField } from \"../hooks\";\n\nconst UncontrolledFieldContext = createContext<ReturnType<typeof useUncontrolledFormField> | undefined>(undefined);\n\nexport const UncontrolledFieldProvider = ({\n\tchildren,\n\t...restField\n}: UncontrolledFormFieldProps & PropsWithChildren) => {\n\tconst field = useUncontrolledFormField(restField);\n\tconst value = useMemo(() => field, [field]);\n\treturn <UncontrolledFieldContext.Provider value={value}>{children}</UncontrolledFieldContext.Provider>;\n};\n\nUncontrolledFieldProvider.displayName = \"UncontrolledFieldProvider\";\n\nexport const useUncontrolledField = () => {\n\tconst context = useContext(UncontrolledFieldContext);\n\tif (context) {\n\t\treturn context;\n\t}\n\t// if a defaultContext wasn't specified, it's a required context.\n\tthrow new Error(\"useUncontrolledField must be used within UncontrolledFieldProvider\");\n};\n\nuseUncontrolledField.displayName = \"useUncontrolledField\";\n\ntype UncontrolledFieldProps = UncontrolledFormFieldProps & {\n\trender: (props: ReturnType<typeof useUncontrolledFormField>) => React.ReactNode;\n};\nexport const UncontrolledField = ({ render, ...restField }: UncontrolledFieldProps) => {\n\treturn <>{render(useUncontrolledFormField(restField))}</>;\n};\n\nUncontrolledField.displayName = \"UncontrolledField\";\n","import type { FieldError, FieldErrors, FieldPath, FieldValues } from \"react-hook-form\";\nimport { get } from \"react-hook-form\";\n\nexport const getFieldError = <TFieldValues extends FieldValues>(\n\terrors: FieldErrors<TFieldValues> | undefined,\n\tname: FieldPath<TFieldValues> | undefined,\n) => {\n\tif (name == null || errors == null) {\n\t\treturn undefined;\n\t}\n\t// React Hook Form's `get` func returns `any`, so the assertion is needed for consumers to have completion\n\treturn get(errors, name) as FieldError | undefined;\n};\n","import { forwardRef } from \"react\";\n\nimport { InlineFormItem } from \"./InlineFormItem\";\nimport { NoneFormItem } from \"./NoneFormItem\";\nimport { SideBySideFormItem } from \"./SideBySideFormItem\";\nimport { StackedFormItem } from \"./StackedFormItem\";\nimport { FormItemVariants, InternalFormItemProps, SharedFormItemProps } from \"./types\";\n\ntype FormItemProps = InternalFormItemProps & SharedFormItemProps & { layout?: FormItemVariants };\n\nexport const FormItem = forwardRef<HTMLDivElement, FormItemProps>(({ layout = \"stacked\", ...rest }, ref) => {\n\tswitch (layout) {\n\t\tcase \"inline\":\n\t\t\treturn <InlineFormItem {...rest} ref={ref} />;\n\t\tcase \"side-by-side\":\n\t\t\treturn <SideBySideFormItem {...rest} ref={ref} />;\n\t\tcase \"stacked\":\n\t\t\treturn <StackedFormItem {...rest} ref={ref} />;\n\t\tcase \"none\":\n\t\t\treturn <NoneFormItem {...rest} ref={ref} />;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown form item layout: ${layout}`);\n\t}\n});\n\nexport type { FormItemVariants, SharedFormItemProps };\n","import { forwardRef } from \"react\";\n\nimport { FieldErrorTooltip } from \"./FieldErrorTooltip\";\nimport { InternalFormItemProps } from \"./types\";\n\nexport const InlineFormItem = forwardRef<HTMLSpanElement, InternalFormItemProps>(({ error, render }, ref) => {\n\treturn (\n\t\t<FieldErrorTooltip error={error}>\n\t\t\t<span ref={ref}>{render}</span>\n\t\t</FieldErrorTooltip>\n\t);\n});\n","import { ErrorText } from \"@/core/error-text/ErrorText\";\nimport { FieldError } from \"@/core/form\";\nimport { Tooltip } from \"@/core/tooltip\";\n\ntype FieldErrorTooltipProps = {\n\terror: FieldError | undefined;\n\tchildren: React.ReactNode;\n};\n\nexport const FieldErrorTooltip = ({ error, children }: FieldErrorTooltipProps) => {\n\treturn (\n\t\t<Tooltip\n\t\t\tvariant=\"light\"\n\t\t\t// if there's an error, undefined allows normal Tooltip behavior\n\t\t\t// otherwise, open is false, which disables the Tooltip\n\t\t\topen={error?.message ? undefined : false}\n\t\t\ttrigger={children}\n\t\t\tcontent={<ErrorText>{error?.message}</ErrorText>}\n\t\t/>\n\t);\n};\n","import React, { forwardRef } from \"react\";\n\nimport { FieldDescription } from \"./FieldDescription\";\nimport { FieldErrorMessage } from \"./FieldErrorMessage\";\nimport { FieldLabelWithTooltip } from \"./FieldLabelWithTooltip\";\nimport { InternalFormItemProps, SharedFormItemProps } from \"./types\";\n\nconst NoneFormItemImpl = (\n\t{ label, options, render, error }: InternalFormItemProps & SharedFormItemProps,\n\tref: React.ForwardedRef<HTMLDivElement>,\n) => (\n\t<>\n\t\t<div>\n\t\t\t<FieldLabelWithTooltip label={label} options={options} />\n\t\t\t<FieldDescription styles=\"pt-0.5\">{options?.description}</FieldDescription>\n\t\t</div>\n\t\t<div ref={ref}>\n\t\t\t{render}\n\t\t\t<FieldErrorMessage error={error} />\n\t\t\t{options?.bottomSlot}\n\t\t</div>\n\t</>\n);\n\nexport const NoneFormItem = forwardRef(NoneFormItemImpl);\n","import { twJoin } from \"tailwind-merge\";\n\nimport { StylesProps } from \"@/core/types\";\n\ntype FieldDescriptionProps = StylesProps & {\n\tchildren: React.ReactNode;\n};\n\nexport const FieldDescription = ({ styles, children }: FieldDescriptionProps) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn <p className={twJoin(\"text-sm text-gray-500\", styles)}>{children}</p>;\n};\n","import { faCircleExclamation } from \"@fortawesome/free-solid-svg-icons\";\n\nimport { ErrorText } from \"@/core/error-text/ErrorText\";\nimport { FieldError } from \"@/core/form\";\nimport { Icon } from \"@/core/icon\";\nimport { OverflowTooltip } from \"@/core/overflow-tooltip/OverflowTooltip\";\n\nfunction handleErrorOrErrorArrayMessage(error: FieldError | FieldError[]) {\n\tif (!Array.isArray(error)) {\n\t\treturn error.message;\n\t}\n\tif (error.length === 1) {\n\t\treturn error[0].message;\n\t}\n\treturn error.map((err: FieldError, index) => `Item ${index + 1}: ${err.message}`).join(\", \");\n}\n\ntype FieldErrorMessageProps = {\n\terror: FieldError | undefined;\n};\n\nexport const FieldErrorMessage = ({ error }: FieldErrorMessageProps) => {\n\tif (error == null) {\n\t\treturn null;\n\t}\n\tconst message = handleErrorOrErrorArrayMessage(error);\n\n\treturn (\n\t\t<div className=\"flex h-4.5 items-center gap-x-1 pt-0.5 text-sm\">\n\t\t\t<span className=\"text-red-400\">\n\t\t\t\t<Icon icon={faCircleExclamation} />\n\t\t\t</span>\n\t\t\t<OverflowTooltip\n\t\t\t\ttooltip={message}\n\t\t\t\telement={(ref) => (\n\t\t\t\t\t<ErrorText ref={ref} className=\"line-clamp-1 cursor-default break-all\">\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</ErrorText>\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import React from \"react\";\n\nimport { Tooltip } from \"../tooltip\";\n\ntype OverflowTooltipProps = Pick<React.ComponentPropsWithoutRef<typeof Tooltip>, \"side\" | \"variant\" | \"open\"> & {\n\ttooltip: React.ReactNode;\n\t/** The `elementRef` render prop should attach to a measurable DOM element.\n\t *\n\t * @example\n\t * element={elementRef => (\n\t * \t<span ref={elementRef} className=\"truncate ...\">\n\t * \t\t{text}\n\t * \t</span>\n\t * )}\n\t */\n\telement: (elementRef: React.RefObject<HTMLElement & HTMLDivElement>) => React.ReactElement;\n};\n\nexport const OverflowTooltip = ({ element, tooltip, side, variant, ...props }: OverflowTooltipProps) => {\n\treturn (\n\t\t<Tooltip.Root {...props}>\n\t\t\t<Tooltip.OverflowTrigger element={element} />\n\t\t\t<Tooltip.Content side={side} variant={variant}>\n\t\t\t\t{tooltip}\n\t\t\t</Tooltip.Content>\n\t\t</Tooltip.Root>\n\t);\n};\n","import { faCircleQuestion } from \"@fortawesome/free-solid-svg-icons\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"@/core/icon\";\nimport { Tooltip } from \"@/core/tooltip\";\nimport { StylesProps } from \"@/core/types\";\n\nimport { FieldLabel } from \"./FieldLabel\";\nimport { SharedFormItemProps } from \"./types\";\n\nexport const FieldLabelWithTooltip = ({ styles, label, options }: StylesProps & SharedFormItemProps) => {\n\tif (label == null) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<FieldLabel styles={twJoin(\"space-x-1\", styles)}>\n\t\t\t<span>{label}</span>\n\t\t\t{options?.optionalLabel && <span className=\"text-gray-400\">(Optional)</span>}\n\t\t\t{options?.tooltip && (\n\t\t\t\t<Tooltip\n\t\t\t\t\tcontent={options?.tooltip}\n\t\t\t\t\ttrigger={\n\t\t\t\t\t\t<span className=\"inline-flex items-baseline space-x-1\">\n\t\t\t\t\t\t\t<span className=\"leading-none\">\n\t\t\t\t\t\t\t\t{options.tooltipIcon ? (\n\t\t\t\t\t\t\t\t\toptions.tooltipIcon\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"text-gray-500\">\n\t\t\t\t\t\t\t\t\t\t<Icon icon={faCircleQuestion} />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{options?.tooltipLabel && <span className=\"font-normal text-gray-500\">{options?.tooltipLabel}</span>}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{options?.inlineLabelEndSlot}\n\t\t</FieldLabel>\n\t);\n};\n","import { twJoin } from \"tailwind-merge\";\n\nimport { StylesProps } from \"@/core/types\";\n\ntype FieldLabelProps = StylesProps & {\n\thtmlFor?: string;\n\tchildren: React.ReactNode;\n};\n\nexport const FieldLabel = ({ styles, htmlFor, children }: FieldLabelProps) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<label htmlFor={htmlFor} className={twJoin(\"block text-sm font-normal text-gray-500\", styles)}>\n\t\t\t{children}\n\t\t</label>\n\t);\n};\n","import { forwardRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { FieldDescription } from \"./FieldDescription\";\nimport { FieldErrorMessage } from \"./FieldErrorMessage\";\nimport { FieldLabelWithTooltip } from \"./FieldLabelWithTooltip\";\nimport { InternalFormItemProps, SharedFormItemProps } from \"./types\";\n\nexport const SideBySideFormItem = forwardRef<HTMLDivElement, InternalFormItemProps & SharedFormItemProps>(\n\t({ styles, label, options, render, error }, ref) => (\n\t\t<div className={twJoin(\"grid grid-cols-[minmax(0,2fr)_minmax(0,3fr)] gap-x-1\", styles)} ref={ref}>\n\t\t\t<div className=\"pt-2.5\">\n\t\t\t\t<FieldLabelWithTooltip label={label} options={options} />\n\t\t\t\t<FieldDescription styles=\"pt-0.5\">{options?.description}</FieldDescription>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t{render}\n\t\t\t\t<FieldErrorMessage error={error} />\n\t\t\t\t{options?.bottomSlot}\n\t\t\t</div>\n\t\t</div>\n\t),\n);\n","import { forwardRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { FieldDescription } from \"./FieldDescription\";\nimport { FieldErrorMessage } from \"./FieldErrorMessage\";\nimport { FieldLabelWithTooltip } from \"./FieldLabelWithTooltip\";\nimport { InternalFormItemProps, SharedFormItemProps } from \"./types\";\n\nexport const StackedFormItem = forwardRef<HTMLDivElement, InternalFormItemProps & SharedFormItemProps>(\n\t({ styles, label, options, render, error }, ref) => (\n\t\t<div className={styles || undefined} ref={ref}>\n\t\t\t<FieldLabelWithTooltip\n\t\t\t\tstyles={twJoin(\"flex items-baseline\", options?.description == null && \"pb-1\")}\n\t\t\t\tlabel={label}\n\t\t\t\toptions={options}\n\t\t\t/>\n\t\t\t<FieldDescription styles=\"pb-1\">{options?.description}</FieldDescription>\n\t\t\t{render}\n\t\t\t<FieldErrorMessage error={error} />\n\t\t\t{options?.bottomSlot}\n\t\t</div>\n\t),\n);\n","import { UncontrolledField, UncontrolledFormFieldProps } from \"@/core/form\";\nimport { Input, InputProps } from \"@/core/input\";\n\nimport { FormItem, SharedFormItemProps } from \"./form-item\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormInputProps = SharedFormControlProps &\n\tSharedFormItemProps &\n\tPick<UncontrolledFormFieldProps, \"onChange\" | \"onBlur\"> &\n\tPick<InputProps, \"placeholder\" | \"variant\" | \"prefix\" | \"type\" | \"step\" | \"autoFocus\" | \"min\" | \"max\">;\n\nexport const FormInput = ({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\toptions,\n\tonChange,\n\tonBlur,\n\tdisabled,\n\t...rest\n}: FormInputProps) => (\n\t<UncontrolledField\n\t\tname={name}\n\t\tonChange={onChange}\n\t\tonBlur={onBlur}\n\t\trender={({ error, register }) => (\n\t\t\t<FormItem\n\t\t\t\tlayout={layout}\n\t\t\t\tstyles={styles}\n\t\t\t\tlabel={label}\n\t\t\t\toptions={options}\n\t\t\t\trender={<Input {...register()} {...rest} disabled={disabled} hasError={!disabled && (!!error || undefined)} />}\n\t\t\t\terror={error}\n\t\t\t/>\n\t\t)}\n\t/>\n);\n","import { faCircleExclamation, faDollarSign, faTriangleExclamation } from \"@fortawesome/free-solid-svg-icons\";\nimport { ChangeEvent, forwardRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"@/core/icon\";\nimport { Input } from \"@/core/input\";\nimport { useSyncState } from \"@/core/utils/useSyncState\";\n\nimport { ControlledField } from \"./ControlledField\";\nimport { FormItem, SharedFormItemProps } from \"./form-item\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype DollarInputProps = {\n\tvalue: number | null | undefined; // amount in cents\n\tonChange?: (cents: number | null | undefined) => void;\n\tdisabled?: boolean;\n\thasError?: boolean;\n\thasWarning?: boolean;\n\tmessage?: string;\n};\n\nconst twoDecimalFormatter = Intl.NumberFormat(\"en-US\", {\n\tminimumFractionDigits: 2,\n\tmaximumFractionDigits: 2,\n});\n\n// Remove non-numeric characters except for commas, periods, and negative signs.\nconst formatInput = (value: string) => {\n\treturn value.replaceAll(/[^0-9.,-]/g, \"\");\n};\n\nconst roundToTwoDecimalPlaces = (value: number): number => {\n\t// Number.EPSILON is used to avoid floating point precision issues (without it 1.255 would round to 1.25 instead of 1.26 for example).\n\treturn Math.round((value + Number.EPSILON) * 100) / 100;\n};\n\n/**\n * DollarInput component for displaying and editing a monetary value.\n *\n * Exposes `cents` to consuming components, which is the value in cents.\n */\nexport const DollarInput = forwardRef<HTMLInputElement, DollarInputProps>(\n\t({ value, onChange, disabled = false, hasError = false, hasWarning = false, message }, ref) => {\n\t\t/**\n\t\t * Implementation notes:\n\t\t * - Internally, this component stores the value as a string to allow for better formatting and user input handling.\n\t\t * Externally, however, the value in this field is exposed as a number in cents.\n\t\t *\n\t\t * - onChange is also only called when the field is blurred. This is to allow a user to type any values, but only format once\n\t\t * they are done editing.\n\t\t */\n\t\tconst [strValue, setStrValue] = useSyncState<string>(value == null ? \"\" : twoDecimalFormatter.format(value / 100));\n\n\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst inputValue = formatInput(event.target.value);\n\n\t\t\t// Handle empty input (i.e., user clears the input)\n\t\t\tif (!inputValue) {\n\t\t\t\tsetStrValue(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow prefixing negative numbers or decimal points\n\t\t\tif (inputValue === \"-\" || inputValue === \".\") {\n\t\t\t\tsetStrValue(inputValue);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prevent typing more than two decimal places\n\t\t\tif (inputValue.split(\".\")?.[1]?.length > 2) return;\n\n\t\t\tconst parsedValue = parseFloat(inputValue);\n\t\t\tif (!isNaN(parsedValue)) {\n\t\t\t\tsetStrValue(inputValue);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n\t\t\tevent.preventDefault();\n\t\t\tconst pastedData = formatInput(event.clipboardData.getData(\"text\"));\n\t\t\tconst parsedAmount = parseFloat(pastedData);\n\n\t\t\tif (!isNaN(parsedAmount)) {\n\t\t\t\tsetStrValue(twoDecimalFormatter.format(parsedAmount));\n\t\t\t\tonChange?.(roundToTwoDecimalPlaces(parsedAmount * 100));\n\t\t\t}\n\t\t};\n\n\t\tconst handleBlur = () => {\n\t\t\tconst parsedValue = parseFloat(strValue.replaceAll(\",\", \"\"));\n\t\t\tif (isNaN(parsedValue)) {\n\t\t\t\tonChange?.(null);\n\t\t\t} else {\n\t\t\t\tonChange?.(roundToTwoDecimalPlaces(parsedValue * 100));\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-0.5\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\"flex h-md w-full items-center rounded-sm py-2.5 text-base [&>input]:rounded-l-none! [&>input]:rounded-r-md!\",\n\t\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\t\"cursor-not-allowed [&>input]:cursor-not-allowed [&>input]:bg-gray-50! [&>input]:text-gray-500!\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\"flex h-md w-9.5 items-center justify-center rounded-l-md border-y border-l px-2.5 text-sm text-gray-500\",\n\t\t\t\t\t\t\thasError\n\t\t\t\t\t\t\t\t? \"border-red-300 bg-red-200 text-red-700\"\n\t\t\t\t\t\t\t\t: hasWarning\n\t\t\t\t\t\t\t\t\t? \"border-yellow-300 bg-yellow-100 text-yellow-700\"\n\t\t\t\t\t\t\t\t\t: \"border-gray-200 bg-gray-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={faDollarSign} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={strValue}\n\t\t\t\t\t\thasError={hasError}\n\t\t\t\t\t\thasWarning={hasWarning}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\t\tplaceholder=\"0.00\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{hasWarning && message && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 text-sm font-normal text-yellow-700\">\n\t\t\t\t\t\t<Icon icon={faTriangleExclamation} />\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{hasError && message && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 text-sm font-normal text-red-700\">\n\t\t\t\t\t\t<Icon icon={faCircleExclamation} />\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\ntype FormDollarInputProps = SharedFormControlProps &\n\tSharedFormItemProps & { onChange?: (cents: number | null | undefined) => void } & Pick<\n\t\tDollarInputProps,\n\t\t\"hasWarning\" | \"message\"\n\t>;\n\nexport const FormDollarInput = forwardRef<HTMLInputElement, FormDollarInputProps>(\n\t({ name, layout, label, onChange, disabled, hasWarning = false, message, options }, ref) => (\n\t\t<ControlledField\n\t\t\tname={name}\n\t\t\trender={(field) => (\n\t\t\t\t<FormItem\n\t\t\t\t\tlabel={label}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\toptions={options}\n\t\t\t\t\terror={field.error}\n\t\t\t\t\trender={\n\t\t\t\t\t\t<DollarInput\n\t\t\t\t\t\t\tonChange={(cents: number | null | undefined) => {\n\t\t\t\t\t\t\t\tfield.onChange(cents);\n\t\t\t\t\t\t\t\tonChange?.(cents);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvalue={field.value as number | undefined}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\thasError={!disabled && (!!field.error || undefined)}\n\t\t\t\t\t\t\thasWarning={!disabled && hasWarning}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\t\t/>\n\t),\n);\n","import { useState } from \"react\";\n\nexport const useSyncState = <T>(upstream: T) => {\n\tconst [prevUpstream, setPrevUpstream] = useState(upstream);\n\tconst [state, setState] = useState(upstream);\n\n\tif (prevUpstream !== upstream) {\n\t\tsetState(upstream);\n\t\tsetPrevUpstream(upstream);\n\t}\n\n\treturn [state, setState] as const;\n};\n","import { faCircleExclamation, faPercent, faTriangleExclamation } from \"@fortawesome/free-solid-svg-icons\";\nimport { ChangeEvent, forwardRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"@/core/icon\";\nimport { Input } from \"@/core/input\";\nimport { useSyncState } from \"@/core/utils/useSyncState\";\n\nimport { ControlledField } from \"./ControlledField\";\nimport { FormItem, SharedFormItemProps } from \"./form-item\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype PercentInputProps = {\n\tvalue: number | null | undefined; // percentage value (0-100)\n\tonChange?: (percent: number | null | undefined) => void;\n\tdisabled?: boolean;\n\thasError?: boolean;\n\thasWarning?: boolean;\n\tmessage?: string;\n};\n\nconst twoDecimalFormatter = Intl.NumberFormat(\"en-US\", {\n\tminimumFractionDigits: 0,\n\tmaximumFractionDigits: 2,\n});\n\n// Remove non-numeric characters except for commas, periods.\nconst formatInput = (value: string) => {\n\treturn value.replaceAll(/[^0-9.,]/g, \"\");\n};\n\nconst roundToTwoDecimalPlaces = (value: number): number => {\n\treturn Math.round((value + Number.EPSILON) * 100) / 100;\n};\n\n/**\n * PercentInput component for displaying and editing a percentage value.\n *\n * Exposes `percent` to consuming components, which is the value as a number (0-100).\n */\nexport const PercentInput = forwardRef<HTMLInputElement, PercentInputProps>(\n\t({ value, onChange, disabled = false, hasError = false, hasWarning = false, message }, ref) => {\n\t\tconst [strValue, setStrValue] = useSyncState<string>(value == null ? \"\" : twoDecimalFormatter.format(value));\n\n\t\tconst handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst inputValue = formatInput(event.target.value);\n\n\t\t\t// Handle empty input (i.e., user clears the input)\n\t\t\tif (!inputValue) {\n\t\t\t\tsetStrValue(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow prefixing decimal points\n\t\t\tif (inputValue === \".\") {\n\t\t\t\tsetStrValue(inputValue);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Prevent typing more than two decimal places\n\t\t\tif (inputValue.split(\".\")?.[1]?.length > 2) return;\n\n\t\t\tconst parsedValue = parseFloat(inputValue);\n\t\t\tif (!isNaN(parsedValue)) {\n\t\t\t\tsetStrValue(inputValue);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n\t\t\tevent.preventDefault();\n\t\t\tconst pastedData = formatInput(event.clipboardData.getData(\"text\"));\n\t\t\tconst parsedAmount = parseFloat(pastedData);\n\n\t\t\tif (!isNaN(parsedAmount)) {\n\t\t\t\tsetStrValue(twoDecimalFormatter.format(parsedAmount));\n\t\t\t\tonChange?.(roundToTwoDecimalPlaces(parsedAmount));\n\t\t\t}\n\t\t};\n\n\t\tconst handleBlur = () => {\n\t\t\tconst parsedValue = parseFloat(strValue.replaceAll(\",\", \"\"));\n\t\t\tif (isNaN(parsedValue)) {\n\t\t\t\tonChange?.(null);\n\t\t\t} else {\n\t\t\t\tonChange?.(roundToTwoDecimalPlaces(parsedValue));\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-0.5\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\"flex h-md w-full items-center rounded-sm py-2.5 text-base [&>input]:rounded-l-none! [&>input]:rounded-r-md!\",\n\t\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\t\"cursor-not-allowed [&>input]:cursor-not-allowed [&>input]:bg-gray-50! [&>input]:text-gray-500!\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\"flex h-md w-9.5 items-center justify-center rounded-l-md border-y border-l px-2.5 text-sm text-gray-500\",\n\t\t\t\t\t\t\thasError\n\t\t\t\t\t\t\t\t? \"border-red-300 bg-red-200 text-red-700\"\n\t\t\t\t\t\t\t\t: hasWarning\n\t\t\t\t\t\t\t\t\t? \"border-yellow-300 bg-yellow-100 text-yellow-700\"\n\t\t\t\t\t\t\t\t\t: \"border-gray-200 bg-gray-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={faPercent} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={strValue}\n\t\t\t\t\t\thasError={hasError}\n\t\t\t\t\t\thasWarning={hasWarning}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\t\tplaceholder=\"0\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{hasWarning && message && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 text-sm font-normal text-yellow-700\">\n\t\t\t\t\t\t<Icon icon={faTriangleExclamation} />\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{hasError && message && (\n\t\t\t\t\t<div className=\"flex items-center gap-1 text-sm font-normal text-red-700\">\n\t\t\t\t\t\t<Icon icon={faCircleExclamation} />\n\t\t\t\t\t\t{message}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\ntype FormPercentInputProps = SharedFormControlProps &\n\tSharedFormItemProps & { onChange?: (percent: number | null | undefined) => void } & Pick<\n\t\tPercentInputProps,\n\t\t\"hasWarning\" | \"message\"\n\t>;\n\nexport const FormPercentInput = forwardRef<HTMLInputElement, FormPercentInputProps>(\n\t({ name, layout, label, onChange, disabled, hasWarning = false, message, options }, ref) => (\n\t\t<ControlledField\n\t\t\tname={name}\n\t\t\trender={(field) => (\n\t\t\t\t<FormItem\n\t\t\t\t\tlabel={label}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\toptions={options}\n\t\t\t\t\terror={field.error}\n\t\t\t\t\trender={\n\t\t\t\t\t\t<PercentInput\n\t\t\t\t\t\t\tonChange={(percent: number | null | undefined) => {\n\t\t\t\t\t\t\t\tfield.onChange(percent);\n\t\t\t\t\t\t\t\tonChange?.(percent);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvalue={field.value as number | undefined}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\thasError={!disabled && (!!field.error || undefined)}\n\t\t\t\t\t\t\thasWarning={!disabled && hasWarning}\n\t\t\t\t\t\t\tmessage={message}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t)}\n\t\t/>\n\t),\n);\n","import { Checkbox } from \"@/core/checkbox\";\nimport { ControlledFieldProvider, EventFor, useControlledField, useControlledFormField } from \"@/core/form\";\nimport { FieldLabel } from \"@/core/form/components/form-item/FieldLabel\";\n\nimport { FieldErrorMessage } from \"./form-item/FieldErrorMessage\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormCheckboxProps = Pick<SharedFormControlProps, \"name\" | \"disabled\"> & {\n\tchildren?: React.ReactNode;\n\tonChange?: (checked: boolean) => void;\n};\n\nexport const FormCheckbox = ({ name, disabled, onChange: propsOnChange, children }: FormCheckboxProps) => {\n\tconst {\n\t\tonChange,\n\t\terror,\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tvalue,\n\t\t...field\n\t} = useControlledFormField({ name });\n\n\tconst handleChange = (e: EventFor<\"input\", \"onChange\">) => {\n\t\tconst { checked } = e.target;\n\t\tonChange(checked);\n\t\tpropsOnChange?.(checked);\n\t};\n\n\tif (children == null) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Checkbox\n\t\t\t\t\t{...field}\n\t\t\t\t\tid={name}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tchecked={!!value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\thasError={!!error}\n\t\t\t\t/>\n\t\t\t\t<FieldErrorMessage error={error} />\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ControlledFieldProvider name={name}>\n\t\t\t{children}\n\t\t\t<FieldErrorMessage error={error} />\n\t\t</ControlledFieldProvider>\n\t);\n};\n\nfunction CheckboxImpl({ onChange: propsOnChange }: { onChange?: (checked: boolean) => void }) {\n\tconst {\n\t\tname,\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tvalue,\n\t\tonChange,\n\t\terror,\n\t\t...field\n\t} = useControlledField();\n\n\tconst handleChange = (e: EventFor<\"input\", \"onChange\">) => {\n\t\tconst { checked } = e.target;\n\t\tonChange(checked);\n\t\tpropsOnChange?.(checked);\n\t};\n\n\treturn <Checkbox {...field} id={name} checked={!!value} onChange={handleChange} hasError={!!error} />;\n}\n\nfunction LabelImpl({ children, className }: { children: React.ReactNode; className?: string }) {\n\tconst { name } = useControlledField();\n\n\treturn (\n\t\t<FieldLabel htmlFor={name} styles={className}>\n\t\t\t{children}\n\t\t</FieldLabel>\n\t);\n}\n\nFormCheckbox.Label = LabelImpl;\nFormCheckbox.Checkbox = CheckboxImpl;\n","import { ControllerRenderProps, FieldError } from \"@/core/form\";\nimport { FormItem, SharedFormItemProps } from \"@/core/form/components/form-item\";\nimport { SharedFormControlProps } from \"@/core/form/components/types\";\nimport { useControlledFormField } from \"@/core/form/hooks\";\n\ntype FormItemRender<T> = Simplify<Omit<ControllerRenderProps, \"value\"> & { value: T; error?: FieldError }>;\n\ntype ControlledFormItemProps<T = string> = Simplify<\n\tSharedFormControlProps &\n\t\tSharedFormItemProps & {\n\t\t\trender: (field: FormItemRender<T>) => React.ReactNode;\n\t\t}\n>;\nexport const ControlledFormItem = <T = string,>({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\toptions,\n\trender,\n}: ControlledFormItemProps<T>) => {\n\tconst field = useControlledFormField({ name });\n\n\treturn (\n\t\t<FormItem\n\t\t\tlayout={layout}\n\t\t\tstyles={styles}\n\t\t\tlabel={label}\n\t\t\toptions={options}\n\t\t\trender={render(field)}\n\t\t\terror={field.error}\n\t\t/>\n\t);\n};\n","import { SelectItem, SelectValue } from \"./selectItem\";\n\nexport const DEFAULT_NUM_VALUES_TO_SHOW = 2;\n\n/**\n * Props to control the loading and error states of an AsyncSelect component.\n */\nexport type LoadProps = {\n\tisLoading: boolean;\n\tisError: boolean;\n\tcanLoadMore: boolean;\n\tonLoadMore: () => void;\n};\n\n/**\n * Props for the AsyncMultiSelect component, the most unopinionated of the Select components and the base\n * of all the others.\n */\nexport type AsyncMultiSelectProps<T extends SelectValue> = {\n\tvalue?: T[];\n\tonChange?: (value: T[]) => void;\n\tdisabled?: boolean;\n\ttriggerPlaceholder?: string;\n\tvariant?: \"default\" | \"simple\";\n\t/**\n\t * Number of selected values to show by default. If more than this number are selected, the select will\n\t * render a button to expand the list. Defaults to {@link DEFAULT_NUM_VALUES_TO_SHOW}.\n\t */\n\tnumValuesToShow?: number;\n\t/**\n\t * If true, this select will strictly enforce ordering of the items. Items added first will\n\t * be displayed first, and the user can reorder items by dragging them. Defaults to false.\n\t */\n\tordered?: boolean;\n\t/**\n\t * Hide the search field. Defaults to false. Recommended only for Selects with a small number of items.\n\t */\n\thideSearch?: boolean;\n\tsearchPlaceholder?: string;\n\t/**\n\t * Callback when the user types in the input field.\n\t */\n\tonSearchChange?: (query: string) => void;\n\t/**\n\t * All items that the Select knows about, for both selected and unselected values.\n\t *\n\t * This list should eventually include items for ALL values that are selected,\n\t * including custom values. *The component will render a loading state until then.*\n\t *\n\t * This list may not necessarily include all available items, e.g., if the user\n\t * is searching or if the list is paginated.\n\t */\n\titems: SelectItem<T>[];\n\t/**\n\t * Optional props to control the loading and error states of the AsyncMultiSelect, which can add item(s)\n\t * to the bottom of the dropdown that convey and control this state.\n\t */\n\tloadProps?: LoadProps;\n\t/**\n\t * Min number of items that must be selected. Defaults to 0. If 1, the user cannot\n\t * unselect the last item.\n\t */\n\tminSelection?: 0 | 1;\n\t/**\n\t * Max number of items that can be selected. Defaults to unlimited.\n\t */\n\tmaxSelection?: number | \"unlimited\";\n\t/**\n\t * If true, the user can enter custom values. Defaults to false.\n\t * Can only be true if T is string.\n\t */\n\tallowCustomValues?: T extends string ? boolean : false;\n\tisValidCustomValue?: (value: string) => boolean;\n\t/**\n\t * What to do when \"Select all\" is clicked (only shown if there are no items selected).\n\t * If not provided, no \"Select all\" button will be shown.\n\t */\n\tonSelectAll?: () => void;\n\thasError?: boolean;\n\tpopover?: {\n\t\tcustomTrigger?: React.ReactNode;\n\t\tcontentClassName?: string;\n\t\ttriggerClassName?: string;\n\t\tcontainer?: Element;\n\t};\n\temptyState?: React.ReactNode;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tonOpen?: () => void;\n\tonClose?: () => void;\n};\n\n/**\n * Props for the AsyncSelect component, which is a wrapper around AsyncMultiSelect that only allows\n * a single item to be selected.\n */\ntype UnselectableProps<T extends SelectValue> = {\n\tvalue?: T;\n\tonChange?: (value: T | undefined) => void;\n\tallowUnselect: boolean;\n};\ntype NotUnselectableProps<T extends SelectValue> = {\n\tvalue?: T;\n\tonChange?: (value: T) => void;\n\tallowUnselect?: false;\n};\nexport type AsyncSelectProps<T extends SelectValue> = Simplify<\n\t(UnselectableProps<T> | NotUnselectableProps<T>) &\n\t\tOmit<AsyncMultiSelectProps<T>, \"value\" | \"onChange\" | \"minSelection\" | \"maxSelection\" | \"onSelectAll\">\n>;\n\n/**\n * Props for the MultiSelect component, which is a wrapper around AsyncMultiSelect that does not\n * require async loading (and assumes that all options are always available).\n */\nexport type MultiSelectProps<T extends SelectValue> = {\n\t/**\n\t * A function for creating a select option given a custom value. This is used to render\n\t * the selected items both in the trigger and in the dropdown.\n\t */\n\tcustomValueToOption?: string extends T ? (value: string) => SelectItem<T> : never;\n} & Omit<AsyncMultiSelectProps<T>, \"debounceMs\">;\n\n/**\n * Props for the Select component, which is a wrapper around MultiSelect that only allows\n * a single item to be selected.\n */\nexport type SelectProps<T extends SelectValue> = (UnselectableProps<T> | NotUnselectableProps<T>) &\n\tOmit<MultiSelectProps<T>, \"value\" | \"onChange\" | \"minSelection\" | \"maxSelection\" | \"onSelectAll\">;\n\nexport type SelectWithUnselectProps<T extends SelectValue> = Omit<UnselectableProps<T>, \"allowUnselect\"> &\n\tOmit<MultiSelectProps<T>, \"value\" | \"onChange\" | \"minSelection\" | \"maxSelection\" | \"onSelectAll\">;\n\n/**\n * Helper type for async single-select components with enriched object callback.\n * Makes it easy to define custom select component props.\n */\nexport type AsyncSelectControlledProps<TValue extends SelectValue, TObj> = {\n\tvalue: TValue | undefined;\n\tonChange: (value: TValue | undefined, obj: TObj | undefined) => void;\n};\n\n/**\n * Helper type for async multi-select components with enriched object callback.\n * Makes it easy to define custom multi-select component props.\n */\nexport type AsyncMultiSelectControlledProps<TValue extends SelectValue, TObj> = {\n\tvalue: TValue[];\n\tonChange: (value: TValue[] | undefined, objs: TObj[]) => void;\n};\n","export type SelectValue = string | number;\n\n/**\n * An item in a Select component. This could represent an available option, or a selected value.\n */\nexport type SelectItem<TValue extends SelectValue = string> = {\n\t/**\n\t * The value of the option. Must be unique and extend either string or number.\n\t */\n\tvalue: TValue;\n\t/**\n\t * Label to show in the select dropdown and trigger.\n\t */\n\tlabel: string;\n\t/**\n\t * Optional unique key for React rendering. Use when value may not be unique.\n\t * Falls back to value if not provided.\n\t */\n\treactKey?: string;\n\t/**\n\t * Optional React node to show in the select dropdown, but not in the trigger.\n\t */\n\tdisplay?: React.ReactNode;\n\ticon?: React.ReactNode;\n\tdisabled?: boolean;\n\t/**\n\t * Predicate to determine if the option matches a query.\n\t * Default is to match if the lowercase label contains the lowercase query.\n\t * @param query search query\n\t * @returns whether the option matches the query\n\t */\n\tisMatch?: (query: string) => boolean;\n};\n\n/**\n * Returns true if the option matches the query.\n * @param option\n * @param query\n * @returns\n */\nexport function doesSelectItemMatch<T extends SelectValue>(option: SelectItem<T>, query: string | undefined): boolean {\n\tif (!query) {\n\t\treturn true;\n\t}\n\tif (option.isMatch) {\n\t\treturn option.isMatch(query);\n\t}\n\treturn option.label.toLowerCase().includes(query.toLowerCase());\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport { LoadProps } from \"./props\";\nimport { SelectItem, SelectValue } from \"./selectItem\";\n\nexport function useDebounce<T>(value: T, delay: number) {\n\tconst [debouncedValue, setDebouncedValue] = useState(value);\n\tuseEffect(() => {\n\t\tconst handler = setTimeout(() => {\n\t\t\tsetDebouncedValue(value);\n\t\t}, delay);\n\t\treturn () => {\n\t\t\tclearTimeout(handler);\n\t\t};\n\t}, [value, delay]);\n\treturn debouncedValue;\n}\n\ntype ErrorOr<T> = { error: true } | { error: false; value: T };\n\nexport type UseAsyncMultiSelectArgs<TValue extends SelectValue, TObj, TPage> = {\n\tvalue: TValue[];\n\t/**\n\t * Fetch objects associated with the selected values.\n\t *\n\t * If the select allows custom values, then some values may not resolve to a\n\t * corresponding object (determined by objToItem). In this case, these values\n\t * will be converted to items using customValueToItem.\n\t * @param values current selected items\n\t * @returns list of objects corresponding to the selected values\n\t */\n\tfetchValues: (values: TValue[]) => Promise<ErrorOr<TObj[]>>;\n\t/**\n\t * Fetch objects matching a search term and page token. This is used to render\n\t * available options in the dropdown.\n\t * @param query query the user has searched\n\t * @param page page token\n\t * @returns the results and the next page token, if any\n\t */\n\tfetchOptions: (\n\t\tquery: string,\n\t\tpage: TPage | undefined,\n\t) => Promise<\n\t\tErrorOr<{\n\t\t\tresults: TObj[];\n\t\t\tnextPage?: TPage;\n\t\t}>\n\t>;\n\t/**\n\t * Convert an object returned from a query to a select item.\n\t * @param obj\n\t * @returns\n\t */\n\tobjToItem: (obj: TObj) => SelectItem<TValue>;\n\t/**\n\t * Convert a custom value to a select item. *Only provide this if the select\n\t * accepts custom values.*\n\t *\n\t * If this is not provided, the select will render a loading state until all\n\t * values have been resolved to objects by fetchValues.\n\t *\n\t * TODO: how to handle cases where custom values are disallowed, but a value\n\t * previously entered by the user is no longer present on the backend?\n\t * @param value\n\t * @returns\n\t */\n\tcustomValueToItem?: (value: TValue) => SelectItem<TValue>;\n\tqueryKeyPrefix: string | string[] | readonly string[];\n};\n\n/**\n * Utility hook for fetching data and getting props for AsyncMultiSelect.\n */\nexport function useAsyncMultiSelect<TValue extends SelectValue, TObj, TPage>({\n\tvalue,\n\tfetchValues,\n\tfetchOptions,\n\tobjToItem,\n\tcustomValueToItem,\n\tqueryKeyPrefix,\n}: UseAsyncMultiSelectArgs<TValue, TObj, TPage>) {\n\tconst [query, setQuery] = useState(\"\");\n\tconst [page, setPage] = useState<TPage | undefined>(undefined);\n\tconst debouncedSearchTerm = useDebounce(query, 500);\n\n\tconst key = Array.isArray(queryKeyPrefix) ? queryKeyPrefix : [queryKeyPrefix];\n\n\t// loading is handled by the select component - it renders a loading state\n\t// if any of the values are not resolved by this query (and no customValueToItem) is provided\n\t// TODO: handle error state\n\tconst { data: fetchedValues } = useQuery({\n\t\tqueryKey: [...key, \"values\", value],\n\t\tqueryFn: () => fetchValues(value),\n\t\tenabled: !!value,\n\t});\n\n\tconst {\n\t\tdata: fetchedOptions,\n\t\tisLoading: isLoadingOptions,\n\t\terror: optionsError,\n\t} = useQuery({\n\t\tqueryKey: [...key, \"options\", debouncedSearchTerm, page],\n\t\tqueryFn: () => fetchOptions(debouncedSearchTerm, page),\n\t});\n\n\tconst selectItems = useMemo(() => {\n\t\tconst fetchedValueItems = fetchedValues?.error === false ? fetchedValues.value.map(objToItem) : [];\n\t\tconst customItems = customValueToItem\n\t\t\t? value.filter((v) => !fetchedValueItems.some((i) => i.value === v)).map((v) => customValueToItem(v))\n\t\t\t: [];\n\t\tconst fetchedOptionItems = fetchedOptions?.error === false ? fetchedOptions.value.results.map(objToItem) : [];\n\n\t\treturn [...fetchedValueItems, ...customItems, ...fetchedOptionItems];\n\t}, [objToItem, value, fetchedValues, fetchedOptions, customValueToItem]);\n\n\tconst loadProps: LoadProps = {\n\t\tisLoading: isLoadingOptions,\n\t\tisError: !!(optionsError || !fetchedOptions || fetchedOptions.error),\n\t\tcanLoadMore: !fetchedOptions?.error ? !!fetchedOptions?.value?.nextPage : false,\n\t\tonLoadMore: () => {\n\t\t\tif (!fetchedOptions?.error) {\n\t\t\t\tsetPage(fetchedOptions?.value?.nextPage);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn {\n\t\tsetQuery,\n\t\tselectItems,\n\t\tloadProps,\n\t\tqueriedObjects: [\n\t\t\t...(fetchedValues?.error === false ? fetchedValues.value : []),\n\t\t\t...(fetchedOptions?.error === false ? fetchedOptions.value.results : []),\n\t\t],\n\t};\n}\n\nexport type UseAsyncSelectArgs<TValue extends SelectValue, TObj, TPage> = {\n\tvalue: TValue | undefined;\n\tfetchValue: (value: TValue) => Promise<ErrorOr<TObj | undefined>>;\n} & Omit<UseAsyncMultiSelectArgs<TValue, TObj, TPage>, \"value\" | \"fetchValues\">;\n\n/**\n * Utility hook for fetching data and getting props for AsyncSelect.\n */\nexport const useAsyncSelect = <TValue extends SelectValue, TObj, TPage>({\n\tvalue,\n\tfetchValue,\n\t...rest\n}: UseAsyncSelectArgs<TValue, TObj, TPage>) =>\n\tuseAsyncMultiSelect({\n\t\tvalue: value ? [value] : [],\n\t\tfetchValues: async (values) => {\n\t\t\tif (!values[0]) {\n\t\t\t\treturn {\n\t\t\t\t\terror: false,\n\t\t\t\t\tvalue: [],\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst result = await fetchValue(values[0]);\n\t\t\tif (result.error) return result;\n\t\t\treturn {\n\t\t\t\terror: false,\n\t\t\t\tvalue: result.value ? [result.value] : [],\n\t\t\t};\n\t\t},\n\t\t...rest,\n\t});\n","import { DndContext, DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { faArrowTurnDown, faCheck, faMagnifyingGlass, faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { useMemo, useRef, useState } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { DropdownChevron } from \"@/core/dropdown-chevron\";\nimport { Icon } from \"@/core/icon\";\nimport { InputBox, inputBoxStyles } from \"@/core/input\";\nimport { Popover } from \"@/core/popover\";\n\nimport { AsyncMultiSelectProps, DEFAULT_NUM_VALUES_TO_SHOW } from \"./props\";\nimport { doesSelectItemMatch, SelectItem } from \"./selectItem\";\nimport { SelectListItem, SelectListItemProps } from \"./SelectListItem\";\n\n/**\n * The most unopinionated of the family of Select components, the base for all the others.\n * Supports asynchronous loading (and does not assume that all available options are provided\n * in the `options` prop).\n */\nexport const AsyncMultiSelect = <TValue extends string | number>({\n\tvalue = [],\n\tonChange,\n\tdisabled = false,\n\tordered,\n\tvariant,\n\ttriggerPlaceholder,\n\thideSearch = false,\n\tsearchPlaceholder = \"Search...\",\n\titems,\n\tloadProps,\n\tonSearchChange,\n\tminSelection = 0,\n\tmaxSelection = \"unlimited\",\n\tallowCustomValues,\n\thasError,\n\tpopover,\n\tisValidCustomValue = () => true,\n\tonSelectAll,\n\tnumValuesToShow,\n\temptyState,\n\tsize,\n\tonOpen,\n\tonClose,\n}: AsyncMultiSelectProps<TValue>) => {\n\tconst [open, setOpen] = useState(false);\n\tconst [search, setSearch] = useState(\"\");\n\tconst [focusIndex, setFocusIndex] = useState(0);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\tconst unselectedOptions = useMemo(() => items.filter((item) => !value.includes(item.value)), [items, value]);\n\n\tconst resetSearch = () => {\n\t\tsetSearch(\"\");\n\t\tonSearchChange?.(\"\");\n\t};\n\n\tconst handleClose = () => {\n\t\tsetOpen(false);\n\t\tresetSearch();\n\t\tsetFocusIndex(0);\n\t\tonClose?.();\n\t};\n\n\tconst searchMatchesExistingOption =\n\t\tvalue.some((v) => v.toString().toLowerCase() === search.toLowerCase()) ||\n\t\tunselectedOptions.find((opt) => opt.value?.toString().toLowerCase() === search.toLowerCase());\n\tconst showCustomItem =\n\t\tallowCustomValues &&\n\t\t!!search &&\n\t\t!loadProps?.isLoading &&\n\t\t!searchMatchesExistingOption &&\n\t\tisValidCustomValue(search);\n\n\tconst isCustomValueSelected = useMemo(\n\t\t() => allowCustomValues && value.some((v) => !items.map((item) => item.value).includes(v)),\n\t\t[allowCustomValues, items, value],\n\t);\n\tconst showCustomValue = isCustomValueSelected && !loadProps?.isLoading;\n\n\tconst handleAddCustomItem = () => {\n\t\tif (maxSelection === 1) {\n\t\t\tsetOpen(false);\n\t\t\tonChange?.([search as TValue]);\n\t\t} else {\n\t\t\tonChange?.([...value, search as TValue]);\n\t\t}\n\t\tresetSearch();\n\t};\n\n\tconst handleOptionSelected = (val: TValue) => {\n\t\tif (maxSelection === 1) {\n\t\t\tonChange?.([val]);\n\t\t\thandleClose();\n\t\t} else {\n\t\t\tlet items = ordered ? [...value, val] : [val, ...value];\n\t\t\tif (maxSelection !== \"unlimited\") {\n\t\t\t\titems = items.slice(0, maxSelection);\n\t\t\t}\n\n\t\t\tonChange?.(items);\n\t\t}\n\t\tif (inputRef.current) {\n\t\t\tinputRef.current.select();\n\t\t}\n\t};\n\n\tconst totalNumItems = unselectedOptions.length + (showCustomItem ? 1 : 0);\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusIndex((prev) => (prev + 1) % totalNumItems);\n\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tsetFocusIndex((prev) => Math.max(prev - 1, 0));\n\t\t} else if (e.key === \"Enter\") {\n\t\t\te.preventDefault();\n\t\t\tif (focusIndex === 0 && showCustomItem) {\n\t\t\t\thandleAddCustomItem();\n\t\t\t} else if (totalNumItems > focusIndex) {\n\t\t\t\tconst unselectedOptionsIndex = focusIndex - (showCustomItem ? 1 : 0);\n\t\t\t\tif (!unselectedOptions[unselectedOptionsIndex].disabled) {\n\t\t\t\t\thandleOptionSelected(unselectedOptions[unselectedOptionsIndex].value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (e.key === \"Tab\") {\n\t\t\te.preventDefault();\n\t\t\tsetOpen(false);\n\t\t}\n\t};\n\n\tconst handleSearchTermChange = (val: string) => {\n\t\tsetSearch(val);\n\t\tsetFocusIndex(0);\n\t\tonSearchChange?.(val);\n\t};\n\n\t// If a user types while the select menu is focused but not open,\n\t// open the menu and start searching with the key that was pressed.\n\tconst handleTriggerKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (!hideSearch && !e.ctrlKey && !e.metaKey && !e.altKey) {\n\t\t\tsetOpen(true);\n\t\t\tonOpen?.();\n\t\t\thandleSearchTermChange(e.key);\n\t\t}\n\t};\n\n\tconst valueToOptionMap = useMemo(() => {\n\t\tconst map = new Map<TValue, SelectItem<TValue>>();\n\t\titems.forEach((item) => map.set(item.value, item));\n\t\treturn map;\n\t}, [items]);\n\n\tconst allValuesHaveOptions = useMemo(\n\t\t() => value.every((val) => valueToOptionMap.has(val)) || showCustomValue,\n\t\t[value, valueToOptionMap, showCustomValue],\n\t);\n\n\tconst triggerText = useMemo(() => {\n\t\tif (value.length === 0) {\n\t\t\treturn (\n\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t{triggerPlaceholder ?? `Select ${maxSelection === 1 ? \"an item...\" : \"items...\"}`}\n\t\t\t\t</span>\n\t\t\t);\n\t\t}\n\n\t\tif (!allValuesHaveOptions) {\n\t\t\t// all values must eventually have associated options, but if they don't yet, show a loading state\n\t\t\treturn <span className=\"line-clamp-1\">Loading...</span>;\n\t\t}\n\n\t\tconst optionMatchingFirstVal =\n\t\t\tvalueToOptionMap.get(value[0]) ||\n\t\t\t({\n\t\t\t\tlabel: value[0],\n\t\t\t\ticon: undefined,\n\t\t\t} as SelectItem<TValue>);\n\t\tconst firstValText = optionMatchingFirstVal ? optionMatchingFirstVal.label : value[0];\n\t\tconst icon = value.length === 1 ? optionMatchingFirstVal?.icon : undefined;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{icon && <span className=\"mr-1 inline-flex items-center\">{icon}</span>}\n\t\t\t\t<span className=\"line-clamp-1 text-left\">{`${firstValText}${value.length > 1 ? \",\" : \"\"}`}</span>\n\t\t\t\t{value.length > 1 && <span className=\"whitespace-nowrap\">{`+${value.length - 1} more`}</span>}\n\t\t\t</>\n\t\t);\n\t}, [maxSelection, valueToOptionMap, triggerPlaceholder, value, allValuesHaveOptions]);\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open && !disabled}\n\t\t\tonOpenChange={(val) => {\n\t\t\t\tif (val) {\n\t\t\t\t\tsetOpen(true);\n\t\t\t\t\tonOpen?.();\n\t\t\t\t} else {\n\t\t\t\t\thandleClose();\n\t\t\t\t}\n\t\t\t}}\n\t\t\talignContent=\"start\"\n\t\t\tdisabled={disabled}\n\t\t\ttriggerClassName={popover?.triggerClassName}\n\t\t\tcontentClassName={popover?.contentClassName}\n\t\t\tcontainer={popover?.container}\n\t\t\ttrigger={\n\t\t\t\tpopover?.customTrigger ??\n\t\t\t\t(variant === \"simple\" ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tonKeyDown={handleTriggerKeyDown}\n\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\"-mx-2 -my-1.5 flex cursor-pointer items-center justify-between gap-1.5 rounded-md px-2 py-1.5 transition-all duration-150\",\n\t\t\t\t\t\t\t!disabled && \"cursor-pointer hover:bg-gray-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\t\"line-clamp-1 flex flex-1 items-center\",\n\t\t\t\t\t\t\t\tvalue.length !== 0 ? \"text-inherit\" : \"text-gray-500\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{triggerText}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!disabled && <DropdownChevron />}\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<button onKeyDown={handleTriggerKeyDown} className={twJoin(\"w-full\", inputBoxStyles({ hasError, size }))}>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={`mr-auto line-clamp-1 flex items-center space-x-1 text-left text-base ${\n\t\t\t\t\t\t\t\tvalue.length === 0 ? \"text-gray-400\" : \"text-gray-800\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{triggerText}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<DropdownChevron />\n\t\t\t\t\t</button>\n\t\t\t\t))\n\t\t\t}\n\t\t>\n\t\t\t<div className=\"w-72\">\n\t\t\t\t{(!hideSearch || allowCustomValues) && (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<InputBox variant=\"transparent\">\n\t\t\t\t\t\t\t<div className=\"w-3 text-sm text-gray-400\">\n\t\t\t\t\t\t\t\t<Icon icon={faMagnifyingGlass} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<InputBox.Input\n\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\t\tonChange={(e) => handleSearchTermChange(e.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\t\tonBlur={(e) => e.target.focus()}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputBox>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<ul className=\"max-h-72 space-y-1 overflow-y-auto p-1\">\n\t\t\t\t\t{!allValuesHaveOptions ? (\n\t\t\t\t\t\t<SelectListItem disabled>Loading...</SelectListItem>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SelectedItems\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\tsearch={search}\n\t\t\t\t\t\t\tvalueToOptionMap={valueToOptionMap}\n\t\t\t\t\t\t\tonSelectAll={onSelectAll}\n\t\t\t\t\t\t\tminSelection={minSelection}\n\t\t\t\t\t\t\tordered={ordered}\n\t\t\t\t\t\t\tnumValuesToShow={numValuesToShow}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{showCustomItem && (\n\t\t\t\t\t\t<SelectOption onClick={handleAddCustomItem} focused={showCustomItem && focusIndex === 0}>\n\t\t\t\t\t\t\t<span>{`\"${search}\"`}</span>\n\t\t\t\t\t\t</SelectOption>\n\t\t\t\t\t)}\n\t\t\t\t\t{unselectedOptions.map((item, i) => (\n\t\t\t\t\t\t<SelectOption\n\t\t\t\t\t\t\tkey={item.reactKey ?? item.value}\n\t\t\t\t\t\t\tonClick={() => handleOptionSelected(item.value)}\n\t\t\t\t\t\t\tfocused={focusIndex === (showCustomItem ? i + 1 : i)}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.display ?? item.label}\n\t\t\t\t\t\t</SelectOption>\n\t\t\t\t\t))}\n\t\t\t\t\t{!loadProps ? (\n\t\t\t\t\t\t// no asynchronous loading\n\t\t\t\t\t\tunselectedOptions.length === 0 && (emptyState || <SelectListItem disabled>No results</SelectListItem>)\n\t\t\t\t\t) : loadProps.isLoading ? (\n\t\t\t\t\t\t<SelectListItem disabled>Loading...</SelectListItem>\n\t\t\t\t\t) : loadProps.isError ? (\n\t\t\t\t\t\t<SelectListItem disabled>An error occurred</SelectListItem>\n\t\t\t\t\t) : unselectedOptions.length === 0 ? (\n\t\t\t\t\t\temptyState || <SelectListItem disabled>No results</SelectListItem>\n\t\t\t\t\t) : loadProps.canLoadMore ? (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"cursor-pointer px-2 py-1 text-sm font-medium text-indigo-600\"\n\t\t\t\t\t\t\tonClick={loadProps.onLoadMore}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tLoad more...\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</Popover>\n\t);\n};\n\nconst SelectOption = ({ children, focused, ...rest }: SelectListItemProps) => (\n\t<SelectListItem focused={focused} {...rest}>\n\t\t{children}\n\t\t{focused && !rest.disabled && (\n\t\t\t<span className=\"w-3 text-sm text-gray-500\">\n\t\t\t\t<Icon icon={faArrowTurnDown} />\n\t\t\t</span>\n\t\t)}\n\t</SelectListItem>\n);\n\ntype SelectedItemsProps<TValue extends string | number> = Pick<\n\tAsyncMultiSelectProps<TValue>,\n\t\"value\" | \"onChange\" | \"onSelectAll\" | \"minSelection\" | \"ordered\" | \"numValuesToShow\"\n> & {\n\tsearch: string;\n\tvalueToOptionMap: Map<TValue, SelectItem<TValue>>;\n};\nconst SelectedItems = <TValue extends string | number>({\n\tvalue = [],\n\tonChange,\n\tonSelectAll,\n\tminSelection,\n\tsearch,\n\tvalueToOptionMap,\n\tordered,\n\tnumValuesToShow = DEFAULT_NUM_VALUES_TO_SHOW,\n}: SelectedItemsProps<TValue>) => {\n\tconst [showAllValues, setShowAllValues] = useState(false);\n\n\tconst filteredSelectedValues = useMemo(() => {\n\t\treturn value.filter((v) => {\n\t\t\tif (!search) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst option = valueToOptionMap.get(v);\n\t\t\tif (!option) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn doesSelectItemMatch(option, search);\n\t\t});\n\t}, [value, search, valueToOptionMap]);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor, {\n\t\t\tactivationConstraint: {\n\t\t\t\tdistance: 8,\n\t\t\t},\n\t\t}),\n\t);\n\n\tconst onDragEnd = (event: DragEndEvent) => {\n\t\tconst { active, over } = event;\n\t\tif (over && active.id !== over.id) {\n\t\t\tconst newOrder = [...value];\n\t\t\tconst activeIndex = newOrder.indexOf(active.id as TValue);\n\t\t\tconst overIndex = newOrder.indexOf(over.id as TValue);\n\t\t\tnewOrder.splice(activeIndex, 1);\n\t\t\tnewOrder.splice(overIndex, 0, active.id as TValue);\n\t\t\tonChange?.(newOrder);\n\t\t}\n\t};\n\n\treturn (\n\t\t<DndContext sensors={sensors} onDragEnd={onDragEnd}>\n\t\t\t<SortableContext\n\t\t\t\tdisabled={!ordered}\n\t\t\t\titems={filteredSelectedValues.map((v) => ({ id: v, value: v }))}\n\t\t\t\tstrategy={verticalListSortingStrategy}\n\t\t\t>\n\t\t\t\t{(filteredSelectedValues.length > numValuesToShow || onSelectAll) && (\n\t\t\t\t\t<div className=\"flex justify-between px-2 pt-1.5 pb-px text-sm\">\n\t\t\t\t\t\t<span className=\"font-medium text-gray-500\">\n\t\t\t\t\t\t\t{value.length} selected\n\t\t\t\t\t\t\t{filteredSelectedValues.length < value.length ? ` (showing ${filteredSelectedValues.length})` : \"\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{value.length > 0 ? (\n\t\t\t\t\t\t\t<span className=\"cursor-pointer text-red-600 hover:underline\" onClick={() => onChange?.([])}>\n\t\t\t\t\t\t\t\tClear\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : onSelectAll ? (\n\t\t\t\t\t\t\t<span className=\"cursor-pointer text-indigo-700 hover:underline\" onClick={onSelectAll}>\n\t\t\t\t\t\t\t\tSelect all\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{filteredSelectedValues.length > 0 && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{filteredSelectedValues.slice(0, showAllValues ? value.length : numValuesToShow).map((val) => {\n\t\t\t\t\t\t\tconst item = valueToOptionMap.get(val);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<SelectListItem\n\t\t\t\t\t\t\t\t\tsortableId={ordered ? val : undefined}\n\t\t\t\t\t\t\t\t\tkey={val}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tconst canRemove = minSelection === 0 || value.length !== 1;\n\t\t\t\t\t\t\t\t\t\tif (canRemove) {\n\t\t\t\t\t\t\t\t\t\t\tonChange?.(value.filter((v) => v !== val));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!item\n\t\t\t\t\t\t\t\t\t\t? val\n\t\t\t\t\t\t\t\t\t\t: (item.display ?? (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.label}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t<div className=\"flex w-3 justify-center text-sm text-gray-500\">\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tminSelection === 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t? faCheck\n\t\t\t\t\t\t\t\t\t\t\t\t\t: faXmark\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</SelectListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{filteredSelectedValues.length > numValuesToShow && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"cursor-pointer px-2 py-1 text-sm font-medium text-indigo-600\"\n\t\t\t\t\t\t\t\tonClick={() => setShowAllValues((prev) => !prev)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{showAllValues ? \"Show less\" : `Show ${filteredSelectedValues.length - numValuesToShow} more selected`}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t{(filteredSelectedValues.length > 0 || onSelectAll) && (\n\t\t\t\t\t<li className=\"py-0.5\">\n\t\t\t\t\t\t<hr className=\"h-px bg-gray-200\" />\n\t\t\t\t\t</li>\n\t\t\t\t)}\n\t\t\t</SortableContext>\n\t\t</DndContext>\n\t);\n};\n","import { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"@/core/icon\";\n\nexport const DropdownChevron = () => {\n\treturn (\n\t\t<div className={twJoin(\"w-3 text-sm text-gray-500\")}>\n\t\t\t<Icon icon={faChevronDown} />\n\t\t</div>\n\t);\n};\n","import * as RadixPopover from \"@radix-ui/react-popover\";\n// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { Button, ButtonProps } from \"../button\";\n\ntype Align = \"start\" | \"center\" | \"end\";\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport type PopoverProps = {\n\ttriggerClassName?: string;\n\ttrigger: React.ReactNode;\n\topen?: boolean;\n\tdisabled?: boolean;\n\talignContent?: Align;\n\tside?: Side;\n\tarrowClassName?: string;\n\tcontentClassName?: string;\n\tchildren: React.ReactNode;\n\n\tonOpenChange?: (open: boolean) => void;\n};\n\nexport const Popover = ({\n\topen,\n\ttrigger,\n\ttriggerClassName,\n\tchildren,\n\tarrowClassName,\n\tcontentClassName,\n\tdisabled,\n\tonOpenChange,\n\talignContent,\n\tcontainer,\n\t...props\n}: PopoverProps & PopoverBodyProps) => (\n\t<RadixPopover.Root open={open} onOpenChange={onOpenChange}>\n\t\t<RadixPopover.Trigger asChild disabled={disabled} className={triggerClassName}>\n\t\t\t{trigger}\n\t\t</RadixPopover.Trigger>\n\t\t<PopoverBody\n\t\t\talign={alignContent}\n\t\t\t{...props}\n\t\t\tcontentClassName={contentClassName}\n\t\t\tarrowClassName={arrowClassName}\n\t\t\tcontainer={container}\n\t\t>\n\t\t\t{children}\n\t\t</PopoverBody>\n\t</RadixPopover.Root>\n);\n\ntype PopoverBodyProps = {\n\talign?: Align;\n\tside?: Side;\n\tarrowClassName?: string;\n\tcontentClassName?: string;\n\tchildren: React.ReactNode;\n\tcontainer?: Element;\n};\nconst PopoverBody = ({ children, arrowClassName, contentClassName, container, ...props }: PopoverBodyProps) => {\n\treturn (\n\t\t<RadixPopover.Portal container={container}>\n\t\t\t<RadixPopover.Content\n\t\t\t\t{...props}\n\t\t\t\tclassName={twMerge(\"isolate z-50 rounded-lg bg-white shadow-lg focus:outline-hidden\", contentClassName)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<RadixPopover.Arrow className={twMerge(\"fill-white\", arrowClassName)} offset={8} />\n\t\t\t</RadixPopover.Content>\n\t\t</RadixPopover.Portal>\n\t);\n};\n\nPopover.Root = (props: RadixPopover.PopoverProps) => <RadixPopover.Root {...props} />;\nPopover.Trigger = (props: ButtonProps) => (\n\t<RadixPopover.Trigger asChild>\n\t\t<Button {...props} />\n\t</RadixPopover.Trigger>\n);\nPopover.Body = PopoverBody;\nPopover.Close = (props: RadixPopover.PopoverCloseProps) => <RadixPopover.Close asChild {...props} />;\n","import { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { faGripVertical } from \"@fortawesome/free-solid-svg-icons\";\nimport { useEffect, useRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Icon } from \"../icon\";\n\nexport type SelectListItemProps = {\n\tsortableId?: string | number;\n\tchildren?: React.ReactNode;\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tfocused?: boolean;\n};\n\n/**\n * An item rendered in a Select dropdown. Does not necessarily correspond to an option.\n * @param param0\n * @returns\n */\nexport const SelectListItem = ({\n\tsortableId,\n\tchildren,\n\tonClick,\n\tdisabled = false,\n\tfocused = false,\n}: SelectListItemProps) => {\n\tconst { setNodeRef, listeners, attributes, transform, transition } = useSortable({ id: sortableId ?? \"\" });\n\n\tconst containerRef = useRef<HTMLLIElement | null>(null);\n\tuseEffect(() => {\n\t\t// scroll into view when focused\n\t\t// ensures that if the user uses the keyboard to navigate the dropdown, the selected item is always visible\n\t\tif (focused && containerRef.current) {\n\t\t\tcontainerRef.current.scrollIntoView({ block: \"nearest\", inline: \"nearest\", behavior: \"smooth\" });\n\t\t}\n\t}, [focused]);\n\n\treturn (\n\t\t<li\n\t\t\tref={(ref) => {\n\t\t\t\tsetNodeRef(ref);\n\t\t\t\tcontainerRef.current = ref;\n\t\t\t}}\n\t\t\tonClick={disabled ? undefined : onClick}\n\t\t\tclassName={twJoin(\n\t\t\t\t\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5\",\n\t\t\t\tdisabled\n\t\t\t\t\t? \"cursor-not-allowed text-gray-400\"\n\t\t\t\t\t: \"cursor-pointer transition-colors duration-150 hover:bg-gray-100\",\n\t\t\t\tfocused && \"bg-gray-100\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\ttransform: CSS.Transform.toString(transform),\n\t\t\t\ttransition,\n\t\t\t}}\n\t\t\t{...attributes}\n\t\t>\n\t\t\t{sortableId && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"cursor-grab font-medium active:cursor-grabbing\"\n\t\t\t\t\t{...listeners}\n\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tlisteners?.onClick(e);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Icon icon={faGripVertical} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"flex w-full flex-1 items-center justify-between\">{children}</div>\n\t\t</li>\n\t);\n};\n","import { AsyncMultiSelect } from \"./AsyncMultiSelect\";\nimport { AsyncSelectProps } from \"./props\";\n\n/**\n * Thin wrapper around AsyncMultiSelect that only allows a single value to be selected.\n */\nexport const AsyncSelect = <T extends string | number>({\n\tvalue,\n\tonChange,\n\tallowUnselect = false,\n\t...rest\n}: AsyncSelectProps<T>) => {\n\tconst multiValue = value ? [value] : [];\n\treturn (\n\t\t<AsyncMultiSelect\n\t\t\tminSelection={allowUnselect ? 0 : 1}\n\t\t\tmaxSelection={1}\n\t\t\tvalue={multiValue}\n\t\t\tonChange={(val) => onChange?.(val[0])}\n\t\t\t{...rest}\n\t\t/>\n\t);\n};\n","import { useMemo, useState } from \"react\";\n\nimport { AsyncMultiSelect } from \"./AsyncMultiSelect\";\nimport { MultiSelectProps } from \"./props\";\nimport { doesSelectItemMatch } from \"./selectItem\";\n\n/**\n * Thin wrapper around AsyncMultiSelect that does not support asynchronous loading, and\n * assumes all available options are provided in the `options` prop.\n */\nexport const MultiSelect = <T extends string | number>({\n\tvalue,\n\titems: options,\n\tonSearchChange,\n\tcustomValueToOption,\n\t...rest\n}: MultiSelectProps<T>) => {\n\tconst [query, setQuery] = useState(\"\");\n\tconst optionsForValues = useMemo(\n\t\t() =>\n\t\t\tvalue?.map((val) => {\n\t\t\t\tconst option = options.find((opt) => opt.value === val);\n\t\t\t\tif (option) return option;\n\t\t\t\tif (!customValueToOption) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: val,\n\t\t\t\t\t\tlabel: val.toString(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn customValueToOption(val as string);\n\t\t\t}) ?? [],\n\t\t[customValueToOption, options, value],\n\t);\n\tconst optionsMatchingQuery = useMemo(\n\t\t() => options.filter((option) => doesSelectItemMatch(option, query)),\n\t\t[query, options],\n\t);\n\n\treturn (\n\t\t<AsyncMultiSelect\n\t\t\tvalue={value}\n\t\t\titems={[...optionsForValues, ...optionsMatchingQuery]}\n\t\t\tonSearchChange={(q) => {\n\t\t\t\tsetQuery(q);\n\t\t\t\tonSearchChange?.(q);\n\t\t\t}}\n\t\t\t{...rest}\n\t\t/>\n\t);\n};\n","import { MultiSelect } from \"./MultiSelect\";\nimport { SelectProps } from \"./props\";\n\n/**\n * Thin wrapper around MultiSelect that only allows a single value to be selected.\n */\nexport function Select<T extends string | number>({ value, onChange, allowUnselect, ...rest }: SelectProps<T>) {\n\t// Specifically allowing 0 as a valid value here\n\tconst multivalue = value || value === 0 ? [value] : [];\n\treturn (\n\t\t<MultiSelect\n\t\t\tvalue={multivalue}\n\t\t\tonChange={(val) => onChange?.(val[0])}\n\t\t\tminSelection={allowUnselect ? 0 : 1}\n\t\t\tmaxSelection={1}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n","import { MultiSelect } from \"./MultiSelect\";\nimport { SelectWithUnselectProps } from \"./props\";\n\n/**\n * Thin wrapper around MultiSelect that only allows a single value to be selected.\n */\nexport function SelectWithUnselect<T extends string | number>({\n\tvalue,\n\tonChange,\n\t...rest\n}: SelectWithUnselectProps<T>) {\n\t// Specifically allowing 0 as a valid value here\n\tconst multivalue = value || value === 0 ? [value] : [];\n\treturn (\n\t\t<MultiSelect\n\t\t\tvalue={multivalue}\n\t\t\tonChange={(val) => onChange?.(val[0] ?? null)}\n\t\t\tminSelection={0}\n\t\t\tmaxSelection={1}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n","import { ControlledFormItem } from \"@/core/form/components/ControlledFormItem\";\nimport { Select, SelectProps, SelectValue } from \"@/core/select\";\n\nimport { SharedFormItemProps } from \"./form-item\";\nimport { CommonSelectProps, SharedFormControlProps } from \"./types\";\n\nexport type FormSelectProps<TValue extends SelectValue> = SharedFormControlProps &\n\tSharedFormItemProps &\n\tPick<SelectProps<TValue>, CommonSelectProps | \"loadProps\" | \"triggerPlaceholder\">;\n\nexport const FormSelect = <TValue extends SelectValue>({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\toptions,\n\tonChange,\n\t...rest\n}: FormSelectProps<TValue>) => {\n\treturn (\n\t\t<ControlledFormItem<TValue>\n\t\t\tname={name}\n\t\t\tlayout={layout}\n\t\t\tstyles={styles}\n\t\t\tlabel={label}\n\t\t\toptions={options}\n\t\t\trender={(field) => (\n\t\t\t\t<Select\n\t\t\t\t\t{...rest}\n\t\t\t\t\tvalue={field.value}\n\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\tfield.onChange(value);\n\t\t\t\t\t\tonChange?.(value);\n\t\t\t\t\t}}\n\t\t\t\t\thasError={!!field.error}\n\t\t\t\t/>\n\t\t\t)}\n\t\t/>\n\t);\n};\n","import { ControlledFormItem } from \"@/core/form/components/ControlledFormItem\";\nimport { MultiSelect, MultiSelectProps, SelectValue } from \"@/core/select\";\n\nimport { SharedFormItemProps } from \"./form-item\";\nimport { CommonSelectProps, SharedFormControlProps } from \"./types\";\n\ntype FormMultiSelectProps<TValue extends SelectValue> = SharedFormControlProps &\n\tSharedFormItemProps &\n\tPick<MultiSelectProps<TValue>, CommonSelectProps | \"allowCustomValues\" | \"minSelection\" | \"maxSelection\">;\n\nexport const FormMultiSelect = <TValue extends SelectValue>({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\toptions,\n\tonChange,\n\t...rest\n}: FormMultiSelectProps<TValue>) => {\n\treturn (\n\t\t<ControlledFormItem<TValue[]>\n\t\t\tname={name}\n\t\t\tlayout={layout}\n\t\t\tstyles={styles}\n\t\t\tlabel={label}\n\t\t\toptions={options}\n\t\t\trender={(field) => (\n\t\t\t\t<MultiSelect\n\t\t\t\t\t{...rest}\n\t\t\t\t\tvalue={field.value}\n\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\tfield.onChange(value);\n\t\t\t\t\t\tonChange?.(value);\n\t\t\t\t\t}}\n\t\t\t\t\thasError={!!field.error}\n\t\t\t\t/>\n\t\t\t)}\n\t\t/>\n\t);\n};\n","import { debounce } from \"lodash-es\";\n\nimport { UncontrolledField } from \"@/core/form\";\nimport { TextArea, TextAreaProps } from \"@/core/textarea/TextArea\";\n\nimport { FormItem, SharedFormItemProps } from \"./form-item\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormTextAreaProps = SharedFormControlProps & SharedFormItemProps & TextAreaProps & { debounce?: number };\n\nexport const FormTextArea = ({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\toptions,\n\tdebounce: debounceInterval,\n\t...rest\n}: FormTextAreaProps) => (\n\t<UncontrolledField\n\t\tname={name}\n\t\trender={({ error, register }) => {\n\t\t\tconst controlFields = register();\n\t\t\treturn (\n\t\t\t\t<FormItem\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\tstyles={styles}\n\t\t\t\t\tlabel={label}\n\t\t\t\t\toptions={options}\n\t\t\t\t\trender={\n\t\t\t\t\t\t<TextArea\n\t\t\t\t\t\t\t{...controlFields}\n\t\t\t\t\t\t\thasError={!!error || undefined}\n\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\tonChange={debounceInterval ? debounce(controlFields.onChange, debounceInterval) : controlFields.onChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\terror={error}\n\t\t\t\t/>\n\t\t\t);\n\t\t}}\n\t/>\n);\n","import { forwardRef, TextareaHTMLAttributes } from \"react\";\n// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { ErrorText } from \"../error-text/ErrorText\";\nimport { ErrorProps, RING_COLOR_CLASSNAME } from \"../types\";\n\nexport type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement> & Simplify<ErrorProps>;\n\nexport const TextAreaComp = forwardRef<HTMLTextAreaElement, TextAreaProps>(({ className, hasError, ...rest }, ref) => {\n\tconst ringClassName = rest.disabled\n\t\t? \"focus:outline-hidden focus:ring-0\"\n\t\t: hasError\n\t\t\t? \"focus:outline-hidden focus:ring-red-500 focus:border-red-500\"\n\t\t\t: RING_COLOR_CLASSNAME;\n\n\treturn (\n\t\t<textarea\n\t\t\t{...rest}\n\t\t\tclassName={twMerge(\n\t\t\t\t\"block w-full resize-none rounded-md shadow-sm disabled:bg-gray-100\",\n\t\t\t\thasError\n\t\t\t\t\t? \"border-red-300 text-red-900 placeholder-red-300\"\n\t\t\t\t\t: \"border-gray-200 placeholder-gray-400 focus:border-indigo-400\",\n\t\t\t\tringClassName,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tref={ref}\n\t\t/>\n\t);\n});\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(({ hasError, errorNode, ...rest }, ref) => (\n\t<>\n\t\t<TextAreaComp {...rest} hasError={hasError} ref={ref} />\n\t\t{hasError && <ErrorText className=\"mt-2 text-sm\">{errorNode}</ErrorText>}\n\t</>\n));\n","import { twJoin } from \"tailwind-merge\";\n\nimport { ControlledField } from \"@/core/form\";\nimport { ControlledFormItem } from \"@/core/form/components/ControlledFormItem\";\nimport { Switch } from \"@/core/switch\";\n\nimport { SharedFormItemProps } from \"./form-item\";\nimport { FieldDescription } from \"./form-item/FieldDescription\";\nimport { FieldErrorMessage } from \"./form-item/FieldErrorMessage\";\nimport { FieldLabelWithTooltip } from \"./form-item/FieldLabelWithTooltip\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormSwitchProps = SharedFormControlProps & SharedFormItemProps & { onChange?: (value: boolean) => void };\n\nexport const FormSwitch = ({ name, styles, layout, label, options, onChange, ...props }: FormSwitchProps) => {\n\tif (layout === \"side-by-side\") {\n\t\treturn (\n\t\t\t<ControlledField\n\t\t\t\tname={name}\n\t\t\t\trender={(field) => (\n\t\t\t\t\t<div className={twJoin(\"flex items-start gap-x-2\", styles)}>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tchecked={\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\t\t\tfield.value\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonCheckedChange={(value) => {\n\t\t\t\t\t\t\t\t\tfield.onChange(value);\n\t\t\t\t\t\t\t\t\tonChange?.(value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"pt-1\">\n\t\t\t\t\t\t\t<FieldLabelWithTooltip label={label} options={options} />\n\t\t\t\t\t\t\t<FieldDescription styles=\"pt-0.5\">{options?.description}</FieldDescription>\n\t\t\t\t\t\t\t<FieldErrorMessage error={field.error} />\n\t\t\t\t\t\t\t{options?.bottomSlot}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ControlledFormItem<boolean>\n\t\t\tname={name}\n\t\t\tlayout={layout}\n\t\t\tstyles={styles}\n\t\t\tlabel={label}\n\t\t\toptions={options}\n\t\t\trender={(field) => <Switch {...props} checked={field.value} onCheckedChange={field.onChange} />}\n\t\t/>\n\t);\n};\n","import * as RadixSwitch from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\n\ntype SwitchIdValue = string | undefined;\n\nconst SwitchIdContext = React.createContext<SwitchIdValue>(undefined);\nexport const useSwitchId = () => React.useContext(SwitchIdContext);\n\nconst SwitchControl = (props: Simplify<RadixSwitch.SwitchProps>) => {\n\tconst id = useSwitchId();\n\treturn (\n\t\t<RadixSwitch.Root\n\t\t\t{...props}\n\t\t\tid={id}\n\t\t\tclassName=\"flex h-5 w-9 shrink-0 items-center rounded-full bg-gray-200 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-indigo-400 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:bg-gray-100 data-[state=checked]:bg-indigo-700\"\n\t\t>\n\t\t\t<RadixSwitch.SwitchThumb className=\"block h-4 w-4 translate-x-0.5 rounded-full bg-white duration-100 data-disabled:shadow-none data-[state=checked]:translate-x-[18px]\" />\n\t\t</RadixSwitch.Root>\n\t);\n};\n\nconst SwitchLabel = (props: React.ComponentPropsWithoutRef<\"label\">) => {\n\tconst id = useSwitchId();\n\treturn <label {...props} htmlFor={id} />;\n};\n\nexport const Switch = ({ children, className, ...rest }: Simplify<Omit<RadixSwitch.SwitchProps, \"id\">>) => {\n\tconst autoId = React.useId();\n\n\tif (children == null) {\n\t\treturn <SwitchControl {...rest} />;\n\t}\n\treturn (\n\t\t<SwitchIdContext.Provider value={autoId}>\n\t\t\t<span className={className}>{children}</span>\n\t\t</SwitchIdContext.Provider>\n\t);\n};\n\nSwitch.Control = SwitchControl;\nSwitch.Label = SwitchLabel;\n","import { twJoin } from \"tailwind-merge\";\n\nexport type RadioButtonGroupItem = {\n\tvalue: string;\n\tdisplayValue: string;\n\tdescription?: string | React.ReactNode;\n\texpandedContents?: (isDisabled: boolean) => React.ReactNode;\n\texpandedContentsStyle?: \"inline\" | \"block\";\n\tdisabled?: boolean;\n};\n\ntype RadioButtonItemProps = RadioButtonGroupItem & {\n\tisChecked: boolean;\n\tonSelect?: (value: string) => void;\n\tasCard?: boolean;\n};\n\nexport const RadioButtonItem = ({\n\tvalue,\n\tdisplayValue,\n\tdescription,\n\texpandedContents,\n\texpandedContentsStyle,\n\tdisabled,\n\tisChecked,\n\tonSelect,\n\tasCard = false,\n}: RadioButtonItemProps) => (\n\t<div\n\t\tclassName={twJoin(\n\t\t\t\"flex flex-col gap-2\",\n\t\t\tasCard && \"rounded-md border px-3 py-2\",\n\t\t\tasCard && !isChecked && \"border-gray-200\",\n\t\t\tasCard && isChecked && \"border-indigo-500\",\n\t\t)}\n\t>\n\t\t<div\n\t\t\tclassName={twJoin(\n\t\t\t\t\"relative flex gap-2\",\n\t\t\t\tdisabled && \"cursor-not-allowed opacity-30 *:cursor-not-allowed\",\n\t\t\t\texpandedContentsStyle === \"inline\" ? \"items-center\" : \"items-start\",\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\tonChange={(evt) => onSelect?.(evt.target.value)}\n\t\t\t\tid={value}\n\t\t\t\tvalue={value}\n\t\t\t\tchecked={isChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\ttype=\"radio\"\n\t\t\t\tclassName=\"mt-px border-gray-200 p-2 text-indigo-700 ring-0 ring-indigo-700\"\n\t\t\t/>\n\t\t\t{expandedContentsStyle === \"inline\" ? (\n\t\t\t\t<label htmlFor={value} className=\"flex w-full flex-row gap-2.5\">\n\t\t\t\t\t<div className=\"flex w-9/12 items-center gap-2\">\n\t\t\t\t\t\t<div className=\"font-medium\">{displayValue}</div>\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<div id={`${value}-description`} className=\"text-gray-500\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex w-3/12 items-center\">{expandedContents?.(!isChecked || !!disabled)}</div>\n\t\t\t\t</label>\n\t\t\t) : (\n\t\t\t\t<label htmlFor={value} className=\"flex flex-col gap-2\">\n\t\t\t\t\t<div className=\"font-medium\">{displayValue}</div>\n\t\t\t\t</label>\n\t\t\t)}\n\t\t</div>\n\t\t{expandedContentsStyle !== \"inline\" && (\n\t\t\t<>\n\t\t\t\t{description && (\n\t\t\t\t\t<div id={`${value}-description`} className=\"text-gray-500\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{expandedContents?.(!isChecked || !!disabled)}\n\t\t\t</>\n\t\t)}\n\t</div>\n);\n","import { PropsWithClassName } from \"@/core/types\";\n\nimport { RadioButtonGroupItem, RadioButtonItem } from \"./RadioButtonItem\";\n\nexport type RadioButtonGroupProps = PropsWithClassName<{\n\titems: RadioButtonGroupItem[];\n\n\tvalue?: string | undefined;\n\tonChange?: (newValue: string) => void;\n\n\tasCards?: boolean; // Display the radio button inputs as cards\n}>;\n\nexport const RadioButtonGroup = ({ className, items, onChange, value, asCards = false }: RadioButtonGroupProps) => (\n\t<fieldset className={className}>\n\t\t<div className=\"space-y-3\">\n\t\t\t{items.map(\n\t\t\t\t({ value: itemValue, displayValue, description, expandedContents, expandedContentsStyle, disabled }, index) => (\n\t\t\t\t\t<RadioButtonItem\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\t\tisChecked={value === itemValue}\n\t\t\t\t\t\tvalue={itemValue}\n\t\t\t\t\t\tdisplayValue={displayValue}\n\t\t\t\t\t\tdescription={description}\n\t\t\t\t\t\texpandedContents={expandedContents}\n\t\t\t\t\t\texpandedContentsStyle={expandedContentsStyle}\n\t\t\t\t\t\tasCard={asCards}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t)}\n\t\t</div>\n\t</fieldset>\n);\n","import { ControlledField } from \"@/core/form\";\nimport { RadioButtonGroup, RadioButtonGroupProps } from \"@/core/radio-button-group\";\n\nimport { FieldErrorMessage } from \"./form-item/FieldErrorMessage\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormRadioButtonGroupProps = Simplify<\n\tPick<SharedFormControlProps, \"name\"> & Pick<RadioButtonGroupProps, \"items\" | \"onChange\" | \"className\" | \"asCards\">\n>;\n\nexport const FormRadioButtonGroup = ({\n\tname,\n\titems,\n\tonChange,\n\tasCards = false,\n\tclassName,\n}: FormRadioButtonGroupProps) => (\n\t<ControlledField\n\t\tname={name}\n\t\trender={(field) => (\n\t\t\t<>\n\t\t\t\t<RadioButtonGroup\n\t\t\t\t\t{...field}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\titems={items}\n\t\t\t\t\tonChange={(newValue) => {\n\t\t\t\t\t\tfield.onChange(newValue);\n\t\t\t\t\t\tonChange?.(newValue);\n\t\t\t\t\t}}\n\t\t\t\t\tasCards={asCards}\n\t\t\t\t/>\n\t\t\t\t<FieldErrorMessage error={field.error} />\n\t\t\t</>\n\t\t)}\n\t/>\n);\n","import { useCallback } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { DatePicker, DatePickerProps } from \"@/core/date-picker/DatePicker\";\nimport { useControlledFormField } from \"@/core/form\";\n\nimport { FormItem, SharedFormItemProps } from \"./form-item\";\nimport { SharedFormControlProps } from \"./types\";\n\ntype FormDatePickerProps = SharedFormControlProps &\n\tSharedFormItemProps &\n\tPick<DatePickerProps, \"placeholder\" | \"minDate\" | \"range\" | \"onChange\" | \"maxDate\" | \"showTimeInput\"> & {\n\t\tcontainerRef?: React.RefObject<HTMLDivElement>;\n\t};\n\nexport const FormDatePicker = ({\n\tname,\n\tstyles,\n\tlayout,\n\tlabel,\n\tonChange,\n\toptions,\n\tcontainerRef,\n\tdisabled,\n\t...rest\n}: FormDatePickerProps) => {\n\tconst {\n\t\tonChange: onChangeInternal,\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tvalue,\n\t\terror,\n\t} = useControlledFormField({ name });\n\n\t// TODO: This is a hack to get around the fact that the date picker doesn't support null values\n\tconst handleChange = useCallback(\n\t\t(newValue: any) => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tonChange?.(newValue ?? null);\n\t\t\tonChangeInternal(newValue ?? null);\n\t\t},\n\t\t[onChangeInternal, onChange],\n\t);\n\n\treturn (\n\t\t<FormItem\n\t\t\tlayout={layout}\n\t\t\tstyles={styles}\n\t\t\tlabel={label}\n\t\t\toptions={options}\n\t\t\tref={containerRef}\n\t\t\trender={\n\t\t\t\t<div className={twJoin(disabled && \"text-gray-500\")}>\n\t\t\t\t\t<DatePicker\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvalue={\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\thasError={!!error}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\terror={error}\n\t\t/>\n\t);\n};\n","import { z } from \"zod\";\n\n/** This regex will match currency values like `123`, `-123`, `1,234`, `12,345.67`, `.12`, etc.\n */\nexport const CURRENCY_REGEX = /^-?(?:\\d{1,3}(?:,\\d{3})*|\\d+|\\.\\d{1,2})(?:\\.\\d{1,2})?$/;\nconst DOLLARS_STR_ERROR_MESSAGE = \"Must use dollars and cents or whole numbers.\";\n\nexport const dollarsStrSchema = z.string().regex(CURRENCY_REGEX, DOLLARS_STR_ERROR_MESSAGE);\n\nexport const requiredDollarsStrSchema = z\n\t.string()\n\t.trim()\n\t.nonempty(\"Required\")\n\t.regex(CURRENCY_REGEX, DOLLARS_STR_ERROR_MESSAGE);\n\nexport const requiredDollarsStrSchemaWithCustomMessage = (requiredError: string, invalidTypeError: string) =>\n\tz.string().trim().nonempty(requiredError).regex(CURRENCY_REGEX, invalidTypeError);\n\nexport const requiredNonZeroDollarsStrSchema = requiredDollarsStrSchema.refine(\n\t(value) => parseFloat(value) !== 0,\n\t\"Amount cannot be $0.00\",\n);\n\nexport const requiredPositiveDollarsStrSchema = requiredDollarsStrSchema.refine(\n\t(value) => parseFloat(value) > 0,\n\t\"Amount must be greater than $0.00\",\n);\n\nexport const requiredPositiveOrZeroDollarsStrSchema = requiredDollarsStrSchema.refine(\n\t(value) => parseFloat(value) >= 0,\n\t\"Amount must be greater than or equal to $0.00\",\n);\n","import { z } from \"zod\";\n\nimport { asNumericStr, asOptional } from \"./helper-schemas\";\n\nexport const npiSchema = asNumericStr(z.string().trim().nonempty(\"Required\").length(10, \"Must have 10 numbers\"));\nexport const npiSchemaOptional = asOptional(asNumericStr(z.string().trim()).length(10, \"Must have 10 numbers\"));\n\nexport const taxonomyCodeSchema = z\n\t.string()\n\t.trim()\n\t.nonempty(\"Must contain characters, not just whitespace\")\n\t.length(10, \"Must have 10 characters\");\n\n/** @example\n * 123123123 _ 123-12-1234 _ 12-1234567\n */\nconst TAX_ID_REGEX = /^(([0-9]{9})|([0-9]{3}-[0-9]{2}-[0-9]{4})|([0-9]{2}-[0-9]{7}))$/i;\nexport const taxIdSchema = z\n\t.string()\n\t.trim()\n\t.nonempty(\"Required\")\n\t.regex(TAX_ID_REGEX, \"Must have 9 numbers formatted: XXXXXXXXX or XXX-XX-XXXX or XX-XXXXXXX\");\n","import { z } from \"zod\";\n\n/** Handles empty values (`\"\"`, `null`) and marks schema as `.optional()`. */\nexport const asOptional = <T extends z.ZodTypeAny>(schema: T) =>\n\tz.union([\n\t\t// order is important: the empty-like literals must precede actual schema\n\t\tz.literal(null).transform(() => undefined),\n\t\tz.literal(\"\").transform(() => undefined),\n\t\tz\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.transform((val) => (val === \"\" ? undefined : val))\n\t\t\t.pipe(z.undefined()),\n\t\tschema.optional(),\n\t]);\n/** Handles empty values (`\"\"`, `null`) and marks schema as `.nullish()`. */\nexport const asNullish = <T extends z.ZodTypeAny>(schema: T) =>\n\tz.union([\n\t\t// order is important: the empty-like literals must precede actual schema\n\t\tz.literal(null).transform(() => undefined),\n\t\tz.literal(\"\").transform(() => undefined),\n\t\tz\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.transform((val) => (val === \"\" ? undefined : val))\n\t\t\t.pipe(z.undefined()),\n\t\tschema.nullish(),\n\t]);\n\n/** Adds validation on string to ensure only numbers are allowed. */\nexport const asNumericStr = <T extends z.ZodString>(schema: T, message = \"Only numbers allowed\") =>\n\tschema.regex(/^\\d+$/i, message);\n\nexport const asRequiredCustom = <T>(message = \"Required\") => {\n\treturn z.custom<T>((value) => {\n\t\tif (value == null || typeof value !== \"object\") {\n\t\t\treturn !!value;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.length > 0;\n\t\t}\n\t\treturn Object.keys(value as object).length > 0;\n\t}, message);\n};\n","import { z } from \"zod\";\n\nimport { dollarsStrSchema } from \"./currency-schemas\";\nimport { asOptional } from \"./helper-schemas\";\n\nexport const selectedAmountSchema = z.object({\n\tselected: asOptional(z.boolean()),\n\tamountStr: asOptional(dollarsStrSchema),\n});\n\nexport type SelectedAmountSchema = z.infer<typeof selectedAmountSchema>;\n","import { z } from \"zod\";\n\nexport const buildZodIssue = (path: string | string[], message: string) => ({\n\tpath: Array.isArray(path) ? path : [path],\n\tmessage,\n\tcode: z.ZodIssueCode.custom,\n});\n","import { forwardRef, Suspense, useEffect, useRef } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { LoadingState } from \"../loaders\";\nimport { DrawerStateContext } from \"./drawerState\";\nimport { PersistDrawerWidth, useDrawerResize } from \"./useDrawerResize\";\n\nconst useKeypress = (key: string, action: () => void) => {\n\tuseEffect(() => {\n\t\tconst onKeyup = (e: KeyboardEvent) => {\n\t\t\tif (e.key === key) action();\n\t\t};\n\t\tdocument.addEventListener(\"keyup\", onKeyup);\n\t\treturn () => document.removeEventListener(\"keyup\", onKeyup);\n\t}, [action, key]);\n};\n\nconst drawerSizes = {\n\tsm: 1 / 2,\n\tmd: 3 / 4,\n\tlg: 5 / 6,\n};\n\ntype DrawerProps = {\n\tisOpen: boolean;\n\tonClose?: () => void;\n\tonClickOutside?: () => void;\n\tblurredOverlay?: boolean;\n\twidth?: keyof typeof drawerSizes;\n\tpersistWidth?: PersistDrawerWidth;\n\tchildren: React.ReactNode;\n};\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n\t({ isOpen, onClose, onClickOutside, blurredOverlay, children, width = \"md\", persistWidth }, ref) => {\n\t\tconst slider = useRef<HTMLDivElement>(null);\n\t\tconst drawer = useRef<HTMLDivElement>(null);\n\t\tuseDrawerResize({\n\t\t\tslider,\n\t\t\tdrawer,\n\t\t\tisOpen,\n\t\t\tdefaultSizePct: drawerSizes[width],\n\t\t\tpersistWidth,\n\t\t});\n\n\t\tuseKeypress(\"Escape\", () => {\n\t\t\tonClose?.();\n\t\t});\n\n\t\treturn (\n\t\t\t<DrawerStateContext.Provider\n\t\t\t\tvalue={{\n\t\t\t\t\tisOpen,\n\t\t\t\t\tonClose: () => onClose?.(),\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\"absolute inset-0 z-30 transition-all\",\n\t\t\t\t\t\tisOpen && blurredOverlay && \"bg-gray-500/10 backdrop-blur-sm\",\n\t\t\t\t\t\t// If the drawer is open, and the blurredOverlay prop is given, stop the user from clicking through the overlay\n\t\t\t\t\t\tisOpen && blurredOverlay ? \"pointer-events-auto\" : \"pointer-events-none\",\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={onClickOutside}\n\t\t\t\t/>\n\t\t\t\t<div\n\t\t\t\t\tref={slider}\n\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\"group absolute top-0 bottom-0 z-50 h-screen w-4 translate-x-1/2 cursor-col-resize\",\n\t\t\t\t\t\tisOpen ? \"block\" : \"hidden\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"absolute top-0 right-1.5 bottom-0 left-1.5 bg-indigo-700 opacity-0 transition-opacity group-hover:opacity-100\" />\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t// width transition div\n\t\t\t\t\tclassName=\"absolute top-0 right-0 bottom-0 z-drawer flex flex-col overflow-y-hidden bg-gray-50 shadow\"\n\t\t\t\t\tref={drawer}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t// delayed opacity transition div\n\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\"relative flex w-full flex-1 flex-col overflow-hidden bg-white transition-all delay-100 duration-100 ease-in-out\",\n\t\t\t\t\t\t\tisOpen ? \"opacity-100\" : \"opacity-0\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isOpen ? <Suspense fallback={<LoadingState />}>{children}</Suspense> : undefined}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</DrawerStateContext.Provider>\n\t\t);\n\t},\n);\n","import { SizeProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { faSpinner } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { twJoin } from \"tailwind-merge\";\n\ntype LoaderProps = {\n\tclassName?: string;\n\tsize?: SizeProp;\n};\n\nexport const Spinner = ({ className, ...props }: LoaderProps) => (\n\t<FontAwesomeIcon\n\t\t{...props}\n\t\tclassName={twJoin(\"animate-spin text-gray-400\", className)}\n\t\ticon={faSpinner}\n\t/>\n);\n","import { SizeProp } from \"@fortawesome/fontawesome-svg-core\";\n\nimport { Spinner } from \"./Spinner\";\n\nconst LoadingStateTemplate = ({ children }: { children?: React.ReactNode }) => (\n\t<div className=\"inset-0 z-10 flex h-full items-center justify-center\">{children}</div>\n);\n\nexport const LoadingState = ({ size = \"2x\" }: { size?: SizeProp }) => (\n\t<LoadingStateTemplate>\n\t\t<Spinner size={size} />\n\t</LoadingStateTemplate>\n);\n\nexport default LoadingState;\n","// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\ntype LoadingBarProps = {\n\tclassName?: string;\n};\n\nexport const LoadingBar = ({ className }: LoadingBarProps) => (\n\t<div className={twMerge(\"relative h-3 w-full overflow-hidden rounded-full bg-gray-100\", className)}>\n\t\t<div\n\t\t\tclassName=\"absolute inset-0 w-full animate-loading-slide bg-gradient-to-r from-transparent via-indigo-400/60 to-transparent\"\n\t\t\tstyle={{ width: \"50%\" }}\n\t\t/>\n\t</div>\n);\n","import { createContext, useContext } from \"react\";\n\nexport type DrawerState = {\n\tisOpen: boolean;\n\tonClose: () => void;\n};\n\nexport const DrawerStateContext = createContext<DrawerState>({\n\tisOpen: false,\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tonClose: () => {},\n});\n\nexport const useDrawer = () => {\n\tconst context = useContext(DrawerStateContext);\n\tif (context === undefined) {\n\t\tthrow new Error(\"useDrawer must be used within a DrawerStateContext\");\n\t}\n\treturn context;\n};\n","import { RefObject, useCallback, useEffect, useRef } from \"react\";\n\nconst MIN_LEFT_SPACE = 240; // minimum space the drawer should allow on the left side of the screen, should be at least as big as sidebar\nconst MIN_WIDTH_PCT = 0.5;\nconst MIN_WIDTH_PX = 500;\n\nexport type UseDrawerResizeParams = {\n\tslider: RefObject<HTMLDivElement>;\n\tdrawer: RefObject<HTMLDivElement>;\n\tisOpen: boolean;\n\tdefaultSizePct: number;\n\tpersistWidth?: PersistDrawerWidth;\n};\n\nexport type PersistDrawerWidth = {\n\tload: () => number | undefined;\n\tsave: (widthPct: number) => void;\n};\n\nconst constraintPct = (val: number) => Math.min(1, Math.max(0, val));\nexport const localStoragePersist = (key: string): PersistDrawerWidth => ({\n\tload: () => {\n\t\ttry {\n\t\t\tconst val = localStorage.getItem(key);\n\t\t\tif (val && !Number.isNaN(Number(val))) {\n\t\t\t\treturn constraintPct(Number(val));\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t},\n\tsave: (size: number) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(key, constraintPct(size).toString());\n\t\t} catch {\n\t\t\t// do nothing\n\t\t}\n\t},\n});\n\nconst computeWidth = (pct: number) => window.innerWidth * pct;\nconst computePct = (widthPx: number) => widthPx / window.innerWidth;\n\nconst constrainedWidth = (width: number) => {\n\tconst minWidth = Math.max(window.innerWidth * MIN_WIDTH_PCT, MIN_WIDTH_PX);\n\tconst maxWidth = window.innerWidth - MIN_LEFT_SPACE;\n\treturn Math.min(Math.max(width, minWidth), maxWidth);\n};\n\nexport const useDrawerResize = ({ slider, drawer, isOpen, defaultSizePct, persistWidth }: UseDrawerResizeParams) => {\n\tconst widthPx = useRef(computeWidth(defaultSizePct));\n\n\tconst toggleOpen = useCallback(\n\t\t(open: boolean) => {\n\t\t\tif (slider.current && drawer.current) {\n\t\t\t\tdrawer.current.style.transition = `right 200ms ease-out, opacity 200ms`;\n\t\t\t\tslider.current.style.right = open ? `${widthPx.current}px` : \"0\";\n\t\t\t\tdrawer.current.style.right = open ? \"0\" : `-200px`;\n\t\t\t\tdrawer.current.style.opacity = open ? \"1\" : \"0\";\n\t\t\t\tdrawer.current.style.pointerEvents = open ? \"auto\" : \"none\";\n\t\t\t}\n\t\t},\n\t\t[drawer, slider],\n\t);\n\tconst setWidth = useCallback(\n\t\t(width: number) => {\n\t\t\twidthPx.current = width;\n\t\t\tif (slider.current && drawer.current) {\n\t\t\t\t// eslint-disable-next-line react-compiler/react-compiler\n\t\t\t\tdrawer.current.style.transition = \"none\";\n\t\t\t\tslider.current.style.right = `${width}px`;\n\t\t\t\tdrawer.current.style.width = `${width}px`;\n\t\t\t}\n\t\t\tif (width !== 0) {\n\t\t\t\tpersistWidth?.save?.(computePct(width));\n\t\t\t}\n\t\t},\n\t\t[drawer, persistWidth, slider],\n\t);\n\n\tuseEffect(() => {\n\t\tif (slider.current) {\n\t\t\tconst onPointerDown = (e: PointerEvent) => {\n\t\t\t\tdocument.body.style.userSelect = \"none\";\n\t\t\t\tconst startX = e.clientX;\n\t\t\t\tconst startWidth = widthPx.current;\n\t\t\t\tconst onPointerMove = (evt: PointerEvent) => {\n\t\t\t\t\tconst newWidth = startWidth + (startX - evt.clientX);\n\t\t\t\t\tsetWidth(constrainedWidth(newWidth));\n\t\t\t\t};\n\t\t\t\tconst onPointerUp = () => {\n\t\t\t\t\tdocument.body.style.userSelect = \"auto\";\n\t\t\t\t\twindow.removeEventListener(\"pointermove\", onPointerMove);\n\t\t\t\t\twindow.removeEventListener(\"pointerup\", onPointerUp);\n\t\t\t\t};\n\t\t\t\twindow.addEventListener(\"pointermove\", onPointerMove);\n\t\t\t\twindow.addEventListener(\"pointerup\", onPointerUp);\n\t\t\t};\n\t\t\tconst sliderNode = slider.current;\n\t\t\tsliderNode.addEventListener(\"pointerdown\", onPointerDown);\n\t\t\treturn () => {\n\t\t\t\tsliderNode.removeEventListener(\"pointerdown\", onPointerDown);\n\t\t\t};\n\t\t}\n\t}, [setWidth, slider]);\n\n\tconst loadWidth = useCallback(() => {\n\t\tif (!isOpen) {\n\t\t\ttoggleOpen(false);\n\t\t} else {\n\t\t\tconst savedWidthPct = persistWidth?.load?.();\n\t\t\tconst width = savedWidthPct ? constrainedWidth(computeWidth(savedWidthPct)) : computeWidth(defaultSizePct);\n\t\t\tsetWidth(width);\n\t\t\ttoggleOpen(true);\n\t\t}\n\t}, [defaultSizePct, isOpen, toggleOpen, persistWidth, setWidth]);\n\n\tuseEffect(() => {\n\t\tif (slider.current && drawer.current) {\n\t\t\tloadWidth();\n\t\t}\n\t}, [slider, drawer, loadWidth]);\n\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"resize\", loadWidth);\n\t\treturn () => window.removeEventListener(\"resize\", loadWidth);\n\t}, [loadWidth]);\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faBookmark, faChevronDown, faChevronUp, faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Text } from \"@/core/text\";\n\nimport { Button } from \"../button\";\nimport { Icon } from \"../icon\";\nimport { Skeleton } from \"../skeleton\";\nimport { useDrawer } from \"./drawerState\";\n\nexport type DrawerHeaderProps = {\n\tresource?: {\n\t\ticon?: IconDefinition;\n\t\tname: string;\n\t};\n\tpagination?: {\n\t\thasNext: boolean;\n\t\thasPrevious: boolean;\n\t\tonNext: () => void;\n\t\tonPrevious: () => void;\n\t\textra?: React.ReactNode;\n\t};\n\ttitle: React.ReactNode;\n\tsubtitle?: React.ReactNode;\n\tactions?: React.ReactNode;\n\tlabel?: React.ReactNode;\n\tcloseAction?: React.ReactNode;\n};\n\nexport const DrawerHeader = ({\n\tresource,\n\tpagination,\n\ttitle,\n\tsubtitle,\n\tactions,\n\tcloseAction,\n\tlabel,\n}: DrawerHeaderProps) => {\n\tconst { onClose } = useDrawer();\n\treturn (\n\t\t<div className=\"z-1 flex w-full flex-col items-stretch shadow\">\n\t\t\t<div className=\"flex justify-between px-8 py-1 shadow-sm\">\n\t\t\t\t<div className=\"flex items-center gap-1.5 text-base text-gray-500\">\n\t\t\t\t\t{resource && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Icon icon={resource.icon || faBookmark} />\n\t\t\t\t\t\t\t<div>{resource.name}</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{pagination && (\n\t\t\t\t\t\t<div className=\"flex gap-1\">\n\t\t\t\t\t\t\t{pagination.extra}\n\t\t\t\t\t\t\t<Button size=\"sm\" onClick={pagination.onPrevious} disabled={!pagination.hasPrevious}>\n\t\t\t\t\t\t\t\t<Icon icon={faChevronUp} />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button size=\"sm\" onClick={pagination.onNext} disabled={!pagination.hasNext}>\n\t\t\t\t\t\t\t\t<Icon icon={faChevronDown} />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div data-testid=\"drawer-close\">\n\t\t\t\t\t\t{closeAction ? (\n\t\t\t\t\t\t\tcloseAction\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Button size=\"xs\" variant=\"transparent\" onClick={onClose}>\n\t\t\t\t\t\t\t\t<span className=\"text-xl text-gray-500\">\n\t\t\t\t\t\t\t\t\t<Icon icon={faXmark} />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2 px-8 py-2\">\n\t\t\t\t<div className=\"flex min-w-0 shrink grow flex-col\">\n\t\t\t\t\t<Text variant=\"title-1\" className={twJoin(typeof title === \"string\" && \"truncate\")}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{subtitle && <div className=\"text-base font-light\">{subtitle}</div>}\n\t\t\t\t</div>\n\t\t\t\t{label && <div className=\"flex items-center gap-2\">{label}</div>}\n\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">{actions}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport const DrawerHeaderSkeleton = () => (\n\t<div className=\"space-y-2 px-8 py-2\">\n\t\t<div className=\"flex justify-between\">\n\t\t\t<Skeleton className=\"h-6 w-36\" />\n\t\t\t<Skeleton className=\"h-6 w-16\" />\n\t\t</div>\n\t\t<Skeleton className=\"h-8 w-28\" />\n\t</div>\n);\n","import { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\ntype TextTag = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | \"label\";\n\nconst VARIANT_STYLES = {\n\t\"marketing-headline\": \"text-marketing-headline\",\n\t\"headline-1\": \"text-headline-1\",\n\t\"headline-2\": \"text-headline-2\",\n\t\"headline-3\": \"text-headline-3\",\n\t\"headline-4\": \"text-headline-4\",\n\t\"title-1\": \"text-title-1\",\n\t\"title-2\": \"text-title-2\",\n\t\"title-3\": \"text-title-3\",\n\t\"body-1\": \"text-body-1\",\n\t\"body-2\": \"text-body-2\",\n\tlabel: \"text-label\",\n\tfootnote: \"text-footnote\",\n\tsmallcaps: \"text-smallcaps\",\n} as const;\n\ntype TextVariant = keyof typeof VARIANT_STYLES;\n\n/**\n * Props specific to Text component (excluding native HTML props)\n */\ntype TextOwnProps<T extends ElementType = \"p\"> = {\n\t/**\n\t * The HTML tag to render\n\t * @default \"p\"\n\t */\n\tas?: T;\n\t/**\n\t * Typography variant to apply\n\t * @default \"body-1\"\n\t */\n\tvariant?: keyof typeof VARIANT_STYLES;\n\t/**\n\t * Content to render\n\t */\n\tchildren: ReactNode;\n};\n\n/**\n * Full component props combining Text-specific props with native HTML element props\n */\ntype TextProps<T extends TextTag = \"p\"> = TextOwnProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof TextOwnProps>;\n\n/**\n * @summary A typography component for rendering styled text with semantic HTML tags.\n *\n * @description This component provides a consistent way to render text with proper semantic HTML\n * while maintaining design system typography. It is extendable but closed for modification.\n * The component is fully type-safe and provides proper autocompletion for all native HTML\n * attributes based on the selected tag.\n *\n * @example Basic Usage (defaults to <p> tag)\n * <Text>Default paragraph text</Text>\n *\n * @example With Custom Tags (fully typed)\n * <Text as=\"h1\">Heading Text</Text>\n * <Text as=\"span\">Inline Text</Text>\n *\n * @example Type Safety - Native Props\n * // ✓ Valid: span supports onClick\n * <Text as=\"span\" onClick={() => console.log('clicked')}>\n * Clickable text\n * </Text>\n *\n * // ✓ Valid: h1 supports id\n * <Text as=\"h1\" id=\"page-title\">\n * Page Title\n * </Text>\n *\n * @example Extendable with className\n * <Text className=\"text-blue-500 font-bold\">\n * Custom styled text\n * </Text>\n *\n * @example With Variants\n * <Text variant=\"headline-1\">Large Heading</Text>\n * <Text variant=\"body-1\">Body text</Text>\n * <Text variant=\"label\">Label text</Text>\n */\nconst Text = <T extends TextTag = \"p\">({ as, variant = \"body-1\", children, className, ...props }: TextProps<T>) => {\n\t// Default Tag to 'p' if no custom 'as' prop is provided.\n\tconst Tag = as ?? \"p\";\n\n\treturn (\n\t\t<Tag {...(props as any)} className={twJoin(VARIANT_STYLES[variant], className)}>\n\t\t\t{children}\n\t\t</Tag>\n\t);\n};\n\nexport { Text };\nexport type { TextProps, TextTag, TextVariant };\n","// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nexport type SkeletonProps = {\n\tclassName?: string;\n};\n\nexport const Skeleton = ({ className }: SkeletonProps) => (\n\t<div className={twMerge(\"animate-skeleton-pulse rounded-lg bg-gray-200\", className)} />\n);\n","// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nimport { Skeleton } from \"../Skeleton\";\n\ntype TabsSkeletonProps = {\n\tnumTabs?: number;\n\tclassName?: string;\n\ttabClassName?: string;\n};\n\n// Composes several base skeleton components into a row to represent a tab group\nexport const TabsSkeleton = ({ numTabs = 3, className, tabClassName = \"h-8 w-32\" }: TabsSkeletonProps) => {\n\treturn (\n\t\t<div className={twMerge(\"flex gap-4\", className)}>\n\t\t\t{Array.from({ length: numTabs }).map((_, index) => (\n\t\t\t\t<Skeleton key={index} className={tabClassName} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n","import { twJoin } from \"tailwind-merge\";\n\nimport { Skeleton } from \"../Skeleton\";\n\ntype TableSkeletonProps = {\n\tnumTableCols?: number;\n\tnumTableRows?: number;\n\tclassName?: string;\n\trowHeight?: number;\n\thasBorder?: boolean;\n};\n\n// Composes base skeleton components into a loose table layout\nexport const TableSkeleton = ({\n\tnumTableCols = 4,\n\tnumTableRows = 3,\n\tclassName,\n\trowHeight,\n\thasBorder = false,\n}: TableSkeletonProps) => {\n\treturn (\n\t\t<table className={twJoin(\"flex w-full flex-col gap-4\", className)}>\n\t\t\t<tbody className={twJoin(\"flex flex-col\", rowHeight === undefined && \"gap-4\")}>\n\t\t\t\t{Array.from({ length: numTableRows }).map((_, index) => (\n\t\t\t\t\t<tr\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName={twJoin(\"flex gap-4\", hasBorder && \"px-2 not-last:border-b\")}\n\t\t\t\t\t\tstyle={rowHeight ? { height: rowHeight } : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Array.from({ length: numTableCols }).map((_, index) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<td key={index} className=\"flex grow items-center px-1\">\n\t\t\t\t\t\t\t\t\t<Skeleton key={index} className={twJoin(\"w-full\", rowHeight ? \"h-3\" : \"h-6\")} />\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</tr>\n\t\t\t\t))}\n\t\t\t</tbody>\n\t\t</table>\n\t);\n};\n","import { twJoin } from \"tailwind-merge\";\n\nimport { Skeleton } from \"../Skeleton\";\n\ntype TableSkeletonProps = {\n\tnumTableRows?: number;\n\tclassName?: string;\n\trowHeight?: number;\n\thasBorder?: boolean;\n};\n\n// Composes base skeleton components into a checkbox column layout\n// for tables that enable selection\nexport const TableCheckboxSkeleton = ({\n\tnumTableRows = 3,\n\tclassName,\n\trowHeight,\n\thasBorder = false,\n}: TableSkeletonProps) => {\n\treturn (\n\t\t<table className={twJoin(\"flex w-full flex-col gap-4\", className)}>\n\t\t\t<tbody className={twJoin(\"flex flex-col\", rowHeight === undefined && \"gap-4\")}>\n\t\t\t\t{Array.from({ length: numTableRows }).map((_, index) => (\n\t\t\t\t\t<tr\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName={twJoin(\"flex gap-4\", hasBorder && \"px-2 not-last:border-b\")}\n\t\t\t\t\t\tstyle={rowHeight ? { height: rowHeight } : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t<td key={index} className=\"flex grow items-center px-1\">\n\t\t\t\t\t\t\t<Skeleton key={index} className={twJoin(\"w-full, rounded-none\", rowHeight ? \"h-3\" : \"h-6\")} />\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t))}\n\t\t\t</tbody>\n\t\t</table>\n\t);\n};\n","import { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\nimport { faCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { forwardRef } from \"react\";\n\ntype EmptyStateProps = {\n\ticon?: IconDefinition;\n\ttitle: React.ReactNode;\n\tdescription?: React.ReactNode;\n};\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n\t({ icon = faCircle, title, description }, ref) => (\n\t\t<div className=\"flex flex-col items-center justify-center gap-3 p-4\" ref={ref}>\n\t\t\t{/* Note that we add the `ring-transparent` class name because if the icon name used\n\t\t\tis \"life ring\" then the \"ring\" class name is interpreted poorly by tailwind. */}\n\t\t\t<FontAwesomeIcon className=\"text-gray-500 ring-transparent\" icon={icon} size=\"2x\" />\n\n\t\t\t<div className=\"flex max-w-prose flex-col text-center\">\n\t\t\t\t{title && <h2 className=\"text-sm leading-6 font-medium text-gray-500\">{title}</h2>}\n\t\t\t\t{description && <p className=\"text-xs leading-5 font-normal text-gray-500\">{description}</p>}\n\t\t\t</div>\n\t\t</div>\n\t),\n);\n","import { ReactNode } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Popover } from \"@/core/popover\";\nimport { Text } from \"@/core/text\";\n\nconst HeaderTileSimple = ({ title, content, className }: { title: string; content: ReactNode; className?: string }) => (\n\t<div\n\t\tclassName={twJoin(\n\t\t\t\"flex min-h-18.5 flex-col items-start justify-between gap-2 rounded-md border border-gray-200 px-3 py-1.5\",\n\t\t\tclassName,\n\t\t)}\n\t>\n\t\t<p className=\"max-w-35 text-base text-gray-900\">{title}</p>\n\t\t<Text>{content}</Text>\n\t</div>\n);\n\nconst HeaderTileWithPopover = ({\n\ttitle,\n\tcontent,\n\tpopover,\n\tclassName,\n}: {\n\ttitle: string;\n\tcontent: ReactNode;\n\tpopover?: ReactNode;\n\tclassName?: string;\n}) => (\n\t<Popover.Root>\n\t\t<Popover.Trigger className={twJoin(\"flex h-auto! min-h-18.5 justify-start py-1.5\", className)}>\n\t\t\t<span className=\"flex flex-col items-start justify-between gap-2\">\n\t\t\t\t<span className=\"text-base text-gray-900\">{title}</span>\n\t\t\t\t<span>{content}</span>\n\t\t\t</span>\n\t\t</Popover.Trigger>\n\t\t{popover && <Popover.Body contentClassName=\"max-w-150 min-w-60 p-3\">{popover}</Popover.Body>}\n\t</Popover.Root>\n);\n\nexport const HeaderTile = (props: { title: string; content: ReactNode; popover?: ReactNode; className?: string }) => {\n\tif (props.popover) {\n\t\treturn <HeaderTileWithPopover {...props} />;\n\t}\n\treturn <HeaderTileSimple {...props} />;\n};\n","import * as React from \"react\";\n\nimport { LabelStyleProps, labelStyles } from \"./labelStyles\";\n\nexport type LabelProps = {\n\tchildren: React.ReactNode;\n} & LabelStyleProps;\n\nconst LabelImpl = (\n\t{ children, intent, size, variant, ...rest }: LabelProps,\n\tref: React.ForwardedRef<HTMLSpanElement>,\n) => {\n\treturn (\n\t\t<span ref={ref} className={labelStyles({ intent, size, variant })} {...rest}>\n\t\t\t{children}\n\t\t</span>\n\t);\n};\n\nexport const Label = React.forwardRef(LabelImpl);\n","import { twJoin } from \"tailwind-merge\";\n\nimport { Intent, Size } from \"../variants\";\n\ntype LabelIntent = Intent | \"disabled\";\ntype LabelVariant = \"default\" | \"dark\";\n\nexport type LabelStyleProps = {\n\tvariant?: LabelVariant;\n\tintent?: LabelIntent;\n\tsize?: Size;\n};\n\nconst sizeStyles: Record<Size, string> = {\n\txs: \"px-1 text-xs gap-0.5 h-4 rounded-md\",\n\tsm: \"h-5 gap-0.5 px-1 text-sm rounded-md\",\n\tmd: \"h-6 gap-1 px-2 text-base rounded-lg\",\n\tlg: \"h-7 gap-1 px-2 text-lg rounded-lg\",\n};\n\nconst colorStyles: Record<LabelVariant, Partial<Record<LabelIntent, string>>> = {\n\tdefault: {\n\t\tdefault: \"bg-gray-100 text-gray-700 border border-gray-200\",\n\t\tprimary: \"bg-indigo-100 text-indigo-700 border border-indigo-200\",\n\t\tsuccess: \"bg-green-100 text-green-700 border border-green-200\",\n\t\twarning: \"bg-yellow-100 text-yellow-700 border border-yellow-200\",\n\t\tdanger: \"bg-red-100 text-red-700 border border-red-200\",\n\t\tdisabled: \"bg-gray-100 text-gray-400 border border-gray-200\",\n\t},\n\tdark: {\n\t\tdefault: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t\t/**\n\t\t * Note(Stephen): We don't yet have tokens for all `intent` values for the dark variant.\n\t\t * Making them the same as default for now rather than wrestle with types as they are unused.\n\t\t */\n\t\tprimary: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t\tsuccess: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t\twarning: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t\tdanger: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t\tdisabled: \"bg-gray-700 text-gray-50 border border-gray-600\",\n\t},\n};\n\nexport const labelStyles = ({ intent = \"default\", size = \"sm\", variant = \"default\" }: LabelStyleProps) =>\n\ttwJoin(\n\t\t\"inline-flex w-fit shrink-0 items-center justify-center truncate font-normal break-all\",\n\t\tsizeStyles[size],\n\t\tcolorStyles[variant][intent],\n\t);\n","import { faEllipsis } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n\tContent,\n\tDropdownMenuContentProps,\n\tDropdownMenuItemProps as RadixMenuItemProps,\n\tDropdownMenuProps,\n\tItem,\n\tPortal,\n\tRoot,\n\tSeparator,\n\tTrigger,\n} from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Button, ButtonProps } from \"@/core/button\";\nimport { DropdownChevron } from \"@/core/dropdown-chevron\";\nimport { Icon } from \"@/core/icon\";\nimport { Tooltip } from \"@/core/tooltip\";\n\nconst MenuTrigger = ({ children, ...rest }: ButtonProps) => {\n\tif (children == null) {\n\t\treturn (\n\t\t\t<Trigger asChild>\n\t\t\t\t<Button {...rest}>\n\t\t\t\t\t<Icon icon={faEllipsis} />\n\t\t\t\t</Button>\n\t\t\t</Trigger>\n\t\t);\n\t}\n\tif (typeof children === \"string\") {\n\t\treturn (\n\t\t\t<Trigger asChild>\n\t\t\t\t<Button {...rest}>\n\t\t\t\t\t<span>{children}</span>\n\t\t\t\t\t<DropdownChevron />\n\t\t\t\t</Button>\n\t\t\t</Trigger>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Trigger asChild>\n\t\t\t<Button {...rest}>{children}</Button>\n\t\t</Trigger>\n\t);\n};\n\ntype MenuContentProps = DropdownMenuContentProps & { unrestrictedHeight?: boolean };\nconst MenuContent = ({ children, unrestrictedHeight = false, ...props }: MenuContentProps) => (\n\t<Portal>\n\t\t<Content\n\t\t\t// hideWhenDetached // TODO: this might be cool for long menus\n\t\t\tcollisionPadding={8}\n\t\t\tsideOffset={4}\n\t\t\talign=\"end\"\n\t\t\tclassName=\"z-100 min-w-48 rounded-lg bg-white p-1.5 shadow-lg\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className={twJoin(\"overflow-y-auto\", !unrestrictedHeight && \"max-h-[252px]\")}>{children}</div>\n\t\t</Content>\n\t</Portal>\n);\n\ntype MenuItemProps = Pick<RadixMenuItemProps, \"asChild\" | \"children\" | \"disabled\" | \"textValue\" | \"onSelect\"> & {\n\tloading?: boolean;\n\tsize?: \"default\" | \"lg\";\n};\nconst MenuItem = ({ loading, disabled, size = \"default\", ...rest }: MenuItemProps) => (\n\t<Item\n\t\tdata-loading={loading || undefined}\n\t\tdisabled={loading || disabled}\n\t\tclassName={twJoin(\n\t\t\t\"on-menu-item-active group flex w-full cursor-pointer items-center rounded-md p-2 text-gray-700 outline-hidden select-none data-disabled:cursor-not-allowed data-disabled:text-gray-400 data-highlighted:bg-gray-100 data-loading:bg-transparent data-loading:text-gray-400\",\n\t\t\tsize === \"default\" ? \"gap-1.5 text-sm\" : \"gap-2 text-base\",\n\t\t)}\n\t\t{...rest}\n\t/>\n);\n\ntype MenuItemWithToolTipProps = MenuItemProps & {\n\t/**\n\t * tooltip Content\n\t */\n\ttooltip?: React.ReactNode;\n};\n\nconst MenuItemWithDisabledTooltip = ({ tooltip, onSelect, ...props }: MenuItemWithToolTipProps) => {\n\tif (!props.disabled || !tooltip) {\n\t\treturn <MenuItem {...props} onSelect={onSelect} />;\n\t}\n\treturn (\n\t\t<Tooltip\n\t\t\ttrigger={\n\t\t\t\t<span>\n\t\t\t\t\t<MenuItem {...props} />\n\t\t\t\t</span>\n\t\t\t}\n\t\t\tcontent={tooltip}\n\t\t\tside=\"left\"\n\t\t/>\n\t);\n};\n\nexport const MenuRoot = (props: DropdownMenuProps) => <Root modal={false} {...props} />;\nexport const MenuSeparator = () => <Separator className=\"my-[5px] h-px bg-gray-200\" />;\n\nexport type MenuProps = DropdownMenuProps &\n\tPick<DropdownMenuContentProps, \"align\"> & {\n\t\ttrigger?: React.ReactNode;\n\t\ttriggerSize?: ButtonProps[\"size\"];\n\t\tvariant?: \"default\" | \"minimal\";\n\t} & Pick<ButtonProps, \"disabled\">;\n/**\n * @example\n * <Menu trigger=\"Actions\">\n * \t<Menu.Item>Transform object...</Menu.Item>\n * \t<Menu.Item>Edit</Menu.Item>\n * </Menu>\n * // use default trigger!\n * <Menu>\n * \t<Menu.Item onSelect={() => ...}>Transform object...</Menu.Item>\n * \t<Menu.Item>Edit</Menu.Item>\n * </Menu>\n */\nexport const Menu = ({ children, trigger, align, variant = \"default\", triggerSize, ...rest }: MenuProps) => {\n\tswitch (variant) {\n\t\tcase \"minimal\":\n\t\t\treturn (\n\t\t\t\t<MenuRoot {...rest}>\n\t\t\t\t\t<MenuTrigger {...rest} size={triggerSize || \"xs\"} variant=\"transparent\">\n\t\t\t\t\t\t{trigger}\n\t\t\t\t\t</MenuTrigger>\n\t\t\t\t\t<MenuContent align={align}>{children}</MenuContent>\n\t\t\t\t</MenuRoot>\n\t\t\t);\n\t\tcase \"default\":\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<MenuRoot {...rest}>\n\t\t\t\t\t<MenuTrigger size={triggerSize} {...rest}>\n\t\t\t\t\t\t{trigger}\n\t\t\t\t\t</MenuTrigger>\n\t\t\t\t\t<MenuContent align={align}>{children}</MenuContent>\n\t\t\t\t</MenuRoot>\n\t\t\t);\n\t}\n};\n\nMenu.Root = MenuRoot;\nMenu.Trigger = MenuTrigger;\nMenu.RawTrigger = Trigger;\nMenu.Content = MenuContent;\nMenu.Item = MenuItem;\nMenu.ItemWithDisabledToolTip = MenuItemWithDisabledTooltip;\nMenu.Separator = MenuSeparator;\n","export const ModalActions = ({ children }: { children: React.ReactNode }) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div className=\"sticky bottom-0 z-2 flex items-center justify-end gap-x-2 overflow-clip rounded-b-xl bg-white/80 px-8 pt-2 pb-6 backdrop-blur-sm\">\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n","export const ModalBody = ({ children }: { children: React.ReactNode }) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn <div className=\"px-8 py-1.5\">{children}</div>;\n};\n","import { Close } from \"@radix-ui/react-dialog\";\n\nimport { Button, ButtonProps } from \"../../button\";\n\nexport const ModalCloseButton = (props: ButtonProps) => (\n\t<Close asChild>\n\t\t<Button {...props} />\n\t</Close>\n);\n","import { Content, DialogContentProps, Overlay, Portal } from \"@radix-ui/react-dialog\";\nimport { twJoin } from \"tailwind-merge\";\n\nconst preventDismiss = (e: Event) => e.preventDefault();\n\nconst handleDismiss = (dismissible?: boolean) => {\n\tif (dismissible) {\n\t\treturn;\n\t}\n\treturn preventDismiss;\n};\n\nexport type ModalContentBaseProps = Pick<DialogContentProps, \"children\" | \"onOpenAutoFocus\" | \"onCloseAutoFocus\">;\n\ntype SoftDismissProps =\n\t| { dismissible?: never; onDismiss?: (e: Event) => void }\n\t| { dismissible?: boolean; onDismiss?: never };\nexport type ModalContentProps = SoftDismissProps & {\n\tmaxWidthClassName?: `max-w-${string}`;\n\toverflowYClassName?: `overflow-y-${string}`;\n};\n\ntype FullscreenModalContentProps = {\n\tfullscreen?: boolean;\n};\n\nexport const ModalContent = ({\n\tchildren,\n\tmaxWidthClassName = \"max-w-prose\",\n\toverflowYClassName = \"overflow-y-auto\",\n\tonDismiss,\n\tdismissible = true,\n\tfullscreen,\n\t...rest\n}: ModalContentBaseProps & ModalContentProps & FullscreenModalContentProps) => (\n\t<Portal>\n\t\t<Overlay\n\t\t\t// TODO: remove z-index once the z-index wars in /app are over\n\t\t\tclassName=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-fade-in-custom-easing\"\n\t\t>\n\t\t\t<Content\n\t\t\t\t{...rest}\n\t\t\t\tclassName={twJoin(\n\t\t\t\t\tfullscreen\n\t\t\t\t\t\t? \"h-[calc(100vh-1rem)] w-[calc(100vw-1rem)]\"\n\t\t\t\t\t\t: `max-h-[calc(100vh-2rem)] w-[clamp(100vw-2rem,100%,100vw-2rem)] ${maxWidthClassName}`,\n\t\t\t\t\t`fixed top-1/2 left-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl bg-white shadow-lg focus:outline-hidden data-[state=open]:animate-fade-in-subtle-movement ${overflowYClassName}`,\n\t\t\t\t)}\n\t\t\t\tonPointerDownOutside={fullscreen ? handleDismiss() : (onDismiss ?? handleDismiss(dismissible))}\n\t\t\t\tonEscapeKeyDown={fullscreen ? handleDismiss() : (onDismiss ?? handleDismiss(dismissible))}\n\t\t\t>\n\t\t\t\t<div className=\"relative flex h-full min-w-0 flex-1 flex-col\">{children}</div>\n\t\t\t</Content>\n\t\t</Overlay>\n\t</Portal>\n);\n","import { Description } from \"@radix-ui/react-dialog\";\n\nexport const ModalDescription = ({ children }: { children: React.ReactNode }) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn <Description className=\"pb-3 text-base/6 font-normal text-gray-700\">{children}</Description>;\n};\n","import * as React from \"react\";\n\nimport { Callout } from \"@/core/callout\";\n\nexport const ModalErrorCallout = ({ children }: { children: React.ReactNode }) => {\n\tif (!children) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div className=\"sticky top-14 z-10 px-5\">\n\t\t\t<Callout intent=\"danger\">{children}</Callout>\n\t\t</div>\n\t);\n};\n","import { DialogProps, Root } from \"@radix-ui/react-dialog\";\n\nexport type ModalRootProps = Pick<DialogProps, \"children\" | \"open\" | \"onOpenChange\">;\nexport const ModalRoot = (props: ModalRootProps) => {\n\treturn <Root {...props} />;\n};\n","import { Title } from \"@radix-ui/react-dialog\";\n\nimport { ModalCloseX } from \"./ModalCloseX\";\n\nexport const ModalTitle = ({ children, showX = true }: { children: React.ReactNode; showX?: boolean }) => {\n\tif (children == null) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<div className=\"sticky top-0 z-2 overflow-clip rounded-t-xl bg-white/80 px-8 pt-8 pb-1.5 backdrop-blur-sm\">\n\t\t\t<Title className=\"text-xl font-semibold text-gray-900\">{children}</Title>\n\t\t\t{showX && <ModalCloseX />}\n\t\t</div>\n\t);\n};\n","import { faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { Close } from \"@radix-ui/react-dialog\";\n\nimport { Button } from \"../../button\";\nimport { Icon } from \"../../icon\";\n\nexport const ModalCloseX = () => (\n\t<span className=\"absolute top-2.5 right-2.5\">\n\t\t<Close asChild aria-label=\"Close\">\n\t\t\t<Button variant=\"transparent\">\n\t\t\t\t<span className=\"px-0.5 text-xl text-gray-500\">\n\t\t\t\t\t<Icon icon={faXmark} />\n\t\t\t\t</span>\n\t\t\t</Button>\n\t\t</Close>\n\t</span>\n);\n","import { Trigger } from \"@radix-ui/react-dialog\";\n\n/**\n * This needs to import the button folder directly from core in order to\n * prevent a dependency issue which causes the FullscreenModal to throw\n * an erorr when rendering in storybook.\n */\nimport { Button, ButtonProps } from \"@/core/button\";\n\nexport const ModalTriggerButton = (props: ButtonProps) => (\n\t<Trigger asChild>\n\t\t<Button {...props} />\n\t</Trigger>\n);\n","import * as React from \"react\";\n\nimport { ModalActions } from \"./components/ModalActions\";\nimport { ModalBody } from \"./components/ModalBody\";\nimport { ModalCloseButton } from \"./components/ModalCloseButton\";\nimport { ModalContent, ModalContentBaseProps, ModalContentProps } from \"./components/ModalContent\";\nimport { ModalDescription } from \"./components/ModalDescription\";\nimport { ModalErrorCallout } from \"./components/ModalErrorCallout\";\nimport { ModalRoot } from \"./components/ModalRoot\";\nimport { ModalTitle } from \"./components/ModalTitle\";\nimport { ModalTriggerButton } from \"./components/ModalTriggerButton\";\n\n/*\n\tTODO: remaining work to be feature complete w/ app/Modal:\n\t- blurry overlay warning if modal wants to warn user about something before continuing\n*/\n\ntype ChildrenProps = {\n\tchildren?: React.ReactNode;\n};\n\nexport type ModalBodyImplProps = {\n\ttitle?: React.ReactNode;\n\terror?: React.ReactNode;\n\tdescription?: React.ReactNode;\n\tactions?: React.ReactNode;\n\tshowX?: boolean;\n};\n\nconst ModalBodyImpl = ({\n\tchildren,\n\ttitle,\n\terror,\n\tdescription,\n\tactions,\n\tshowX = true,\n}: ModalBodyImplProps & ChildrenProps) => (\n\t<>\n\t\t<ModalTitle showX={showX}>{title}</ModalTitle>\n\t\t<ModalErrorCallout>{error}</ModalErrorCallout>\n\t\t{(description || children) && (\n\t\t\t<ModalBody>\n\t\t\t\t{/* Modal description could be wordy, so we're grouping it with the body to ensure it scrolls under the sticky header when there is overflow on ModalBody. */}\n\t\t\t\t<ModalDescription>{description}</ModalDescription>\n\t\t\t\t{children}\n\t\t\t</ModalBody>\n\t\t)}\n\t\t<ModalActions>{actions}</ModalActions>\n\t</>\n);\n\nexport type SharedModalProps = React.PropsWithChildren & {\n\tisOpen?: boolean;\n\tonClose?: () => void;\n};\n\n/**\n * If using `trigger`, the modal will control its own visibility state though you can observe changes with onOpenChange\n * Otherwise, pass `isOpen` and `onClose` to control modal state yourself.\n */\nexport type DiscriminatedVisibilityProps =\n\t| { isOpen: boolean; onClose: () => void; trigger?: never; onOpenChange?: never }\n\t| { isOpen?: never; onClose?: never; trigger: React.ReactNode; onOpenChange?: (open: boolean) => void };\n\ntype DiscriminatedContentProps =\n\t| {\n\t\t\tchildren?: React.ReactNode;\n\t\t\tcontent?: never;\n\t\t\ttitle?: never;\n\t\t\terror?: never;\n\t\t\tdescription?: never;\n\t\t\tactions?: never;\n\t }\n\t| (ModalBodyImplProps & {\n\t\t\tchildren?: never;\n\t\t\tcontent?: React.ReactNode;\n\t });\n\ntype ModalProps = DiscriminatedVisibilityProps &\n\tModalContentBaseProps &\n\tModalContentProps &\n\tDiscriminatedContentProps & { trigger?: React.ReactNode };\nexport const Modal = ({\n\tchildren,\n\ttrigger,\n\tisOpen,\n\tonClose,\n\tonOpenChange,\n\tcontent,\n\ttitle,\n\terror,\n\tdescription,\n\tactions,\n\t...rest\n}: ModalProps) => (\n\t<ModalRoot\n\t\topen={isOpen}\n\t\tonOpenChange={(open) => {\n\t\t\tif (trigger) {\n\t\t\t\tonOpenChange?.(open);\n\t\t\t} else if (open === false) {\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t}}\n\t>\n\t\t{trigger}\n\t\t<ModalContent aria-describedby={description || undefined} {...rest}>\n\t\t\t{children !== undefined ? (\n\t\t\t\tchildren\n\t\t\t) : (\n\t\t\t\t<ModalBodyImpl title={title} error={error} description={description} actions={actions}>\n\t\t\t\t\t{content}\n\t\t\t\t</ModalBodyImpl>\n\t\t\t)}\n\t\t</ModalContent>\n\t</ModalRoot>\n);\n\nModal.Body = ModalBodyImpl;\nModal.TriggerButton = ModalTriggerButton;\nModal.CloseButton = ModalCloseButton;\n","import { Title } from \"@radix-ui/react-dialog\";\nimport { twJoin } from \"tailwind-merge\";\n\nexport type FullscreenModalHeaderProps = {\n\ttitle: React.ReactNode;\n\tdescription?: React.ReactNode;\n\tleftSlot?: React.ReactNode;\n\trightSlot?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport const FullscreenModalHeader = ({\n\tclassName,\n\ttitle,\n\tdescription,\n\tleftSlot,\n\trightSlot,\n}: FullscreenModalHeaderProps) => {\n\treturn (\n\t\t<div className={twJoin(\"flex items-center justify-between gap-4\", className)}>\n\t\t\t<div className=\"flex flex-1 items-center gap-4\">\n\t\t\t\t{leftSlot}\n\t\t\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t\t\t<Title className=\"text-2xl font-medium text-gray-700\">{title}</Title>\n\t\t\t\t\t{description && <div className=\"text-base/6 text-gray-500\">{description}</div>}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-2\">{rightSlot}</div>\n\t\t</div>\n\t);\n};\n","import * as React from \"react\";\n\nimport { ModalCloseButton } from \"./components/ModalCloseButton\";\nimport { ModalContent, ModalContentBaseProps } from \"./components/ModalContent\";\nimport { ModalRoot } from \"./components/ModalRoot\";\nimport { ModalTriggerButton } from \"./components/ModalTriggerButton\";\nimport { FullscreenModalHeader } from \"./FullscreenModalHeader\";\nimport { DiscriminatedVisibilityProps, Modal } from \"./Modal\";\n\ntype ModalProps = DiscriminatedVisibilityProps &\n\tModalContentBaseProps & {\n\t\ttrigger?: React.ReactNode;\n\t\tfullscreen?: boolean;\n\t\ttitle?: React.ReactNode;\n\t\tshowX?: boolean;\n\t};\n\nexport const FullscreenModal = ({\n\tchildren,\n\ttrigger,\n\tisOpen,\n\tonClose,\n\tonOpenChange,\n\tfullscreen = true,\n\tshowX = false,\n\ttitle,\n\t...rest\n}: ModalProps) => (\n\t<ModalRoot\n\t\topen={isOpen}\n\t\tonOpenChange={(open) => {\n\t\t\tif (trigger) {\n\t\t\t\tonOpenChange?.(open);\n\t\t\t} else if (open === false) {\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t}}\n\t>\n\t\t{trigger}\n\t\t<ModalContent fullscreen={fullscreen} {...rest}>\n\t\t\t{title ? (\n\t\t\t\t<Modal.Body title={title} showX={showX}>\n\t\t\t\t\t{children}\n\t\t\t\t</Modal.Body>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</ModalContent>\n\t</ModalRoot>\n);\n\nFullscreenModal.TriggerButton = ModalTriggerButton;\nFullscreenModal.CloseButton = ModalCloseButton;\nFullscreenModal.Header = FullscreenModalHeader;\n","import * as React from \"react\";\n\nimport { ModalActions } from \"./components/ModalActions\";\nimport { ModalBody } from \"./components/ModalBody\";\nimport { ModalCloseButton } from \"./components/ModalCloseButton\";\nimport { ModalContent, ModalContentProps } from \"./components/ModalContent\";\nimport { ModalDescription } from \"./components/ModalDescription\";\nimport { ModalErrorCallout } from \"./components/ModalErrorCallout\";\nimport { ModalRoot } from \"./components/ModalRoot\";\nimport { ModalTitle } from \"./components/ModalTitle\";\nimport { ModalTriggerButton } from \"./components/ModalTriggerButton\";\nimport { DiscriminatedVisibilityProps } from \"./Modal\";\n\n/*\n\tTODO: remaining work to be feature complete w/ app/Modal:\n\t- blurry overlay warning if modal wants to warn user about something before continuing\n*/\n\ntype ChildrenProps = {\n\tchildren?: React.ReactNode;\n};\n\ntype ModalBodyImplProps = {\n\ttitle?: React.ReactNode;\n\terror?: React.ReactNode;\n\tdescription?: React.ReactNode;\n\tactions?: React.ReactNode;\n};\n\nconst ModalBodyImpl = ({ children, title, error, description, actions }: ModalBodyImplProps & ChildrenProps) => (\n\t<>\n\t\t<ModalTitle showX={false}>{title}</ModalTitle>\n\t\t<ModalErrorCallout>{error}</ModalErrorCallout>\n\t\t{(description || children) && (\n\t\t\t<ModalBody>\n\t\t\t\t{/* Modal description could be wordy, so we're grouping it with the body to ensure it scrolls under the sticky header when there is overflow on ModalBody. */}\n\t\t\t\t<ModalDescription>{description}</ModalDescription>\n\t\t\t\t{children}\n\t\t\t</ModalBody>\n\t\t)}\n\t\t<ModalActions>{actions}</ModalActions>\n\t</>\n);\n\ntype DiscriminatedContentProps =\n\t| {\n\t\t\tchildren?: React.ReactNode;\n\t\t\tcontent?: never;\n\t\t\ttitle?: never;\n\t\t\terror?: never;\n\t\t\tdescription?: never;\n\t\t\tactions?: never;\n\t }\n\t| (ModalBodyImplProps & {\n\t\t\tchildren?: never;\n\t\t\tcontent?: React.ReactNode;\n\t });\ntype ModalProps = Simplify<\n\tDiscriminatedVisibilityProps &\n\t\tPick<ModalContentProps, \"maxWidthClassName\"> &\n\t\tDiscriminatedContentProps & { trigger?: React.ReactNode }\n>;\nexport const AlertModal = ({\n\tchildren,\n\ttrigger,\n\tisOpen,\n\tonOpenChange,\n\tonClose,\n\tcontent,\n\ttitle,\n\terror,\n\tdescription,\n\tactions,\n\t...rest\n}: ModalProps) => (\n\t<ModalRoot\n\t\topen={isOpen}\n\t\tonOpenChange={(open) => {\n\t\t\tif (trigger) {\n\t\t\t\tonOpenChange?.(open);\n\t\t\t} else if (open === false) {\n\t\t\t\tonClose?.();\n\t\t\t}\n\t\t}}\n\t>\n\t\t{trigger}\n\t\t<ModalContent {...rest} dismissible={false}>\n\t\t\t{children !== undefined ? (\n\t\t\t\tchildren\n\t\t\t) : (\n\t\t\t\t<ModalBodyImpl title={title} error={error} description={description} actions={actions}>\n\t\t\t\t\t{content}\n\t\t\t\t</ModalBodyImpl>\n\t\t\t)}\n\t\t</ModalContent>\n\t</ModalRoot>\n);\n\nAlertModal.Body = ModalBodyImpl;\nAlertModal.TriggerButton = ModalTriggerButton;\nAlertModal.CloseButton = ModalCloseButton;\n","import \"react-international-phone/style.css\"; // Import the styles for react-international-phone\nimport \"./styles.css\";\n\nimport React from \"react\";\nimport { getCountry, PhoneInput, PhoneInputProps } from \"react-international-phone\";\nimport { twJoin } from \"tailwind-merge\";\nexport { getCountry };\n\nexport const PhoneNumber: React.FC<PhoneInputProps & { hasError?: boolean; onChange: (value?: string) => void }> = ({\n\thasError,\n\tonChange,\n\t...props\n}) => {\n\treturn (\n\t\t<PhoneInput\n\t\t\tdefaultCountry={props.defaultCountry ?? \"us\"}\n\t\t\tdisableDialCodeAndPrefix\n\t\t\tshowDisabledDialCodeAndPrefix\n\t\t\tinputClassName={twJoin(\"flex-1 placeholder:text-gray-400\", hasError ? \"border-red-300!\" : \"border-gray-200!\")}\n\t\t\tcountrySelectorStyleProps={{ className: \"border-gray-200!\" }}\n\t\t\tonChange={(value, meta) => onChange(meta.inputValue ? value : undefined)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport const formatPhoneNumber = (input: string | undefined): string | undefined => {\n\tif (!input) {\n\t\treturn input;\n\t}\n\t// Remove all non-digit characters\n\tconst digitsOnly = input.replace(/\\D/g, \"\");\n\n\t// Check if there are exactly 10 digits\n\tif (digitsOnly.length === 10) {\n\t\treturn `+1${digitsOnly}`;\n\t}\n\n\t// Check if there are 11 digits and the first one is '1'\n\tif (digitsOnly.length === 11 && digitsOnly.startsWith(\"1\")) {\n\t\treturn `+${digitsOnly}`;\n\t}\n\n\t// If it doesn't match the above, return the original input\n\treturn input;\n};\n\nexport const formatPhoneNumberForDisplay = (input: string | undefined): string | undefined => {\n\tif (!input) {\n\t\treturn input;\n\t}\n\t// Remove all non-digit characters\n\tconst digitsOnly = input.replace(/\\D/g, \"\");\n\n\tif (digitsOnly.length === 11 && digitsOnly.startsWith(\"1\")) {\n\t\t// US number with country code\n\t\treturn `+1 (${digitsOnly.slice(1, 4)}) ${digitsOnly.slice(4, 7)}-${digitsOnly.slice(7)}`;\n\t}\n\n\tif (digitsOnly.length === 10) {\n\t\t// US number without country code\n\t\treturn `(${digitsOnly.slice(0, 3)}) ${digitsOnly.slice(3, 6)}-${digitsOnly.slice(6)}`;\n\t}\n\n\t// Return the input as is if it doesn't match expected formats\n\treturn input;\n};\n\n// Non-strict validation for phone number. Just strictly validating US phone numbers for now\nexport const isValidPhoneNumber = (input: string | undefined): boolean => {\n\tif (!input) {\n\t\treturn false;\n\t}\n\tif (input.startsWith(\"+1\")) {\n\t\treturn input.length === 12;\n\t}\n\tif (input.startsWith(\"1\")) {\n\t\treturn input.length === 11;\n\t}\n\treturn true;\n};\n","import type { Table as ReactTable } from \"@tanstack/react-table\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { TableBody } from \"./TableBody\";\nimport { TableHeader } from \"./TableHeader\";\n\nconst variants = {\n\tdefault: \"default\",\n\tseamless: \"seamless\",\n\ttransparent: \"transparent\",\n\tsubtable: \"subtable\",\n} as const;\ntype Variant = (typeof variants)[keyof typeof variants];\ntype ConfigClassNames = { rootClassName?: string; rowClassName?: string; cellClassName?: string };\n\nconst headerClassNames = (variant: Variant): ConfigClassNames => {\n\tswitch (variant) {\n\t\tcase variants.transparent:\n\t\t\treturn {\n\t\t\t\tcellClassName: \"text-left text-sm font-medium text-gray-500 whitespace-nowrap px-2.5 py-3\",\n\t\t\t};\n\t\tcase variants.subtable:\n\t\t\treturn {\n\t\t\t\trowClassName: \"divide-x divide-gray-200\",\n\t\t\t\tcellClassName: \"text-left text-sm font-medium text-gray-500 whitespace-nowrap border-b bg-gray-100 px-2 py-1.5\",\n\t\t\t};\n\t\tcase variants.seamless:\n\t\t\treturn {\n\t\t\t\tcellClassName:\n\t\t\t\t\t\"text-left text-sm font-medium text-gray-500 whitespace-nowrap sticky top-0 z-1 border-b bg-gray-50 px-2 py-1.5 group data-[clickable]:cursor-pointer data-[clickable]:select-none data-[clickable]:hover:text-gray-800\",\n\t\t\t};\n\t\tcase variants.default:\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tcellClassName:\n\t\t\t\t\t\"text-left text-sm font-medium text-gray-500 whitespace-nowrap sticky top-0 z-1 border-b bg-gray-100 px-2 py-1.5 group data-[clickable]:cursor-pointer data-[clickable]:select-none data-[clickable]:hover:text-gray-800\",\n\t\t\t};\n\t}\n};\n\nconst bodyClassNames = (variant: Variant): ConfigClassNames => {\n\tswitch (variant) {\n\t\tcase variants.seamless:\n\t\t\treturn {\n\t\t\t\trowClassName: \"[&:not(:last-child)_td]:border-gray-200\",\n\t\t\t\tcellClassName: \"text-sm text-gray-700 whitespace-nowrap h-fit\",\n\t\t\t};\n\t\tcase variants.transparent:\n\t\t\treturn {\n\t\t\t\trootClassName: \"rounded-lg bg-white outline outline-1 outline-gray-200\",\n\t\t\t\trowClassName:\n\t\t\t\t\t\"[&:not(:last-child)_td]:border-b [&:not(:last-child)_td]:border-gray-200 [&:first-child_td:first-child]:rounded-tl-lg [&:first-child_td:last-child]:rounded-tr-lg [&:last-child_td:first-child]:rounded-bl-lg [&:last-child_td:last-child]:rounded-br-lg\",\n\t\t\t\tcellClassName: \"text-sm text-gray-700 whitespace-nowrap p-2.5 py-1.5\",\n\t\t\t};\n\t\tcase variants.subtable:\n\t\t\treturn {\n\t\t\t\trowClassName:\n\t\t\t\t\t\"[&:not(:last-child)_td]:border-b [&:not(:last-child)_td]:border-gray-200 divide-x divide-gray-200\",\n\t\t\t\tcellClassName: \"text-sm text-gray-700 whitespace-nowrap p-2\",\n\t\t\t};\n\t\tcase variants.default:\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\trowClassName:\n\t\t\t\t\t\"[&:not(:last-child)_td]:border-b [&:not(:last-child)_td]:border-gray-200 data-[depth='0']:bg-gray-50\",\n\t\t\t\tcellClassName: \"text-sm text-gray-700 whitespace-nowrap p-2\",\n\t\t\t};\n\t}\n};\n\nexport type TableProps<T> = { table: ReactTable<T>; variant?: Variant; loading?: boolean; fillHeight?: boolean };\nexport const Table = <T,>({ variant = \"default\", loading, fillHeight, ...props }: TableProps<T>) => {\n\tconst uiLoading = loading ? \"loading\" : undefined;\n\n\tswitch (variant) {\n\t\tcase variants.transparent:\n\t\t\treturn (\n\t\t\t\t<table\n\t\t\t\t\tdata-ui={uiLoading}\n\t\t\t\t\tclassName=\"mb-auto min-w-full border-separate border-spacing-0 data-[ui=loading]:pointer-events-none data-[ui=loading]:opacity-60 data-[ui=loading]:select-none\"\n\t\t\t\t>\n\t\t\t\t\t<TableHeader {...props} {...headerClassNames(variant)} />\n\t\t\t\t\t<TableBody {...props} {...bodyClassNames(variant)} loading={loading} />\n\t\t\t\t</table>\n\t\t\t);\n\t\tcase variants.subtable:\n\t\t\treturn (\n\t\t\t\t<div className=\"mb-auto min-w-full\">\n\t\t\t\t\t<table\n\t\t\t\t\t\tdata-ui={uiLoading}\n\t\t\t\t\t\tclassName=\"min-w-full border-separate border-spacing-0 data-[ui=loading]:pointer-events-none data-[ui=loading]:opacity-60 data-[ui=loading]:select-none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<TableHeader {...props} {...headerClassNames(variant)} />\n\t\t\t\t\t\t<TableBody {...props} {...bodyClassNames(variant)} loading={loading} />\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t);\n\n\t\tcase variants.seamless:\n\t\tcase variants.default:\n\t\tdefault:\n\t\t\treturn (\n\t\t\t\t<div className={twJoin(\"mb-auto overflow-auto rounded-md border border-gray-200 bg-white\", fillHeight && \"h-full min-h-0\")}>\n\t\t\t\t\t<div className=\"min-w-full\">\n\t\t\t\t\t\t<table\n\t\t\t\t\t\t\tdata-ui={uiLoading}\n\t\t\t\t\t\t\tclassName=\"relative min-w-full border-separate border-spacing-0 data-[ui=loading]:pointer-events-none data-[ui=loading]:opacity-60 data-[ui=loading]:select-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TableHeader {...props} {...headerClassNames(variant)} />\n\t\t\t\t\t\t\t<TableBody {...props} {...bodyClassNames(variant)} loading={loading} />\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t);\n\t}\n};\n","import { faTable } from \"@fortawesome/free-solid-svg-icons\";\nimport { Table } from \"@tanstack/react-table\";\nimport * as React from \"react\";\n\nimport { Icon } from \"@/core/icon\";\nimport { Spinner } from \"@/core/loaders\";\n\nimport { TableRow } from \"./TableRow\";\n\nexport type TableBodyProps<T> = {\n\ttable: Table<T>;\n\tloading?: boolean;\n\trootClassName?: string;\n\trowClassName?: string;\n\tcellClassName?: string;\n};\nexport const TableBody = <T,>({ table, loading, rootClassName, ...props }: TableBodyProps<T>) => {\n\tconst { rows } = table.getRowModel();\n\tif (loading && rows.length === 0) {\n\t\treturn (\n\t\t\t<tbody className={rootClassName}>\n\t\t\t\t<tr>\n\t\t\t\t\t<td colSpan={table.getAllLeafColumns().length} className=\"h-12 text-center align-middle text-gray-400\">\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t);\n\t}\n\tif (rows.length === 0) {\n\t\treturn (\n\t\t\t<tbody className={rootClassName}>\n\t\t\t\t<tr>\n\t\t\t\t\t{/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */}\n\t\t\t\t<EmptyRowsTd colSpan={table.getAllLeafColumns().length} emptyText={table.options.meta?.emptyText} />\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t);\n\t}\n\treturn (\n\t\t<tbody className={rootClassName}>\n\t\t\t{rows.map((row) => (\n\t\t\t\t<TableRow key={row.id} {...props} table={table} row={row} />\n\t\t\t))}\n\t\t</tbody>\n\t);\n};\n\ntype EmptyRowsTdProps = {\n\tcolSpan: number;\n\temptyText?: React.ReactNode;\n};\nexport const EmptyRowsTd = ({ emptyText = \"No rows found\", ...props }: EmptyRowsTdProps) => (\n\t<td {...props} className=\"h-12 text-center align-middle text-gray-400\">\n\t\t<p className=\"inline-flex items-center gap-2 text-2xl/none\">\n\t\t\t<span>\n\t\t\t\t<Icon icon={faTable} />\n\t\t\t</span>\n\t\t\t<span className=\"text-base/none font-medium\">{emptyText}</span>\n\t\t</p>\n\t</td>\n);\n","import { Row } from \"@tanstack/react-table\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { TableBodyProps } from \"./TableBody\";\nimport { handleCellStyle, renderCell } from \"./utils\";\n\ntype TableRowProps<T> = Omit<TableBodyProps<T>, \"rootClassName\"> & { row: Row<T> };\n\nexport const TableRow = <T,>({ table, rowClassName, cellClassName, row }: TableRowProps<T>) => {\n\tconst hasRowClick = !!table.options.meta?.onRowClick;\n\tconst isStaticSubRow = !!table.options.meta?.staticSubRows;\n\n\tconst onRowClick = <T,>(ev: React.FormEvent<HTMLTableCellElement>, row: Row<T>) => {\n\t\t// Since we're putting the handler on the td, we can check if the target and currentTarget\n\t\t// are the same element. If a button was clicked _inside_ the td, this would be false.\n\t\t// This prevents the rowClick from firing on a nested event handler firing.\n\t\tif (ev.target === ev.currentTarget) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\ttable.options.meta?.onRowClick?.(row);\n\t\t}\n\t};\n\tconst cells = row.getVisibleCells();\n\n\treturn (\n\t\t<tr\n\t\t\tdata-active={table.options.meta?.activeRowId === row.id ? \"\" : undefined}\n\t\t\tdata-clickable={!isStaticSubRow && (hasRowClick || row.getCanExpand()) ? \"\" : undefined}\n\t\t\tdata-depth={isStaticSubRow ? row.depth : undefined}\n\t\t\tonClick={!isStaticSubRow && row.getCanExpand() ? row.getToggleExpandedHandler() : undefined}\n\t\t\tclassName={twJoin(\n\t\t\t\t\"data-[active]:bg-indigo-100 data-[clickable]:hover:cursor-pointer data-[clickable]:hover:bg-indigo-50 data-[active]:data-[clickable]:hover:bg-indigo-200\",\n\t\t\t\trowClassName,\n\t\t\t)}\n\t\t>\n\t\t\t{cells.map((cell) => (\n\t\t\t\t<td\n\t\t\t\t\tkey={cell.id}\n\t\t\t\t\tonClickCapture={hasRowClick ? (ev) => onRowClick(ev, row) : undefined}\n\t\t\t\t\tclassName={cellClassName}\n\t\t\t\t\tstyle={handleCellStyle(cell)}\n\t\t\t\t>\n\t\t\t\t\t{renderCell(cell)}\n\t\t\t\t</td>\n\t\t\t))}\n\t\t</tr>\n\t);\n};\n","import { Cell, Column, flexRender, Header } from \"@tanstack/react-table\";\n\ntype HeaderOrCell<T> = Header<T, unknown> | Cell<T, unknown>;\n\nexport const isValidCell = <T>(cell: Cell<T, unknown>) => {\n\tif (!(cell.column.columnDef.cell instanceof Function)) {\n\t\treturn null;\n\t}\n\treturn cell.column.columnDef.cell(cell.getContext()) as T;\n};\n\nexport const renderHeader = <T>(header: Header<T, unknown>) => {\n\tif (header.isPlaceholder) {\n\t\treturn null;\n\t}\n\treturn flexRender(header.column.columnDef.header, header.getContext());\n};\n\nexport const renderFooter = <T>(header: Header<T, unknown>) => {\n\tif (header.isPlaceholder) {\n\t\treturn null;\n\t}\n\treturn flexRender(header.column.columnDef.footer, header.getContext());\n};\n\nexport const renderCell = <T>(cell: Cell<T, unknown>) => {\n\tif (isValidCell<T>(cell) == null) {\n\t\treturn null;\n\t}\n\treturn flexRender(cell.column.columnDef.cell, cell.getContext());\n};\n\nconst sumOffset = <T>(offset: number, { getSize }: Column<T, unknown>) => getSize() + offset;\nconst getCols = <T>(item: HeaderOrCell<T>) => {\n\tconst cols = item.getContext().table.getAllColumns();\n\tconst index = cols.findIndex(({ id }) => id === item.column.id);\n\n\treturn { cols, index };\n};\n\nconst getLeftStickyOffset = <T>(item: HeaderOrCell<T>) => {\n\tconst { cols, index } = getCols(item);\n\tif (index === 0) {\n\t\treturn 0;\n\t}\n\treturn cols.slice(0, index).reduce(sumOffset, 0);\n};\n\nconst getRightStickyOffset = <T>(item: HeaderOrCell<T>) => {\n\tconst { cols, index } = getCols(item);\n\tif (index === cols.length - 1) {\n\t\treturn 0;\n\t}\n\treturn cols.slice(0, index).reduceRight(sumOffset, 0);\n};\n\nexport const handleSize = <T>(item: HeaderOrCell<T>) => {\n\tconst size = item.column.getSize();\n\tif (!size) {\n\t\treturn;\n\t}\n\n\treturn { width: size, minWidth: size };\n};\n\nexport const handleStyle = <T>(item: HeaderOrCell<T>, _style?: React.CSSProperties) => {\n\tconst style: React.CSSProperties = _style ? { ..._style } : {};\n\n\tif (item.column.columnDef.meta?.unPadded) {\n\t\tstyle.padding = 0;\n\t\tstyle.paddingTop = 0;\n\t\tstyle.paddingRight = 0;\n\t\tstyle.paddingBottom = 0;\n\t\tstyle.paddingLeft = 0;\n\t}\n\n\tconst size = item.column.getSize();\n\tif (!size) {\n\t\treturn style;\n\t}\n\n\tstyle.width = size;\n\tstyle.minWidth = size;\n\n\tif (item.column.columnDef.meta?.sticky === \"left\") {\n\t\tstyle.position = \"sticky\";\n\t\tstyle.left = getLeftStickyOffset(item);\n\t}\n\tif (item.column.columnDef.meta?.sticky === \"right\") {\n\t\tstyle.position = \"sticky\";\n\t\tstyle.right = getRightStickyOffset(item);\n\t}\n\n\treturn style;\n};\n\n// TODO: remove the \"unPadded\" option from headers\n// however, requires annoying refactor of ServiceLines Ledger table\nexport const handleHeaderStyle = handleStyle;\nexport const handleCellStyle = handleStyle;\n","import { faArrowDownWideShort, faArrowUpWideShort } from \"@fortawesome/free-solid-svg-icons\";\nimport type { Header, SortDirection, Table } from \"@tanstack/react-table\";\n\nimport { Icon } from \"../icon\";\nimport { handleHeaderStyle, renderHeader } from \"./utils\";\n\ntype TableHeaderProps<T> = {\n\ttable: Table<T>;\n\trootClassName?: string;\n\trowClassName?: string;\n\tcellClassName?: string;\n};\nexport const TableHeader = <T,>({ table, rootClassName, rowClassName, cellClassName }: TableHeaderProps<T>) => {\n\treturn (\n\t\t<thead className={rootClassName}>\n\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t<tr key={headerGroup.id} className={rowClassName}>\n\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t<Th\n\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\tcolSpan={header.colSpan}\n\t\t\t\t\t\t\tclassName={cellClassName}\n\t\t\t\t\t\t\tstyle={handleHeaderStyle(header)}\n\t\t\t\t\t\t\theader={header}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderHeader(header)}\n\t\t\t\t\t\t</Th>\n\t\t\t\t\t))}\n\t\t\t\t</tr>\n\t\t\t))}\n\t\t</thead>\n\t);\n};\n\nconst Th = <T,>({\n\theader,\n\tchildren,\n\t...props\n}: { header: Header<T, unknown> } & React.ComponentPropsWithoutRef<\"th\">) => {\n\tif (header.column.getIsSorted()) {\n\t\treturn (\n\t\t\t<th {...props} data-clickable=\"ok\" onClick={header.column.getToggleSortingHandler()}>\n\t\t\t\t{children}\n\t\t\t\t<span className=\"ml-1.5\">\n\t\t\t\t\t<SortIcon dir={header.column.getIsSorted()} />\n\t\t\t\t</span>\n\t\t\t</th>\n\t\t);\n\t}\n\tif (header.column.getCanSort()) {\n\t\treturn (\n\t\t\t<th {...props} data-clickable=\"ok\" onClick={header.column.getToggleSortingHandler()}>\n\t\t\t\t{children}\n\t\t\t\t<span className=\"invisible ml-1.5 group-hover:visible\">\n\t\t\t\t\t<SortIcon dir={header.column.getNextSortingOrder()} />\n\t\t\t\t</span>\n\t\t\t</th>\n\t\t);\n\t}\n\treturn <th {...props}>{children}</th>;\n};\n\ntype SortIconProps = {\n\tdir: false | SortDirection;\n};\nexport const SortIcon = ({ dir }: SortIconProps) => {\n\tif (dir === \"asc\") {\n\t\treturn <Icon icon={faArrowUpWideShort} />;\n\t}\n\tif (dir === \"desc\") {\n\t\treturn <Icon icon={faArrowDownWideShort} />;\n\t}\n\treturn null;\n};\n","import { ColumnSort, getCoreRowModel, Row, TableOptions, useReactTable } from \"@tanstack/react-table\";\n\nimport { AllAsNever } from \"@/core/types\";\n\ntype SortOptions = {\n\tsort: string | undefined;\n\tonSortColumn?: (newSort: ColumnSort | undefined) => void;\n};\n\ntype CustomTableMeta<T> = {\n\temptyText?: React.ReactNode;\n\tactiveRowId?: string;\n\tonRowClick?: (row: Row<T>) => void;\n\tstaticSubRows?: boolean;\n};\n\ntype DiscriminatedSortOptions = SortOptions | AllAsNever<SortOptions>;\ntype CustomTableOptions<T> = Simplify<\n\tOmit<TableOptions<T>, \"getCoreRowModel\"> & DiscriminatedSortOptions & CustomTableMeta<T>\n>;\n\nexport const useTable = <T>(options: CustomTableOptions<T>) => {\n\t// This helps avoid specifying `enableSorting` on every column def when\n\t// nothing in the table is sortable\n\tconst enableSorting = !!options.state?.sorting && !!options.onSortingChange;\n\n\treturn useReactTable<T>({\n\t\t...options,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\t// This is a hack to allow the columns to flex by default,\n\t\t// and, then when size is overridden, they become fixed\n\t\tdefaultColumn: {\n\t\t\t...options.defaultColumn,\n\t\t\tminSize: 0,\n\t\t\tsize: 0,\n\t\t},\n\t\t/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\t\tmeta: {\n\t\t\temptyText: options.emptyText,\n\t\t\tactiveRowId: options.activeRowId,\n\t\t\tonRowClick: options.onRowClick,\n\t\t\tstaticSubRows: options.staticSubRows,\n\t\t},\n\t\t/* eslint-enable @typescript-eslint/no-unsafe-assignment */\n\t\tmanualSorting: true,\n\t\tenableMultiSort: false,\n\t\tenableSorting,\n\t});\n};\n","import { ToggleGroup, ToggleGroupItem } from \"@radix-ui/react-toggle-group\";\nimport { Fragment } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { TabDefinition } from \"../tabs\";\n\ntype TabGroupProps<TabId extends string> = {\n\ttabs: TabDefinition<TabId>[];\n\tcurrentTab: TabId;\n\tsetCurrentTab: (id: TabId) => void;\n};\n\nexport const TabGroup = <TabId extends string>({ tabs, currentTab, setCurrentTab }: TabGroupProps<TabId>) => {\n\treturn (\n\t\t<ToggleGroup\n\t\t\ttype=\"single\"\n\t\t\tvalue={currentTab}\n\t\t\tonValueChange={(value: TabId) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tsetCurrentTab(value);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tclassName=\"flex w-full justify-between gap-1 rounded-lg border border-gray-200 p-1\"\n\t\t>\n\t\t\t{tabs.map(({ id, label, disabled }, index) => (\n\t\t\t\t<Fragment key={id}>\n\t\t\t\t\t<ToggleGroupItem\n\t\t\t\t\t\tvalue={id}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tclassName={twJoin(\n\t\t\t\t\t\t\t\"flex w-full items-center justify-center rounded-md border px-2 py-2 transition\",\n\t\t\t\t\t\t\tdisabled && \"cursor-not-allowed opacity-50\",\n\t\t\t\t\t\t\t!disabled && \"hover:bg-indigo-50 focus-visible:border-indigo-700 focus-visible:outline-none\",\n\t\t\t\t\t\t\tid !== currentTab && \"border-transparent\",\n\t\t\t\t\t\t\tid !== currentTab && !disabled && \"hover:border-indigo-200\",\n\t\t\t\t\t\t\tid === currentTab && !disabled && \"border border-indigo-400 bg-white ring-2 ring-indigo-100\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t{index !== tabs.length - 1 && <div className=\"my-1 flex w-[1px] bg-gray-300\" />}\n\t\t\t\t</Fragment>\n\t\t\t))}\n\t\t</ToggleGroup>\n\t);\n};\n","import {\n\tContent,\n\tList,\n\tRoot,\n\tTabsContentProps,\n\tTabsListProps,\n\tTabsProps as RadixTabsProps,\n} from \"@radix-ui/react-tabs\";\nimport { PropsWithChildren } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { createContextHelper } from \"@/core/utils/create-context-helper\";\n\nimport { TabsTrigger } from \"./Trigger\";\n\nexport type TabDefinition<TabId extends string> = {\n\tid: TabId;\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tfsId?: string;\n};\n\nexport type TabsProps<TabId extends string> = PropsWithChildren & {\n\ttabs: readonly TabDefinition<TabId>[];\n\tcurrentTab: TabId;\n\tsetCurrentTab: (id: TabId) => void;\n\tclassName?: string;\n\ttabsListClassName?: string;\n\ttabsListContainerClassName?: string;\n\ttabsListTriggerClassName?: string;\n\textraNode?: React.ReactNode;\n};\n\ntype TabsContext = {\n\tcurrentTab: string;\n};\nconst [Provider, useContext] = createContextHelper<TabsContext>();\n\nexport const Tabs = <TabId extends string>({\n\ttabs,\n\tclassName,\n\ttabsListClassName,\n\ttabsListContainerClassName,\n\ttabsListTriggerClassName,\n\tcurrentTab,\n\tsetCurrentTab,\n\tchildren,\n\textraNode,\n}: TabsProps<TabId>) => {\n\treturn (\n\t\t<Provider currentTab={currentTab}>\n\t\t\t<Root className={className} value={currentTab} onValueChange={(id) => setCurrentTab(id as TabId)}>\n\t\t\t\t<div className={twJoin(\"flex gap-4\", tabsListContainerClassName)}>\n\t\t\t\t\t<List className={twJoin(\"flex space-x-4 overflow-x-auto\", tabsListClassName)}>\n\t\t\t\t\t\t{tabs.map(({ id, label, disabled, fsId }) => (\n\t\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tclassName={tabsListTriggerClassName}\n\t\t\t\t\t\t\t\tfsId={fsId}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</List>\n\t\t\t\t\t{extraNode}\n\t\t\t\t</div>\n\t\t\t\t{children}\n\t\t\t</Root>\n\t\t</Provider>\n\t);\n};\n\ntype TabContentProps<TabId = string> = {\n\tid: TabId;\n} & Omit<TabsContentProps, \"value\">;\nconst TabContent = <TabId extends string>({ id, ...rest }: TabContentProps<TabId>) => {\n\treturn <Content value={id} {...rest} />;\n};\n\n/**\n * Tab content that's never unmounted, only hidden.\n */\nconst AlwaysMountedTabContent = <TabId extends string>({\n\tid,\n\tvisibleClassName,\n\tclassName,\n\tchildren,\n}: TabContentProps<TabId> & {\n\tvisibleClassName?: string;\n}) => {\n\tconst { currentTab } = useContext();\n\tconst visible = id === currentTab;\n\treturn <div className={twJoin(visible ? visibleClassName : \"hidden\", className)}>{children}</div>;\n};\nTabs.TabContent = TabContent;\nTabs.AlwaysMountedTabContent = AlwaysMountedTabContent;\n\ntype TabsRootProps<TabId extends string> = Omit<RadixTabsProps, \"value\" | \"onValueChange\" | \"defaultValue\"> & {\n\tdefaultValue?: TabId;\n\tcurrentTab?: TabId;\n\tsetCurrentTab?: (id: TabId) => void;\n\tclassName?: string;\n};\nexport const createTypedTabs = <TabId extends string>() => ({\n\tRoot: ({ currentTab, setCurrentTab, ...props }: TabsRootProps<TabId>) => {\n\t\tconst handleValueChange = setCurrentTab ? (value: string) => setCurrentTab(value as TabId) : undefined;\n\t\treturn <Root {...props} value={currentTab} onValueChange={handleValueChange} />;\n\t},\n\tList: ({ className, ...props }: TabsListProps) => (\n\t\t<List {...props} className={twJoin(\"flex space-x-4 overflow-x-auto\", className)} />\n\t),\n\tTrigger: TabsTrigger<TabId>,\n\tContent: TabContent<TabId>,\n});\n","import { Trigger } from \"@radix-ui/react-tabs\";\n// eslint-disable-next-line no-restricted-imports\nimport { twMerge } from \"tailwind-merge\";\n\nexport type TabsTriggerProps<TabId extends string> = {\n\tid: TabId;\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tdataTestId?: string;\n\tfsId?: string;\n\textra?: React.ReactNode;\n\tclassName?: string;\n};\n\nexport const TabsTrigger = <TabId extends string>({\n\tid,\n\tlabel,\n\tdisabled,\n\tdataTestId,\n\tfsId,\n\textra,\n\tclassName,\n}: TabsTriggerProps<TabId>) => (\n\t<Trigger\n\t\tclassName={twMerge(\n\t\t\t\"h-full space-x-1 border-b-2 px-1 py-1 font-medium whitespace-nowrap transition-colors duration-150 data-[state='active']:border-indigo-500 data-[state='active']:text-indigo-700 data-[state='inactive']:border-transparent data-[state='inactive']:text-gray-500 data-[state='inactive']:hover:border-gray-200 data-[state='inactive']:hover:text-gray-700\",\n\t\t\tclassName,\n\t\t)}\n\t\tvalue={id}\n\t\tdisabled={disabled}\n\t\tdata-testid={dataTestId}\n\t\tfs-id={fsId}\n\t>\n\t\t{label}\n\t\t{extra && <span>{extra}</span>}\n\t</Trigger>\n);\n","import { ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { Tabs } from \"./Tabs\";\n\ntype ScrollTab = {\n\ttabName: string;\n\tcontent: ReactNode;\n};\n\ntype ScrollTabsProps = {\n\ttabs: ScrollTab[];\n\tonSelectTab?: (tabId: string) => void;\n\tsectionClassName?: string;\n};\n\n/**\n * Reusable component for creating a page layout with a set of tabs which scroll to different\n * sections of the page. The layout will automatically keep track of scroll position and update\n * the selected tab accordingly.\n */\nexport const ScrollTabsLayout = ({ tabs, onSelectTab, sectionClassName }: ScrollTabsProps) => {\n\tconst [selectedTabName, setSelectedTabName] = useState<string>(tabs[0].tabName);\n\tconst scrollContainerRef = useRef<HTMLDivElement | null>(null);\n\tconst tabRefs = useRef<Record<string, HTMLElement>>({});\n\n\tconst handleSelectTab = useCallback(\n\t\t(tabId: string) => {\n\t\t\tscrollContainerRef.current?.scrollTo({\n\t\t\t\ttop: tabRefs.current[tabId].offsetTop,\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t});\n\t\t\tsetSelectedTabName(tabId);\n\t\t\tonSelectTab?.(tabId);\n\t\t},\n\t\t[onSelectTab],\n\t);\n\n\tuseEffect(() => {\n\t\tconst scrollContainer = scrollContainerRef.current;\n\t\tconst handleScroll: EventListener = (e) => {\n\t\t\tObject.entries(tabRefs.current).forEach(([tabName, tabRef]) => {\n\t\t\t\t// @ts-expect-error scrollTop doesn't exist on EventTarget\n\t\t\t\tif (e.currentTarget?.scrollTop >= tabRef.offsetTop) {\n\t\t\t\t\tsetSelectedTabName(tabName);\n\t\t\t\t\tonSelectTab?.(tabName);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tscrollContainer?.addEventListener(\"scroll\", handleScroll);\n\n\t\treturn () => {\n\t\t\tscrollContainer?.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tcurrentTab={selectedTabName}\n\t\t\t\tsetCurrentTab={handleSelectTab}\n\t\t\t\ttabs={tabs.map((tab) => ({ id: tab.tabName, label: tab.tabName }))}\n\t\t\t/>\n\t\t\t<hr />\n\t\t\t<div ref={scrollContainerRef} className=\"relative h-screen overflow-y-auto\">\n\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={tab.tabName}\n\t\t\t\t\t\tref={(el) => (el ? (tabRefs.current[tab.tabName] = el) : undefined)}\n\t\t\t\t\t\tclassName={twJoin(\"first:pt-4\", sectionClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{tab.content}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t\t{/* This empty screen-height div forces the scroll container to always be scrollable */}\n\t\t\t\t<div className=\"h-screen\" />\n\t\t\t</div>\n\t\t</>\n\t);\n};\n","import { Content, List, Root, TabsContentProps } from \"@radix-ui/react-tabs\";\nimport { PropsWithChildren } from \"react\";\nimport { twJoin } from \"tailwind-merge\";\n\nimport { createContextHelper } from \"@/core/utils/create-context-helper\";\n\nimport { TabsTrigger } from \"./Trigger\";\n\nexport type ComposableTabDefinition<TabId extends string> = {\n\tid: TabId;\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n};\n\ntype ComposableTabsContextValue<TabId extends string = string> = {\n\ttabs: readonly ComposableTabDefinition<TabId>[];\n\tcurrentTab: TabId;\n};\n\nconst [TabsProvider, useTabsContext] = createContextHelper<ComposableTabsContextValue>();\n\ntype ComposableTabsListProps = {\n\tclassName?: string;\n\tcontainerClassName?: string;\n\textraNode?: React.ReactNode;\n};\n\nconst ComposableTabsList = ({ className, containerClassName, extraNode }: ComposableTabsListProps) => {\n\tconst { tabs } = useTabsContext();\n\n\treturn (\n\t\t<div className={twJoin(\"flex gap-4\", containerClassName)}>\n\t\t\t<List className={twJoin(\"flex space-x-4 overflow-x-auto\", className)}>\n\t\t\t\t{tabs.map(({ id, label, disabled }) => (\n\t\t\t\t\t<TabsTrigger key={id} id={id} label={label} disabled={disabled} />\n\t\t\t\t))}\n\t\t\t</List>\n\t\t\t{extraNode}\n\t\t</div>\n\t);\n};\n\ntype ComposableTabContentProps<TabId = string> = {\n\tid: TabId;\n} & Omit<TabsContentProps, \"value\">;\n\nconst ComposableTabContent = <TabId extends string>({ id, ...rest }: ComposableTabContentProps<TabId>) => {\n\treturn <Content value={id} {...rest} />;\n};\n\nconst ComposableAlwaysMountedTabContent = <TabId extends string>({\n\tid,\n\tvisibleClassName,\n\tclassName,\n\tchildren,\n}: ComposableTabContentProps<TabId> & { visibleClassName?: string }) => {\n\tconst { currentTab } = useTabsContext();\n\tconst visible = id === currentTab;\n\treturn <div className={twJoin(visible ? visibleClassName : \"hidden\", className)}>{children}</div>;\n};\n\nexport type ComposableTabsProps<TabId extends string> = PropsWithChildren & {\n\ttabs: readonly ComposableTabDefinition<TabId>[];\n\tcurrentTab: TabId;\n\tsetCurrentTab: (id: TabId) => void;\n\tclassName?: string;\n};\n\nconst ComposableTabsRoot = <TabId extends string>({\n\ttabs,\n\tcurrentTab,\n\tsetCurrentTab,\n\tclassName,\n\tchildren,\n}: ComposableTabsProps<TabId>) => {\n\treturn (\n\t\t<TabsProvider tabs={tabs} currentTab={currentTab}>\n\t\t\t<Root className={className} value={currentTab} onValueChange={(id) => setCurrentTab(id as TabId)}>\n\t\t\t\t{children}\n\t\t\t</Root>\n\t\t</TabsProvider>\n\t);\n};\n\n// Use ComposableTabs when you want to use Tabs but have the list of tab controls and tab content in seperate parts of the UI\nexport const ComposableTabs = {\n\tRoot: ComposableTabsRoot,\n\tList: ComposableTabsList,\n\tTabContent: ComposableTabContent,\n\tAlwaysMountedTabContent: ComposableAlwaysMountedTabContent,\n};\n","import { faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport * as React from \"react\";\n\nimport { Icon } from \"../icon\";\nimport { Label } from \"../label\";\nimport { Tooltip } from \"../tooltip\";\nimport { Intent } from \"../variants\";\n\ntype TagLabelProps = {\n\tchildren: React.ReactNode;\n\tremovable?: boolean;\n\tonRemove?: () => void;\n\tintent?: Intent;\n};\n\nconst TagLabel = (\n\t{ children, removable, onRemove, intent = \"default\", ...rest }: TagLabelProps,\n\tref: React.ForwardedRef<HTMLSpanElement>,\n) => (\n\t<Label {...rest} ref={ref} intent={intent}>\n\t\t{children}\n\t\t{removable && (\n\t\t\t<button\n\t\t\t\tclassName=\"ml-1 inline-flex h-xs items-center px-1 text-gray-500 hover:text-gray-700 focus:outline-hidden\"\n\t\t\t\tonClick={onRemove}\n\t\t\t>\n\t\t\t\t<Icon icon={faXmark} />\n\t\t\t</button>\n\t\t)}\n\t</Label>\n);\n\nconst TagImpl = React.forwardRef(TagLabel);\n\ntype TagProps = TagLabelProps & {\n\ttooltip?: string;\n};\nexport const Tag = ({ tooltip, ...rest }: TagProps) => {\n\tif (!tooltip) {\n\t\treturn <TagImpl {...rest} />;\n\t}\n\treturn <Tooltip trigger={<TagImpl {...rest} />} content={<p className=\"text-sm\">{tooltip}</p>} />;\n};\n","import { useEffect, useState } from \"react\";\n\n/**\n * I've found managing hover state with onMouseOver and onMouseOut events can be unreliable\n * when moving the mouse quickly. So this hook uses an event listener to more reliably track\n * mouse movement.\n */\nexport const useIsHovered = (ref: React.RefObject<HTMLElement>) => {\n\tconst [isHovered, setIsHovered] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst handleMouseMove = () => {\n\t\t\tif (ref.current?.matches(\":hover\")) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t} else {\n\t\t\t\tsetIsHovered(false);\n\t\t\t}\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tif (isHovered) {\n\t\t\t\tsetIsHovered(false);\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"mousemove\", handleMouseMove);\n\n\t\t// remove hover on scroll event since underlying element moved without moving mouse\n\t\tif (isHovered) {\n\t\t\twindow.addEventListener(\"scroll\", handleScroll, true);\n\t\t}\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"mousemove\", handleMouseMove);\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll, true);\n\t\t};\n\t}, [ref, isHovered]);\n\n\treturn isHovered;\n};\n"],"mappings":"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","names":["jsx","twJoin","jsx","jsx","twJoin","forwardRef","twJoin","jsx","twMerge","jsx","jsxs","twMerge","faChevronDown","twJoin","React","React","jsx","Provider","useContext","jsx","Provider","state","jsx","jsxs","twJoin","faChevronDown","Content","RadixTooltip","twJoin","React","jsx","jsxs","React","jsx","jsxs","twJoin","useCallback","faChevronRight","jsx","jsxs","faChevronRight","forwardRef","twJoin","twMerge","jsx","jsxs","forwardRef","twMerge","twJoin","jsx","useCallback","useState","React","forwardRef","twJoin","sizeStyles","jsx","jsxs","forwardRef","jsx","useState","useCallback","jsx","useCallback","useCallback","DatePickerLib","jsx","useCallback","DatePickerLib","jsx","twMerge","jsx","forwardRef","twJoin","jsx","useFormState","useController","createContext","useContext","useMemo","React","Fragment","jsx","createContext","useMemo","useContext","createContext","useContext","useMemo","Fragment","jsx","createContext","useMemo","useContext","forwardRef","forwardRef","jsx","jsx","forwardRef","forwardRef","twJoin","jsx","jsx","jsxs","jsx","jsxs","twJoin","twJoin","jsx","jsx","jsxs","twJoin","Fragment","jsx","jsxs","forwardRef","forwardRef","twJoin","jsx","jsxs","forwardRef","twJoin","forwardRef","twJoin","jsx","jsxs","forwardRef","twJoin","jsx","forwardRef","jsx","faCircleExclamation","faTriangleExclamation","forwardRef","twJoin","useState","jsx","jsxs","forwardRef","twJoin","faTriangleExclamation","faCircleExclamation","faCircleExclamation","faTriangleExclamation","forwardRef","twJoin","jsx","jsxs","twoDecimalFormatter","formatInput","roundToTwoDecimalPlaces","forwardRef","twJoin","faTriangleExclamation","faCircleExclamation","Fragment","jsx","jsxs","jsx","useEffect","useMemo","useState","faCheck","faXmark","useMemo","useRef","useState","twJoin","faChevronDown","twJoin","jsx","twJoin","faChevronDown","twMerge","jsx","jsxs","twMerge","useEffect","useRef","twJoin","jsx","jsxs","useRef","useEffect","twJoin","Fragment","jsx","jsxs","useState","useRef","useMemo","items","twJoin","faCheck","faXmark","jsx","useMemo","useState","jsx","useState","useMemo","jsx","jsx","jsx","jsx","forwardRef","twMerge","Fragment","jsx","jsxs","forwardRef","twMerge","jsx","twJoin","React","jsx","jsx","jsxs","twJoin","twJoin","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","useCallback","twJoin","jsx","useCallback","twJoin","z","z","z","z","z","z","forwardRef","useEffect","useRef","twJoin","FontAwesomeIcon","twJoin","jsx","jsx","twMerge","jsx","createContext","useContext","useCallback","useEffect","useRef","jsx","jsxs","useEffect","forwardRef","useRef","twJoin","faChevronDown","faXmark","twJoin","twJoin","jsx","Tag","twMerge","jsx","twMerge","jsx","twMerge","twJoin","jsx","twJoin","_","index","twJoin","jsx","twJoin","Fragment","jsx","jsxs","faChevronDown","faXmark","twJoin","faCircle","FontAwesomeIcon","forwardRef","jsx","jsxs","twJoin","jsx","jsxs","twJoin","React","twJoin","sizeStyles","colorStyles","jsx","LabelImpl","Content","Portal","Root","Trigger","twJoin","jsx","jsxs","Trigger","Portal","Content","twJoin","Root","jsx","jsx","Close","jsx","Close","Content","Portal","twJoin","jsx","jsx","jsx","Root","jsx","faXmark","Close","jsx","Close","faXmark","jsx","jsxs","Trigger","jsx","Trigger","Fragment","jsx","jsxs","Title","twJoin","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","ModalBodyImpl","twJoin","jsx","jsx","twJoin","twJoin","twJoin","jsx","row","twJoin","jsx","jsxs","jsx","jsxs","jsx","jsxs","twJoin","Fragment","twJoin","jsx","jsxs","Content","Root","twJoin","Trigger","twMerge","jsx","jsxs","jsx","jsxs","Provider","useContext","Root","twJoin","Content","useCallback","useEffect","useRef","useState","twJoin","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","twJoin","Content","List","Root","twJoin","jsx","jsxs","twJoin","List","Content","Root","faXmark","React","jsx","jsxs","faXmark","useEffect","useState"]}
|