@paolojulian.dev/design-system 4.6.5 → 4.6.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/components/PContainers/Row/Row.tsx","../src/components/PContainers/Stack/Stack.tsx","../src/components/PBadge/PBadge.tsx","../src/components/PButton/PButton.tsx","../node_modules/class-variance-authority/node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/components/PTypography/PTypography.constants.ts","../src/components/PTypography/PTypography.tsx","../src/components/PCard/PCard.tsx","../src/components/PCardGrid/PCardGrid.tsx","../src/components/PCombobox/PCombobox.tsx","../src/components/PDatePicker/PDatePicker.tsx","../src/components/PDateRangePicker/PDateRangePicker.tsx","../src/components/PHighlight/PHighlight.tsx","../src/components/PHorizontalSlider/PHorizontalSlider.tsx","../src/components/PSelect/PSelect.tsx","../src/components/PPagination/PPagination.tsx","../src/components/PTable/PTable.tsx","../src/components/PSectionHeader/PSectionHeader.tsx","../src/components/PTextInput/PTextInput.tsx","../src/components/PTextArea/PTextArea.tsx"],"sourcesContent":["import { CSSProperties, FC, ReactNode } from 'react';\nimport cn from '../../../utils/cn';\nimport './Row.css';\n\nexport type RowProps = {\n children: ReactNode;\n gap?: CSSProperties['gap'];\n alignItems?: CSSProperties['alignItems'];\n justifyContent?: CSSProperties['justifyContent'];\n className?: string;\n};\n\nconst Row: FC<RowProps> = ({\n children,\n gap = undefined,\n alignItems = undefined,\n justifyContent = undefined,\n className = '',\n}) => {\n return (\n <div\n className={cn('p-row', className)}\n style={{\n gap,\n alignItems,\n justifyContent,\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default Row;\n","import { CSSProperties, FC, ReactNode } from 'react';\nimport cn from '../../../utils/cn';\nimport './Stack.css';\n\nexport type StackProps = {\n children: ReactNode;\n gap?: CSSProperties['gap'];\n alignItems?: CSSProperties['alignItems'];\n justifyContent?: CSSProperties['justifyContent'];\n className?: string;\n};\n\nconst Stack: FC<StackProps> = ({\n children,\n gap = undefined,\n alignItems = undefined,\n justifyContent = undefined,\n className = '',\n}) => {\n return (\n <div\n className={cn('p-stack', className)}\n style={{\n gap,\n alignItems,\n justifyContent,\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default Stack;\n","import {\n forwardRef,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PBadge.css';\n\nexport type PBadgeVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info' | 'neutral';\nexport type PBadgeSize = 'sm' | 'md';\nexport type PBadgeAppearance = 'subtle' | 'solid' | 'outline';\nexport type PBadgeRef = HTMLElement;\n\nexport type PBadgeProps = {\n as?: ElementType;\n variant?: PBadgeVariant;\n size?: PBadgeSize;\n appearance?: PBadgeAppearance;\n isPinging?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n className?: string;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'color'>;\n\nexport const PBadge = forwardRef<PBadgeRef, PBadgeProps>(\n (\n {\n as: Element = 'span',\n variant = 'neutral',\n size = 'sm',\n appearance = 'subtle',\n isPinging = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref,\n ) => (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-badge',\n `p-badge--${variant}`,\n `p-badge--${size}`,\n `p-badge--${appearance}`,\n isPinging && 'p-badge--pinging',\n className,\n )}\n >\n {leftIcon && (\n <span className=\"p-badge__icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n )}\n <span className=\"p-badge__label\">{children}</span>\n {rightIcon && (\n <span className=\"p-badge__icon\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n )}\n </Element>\n ),\n);\n\nPBadge.displayName = 'PBadge';\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type MouseEvent,\n type Ref,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PButton.css';\n\nexport type PButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost';\nexport type PButtonSize = 'sm' | 'md' | 'lg';\nexport type PButtonRef = HTMLButtonElement | HTMLAnchorElement;\n\ntype PButtonBaseProps = {\n variant?: PButtonVariant;\n size?: PButtonSize;\n fullWidth?: boolean;\n isActive?: boolean;\n isLoading?: boolean;\n isPinging?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\ntype PButtonAsButtonProps = PButtonBaseProps &\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'children'> & {\n href?: undefined;\n };\n\ntype PButtonAsAnchorProps = PButtonBaseProps &\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'children'> & {\n href: string;\n disabled?: boolean;\n type?: never;\n };\n\nexport type PButtonProps = PButtonAsButtonProps | PButtonAsAnchorProps;\ntype PButtonAnchorElementProps = Omit<PButtonAsAnchorProps, keyof PButtonBaseProps>;\ntype PButtonButtonElementProps = Omit<PButtonAsButtonProps, keyof PButtonBaseProps>;\n\nexport const PButton = forwardRef<PButtonRef, PButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n isActive = false,\n isLoading = false,\n isPinging = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const isUnavailable = Boolean(('disabled' in props && props.disabled) || isLoading);\n const buttonClassName = cn(\n 'p-button',\n `p-button--${variant}`,\n `p-button--${size}`,\n fullWidth && 'p-button--full-width',\n isActive && 'p-button--active',\n isPinging && 'p-button--pinging',\n className,\n );\n const content = (\n <>\n {isLoading ? (\n <span className=\"p-button__spinner\" aria-hidden=\"true\" />\n ) : (\n leftIcon && (\n <span className=\"p-button__icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n )\n )}\n <span className=\"p-button__label\">{children}</span>\n {!isLoading && rightIcon && (\n <span className=\"p-button__icon\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n )}\n </>\n );\n\n if ('href' in props && typeof props.href === 'string') {\n const { disabled: anchorDisabled, onClick, ...anchorProps } =\n props as PButtonAnchorElementProps;\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isUnavailable) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <a\n {...anchorProps}\n ref={ref as Ref<HTMLAnchorElement>}\n className={buttonClassName}\n aria-disabled={isUnavailable || undefined}\n aria-busy={isLoading || undefined}\n data-active={isActive || undefined}\n data-disabled={anchorDisabled || undefined}\n tabIndex={isUnavailable ? -1 : anchorProps.tabIndex}\n onClick={handleClick}\n >\n {content}\n </a>\n );\n }\n\n const { type = 'button', disabled: buttonDisabled, ...buttonProps } =\n props as PButtonButtonElementProps;\n\n return (\n <button\n {...buttonProps}\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n disabled={Boolean(buttonDisabled || isLoading)}\n className={buttonClassName}\n aria-busy={isLoading || undefined}\n data-active={isActive || undefined}\n >\n {content}\n </button>\n );\n },\n);\n\nPButton.displayName = 'PButton';\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? \"\".concat(value) : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>{\n return (props)=>{\n var ref;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants , defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (ref = config.compoundVariants) === null || ref === void 0 ? void 0 : ref.reduce((acc, param1)=>{\n let { class: cvClass , className: cvClassName , ...compoundVariantOptions } = param1;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n};\n\n\n//# sourceMappingURL=index.mjs.map","import { cva } from 'class-variance-authority';\n\ntype FontVariants =\n | 'serif'\n | 'body'\n | 'body-medium'\n | 'body-wide'\n | 'heading'\n | 'heading-lg'\n | 'heading-xl';\n\nconst fontVariantsMap = {\n serif: 'p-typography--serif',\n body: 'p-typography--body',\n 'body-medium': 'p-typography--body-medium',\n 'body-wide': 'p-typography--body-wide',\n heading: 'p-typography--heading',\n 'heading-lg': 'p-typography--heading-lg',\n 'heading-xl': 'p-typography--heading-xl',\n} satisfies Record<FontVariants, string>;\n\nexport const PTypographyVariants = cva('p-typography', {\n variants: {\n variant: fontVariantsMap,\n },\n defaultVariants: {\n variant: 'body',\n },\n});\n","import { VariantProps } from 'class-variance-authority';\nimport { HTMLAttributes } from 'react';\nimport '../../index.css';\nimport cn from '../../utils/cn';\nimport './PTypography.css';\nimport { PTypographyVariants } from './PTypography.constants';\n\nexport interface PTypographyProps\n extends VariantProps<typeof PTypographyVariants>,\n HTMLAttributes<HTMLElement> {\n as?: React.ElementType;\n children: React.ReactNode;\n}\n\nexport default function PTypography({\n as: Element = 'p',\n children,\n className = '',\n variant,\n ...props\n}: PTypographyProps) {\n return (\n <Element\n className={cn(PTypographyVariants({ variant, className }))}\n {...props}\n >\n {children}\n </Element>\n );\n}\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport { PTypography } from '../PTypography';\nimport './PCard.css';\n\nexport type PCardDensity = 'compact' | 'default' | 'spacious';\nexport type PCardRef = HTMLElement;\n\ntype PCardBaseProps = {\n prefix?: ReactNode;\n eyebrow?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n media?: ReactNode;\n actions?: ReactNode;\n density?: PCardDensity;\n fullWidth?: boolean;\n width?: CSSProperties['width'];\n minWidth?: CSSProperties['minWidth'];\n height?: CSSProperties['height'];\n minHeight?: CSSProperties['minHeight'];\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n};\n\ntype PCardArticleProps = PCardBaseProps &\n Omit<HTMLAttributes<HTMLElement>, 'className' | 'children' | 'style' | 'title'> & {\n href?: undefined;\n };\n\ntype PCardAnchorProps = PCardBaseProps &\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'children' | 'style' | 'title'> & {\n href: string;\n };\n\nexport type PCardProps = PCardArticleProps | PCardAnchorProps;\ntype PCardAnchorElementProps = Omit<PCardAnchorProps, keyof PCardBaseProps>;\ntype PCardArticleElementProps = Omit<PCardArticleProps, keyof PCardBaseProps>;\ntype PCardStyle = CSSProperties & {\n '--p-card-width'?: CSSProperties['width'];\n '--p-card-min-width'?: CSSProperties['minWidth'];\n '--p-card-height'?: CSSProperties['height'];\n '--p-card-min-height'?: CSSProperties['minHeight'];\n};\n\nfunction hasRenderableNode(node: ReactNode) {\n return node !== null && node !== undefined && node !== false && node !== '';\n}\n\nfunction renderMetaNode(node: ReactNode, className: string) {\n if (!hasRenderableNode(node)) {\n return null;\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return (\n <PTypography className={className} variant=\"body-wide\">\n {node}\n </PTypography>\n );\n }\n\n return <span className={cn(className, 'p-card__meta-custom')}>{node}</span>;\n}\n\nfunction getCardSizeValue(value: CSSProperties['width']) {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const PCard = forwardRef<PCardRef, PCardProps>(\n (\n {\n prefix,\n eyebrow,\n title,\n description,\n media,\n actions,\n density = 'default',\n fullWidth = false,\n width,\n minWidth,\n height,\n minHeight,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isInteractive = 'href' in props && typeof props.href === 'string';\n const cardClassName = cn(\n 'p-card',\n density !== 'default' && `p-card--${density}`,\n fullWidth && 'p-card--full-width',\n width !== undefined && 'p-card--custom-width',\n minWidth !== undefined && 'p-card--custom-min-width',\n height !== undefined && 'p-card--custom-height',\n minHeight !== undefined && 'p-card--custom-min-height',\n isInteractive && 'p-card--interactive',\n className,\n );\n const cardStyle: PCardStyle = {\n ...style,\n ...(width !== undefined ? { '--p-card-width': getCardSizeValue(width) } : {}),\n ...(minWidth !== undefined ? { '--p-card-min-width': getCardSizeValue(minWidth) } : {}),\n ...(height !== undefined ? { '--p-card-height': getCardSizeValue(height) } : {}),\n ...(minHeight !== undefined ? { '--p-card-min-height': getCardSizeValue(minHeight) } : {}),\n };\n\n const content = (\n <>\n {hasRenderableNode(media) && <div className=\"p-card__media\">{media}</div>}\n {(hasRenderableNode(prefix) || hasRenderableNode(eyebrow)) && (\n <div className=\"p-card__meta\">\n {renderMetaNode(prefix, 'p-card__prefix')}\n {renderMetaNode(eyebrow, 'p-card__eyebrow')}\n </div>\n )}\n <div className=\"p-card__body\">\n <PTypography as=\"h3\" className=\"p-card__title\" variant=\"heading\">\n {isInteractive ? (\n <a {...(props as PCardAnchorElementProps)} className=\"p-card__link\">\n {title}\n </a>\n ) : (\n title\n )}\n </PTypography>\n {hasRenderableNode(description) ? (\n <PTypography className=\"p-card__description\" variant=\"body\">\n {description}\n </PTypography>\n ) : null}\n </div>\n {hasRenderableNode(children) && <div className=\"p-card__content\">{children}</div>}\n {hasRenderableNode(actions) && <div className=\"p-card__actions\">{actions}</div>}\n </>\n );\n\n if (isInteractive) {\n return (\n <article ref={ref as React.Ref<HTMLElement>} className={cardClassName} style={cardStyle}>\n {content}\n </article>\n );\n }\n\n return (\n <article\n {...(props as PCardArticleElementProps)}\n ref={ref as React.Ref<HTMLElement>}\n className={cardClassName}\n style={cardStyle}\n >\n {content}\n </article>\n );\n },\n);\n\nPCard.displayName = 'PCard';\n","import {\n forwardRef,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PCardGrid.css';\n\nexport type PCardGridRef = HTMLElement;\nexport type PCardGridGap = 'none' | 'sm' | 'md' | 'lg';\nexport type PCardGridColumns = 1 | 2 | 3 | 4;\n\nexport type PCardGridResponsiveColumns = {\n mobile?: PCardGridColumns;\n tablet?: PCardGridColumns;\n desktop?: PCardGridColumns;\n};\n\nexport type PCardGridProps = {\n as?: ElementType;\n columns?: PCardGridColumns | PCardGridResponsiveColumns;\n minCardWidth?: CSSProperties['width'];\n gap?: PCardGridGap;\n align?: 'stretch' | 'start';\n className?: string;\n children: ReactNode;\n} & Omit<HTMLAttributes<HTMLElement>, 'className' | 'children'>;\n\ntype PCardGridStyle = CSSProperties & {\n '--p-card-grid-mobile-columns'?: number;\n '--p-card-grid-tablet-columns'?: number;\n '--p-card-grid-desktop-columns'?: number;\n '--p-card-grid-min-card-width'?: CSSProperties['width'];\n};\n\nfunction getSizeValue(value: CSSProperties['width']) {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nfunction getColumnConfig(columns: PCardGridProps['columns']) {\n if (!columns) {\n return {\n mobile: 1,\n tablet: 2,\n desktop: 2,\n };\n }\n\n if (typeof columns === 'number') {\n return {\n mobile: 1,\n tablet: Math.min(columns, 2) as PCardGridColumns,\n desktop: columns,\n };\n }\n\n return {\n mobile: columns.mobile ?? 1,\n tablet: columns.tablet ?? columns.mobile ?? 2,\n desktop: columns.desktop ?? columns.tablet ?? columns.mobile ?? 2,\n };\n}\n\nexport const PCardGrid = forwardRef<PCardGridRef, PCardGridProps>(\n (\n {\n as: Element = 'div',\n columns,\n minCardWidth,\n gap = 'none',\n align = 'stretch',\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const columnConfig = getColumnConfig(columns);\n const gridStyle: PCardGridStyle = {\n ...style,\n '--p-card-grid-mobile-columns': columnConfig.mobile,\n '--p-card-grid-tablet-columns': columnConfig.tablet,\n '--p-card-grid-desktop-columns': columnConfig.desktop,\n ...(minCardWidth !== undefined\n ? { '--p-card-grid-min-card-width': getSizeValue(minCardWidth) }\n : {}),\n };\n\n return (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-card-grid',\n `p-card-grid--gap-${gap}`,\n align === 'start' && 'p-card-grid--align-start',\n minCardWidth !== undefined && 'p-card-grid--auto-fit',\n className,\n )}\n style={gridStyle}\n >\n {children}\n </Element>\n );\n },\n);\n\nPCardGrid.displayName = 'PCardGrid';\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type UIEvent,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PCombobox.css';\n\nexport type PComboboxRef = HTMLDivElement;\nexport type PComboboxFilterMode = 'local' | 'none';\nexport type PComboboxQueryChangeSource = 'input' | 'open' | 'clear' | 'selection' | 'reset';\n\nexport type PComboboxOption = {\n value: string;\n label: string;\n description?: string;\n group?: string;\n meta?: ReactNode;\n keywords?: string[];\n disabled?: boolean;\n};\n\nexport type PComboboxProps = {\n label: string;\n options: PComboboxOption[];\n value?: string;\n defaultValue?: string;\n selectedOption?: PComboboxOption | null;\n onValueChange?: (value: string, option: PComboboxOption | null) => void;\n query?: string;\n defaultQuery?: string;\n onQueryChange?: (query: string, details: { source: PComboboxQueryChangeSource }) => void;\n filterMode?: PComboboxFilterMode;\n isLoading?: boolean;\n isLoadingMore?: boolean;\n hasMore?: boolean;\n onLoadMore?: (details: { query: string; optionCount: number }) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n loadingText?: string;\n loadingMoreText?: string;\n loadMoreText?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n name?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n clearable?: boolean;\n className?: string;\n inputClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\ntype ContainsElement = {\n contains: (target: EventTarget | null) => boolean;\n};\n\ntype FocusableElement = {\n focus: () => void;\n};\n\ntype ScrollableElement = {\n scrollIntoView: (options?: { block?: 'nearest' }) => void;\n};\n\ntype ScrollMetricsElement = {\n scrollTop: number;\n clientHeight: number;\n scrollHeight: number;\n};\n\ntype ValidatableElement = {\n setCustomValidity: (error: string) => void;\n};\n\ntype ViewportMatcher = {\n matchMedia?: (query: string) => {\n matches: boolean;\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n };\n};\n\nfunction ChevronDownIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 8 5 5 5-5\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m4 10 4 4 8-8\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 5 10 10\" />\n <path d=\"m15 5-10 10\" />\n </svg>\n );\n}\n\nfunction normalizeText(value: string) {\n return value.trim().toLocaleLowerCase();\n}\n\nfunction filterOptions(options: PComboboxOption[], query: string) {\n const normalizedQuery = normalizeText(query);\n\n if (!normalizedQuery) {\n return options;\n }\n\n return options.filter((option) => {\n const searchableText = [\n option.label,\n option.value,\n option.description,\n option.group,\n ...(option.keywords ?? []),\n ]\n .filter(Boolean)\n .join(' ');\n\n return normalizeText(searchableText).includes(normalizedQuery);\n });\n}\n\nfunction getFirstEnabledIndex(options: PComboboxOption[]) {\n return options.findIndex((option) => !option.disabled);\n}\n\nfunction getSelectedIndex(options: PComboboxOption[], selectedValue: string | undefined) {\n const selectedIndex = options.findIndex((option) => option.value === selectedValue && !option.disabled);\n\n return selectedIndex >= 0 ? selectedIndex : getFirstEnabledIndex(options);\n}\n\nfunction getNextEnabledIndex(options: PComboboxOption[], activeIndex: number, direction: 1 | -1) {\n if (!options.length) {\n return -1;\n }\n\n let nextIndex = activeIndex;\n\n for (let attempt = 0; attempt < options.length; attempt += 1) {\n nextIndex = (nextIndex + direction + options.length) % options.length;\n\n if (!options[nextIndex]?.disabled) {\n return nextIndex;\n }\n }\n\n return -1;\n}\n\nfunction assignRef(ref: ForwardedRef<PComboboxRef>, node: PComboboxRef | null) {\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n\n if (ref) {\n ref.current = node;\n }\n}\n\nexport const PCombobox = forwardRef<PComboboxRef, PComboboxProps>(\n (\n {\n label,\n options,\n value,\n defaultValue,\n selectedOption: selectedOptionProp,\n onValueChange,\n query: queryProp,\n defaultQuery,\n onQueryChange,\n filterMode = 'local',\n isLoading = false,\n isLoadingMore = false,\n hasMore = false,\n onLoadMore,\n placeholder = 'Select an option',\n searchPlaceholder = 'Search options',\n emptyText = 'No options found.',\n loadingText = 'Loading options...',\n loadingMoreText = 'Loading more options...',\n loadMoreText = 'Load more options',\n helperText,\n isError = false,\n errorMessage,\n name,\n disabled = false,\n readOnly = false,\n required = false,\n clearable = true,\n className,\n inputClassName,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const inputId = `${rootId}-input`;\n const listboxId = `${rootId}-listbox`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<(HTMLInputElement & FocusableElement) | null>(null);\n const modalInputRef = useRef<(HTMLInputElement & FocusableElement) | null>(null);\n const hiddenInputRef = useRef<(HTMLInputElement & ValidatableElement) | null>(null);\n const activeOptionRef = useRef<ScrollableElement | null>(null);\n const panelRef = useRef<ScrollMetricsElement | null>(null);\n const isControlled = value !== undefined;\n const isQueryControlled = queryProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const selectedValue = isControlled ? value : internalValue;\n const selectedOption =\n selectedOptionProp?.value === selectedValue\n ? selectedOptionProp\n : options.find((option) => option.value === selectedValue) ?? null;\n const [internalQuery, setInternalQuery] = useState(defaultQuery ?? selectedOption?.label ?? '');\n const query = isQueryControlled ? queryProp : internalQuery;\n const [isOpen, setIsOpen] = useState(false);\n const [isModalViewport, setIsModalViewport] = useState(false);\n const filteredOptions = useMemo(\n () => (filterMode === 'local' ? filterOptions(options, query) : options),\n [filterMode, options, query],\n );\n const [activeIndex, setActiveIndex] = useState(() => getSelectedIndex(options, selectedValue));\n const activeOption = isOpen ? filteredOptions[activeIndex] : undefined;\n const activeOptionId = activeOption ? `${listboxId}-option-${activeIndex}` : undefined;\n const modalTitleId = `${rootId}-modal-title`;\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const hasSelection = Boolean(selectedOption);\n const canClear = clearable && hasSelection && !disabled && !readOnly;\n const inputValue = isOpen ? query : selectedOption?.label ?? query;\n const showInitialLoading = isLoading && filteredOptions.length === 0;\n const showFooterLoading = isLoadingMore || (isLoading && filteredOptions.length > 0);\n const showLoadMore = Boolean(hasMore && onLoadMore && !isLoading && !isLoadingMore);\n\n useEffect(() => {\n if (!isOpen && !isQueryControlled) {\n setInternalQuery(selectedOption?.label ?? '');\n }\n }, [isOpen, isQueryControlled, selectedOption]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n setActiveIndex((currentIndex) => {\n if (filteredOptions[currentIndex] && !filteredOptions[currentIndex].disabled) {\n return currentIndex;\n }\n\n return getSelectedIndex(filteredOptions, selectedValue);\n });\n }, [filteredOptions, isOpen, selectedValue]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n activeOptionRef.current?.scrollIntoView({ block: 'nearest' });\n }, [activeIndex, isOpen]);\n\n useEffect(() => {\n const matcher = globalThis as unknown as ViewportMatcher;\n const mediaQuery = matcher.matchMedia?.('(max-width: 64rem)');\n\n if (!mediaQuery) {\n return;\n }\n\n const syncModalViewport = () => setIsModalViewport(mediaQuery.matches);\n syncModalViewport();\n mediaQuery.addEventListener?.('change', syncModalViewport);\n\n return () => mediaQuery.removeEventListener?.('change', syncModalViewport);\n }, []);\n\n useEffect(() => {\n if (!isOpen || !isModalViewport) {\n return;\n }\n\n modalInputRef.current?.focus();\n }, [isModalViewport, isOpen]);\n\n useEffect(() => {\n if (!hiddenInputRef.current) {\n return;\n }\n\n hiddenInputRef.current.setCustomValidity(required && !selectedValue ? 'Select an option.' : '');\n }, [required, selectedValue]);\n\n const setRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n };\n\n const setSearchQuery = (nextQuery: string, source: PComboboxQueryChangeSource) => {\n if (!isQueryControlled) {\n setInternalQuery(nextQuery);\n }\n\n onQueryChange?.(nextQuery, { source });\n };\n\n const requestLoadMore = () => {\n if (!hasMore || !onLoadMore || isLoading || isLoadingMore) {\n return;\n }\n\n onLoadMore({ query, optionCount: filteredOptions.length });\n };\n\n useEffect(() => {\n if (!isOpen || !panelRef.current) {\n return;\n }\n\n const { scrollHeight, clientHeight } = panelRef.current;\n\n if (scrollHeight <= clientHeight + 48) {\n requestLoadMore();\n }\n });\n\n const commitValue = (nextOption: PComboboxOption | null) => {\n const nextValue = nextOption?.value ?? '';\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n setSearchQuery(nextOption?.label ?? '', nextOption ? 'selection' : 'clear');\n onValueChange?.(nextValue, nextOption);\n };\n\n const openCombobox = (nextQuery = query) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextOptions = filterMode === 'local' ? filterOptions(options, nextQuery) : options;\n setSearchQuery(nextQuery, 'open');\n setActiveIndex(getSelectedIndex(nextOptions, selectedValue));\n setIsOpen(true);\n };\n\n const closeCombobox = () => {\n setIsOpen(false);\n setSearchQuery(selectedOption?.label ?? '', 'reset');\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const nextQuery = (event.currentTarget as unknown as { value: string }).value;\n const nextOptions = filterMode === 'local' ? filterOptions(options, nextQuery) : options;\n\n setSearchQuery(nextQuery, 'input');\n setActiveIndex(getFirstEnabledIndex(nextOptions));\n setIsOpen(true);\n };\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n openCombobox('');\n return;\n }\n\n setActiveIndex((currentIndex) => getNextEnabledIndex(filteredOptions, currentIndex, 1));\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n openCombobox('');\n return;\n }\n\n setActiveIndex((currentIndex) => getNextEnabledIndex(filteredOptions, currentIndex, -1));\n return;\n }\n\n if (event.key === 'Enter') {\n if (!isOpen) {\n openCombobox(query);\n return;\n }\n\n if (activeOption && !activeOption.disabled) {\n event.preventDefault();\n commitValue(activeOption);\n setIsOpen(false);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n closeCombobox();\n return;\n }\n\n if (event.key === 'Tab') {\n closeCombobox();\n }\n };\n\n const handleOptionPointerDown = (event: MouseEvent<HTMLDivElement>, option: PComboboxOption) => {\n event.preventDefault();\n\n if (option.disabled) {\n return;\n }\n\n commitValue(option);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n commitValue(null);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handlePanelScroll = (event: UIEvent<HTMLDivElement>) => {\n const panel = event.currentTarget as unknown as ScrollMetricsElement;\n const distanceToBottom = panel.scrollHeight - panel.scrollTop - panel.clientHeight;\n\n if (distanceToBottom <= 48) {\n requestLoadMore();\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!isOpen) {\n return;\n }\n\n const currentTarget = event.currentTarget as unknown as ContainsElement;\n\n if (!currentTarget.contains(event.relatedTarget)) {\n closeCombobox();\n }\n };\n\n const groups = filteredOptions.reduce<Array<{ group: string | null; options: PComboboxOption[] }>>(\n (accumulator, option) => {\n const group = option.group ?? null;\n const existingGroup = accumulator.find((item) => item.group === group);\n\n if (existingGroup) {\n existingGroup.options.push(option);\n return accumulator;\n }\n\n accumulator.push({ group, options: [option] });\n return accumulator;\n },\n [],\n );\n\n return (\n <div\n {...props}\n ref={setRootRef}\n id={rootId}\n style={style}\n onBlur={handleBlur}\n className={cn(\n 'p-combobox',\n isOpen && 'p-combobox--open',\n isError && 'p-combobox--error',\n disabled && 'p-combobox--disabled',\n readOnly && 'p-combobox--readonly',\n className,\n )}\n >\n <div className=\"p-combobox__field\">\n <input\n ref={inputRef}\n id={inputId}\n role=\"combobox\"\n type=\"text\"\n value={inputValue}\n placeholder={isOpen ? searchPlaceholder : ' '}\n disabled={disabled}\n readOnly={readOnly}\n required={false}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-describedby={messageId}\n aria-activedescendant={activeOptionId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={isError || undefined}\n aria-labelledby={labelId}\n autoComplete=\"off\"\n className={cn('p-combobox__input', (canClear || hasSelection) && 'p-combobox__input--adorned', inputClassName)}\n onChange={handleInputChange}\n onClick={() => openCombobox('')}\n onKeyDown={handleInputKeyDown}\n />\n\n <label\n id={labelId}\n htmlFor={inputId}\n className={cn('p-combobox__label p-combobox__floating-label', isError && 'p-combobox__label--error')}\n >\n {label}\n </label>\n\n <span aria-hidden=\"true\" className=\"p-combobox__label p-combobox__placeholder-label\">\n {placeholder || label}\n </span>\n\n {canClear ? (\n <button\n type=\"button\"\n className=\"p-combobox__clear\"\n aria-label={`Clear ${label}`}\n onMouseDown={handleClear}\n >\n <XIcon />\n </button>\n ) : null}\n\n <span className=\"p-combobox__chevron\" aria-hidden=\"true\">\n <ChevronDownIcon />\n </span>\n\n {isOpen ? (\n <div\n className=\"p-combobox__panel\"\n role={isModalViewport ? 'dialog' : undefined}\n aria-modal={isModalViewport || undefined}\n aria-labelledby={isModalViewport ? modalTitleId : undefined}\n >\n <div className=\"p-combobox__modal-header\">\n <div id={modalTitleId} className=\"p-combobox__modal-title\">{label}</div>\n <button type=\"button\" className=\"p-combobox__modal-close\" aria-label={`Close ${label}`} onClick={closeCombobox}>\n <XIcon />\n </button>\n </div>\n <div className=\"p-combobox__modal-search\">\n <input\n ref={modalInputRef}\n role=\"combobox\"\n type=\"search\"\n value={query}\n placeholder={searchPlaceholder}\n aria-activedescendant={activeOptionId}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={`Search ${label}`}\n autoComplete=\"off\"\n className=\"p-combobox__modal-input\"\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n\n <div\n id={listboxId}\n ref={(node) => {\n panelRef.current = node as unknown as ScrollMetricsElement | null;\n }}\n role=\"listbox\"\n aria-busy={isLoading || isLoadingMore || undefined}\n aria-labelledby={labelId}\n className=\"p-combobox__list\"\n onScroll={handlePanelScroll}\n >\n {showInitialLoading ? (\n <div className=\"p-combobox__status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <span className=\"p-combobox__spinner\" aria-hidden=\"true\" />\n <span>{loadingText}</span>\n </div>\n ) : null}\n\n {groups.length ? (\n groups.map((group) => (\n <div key={group.group ?? 'ungrouped'} className=\"p-combobox__group\">\n {group.group ? <div className=\"p-combobox__group-label\">{group.group}</div> : null}\n {group.options.map((option) => {\n const optionIndex = filteredOptions.indexOf(option);\n const isActive = optionIndex === activeIndex;\n const isSelected = option.value === selectedValue;\n\n return (\n <div\n key={option.value}\n ref={\n isActive\n ? (node) => {\n activeOptionRef.current = node as unknown as ScrollableElement | null;\n }\n : undefined\n }\n id={`${listboxId}-option-${optionIndex}`}\n role=\"option\"\n aria-disabled={option.disabled || undefined}\n aria-selected={isSelected}\n className={cn(\n 'p-combobox__option',\n isActive && 'p-combobox__option--active',\n isSelected && 'p-combobox__option--selected',\n option.disabled && 'p-combobox__option--disabled',\n )}\n onMouseDown={(event) => handleOptionPointerDown(event, option)}\n >\n <span className=\"p-combobox__option-check\">\n {isSelected ? <CheckIcon /> : null}\n </span>\n <span className=\"p-combobox__option-content\">\n <span className=\"p-combobox__option-label\">{option.label}</span>\n {option.description ? (\n <span className=\"p-combobox__option-description\">{option.description}</span>\n ) : null}\n </span>\n {option.meta ? <span className=\"p-combobox__option-meta\">{option.meta}</span> : null}\n </div>\n );\n })}\n </div>\n ))\n ) : !showInitialLoading ? (\n <div className=\"p-combobox__empty\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n {emptyText}\n </div>\n ) : null}\n\n {showFooterLoading ? (\n <div className=\"p-combobox__status p-combobox__status--footer\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <span className=\"p-combobox__spinner\" aria-hidden=\"true\" />\n <span>{loadingMoreText}</span>\n </div>\n ) : null}\n </div>\n\n {showLoadMore ? (\n <div className=\"p-combobox__footer\">\n <button type=\"button\" className=\"p-combobox__load-more\" onMouseDown={(event) => event.preventDefault()} onClick={requestLoadMore}>\n {loadMoreText}\n </button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n\n <input\n ref={hiddenInputRef}\n type=\"text\"\n name={name}\n value={selectedValue ?? ''}\n required={required}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"p-combobox__hidden-input\"\n onChange={() => undefined}\n />\n\n {isOpen ? (\n <div className=\"p-combobox__backdrop\" aria-hidden=\"true\" onMouseDown={closeCombobox} />\n ) : null}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-combobox__message p-combobox__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-combobox__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPCombobox.displayName = 'PCombobox';\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport './PDatePicker.css';\n\nexport type PDatePickerRef = HTMLDivElement;\nexport type PDatePickerChangeSource = 'preset' | 'calendar';\nexport type PDatePickerPresetColumns = 2 | 3 | 4 | 'auto';\ntype FocusableElement = { focus: () => void };\n\nexport type PDatePickerPreset = {\n label: string;\n value: string | Date | (() => string | Date);\n};\n\nexport type PDatePickerProps = {\n label: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (\n value: string,\n details: { date: Date | null; source: PDatePickerChangeSource },\n ) => void;\n presets?: PDatePickerPreset[];\n customLabel?: string;\n showCustom?: boolean;\n presetColumns?: PDatePickerPresetColumns;\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n min?: string;\n max?: string;\n name?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n className?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\nconst dayFormatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n\nfunction toLocalDate(value: string | Date | null | undefined) {\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? null\n : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n }\n\n const parts = value.split('-').map(Number);\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [year, month, day] = parts;\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction toIsoDate(date: Date | null) {\n if (!date) {\n return '';\n }\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nfunction addMonths(date: Date, months: number) {\n return new Date(date.getFullYear(), date.getMonth() + months, 1);\n}\n\nfunction addMonthsClamped(date: Date, months: number) {\n const monthStart = addMonths(date, months);\n const lastDay = endOfMonth(monthStart).getDate();\n\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nfunction addDays(date: Date, days: number) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nfunction isSameDay(a: Date | null, b: Date | null) {\n return Boolean(a && b && toIsoDate(a) === toIsoDate(b));\n}\n\nfunction getToday() {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), today.getDate());\n}\n\nfunction getCalendarDays(monthDate: Date, weekStartsOn: number) {\n const monthStart = startOfMonth(monthDate);\n const offset = (monthStart.getDay() - weekStartsOn + 7) % 7;\n const gridStart = addDays(monthStart, -offset);\n\n return Array.from({ length: 42 }, (_, index) => addDays(gridStart, index));\n}\n\nfunction resolvePresetDate(preset: PDatePickerPreset) {\n const value = typeof preset.value === 'function' ? preset.value() : preset.value;\n return toLocalDate(value);\n}\n\nfunction getMonthLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(date);\n}\n\nfunction getMonthOptions(locale?: string) {\n return Array.from({ length: 12 }, (_, month) => ({\n label: new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(2024, month, 1)),\n value: month,\n }));\n}\n\nfunction getDateLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getDayLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getWeekdayLabels(weekStartsOn: number, locale?: string) {\n const baseSunday = new Date(2024, 0, 7);\n\n return Array.from({ length: 7 }, (_, index) => {\n const date = addDays(baseSunday, weekStartsOn + index);\n return dayFormatter.formatToParts(date).length\n ? new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(date)\n : '';\n });\n}\n\nfunction isBeforeDate(date: Date, minDate: Date | null) {\n return Boolean(minDate && date.getTime() < minDate.getTime());\n}\n\nfunction isAfterDate(date: Date, maxDate: Date | null) {\n return Boolean(maxDate && date.getTime() > maxDate.getTime());\n}\n\nfunction isSameMonth(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nfunction isMonthDisabled(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n\n return Boolean((minDate && monthEnd < minDate) || (maxDate && monthStart > maxDate));\n}\n\nfunction clampVisibleMonth(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n if (minDate && endOfMonth(monthDate) < minDate) {\n return startOfMonth(minDate);\n }\n\n if (maxDate && startOfMonth(monthDate) > maxDate) {\n return startOfMonth(maxDate);\n }\n\n return startOfMonth(monthDate);\n}\n\nfunction getFocusableDateInMonth(monthDate: Date, preferredDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n let nextDate = new Date(\n monthStart.getFullYear(),\n monthStart.getMonth(),\n Math.min(preferredDate.getDate(), monthEnd.getDate()),\n );\n\n if (minDate && nextDate < minDate) {\n nextDate = isSameMonth(minDate, monthStart) ? minDate : monthStart;\n }\n\n if (maxDate && nextDate > maxDate) {\n nextDate = isSameMonth(maxDate, monthStart) ? maxDate : monthEnd;\n }\n\n return nextDate;\n}\n\nfunction getYearOptions(visibleMonth: Date, minDate: Date | null, maxDate: Date | null, today: Date) {\n const visibleYear = visibleMonth.getFullYear();\n const defaultStartYear = Math.min(visibleYear, today.getFullYear() - 100);\n const defaultEndYear = Math.max(visibleYear, today.getFullYear() + 20);\n const startYear = minDate?.getFullYear() ?? defaultStartYear;\n const endYear = maxDate?.getFullYear() ?? defaultEndYear;\n const firstYear = Math.min(startYear, endYear, visibleYear);\n const lastYear = Math.max(startYear, endYear, visibleYear);\n\n return Array.from({ length: lastYear - firstYear + 1 }, (_, index) => firstYear + index);\n}\n\nexport const PDatePicker = forwardRef<PDatePickerRef, PDatePickerProps>(\n (\n {\n label,\n value,\n defaultValue,\n onValueChange,\n presets = [],\n customLabel = 'Custom',\n showCustom = true,\n presetColumns = 'auto',\n placeholder = 'Select date',\n helperText,\n isError = false,\n errorMessage,\n min,\n max,\n name,\n disabled = false,\n readOnly = false,\n required = false,\n locale,\n weekStartsOn = 0,\n className,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const panelId = `${rootId}-panel`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const [isOpen, setIsOpen] = useState(false);\n const selectedValue = isControlled ? value : internalValue;\n const selectedDate = toLocalDate(selectedValue);\n const today = useMemo(getToday, []);\n const minDate = toLocalDate(min);\n const maxDate = toLocalDate(max);\n const [visibleMonth, setVisibleMonth] = useState(() => startOfMonth(selectedDate ?? today));\n const [focusedDate, setFocusedDate] = useState(() => selectedDate ?? today);\n const calendarTriggerRef = useRef<FocusableElement | null>(null);\n const dayRefs = useRef<Record<string, FocusableElement | null>>({});\n const shouldFocusCalendarDateRef = useRef(false);\n const calendarDays = getCalendarDays(visibleMonth, weekStartsOn);\n const weekdayLabels = getWeekdayLabels(weekStartsOn, locale);\n const monthOptions = useMemo(() => getMonthOptions(locale), [locale]);\n const yearOptions = getYearOptions(visibleMonth, minDate, maxDate, today);\n const hasPresets = presets.length > 0;\n const shouldRenderCustom = hasPresets ? showCustom : true;\n const presetColumnsStyle =\n presetColumns === 'auto'\n ? undefined\n : ({\n '--p-date-picker-preset-columns': String(presetColumns),\n } as CSSProperties);\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const displayValue = selectedDate ? getDateLabel(selectedDate, locale) : placeholder;\n const selectedMatchesPreset = hasPresets\n ? presets.some((preset) => isSameDay(resolvePresetDate(preset), selectedDate))\n : false;\n const isCustomActive = isOpen || Boolean(selectedDate && !selectedMatchesPreset);\n const previousMonth = addMonths(visibleMonth, -1);\n const nextMonth = addMonths(visibleMonth, 1);\n const isPreviousMonthDisabled = isMonthDisabled(previousMonth, minDate, maxDate);\n const isNextMonthDisabled = isMonthDisabled(nextMonth, minDate, maxDate);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n if (shouldFocusCalendarDateRef.current) {\n dayRefs.current[toIsoDate(focusedDate)]?.focus();\n shouldFocusCalendarDateRef.current = false;\n }\n }, [focusedDate, isOpen, visibleMonth]);\n\n const setDateValue = (date: Date | null, source: PDatePickerChangeSource) => {\n const nextValue = toIsoDate(date);\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n if (date) {\n setVisibleMonth(startOfMonth(date));\n }\n\n onValueChange?.(nextValue, { date, source });\n };\n\n const openCalendar = (trigger: HTMLButtonElement) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextFocusedDate = selectedDate ?? today;\n calendarTriggerRef.current = trigger as unknown as FocusableElement;\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(nextFocusedDate);\n setVisibleMonth(startOfMonth(nextFocusedDate));\n setIsOpen(true);\n };\n\n const closeCalendar = (restoreFocus = false) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n calendarTriggerRef.current?.focus();\n }\n };\n\n const updateVisibleMonth = (nextMonth: Date) => {\n const clampedMonth = clampVisibleMonth(nextMonth, minDate, maxDate);\n\n setVisibleMonth(clampedMonth);\n setFocusedDate(getFocusableDateInMonth(clampedMonth, focusedDate, minDate, maxDate));\n };\n\n const handleMonthChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextMonth } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(visibleMonth.getFullYear(), Number(nextMonth), 1));\n };\n\n const handleYearChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextYear } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(Number(nextYear), visibleMonth.getMonth(), 1));\n };\n\n const handlePresetClick = (preset: PDatePickerPreset) => {\n if (disabled || readOnly) {\n return;\n }\n\n const presetDate = resolvePresetDate(preset);\n setDateValue(presetDate, 'preset');\n closeCalendar();\n };\n\n const handleDayClick = (date: Date) => {\n if (disabled || readOnly || isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n setFocusedDate(date);\n setDateValue(date, 'calendar');\n closeCalendar(true);\n };\n\n const focusCalendarDate = (date: Date) => {\n if (isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(date);\n setVisibleMonth(startOfMonth(date));\n };\n\n const handleDayKeyDown =\n (date: Date): ButtonHTMLAttributes<HTMLButtonElement>['onKeyDown'] =>\n (event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n const weekOffset = (date.getDay() - weekStartsOn + 7) % 7;\n const nextDateByKey: Record<string, Date> = {\n ArrowLeft: addDays(date, -1),\n ArrowRight: addDays(date, 1),\n ArrowUp: addDays(date, -7),\n ArrowDown: addDays(date, 7),\n Home: addDays(date, -weekOffset),\n End: addDays(date, 6 - weekOffset),\n PageUp: addMonthsClamped(date, -1),\n PageDown: addMonthsClamped(date, 1),\n };\n const nextDate = nextDateByKey[event.key];\n\n if (!nextDate) {\n return;\n }\n\n event.preventDefault();\n focusCalendarDate(nextDate);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n id={rootId}\n style={presetColumnsStyle ? { ...style, ...presetColumnsStyle } : style}\n className={cn(\n 'p-date-picker',\n hasPresets && 'p-date-picker--with-presets',\n isError && 'p-date-picker--error',\n disabled && 'p-date-picker--disabled',\n className,\n )}\n >\n {hasPresets ? (\n <div id={labelId} className=\"p-date-picker__label\">\n <span>{label}</span>\n <span className={cn('p-date-picker__label-value', !selectedDate && 'p-date-picker__label-value--empty')}>\n {displayValue}\n </span>\n </div>\n ) : null}\n\n {hasPresets ? (\n <div\n aria-describedby={messageId}\n aria-labelledby={labelId}\n className={cn(\n 'p-date-picker__presets',\n presetColumns !== 'auto' && 'p-date-picker__presets--fixed',\n )}\n role=\"group\"\n >\n {presets.map((preset) => {\n const presetDate = resolvePresetDate(preset);\n const isActive = isSameDay(presetDate, selectedDate);\n\n return (\n <button\n key={preset.label}\n type=\"button\"\n className={cn('p-date-picker__preset', isActive && 'p-date-picker__preset--active')}\n disabled={disabled}\n aria-pressed={isActive}\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n );\n })}\n {shouldRenderCustom ? (\n <button\n type=\"button\"\n className={cn(\n 'p-date-picker__preset',\n isCustomActive && 'p-date-picker__preset--active',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-expanded={isOpen}\n aria-pressed={isCustomActive}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n {customLabel}\n </button>\n ) : null}\n </div>\n ) : (\n <button\n type=\"button\"\n className={cn(\n 'p-date-picker__trigger',\n !selectedDate && 'p-date-picker__trigger--empty',\n selectedDate && 'p-date-picker__trigger--filled',\n isOpen && 'p-date-picker__trigger--open',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-describedby={messageId}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-label={`${label}: ${displayValue}`}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n <span\n id={labelId}\n className={cn(\n 'p-date-picker__trigger-label p-date-picker__trigger-floating-label',\n isError && 'p-date-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n 'p-date-picker__trigger-label p-date-picker__trigger-placeholder-label',\n isError && 'p-date-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span className=\"p-date-picker__trigger-value\">{displayValue}</span>\n <span className=\"p-date-picker__trigger-icon\">\n <CalendarIcon />\n </span>\n </button>\n )}\n\n <input type=\"hidden\" name={name} value={selectedValue ?? ''} required={required} />\n\n {isOpen && (\n <div\n id={panelId}\n className=\"p-date-picker__panel\"\n role=\"dialog\"\n aria-labelledby={`${panelId}-title`}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeCalendar();\n }\n }}\n >\n <div className=\"p-date-picker__calendar-header\">\n <button\n type=\"button\"\n className=\"p-date-picker__nav\"\n aria-label=\"Previous month\"\n disabled={isPreviousMonthDisabled}\n onClick={() => updateVisibleMonth(previousMonth)}\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"p-date-picker__month\">\n <span id={`${panelId}-title`} className=\"p-date-picker__month-label\">\n {getMonthLabel(visibleMonth, locale)}\n </span>\n <select\n className=\"p-date-picker__month-select p-date-picker__calendar-select\"\n aria-label=\"Month\"\n value={visibleMonth.getMonth()}\n onChange={handleMonthChange}\n >\n {monthOptions.map((month) => (\n <option\n key={month.value}\n value={month.value}\n disabled={isMonthDisabled(new Date(visibleMonth.getFullYear(), month.value, 1), minDate, maxDate)}\n >\n {month.label}\n </option>\n ))}\n </select>\n <select\n className=\"p-date-picker__year-select p-date-picker__calendar-select\"\n aria-label=\"Year\"\n value={visibleMonth.getFullYear()}\n onChange={handleYearChange}\n >\n {yearOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n className=\"p-date-picker__nav\"\n aria-label=\"Next month\"\n disabled={isNextMonthDisabled}\n onClick={() => updateVisibleMonth(nextMonth)}\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n <div className=\"p-date-picker__weekdays\" aria-hidden=\"true\">\n {weekdayLabels.map((weekday) => (\n <span key={weekday}>{weekday}</span>\n ))}\n </div>\n\n <div className=\"p-date-picker__grid\" role=\"grid\" aria-labelledby={`${panelId}-title`}>\n {calendarDays.map((date) => {\n const isoDate = toIsoDate(date);\n const isOutsideMonth = date.getMonth() !== visibleMonth.getMonth();\n const isSelected = isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isBeforeDate(date, minDate) || isAfterDate(date, maxDate);\n\n return (\n <button\n key={isoDate}\n ref={(node) => {\n dayRefs.current[isoDate] = node as unknown as FocusableElement | null;\n }}\n type=\"button\"\n role=\"gridcell\"\n data-date={isoDate}\n className={cn(\n 'p-date-picker__day',\n isOutsideMonth && 'p-date-picker__day--outside',\n isToday && 'p-date-picker__day--today',\n isSelected && 'p-date-picker__day--selected',\n )}\n disabled={isDisabled}\n aria-label={getDayLabel(date, locale)}\n aria-selected={isSelected}\n tabIndex={isSameDay(date, focusedDate) ? 0 : -1}\n onClick={() => handleDayClick(date)}\n onKeyDown={handleDayKeyDown(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-date-picker__message p-date-picker__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-date-picker__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPDatePicker.displayName = 'PDatePicker';\n\nexport const PDatePickerPresets = {\n today: { label: 'Today', value: () => getToday() },\n yesterday: { label: 'Yesterday', value: () => addDays(getToday(), -1) },\n tomorrow: { label: 'Tomorrow', value: () => addDays(getToday(), 1) },\n startOfMonth: { label: 'Start of month', value: () => startOfMonth(getToday()) },\n endOfMonth: {\n label: 'End of month',\n value: () => {\n const today = getToday();\n return new Date(today.getFullYear(), today.getMonth() + 1, 0);\n },\n },\n} satisfies Record<string, PDatePickerPreset>;\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport './PDateRangePicker.css';\n\nexport type PDateRangePickerRef = HTMLDivElement;\nexport type PDateRangePickerChangeSource = 'preset' | 'calendar';\nexport type PDateRangePickerPresetColumns = 2 | 3 | 4 | 'auto';\ntype FocusableElement = { focus: () => void };\n\nexport type PDateRangeValue = {\n start?: string;\n end?: string;\n};\n\nexport type PDateRangePickerPreset = {\n label: string;\n value: PDateRangeValue | (() => PDateRangeValue);\n};\n\nexport type PDateRangePickerProps = {\n label: string;\n value?: PDateRangeValue;\n defaultValue?: PDateRangeValue;\n onValueChange?: (\n value: PDateRangeValue,\n details: { startDate: Date | null; endDate: Date | null; source: PDateRangePickerChangeSource },\n ) => void;\n presets?: PDateRangePickerPreset[];\n customLabel?: string;\n showCustom?: boolean;\n presetColumns?: PDateRangePickerPresetColumns;\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n min?: string;\n max?: string;\n nameStart?: string;\n nameEnd?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n className?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\nconst dayFormatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n\nfunction toLocalDate(value: string | Date | null | undefined) {\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? null\n : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n }\n\n const parts = value.split('-').map(Number);\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [year, month, day] = parts;\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction toIsoDate(date: Date | null) {\n if (!date) {\n return '';\n }\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nfunction addMonths(date: Date, months: number) {\n return new Date(date.getFullYear(), date.getMonth() + months, 1);\n}\n\nfunction addMonthsClamped(date: Date, months: number) {\n const monthStart = addMonths(date, months);\n const lastDay = endOfMonth(monthStart).getDate();\n\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nfunction addDays(date: Date, days: number) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nfunction getToday() {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), today.getDate());\n}\n\nfunction getCalendarDays(monthDate: Date, weekStartsOn: number) {\n const monthStart = startOfMonth(monthDate);\n const offset = (monthStart.getDay() - weekStartsOn + 7) % 7;\n const gridStart = addDays(monthStart, -offset);\n\n return Array.from({ length: 42 }, (_, index) => addDays(gridStart, index));\n}\n\nfunction getMonthLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(date);\n}\n\nfunction getMonthOptions(locale?: string) {\n return Array.from({ length: 12 }, (_, month) => ({\n label: new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(2024, month, 1)),\n value: month,\n }));\n}\n\nfunction getDateLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getDayLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getWeekdayLabels(weekStartsOn: number, locale?: string) {\n const baseSunday = new Date(2024, 0, 7);\n\n return Array.from({ length: 7 }, (_, index) => {\n const date = addDays(baseSunday, weekStartsOn + index);\n return dayFormatter.formatToParts(date).length\n ? new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(date)\n : '';\n });\n}\n\nfunction isSameDay(a: Date | null, b: Date | null) {\n return Boolean(a && b && toIsoDate(a) === toIsoDate(b));\n}\n\nfunction isBeforeDate(date: Date, minDate: Date | null) {\n return Boolean(minDate && date.getTime() < minDate.getTime());\n}\n\nfunction isAfterDate(date: Date, maxDate: Date | null) {\n return Boolean(maxDate && date.getTime() > maxDate.getTime());\n}\n\nfunction isSameMonth(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nfunction isMonthDisabled(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n\n return Boolean((minDate && monthEnd < minDate) || (maxDate && monthStart > maxDate));\n}\n\nfunction clampVisibleMonth(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n if (minDate && endOfMonth(monthDate) < minDate) {\n return startOfMonth(minDate);\n }\n\n if (maxDate && startOfMonth(monthDate) > maxDate) {\n return startOfMonth(maxDate);\n }\n\n return startOfMonth(monthDate);\n}\n\nfunction getFocusableDateInMonth(monthDate: Date, preferredDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n let nextDate = new Date(\n monthStart.getFullYear(),\n monthStart.getMonth(),\n Math.min(preferredDate.getDate(), monthEnd.getDate()),\n );\n\n if (minDate && nextDate < minDate) {\n nextDate = isSameMonth(minDate, monthStart) ? minDate : monthStart;\n }\n\n if (maxDate && nextDate > maxDate) {\n nextDate = isSameMonth(maxDate, monthStart) ? maxDate : monthEnd;\n }\n\n return nextDate;\n}\n\nfunction getYearOptions(visibleMonth: Date, minDate: Date | null, maxDate: Date | null, today: Date) {\n const visibleYear = visibleMonth.getFullYear();\n const defaultStartYear = Math.min(visibleYear, today.getFullYear() - 100);\n const defaultEndYear = Math.max(visibleYear, today.getFullYear() + 20);\n const startYear = minDate?.getFullYear() ?? defaultStartYear;\n const endYear = maxDate?.getFullYear() ?? defaultEndYear;\n const firstYear = Math.min(startYear, endYear, visibleYear);\n const lastYear = Math.max(startYear, endYear, visibleYear);\n\n return Array.from({ length: lastYear - firstYear + 1 }, (_, index) => firstYear + index);\n}\n\nfunction isInRange(date: Date, startDate: Date | null, endDate: Date | null) {\n return Boolean(startDate && endDate && date > startDate && date < endDate);\n}\n\nfunction normalizeRange(startDate: Date | null, endDate: Date | null): PDateRangeValue {\n if (!startDate && !endDate) {\n return {};\n }\n\n if (startDate && endDate && endDate < startDate) {\n return {\n start: toIsoDate(endDate),\n end: toIsoDate(startDate),\n };\n }\n\n return {\n start: toIsoDate(startDate),\n end: toIsoDate(endDate),\n };\n}\n\nfunction resolvePresetRange(preset: PDateRangePickerPreset) {\n return typeof preset.value === 'function' ? preset.value() : preset.value;\n}\n\nfunction getRangeDates(value: PDateRangeValue | undefined) {\n return {\n startDate: toLocalDate(value?.start),\n endDate: toLocalDate(value?.end),\n };\n}\n\nfunction isSameRange(a: PDateRangeValue | undefined, b: PDateRangeValue | undefined) {\n return Boolean(a?.start && a?.end && a.start === b?.start && a.end === b?.end);\n}\n\nfunction getRangeLabel(value: PDateRangeValue | undefined, placeholder: string, locale?: string) {\n const { startDate, endDate } = getRangeDates(value);\n\n if (startDate && endDate) {\n return `${getDateLabel(startDate, locale)} - ${getDateLabel(endDate, locale)}`;\n }\n\n if (startDate) {\n return `${getDateLabel(startDate, locale)} -`;\n }\n\n if (endDate) {\n return `- ${getDateLabel(endDate, locale)}`;\n }\n\n return placeholder;\n}\n\nexport const PDateRangePicker = forwardRef<PDateRangePickerRef, PDateRangePickerProps>(\n (\n {\n label,\n value,\n defaultValue,\n onValueChange,\n presets = [],\n customLabel = 'Custom',\n showCustom = true,\n presetColumns = 'auto',\n placeholder = 'Select range',\n helperText,\n isError = false,\n errorMessage,\n min,\n max,\n nameStart,\n nameEnd,\n disabled = false,\n readOnly = false,\n required = false,\n locale,\n weekStartsOn = 0,\n className,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const panelId = `${rootId}-panel`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<PDateRangeValue>(defaultValue ?? {});\n const [isOpen, setIsOpen] = useState(false);\n const selectedValue = isControlled ? value : internalValue;\n const { startDate, endDate } = getRangeDates(selectedValue);\n const today = useMemo(getToday, []);\n const minDate = toLocalDate(min);\n const maxDate = toLocalDate(max);\n const [visibleMonth, setVisibleMonth] = useState(() => startOfMonth(startDate ?? today));\n const [focusedDate, setFocusedDate] = useState(() => startDate ?? today);\n const calendarTriggerRef = useRef<FocusableElement | null>(null);\n const dayRefs = useRef<Record<string, FocusableElement | null>>({});\n const shouldFocusCalendarDateRef = useRef(false);\n const calendarDays = getCalendarDays(visibleMonth, weekStartsOn);\n const weekdayLabels = getWeekdayLabels(weekStartsOn, locale);\n const monthOptions = useMemo(() => getMonthOptions(locale), [locale]);\n const yearOptions = getYearOptions(visibleMonth, minDate, maxDate, today);\n const hasPresets = presets.length > 0;\n const shouldRenderCustom = hasPresets ? showCustom : true;\n const presetColumnsStyle =\n presetColumns === 'auto'\n ? undefined\n : ({\n '--p-date-range-picker-preset-columns': String(presetColumns),\n } as CSSProperties);\n const hasCompleteRange = Boolean(selectedValue?.start && selectedValue?.end);\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const displayValue = getRangeLabel(selectedValue, placeholder, locale);\n const selectedMatchesPreset = hasPresets\n ? presets.some((preset) => isSameRange(resolvePresetRange(preset), selectedValue))\n : false;\n const isCustomActive = isOpen || Boolean(hasCompleteRange && !selectedMatchesPreset);\n const previousMonth = addMonths(visibleMonth, -1);\n const nextMonth = addMonths(visibleMonth, 1);\n const isPreviousMonthDisabled = isMonthDisabled(previousMonth, minDate, maxDate);\n const isNextMonthDisabled = isMonthDisabled(nextMonth, minDate, maxDate);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n if (shouldFocusCalendarDateRef.current) {\n dayRefs.current[toIsoDate(focusedDate)]?.focus();\n shouldFocusCalendarDateRef.current = false;\n }\n }, [focusedDate, isOpen, visibleMonth]);\n\n const setRangeValue = (range: PDateRangeValue, source: PDateRangePickerChangeSource) => {\n const { startDate: nextStartDate, endDate: nextEndDate } = getRangeDates(range);\n const normalizedRange = normalizeRange(nextStartDate, nextEndDate);\n\n if (!isControlled) {\n setInternalValue(normalizedRange);\n }\n\n const normalizedDates = getRangeDates(normalizedRange);\n\n if (normalizedDates.startDate) {\n setVisibleMonth(startOfMonth(normalizedDates.startDate));\n }\n\n onValueChange?.(normalizedRange, {\n startDate: normalizedDates.startDate,\n endDate: normalizedDates.endDate,\n source,\n });\n };\n\n const openCalendar = (trigger: HTMLButtonElement) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextFocusedDate = startDate ?? today;\n calendarTriggerRef.current = trigger as unknown as FocusableElement;\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(nextFocusedDate);\n setVisibleMonth(startOfMonth(nextFocusedDate));\n setIsOpen(true);\n };\n\n const closeCalendar = (restoreFocus = false) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n calendarTriggerRef.current?.focus();\n }\n };\n\n const updateVisibleMonth = (nextMonth: Date) => {\n const clampedMonth = clampVisibleMonth(nextMonth, minDate, maxDate);\n\n setVisibleMonth(clampedMonth);\n setFocusedDate(getFocusableDateInMonth(clampedMonth, focusedDate, minDate, maxDate));\n };\n\n const handleMonthChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextMonth } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(visibleMonth.getFullYear(), Number(nextMonth), 1));\n };\n\n const handleYearChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextYear } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(Number(nextYear), visibleMonth.getMonth(), 1));\n };\n\n const handlePresetClick = (preset: PDateRangePickerPreset) => {\n if (disabled || readOnly) {\n return;\n }\n\n setRangeValue(resolvePresetRange(preset), 'preset');\n closeCalendar();\n };\n\n const handleDayClick = (date: Date) => {\n if (disabled || readOnly || isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n if (!startDate || endDate) {\n setFocusedDate(date);\n setRangeValue({ start: toIsoDate(date), end: '' }, 'calendar');\n return;\n }\n\n setFocusedDate(date);\n setRangeValue({ start: toIsoDate(startDate), end: toIsoDate(date) }, 'calendar');\n closeCalendar(true);\n };\n\n const focusCalendarDate = (date: Date) => {\n if (isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(date);\n setVisibleMonth(startOfMonth(date));\n };\n\n const handleDayKeyDown =\n (date: Date): ButtonHTMLAttributes<HTMLButtonElement>['onKeyDown'] =>\n (event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n const weekOffset = (date.getDay() - weekStartsOn + 7) % 7;\n const nextDateByKey: Record<string, Date> = {\n ArrowLeft: addDays(date, -1),\n ArrowRight: addDays(date, 1),\n ArrowUp: addDays(date, -7),\n ArrowDown: addDays(date, 7),\n Home: addDays(date, -weekOffset),\n End: addDays(date, 6 - weekOffset),\n PageUp: addMonthsClamped(date, -1),\n PageDown: addMonthsClamped(date, 1),\n };\n const nextDate = nextDateByKey[event.key];\n\n if (!nextDate) {\n return;\n }\n\n event.preventDefault();\n focusCalendarDate(nextDate);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n id={rootId}\n style={presetColumnsStyle ? { ...style, ...presetColumnsStyle } : style}\n className={cn(\n 'p-date-range-picker',\n hasPresets && 'p-date-range-picker--with-presets',\n isError && 'p-date-range-picker--error',\n disabled && 'p-date-range-picker--disabled',\n className,\n )}\n >\n {hasPresets ? (\n <div id={labelId} className=\"p-date-range-picker__label\">\n <span>{label}</span>\n <span\n className={cn(\n 'p-date-range-picker__label-value',\n !hasCompleteRange && 'p-date-range-picker__label-value--empty',\n )}\n >\n {displayValue}\n </span>\n </div>\n ) : null}\n\n {hasPresets ? (\n <div\n aria-describedby={messageId}\n aria-labelledby={labelId}\n className={cn(\n 'p-date-range-picker__presets',\n presetColumns !== 'auto' && 'p-date-range-picker__presets--fixed',\n )}\n role=\"group\"\n >\n {presets.map((preset) => {\n const presetRange = resolvePresetRange(preset);\n const isActive = isSameRange(presetRange, selectedValue);\n\n return (\n <button\n key={preset.label}\n type=\"button\"\n className={cn('p-date-range-picker__preset', isActive && 'p-date-range-picker__preset--active')}\n disabled={disabled}\n aria-pressed={isActive}\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n );\n })}\n {shouldRenderCustom ? (\n <button\n type=\"button\"\n className={cn(\n 'p-date-range-picker__preset',\n isCustomActive && 'p-date-range-picker__preset--active',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-expanded={isOpen}\n aria-pressed={isCustomActive}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n {customLabel}\n </button>\n ) : null}\n </div>\n ) : (\n <button\n type=\"button\"\n className={cn(\n 'p-date-range-picker__trigger',\n !hasCompleteRange && 'p-date-range-picker__trigger--empty',\n hasCompleteRange && 'p-date-range-picker__trigger--filled',\n isOpen && 'p-date-range-picker__trigger--open',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-describedby={messageId}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-label={`${label}: ${displayValue}`}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n <span\n id={labelId}\n className={cn(\n 'p-date-range-picker__trigger-label p-date-range-picker__trigger-floating-label',\n isError && 'p-date-range-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n 'p-date-range-picker__trigger-label p-date-range-picker__trigger-placeholder-label',\n isError && 'p-date-range-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span className=\"p-date-range-picker__trigger-value\">{displayValue}</span>\n <span className=\"p-date-range-picker__trigger-icon\">\n <CalendarIcon />\n </span>\n </button>\n )}\n\n <input type=\"hidden\" name={nameStart} value={selectedValue?.start ?? ''} required={required} />\n <input type=\"hidden\" name={nameEnd} value={selectedValue?.end ?? ''} required={required} />\n\n {isOpen && (\n <div\n id={panelId}\n className=\"p-date-range-picker__panel\"\n role=\"dialog\"\n aria-labelledby={`${panelId}-title`}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeCalendar();\n }\n }}\n >\n <div className=\"p-date-range-picker__calendar-header\">\n <button\n type=\"button\"\n className=\"p-date-range-picker__nav\"\n aria-label=\"Previous month\"\n disabled={isPreviousMonthDisabled}\n onClick={() => updateVisibleMonth(previousMonth)}\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"p-date-range-picker__month\">\n <span id={`${panelId}-title`} className=\"p-date-range-picker__month-label\">\n {getMonthLabel(visibleMonth, locale)}\n </span>\n <select\n className=\"p-date-range-picker__month-select p-date-range-picker__calendar-select\"\n aria-label=\"Month\"\n value={visibleMonth.getMonth()}\n onChange={handleMonthChange}\n >\n {monthOptions.map((month) => (\n <option\n key={month.value}\n value={month.value}\n disabled={isMonthDisabled(new Date(visibleMonth.getFullYear(), month.value, 1), minDate, maxDate)}\n >\n {month.label}\n </option>\n ))}\n </select>\n <select\n className=\"p-date-range-picker__year-select p-date-range-picker__calendar-select\"\n aria-label=\"Year\"\n value={visibleMonth.getFullYear()}\n onChange={handleYearChange}\n >\n {yearOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n className=\"p-date-range-picker__nav\"\n aria-label=\"Next month\"\n disabled={isNextMonthDisabled}\n onClick={() => updateVisibleMonth(nextMonth)}\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n <div className=\"p-date-range-picker__weekdays\" aria-hidden=\"true\">\n {weekdayLabels.map((weekday) => (\n <span key={weekday}>{weekday}</span>\n ))}\n </div>\n\n <div className=\"p-date-range-picker__grid\" role=\"grid\" aria-labelledby={`${panelId}-title`}>\n {calendarDays.map((date) => {\n const isoDate = toIsoDate(date);\n const isOutsideMonth = date.getMonth() !== visibleMonth.getMonth();\n const isRangeStart = isSameDay(date, startDate);\n const isRangeEnd = isSameDay(date, endDate);\n const isRangeMiddle = isInRange(date, startDate, endDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isBeforeDate(date, minDate) || isAfterDate(date, maxDate);\n\n return (\n <button\n key={isoDate}\n ref={(node) => {\n dayRefs.current[isoDate] = node as unknown as FocusableElement | null;\n }}\n type=\"button\"\n role=\"gridcell\"\n data-date={isoDate}\n className={cn(\n 'p-date-range-picker__day',\n isOutsideMonth && 'p-date-range-picker__day--outside',\n isToday && 'p-date-range-picker__day--today',\n isRangeMiddle && 'p-date-range-picker__day--in-range',\n (isRangeStart || isRangeEnd) && 'p-date-range-picker__day--selected',\n )}\n disabled={isDisabled}\n aria-label={getDayLabel(date, locale)}\n aria-selected={isRangeStart || isRangeEnd}\n tabIndex={isSameDay(date, focusedDate) ? 0 : -1}\n onClick={() => handleDayClick(date)}\n onKeyDown={handleDayKeyDown(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-date-range-picker__message p-date-range-picker__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-date-range-picker__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPDateRangePicker.displayName = 'PDateRangePicker';\n\nexport const PDateRangePickerPresets = {\n thisWeek: {\n label: 'This week',\n value: () => {\n const today = getToday();\n const weekStart = addDays(today, -today.getDay());\n\n return {\n start: toIsoDate(weekStart),\n end: toIsoDate(addDays(weekStart, 6)),\n };\n },\n },\n last7Days: {\n label: 'Last 7 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -6)),\n end: toIsoDate(today),\n };\n },\n },\n last14Days: {\n label: 'Last 14 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -13)),\n end: toIsoDate(today),\n };\n },\n },\n last30Days: {\n label: 'Last 30 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -29)),\n end: toIsoDate(today),\n };\n },\n },\n thisMonth: {\n label: 'This month',\n value: () => {\n const today = getToday();\n const start = startOfMonth(today);\n const end = endOfMonth(today);\n\n return {\n start: toIsoDate(start),\n end: toIsoDate(end),\n };\n },\n },\n lastMonth: {\n label: 'Last month',\n value: () => {\n const today = getToday();\n const lastMonth = addMonths(today, -1);\n\n return {\n start: toIsoDate(startOfMonth(lastMonth)),\n end: toIsoDate(endOfMonth(lastMonth)),\n };\n },\n },\n monthToDate: {\n label: 'Month to date',\n value: () => {\n const today = getToday();\n const start = startOfMonth(today);\n\n return {\n start: toIsoDate(start),\n end: toIsoDate(today),\n };\n },\n },\n yearToDate: {\n label: 'Year to date',\n value: () => {\n const today = getToday();\n\n return {\n start: toIsoDate(new Date(today.getFullYear(), 0, 1)),\n end: toIsoDate(today),\n };\n },\n },\n} satisfies Record<string, PDateRangePickerPreset>;\n","import {\n forwardRef,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PHighlight.css';\n\nexport type PHighlightVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info' | 'neutral';\nexport type PHighlightAppearance = 'text' | 'background';\nexport type PHighlightRef = HTMLElement;\n\nexport type PHighlightProps = {\n as?: ElementType;\n variant?: PHighlightVariant;\n /** Controls whether the highlight is text-only or a filled background. */\n appearance?: PHighlightAppearance;\n /** Custom highlight color. Text color by default, background color for `appearance=\"background\"`. */\n color?: CSSProperties['color'];\n /** Custom foreground color for `appearance=\"background\"`. */\n textColor?: CSSProperties['color'];\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'color' | 'style'>;\n\ntype PHighlightStyle = CSSProperties & {\n '--p-highlight-color'?: CSSProperties['color'];\n '--p-highlight-bg'?: CSSProperties['backgroundColor'];\n '--p-highlight-text'?: CSSProperties['color'];\n};\n\nexport const PHighlight = forwardRef<PHighlightRef, PHighlightProps>(\n (\n {\n as: Element = 'span',\n variant = 'primary',\n appearance = 'text',\n color,\n textColor,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const highlightStyle: PHighlightStyle = {\n ...style,\n ...(color ? { '--p-highlight-color': color, '--p-highlight-bg': color } : {}),\n ...(textColor ? { '--p-highlight-text': textColor } : {}),\n };\n\n return (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-highlight',\n `p-highlight--${variant}`,\n appearance === 'background' && 'p-highlight--background',\n className,\n )}\n style={highlightStyle}\n >\n {children}\n </Element>\n );\n },\n);\n\nPHighlight.displayName = 'PHighlight';\n","import {\n Children,\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PHorizontalSlider.css';\n\nexport type PHorizontalSliderRef = HTMLDivElement;\n\nexport type PHorizontalSliderProps = {\n children: ReactNode;\n /** Accessible label for the keyboard-focusable scroll region. */\n ariaLabel?: string;\n /** Gap between slider items. Accepts any CSS gap value. */\n gap?: CSSProperties['gap'];\n /** Disables horizontal snap alignment when free scrolling is preferred. */\n snap?: boolean;\n scrollerClassName?: string;\n listClassName?: string;\n itemClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'> & {\n className?: string;\n };\n\ntype SliderStyle = CSSProperties & {\n '--p-horizontal-slider-gap'?: CSSProperties['gap'];\n};\n\nexport const PHorizontalSlider = forwardRef<PHorizontalSliderRef, PHorizontalSliderProps>(\n (\n {\n children,\n ariaLabel = 'Horizontal content',\n gap,\n snap = true,\n className,\n scrollerClassName,\n listClassName,\n itemClassName,\n style,\n ...props\n },\n ref,\n ) => {\n const sliderStyle: SliderStyle = {\n ...style,\n ...(gap ? { '--p-horizontal-slider-gap': gap } : {}),\n };\n\n return (\n <div\n {...props}\n ref={ref}\n className={cn('p-horizontal-slider', !snap && 'p-horizontal-slider--no-snap', className)}\n style={sliderStyle}\n >\n <div\n aria-label={ariaLabel}\n className={cn('p-horizontal-slider__scroller', scrollerClassName)}\n role=\"region\"\n tabIndex={0}\n >\n <ul className={cn('p-horizontal-slider__list', listClassName)}>\n {Children.map(children, (child) => (\n <li className={cn('p-horizontal-slider__item', itemClassName)}>{child}</li>\n ))}\n </ul>\n </div>\n </div>\n );\n },\n);\n\nPHorizontalSlider.displayName = 'PHorizontalSlider';\n","import {\n forwardRef,\n useId,\n useState,\n type ChangeEvent,\n type ReactNode,\n type SelectHTMLAttributes,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PSelect.css';\n\nexport type PSelectRef = HTMLSelectElement;\nexport type PSelectDensity = 'standard' | 'compact';\nexport type PSelectVariant = 'floating' | 'inline';\n\nexport type PSelectOption = {\n value: string | number;\n label: ReactNode;\n disabled?: boolean;\n group?: string;\n};\n\nexport type PSelectProps = {\n className?: string;\n selectClassName?: string;\n label: string;\n options: PSelectOption[];\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n density?: PSelectDensity;\n variant?: PSelectVariant;\n hideLabel?: boolean;\n onValueChange?: (value: string, option: PSelectOption | null) => void;\n} & Omit<\n SelectHTMLAttributes<HTMLSelectElement>,\n 'aria-describedby' | 'aria-label' | 'children' | 'className' | 'onChange'\n> & {\n onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;\n};\n\nfunction ChevronDownIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 8 5 5 5-5\" />\n </svg>\n );\n}\n\nfunction getSelectValue(value: SelectHTMLAttributes<HTMLSelectElement>['value']) {\n if (Array.isArray(value)) {\n return value[0] ?? '';\n }\n\n return value ?? '';\n}\n\nexport const PSelect = forwardRef<PSelectRef, PSelectProps>(\n (\n {\n className,\n selectClassName,\n label,\n options,\n placeholder = 'Select an option',\n helperText,\n id,\n isError = false,\n errorMessage,\n density = 'standard',\n variant = 'floating',\n hideLabel = false,\n disabled,\n required,\n value,\n defaultValue,\n onChange,\n onValueChange,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const selectId = id ?? generatedId;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(getSelectValue(defaultValue));\n const selectedValue = getSelectValue(isControlled ? value : internalValue);\n const hasValue = selectedValue !== '';\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const groupedOptions = options.reduce<Array<{ group: string | null; options: PSelectOption[] }>>(\n (accumulator, option) => {\n const group = option.group ?? null;\n const existingGroup = accumulator.find((item) => item.group === group);\n\n if (existingGroup) {\n existingGroup.options.push(option);\n return accumulator;\n }\n\n accumulator.push({ group, options: [option] });\n return accumulator;\n },\n [],\n );\n\n const handleChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextValue } = event.currentTarget as unknown as { value: string };\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChange?.(event);\n onValueChange?.(\n nextValue,\n options.find((option) => String(option.value) === nextValue) ?? null,\n );\n };\n\n return (\n <div\n className={cn(\n 'p-select',\n `p-select--${density}`,\n `p-select--${variant}`,\n hasValue && 'p-select--filled',\n isError && 'p-select--error',\n disabled && 'p-select--disabled',\n className,\n )}\n style={style}\n >\n <div className=\"p-select__field\">\n <select\n {...props}\n id={selectId}\n ref={ref}\n value={value}\n defaultValue={value === undefined ? defaultValue ?? '' : undefined}\n disabled={disabled}\n required={required}\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={required}\n aria-disabled={disabled}\n className={cn('p-select__control', isError && 'p-select__control--error', selectClassName)}\n onChange={handleChange}\n >\n {placeholder ? (\n <option value=\"\" disabled={required} aria-label={placeholder}>\n {''}\n </option>\n ) : null}\n\n {groupedOptions.map((group) =>\n group.group ? (\n <optgroup key={group.group} label={group.group}>\n {group.options.map((option) => (\n <option key={String(option.value)} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </optgroup>\n ) : (\n group.options.map((option) => (\n <option key={String(option.value)} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))\n ),\n )}\n </select>\n\n {variant === 'floating' ? (\n <>\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-select__label p-select__floating-label',\n hideLabel && 'p-select__label--hidden',\n isError && 'p-select__label--error',\n )}\n >\n {label}\n </span>\n\n <label\n htmlFor={selectId}\n className={cn('p-select__label p-select__placeholder-label', hideLabel && 'p-select__label--hidden')}\n >\n {placeholder || label}\n </label>\n </>\n ) : (\n <label\n htmlFor={selectId}\n className={cn('p-select__label p-select__inline-label', hideLabel && 'p-select__label--hidden')}\n >\n {label}\n </label>\n )}\n\n <span className=\"p-select__chevron\" aria-hidden=\"true\">\n <ChevronDownIcon />\n </span>\n </div>\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-select__message p-select__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-select__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPSelect.displayName = 'PSelect';\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport { PSelect } from '../PSelect';\nimport './PPagination.css';\n\nexport type PPaginationRef = HTMLElement;\nexport type PPaginationDensity = 'standard' | 'compact';\nexport type PPaginationItem = number | 'ellipsis';\n\nexport type PPaginationProps = {\n page: number;\n pageCount?: number;\n totalItems?: number;\n pageSize?: number;\n pageSizeOptions?: number[];\n itemLabel?: string;\n density?: PPaginationDensity;\n siblingCount?: number;\n boundaryCount?: number;\n disabled?: boolean;\n isLoading?: boolean;\n hasPreviousPage?: boolean;\n hasNextPage?: boolean;\n showRowsPerPage?: boolean;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n className?: string;\n summary?: ReactNode;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'onChange'>;\n\nfunction clampPage(page: number, pageCount?: number) {\n if (!Number.isFinite(page)) {\n return 1;\n }\n\n if (!pageCount) {\n return Math.max(1, Math.trunc(page));\n }\n\n return Math.min(Math.max(1, Math.trunc(page)), Math.max(1, pageCount));\n}\n\nfunction getRange(start: number, end: number) {\n return Array.from({ length: end - start + 1 }, (_, index) => start + index);\n}\n\nfunction getPaginationItems(\n page: number,\n pageCount: number,\n siblingCount: number,\n boundaryCount: number,\n): PPaginationItem[] {\n const normalizedPageCount = Math.max(1, pageCount);\n const normalizedPage = clampPage(page, normalizedPageCount);\n const normalizedSiblingCount = Math.max(0, Math.trunc(siblingCount));\n const normalizedBoundaryCount = Math.max(1, Math.trunc(boundaryCount));\n const totalVisible = normalizedBoundaryCount * 2 + normalizedSiblingCount * 2 + 3;\n\n if (normalizedPageCount <= totalVisible) {\n return getRange(1, normalizedPageCount);\n }\n\n const edgeWindowCount = totalVisible - normalizedBoundaryCount - 1;\n const startPages = getRange(1, normalizedBoundaryCount);\n const endPages = getRange(normalizedPageCount - normalizedBoundaryCount + 1, normalizedPageCount);\n const startWindowEnd = edgeWindowCount;\n const endWindowStart = normalizedPageCount - edgeWindowCount + 1;\n\n if (normalizedPage <= startWindowEnd - normalizedSiblingCount) {\n return [...getRange(1, startWindowEnd), 'ellipsis' as const, ...endPages];\n }\n\n if (normalizedPage >= endWindowStart + normalizedSiblingCount) {\n return [...startPages, 'ellipsis' as const, ...getRange(endWindowStart, normalizedPageCount)];\n }\n\n const middleStart = normalizedPage - normalizedSiblingCount;\n const middleEnd = normalizedPage + normalizedSiblingCount;\n\n return [\n ...startPages,\n 'ellipsis' as const,\n ...getRange(middleStart, middleEnd),\n 'ellipsis' as const,\n ...endPages,\n ];\n}\n\nfunction getDefaultSummary(\n page: number,\n pageCount: number | undefined,\n totalItems: number | undefined,\n pageSize: number | undefined,\n itemLabel: string,\n) {\n if (totalItems !== undefined && pageSize) {\n if (totalItems <= 0) {\n return `No ${itemLabel}`;\n }\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(totalItems, page * pageSize);\n\n return `Showing ${start}-${end} of ${totalItems} ${itemLabel}`;\n }\n\n if (pageCount) {\n return `Page ${page} of ${pageCount}`;\n }\n\n return `Page ${page}`;\n}\n\nfunction PaginationButton({\n className,\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <button {...props} type=\"button\" className={cn('p-pagination__button', className)}>\n {children}\n </button>\n );\n}\n\nexport const PPagination = forwardRef<PPaginationRef, PPaginationProps>(\n (\n {\n page,\n pageCount,\n totalItems,\n pageSize,\n pageSizeOptions,\n itemLabel = 'items',\n density = 'standard',\n siblingCount = 1,\n boundaryCount = 1,\n disabled = false,\n isLoading = false,\n hasPreviousPage,\n hasNextPage,\n showRowsPerPage = true,\n onPageChange,\n onPageSizeChange,\n className,\n summary,\n ...props\n },\n ref,\n ) => {\n const normalizedPageCount = pageCount ? Math.max(1, Math.trunc(pageCount)) : undefined;\n const currentPage = clampPage(page, normalizedPageCount);\n const isUnavailable = disabled || isLoading;\n const canRequestPage = !isUnavailable && Boolean(onPageChange);\n const canGoPrevious = canRequestPage && (hasPreviousPage ?? currentPage > 1);\n const canGoNext = canRequestPage && (hasNextPage ?? (normalizedPageCount ? currentPage < normalizedPageCount : true));\n const pageItems = normalizedPageCount\n ? getPaginationItems(currentPage, normalizedPageCount, siblingCount, boundaryCount)\n : [];\n const shouldShowRowsPerPage = Boolean(\n showRowsPerPage && pageSize && pageSizeOptions?.length && onPageSizeChange,\n );\n const summaryText =\n summary ?? getDefaultSummary(currentPage, normalizedPageCount, totalItems, pageSize, itemLabel);\n\n const handlePageChange = (nextPage: number) => {\n if (isUnavailable) {\n return;\n }\n\n const clampedNextPage = clampPage(nextPage, normalizedPageCount);\n\n if (clampedNextPage === currentPage && normalizedPageCount) {\n return;\n }\n\n onPageChange?.(clampedNextPage);\n };\n\n return (\n <nav\n {...props}\n ref={ref}\n className={cn(\n 'p-pagination',\n `p-pagination--${density}`,\n isLoading && 'p-pagination--loading',\n className,\n )}\n aria-label={props['aria-label'] ?? 'Pagination'}\n aria-busy={isLoading || undefined}\n >\n <div className=\"p-pagination__summary\" aria-live=\"polite\">\n {summaryText}\n </div>\n\n <div className=\"p-pagination__controls\">\n <PaginationButton\n className=\"p-pagination__button--previous\"\n disabled={!canGoPrevious}\n aria-label=\"Go to previous page\"\n onClick={() => handlePageChange(currentPage - 1)}\n >\n <ChevronLeftIcon />\n <span>Previous</span>\n </PaginationButton>\n\n {normalizedPageCount ? (\n <div className=\"p-pagination__pages\" aria-label=\"Pages\">\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <span key={`ellipsis-${index}`} className=\"p-pagination__ellipsis\" aria-hidden=\"true\">\n ...\n </span>\n ) : (\n <PaginationButton\n key={item}\n className={cn('p-pagination__page', item === currentPage && 'p-pagination__page--current')}\n aria-label={`Go to page ${item}`}\n aria-current={item === currentPage ? 'page' : undefined}\n disabled={!canRequestPage || item === currentPage}\n onClick={() => handlePageChange(item)}\n >\n {item}\n </PaginationButton>\n ),\n )}\n </div>\n ) : (\n <div className=\"p-pagination__cursor-page\" aria-live=\"polite\">\n Page {currentPage}\n </div>\n )}\n\n <PaginationButton\n className=\"p-pagination__button--next\"\n disabled={!canGoNext}\n aria-label=\"Go to next page\"\n onClick={() => handlePageChange(currentPage + 1)}\n >\n <span>Next</span>\n <ChevronRightIcon />\n </PaginationButton>\n </div>\n\n {shouldShowRowsPerPage ? (\n <PSelect\n className=\"p-pagination__page-size\"\n label=\"Rows per page\"\n placeholder=\"\"\n density=\"compact\"\n variant=\"inline\"\n hideLabel\n value={pageSize}\n disabled={isUnavailable}\n options={pageSizeOptions?.map((option) => ({ value: option, label: `${option} / page` })) ?? []}\n onValueChange={(nextPageSize) => onPageSizeChange?.(Number(nextPageSize))}\n />\n ) : null}\n </nav>\n );\n },\n);\n\nPPagination.displayName = 'PPagination';\n","import {\n forwardRef,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PTable.css';\n\nexport type PTableRef = HTMLDivElement;\nexport type PTableDensity = 'compact' | 'standard' | 'spacious';\nexport type PTableAlign = 'start' | 'center' | 'end';\nexport type PTableSortDirection = 'ascending' | 'descending';\nexport type PTableColumnPriority = 'primary' | 'secondary' | 'tertiary';\nexport type PTableStateTone = 'neutral' | 'danger';\nexport type PTableRowTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type PTableRecord = Record<string, unknown>;\n\nexport type PTableColumn<RowData extends PTableRecord = PTableRecord> = {\n id: string;\n header: ReactNode;\n label?: string;\n accessor?: keyof RowData | ((row: RowData) => ReactNode);\n cell?: (row: RowData, rowIndex: number) => ReactNode;\n mobileLabel?: string;\n width?: string;\n align?: PTableAlign;\n priority?: PTableColumnPriority;\n hideOnTablet?: boolean;\n hideOnMobile?: boolean;\n sortable?: boolean;\n sortDirection?: PTableSortDirection | null;\n};\n\nexport type PTableState = {\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n tone?: PTableStateTone;\n};\n\nexport type PTableProps<RowData extends PTableRecord = PTableRecord> = {\n columns: PTableColumn<RowData>[];\n rows: RowData[];\n caption: string;\n captionHidden?: boolean;\n summary?: ReactNode;\n density?: PTableDensity;\n stickyHeader?: boolean;\n stickyFirstColumn?: boolean;\n isLoading?: boolean;\n loadingLabel?: ReactNode;\n emptyState?: PTableState;\n errorState?: PTableState;\n getRowId?: (row: RowData, rowIndex: number) => string;\n getRowTone?: (row: RowData, rowIndex: number) => PTableRowTone | undefined;\n onRowClick?: (\n row: RowData,\n rowIndex: number,\n event: MouseEvent<HTMLTableRowElement | HTMLLIElement> | KeyboardEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => void;\n renderRowActions?: (row: RowData, rowIndex: number) => ReactNode;\n onSortChange?: (columnId: string, direction: PTableSortDirection) => void;\n className?: string;\n tableClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>;\n\nfunction getColumnLabel<RowData extends PTableRecord>(column: PTableColumn<RowData>) {\n if (column.label) {\n return column.label;\n }\n\n if (column.mobileLabel) {\n return column.mobileLabel;\n }\n\n return typeof column.header === 'string' ? column.header : column.id;\n}\n\nfunction getCellContent<RowData extends PTableRecord>(\n row: RowData,\n column: PTableColumn<RowData>,\n rowIndex: number,\n) {\n if (column.cell) {\n return column.cell(row, rowIndex);\n }\n\n if (typeof column.accessor === 'function') {\n return column.accessor(row);\n }\n\n if (column.accessor) {\n return row[column.accessor] as ReactNode;\n }\n\n return null;\n}\n\nfunction getNextSortDirection(direction?: PTableSortDirection | null): PTableSortDirection {\n return direction === 'ascending' ? 'descending' : 'ascending';\n}\n\ntype ClosestElementLike = {\n closest: (selector: string) => unknown;\n};\n\ntype ContainsElementLike = {\n contains: (node: unknown) => boolean;\n};\n\nfunction hasClosest(target: EventTarget | null): target is EventTarget & ClosestElementLike {\n return Boolean(\n target &&\n typeof target === 'object' &&\n 'closest' in target &&\n typeof (target as ClosestElementLike).closest === 'function',\n );\n}\n\nfunction hasContains(target: EventTarget | null): target is EventTarget & ContainsElementLike {\n return Boolean(\n target &&\n typeof target === 'object' &&\n 'contains' in target &&\n typeof (target as ContainsElementLike).contains === 'function',\n );\n}\n\nfunction isInteractiveTarget(target: EventTarget | null, container: EventTarget | null) {\n if (!hasContains(container)) {\n return false;\n }\n\n if (!hasClosest(target)) {\n return false;\n }\n\n const interactiveElement = target.closest(\n [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'summary',\n '[contenteditable=\"true\"]',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[data-p-table-ignore-row-click]',\n ].join(','),\n );\n\n return Boolean(interactiveElement && interactiveElement !== container && container.contains(interactiveElement));\n}\n\nfunction PTableComponent<RowData extends PTableRecord>(\n {\n columns,\n rows,\n caption,\n captionHidden = false,\n summary,\n density = 'standard',\n stickyHeader = true,\n stickyFirstColumn = true,\n isLoading = false,\n loadingLabel = 'Loading table data...',\n emptyState = {\n title: 'No records found',\n description: 'Try adjusting the filters or checking back later.',\n },\n errorState,\n getRowId,\n getRowTone,\n onRowClick,\n renderRowActions,\n onSortChange,\n className,\n tableClassName,\n ...props\n }: PTableProps<RowData>,\n ref: ForwardedRef<PTableRef>,\n) {\n const hasRows = rows.length > 0;\n const hasActions = Boolean(renderRowActions);\n const activeState = errorState ?? (!isLoading && !hasRows ? emptyState : null);\n const visibleMobileColumns = columns.filter((column) => !column.hideOnMobile);\n const columnCount = columns.length + (hasActions ? 1 : 0);\n const handleRowClick = (\n row: RowData,\n rowIndex: number,\n event: MouseEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => {\n if (isInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n onRowClick?.(row, rowIndex, event);\n };\n const handleRowKeyDown = (\n row: RowData,\n rowIndex: number,\n event: KeyboardEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => {\n if (isInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n onRowClick?.(row, rowIndex, event);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n className={cn(\n 'p-table',\n `p-table--${density}`,\n stickyHeader && 'p-table--sticky-header',\n stickyFirstColumn && 'p-table--sticky-first-column',\n onRowClick && 'p-table--interactive',\n className,\n )}\n >\n <div className=\"p-table__header\">\n <div className=\"p-table__header-copy\">\n <h3 className={cn('p-table__caption', captionHidden && 'p-table__caption--hidden')}>\n {caption}\n </h3>\n {summary ? <div className=\"p-table__summary\">{summary}</div> : null}\n </div>\n </div>\n\n <div className=\"p-table__viewport\">\n <table className={cn('p-table__table', tableClassName)}>\n <caption className=\"p-table__native-caption\">{caption}</caption>\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n className={cn(\n 'p-table__col',\n column.priority && `p-table__col--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__col--hide-tablet',\n column.hideOnMobile && 'p-table__col--hide-mobile',\n )}\n style={column.width ? { width: column.width } : undefined}\n />\n ))}\n {hasActions ? <col className=\"p-table__actions-col\" /> : null}\n </colgroup>\n <thead className=\"p-table__head\">\n <tr>\n {columns.map((column) => {\n const nextSortDirection = getNextSortDirection(column.sortDirection);\n const ariaSort = column.sortDirection ?? (column.sortable ? 'none' : undefined);\n\n return (\n <th\n key={column.id}\n scope=\"col\"\n aria-sort={ariaSort}\n className={cn(\n 'p-table__cell p-table__head-cell',\n column.align && `p-table__cell--${column.align}`,\n column.priority && `p-table__cell--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__cell--hide-tablet',\n column.hideOnMobile && 'p-table__cell--hide-mobile',\n )}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n className=\"p-table__sort-button\"\n aria-label={`Sort by ${getColumnLabel(column)}`}\n onClick={() => onSortChange?.(column.id, nextSortDirection)}\n >\n <span>{column.header}</span>\n <span\n className={cn(\n 'p-table__sort-mark',\n column.sortDirection && `p-table__sort-mark--${column.sortDirection}`,\n )}\n aria-hidden=\"true\"\n />\n </button>\n ) : (\n column.header\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th scope=\"col\" className=\"p-table__cell p-table__head-cell p-table__actions-head\">\n <span className=\"p-table__sr-only\">Actions</span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody className=\"p-table__body\">\n {isLoading ? (\n <tr>\n <td className=\"p-table__state-cell\" colSpan={columnCount}>\n <span className=\"p-table__loading-mark\" aria-hidden=\"true\" />\n <span>{loadingLabel}</span>\n </td>\n </tr>\n ) : activeState ? (\n <tr>\n <td className=\"p-table__state-cell\" colSpan={columnCount}>\n <div className={cn('p-table__state', activeState.tone && `p-table__state--${activeState.tone}`)}>\n <strong>{activeState.title}</strong>\n {activeState.description ? <span>{activeState.description}</span> : null}\n {activeState.action ? <div className=\"p-table__state-action\">{activeState.action}</div> : null}\n </div>\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => {\n const rowId = getRowId?.(row, rowIndex) ?? String(rowIndex);\n const tone = getRowTone?.(row, rowIndex);\n const rowContent = columns.map((column) => (\n <td\n key={column.id}\n className={cn(\n 'p-table__cell p-table__body-cell',\n column.align && `p-table__cell--${column.align}`,\n column.priority && `p-table__cell--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__cell--hide-tablet',\n column.hideOnMobile && 'p-table__cell--hide-mobile',\n )}\n >\n {getCellContent(row, column, rowIndex)}\n </td>\n ));\n\n return (\n <tr\n key={rowId}\n className={cn('p-table__row', tone && `p-table__row--${tone}`)}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? (event) => handleRowClick(row, rowIndex, event) : undefined}\n onKeyDown={onRowClick ? (event) => handleRowKeyDown(row, rowIndex, event) : undefined}\n >\n {rowContent}\n {hasActions ? (\n <td className=\"p-table__cell p-table__body-cell p-table__actions-cell\">\n {renderRowActions?.(row, rowIndex)}\n </td>\n ) : null}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n <ul className=\"p-table__mobile-list\" aria-label={`${caption} rows`}>\n {isLoading ? (\n <li className=\"p-table__mobile-state\">\n <span className=\"p-table__loading-mark\" aria-hidden=\"true\" />\n <span>{loadingLabel}</span>\n </li>\n ) : activeState ? (\n <li className=\"p-table__mobile-state\">\n <div className={cn('p-table__state', activeState.tone && `p-table__state--${activeState.tone}`)}>\n <strong>{activeState.title}</strong>\n {activeState.description ? <span>{activeState.description}</span> : null}\n {activeState.action ? <div className=\"p-table__state-action\">{activeState.action}</div> : null}\n </div>\n </li>\n ) : (\n rows.map((row, rowIndex) => {\n const rowId = getRowId?.(row, rowIndex) ?? String(rowIndex);\n const primaryColumn = visibleMobileColumns.find((column) => column.priority === 'primary') ?? visibleMobileColumns[0];\n const detailColumns = visibleMobileColumns.filter((column) => column.id !== primaryColumn?.id);\n const tone = getRowTone?.(row, rowIndex);\n\n return (\n <li\n key={rowId}\n className={cn('p-table__mobile-row', tone && `p-table__mobile-row--${tone}`)}\n role={onRowClick ? 'button' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? (event) => handleRowClick(row, rowIndex, event) : undefined}\n onKeyDown={onRowClick ? (event) => handleRowKeyDown(row, rowIndex, event) : undefined}\n >\n {primaryColumn ? (\n <div className=\"p-table__mobile-title\">\n {getCellContent(row, primaryColumn, rowIndex)}\n </div>\n ) : null}\n <dl className=\"p-table__mobile-fields\">\n {detailColumns.map((column) => (\n <div key={column.id} className=\"p-table__mobile-field\">\n <dt>{getColumnLabel(column)}</dt>\n <dd>{getCellContent(row, column, rowIndex)}</dd>\n </div>\n ))}\n </dl>\n {hasActions ? (\n <div className=\"p-table__mobile-actions\">{renderRowActions?.(row, rowIndex)}</div>\n ) : null}\n </li>\n );\n })\n )}\n </ul>\n </div>\n );\n}\n\ntype PTableComponentType = (<RowData extends PTableRecord = PTableRecord>(\n props: PTableProps<RowData> & { ref?: ForwardedRef<PTableRef> },\n) => ReturnType<typeof PTableComponent>) & {\n displayName?: string;\n};\n\nexport const PTable = forwardRef(PTableComponent) as PTableComponentType;\n\nPTable.displayName = 'PTable';\n","import { Stack } from \"../PContainers\";\nimport { PTypography } from \"../PTypography\";\nimport cn from \"../../utils/cn\";\nimport \"./PSectionHeader.css\";\n\nexport type PSectionHeaderVariant = \"default\" | \"indexed\";\n\nexport interface PSectionHeaderProps {\n title: string;\n index?: string | number;\n variant?: PSectionHeaderVariant;\n className?: string;\n}\n\nexport default function PSectionHeader({\n title,\n index = \"01\",\n variant = \"default\",\n className,\n}: PSectionHeaderProps) {\n if (variant === \"indexed\") {\n return (\n <div\n className={cn(\"p-section-header p-section-header--indexed\", className)}\n >\n <PTypography\n as=\"span\"\n className=\"p-section-header__mark\"\n variant=\"body\"\n aria-hidden=\"true\"\n >\n —\n </PTypography>\n <PTypography\n as=\"span\"\n className=\"p-section-header__index\"\n variant=\"body\"\n >\n {index}\n </PTypography>\n <PTypography\n as=\"span\"\n className=\"p-section-header__divider\"\n variant=\"body\"\n aria-hidden=\"true\"\n >\n \\\n </PTypography>\n <PTypography as=\"h2\" className=\"p-section-header__title\" variant=\"body\">\n {title}\n </PTypography>\n </div>\n );\n }\n\n return (\n <Stack\n className={cn(\"p-section-header p-section-header--default\", className)}\n >\n <PTypography className=\"p-section-header__title\" variant=\"body-wide\">\n {title}\n </PTypography>\n </Stack>\n );\n}\n","import { forwardRef, type InputHTMLAttributes, type ReactNode, useId, useState } from 'react';\nimport './PTextInput.css';\nimport cn from '../../utils/cn';\n\nexport type PTextInputRef = HTMLInputElement;\n\nexport type PTextInputProps = {\n /**\n * Applied to the root wrapper element.\n * Override design tokens via CSS custom properties, e.g.:\n * `[--p-input-ring:var(--p-color-info)] [--p-input-bg:var(--p-color-info-surface)]`\n */\n className?: string;\n /** Applied to the inner `<input>` element for layout / spacing overrides. */\n inputClassName?: string;\n /** Visible label — doubles as the floating label and the placeholder. */\n label: string;\n /** Shown below the field when there is no error. */\n helperText?: string;\n isError?: boolean;\n /** Shown below the field when `isError` is true. Announced immediately via `role=\"alert\"`. */\n errorMessage?: string;\n /** Decorative element placed on the trailing edge. Ignored when `type=\"password\"`. */\n rightAdornment?: ReactNode;\n} & Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'className' | 'placeholder' | 'aria-label' | 'aria-describedby'\n>;\n\n// ─── Inline SVG icons ────────────────────────────────────────────────────────\n\nfunction EyeIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className=\"p-text-input__icon\"\n >\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className=\"p-text-input__icon\"\n >\n <path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\" />\n <path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\" />\n <path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\" />\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n </svg>\n );\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const PTextInput = forwardRef<PTextInputRef, PTextInputProps>(\n (\n {\n className,\n inputClassName,\n type,\n label,\n helperText,\n id,\n isError = false,\n errorMessage,\n rightAdornment,\n disabled,\n readOnly,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n\n const isPassword = type === 'password';\n const hasRightAdornment = Boolean(rightAdornment) && !isPassword;\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = isPassword ? (showPassword ? 'text' : 'password') : (type ?? 'text');\n\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <div className={cn('p-text-input', className)} style={style}>\n <div className=\"p-text-input__field\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type={inputType}\n disabled={disabled}\n readOnly={readOnly}\n // Empty string required for the CSS peer-not-placeholder-shown trick.\n placeholder=\" \"\n // Accessibility\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={props.required}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n autoComplete={props.autoComplete ?? (isPassword ? 'current-password' : undefined)}\n className={cn(\n 'p-text-input__control',\n (isPassword || hasRightAdornment) && 'p-text-input__control--adorned',\n isError && 'p-text-input__control--error',\n hasRightAdornment && type === 'date' && 'p-text-input__control--date-adorned',\n inputClassName,\n )}\n />\n\n {/*\n * Floating label — shown above the value when focused or filled.\n * aria-hidden: the <label> below already provides the accessible name.\n */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-text-input__label p-text-input__floating-label',\n isError && 'p-text-input__label--error',\n )}\n >\n {label}\n </span>\n\n {/*\n * Placeholder label — centered in the field when empty and unfocused.\n * pointer-events-none lets clicks fall through to the input beneath;\n * htmlFor still wires up the accessible name correctly.\n */}\n <label\n htmlFor={inputId}\n className=\"p-text-input__label p-text-input__placeholder-label\"\n >\n {label}\n </label>\n\n {/* Password toggle */}\n {isPassword && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={disabled}\n className=\"p-text-input__action\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n aria-controls={inputId}\n >\n {showPassword ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n )}\n\n {/* Right adornment — decorative, hidden from assistive tech */}\n {hasRightAdornment && (\n <span aria-hidden=\"true\" className=\"p-text-input__adornment\">\n {rightAdornment}\n </span>\n )}\n </div>\n\n {/* Error message — announced immediately via role=\"alert\" */}\n {isError && errorMessage && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"p-text-input__message p-text-input__message--error\"\n >\n {errorMessage}\n </p>\n )}\n\n {/* Helper text — visible only when there is no error */}\n {!isError && helperText && (\n <p\n id={helperId}\n className=\"p-text-input__message p-text-input__message--helper\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nPTextInput.displayName = 'PTextInput';\n","import { forwardRef, type TextareaHTMLAttributes, useId } from 'react';\nimport './PTextArea.css';\nimport cn from '../../utils/cn';\n\nexport type PTextAreaRef = HTMLTextAreaElement;\n\nexport type PTextAreaProps = {\n /**\n * Applied to the root wrapper element.\n * Override design tokens via CSS custom properties, e.g.:\n * `[--p-textarea-ring:var(--p-color-info)] [--p-textarea-bg:var(--p-color-info-surface)]`\n */\n className?: string;\n /** Applied to the inner `<textarea>` element for layout / spacing overrides. */\n textareaClassName?: string;\n /** Visible label — doubles as the floating label and the placeholder. */\n label: string;\n /** Shown below the field when there is no error. */\n helperText?: string;\n isError?: boolean;\n /** Shown below the field when `isError` is true. Announced immediately via `role=\"alert\"`. */\n errorMessage?: string;\n} & Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'className' | 'placeholder' | 'aria-label' | 'aria-describedby'\n>;\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const PTextArea = forwardRef<PTextAreaRef, PTextAreaProps>(\n (\n {\n className,\n textareaClassName,\n label,\n helperText,\n id,\n isError = false,\n errorMessage,\n disabled,\n readOnly,\n rows = 4,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const textareaId = id ?? generatedId;\n const errorId = `${textareaId}-error`;\n const helperId = `${textareaId}-helper`;\n\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <div className={cn('p-text-area', className)} style={style}>\n <textarea\n {...props}\n id={textareaId}\n ref={ref}\n rows={rows}\n disabled={disabled}\n readOnly={readOnly}\n // Empty string required for the CSS peer-not-placeholder-shown trick.\n placeholder=\" \"\n // Accessibility\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={props.required}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={cn(\n 'p-text-area__control',\n isError && 'p-text-area__control--error',\n textareaClassName,\n )}\n />\n\n {/*\n * Floating label — shown above the value when focused or filled.\n * aria-hidden: the <label> below already provides the accessible name.\n */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-text-area__label p-text-area__floating-label',\n isError && 'p-text-area__label--error',\n )}\n >\n {label}\n </span>\n\n {/*\n * Placeholder label — sits near the top of the field when empty and unfocused.\n * pointer-events-none lets clicks fall through to the textarea beneath;\n * htmlFor still wires up the accessible name correctly.\n */}\n <label\n htmlFor={textareaId}\n className=\"p-text-area__label p-text-area__placeholder-label\"\n >\n {label}\n </label>\n\n {/* Error message — announced immediately via role=\"alert\" */}\n {isError && errorMessage && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"p-text-area__message p-text-area__message--error\"\n >\n {errorMessage}\n </p>\n )}\n\n {/* Helper text — visible only when there is no error */}\n {!isError && helperText && (\n <p\n id={helperId}\n className=\"p-text-area__message p-text-area__message--helper\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nPTextArea.displayName = 'PTextArea';\n"],"names":["Row","children","gap","alignItems","justifyContent","className","jsx","cn","Stack","PBadge","forwardRef","Element","variant","size","appearance","isPinging","leftIcon","rightIcon","props","ref","jsxs","PButton","fullWidth","isActive","isLoading","isUnavailable","buttonClassName","content","Fragment","anchorDisabled","onClick","anchorProps","handleClick","event","type","buttonDisabled","buttonProps","r","f","n","clsx","falsyToString","value","cx","cva","base","config","variants","defaultVariants","getVariantClassNames","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","key","getCompoundVariantClassNames","param1","cvClass","cvClassName","compoundVariantOptions","fontVariantsMap","PTypographyVariants","PTypography","hasRenderableNode","node","renderMetaNode","getCardSizeValue","PCard","prefix","eyebrow","title","description","media","actions","density","width","minWidth","height","minHeight","style","isInteractive","cardClassName","cardStyle","getSizeValue","getColumnConfig","columns","PCardGrid","minCardWidth","align","columnConfig","gridStyle","ChevronDownIcon","CheckIcon","XIcon","normalizeText","filterOptions","options","query","normalizedQuery","option","searchableText","getFirstEnabledIndex","getSelectedIndex","selectedValue","selectedIndex","getNextEnabledIndex","activeIndex","direction","nextIndex","attempt","_a","assignRef","PCombobox","label","defaultValue","selectedOptionProp","onValueChange","queryProp","defaultQuery","onQueryChange","filterMode","isLoadingMore","hasMore","onLoadMore","placeholder","searchPlaceholder","emptyText","loadingText","loadingMoreText","loadMoreText","helperText","isError","errorMessage","name","disabled","readOnly","required","clearable","inputClassName","id","generatedId","useId","rootId","labelId","inputId","listboxId","helperId","errorId","rootRef","useRef","inputRef","modalInputRef","hiddenInputRef","activeOptionRef","panelRef","isControlled","isQueryControlled","internalValue","setInternalValue","useState","selectedOption","internalQuery","setInternalQuery","isOpen","setIsOpen","isModalViewport","setIsModalViewport","filteredOptions","useMemo","setActiveIndex","activeOption","activeOptionId","modalTitleId","messageId","hasSelection","canClear","inputValue","showInitialLoading","showFooterLoading","showLoadMore","useEffect","currentIndex","matcher","mediaQuery","syncModalViewport","_b","setRootRef","setSearchQuery","nextQuery","source","requestLoadMore","scrollHeight","clientHeight","commitValue","nextOption","nextValue","openCombobox","nextOptions","closeCombobox","handleInputChange","handleInputKeyDown","handleOptionPointerDown","handleClear","handlePanelScroll","panel","handleBlur","groups","accumulator","group","existingGroup","item","optionIndex","isSelected","dayFormatter","toLocalDate","parts","year","month","day","date","toIsoDate","startOfMonth","endOfMonth","addMonths","months","addMonthsClamped","monthStart","lastDay","addDays","days","isSameDay","a","b","getToday","today","getCalendarDays","monthDate","weekStartsOn","offset","gridStart","_","index","resolvePresetDate","preset","getMonthLabel","locale","getMonthOptions","getDateLabel","getDayLabel","getWeekdayLabels","baseSunday","isBeforeDate","minDate","isAfterDate","maxDate","isSameMonth","isMonthDisabled","monthEnd","clampVisibleMonth","getFocusableDateInMonth","preferredDate","nextDate","getYearOptions","visibleMonth","visibleYear","defaultStartYear","defaultEndYear","startYear","endYear","firstYear","lastYear","PDatePicker","presets","customLabel","showCustom","presetColumns","min","max","panelId","selectedDate","setVisibleMonth","focusedDate","setFocusedDate","calendarTriggerRef","dayRefs","shouldFocusCalendarDateRef","calendarDays","weekdayLabels","monthOptions","yearOptions","hasPresets","shouldRenderCustom","presetColumnsStyle","displayValue","selectedMatchesPreset","isCustomActive","previousMonth","nextMonth","isPreviousMonthDisabled","isNextMonthDisabled","setDateValue","openCalendar","trigger","nextFocusedDate","closeCalendar","restoreFocus","updateVisibleMonth","clampedMonth","handleMonthChange","handleYearChange","nextYear","handlePresetClick","presetDate","handleDayClick","focusCalendarDate","handleDayKeyDown","weekOffset","CalendarIcon","ChevronLeftIcon","ChevronRightIcon","weekday","isoDate","isOutsideMonth","isToday","isDisabled","PDatePickerPresets","isInRange","startDate","endDate","normalizeRange","resolvePresetRange","getRangeDates","isSameRange","getRangeLabel","PDateRangePicker","nameStart","nameEnd","hasCompleteRange","setRangeValue","range","nextStartDate","nextEndDate","normalizedRange","normalizedDates","presetRange","isRangeStart","isRangeEnd","isRangeMiddle","PDateRangePickerPresets","weekStart","start","end","lastMonth","PHighlight","color","textColor","highlightStyle","PHorizontalSlider","ariaLabel","snap","scrollerClassName","listClassName","itemClassName","sliderStyle","child","getSelectValue","PSelect","selectClassName","hideLabel","onChange","selectId","hasValue","describedBy","groupedOptions","handleChange","clampPage","page","pageCount","getRange","getPaginationItems","siblingCount","boundaryCount","normalizedPageCount","normalizedPage","normalizedSiblingCount","normalizedBoundaryCount","totalVisible","edgeWindowCount","startPages","endPages","startWindowEnd","endWindowStart","middleStart","middleEnd","getDefaultSummary","totalItems","pageSize","itemLabel","PaginationButton","PPagination","pageSizeOptions","hasPreviousPage","hasNextPage","showRowsPerPage","onPageChange","onPageSizeChange","summary","currentPage","canRequestPage","canGoPrevious","canGoNext","pageItems","shouldShowRowsPerPage","summaryText","handlePageChange","nextPage","clampedNextPage","nextPageSize","getColumnLabel","column","getCellContent","row","rowIndex","getNextSortDirection","hasClosest","target","hasContains","isInteractiveTarget","container","interactiveElement","PTableComponent","rows","caption","captionHidden","stickyHeader","stickyFirstColumn","loadingLabel","emptyState","errorState","getRowId","getRowTone","onRowClick","renderRowActions","onSortChange","tableClassName","hasRows","hasActions","activeState","visibleMobileColumns","columnCount","handleRowClick","handleRowKeyDown","nextSortDirection","ariaSort","rowId","tone","rowContent","primaryColumn","detailColumns","PTable","PSectionHeader","EyeIcon","EyeOffIcon","PTextInput","rightAdornment","isPassword","hasRightAdornment","showPassword","setShowPassword","inputType","v","PTextArea","textareaClassName","textareaId"],"mappings":"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","x_google_ignoreList":[4,5]}
1
+ {"version":3,"file":"index.es.js","sources":["../src/components/PContainers/Row/Row.tsx","../src/components/PContainers/Stack/Stack.tsx","../src/components/PBadge/PBadge.tsx","../src/components/PButton/PButton.tsx","../node_modules/class-variance-authority/node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/components/PTypography/PTypography.constants.ts","../src/components/PTypography/PTypography.tsx","../src/components/PCard/PCard.tsx","../src/components/PCardGrid/PCardGrid.tsx","../src/components/PCombobox/PCombobox.tsx","../src/components/PDatePicker/PDatePicker.tsx","../src/components/PDateRangePicker/PDateRangePicker.tsx","../src/components/PHighlight/PHighlight.tsx","../src/components/PHorizontalSlider/PHorizontalSlider.tsx","../src/components/PSelect/PSelect.tsx","../src/components/PPagination/PPagination.tsx","../src/components/PTable/PTable.tsx","../src/components/PSectionHeader/PSectionHeader.tsx","../src/components/PTextInput/PTextInput.tsx","../src/components/PTextArea/PTextArea.tsx"],"sourcesContent":["import { CSSProperties, FC, ReactNode } from 'react';\nimport cn from '../../../utils/cn';\nimport './Row.css';\n\nexport type RowProps = {\n children: ReactNode;\n gap?: CSSProperties['gap'];\n alignItems?: CSSProperties['alignItems'];\n justifyContent?: CSSProperties['justifyContent'];\n className?: string;\n};\n\nconst Row: FC<RowProps> = ({\n children,\n gap = undefined,\n alignItems = undefined,\n justifyContent = undefined,\n className = '',\n}) => {\n return (\n <div\n className={cn('p-row', className)}\n style={{\n gap,\n alignItems,\n justifyContent,\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default Row;\n","import { CSSProperties, FC, ReactNode } from 'react';\nimport cn from '../../../utils/cn';\nimport './Stack.css';\n\nexport type StackProps = {\n children: ReactNode;\n gap?: CSSProperties['gap'];\n alignItems?: CSSProperties['alignItems'];\n justifyContent?: CSSProperties['justifyContent'];\n className?: string;\n};\n\nconst Stack: FC<StackProps> = ({\n children,\n gap = undefined,\n alignItems = undefined,\n justifyContent = undefined,\n className = '',\n}) => {\n return (\n <div\n className={cn('p-stack', className)}\n style={{\n gap,\n alignItems,\n justifyContent,\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default Stack;\n","import {\n forwardRef,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PBadge.css';\n\nexport type PBadgeVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info' | 'neutral';\nexport type PBadgeSize = 'sm' | 'md';\nexport type PBadgeAppearance = 'subtle' | 'solid' | 'outline';\nexport type PBadgeRef = HTMLElement;\n\nexport type PBadgeProps = {\n as?: ElementType;\n variant?: PBadgeVariant;\n size?: PBadgeSize;\n appearance?: PBadgeAppearance;\n isPinging?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n className?: string;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'color'>;\n\nexport const PBadge = forwardRef<PBadgeRef, PBadgeProps>(\n (\n {\n as: Element = 'span',\n variant = 'neutral',\n size = 'sm',\n appearance = 'subtle',\n isPinging = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref,\n ) => (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-badge',\n `p-badge--${variant}`,\n `p-badge--${size}`,\n `p-badge--${appearance}`,\n isPinging && 'p-badge--pinging',\n className,\n )}\n >\n {leftIcon && (\n <span className=\"p-badge__icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n )}\n <span className=\"p-badge__label\">{children}</span>\n {rightIcon && (\n <span className=\"p-badge__icon\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n )}\n </Element>\n ),\n);\n\nPBadge.displayName = 'PBadge';\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type MouseEvent,\n type Ref,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PButton.css';\n\nexport type PButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost';\nexport type PButtonSize = 'sm' | 'md' | 'lg';\nexport type PButtonRef = HTMLButtonElement | HTMLAnchorElement;\n\ntype PButtonBaseProps = {\n variant?: PButtonVariant;\n size?: PButtonSize;\n fullWidth?: boolean;\n isActive?: boolean;\n isLoading?: boolean;\n isPinging?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\ntype PButtonAsButtonProps = PButtonBaseProps &\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'children'> & {\n href?: undefined;\n };\n\ntype PButtonAsAnchorProps = PButtonBaseProps &\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'children'> & {\n href: string;\n disabled?: boolean;\n type?: never;\n };\n\nexport type PButtonProps = PButtonAsButtonProps | PButtonAsAnchorProps;\ntype PButtonAnchorElementProps = Omit<PButtonAsAnchorProps, keyof PButtonBaseProps>;\ntype PButtonButtonElementProps = Omit<PButtonAsButtonProps, keyof PButtonBaseProps>;\n\nexport const PButton = forwardRef<PButtonRef, PButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n fullWidth = false,\n isActive = false,\n isLoading = false,\n isPinging = false,\n leftIcon,\n rightIcon,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const isUnavailable = Boolean(('disabled' in props && props.disabled) || isLoading);\n const buttonClassName = cn(\n 'p-button',\n `p-button--${variant}`,\n `p-button--${size}`,\n fullWidth && 'p-button--full-width',\n isActive && 'p-button--active',\n isPinging && 'p-button--pinging',\n className,\n );\n const content = (\n <>\n {isLoading ? (\n <span className=\"p-button__spinner\" aria-hidden=\"true\" />\n ) : (\n leftIcon && (\n <span className=\"p-button__icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n )\n )}\n <span className=\"p-button__label\">{children}</span>\n {!isLoading && rightIcon && (\n <span className=\"p-button__icon\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n )}\n </>\n );\n\n if ('href' in props && typeof props.href === 'string') {\n const { disabled: anchorDisabled, onClick, ...anchorProps } =\n props as PButtonAnchorElementProps;\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (isUnavailable) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <a\n {...anchorProps}\n ref={ref as Ref<HTMLAnchorElement>}\n className={buttonClassName}\n aria-disabled={isUnavailable || undefined}\n aria-busy={isLoading || undefined}\n data-active={isActive || undefined}\n data-disabled={anchorDisabled || undefined}\n tabIndex={isUnavailable ? -1 : anchorProps.tabIndex}\n onClick={handleClick}\n >\n {content}\n </a>\n );\n }\n\n const { type = 'button', disabled: buttonDisabled, ...buttonProps } =\n props as PButtonButtonElementProps;\n\n return (\n <button\n {...buttonProps}\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n disabled={Boolean(buttonDisabled || isLoading)}\n className={buttonClassName}\n aria-busy={isLoading || undefined}\n data-active={isActive || undefined}\n >\n {content}\n </button>\n );\n },\n);\n\nPButton.displayName = 'PButton';\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? \"\".concat(value) : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>{\n return (props)=>{\n var ref;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants , defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (ref = config.compoundVariants) === null || ref === void 0 ? void 0 : ref.reduce((acc, param1)=>{\n let { class: cvClass , className: cvClassName , ...compoundVariantOptions } = param1;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n};\n\n\n//# sourceMappingURL=index.mjs.map","import { cva } from 'class-variance-authority';\n\ntype FontVariants =\n | 'serif'\n | 'body'\n | 'body-medium'\n | 'body-wide'\n | 'heading'\n | 'heading-lg'\n | 'heading-xl';\n\nconst fontVariantsMap = {\n serif: 'p-typography--serif',\n body: 'p-typography--body',\n 'body-medium': 'p-typography--body-medium',\n 'body-wide': 'p-typography--body-wide',\n heading: 'p-typography--heading',\n 'heading-lg': 'p-typography--heading-lg',\n 'heading-xl': 'p-typography--heading-xl',\n} satisfies Record<FontVariants, string>;\n\nexport const PTypographyVariants = cva('p-typography', {\n variants: {\n variant: fontVariantsMap,\n },\n defaultVariants: {\n variant: 'body',\n },\n});\n","import { VariantProps } from 'class-variance-authority';\nimport { HTMLAttributes } from 'react';\nimport '../../index.css';\nimport cn from '../../utils/cn';\nimport './PTypography.css';\nimport { PTypographyVariants } from './PTypography.constants';\n\nexport interface PTypographyProps\n extends VariantProps<typeof PTypographyVariants>,\n HTMLAttributes<HTMLElement> {\n as?: React.ElementType;\n children: React.ReactNode;\n}\n\nexport default function PTypography({\n as: Element = 'p',\n children,\n className = '',\n variant,\n ...props\n}: PTypographyProps) {\n return (\n <Element\n className={cn(PTypographyVariants({ variant, className }))}\n {...props}\n >\n {children}\n </Element>\n );\n}\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport { PTypography } from '../PTypography';\nimport './PCard.css';\n\nexport type PCardDensity = 'compact' | 'default' | 'spacious';\nexport type PCardRef = HTMLElement;\n\ntype PCardBaseProps = {\n prefix?: ReactNode;\n eyebrow?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n media?: ReactNode;\n actions?: ReactNode;\n density?: PCardDensity;\n fullWidth?: boolean;\n width?: CSSProperties['width'];\n minWidth?: CSSProperties['minWidth'];\n height?: CSSProperties['height'];\n minHeight?: CSSProperties['minHeight'];\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n};\n\ntype PCardArticleProps = PCardBaseProps &\n Omit<HTMLAttributes<HTMLElement>, 'className' | 'children' | 'style' | 'title'> & {\n href?: undefined;\n };\n\ntype PCardAnchorProps = PCardBaseProps &\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'children' | 'style' | 'title'> & {\n href: string;\n };\n\nexport type PCardProps = PCardArticleProps | PCardAnchorProps;\ntype PCardAnchorElementProps = Omit<PCardAnchorProps, keyof PCardBaseProps>;\ntype PCardArticleElementProps = Omit<PCardArticleProps, keyof PCardBaseProps>;\ntype PCardStyle = CSSProperties & {\n '--p-card-width'?: CSSProperties['width'];\n '--p-card-min-width'?: CSSProperties['minWidth'];\n '--p-card-height'?: CSSProperties['height'];\n '--p-card-min-height'?: CSSProperties['minHeight'];\n};\n\nfunction hasRenderableNode(node: ReactNode) {\n return node !== null && node !== undefined && node !== false && node !== '';\n}\n\nfunction renderMetaNode(node: ReactNode, className: string) {\n if (!hasRenderableNode(node)) {\n return null;\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return (\n <PTypography className={className} variant=\"body-wide\">\n {node}\n </PTypography>\n );\n }\n\n return <span className={cn(className, 'p-card__meta-custom')}>{node}</span>;\n}\n\nfunction getCardSizeValue(value: CSSProperties['width']) {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const PCard = forwardRef<PCardRef, PCardProps>(\n (\n {\n prefix,\n eyebrow,\n title,\n description,\n media,\n actions,\n density = 'default',\n fullWidth = false,\n width,\n minWidth,\n height,\n minHeight,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isInteractive = 'href' in props && typeof props.href === 'string';\n const cardClassName = cn(\n 'p-card',\n density !== 'default' && `p-card--${density}`,\n fullWidth && 'p-card--full-width',\n width !== undefined && 'p-card--custom-width',\n minWidth !== undefined && 'p-card--custom-min-width',\n height !== undefined && 'p-card--custom-height',\n minHeight !== undefined && 'p-card--custom-min-height',\n isInteractive && 'p-card--interactive',\n className,\n );\n const cardStyle: PCardStyle = {\n ...style,\n ...(width !== undefined ? { '--p-card-width': getCardSizeValue(width) } : {}),\n ...(minWidth !== undefined ? { '--p-card-min-width': getCardSizeValue(minWidth) } : {}),\n ...(height !== undefined ? { '--p-card-height': getCardSizeValue(height) } : {}),\n ...(minHeight !== undefined ? { '--p-card-min-height': getCardSizeValue(minHeight) } : {}),\n };\n\n const content = (\n <>\n {hasRenderableNode(media) && <div className=\"p-card__media\">{media}</div>}\n {(hasRenderableNode(prefix) || hasRenderableNode(eyebrow)) && (\n <div className=\"p-card__meta\">\n {renderMetaNode(prefix, 'p-card__prefix')}\n {renderMetaNode(eyebrow, 'p-card__eyebrow')}\n </div>\n )}\n <div className=\"p-card__body\">\n <PTypography as=\"h3\" className=\"p-card__title\" variant=\"heading\">\n {isInteractive ? (\n <a {...(props as PCardAnchorElementProps)} className=\"p-card__link\">\n {title}\n </a>\n ) : (\n title\n )}\n </PTypography>\n {hasRenderableNode(description) ? (\n <PTypography className=\"p-card__description\" variant=\"body\">\n {description}\n </PTypography>\n ) : null}\n </div>\n {hasRenderableNode(children) && <div className=\"p-card__content\">{children}</div>}\n {hasRenderableNode(actions) && <div className=\"p-card__actions\">{actions}</div>}\n </>\n );\n\n if (isInteractive) {\n return (\n <article ref={ref as React.Ref<HTMLElement>} className={cardClassName} style={cardStyle}>\n {content}\n </article>\n );\n }\n\n return (\n <article\n {...(props as PCardArticleElementProps)}\n ref={ref as React.Ref<HTMLElement>}\n className={cardClassName}\n style={cardStyle}\n >\n {content}\n </article>\n );\n },\n);\n\nPCard.displayName = 'PCard';\n","import {\n forwardRef,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PCardGrid.css';\n\nexport type PCardGridRef = HTMLElement;\nexport type PCardGridGap = 'none' | 'sm' | 'md' | 'lg';\nexport type PCardGridColumns = 1 | 2 | 3 | 4;\n\nexport type PCardGridResponsiveColumns = {\n mobile?: PCardGridColumns;\n tablet?: PCardGridColumns;\n desktop?: PCardGridColumns;\n};\n\nexport type PCardGridProps = {\n as?: ElementType;\n columns?: PCardGridColumns | PCardGridResponsiveColumns;\n minCardWidth?: CSSProperties['width'];\n gap?: PCardGridGap;\n align?: 'stretch' | 'start';\n className?: string;\n children: ReactNode;\n} & Omit<HTMLAttributes<HTMLElement>, 'className' | 'children'>;\n\ntype PCardGridStyle = CSSProperties & {\n '--p-card-grid-mobile-columns'?: number;\n '--p-card-grid-tablet-columns'?: number;\n '--p-card-grid-desktop-columns'?: number;\n '--p-card-grid-min-card-width'?: CSSProperties['width'];\n};\n\nfunction getSizeValue(value: CSSProperties['width']) {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nfunction getColumnConfig(columns: PCardGridProps['columns']) {\n if (!columns) {\n return {\n mobile: 1,\n tablet: 2,\n desktop: 2,\n };\n }\n\n if (typeof columns === 'number') {\n return {\n mobile: 1,\n tablet: Math.min(columns, 2) as PCardGridColumns,\n desktop: columns,\n };\n }\n\n return {\n mobile: columns.mobile ?? 1,\n tablet: columns.tablet ?? columns.mobile ?? 2,\n desktop: columns.desktop ?? columns.tablet ?? columns.mobile ?? 2,\n };\n}\n\nexport const PCardGrid = forwardRef<PCardGridRef, PCardGridProps>(\n (\n {\n as: Element = 'div',\n columns,\n minCardWidth,\n gap = 'none',\n align = 'stretch',\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const columnConfig = getColumnConfig(columns);\n const gridStyle: PCardGridStyle = {\n ...style,\n '--p-card-grid-mobile-columns': columnConfig.mobile,\n '--p-card-grid-tablet-columns': columnConfig.tablet,\n '--p-card-grid-desktop-columns': columnConfig.desktop,\n ...(minCardWidth !== undefined\n ? { '--p-card-grid-min-card-width': getSizeValue(minCardWidth) }\n : {}),\n };\n\n return (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-card-grid',\n `p-card-grid--gap-${gap}`,\n align === 'start' && 'p-card-grid--align-start',\n minCardWidth !== undefined && 'p-card-grid--auto-fit',\n className,\n )}\n style={gridStyle}\n >\n {children}\n </Element>\n );\n },\n);\n\nPCardGrid.displayName = 'PCardGrid';\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n type UIEvent,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PCombobox.css';\n\nexport type PComboboxRef = HTMLDivElement;\nexport type PComboboxFilterMode = 'local' | 'none';\nexport type PComboboxQueryChangeSource = 'input' | 'open' | 'clear' | 'selection' | 'reset';\n\nexport type PComboboxOption = {\n value: string;\n label: string;\n description?: string;\n group?: string;\n meta?: ReactNode;\n keywords?: string[];\n disabled?: boolean;\n};\n\nexport type PComboboxProps = {\n label: string;\n options: PComboboxOption[];\n value?: string;\n defaultValue?: string;\n selectedOption?: PComboboxOption | null;\n onValueChange?: (value: string, option: PComboboxOption | null) => void;\n query?: string;\n defaultQuery?: string;\n onQueryChange?: (query: string, details: { source: PComboboxQueryChangeSource }) => void;\n filterMode?: PComboboxFilterMode;\n isLoading?: boolean;\n isLoadingMore?: boolean;\n hasMore?: boolean;\n onLoadMore?: (details: { query: string; optionCount: number }) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n loadingText?: string;\n loadingMoreText?: string;\n loadMoreText?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n name?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n clearable?: boolean;\n className?: string;\n inputClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\ntype ContainsElement = {\n contains: (target: EventTarget | null) => boolean;\n};\n\ntype FocusableElement = {\n focus: () => void;\n};\n\ntype ScrollableElement = {\n scrollIntoView: (options?: { block?: 'nearest' }) => void;\n};\n\ntype ScrollMetricsElement = {\n scrollTop: number;\n clientHeight: number;\n scrollHeight: number;\n};\n\ntype ValidatableElement = {\n setCustomValidity: (error: string) => void;\n};\n\ntype ViewportMatcher = {\n matchMedia?: (query: string) => {\n matches: boolean;\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n };\n};\n\nfunction ChevronDownIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 8 5 5 5-5\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m4 10 4 4 8-8\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 5 10 10\" />\n <path d=\"m15 5-10 10\" />\n </svg>\n );\n}\n\nfunction normalizeText(value: string) {\n return value.trim().toLocaleLowerCase();\n}\n\nfunction filterOptions(options: PComboboxOption[], query: string) {\n const normalizedQuery = normalizeText(query);\n\n if (!normalizedQuery) {\n return options;\n }\n\n return options.filter((option) => {\n const searchableText = [\n option.label,\n option.value,\n option.description,\n option.group,\n ...(option.keywords ?? []),\n ]\n .filter(Boolean)\n .join(' ');\n\n return normalizeText(searchableText).includes(normalizedQuery);\n });\n}\n\nfunction getFirstEnabledIndex(options: PComboboxOption[]) {\n return options.findIndex((option) => !option.disabled);\n}\n\nfunction getSelectedIndex(options: PComboboxOption[], selectedValue: string | undefined) {\n const selectedIndex = options.findIndex((option) => option.value === selectedValue && !option.disabled);\n\n return selectedIndex >= 0 ? selectedIndex : getFirstEnabledIndex(options);\n}\n\nfunction getNextEnabledIndex(options: PComboboxOption[], activeIndex: number, direction: 1 | -1) {\n if (!options.length) {\n return -1;\n }\n\n let nextIndex = activeIndex;\n\n for (let attempt = 0; attempt < options.length; attempt += 1) {\n nextIndex = (nextIndex + direction + options.length) % options.length;\n\n if (!options[nextIndex]?.disabled) {\n return nextIndex;\n }\n }\n\n return -1;\n}\n\nfunction assignRef(ref: ForwardedRef<PComboboxRef>, node: PComboboxRef | null) {\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n\n if (ref) {\n ref.current = node;\n }\n}\n\nexport const PCombobox = forwardRef<PComboboxRef, PComboboxProps>(\n (\n {\n label,\n options,\n value,\n defaultValue,\n selectedOption: selectedOptionProp,\n onValueChange,\n query: queryProp,\n defaultQuery,\n onQueryChange,\n filterMode = 'local',\n isLoading = false,\n isLoadingMore = false,\n hasMore = false,\n onLoadMore,\n placeholder = 'Select an option',\n searchPlaceholder = 'Search options',\n emptyText = 'No options found.',\n loadingText = 'Loading options...',\n loadingMoreText = 'Loading more options...',\n loadMoreText = 'Load more options',\n helperText,\n isError = false,\n errorMessage,\n name,\n disabled = false,\n readOnly = false,\n required = false,\n clearable = true,\n className,\n inputClassName,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const inputId = `${rootId}-input`;\n const listboxId = `${rootId}-listbox`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const rootRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<(HTMLInputElement & FocusableElement) | null>(null);\n const modalInputRef = useRef<(HTMLInputElement & FocusableElement) | null>(null);\n const hiddenInputRef = useRef<(HTMLInputElement & ValidatableElement) | null>(null);\n const activeOptionRef = useRef<ScrollableElement | null>(null);\n const panelRef = useRef<ScrollMetricsElement | null>(null);\n const isControlled = value !== undefined;\n const isQueryControlled = queryProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const selectedValue = isControlled ? value : internalValue;\n const selectedOption =\n selectedOptionProp?.value === selectedValue\n ? selectedOptionProp\n : options.find((option) => option.value === selectedValue) ?? null;\n const [internalQuery, setInternalQuery] = useState(defaultQuery ?? selectedOption?.label ?? '');\n const query = isQueryControlled ? queryProp : internalQuery;\n const [isOpen, setIsOpen] = useState(false);\n const [isModalViewport, setIsModalViewport] = useState(false);\n const filteredOptions = useMemo(\n () => (filterMode === 'local' ? filterOptions(options, query) : options),\n [filterMode, options, query],\n );\n const [activeIndex, setActiveIndex] = useState(() => getSelectedIndex(options, selectedValue));\n const activeOption = isOpen ? filteredOptions[activeIndex] : undefined;\n const activeOptionId = activeOption ? `${listboxId}-option-${activeIndex}` : undefined;\n const modalTitleId = `${rootId}-modal-title`;\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const hasSelection = Boolean(selectedOption);\n const canClear = clearable && hasSelection && !disabled && !readOnly;\n const inputValue = isOpen ? query : selectedOption?.label ?? query;\n const showInitialLoading = isLoading && filteredOptions.length === 0;\n const showFooterLoading = isLoadingMore || (isLoading && filteredOptions.length > 0);\n const showLoadMore = Boolean(hasMore && onLoadMore && !isLoading && !isLoadingMore);\n\n useEffect(() => {\n if (!isOpen && !isQueryControlled) {\n setInternalQuery(selectedOption?.label ?? '');\n }\n }, [isOpen, isQueryControlled, selectedOption]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n setActiveIndex((currentIndex) => {\n if (filteredOptions[currentIndex] && !filteredOptions[currentIndex].disabled) {\n return currentIndex;\n }\n\n return getSelectedIndex(filteredOptions, selectedValue);\n });\n }, [filteredOptions, isOpen, selectedValue]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n activeOptionRef.current?.scrollIntoView({ block: 'nearest' });\n }, [activeIndex, isOpen]);\n\n useEffect(() => {\n const matcher = globalThis as unknown as ViewportMatcher;\n const mediaQuery = matcher.matchMedia?.('(max-width: 64rem)');\n\n if (!mediaQuery) {\n return;\n }\n\n const syncModalViewport = () => setIsModalViewport(mediaQuery.matches);\n syncModalViewport();\n mediaQuery.addEventListener?.('change', syncModalViewport);\n\n return () => mediaQuery.removeEventListener?.('change', syncModalViewport);\n }, []);\n\n useEffect(() => {\n if (!isOpen || !isModalViewport) {\n return;\n }\n\n modalInputRef.current?.focus();\n }, [isModalViewport, isOpen]);\n\n useEffect(() => {\n if (!hiddenInputRef.current) {\n return;\n }\n\n hiddenInputRef.current.setCustomValidity(required && !selectedValue ? 'Select an option.' : '');\n }, [required, selectedValue]);\n\n const setRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n assignRef(ref, node);\n };\n\n const setSearchQuery = (nextQuery: string, source: PComboboxQueryChangeSource) => {\n if (!isQueryControlled) {\n setInternalQuery(nextQuery);\n }\n\n onQueryChange?.(nextQuery, { source });\n };\n\n const requestLoadMore = () => {\n if (!hasMore || !onLoadMore || isLoading || isLoadingMore) {\n return;\n }\n\n onLoadMore({ query, optionCount: filteredOptions.length });\n };\n\n useEffect(() => {\n if (!isOpen || !panelRef.current) {\n return;\n }\n\n const { scrollHeight, clientHeight } = panelRef.current;\n\n if (scrollHeight <= clientHeight + 48) {\n requestLoadMore();\n }\n });\n\n const commitValue = (nextOption: PComboboxOption | null) => {\n const nextValue = nextOption?.value ?? '';\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n setSearchQuery(nextOption?.label ?? '', nextOption ? 'selection' : 'clear');\n onValueChange?.(nextValue, nextOption);\n };\n\n const openCombobox = (nextQuery = query) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextOptions = filterMode === 'local' ? filterOptions(options, nextQuery) : options;\n setSearchQuery(nextQuery, 'open');\n setActiveIndex(getSelectedIndex(nextOptions, selectedValue));\n setIsOpen(true);\n };\n\n const closeCombobox = () => {\n setIsOpen(false);\n setSearchQuery(selectedOption?.label ?? '', 'reset');\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const nextQuery = (event.currentTarget as unknown as { value: string }).value;\n const nextOptions = filterMode === 'local' ? filterOptions(options, nextQuery) : options;\n\n setSearchQuery(nextQuery, 'input');\n setActiveIndex(getFirstEnabledIndex(nextOptions));\n setIsOpen(true);\n };\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n\n if (!isOpen) {\n openCombobox('');\n return;\n }\n\n setActiveIndex((currentIndex) => getNextEnabledIndex(filteredOptions, currentIndex, 1));\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n\n if (!isOpen) {\n openCombobox('');\n return;\n }\n\n setActiveIndex((currentIndex) => getNextEnabledIndex(filteredOptions, currentIndex, -1));\n return;\n }\n\n if (event.key === 'Enter') {\n if (!isOpen) {\n openCombobox(query);\n return;\n }\n\n if (activeOption && !activeOption.disabled) {\n event.preventDefault();\n commitValue(activeOption);\n setIsOpen(false);\n }\n\n return;\n }\n\n if (event.key === 'Escape' && isOpen) {\n event.preventDefault();\n closeCombobox();\n return;\n }\n\n if (event.key === 'Tab') {\n closeCombobox();\n }\n };\n\n const handleOptionPointerDown = (event: MouseEvent<HTMLDivElement>, option: PComboboxOption) => {\n event.preventDefault();\n\n if (option.disabled) {\n return;\n }\n\n commitValue(option);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n commitValue(null);\n setIsOpen(false);\n inputRef.current?.focus();\n };\n\n const handlePanelScroll = (event: UIEvent<HTMLDivElement>) => {\n const panel = event.currentTarget as unknown as ScrollMetricsElement;\n const distanceToBottom = panel.scrollHeight - panel.scrollTop - panel.clientHeight;\n\n if (distanceToBottom <= 48) {\n requestLoadMore();\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!isOpen) {\n return;\n }\n\n const currentTarget = event.currentTarget as unknown as ContainsElement;\n\n if (!currentTarget.contains(event.relatedTarget)) {\n closeCombobox();\n }\n };\n\n const groups = filteredOptions.reduce<Array<{ group: string | null; options: PComboboxOption[] }>>(\n (accumulator, option) => {\n const group = option.group ?? null;\n const existingGroup = accumulator.find((item) => item.group === group);\n\n if (existingGroup) {\n existingGroup.options.push(option);\n return accumulator;\n }\n\n accumulator.push({ group, options: [option] });\n return accumulator;\n },\n [],\n );\n\n return (\n <div\n {...props}\n ref={setRootRef}\n id={rootId}\n style={style}\n onBlur={handleBlur}\n className={cn(\n 'p-combobox',\n isOpen && 'p-combobox--open',\n isError && 'p-combobox--error',\n disabled && 'p-combobox--disabled',\n readOnly && 'p-combobox--readonly',\n className,\n )}\n >\n <div className=\"p-combobox__field\">\n <input\n ref={inputRef}\n id={inputId}\n role=\"combobox\"\n type=\"text\"\n value={inputValue}\n placeholder={isOpen ? searchPlaceholder : ' '}\n disabled={disabled}\n readOnly={readOnly}\n required={false}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-describedby={messageId}\n aria-activedescendant={activeOptionId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={isError || undefined}\n aria-labelledby={labelId}\n autoComplete=\"off\"\n className={cn('p-combobox__input', (canClear || hasSelection) && 'p-combobox__input--adorned', inputClassName)}\n onChange={handleInputChange}\n onClick={() => openCombobox('')}\n onKeyDown={handleInputKeyDown}\n />\n\n <label\n id={labelId}\n htmlFor={inputId}\n className={cn('p-combobox__label p-combobox__floating-label', isError && 'p-combobox__label--error')}\n >\n {label}\n </label>\n\n <span aria-hidden=\"true\" className=\"p-combobox__label p-combobox__placeholder-label\">\n {placeholder || label}\n </span>\n\n {canClear ? (\n <button\n type=\"button\"\n className=\"p-combobox__clear\"\n aria-label={`Clear ${label}`}\n onMouseDown={handleClear}\n >\n <XIcon />\n </button>\n ) : null}\n\n <span className=\"p-combobox__chevron\" aria-hidden=\"true\">\n <ChevronDownIcon />\n </span>\n\n {isOpen ? (\n <div\n className=\"p-combobox__panel\"\n role={isModalViewport ? 'dialog' : undefined}\n aria-modal={isModalViewport || undefined}\n aria-labelledby={isModalViewport ? modalTitleId : undefined}\n >\n <div className=\"p-combobox__modal-header\">\n <div id={modalTitleId} className=\"p-combobox__modal-title\">{label}</div>\n <button type=\"button\" className=\"p-combobox__modal-close\" aria-label={`Close ${label}`} onClick={closeCombobox}>\n <XIcon />\n </button>\n </div>\n <div className=\"p-combobox__modal-search\">\n <input\n ref={modalInputRef}\n role=\"combobox\"\n type=\"search\"\n value={query}\n placeholder={searchPlaceholder}\n aria-activedescendant={activeOptionId}\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={`Search ${label}`}\n autoComplete=\"off\"\n className=\"p-combobox__modal-input\"\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n\n <div\n id={listboxId}\n ref={(node) => {\n panelRef.current = node as unknown as ScrollMetricsElement | null;\n }}\n role=\"listbox\"\n aria-busy={isLoading || isLoadingMore || undefined}\n aria-labelledby={labelId}\n className=\"p-combobox__list\"\n onScroll={handlePanelScroll}\n >\n {showInitialLoading ? (\n <div className=\"p-combobox__status\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <span className=\"p-combobox__spinner\" aria-hidden=\"true\" />\n <span>{loadingText}</span>\n </div>\n ) : null}\n\n {groups.length ? (\n groups.map((group) => (\n <div key={group.group ?? 'ungrouped'} className=\"p-combobox__group\">\n {group.group ? <div className=\"p-combobox__group-label\">{group.group}</div> : null}\n {group.options.map((option) => {\n const optionIndex = filteredOptions.indexOf(option);\n const isActive = optionIndex === activeIndex;\n const isSelected = option.value === selectedValue;\n\n return (\n <div\n key={option.value}\n ref={\n isActive\n ? (node) => {\n activeOptionRef.current = node as unknown as ScrollableElement | null;\n }\n : undefined\n }\n id={`${listboxId}-option-${optionIndex}`}\n role=\"option\"\n aria-disabled={option.disabled || undefined}\n aria-selected={isSelected}\n className={cn(\n 'p-combobox__option',\n isActive && 'p-combobox__option--active',\n isSelected && 'p-combobox__option--selected',\n option.disabled && 'p-combobox__option--disabled',\n )}\n onMouseDown={(event) => handleOptionPointerDown(event, option)}\n >\n <span className=\"p-combobox__option-check\">\n {isSelected ? <CheckIcon /> : null}\n </span>\n <span className=\"p-combobox__option-content\">\n <span className=\"p-combobox__option-label\">{option.label}</span>\n {option.description ? (\n <span className=\"p-combobox__option-description\">{option.description}</span>\n ) : null}\n </span>\n {option.meta ? <span className=\"p-combobox__option-meta\">{option.meta}</span> : null}\n </div>\n );\n })}\n </div>\n ))\n ) : !showInitialLoading ? (\n <div className=\"p-combobox__empty\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n {emptyText}\n </div>\n ) : null}\n\n {showFooterLoading ? (\n <div className=\"p-combobox__status p-combobox__status--footer\" role=\"option\" aria-disabled=\"true\" aria-selected=\"false\">\n <span className=\"p-combobox__spinner\" aria-hidden=\"true\" />\n <span>{loadingMoreText}</span>\n </div>\n ) : null}\n </div>\n\n {showLoadMore ? (\n <div className=\"p-combobox__footer\">\n <button type=\"button\" className=\"p-combobox__load-more\" onMouseDown={(event) => event.preventDefault()} onClick={requestLoadMore}>\n {loadMoreText}\n </button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n\n <input\n ref={hiddenInputRef}\n type=\"text\"\n name={name}\n value={selectedValue ?? ''}\n required={required}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"p-combobox__hidden-input\"\n onChange={() => undefined}\n />\n\n {isOpen ? (\n <div className=\"p-combobox__backdrop\" aria-hidden=\"true\" onMouseDown={closeCombobox} />\n ) : null}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-combobox__message p-combobox__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-combobox__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPCombobox.displayName = 'PCombobox';\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport './PDatePicker.css';\n\nexport type PDatePickerRef = HTMLDivElement;\nexport type PDatePickerChangeSource = 'preset' | 'calendar';\nexport type PDatePickerPresetColumns = 2 | 3 | 4 | 'auto';\ntype FocusableElement = { focus: () => void };\n\nexport type PDatePickerPreset = {\n label: string;\n value: string | Date | (() => string | Date);\n};\n\nexport type PDatePickerProps = {\n label: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (\n value: string,\n details: { date: Date | null; source: PDatePickerChangeSource },\n ) => void;\n presets?: PDatePickerPreset[];\n customLabel?: string;\n showCustom?: boolean;\n presetColumns?: PDatePickerPresetColumns;\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n min?: string;\n max?: string;\n name?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n className?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\nconst dayFormatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n\nfunction toLocalDate(value: string | Date | null | undefined) {\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? null\n : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n }\n\n const parts = value.split('-').map(Number);\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [year, month, day] = parts;\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction toIsoDate(date: Date | null) {\n if (!date) {\n return '';\n }\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nfunction addMonths(date: Date, months: number) {\n return new Date(date.getFullYear(), date.getMonth() + months, 1);\n}\n\nfunction addMonthsClamped(date: Date, months: number) {\n const monthStart = addMonths(date, months);\n const lastDay = endOfMonth(monthStart).getDate();\n\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nfunction addDays(date: Date, days: number) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nfunction isSameDay(a: Date | null, b: Date | null) {\n return Boolean(a && b && toIsoDate(a) === toIsoDate(b));\n}\n\nfunction getToday() {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), today.getDate());\n}\n\nfunction getCalendarDays(monthDate: Date, weekStartsOn: number) {\n const monthStart = startOfMonth(monthDate);\n const offset = (monthStart.getDay() - weekStartsOn + 7) % 7;\n const gridStart = addDays(monthStart, -offset);\n\n return Array.from({ length: 42 }, (_, index) => addDays(gridStart, index));\n}\n\nfunction resolvePresetDate(preset: PDatePickerPreset) {\n const value = typeof preset.value === 'function' ? preset.value() : preset.value;\n return toLocalDate(value);\n}\n\nfunction getMonthLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(date);\n}\n\nfunction getMonthOptions(locale?: string) {\n return Array.from({ length: 12 }, (_, month) => ({\n label: new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(2024, month, 1)),\n value: month,\n }));\n}\n\nfunction getDateLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getDayLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getWeekdayLabels(weekStartsOn: number, locale?: string) {\n const baseSunday = new Date(2024, 0, 7);\n\n return Array.from({ length: 7 }, (_, index) => {\n const date = addDays(baseSunday, weekStartsOn + index);\n return dayFormatter.formatToParts(date).length\n ? new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(date)\n : '';\n });\n}\n\nfunction isBeforeDate(date: Date, minDate: Date | null) {\n return Boolean(minDate && date.getTime() < minDate.getTime());\n}\n\nfunction isAfterDate(date: Date, maxDate: Date | null) {\n return Boolean(maxDate && date.getTime() > maxDate.getTime());\n}\n\nfunction isSameMonth(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nfunction isMonthDisabled(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n\n return Boolean((minDate && monthEnd < minDate) || (maxDate && monthStart > maxDate));\n}\n\nfunction clampVisibleMonth(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n if (minDate && endOfMonth(monthDate) < minDate) {\n return startOfMonth(minDate);\n }\n\n if (maxDate && startOfMonth(monthDate) > maxDate) {\n return startOfMonth(maxDate);\n }\n\n return startOfMonth(monthDate);\n}\n\nfunction getFocusableDateInMonth(monthDate: Date, preferredDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n let nextDate = new Date(\n monthStart.getFullYear(),\n monthStart.getMonth(),\n Math.min(preferredDate.getDate(), monthEnd.getDate()),\n );\n\n if (minDate && nextDate < minDate) {\n nextDate = isSameMonth(minDate, monthStart) ? minDate : monthStart;\n }\n\n if (maxDate && nextDate > maxDate) {\n nextDate = isSameMonth(maxDate, monthStart) ? maxDate : monthEnd;\n }\n\n return nextDate;\n}\n\nfunction getYearOptions(visibleMonth: Date, minDate: Date | null, maxDate: Date | null, today: Date) {\n const visibleYear = visibleMonth.getFullYear();\n const defaultStartYear = Math.min(visibleYear, today.getFullYear() - 100);\n const defaultEndYear = Math.max(visibleYear, today.getFullYear() + 20);\n const startYear = minDate?.getFullYear() ?? defaultStartYear;\n const endYear = maxDate?.getFullYear() ?? defaultEndYear;\n const firstYear = Math.min(startYear, endYear, visibleYear);\n const lastYear = Math.max(startYear, endYear, visibleYear);\n\n return Array.from({ length: lastYear - firstYear + 1 }, (_, index) => firstYear + index);\n}\n\nexport const PDatePicker = forwardRef<PDatePickerRef, PDatePickerProps>(\n (\n {\n label,\n value,\n defaultValue,\n onValueChange,\n presets = [],\n customLabel = 'Custom',\n showCustom = true,\n presetColumns = 'auto',\n placeholder = 'Select date',\n helperText,\n isError = false,\n errorMessage,\n min,\n max,\n name,\n disabled = false,\n readOnly = false,\n required = false,\n locale,\n weekStartsOn = 0,\n className,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const panelId = `${rootId}-panel`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const [isOpen, setIsOpen] = useState(false);\n const selectedValue = isControlled ? value : internalValue;\n const selectedDate = toLocalDate(selectedValue);\n const today = useMemo(getToday, []);\n const minDate = toLocalDate(min);\n const maxDate = toLocalDate(max);\n const [visibleMonth, setVisibleMonth] = useState(() => startOfMonth(selectedDate ?? today));\n const [focusedDate, setFocusedDate] = useState(() => selectedDate ?? today);\n const calendarTriggerRef = useRef<FocusableElement | null>(null);\n const dayRefs = useRef<Record<string, FocusableElement | null>>({});\n const shouldFocusCalendarDateRef = useRef(false);\n const calendarDays = getCalendarDays(visibleMonth, weekStartsOn);\n const weekdayLabels = getWeekdayLabels(weekStartsOn, locale);\n const monthOptions = useMemo(() => getMonthOptions(locale), [locale]);\n const yearOptions = getYearOptions(visibleMonth, minDate, maxDate, today);\n const hasPresets = presets.length > 0;\n const shouldRenderCustom = hasPresets ? showCustom : true;\n const presetColumnsStyle =\n presetColumns === 'auto'\n ? undefined\n : ({\n '--p-date-picker-preset-columns': String(presetColumns),\n } as CSSProperties);\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const displayValue = selectedDate ? getDateLabel(selectedDate, locale) : placeholder;\n const selectedMatchesPreset = hasPresets\n ? presets.some((preset) => isSameDay(resolvePresetDate(preset), selectedDate))\n : false;\n const isCustomActive = isOpen || Boolean(selectedDate && !selectedMatchesPreset);\n const previousMonth = addMonths(visibleMonth, -1);\n const nextMonth = addMonths(visibleMonth, 1);\n const isPreviousMonthDisabled = isMonthDisabled(previousMonth, minDate, maxDate);\n const isNextMonthDisabled = isMonthDisabled(nextMonth, minDate, maxDate);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n if (shouldFocusCalendarDateRef.current) {\n dayRefs.current[toIsoDate(focusedDate)]?.focus();\n shouldFocusCalendarDateRef.current = false;\n }\n }, [focusedDate, isOpen, visibleMonth]);\n\n const setDateValue = (date: Date | null, source: PDatePickerChangeSource) => {\n const nextValue = toIsoDate(date);\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n if (date) {\n setVisibleMonth(startOfMonth(date));\n }\n\n onValueChange?.(nextValue, { date, source });\n };\n\n const openCalendar = (trigger: HTMLButtonElement) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextFocusedDate = selectedDate ?? today;\n calendarTriggerRef.current = trigger as unknown as FocusableElement;\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(nextFocusedDate);\n setVisibleMonth(startOfMonth(nextFocusedDate));\n setIsOpen(true);\n };\n\n const closeCalendar = (restoreFocus = false) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n calendarTriggerRef.current?.focus();\n }\n };\n\n const updateVisibleMonth = (nextMonth: Date) => {\n const clampedMonth = clampVisibleMonth(nextMonth, minDate, maxDate);\n\n setVisibleMonth(clampedMonth);\n setFocusedDate(getFocusableDateInMonth(clampedMonth, focusedDate, minDate, maxDate));\n };\n\n const handleMonthChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextMonth } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(visibleMonth.getFullYear(), Number(nextMonth), 1));\n };\n\n const handleYearChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextYear } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(Number(nextYear), visibleMonth.getMonth(), 1));\n };\n\n const handlePresetClick = (preset: PDatePickerPreset) => {\n if (disabled || readOnly) {\n return;\n }\n\n const presetDate = resolvePresetDate(preset);\n setDateValue(presetDate, 'preset');\n closeCalendar();\n };\n\n const handleDayClick = (date: Date) => {\n if (disabled || readOnly || isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n setFocusedDate(date);\n setDateValue(date, 'calendar');\n closeCalendar(true);\n };\n\n const focusCalendarDate = (date: Date) => {\n if (isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(date);\n setVisibleMonth(startOfMonth(date));\n };\n\n const handleDayKeyDown =\n (date: Date): ButtonHTMLAttributes<HTMLButtonElement>['onKeyDown'] =>\n (event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n const weekOffset = (date.getDay() - weekStartsOn + 7) % 7;\n const nextDateByKey: Record<string, Date> = {\n ArrowLeft: addDays(date, -1),\n ArrowRight: addDays(date, 1),\n ArrowUp: addDays(date, -7),\n ArrowDown: addDays(date, 7),\n Home: addDays(date, -weekOffset),\n End: addDays(date, 6 - weekOffset),\n PageUp: addMonthsClamped(date, -1),\n PageDown: addMonthsClamped(date, 1),\n };\n const nextDate = nextDateByKey[event.key];\n\n if (!nextDate) {\n return;\n }\n\n event.preventDefault();\n focusCalendarDate(nextDate);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n id={rootId}\n style={presetColumnsStyle ? { ...style, ...presetColumnsStyle } : style}\n className={cn(\n 'p-date-picker',\n hasPresets && 'p-date-picker--with-presets',\n isError && 'p-date-picker--error',\n disabled && 'p-date-picker--disabled',\n className,\n )}\n >\n {hasPresets ? (\n <div id={labelId} className=\"p-date-picker__label\">\n <span>{label}</span>\n <span className={cn('p-date-picker__label-value', !selectedDate && 'p-date-picker__label-value--empty')}>\n {displayValue}\n </span>\n </div>\n ) : null}\n\n {hasPresets ? (\n <div\n aria-describedby={messageId}\n aria-labelledby={labelId}\n className={cn(\n 'p-date-picker__presets',\n presetColumns !== 'auto' && 'p-date-picker__presets--fixed',\n )}\n role=\"group\"\n >\n {presets.map((preset) => {\n const presetDate = resolvePresetDate(preset);\n const isActive = isSameDay(presetDate, selectedDate);\n\n return (\n <button\n key={preset.label}\n type=\"button\"\n className={cn('p-date-picker__preset', isActive && 'p-date-picker__preset--active')}\n disabled={disabled}\n aria-pressed={isActive}\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n );\n })}\n {shouldRenderCustom ? (\n <button\n type=\"button\"\n className={cn(\n 'p-date-picker__preset',\n isCustomActive && 'p-date-picker__preset--active',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-expanded={isOpen}\n aria-pressed={isCustomActive}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n {customLabel}\n </button>\n ) : null}\n </div>\n ) : (\n <button\n type=\"button\"\n className={cn(\n 'p-date-picker__trigger',\n !selectedDate && 'p-date-picker__trigger--empty',\n selectedDate && 'p-date-picker__trigger--filled',\n isOpen && 'p-date-picker__trigger--open',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-describedby={messageId}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-label={`${label}: ${displayValue}`}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n <span\n id={labelId}\n className={cn(\n 'p-date-picker__trigger-label p-date-picker__trigger-floating-label',\n isError && 'p-date-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n 'p-date-picker__trigger-label p-date-picker__trigger-placeholder-label',\n isError && 'p-date-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span className=\"p-date-picker__trigger-value\">{displayValue}</span>\n <span className=\"p-date-picker__trigger-icon\">\n <CalendarIcon />\n </span>\n </button>\n )}\n\n <input type=\"hidden\" name={name} value={selectedValue ?? ''} required={required} />\n\n {isOpen && (\n <div\n id={panelId}\n className=\"p-date-picker__panel\"\n role=\"dialog\"\n aria-labelledby={`${panelId}-title`}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeCalendar();\n }\n }}\n >\n <div className=\"p-date-picker__calendar-header\">\n <button\n type=\"button\"\n className=\"p-date-picker__nav\"\n aria-label=\"Previous month\"\n disabled={isPreviousMonthDisabled}\n onClick={() => updateVisibleMonth(previousMonth)}\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"p-date-picker__month\">\n <span id={`${panelId}-title`} className=\"p-date-picker__month-label\">\n {getMonthLabel(visibleMonth, locale)}\n </span>\n <select\n className=\"p-date-picker__month-select p-date-picker__calendar-select\"\n aria-label=\"Month\"\n value={visibleMonth.getMonth()}\n onChange={handleMonthChange}\n >\n {monthOptions.map((month) => (\n <option\n key={month.value}\n value={month.value}\n disabled={isMonthDisabled(new Date(visibleMonth.getFullYear(), month.value, 1), minDate, maxDate)}\n >\n {month.label}\n </option>\n ))}\n </select>\n <select\n className=\"p-date-picker__year-select p-date-picker__calendar-select\"\n aria-label=\"Year\"\n value={visibleMonth.getFullYear()}\n onChange={handleYearChange}\n >\n {yearOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n className=\"p-date-picker__nav\"\n aria-label=\"Next month\"\n disabled={isNextMonthDisabled}\n onClick={() => updateVisibleMonth(nextMonth)}\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n <div className=\"p-date-picker__weekdays\" aria-hidden=\"true\">\n {weekdayLabels.map((weekday) => (\n <span key={weekday}>{weekday}</span>\n ))}\n </div>\n\n <div className=\"p-date-picker__grid\" role=\"grid\" aria-labelledby={`${panelId}-title`}>\n {calendarDays.map((date) => {\n const isoDate = toIsoDate(date);\n const isOutsideMonth = date.getMonth() !== visibleMonth.getMonth();\n const isSelected = isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isBeforeDate(date, minDate) || isAfterDate(date, maxDate);\n\n return (\n <button\n key={isoDate}\n ref={(node) => {\n dayRefs.current[isoDate] = node as unknown as FocusableElement | null;\n }}\n type=\"button\"\n role=\"gridcell\"\n data-date={isoDate}\n className={cn(\n 'p-date-picker__day',\n isOutsideMonth && 'p-date-picker__day--outside',\n isToday && 'p-date-picker__day--today',\n isSelected && 'p-date-picker__day--selected',\n )}\n disabled={isDisabled}\n aria-label={getDayLabel(date, locale)}\n aria-selected={isSelected}\n tabIndex={isSameDay(date, focusedDate) ? 0 : -1}\n onClick={() => handleDayClick(date)}\n onKeyDown={handleDayKeyDown(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-date-picker__message p-date-picker__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-date-picker__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPDatePicker.displayName = 'PDatePicker';\n\nexport const PDatePickerPresets = {\n today: { label: 'Today', value: () => getToday() },\n yesterday: { label: 'Yesterday', value: () => addDays(getToday(), -1) },\n tomorrow: { label: 'Tomorrow', value: () => addDays(getToday(), 1) },\n startOfMonth: { label: 'Start of month', value: () => startOfMonth(getToday()) },\n endOfMonth: {\n label: 'End of month',\n value: () => {\n const today = getToday();\n return new Date(today.getFullYear(), today.getMonth() + 1, 0);\n },\n },\n} satisfies Record<string, PDatePickerPreset>;\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ChangeEvent,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport './PDateRangePicker.css';\n\nexport type PDateRangePickerRef = HTMLDivElement;\nexport type PDateRangePickerChangeSource = 'preset' | 'calendar';\nexport type PDateRangePickerPresetColumns = 2 | 3 | 4 | 'auto';\ntype FocusableElement = { focus: () => void };\n\nexport type PDateRangeValue = {\n start?: string;\n end?: string;\n};\n\nexport type PDateRangePickerPreset = {\n label: string;\n value: PDateRangeValue | (() => PDateRangeValue);\n};\n\nexport type PDateRangePickerProps = {\n label: string;\n value?: PDateRangeValue;\n defaultValue?: PDateRangeValue;\n onValueChange?: (\n value: PDateRangeValue,\n details: { startDate: Date | null; endDate: Date | null; source: PDateRangePickerChangeSource },\n ) => void;\n presets?: PDateRangePickerPreset[];\n customLabel?: string;\n showCustom?: boolean;\n presetColumns?: PDateRangePickerPresetColumns;\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n min?: string;\n max?: string;\n nameStart?: string;\n nameEnd?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n className?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'defaultValue' | 'onChange'>;\n\nconst dayFormatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n\nfunction toLocalDate(value: string | Date | null | undefined) {\n if (!value) {\n return null;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? null\n : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n }\n\n const parts = value.split('-').map(Number);\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [year, month, day] = parts;\n const date = new Date(year, month - 1, day);\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction toIsoDate(date: Date | null) {\n if (!date) {\n return '';\n }\n\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\nfunction addMonths(date: Date, months: number) {\n return new Date(date.getFullYear(), date.getMonth() + months, 1);\n}\n\nfunction addMonthsClamped(date: Date, months: number) {\n const monthStart = addMonths(date, months);\n const lastDay = endOfMonth(monthStart).getDate();\n\n return new Date(monthStart.getFullYear(), monthStart.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nfunction addDays(date: Date, days: number) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\nfunction getToday() {\n const today = new Date();\n return new Date(today.getFullYear(), today.getMonth(), today.getDate());\n}\n\nfunction getCalendarDays(monthDate: Date, weekStartsOn: number) {\n const monthStart = startOfMonth(monthDate);\n const offset = (monthStart.getDay() - weekStartsOn + 7) % 7;\n const gridStart = addDays(monthStart, -offset);\n\n return Array.from({ length: 42 }, (_, index) => addDays(gridStart, index));\n}\n\nfunction getMonthLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(date);\n}\n\nfunction getMonthOptions(locale?: string) {\n return Array.from({ length: 12 }, (_, month) => ({\n label: new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(2024, month, 1)),\n value: month,\n }));\n}\n\nfunction getDateLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getDayLabel(date: Date, locale?: string) {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(date);\n}\n\nfunction getWeekdayLabels(weekStartsOn: number, locale?: string) {\n const baseSunday = new Date(2024, 0, 7);\n\n return Array.from({ length: 7 }, (_, index) => {\n const date = addDays(baseSunday, weekStartsOn + index);\n return dayFormatter.formatToParts(date).length\n ? new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(date)\n : '';\n });\n}\n\nfunction isSameDay(a: Date | null, b: Date | null) {\n return Boolean(a && b && toIsoDate(a) === toIsoDate(b));\n}\n\nfunction isBeforeDate(date: Date, minDate: Date | null) {\n return Boolean(minDate && date.getTime() < minDate.getTime());\n}\n\nfunction isAfterDate(date: Date, maxDate: Date | null) {\n return Boolean(maxDate && date.getTime() > maxDate.getTime());\n}\n\nfunction isSameMonth(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nfunction isMonthDisabled(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n\n return Boolean((minDate && monthEnd < minDate) || (maxDate && monthStart > maxDate));\n}\n\nfunction clampVisibleMonth(monthDate: Date, minDate: Date | null, maxDate: Date | null) {\n if (minDate && endOfMonth(monthDate) < minDate) {\n return startOfMonth(minDate);\n }\n\n if (maxDate && startOfMonth(monthDate) > maxDate) {\n return startOfMonth(maxDate);\n }\n\n return startOfMonth(monthDate);\n}\n\nfunction getFocusableDateInMonth(monthDate: Date, preferredDate: Date, minDate: Date | null, maxDate: Date | null) {\n const monthStart = startOfMonth(monthDate);\n const monthEnd = endOfMonth(monthDate);\n let nextDate = new Date(\n monthStart.getFullYear(),\n monthStart.getMonth(),\n Math.min(preferredDate.getDate(), monthEnd.getDate()),\n );\n\n if (minDate && nextDate < minDate) {\n nextDate = isSameMonth(minDate, monthStart) ? minDate : monthStart;\n }\n\n if (maxDate && nextDate > maxDate) {\n nextDate = isSameMonth(maxDate, monthStart) ? maxDate : monthEnd;\n }\n\n return nextDate;\n}\n\nfunction getYearOptions(visibleMonth: Date, minDate: Date | null, maxDate: Date | null, today: Date) {\n const visibleYear = visibleMonth.getFullYear();\n const defaultStartYear = Math.min(visibleYear, today.getFullYear() - 100);\n const defaultEndYear = Math.max(visibleYear, today.getFullYear() + 20);\n const startYear = minDate?.getFullYear() ?? defaultStartYear;\n const endYear = maxDate?.getFullYear() ?? defaultEndYear;\n const firstYear = Math.min(startYear, endYear, visibleYear);\n const lastYear = Math.max(startYear, endYear, visibleYear);\n\n return Array.from({ length: lastYear - firstYear + 1 }, (_, index) => firstYear + index);\n}\n\nfunction isInRange(date: Date, startDate: Date | null, endDate: Date | null) {\n return Boolean(startDate && endDate && date > startDate && date < endDate);\n}\n\nfunction normalizeRange(startDate: Date | null, endDate: Date | null): PDateRangeValue {\n if (!startDate && !endDate) {\n return {};\n }\n\n if (startDate && endDate && endDate < startDate) {\n return {\n start: toIsoDate(endDate),\n end: toIsoDate(startDate),\n };\n }\n\n return {\n start: toIsoDate(startDate),\n end: toIsoDate(endDate),\n };\n}\n\nfunction resolvePresetRange(preset: PDateRangePickerPreset) {\n return typeof preset.value === 'function' ? preset.value() : preset.value;\n}\n\nfunction getRangeDates(value: PDateRangeValue | undefined) {\n return {\n startDate: toLocalDate(value?.start),\n endDate: toLocalDate(value?.end),\n };\n}\n\nfunction isSameRange(a: PDateRangeValue | undefined, b: PDateRangeValue | undefined) {\n return Boolean(a?.start && a?.end && a.start === b?.start && a.end === b?.end);\n}\n\nfunction getRangeLabel(value: PDateRangeValue | undefined, placeholder: string, locale?: string) {\n const { startDate, endDate } = getRangeDates(value);\n\n if (startDate && endDate) {\n return `${getDateLabel(startDate, locale)} - ${getDateLabel(endDate, locale)}`;\n }\n\n if (startDate) {\n return `${getDateLabel(startDate, locale)} -`;\n }\n\n if (endDate) {\n return `- ${getDateLabel(endDate, locale)}`;\n }\n\n return placeholder;\n}\n\nexport const PDateRangePicker = forwardRef<PDateRangePickerRef, PDateRangePickerProps>(\n (\n {\n label,\n value,\n defaultValue,\n onValueChange,\n presets = [],\n customLabel = 'Custom',\n showCustom = true,\n presetColumns = 'auto',\n placeholder = 'Select range',\n helperText,\n isError = false,\n errorMessage,\n min,\n max,\n nameStart,\n nameEnd,\n disabled = false,\n readOnly = false,\n required = false,\n locale,\n weekStartsOn = 0,\n className,\n id,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const labelId = `${rootId}-label`;\n const panelId = `${rootId}-panel`;\n const helperId = `${rootId}-helper`;\n const errorId = `${rootId}-error`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<PDateRangeValue>(defaultValue ?? {});\n const [isOpen, setIsOpen] = useState(false);\n const selectedValue = isControlled ? value : internalValue;\n const { startDate, endDate } = getRangeDates(selectedValue);\n const today = useMemo(getToday, []);\n const minDate = toLocalDate(min);\n const maxDate = toLocalDate(max);\n const [visibleMonth, setVisibleMonth] = useState(() => startOfMonth(startDate ?? today));\n const [focusedDate, setFocusedDate] = useState(() => startDate ?? today);\n const calendarTriggerRef = useRef<FocusableElement | null>(null);\n const dayRefs = useRef<Record<string, FocusableElement | null>>({});\n const shouldFocusCalendarDateRef = useRef(false);\n const calendarDays = getCalendarDays(visibleMonth, weekStartsOn);\n const weekdayLabels = getWeekdayLabels(weekStartsOn, locale);\n const monthOptions = useMemo(() => getMonthOptions(locale), [locale]);\n const yearOptions = getYearOptions(visibleMonth, minDate, maxDate, today);\n const hasPresets = presets.length > 0;\n const shouldRenderCustom = hasPresets ? showCustom : true;\n const presetColumnsStyle =\n presetColumns === 'auto'\n ? undefined\n : ({\n '--p-date-range-picker-preset-columns': String(presetColumns),\n } as CSSProperties);\n const hasCompleteRange = Boolean(selectedValue?.start && selectedValue?.end);\n const messageId = isError && errorMessage ? errorId : helperText ? helperId : undefined;\n const displayValue = getRangeLabel(selectedValue, placeholder, locale);\n const selectedMatchesPreset = hasPresets\n ? presets.some((preset) => isSameRange(resolvePresetRange(preset), selectedValue))\n : false;\n const isCustomActive = isOpen || Boolean(hasCompleteRange && !selectedMatchesPreset);\n const previousMonth = addMonths(visibleMonth, -1);\n const nextMonth = addMonths(visibleMonth, 1);\n const isPreviousMonthDisabled = isMonthDisabled(previousMonth, minDate, maxDate);\n const isNextMonthDisabled = isMonthDisabled(nextMonth, minDate, maxDate);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n if (shouldFocusCalendarDateRef.current) {\n dayRefs.current[toIsoDate(focusedDate)]?.focus();\n shouldFocusCalendarDateRef.current = false;\n }\n }, [focusedDate, isOpen, visibleMonth]);\n\n const setRangeValue = (range: PDateRangeValue, source: PDateRangePickerChangeSource) => {\n const { startDate: nextStartDate, endDate: nextEndDate } = getRangeDates(range);\n const normalizedRange = normalizeRange(nextStartDate, nextEndDate);\n\n if (!isControlled) {\n setInternalValue(normalizedRange);\n }\n\n const normalizedDates = getRangeDates(normalizedRange);\n\n if (normalizedDates.startDate) {\n setVisibleMonth(startOfMonth(normalizedDates.startDate));\n }\n\n onValueChange?.(normalizedRange, {\n startDate: normalizedDates.startDate,\n endDate: normalizedDates.endDate,\n source,\n });\n };\n\n const openCalendar = (trigger: HTMLButtonElement) => {\n if (disabled || readOnly) {\n return;\n }\n\n const nextFocusedDate = startDate ?? today;\n calendarTriggerRef.current = trigger as unknown as FocusableElement;\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(nextFocusedDate);\n setVisibleMonth(startOfMonth(nextFocusedDate));\n setIsOpen(true);\n };\n\n const closeCalendar = (restoreFocus = false) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n calendarTriggerRef.current?.focus();\n }\n };\n\n const updateVisibleMonth = (nextMonth: Date) => {\n const clampedMonth = clampVisibleMonth(nextMonth, minDate, maxDate);\n\n setVisibleMonth(clampedMonth);\n setFocusedDate(getFocusableDateInMonth(clampedMonth, focusedDate, minDate, maxDate));\n };\n\n const handleMonthChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextMonth } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(visibleMonth.getFullYear(), Number(nextMonth), 1));\n };\n\n const handleYearChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextYear } = event.currentTarget as unknown as { value: string };\n\n updateVisibleMonth(new Date(Number(nextYear), visibleMonth.getMonth(), 1));\n };\n\n const handlePresetClick = (preset: PDateRangePickerPreset) => {\n if (disabled || readOnly) {\n return;\n }\n\n setRangeValue(resolvePresetRange(preset), 'preset');\n closeCalendar();\n };\n\n const handleDayClick = (date: Date) => {\n if (disabled || readOnly || isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n if (!startDate || endDate) {\n setFocusedDate(date);\n setRangeValue({ start: toIsoDate(date), end: '' }, 'calendar');\n return;\n }\n\n setFocusedDate(date);\n setRangeValue({ start: toIsoDate(startDate), end: toIsoDate(date) }, 'calendar');\n closeCalendar(true);\n };\n\n const focusCalendarDate = (date: Date) => {\n if (isBeforeDate(date, minDate) || isAfterDate(date, maxDate)) {\n return;\n }\n\n shouldFocusCalendarDateRef.current = true;\n setFocusedDate(date);\n setVisibleMonth(startOfMonth(date));\n };\n\n const handleDayKeyDown =\n (date: Date): ButtonHTMLAttributes<HTMLButtonElement>['onKeyDown'] =>\n (event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n closeCalendar(true);\n return;\n }\n\n const weekOffset = (date.getDay() - weekStartsOn + 7) % 7;\n const nextDateByKey: Record<string, Date> = {\n ArrowLeft: addDays(date, -1),\n ArrowRight: addDays(date, 1),\n ArrowUp: addDays(date, -7),\n ArrowDown: addDays(date, 7),\n Home: addDays(date, -weekOffset),\n End: addDays(date, 6 - weekOffset),\n PageUp: addMonthsClamped(date, -1),\n PageDown: addMonthsClamped(date, 1),\n };\n const nextDate = nextDateByKey[event.key];\n\n if (!nextDate) {\n return;\n }\n\n event.preventDefault();\n focusCalendarDate(nextDate);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n id={rootId}\n style={presetColumnsStyle ? { ...style, ...presetColumnsStyle } : style}\n className={cn(\n 'p-date-range-picker',\n hasPresets && 'p-date-range-picker--with-presets',\n isError && 'p-date-range-picker--error',\n disabled && 'p-date-range-picker--disabled',\n className,\n )}\n >\n {hasPresets ? (\n <div id={labelId} className=\"p-date-range-picker__label\">\n <span>{label}</span>\n <span\n className={cn(\n 'p-date-range-picker__label-value',\n !hasCompleteRange && 'p-date-range-picker__label-value--empty',\n )}\n >\n {displayValue}\n </span>\n </div>\n ) : null}\n\n {hasPresets ? (\n <div\n aria-describedby={messageId}\n aria-labelledby={labelId}\n className={cn(\n 'p-date-range-picker__presets',\n presetColumns !== 'auto' && 'p-date-range-picker__presets--fixed',\n )}\n role=\"group\"\n >\n {presets.map((preset) => {\n const presetRange = resolvePresetRange(preset);\n const isActive = isSameRange(presetRange, selectedValue);\n\n return (\n <button\n key={preset.label}\n type=\"button\"\n className={cn('p-date-range-picker__preset', isActive && 'p-date-range-picker__preset--active')}\n disabled={disabled}\n aria-pressed={isActive}\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n );\n })}\n {shouldRenderCustom ? (\n <button\n type=\"button\"\n className={cn(\n 'p-date-range-picker__preset',\n isCustomActive && 'p-date-range-picker__preset--active',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-expanded={isOpen}\n aria-pressed={isCustomActive}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n {customLabel}\n </button>\n ) : null}\n </div>\n ) : (\n <button\n type=\"button\"\n className={cn(\n 'p-date-range-picker__trigger',\n !hasCompleteRange && 'p-date-range-picker__trigger--empty',\n hasCompleteRange && 'p-date-range-picker__trigger--filled',\n isOpen && 'p-date-range-picker__trigger--open',\n )}\n disabled={disabled}\n aria-controls={panelId}\n aria-describedby={messageId}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-label={`${label}: ${displayValue}`}\n onClick={(event) => (isOpen ? closeCalendar(true) : openCalendar(event.currentTarget))}\n >\n <span\n id={labelId}\n className={cn(\n 'p-date-range-picker__trigger-label p-date-range-picker__trigger-floating-label',\n isError && 'p-date-range-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n 'p-date-range-picker__trigger-label p-date-range-picker__trigger-placeholder-label',\n isError && 'p-date-range-picker__trigger-label--error',\n )}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span className=\"p-date-range-picker__trigger-value\">{displayValue}</span>\n <span className=\"p-date-range-picker__trigger-icon\">\n <CalendarIcon />\n </span>\n </button>\n )}\n\n <input type=\"hidden\" name={nameStart} value={selectedValue?.start ?? ''} required={required} />\n <input type=\"hidden\" name={nameEnd} value={selectedValue?.end ?? ''} required={required} />\n\n {isOpen && (\n <div\n id={panelId}\n className=\"p-date-range-picker__panel\"\n role=\"dialog\"\n aria-labelledby={`${panelId}-title`}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeCalendar();\n }\n }}\n >\n <div className=\"p-date-range-picker__calendar-header\">\n <button\n type=\"button\"\n className=\"p-date-range-picker__nav\"\n aria-label=\"Previous month\"\n disabled={isPreviousMonthDisabled}\n onClick={() => updateVisibleMonth(previousMonth)}\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"p-date-range-picker__month\">\n <span id={`${panelId}-title`} className=\"p-date-range-picker__month-label\">\n {getMonthLabel(visibleMonth, locale)}\n </span>\n <select\n className=\"p-date-range-picker__month-select p-date-range-picker__calendar-select\"\n aria-label=\"Month\"\n value={visibleMonth.getMonth()}\n onChange={handleMonthChange}\n >\n {monthOptions.map((month) => (\n <option\n key={month.value}\n value={month.value}\n disabled={isMonthDisabled(new Date(visibleMonth.getFullYear(), month.value, 1), minDate, maxDate)}\n >\n {month.label}\n </option>\n ))}\n </select>\n <select\n className=\"p-date-range-picker__year-select p-date-range-picker__calendar-select\"\n aria-label=\"Year\"\n value={visibleMonth.getFullYear()}\n onChange={handleYearChange}\n >\n {yearOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n className=\"p-date-range-picker__nav\"\n aria-label=\"Next month\"\n disabled={isNextMonthDisabled}\n onClick={() => updateVisibleMonth(nextMonth)}\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n <div className=\"p-date-range-picker__weekdays\" aria-hidden=\"true\">\n {weekdayLabels.map((weekday) => (\n <span key={weekday}>{weekday}</span>\n ))}\n </div>\n\n <div className=\"p-date-range-picker__grid\" role=\"grid\" aria-labelledby={`${panelId}-title`}>\n {calendarDays.map((date) => {\n const isoDate = toIsoDate(date);\n const isOutsideMonth = date.getMonth() !== visibleMonth.getMonth();\n const isRangeStart = isSameDay(date, startDate);\n const isRangeEnd = isSameDay(date, endDate);\n const isRangeMiddle = isInRange(date, startDate, endDate);\n const isToday = isSameDay(date, today);\n const isDisabled = isBeforeDate(date, minDate) || isAfterDate(date, maxDate);\n\n return (\n <button\n key={isoDate}\n ref={(node) => {\n dayRefs.current[isoDate] = node as unknown as FocusableElement | null;\n }}\n type=\"button\"\n role=\"gridcell\"\n data-date={isoDate}\n className={cn(\n 'p-date-range-picker__day',\n isOutsideMonth && 'p-date-range-picker__day--outside',\n isToday && 'p-date-range-picker__day--today',\n isRangeMiddle && 'p-date-range-picker__day--in-range',\n (isRangeStart || isRangeEnd) && 'p-date-range-picker__day--selected',\n )}\n disabled={isDisabled}\n aria-label={getDayLabel(date, locale)}\n aria-selected={isRangeStart || isRangeEnd}\n tabIndex={isSameDay(date, focusedDate) ? 0 : -1}\n onClick={() => handleDayClick(date)}\n onKeyDown={handleDayKeyDown(date)}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-date-range-picker__message p-date-range-picker__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-date-range-picker__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPDateRangePicker.displayName = 'PDateRangePicker';\n\nexport const PDateRangePickerPresets = {\n thisWeek: {\n label: 'This week',\n value: () => {\n const today = getToday();\n const weekStart = addDays(today, -today.getDay());\n\n return {\n start: toIsoDate(weekStart),\n end: toIsoDate(addDays(weekStart, 6)),\n };\n },\n },\n last7Days: {\n label: 'Last 7 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -6)),\n end: toIsoDate(today),\n };\n },\n },\n last14Days: {\n label: 'Last 14 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -13)),\n end: toIsoDate(today),\n };\n },\n },\n last30Days: {\n label: 'Last 30 days',\n value: () => {\n const today = getToday();\n return {\n start: toIsoDate(addDays(today, -29)),\n end: toIsoDate(today),\n };\n },\n },\n thisMonth: {\n label: 'This month',\n value: () => {\n const today = getToday();\n const start = startOfMonth(today);\n const end = endOfMonth(today);\n\n return {\n start: toIsoDate(start),\n end: toIsoDate(end),\n };\n },\n },\n lastMonth: {\n label: 'Last month',\n value: () => {\n const today = getToday();\n const lastMonth = addMonths(today, -1);\n\n return {\n start: toIsoDate(startOfMonth(lastMonth)),\n end: toIsoDate(endOfMonth(lastMonth)),\n };\n },\n },\n monthToDate: {\n label: 'Month to date',\n value: () => {\n const today = getToday();\n const start = startOfMonth(today);\n\n return {\n start: toIsoDate(start),\n end: toIsoDate(today),\n };\n },\n },\n yearToDate: {\n label: 'Year to date',\n value: () => {\n const today = getToday();\n\n return {\n start: toIsoDate(new Date(today.getFullYear(), 0, 1)),\n end: toIsoDate(today),\n };\n },\n },\n} satisfies Record<string, PDateRangePickerPreset>;\n","import {\n forwardRef,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PHighlight.css';\n\nexport type PHighlightVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info' | 'neutral';\nexport type PHighlightAppearance = 'text' | 'background';\nexport type PHighlightRef = HTMLElement;\n\nexport type PHighlightProps = {\n as?: ElementType;\n variant?: PHighlightVariant;\n /** Controls whether the highlight is text-only or a filled background. */\n appearance?: PHighlightAppearance;\n /** Custom highlight color. Text color by default, background color for `appearance=\"background\"`. */\n color?: CSSProperties['color'];\n /** Custom foreground color for `appearance=\"background\"`. */\n textColor?: CSSProperties['color'];\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'color' | 'style'>;\n\ntype PHighlightStyle = CSSProperties & {\n '--p-highlight-color'?: CSSProperties['color'];\n '--p-highlight-bg'?: CSSProperties['backgroundColor'];\n '--p-highlight-text'?: CSSProperties['color'];\n};\n\nexport const PHighlight = forwardRef<PHighlightRef, PHighlightProps>(\n (\n {\n as: Element = 'span',\n variant = 'primary',\n appearance = 'text',\n color,\n textColor,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const highlightStyle: PHighlightStyle = {\n ...style,\n ...(color ? { '--p-highlight-color': color, '--p-highlight-bg': color } : {}),\n ...(textColor ? { '--p-highlight-text': textColor } : {}),\n };\n\n return (\n <Element\n {...props}\n ref={ref}\n className={cn(\n 'p-highlight',\n `p-highlight--${variant}`,\n appearance === 'background' && 'p-highlight--background',\n className,\n )}\n style={highlightStyle}\n >\n {children}\n </Element>\n );\n },\n);\n\nPHighlight.displayName = 'PHighlight';\n","import {\n Children,\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PHorizontalSlider.css';\n\nexport type PHorizontalSliderRef = HTMLDivElement;\n\nexport type PHorizontalSliderProps = {\n children: ReactNode;\n /** Accessible label for the keyboard-focusable scroll region. */\n ariaLabel?: string;\n /** Gap between slider items. Accepts any CSS gap value. */\n gap?: CSSProperties['gap'];\n /** Disables horizontal snap alignment when free scrolling is preferred. */\n snap?: boolean;\n scrollerClassName?: string;\n listClassName?: string;\n itemClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'> & {\n className?: string;\n };\n\ntype SliderStyle = CSSProperties & {\n '--p-horizontal-slider-gap'?: CSSProperties['gap'];\n};\n\nexport const PHorizontalSlider = forwardRef<PHorizontalSliderRef, PHorizontalSliderProps>(\n (\n {\n children,\n ariaLabel = 'Horizontal content',\n gap,\n snap = true,\n className,\n scrollerClassName,\n listClassName,\n itemClassName,\n style,\n ...props\n },\n ref,\n ) => {\n const sliderStyle: SliderStyle = {\n ...style,\n ...(gap ? { '--p-horizontal-slider-gap': gap } : {}),\n };\n\n return (\n <div\n {...props}\n ref={ref}\n className={cn('p-horizontal-slider', !snap && 'p-horizontal-slider--no-snap', className)}\n style={sliderStyle}\n >\n <div\n aria-label={ariaLabel}\n className={cn('p-horizontal-slider__scroller', scrollerClassName)}\n role=\"region\"\n tabIndex={0}\n >\n <ul className={cn('p-horizontal-slider__list', listClassName)}>\n {Children.map(children, (child) => (\n <li className={cn('p-horizontal-slider__item', itemClassName)}>{child}</li>\n ))}\n </ul>\n </div>\n </div>\n );\n },\n);\n\nPHorizontalSlider.displayName = 'PHorizontalSlider';\n","import {\n forwardRef,\n useId,\n useState,\n type ChangeEvent,\n type ReactNode,\n type SelectHTMLAttributes,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PSelect.css';\n\nexport type PSelectRef = HTMLSelectElement;\nexport type PSelectDensity = 'standard' | 'compact';\nexport type PSelectVariant = 'floating' | 'inline';\n\nexport type PSelectOption = {\n value: string | number;\n label: ReactNode;\n disabled?: boolean;\n group?: string;\n};\n\nexport type PSelectProps = {\n className?: string;\n selectClassName?: string;\n label: string;\n options: PSelectOption[];\n placeholder?: string;\n helperText?: string;\n isError?: boolean;\n errorMessage?: string;\n density?: PSelectDensity;\n variant?: PSelectVariant;\n hideLabel?: boolean;\n onValueChange?: (value: string, option: PSelectOption | null) => void;\n} & Omit<\n SelectHTMLAttributes<HTMLSelectElement>,\n 'aria-describedby' | 'aria-label' | 'children' | 'className' | 'onChange'\n> & {\n onChange?: (event: ChangeEvent<HTMLSelectElement>) => void;\n};\n\nfunction ChevronDownIcon() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" aria-hidden=\"true\">\n <path d=\"m5 8 5 5 5-5\" />\n </svg>\n );\n}\n\nfunction getSelectValue(value: SelectHTMLAttributes<HTMLSelectElement>['value']) {\n if (Array.isArray(value)) {\n return value[0] ?? '';\n }\n\n return value ?? '';\n}\n\nexport const PSelect = forwardRef<PSelectRef, PSelectProps>(\n (\n {\n className,\n selectClassName,\n label,\n options,\n placeholder = 'Select an option',\n helperText,\n id,\n isError = false,\n errorMessage,\n density = 'standard',\n variant = 'floating',\n hideLabel = false,\n disabled,\n required,\n value,\n defaultValue,\n onChange,\n onValueChange,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const selectId = id ?? generatedId;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(getSelectValue(defaultValue));\n const selectedValue = getSelectValue(isControlled ? value : internalValue);\n const hasValue = selectedValue !== '';\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const groupedOptions = options.reduce<Array<{ group: string | null; options: PSelectOption[] }>>(\n (accumulator, option) => {\n const group = option.group ?? null;\n const existingGroup = accumulator.find((item) => item.group === group);\n\n if (existingGroup) {\n existingGroup.options.push(option);\n return accumulator;\n }\n\n accumulator.push({ group, options: [option] });\n return accumulator;\n },\n [],\n );\n\n const handleChange = (event: ChangeEvent<HTMLSelectElement>) => {\n const { value: nextValue } = event.currentTarget as unknown as { value: string };\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChange?.(event);\n onValueChange?.(\n nextValue,\n options.find((option) => String(option.value) === nextValue) ?? null,\n );\n };\n\n return (\n <div\n className={cn(\n 'p-select',\n `p-select--${density}`,\n `p-select--${variant}`,\n hasValue && 'p-select--filled',\n isError && 'p-select--error',\n disabled && 'p-select--disabled',\n className,\n )}\n style={style}\n >\n <div className=\"p-select__field\">\n <select\n {...props}\n id={selectId}\n ref={ref}\n value={value}\n defaultValue={value === undefined ? defaultValue ?? '' : undefined}\n disabled={disabled}\n required={required}\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={required}\n aria-disabled={disabled}\n className={cn('p-select__control', isError && 'p-select__control--error', selectClassName)}\n onChange={handleChange}\n >\n {placeholder ? (\n <option value=\"\" disabled={required} aria-label={placeholder}>\n {''}\n </option>\n ) : null}\n\n {groupedOptions.map((group) =>\n group.group ? (\n <optgroup key={group.group} label={group.group}>\n {group.options.map((option) => (\n <option key={String(option.value)} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </optgroup>\n ) : (\n group.options.map((option) => (\n <option key={String(option.value)} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))\n ),\n )}\n </select>\n\n {variant === 'floating' ? (\n <>\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-select__label p-select__floating-label',\n hideLabel && 'p-select__label--hidden',\n isError && 'p-select__label--error',\n )}\n >\n {label}\n </span>\n\n <label\n htmlFor={selectId}\n className={cn('p-select__label p-select__placeholder-label', hideLabel && 'p-select__label--hidden')}\n >\n {placeholder || label}\n </label>\n </>\n ) : (\n <label\n htmlFor={selectId}\n className={cn('p-select__label p-select__inline-label', hideLabel && 'p-select__label--hidden')}\n >\n {label}\n </label>\n )}\n\n <span className=\"p-select__chevron\" aria-hidden=\"true\">\n <ChevronDownIcon />\n </span>\n </div>\n\n {isError && errorMessage ? (\n <p id={errorId} role=\"alert\" className=\"p-select__message p-select__message--error\">\n {errorMessage}\n </p>\n ) : null}\n\n {!isError && helperText ? (\n <p id={helperId} className=\"p-select__message\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\n\nPSelect.displayName = 'PSelect';\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport cn from '../../utils/cn';\nimport { PSelect } from '../PSelect';\nimport './PPagination.css';\n\nexport type PPaginationRef = HTMLElement;\nexport type PPaginationDensity = 'standard' | 'compact';\nexport type PPaginationItem = number | 'ellipsis';\n\nexport type PPaginationProps = {\n page: number;\n pageCount?: number;\n totalItems?: number;\n pageSize?: number;\n pageSizeOptions?: number[];\n itemLabel?: string;\n density?: PPaginationDensity;\n siblingCount?: number;\n boundaryCount?: number;\n disabled?: boolean;\n isLoading?: boolean;\n hasPreviousPage?: boolean;\n hasNextPage?: boolean;\n showRowsPerPage?: boolean;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n className?: string;\n summary?: ReactNode;\n} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'onChange'>;\n\nfunction clampPage(page: number, pageCount?: number) {\n if (!Number.isFinite(page)) {\n return 1;\n }\n\n if (!pageCount) {\n return Math.max(1, Math.trunc(page));\n }\n\n return Math.min(Math.max(1, Math.trunc(page)), Math.max(1, pageCount));\n}\n\nfunction getRange(start: number, end: number) {\n return Array.from({ length: end - start + 1 }, (_, index) => start + index);\n}\n\nfunction getPaginationItems(\n page: number,\n pageCount: number,\n siblingCount: number,\n boundaryCount: number,\n): PPaginationItem[] {\n const normalizedPageCount = Math.max(1, pageCount);\n const normalizedPage = clampPage(page, normalizedPageCount);\n const normalizedSiblingCount = Math.max(0, Math.trunc(siblingCount));\n const normalizedBoundaryCount = Math.max(1, Math.trunc(boundaryCount));\n const totalVisible = normalizedBoundaryCount * 2 + normalizedSiblingCount * 2 + 3;\n\n if (normalizedPageCount <= totalVisible) {\n return getRange(1, normalizedPageCount);\n }\n\n const edgeWindowCount = totalVisible - normalizedBoundaryCount - 1;\n const startPages = getRange(1, normalizedBoundaryCount);\n const endPages = getRange(normalizedPageCount - normalizedBoundaryCount + 1, normalizedPageCount);\n const startWindowEnd = edgeWindowCount;\n const endWindowStart = normalizedPageCount - edgeWindowCount + 1;\n\n if (normalizedPage <= startWindowEnd - normalizedSiblingCount) {\n return [...getRange(1, startWindowEnd), 'ellipsis' as const, ...endPages];\n }\n\n if (normalizedPage >= endWindowStart + normalizedSiblingCount) {\n return [...startPages, 'ellipsis' as const, ...getRange(endWindowStart, normalizedPageCount)];\n }\n\n const middleStart = normalizedPage - normalizedSiblingCount;\n const middleEnd = normalizedPage + normalizedSiblingCount;\n\n return [\n ...startPages,\n 'ellipsis' as const,\n ...getRange(middleStart, middleEnd),\n 'ellipsis' as const,\n ...endPages,\n ];\n}\n\nfunction getDefaultSummary(\n page: number,\n pageCount: number | undefined,\n totalItems: number | undefined,\n pageSize: number | undefined,\n itemLabel: string,\n) {\n if (totalItems !== undefined && pageSize) {\n if (totalItems <= 0) {\n return `No ${itemLabel}`;\n }\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(totalItems, page * pageSize);\n\n return `Showing ${start}-${end} of ${totalItems} ${itemLabel}`;\n }\n\n if (pageCount) {\n return `Page ${page} of ${pageCount}`;\n }\n\n return `Page ${page}`;\n}\n\nfunction PaginationButton({\n className,\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <button {...props} type=\"button\" className={cn('p-pagination__button', className)}>\n {children}\n </button>\n );\n}\n\nexport const PPagination = forwardRef<PPaginationRef, PPaginationProps>(\n (\n {\n page,\n pageCount,\n totalItems,\n pageSize,\n pageSizeOptions,\n itemLabel = 'items',\n density = 'standard',\n siblingCount = 1,\n boundaryCount = 1,\n disabled = false,\n isLoading = false,\n hasPreviousPage,\n hasNextPage,\n showRowsPerPage = true,\n onPageChange,\n onPageSizeChange,\n className,\n summary,\n ...props\n },\n ref,\n ) => {\n const normalizedPageCount = pageCount ? Math.max(1, Math.trunc(pageCount)) : undefined;\n const currentPage = clampPage(page, normalizedPageCount);\n const isUnavailable = disabled || isLoading;\n const canRequestPage = !isUnavailable && Boolean(onPageChange);\n const canGoPrevious = canRequestPage && (hasPreviousPage ?? currentPage > 1);\n const canGoNext = canRequestPage && (hasNextPage ?? (normalizedPageCount ? currentPage < normalizedPageCount : true));\n const pageItems = normalizedPageCount\n ? getPaginationItems(currentPage, normalizedPageCount, siblingCount, boundaryCount)\n : [];\n const shouldShowRowsPerPage = Boolean(\n showRowsPerPage && pageSize && pageSizeOptions?.length && onPageSizeChange,\n );\n const summaryText =\n summary ?? getDefaultSummary(currentPage, normalizedPageCount, totalItems, pageSize, itemLabel);\n\n const handlePageChange = (nextPage: number) => {\n if (isUnavailable) {\n return;\n }\n\n const clampedNextPage = clampPage(nextPage, normalizedPageCount);\n\n if (clampedNextPage === currentPage && normalizedPageCount) {\n return;\n }\n\n onPageChange?.(clampedNextPage);\n };\n\n return (\n <nav\n {...props}\n ref={ref}\n className={cn(\n 'p-pagination',\n `p-pagination--${density}`,\n isLoading && 'p-pagination--loading',\n className,\n )}\n aria-label={props['aria-label'] ?? 'Pagination'}\n aria-busy={isLoading || undefined}\n >\n <div className=\"p-pagination__summary\" aria-live=\"polite\">\n {summaryText}\n </div>\n\n <div className=\"p-pagination__controls\">\n <PaginationButton\n className=\"p-pagination__button--previous\"\n disabled={!canGoPrevious}\n aria-label=\"Go to previous page\"\n onClick={() => handlePageChange(currentPage - 1)}\n >\n <ChevronLeftIcon />\n <span>Previous</span>\n </PaginationButton>\n\n {normalizedPageCount ? (\n <div className=\"p-pagination__pages\" aria-label=\"Pages\">\n {pageItems.map((item, index) =>\n item === 'ellipsis' ? (\n <span key={`ellipsis-${index}`} className=\"p-pagination__ellipsis\" aria-hidden=\"true\">\n ...\n </span>\n ) : (\n <PaginationButton\n key={item}\n className={cn('p-pagination__page', item === currentPage && 'p-pagination__page--current')}\n aria-label={`Go to page ${item}`}\n aria-current={item === currentPage ? 'page' : undefined}\n disabled={!canRequestPage || item === currentPage}\n onClick={() => handlePageChange(item)}\n >\n {item}\n </PaginationButton>\n ),\n )}\n </div>\n ) : (\n <div className=\"p-pagination__cursor-page\" aria-live=\"polite\">\n Page {currentPage}\n </div>\n )}\n\n <PaginationButton\n className=\"p-pagination__button--next\"\n disabled={!canGoNext}\n aria-label=\"Go to next page\"\n onClick={() => handlePageChange(currentPage + 1)}\n >\n <span>Next</span>\n <ChevronRightIcon />\n </PaginationButton>\n </div>\n\n {shouldShowRowsPerPage ? (\n <PSelect\n className=\"p-pagination__page-size\"\n label=\"Rows per page\"\n placeholder=\"\"\n density=\"compact\"\n variant=\"inline\"\n hideLabel\n value={pageSize}\n disabled={isUnavailable}\n options={pageSizeOptions?.map((option) => ({ value: option, label: `${option} / page` })) ?? []}\n onValueChange={(nextPageSize) => onPageSizeChange?.(Number(nextPageSize))}\n />\n ) : null}\n </nav>\n );\n },\n);\n\nPPagination.displayName = 'PPagination';\n","import {\n forwardRef,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport cn from '../../utils/cn';\nimport './PTable.css';\n\nexport type PTableRef = HTMLDivElement;\nexport type PTableDensity = 'compact' | 'standard' | 'spacious';\nexport type PTableAlign = 'start' | 'center' | 'end';\nexport type PTableSortDirection = 'ascending' | 'descending';\nexport type PTableColumnPriority = 'primary' | 'secondary' | 'tertiary';\nexport type PTableStateTone = 'neutral' | 'danger';\nexport type PTableRowTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type PTableRecord = Record<string, unknown>;\n\nexport type PTableColumn<RowData extends PTableRecord = PTableRecord> = {\n id: string;\n header: ReactNode;\n label?: string;\n accessor?: keyof RowData | ((row: RowData) => ReactNode);\n cell?: (row: RowData, rowIndex: number) => ReactNode;\n mobileLabel?: string;\n width?: string;\n align?: PTableAlign;\n priority?: PTableColumnPriority;\n hideOnTablet?: boolean;\n hideOnMobile?: boolean;\n sortable?: boolean;\n sortDirection?: PTableSortDirection | null;\n};\n\nexport type PTableState = {\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n tone?: PTableStateTone;\n};\n\nexport type PTableProps<RowData extends PTableRecord = PTableRecord> = {\n columns: PTableColumn<RowData>[];\n rows: RowData[];\n caption: string;\n captionHidden?: boolean;\n summary?: ReactNode;\n density?: PTableDensity;\n stickyHeader?: boolean;\n stickyFirstColumn?: boolean;\n isLoading?: boolean;\n loadingLabel?: ReactNode;\n emptyState?: PTableState;\n errorState?: PTableState;\n getRowId?: (row: RowData, rowIndex: number) => string;\n getRowTone?: (row: RowData, rowIndex: number) => PTableRowTone | undefined;\n onRowClick?: (\n row: RowData,\n rowIndex: number,\n event: MouseEvent<HTMLTableRowElement | HTMLLIElement> | KeyboardEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => void;\n renderRowActions?: (row: RowData, rowIndex: number) => ReactNode;\n onSortChange?: (columnId: string, direction: PTableSortDirection) => void;\n className?: string;\n tableClassName?: string;\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>;\n\nfunction getColumnLabel<RowData extends PTableRecord>(column: PTableColumn<RowData>) {\n if (column.label) {\n return column.label;\n }\n\n if (column.mobileLabel) {\n return column.mobileLabel;\n }\n\n return typeof column.header === 'string' ? column.header : column.id;\n}\n\nfunction getCellContent<RowData extends PTableRecord>(\n row: RowData,\n column: PTableColumn<RowData>,\n rowIndex: number,\n) {\n if (column.cell) {\n return column.cell(row, rowIndex);\n }\n\n if (typeof column.accessor === 'function') {\n return column.accessor(row);\n }\n\n if (column.accessor) {\n return row[column.accessor] as ReactNode;\n }\n\n return null;\n}\n\nfunction getNextSortDirection(direction?: PTableSortDirection | null): PTableSortDirection {\n return direction === 'ascending' ? 'descending' : 'ascending';\n}\n\ntype ClosestElementLike = {\n closest: (selector: string) => unknown;\n};\n\ntype ContainsElementLike = {\n contains: (node: unknown) => boolean;\n};\n\nfunction hasClosest(target: EventTarget | null): target is EventTarget & ClosestElementLike {\n return Boolean(\n target &&\n typeof target === 'object' &&\n 'closest' in target &&\n typeof (target as ClosestElementLike).closest === 'function',\n );\n}\n\nfunction hasContains(target: EventTarget | null): target is EventTarget & ContainsElementLike {\n return Boolean(\n target &&\n typeof target === 'object' &&\n 'contains' in target &&\n typeof (target as ContainsElementLike).contains === 'function',\n );\n}\n\nfunction isInteractiveTarget(target: EventTarget | null, container: EventTarget | null) {\n if (!hasContains(container)) {\n return false;\n }\n\n if (!hasClosest(target)) {\n return false;\n }\n\n const interactiveElement = target.closest(\n [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'summary',\n '[contenteditable=\"true\"]',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[data-p-table-ignore-row-click]',\n ].join(','),\n );\n\n return Boolean(interactiveElement && interactiveElement !== container && container.contains(interactiveElement));\n}\n\nfunction PTableComponent<RowData extends PTableRecord>(\n {\n columns,\n rows,\n caption,\n captionHidden = false,\n summary,\n density = 'standard',\n stickyHeader = true,\n stickyFirstColumn = true,\n isLoading = false,\n loadingLabel = 'Loading table data...',\n emptyState = {\n title: 'No records found',\n description: 'Try adjusting the filters or checking back later.',\n },\n errorState,\n getRowId,\n getRowTone,\n onRowClick,\n renderRowActions,\n onSortChange,\n className,\n tableClassName,\n ...props\n }: PTableProps<RowData>,\n ref: ForwardedRef<PTableRef>,\n) {\n const hasRows = rows.length > 0;\n const hasActions = Boolean(renderRowActions);\n const activeState = errorState ?? (!isLoading && !hasRows ? emptyState : null);\n const visibleMobileColumns = columns.filter((column) => !column.hideOnMobile);\n const columnCount = columns.length + (hasActions ? 1 : 0);\n const handleRowClick = (\n row: RowData,\n rowIndex: number,\n event: MouseEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => {\n if (isInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n onRowClick?.(row, rowIndex, event);\n };\n const handleRowKeyDown = (\n row: RowData,\n rowIndex: number,\n event: KeyboardEvent<HTMLTableRowElement | HTMLLIElement>,\n ) => {\n if (isInteractiveTarget(event.target, event.currentTarget)) {\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n onRowClick?.(row, rowIndex, event);\n };\n\n return (\n <div\n {...props}\n ref={ref}\n className={cn(\n 'p-table',\n `p-table--${density}`,\n stickyHeader && 'p-table--sticky-header',\n stickyFirstColumn && 'p-table--sticky-first-column',\n onRowClick && 'p-table--interactive',\n className,\n )}\n >\n <div className=\"p-table__header\">\n <div className=\"p-table__header-copy\">\n <h3 className={cn('p-table__caption', captionHidden && 'p-table__caption--hidden')}>\n {caption}\n </h3>\n {summary ? <div className=\"p-table__summary\">{summary}</div> : null}\n </div>\n </div>\n\n <div className=\"p-table__viewport\">\n <table className={cn('p-table__table', tableClassName)}>\n <caption className=\"p-table__native-caption\">{caption}</caption>\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.id}\n className={cn(\n 'p-table__col',\n column.priority && `p-table__col--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__col--hide-tablet',\n column.hideOnMobile && 'p-table__col--hide-mobile',\n )}\n style={column.width ? { width: column.width } : undefined}\n />\n ))}\n {hasActions ? <col className=\"p-table__actions-col\" /> : null}\n </colgroup>\n <thead className=\"p-table__head\">\n <tr>\n {columns.map((column) => {\n const nextSortDirection = getNextSortDirection(column.sortDirection);\n const ariaSort = column.sortDirection ?? (column.sortable ? 'none' : undefined);\n\n return (\n <th\n key={column.id}\n scope=\"col\"\n aria-sort={ariaSort}\n className={cn(\n 'p-table__cell p-table__head-cell',\n column.align && `p-table__cell--${column.align}`,\n column.priority && `p-table__cell--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__cell--hide-tablet',\n column.hideOnMobile && 'p-table__cell--hide-mobile',\n )}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n className=\"p-table__sort-button\"\n aria-label={`Sort by ${getColumnLabel(column)}`}\n onClick={() => onSortChange?.(column.id, nextSortDirection)}\n >\n <span>{column.header}</span>\n <span\n className={cn(\n 'p-table__sort-mark',\n column.sortDirection && `p-table__sort-mark--${column.sortDirection}`,\n )}\n aria-hidden=\"true\"\n />\n </button>\n ) : (\n column.header\n )}\n </th>\n );\n })}\n {hasActions ? (\n <th scope=\"col\" className=\"p-table__cell p-table__head-cell p-table__actions-head\">\n <span className=\"p-table__sr-only\">Actions</span>\n </th>\n ) : null}\n </tr>\n </thead>\n <tbody className=\"p-table__body\">\n {isLoading ? (\n <tr>\n <td className=\"p-table__state-cell\" colSpan={columnCount}>\n <span className=\"p-table__loading-mark\" aria-hidden=\"true\" />\n <span>{loadingLabel}</span>\n </td>\n </tr>\n ) : activeState ? (\n <tr>\n <td className=\"p-table__state-cell\" colSpan={columnCount}>\n <div className={cn('p-table__state', activeState.tone && `p-table__state--${activeState.tone}`)}>\n <strong>{activeState.title}</strong>\n {activeState.description ? <span>{activeState.description}</span> : null}\n {activeState.action ? <div className=\"p-table__state-action\">{activeState.action}</div> : null}\n </div>\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => {\n const rowId = getRowId?.(row, rowIndex) ?? String(rowIndex);\n const tone = getRowTone?.(row, rowIndex);\n const rowContent = columns.map((column) => (\n <td\n key={column.id}\n className={cn(\n 'p-table__cell p-table__body-cell',\n column.align && `p-table__cell--${column.align}`,\n column.priority && `p-table__cell--priority-${column.priority}`,\n column.hideOnTablet && 'p-table__cell--hide-tablet',\n column.hideOnMobile && 'p-table__cell--hide-mobile',\n )}\n >\n {getCellContent(row, column, rowIndex)}\n </td>\n ));\n\n return (\n <tr\n key={rowId}\n className={cn('p-table__row', tone && `p-table__row--${tone}`)}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? (event) => handleRowClick(row, rowIndex, event) : undefined}\n onKeyDown={onRowClick ? (event) => handleRowKeyDown(row, rowIndex, event) : undefined}\n >\n {rowContent}\n {hasActions ? (\n <td className=\"p-table__cell p-table__body-cell p-table__actions-cell\">\n {renderRowActions?.(row, rowIndex)}\n </td>\n ) : null}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n <ul className=\"p-table__mobile-list\" aria-label={`${caption} rows`}>\n {isLoading ? (\n <li className=\"p-table__mobile-state\">\n <span className=\"p-table__loading-mark\" aria-hidden=\"true\" />\n <span>{loadingLabel}</span>\n </li>\n ) : activeState ? (\n <li className=\"p-table__mobile-state\">\n <div className={cn('p-table__state', activeState.tone && `p-table__state--${activeState.tone}`)}>\n <strong>{activeState.title}</strong>\n {activeState.description ? <span>{activeState.description}</span> : null}\n {activeState.action ? <div className=\"p-table__state-action\">{activeState.action}</div> : null}\n </div>\n </li>\n ) : (\n rows.map((row, rowIndex) => {\n const rowId = getRowId?.(row, rowIndex) ?? String(rowIndex);\n const primaryColumn = visibleMobileColumns.find((column) => column.priority === 'primary') ?? visibleMobileColumns[0];\n const detailColumns = visibleMobileColumns.filter((column) => column.id !== primaryColumn?.id);\n const tone = getRowTone?.(row, rowIndex);\n\n return (\n <li\n key={rowId}\n className={cn('p-table__mobile-row', tone && `p-table__mobile-row--${tone}`)}\n role={onRowClick ? 'button' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={onRowClick ? (event) => handleRowClick(row, rowIndex, event) : undefined}\n onKeyDown={onRowClick ? (event) => handleRowKeyDown(row, rowIndex, event) : undefined}\n >\n {primaryColumn ? (\n <div className=\"p-table__mobile-title\">\n {getCellContent(row, primaryColumn, rowIndex)}\n </div>\n ) : null}\n <dl className=\"p-table__mobile-fields\">\n {detailColumns.map((column) => (\n <div key={column.id} className=\"p-table__mobile-field\">\n <dt>{getColumnLabel(column)}</dt>\n <dd>{getCellContent(row, column, rowIndex)}</dd>\n </div>\n ))}\n </dl>\n {hasActions ? (\n <div className=\"p-table__mobile-actions\">{renderRowActions?.(row, rowIndex)}</div>\n ) : null}\n </li>\n );\n })\n )}\n </ul>\n </div>\n );\n}\n\ntype PTableComponentType = (<RowData extends PTableRecord = PTableRecord>(\n props: PTableProps<RowData> & { ref?: ForwardedRef<PTableRef> },\n) => ReturnType<typeof PTableComponent>) & {\n displayName?: string;\n};\n\nexport const PTable = forwardRef(PTableComponent) as PTableComponentType;\n\nPTable.displayName = 'PTable';\n","import { Stack } from \"../PContainers\";\nimport { PTypography } from \"../PTypography\";\nimport cn from \"../../utils/cn\";\nimport \"./PSectionHeader.css\";\n\nexport type PSectionHeaderVariant = \"default\" | \"indexed\";\n\nexport interface PSectionHeaderProps {\n title: string;\n index?: string | number;\n variant?: PSectionHeaderVariant;\n className?: string;\n}\n\nexport default function PSectionHeader({\n title,\n index = \"01\",\n variant = \"default\",\n className,\n}: PSectionHeaderProps) {\n if (variant === \"indexed\") {\n return (\n <div\n className={cn(\"p-section-header p-section-header--indexed\", className)}\n >\n <PTypography\n as=\"span\"\n className=\"p-section-header__mark\"\n variant=\"body\"\n aria-hidden=\"true\"\n >\n —\n </PTypography>\n <PTypography\n as=\"span\"\n className=\"p-section-header__index\"\n variant=\"body\"\n >\n {index}\n </PTypography>\n <PTypography\n as=\"span\"\n className=\"p-section-header__divider\"\n variant=\"body\"\n aria-hidden=\"true\"\n >\n |\n </PTypography>\n <PTypography as=\"h2\" className=\"p-section-header__title\" variant=\"body\">\n {title}\n </PTypography>\n </div>\n );\n }\n\n return (\n <Stack\n className={cn(\"p-section-header p-section-header--default\", className)}\n >\n <PTypography className=\"p-section-header__title\" variant=\"body-wide\">\n {title}\n </PTypography>\n </Stack>\n );\n}\n","import { forwardRef, type InputHTMLAttributes, type ReactNode, useId, useState } from 'react';\nimport './PTextInput.css';\nimport cn from '../../utils/cn';\n\nexport type PTextInputRef = HTMLInputElement;\n\nexport type PTextInputProps = {\n /**\n * Applied to the root wrapper element.\n * Override design tokens via CSS custom properties, e.g.:\n * `[--p-input-ring:var(--p-color-info)] [--p-input-bg:var(--p-color-info-surface)]`\n */\n className?: string;\n /** Applied to the inner `<input>` element for layout / spacing overrides. */\n inputClassName?: string;\n /** Visible label — doubles as the floating label and the placeholder. */\n label: string;\n /** Shown below the field when there is no error. */\n helperText?: string;\n isError?: boolean;\n /** Shown below the field when `isError` is true. Announced immediately via `role=\"alert\"`. */\n errorMessage?: string;\n /** Decorative element placed on the trailing edge. Ignored when `type=\"password\"`. */\n rightAdornment?: ReactNode;\n} & Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'className' | 'placeholder' | 'aria-label' | 'aria-describedby'\n>;\n\n// ─── Inline SVG icons ────────────────────────────────────────────────────────\n\nfunction EyeIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className=\"p-text-input__icon\"\n >\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n className=\"p-text-input__icon\"\n >\n <path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\" />\n <path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\" />\n <path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\" />\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n </svg>\n );\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const PTextInput = forwardRef<PTextInputRef, PTextInputProps>(\n (\n {\n className,\n inputClassName,\n type,\n label,\n helperText,\n id,\n isError = false,\n errorMessage,\n rightAdornment,\n disabled,\n readOnly,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const errorId = `${inputId}-error`;\n const helperId = `${inputId}-helper`;\n\n const isPassword = type === 'password';\n const hasRightAdornment = Boolean(rightAdornment) && !isPassword;\n const [showPassword, setShowPassword] = useState(false);\n\n const inputType = isPassword ? (showPassword ? 'text' : 'password') : (type ?? 'text');\n\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <div className={cn('p-text-input', className)} style={style}>\n <div className=\"p-text-input__field\">\n <input\n {...props}\n id={inputId}\n ref={ref}\n type={inputType}\n disabled={disabled}\n readOnly={readOnly}\n // Empty string required for the CSS peer-not-placeholder-shown trick.\n placeholder=\" \"\n // Accessibility\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={props.required}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n autoComplete={props.autoComplete ?? (isPassword ? 'current-password' : undefined)}\n className={cn(\n 'p-text-input__control',\n (isPassword || hasRightAdornment) && 'p-text-input__control--adorned',\n isError && 'p-text-input__control--error',\n hasRightAdornment && type === 'date' && 'p-text-input__control--date-adorned',\n inputClassName,\n )}\n />\n\n {/*\n * Floating label — shown above the value when focused or filled.\n * aria-hidden: the <label> below already provides the accessible name.\n */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-text-input__label p-text-input__floating-label',\n isError && 'p-text-input__label--error',\n )}\n >\n {label}\n </span>\n\n {/*\n * Placeholder label — centered in the field when empty and unfocused.\n * pointer-events-none lets clicks fall through to the input beneath;\n * htmlFor still wires up the accessible name correctly.\n */}\n <label\n htmlFor={inputId}\n className=\"p-text-input__label p-text-input__placeholder-label\"\n >\n {label}\n </label>\n\n {/* Password toggle */}\n {isPassword && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((v) => !v)}\n disabled={disabled}\n className=\"p-text-input__action\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n aria-controls={inputId}\n >\n {showPassword ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n )}\n\n {/* Right adornment — decorative, hidden from assistive tech */}\n {hasRightAdornment && (\n <span aria-hidden=\"true\" className=\"p-text-input__adornment\">\n {rightAdornment}\n </span>\n )}\n </div>\n\n {/* Error message — announced immediately via role=\"alert\" */}\n {isError && errorMessage && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"p-text-input__message p-text-input__message--error\"\n >\n {errorMessage}\n </p>\n )}\n\n {/* Helper text — visible only when there is no error */}\n {!isError && helperText && (\n <p\n id={helperId}\n className=\"p-text-input__message p-text-input__message--helper\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nPTextInput.displayName = 'PTextInput';\n","import { forwardRef, type TextareaHTMLAttributes, useId } from 'react';\nimport './PTextArea.css';\nimport cn from '../../utils/cn';\n\nexport type PTextAreaRef = HTMLTextAreaElement;\n\nexport type PTextAreaProps = {\n /**\n * Applied to the root wrapper element.\n * Override design tokens via CSS custom properties, e.g.:\n * `[--p-textarea-ring:var(--p-color-info)] [--p-textarea-bg:var(--p-color-info-surface)]`\n */\n className?: string;\n /** Applied to the inner `<textarea>` element for layout / spacing overrides. */\n textareaClassName?: string;\n /** Visible label — doubles as the floating label and the placeholder. */\n label: string;\n /** Shown below the field when there is no error. */\n helperText?: string;\n isError?: boolean;\n /** Shown below the field when `isError` is true. Announced immediately via `role=\"alert\"`. */\n errorMessage?: string;\n} & Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'className' | 'placeholder' | 'aria-label' | 'aria-describedby'\n>;\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport const PTextArea = forwardRef<PTextAreaRef, PTextAreaProps>(\n (\n {\n className,\n textareaClassName,\n label,\n helperText,\n id,\n isError = false,\n errorMessage,\n disabled,\n readOnly,\n rows = 4,\n style,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const textareaId = id ?? generatedId;\n const errorId = `${textareaId}-error`;\n const helperId = `${textareaId}-helper`;\n\n const describedBy = [\n isError && errorMessage ? errorId : null,\n !isError && helperText ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <div className={cn('p-text-area', className)} style={style}>\n <textarea\n {...props}\n id={textareaId}\n ref={ref}\n rows={rows}\n disabled={disabled}\n readOnly={readOnly}\n // Empty string required for the CSS peer-not-placeholder-shown trick.\n placeholder=\" \"\n // Accessibility\n aria-invalid={isError || undefined}\n aria-describedby={describedBy}\n aria-required={props.required}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={cn(\n 'p-text-area__control',\n isError && 'p-text-area__control--error',\n textareaClassName,\n )}\n />\n\n {/*\n * Floating label — shown above the value when focused or filled.\n * aria-hidden: the <label> below already provides the accessible name.\n */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'p-text-area__label p-text-area__floating-label',\n isError && 'p-text-area__label--error',\n )}\n >\n {label}\n </span>\n\n {/*\n * Placeholder label — sits near the top of the field when empty and unfocused.\n * pointer-events-none lets clicks fall through to the textarea beneath;\n * htmlFor still wires up the accessible name correctly.\n */}\n <label\n htmlFor={textareaId}\n className=\"p-text-area__label p-text-area__placeholder-label\"\n >\n {label}\n </label>\n\n {/* Error message — announced immediately via role=\"alert\" */}\n {isError && errorMessage && (\n <p\n id={errorId}\n role=\"alert\"\n className=\"p-text-area__message p-text-area__message--error\"\n >\n {errorMessage}\n </p>\n )}\n\n {/* Helper text — visible only when there is no error */}\n {!isError && helperText && (\n <p\n id={helperId}\n className=\"p-text-area__message p-text-area__message--helper\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nPTextArea.displayName = 'PTextArea';\n"],"names":["Row","children","gap","alignItems","justifyContent","className","jsx","cn","Stack","PBadge","forwardRef","Element","variant","size","appearance","isPinging","leftIcon","rightIcon","props","ref","jsxs","PButton","fullWidth","isActive","isLoading","isUnavailable","buttonClassName","content","Fragment","anchorDisabled","onClick","anchorProps","handleClick","event","type","buttonDisabled","buttonProps","r","f","n","clsx","falsyToString","value","cx","cva","base","config","variants","defaultVariants","getVariantClassNames","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","key","getCompoundVariantClassNames","param1","cvClass","cvClassName","compoundVariantOptions","fontVariantsMap","PTypographyVariants","PTypography","hasRenderableNode","node","renderMetaNode","getCardSizeValue","PCard","prefix","eyebrow","title","description","media","actions","density","width","minWidth","height","minHeight","style","isInteractive","cardClassName","cardStyle","getSizeValue","getColumnConfig","columns","PCardGrid","minCardWidth","align","columnConfig","gridStyle","ChevronDownIcon","CheckIcon","XIcon","normalizeText","filterOptions","options","query","normalizedQuery","option","searchableText","getFirstEnabledIndex","getSelectedIndex","selectedValue","selectedIndex","getNextEnabledIndex","activeIndex","direction","nextIndex","attempt","_a","assignRef","PCombobox","label","defaultValue","selectedOptionProp","onValueChange","queryProp","defaultQuery","onQueryChange","filterMode","isLoadingMore","hasMore","onLoadMore","placeholder","searchPlaceholder","emptyText","loadingText","loadingMoreText","loadMoreText","helperText","isError","errorMessage","name","disabled","readOnly","required","clearable","inputClassName","id","generatedId","useId","rootId","labelId","inputId","listboxId","helperId","errorId","rootRef","useRef","inputRef","modalInputRef","hiddenInputRef","activeOptionRef","panelRef","isControlled","isQueryControlled","internalValue","setInternalValue","useState","selectedOption","internalQuery","setInternalQuery","isOpen","setIsOpen","isModalViewport","setIsModalViewport","filteredOptions","useMemo","setActiveIndex","activeOption","activeOptionId","modalTitleId","messageId","hasSelection","canClear","inputValue","showInitialLoading","showFooterLoading","showLoadMore","useEffect","currentIndex","matcher","mediaQuery","syncModalViewport","_b","setRootRef","setSearchQuery","nextQuery","source","requestLoadMore","scrollHeight","clientHeight","commitValue","nextOption","nextValue","openCombobox","nextOptions","closeCombobox","handleInputChange","handleInputKeyDown","handleOptionPointerDown","handleClear","handlePanelScroll","panel","handleBlur","groups","accumulator","group","existingGroup","item","optionIndex","isSelected","dayFormatter","toLocalDate","parts","year","month","day","date","toIsoDate","startOfMonth","endOfMonth","addMonths","months","addMonthsClamped","monthStart","lastDay","addDays","days","isSameDay","a","b","getToday","today","getCalendarDays","monthDate","weekStartsOn","offset","gridStart","_","index","resolvePresetDate","preset","getMonthLabel","locale","getMonthOptions","getDateLabel","getDayLabel","getWeekdayLabels","baseSunday","isBeforeDate","minDate","isAfterDate","maxDate","isSameMonth","isMonthDisabled","monthEnd","clampVisibleMonth","getFocusableDateInMonth","preferredDate","nextDate","getYearOptions","visibleMonth","visibleYear","defaultStartYear","defaultEndYear","startYear","endYear","firstYear","lastYear","PDatePicker","presets","customLabel","showCustom","presetColumns","min","max","panelId","selectedDate","setVisibleMonth","focusedDate","setFocusedDate","calendarTriggerRef","dayRefs","shouldFocusCalendarDateRef","calendarDays","weekdayLabels","monthOptions","yearOptions","hasPresets","shouldRenderCustom","presetColumnsStyle","displayValue","selectedMatchesPreset","isCustomActive","previousMonth","nextMonth","isPreviousMonthDisabled","isNextMonthDisabled","setDateValue","openCalendar","trigger","nextFocusedDate","closeCalendar","restoreFocus","updateVisibleMonth","clampedMonth","handleMonthChange","handleYearChange","nextYear","handlePresetClick","presetDate","handleDayClick","focusCalendarDate","handleDayKeyDown","weekOffset","CalendarIcon","ChevronLeftIcon","ChevronRightIcon","weekday","isoDate","isOutsideMonth","isToday","isDisabled","PDatePickerPresets","isInRange","startDate","endDate","normalizeRange","resolvePresetRange","getRangeDates","isSameRange","getRangeLabel","PDateRangePicker","nameStart","nameEnd","hasCompleteRange","setRangeValue","range","nextStartDate","nextEndDate","normalizedRange","normalizedDates","presetRange","isRangeStart","isRangeEnd","isRangeMiddle","PDateRangePickerPresets","weekStart","start","end","lastMonth","PHighlight","color","textColor","highlightStyle","PHorizontalSlider","ariaLabel","snap","scrollerClassName","listClassName","itemClassName","sliderStyle","child","getSelectValue","PSelect","selectClassName","hideLabel","onChange","selectId","hasValue","describedBy","groupedOptions","handleChange","clampPage","page","pageCount","getRange","getPaginationItems","siblingCount","boundaryCount","normalizedPageCount","normalizedPage","normalizedSiblingCount","normalizedBoundaryCount","totalVisible","edgeWindowCount","startPages","endPages","startWindowEnd","endWindowStart","middleStart","middleEnd","getDefaultSummary","totalItems","pageSize","itemLabel","PaginationButton","PPagination","pageSizeOptions","hasPreviousPage","hasNextPage","showRowsPerPage","onPageChange","onPageSizeChange","summary","currentPage","canRequestPage","canGoPrevious","canGoNext","pageItems","shouldShowRowsPerPage","summaryText","handlePageChange","nextPage","clampedNextPage","nextPageSize","getColumnLabel","column","getCellContent","row","rowIndex","getNextSortDirection","hasClosest","target","hasContains","isInteractiveTarget","container","interactiveElement","PTableComponent","rows","caption","captionHidden","stickyHeader","stickyFirstColumn","loadingLabel","emptyState","errorState","getRowId","getRowTone","onRowClick","renderRowActions","onSortChange","tableClassName","hasRows","hasActions","activeState","visibleMobileColumns","columnCount","handleRowClick","handleRowKeyDown","nextSortDirection","ariaSort","rowId","tone","rowContent","primaryColumn","detailColumns","PTable","PSectionHeader","EyeIcon","EyeOffIcon","PTextInput","rightAdornment","isPassword","hasRightAdornment","showPassword","setShowPassword","inputType","v","PTextArea","textareaClassName","textareaId"],"mappings":"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","x_google_ignoreList":[4,5]}