@humain/ui 2.4.2 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index194.js +6 -8
- package/dist/index194.js.map +1 -1
- package/dist/index24.js +1 -1
- package/dist/index24.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/wc/AIClarificationCard.js +1 -1
- package/dist/wc/AIContainer.js +1 -1
- package/dist/wc/AIForm.js +17 -17
- package/dist/wc/AIInput.js +1 -1
- package/dist/wc/AIMermaidDiagram.js +1 -1
- package/dist/wc/AIMessage.js +1 -1
- package/dist/wc/AIScrollButton.js +4 -4
- package/dist/wc/AIToolCall.js +5 -5
- package/dist/wc/AppSidebar.constants.js +1 -1
- package/dist/wc/AvatarFallback.js +5 -5
- package/dist/wc/CheckboxIndicator.js +7 -7
- package/dist/wc/CollapsiblePanel.js +1 -1
- package/dist/wc/DialogTrigger.js +9 -9
- package/dist/wc/DropdownMenu.js +16 -16
- package/dist/wc/MenuSubmenuTrigger.js +31 -31
- package/dist/wc/PopoverDescription.js +30 -30
- package/dist/wc/PrehydrationScript.js +1 -1
- package/dist/wc/Select.js +18 -18
- package/dist/wc/SelectSeparator.js +72 -72
- package/dist/wc/SelectSeparator.js.map +1 -1
- package/dist/wc/Tabs.js +18 -18
- package/dist/wc/TooltipProvider.js +9 -9
- package/dist/wc/chart.js +1 -1
- package/dist/wc/chunk-75Z2AOVW.js +39 -39
- package/dist/wc/chunk-OSK3NFVY.js +32 -32
- package/dist/wc/command.js +4 -4
- package/dist/wc/form-field.js +1 -1
- package/dist/wc/form-fieldset.js +5 -5
- package/dist/wc/hf-accordion-card.js +4 -4
- package/dist/wc/hf-accordion.js +6 -6
- package/dist/wc/hf-ai-feedback-bar.js +5 -5
- package/dist/wc/hf-ai-reasoning-block.js +6 -6
- package/dist/wc/hf-ai-system-message.js +1 -1
- package/dist/wc/hf-ai-tool-run.js +1 -1
- package/dist/wc/hf-area-chart.js +15 -15
- package/dist/wc/hf-autocomplete.js +36 -36
- package/dist/wc/hf-bar-chart.js +4 -4
- package/dist/wc/hf-calendar.js +4 -4
- package/dist/wc/hf-carousel.js +1 -1
- package/dist/wc/hf-context-menu.js +8 -8
- package/dist/wc/hf-donut-chart.js +10 -10
- package/dist/wc/hf-empty-state.js +87 -88
- package/dist/wc/hf-empty-state.js.map +1 -1
- package/dist/wc/hf-history.js +4 -4
- package/dist/wc/hf-horizontal-bar-chart.js +7 -7
- package/dist/wc/hf-hover-card.js +6 -6
- package/dist/wc/hf-line-chart.js +4 -4
- package/dist/wc/hf-metric-card.js +5 -5
- package/dist/wc/hf-metric-item.js +8 -8
- package/dist/wc/hf-metric-item.js.map +1 -1
- package/dist/wc/hf-nav-account-menu.js +4 -4
- package/dist/wc/hf-notification-panel.js +2 -2
- package/dist/wc/hf-pie-chart.js +17 -17
- package/dist/wc/hf-radar-chart.js +16 -16
- package/dist/wc/hf-section-header.js +6 -6
- package/dist/wc/hf-sheet.js +1 -1
- package/dist/wc/hf-sparkline-chart.js +5 -5
- package/dist/wc/hf-steps.js +6 -6
- package/dist/wc/journeyDiagram-3NMN7TZE.js +10 -10
- package/dist/wc/pieDiagram-E7YTZNPT.js +16 -16
- package/dist/wc/popupStateMapping.js +53 -53
- package/dist/wc/popupStateMapping.js.map +1 -1
- package/dist/wc/selection-group.js +1 -1
- package/dist/wc/selection-group.js.map +1 -1
- package/dist/wc/{useOpenChangeComplete.js → stateAttributesMapping.js} +21 -21
- package/dist/wc/stateAttributesMapping.js.map +1 -0
- package/dist/wc/stateDiagram-D77RDMKH.js +3 -3
- package/dist/wc/timeline-definition-24CTP7MA.js +19 -19
- package/dist/wc/useCollapsiblePanel.js +3 -3
- package/dist/wc/usePopupHandleStore.js +4 -4
- package/dist/wc/useScrollLock.js +1 -1
- package/dist/wc/vendor/recharts.js +525 -524
- package/dist/wc/vendor/recharts.js.map +1 -1
- package/dist/wc/xychartDiagram-S5SC5T6Z.js +6 -6
- package/dist/wc-react/AIClarificationCard.js +1 -1
- package/dist/wc-react/AIContainer.js +1 -1
- package/dist/wc-react/AIForm.js +17 -17
- package/dist/wc-react/AIInput.js +1 -1
- package/dist/wc-react/AIMermaidDiagram.js +1 -1
- package/dist/wc-react/AIMessage.js +1 -1
- package/dist/wc-react/AIScrollButton.js +4 -4
- package/dist/wc-react/AIToolCall.js +5 -5
- package/dist/wc-react/AppSidebar.constants.js +1 -1
- package/dist/wc-react/AvatarFallback.js +5 -5
- package/dist/wc-react/CheckboxIndicator.js +7 -7
- package/dist/wc-react/CollapsiblePanel.js +1 -1
- package/dist/wc-react/DialogTrigger.js +9 -9
- package/dist/wc-react/DropdownMenu.js +16 -16
- package/dist/wc-react/FloatingPortalLite.js +3 -3
- package/dist/wc-react/MenuSubmenuTrigger.js +31 -31
- package/dist/wc-react/PopoverDescription.js +31 -31
- package/dist/wc-react/PrehydrationScript.js +1 -1
- package/dist/wc-react/Select.js +18 -18
- package/dist/wc-react/SelectSeparator.js +71 -70
- package/dist/wc-react/SelectSeparator.js.map +1 -1
- package/dist/wc-react/Tabs.js +18 -18
- package/dist/wc-react/TooltipProvider.js +9 -9
- package/dist/wc-react/chart.js +1 -1
- package/dist/wc-react/chunk-75Z2AOVW.js +39 -39
- package/dist/wc-react/chunk-OSK3NFVY.js +32 -32
- package/dist/wc-react/command.js +4 -4
- package/dist/wc-react/form-field.js +1 -1
- package/dist/wc-react/form-fieldset.js +77 -77
- package/dist/wc-react/hf-accordion-card.js +4 -4
- package/dist/wc-react/hf-accordion.js +6 -6
- package/dist/wc-react/hf-ai-feedback-bar.js +5 -5
- package/dist/wc-react/hf-ai-reasoning-block.js +6 -6
- package/dist/wc-react/hf-ai-system-message.js +1 -1
- package/dist/wc-react/hf-ai-tool-run.js +1 -1
- package/dist/wc-react/hf-autocomplete.js +37 -37
- package/dist/wc-react/hf-calendar.js +4 -4
- package/dist/wc-react/hf-carousel.js +1 -1
- package/dist/wc-react/hf-context-menu.js +8 -8
- package/dist/wc-react/hf-data-table.js +1 -1
- package/dist/wc-react/hf-empty-state.js +87 -88
- package/dist/wc-react/hf-empty-state.js.map +1 -1
- package/dist/wc-react/hf-history.js +4 -4
- package/dist/wc-react/hf-hover-card.js +6 -6
- package/dist/wc-react/hf-metric-item.js +6 -6
- package/dist/wc-react/hf-metric-item.js.map +1 -1
- package/dist/wc-react/hf-nav-account-menu.js +4 -4
- package/dist/wc-react/hf-notification-panel.js +2 -2
- package/dist/wc-react/hf-section-header.js +6 -6
- package/dist/wc-react/hf-sheet.js +1 -1
- package/dist/wc-react/hf-steps.js +5 -5
- package/dist/wc-react/journeyDiagram-3NMN7TZE.js +10 -10
- package/dist/wc-react/pieDiagram-E7YTZNPT.js +16 -16
- package/dist/wc-react/popupStateMapping.js +54 -54
- package/dist/wc-react/popupStateMapping.js.map +1 -1
- package/dist/wc-react/selection-group.js +1 -1
- package/dist/wc-react/selection-group.js.map +1 -1
- package/dist/wc-react/{useOpenChangeComplete.js → stateAttributesMapping.js} +19 -19
- package/dist/wc-react/stateAttributesMapping.js.map +1 -0
- package/dist/wc-react/stateDiagram-D77RDMKH.js +3 -3
- package/dist/wc-react/timeline-definition-24CTP7MA.js +19 -19
- package/dist/wc-react/useCollapsiblePanel.js +3 -3
- package/dist/wc-react/usePopupHandleStore.js +3 -3
- package/dist/wc-react/useScrollLock.js +1 -1
- package/dist/wc-react/vendor/recharts.js +525 -524
- package/dist/wc-react/vendor/recharts.js.map +1 -1
- package/dist/wc-react/xychartDiagram-S5SC5T6Z.js +6 -6
- package/package.json +1 -1
- package/skills/humain-ui/SKILL.md +1 -1
- package/skills/humain-ui-wc/SKILL.md +1 -1
- package/skills/humain-ui-wc.skill +0 -0
- package/skills/humain-ui.skill +0 -0
- package/dist/wc/useOpenChangeComplete.js.map +0 -1
- package/dist/wc-react/useOpenChangeComplete.js.map +0 -1
|
@@ -159,7 +159,7 @@ var S = {
|
|
|
159
159
|
className: c("shrink-0 rounded-md border border-border bg-card/60", "flex items-center justify-center", "dark:border-border", d, n),
|
|
160
160
|
style: { boxShadow: "var(--shadow-inset-ring)" },
|
|
161
161
|
children: /* @__PURE__ */ i("div", {
|
|
162
|
-
className: c("text-secondary-foreground", t),
|
|
162
|
+
className: c("text-secondary-foreground [&>svg]:block [&>svg]:size-full", t),
|
|
163
163
|
children: a
|
|
164
164
|
})
|
|
165
165
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-group.js","names":[],"sources":["../../src/components/ui/selection-group.tsx"],"sourcesContent":["'use client';\n\nimport { cva } from 'class-variance-authority';\nimport { Minus } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type SelectionColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'info'\n | 'destructive';\n\nexport type SelectionSize = 'sm' | 'md' | 'lg';\n\nexport type SelectionVariant =\n | 'default'\n | 'card'\n | 'pill'\n | 'stacked'\n | 'icon-simple'\n | 'icon-card'\n | 'avatar'\n | 'payment'\n | 'simple'\n | 'chip';\n\nexport interface SelectionItem {\n /** Unique value for the option */\n value: string;\n /** Display label */\n label: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Secondary text (e.g., \"$10/month\") */\n subtext?: string;\n /** Supporting description text */\n description?: string;\n /** Leading icon component */\n icon?: React.ReactNode;\n /** Avatar element */\n avatar?: React.ReactNode;\n /** Image URL */\n image?: string;\n /** Alt text for the image (defaults to \"\" if omitted) */\n imageAlt?: string;\n /** Position of the image */\n imagePosition?: 'top' | 'left' | 'trailing';\n /** Badge element */\n badge?: React.ReactNode;\n /** Dot color for chip variant (named color or hex) */\n dotColor?: string;\n /** Price display (e.g., \"$10\") */\n price?: string;\n /** Price period (e.g., \"per month\") */\n pricePeriod?: string;\n /** Payment icon element */\n paymentIcon?: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n}\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\ninterface UseSelectionStateOptions {\n /** Controlled value */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n}\n\n/**\n * Hook for managing single selection state (radio behavior).\n * Supports both controlled and uncontrolled modes.\n */\nexport function useSelectionState(\n options: UseSelectionStateOptions = {},\n): [string | undefined, (value: string) => void] {\n const { value: controlledValue, defaultValue, onValueChange } = options;\n\n const [internalValue, setInternalValue] = React.useState<string | undefined>(\n defaultValue,\n );\n\n const isControlled = controlledValue !== undefined;\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n const setValue = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n return [selectedValue, setValue];\n}\n\ninterface UseMultiSelectionStateOptions {\n /** Controlled value */\n value?: string[];\n /** Default value for uncontrolled mode */\n defaultValue?: string[];\n /** Callback when value changes */\n onValueChange?: (value: string[]) => void;\n}\n\n/**\n * Hook for managing multi selection state (checkbox behavior).\n * Supports both controlled and uncontrolled modes.\n */\nexport function useMultiSelectionState(\n options: UseMultiSelectionStateOptions = {},\n): [string[], (value: string, checked: boolean) => void] {\n const { value: controlledValue, defaultValue = [], onValueChange } = options;\n\n const [internalValue, setInternalValue] =\n React.useState<string[]>(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const selectedValues = isControlled ? controlledValue : internalValue;\n\n const setValue = React.useCallback(\n (itemValue: string, checked: boolean) => {\n const newValue = checked\n ? [...selectedValues, itemValue]\n : selectedValues.filter((v) => v !== itemValue);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, selectedValues, onValueChange],\n );\n\n return [selectedValues, setValue];\n}\n\n// =============================================================================\n// Color Mappings\n// =============================================================================\n\nexport const selectionColorClasses: Record<\n SelectionColor,\n {\n indicator: string;\n indicatorChecked: string;\n border: string;\n bg: string;\n text: string;\n }\n> = {\n primary: {\n indicator: 'border-primary',\n indicatorChecked: 'bg-primary',\n border: 'border-primary',\n bg: 'bg-primary',\n text: 'text-primary-foreground',\n },\n secondary: {\n indicator: 'border-secondary',\n indicatorChecked: 'bg-secondary-foreground',\n border: 'border-secondary',\n bg: 'bg-secondary',\n text: 'text-secondary-foreground',\n },\n success: {\n indicator: 'border-success',\n indicatorChecked: 'bg-success',\n border: 'border-success',\n bg: 'bg-success',\n text: 'text-primary-foreground',\n },\n warning: {\n indicator: 'border-warning',\n indicatorChecked: 'bg-warning',\n border: 'border-warning',\n bg: 'bg-warning',\n text: 'text-primary-foreground',\n },\n info: {\n indicator: 'border-info',\n indicatorChecked: 'bg-info',\n border: 'border-info',\n bg: 'bg-info',\n text: 'text-primary-foreground',\n },\n destructive: {\n indicator: 'border-destructive',\n indicatorChecked: 'bg-destructive',\n border: 'border-destructive',\n bg: 'bg-destructive',\n text: 'text-primary-foreground',\n },\n};\n\n// =============================================================================\n// CVA Variants\n// =============================================================================\n\n/**\n * Selection group container variants.\n * Used for the outer wrapper of a group of selection items.\n */\nexport const selectionGroupVariants = cva('flex', {\n variants: {\n orientation: {\n horizontal: 'flex-row flex-wrap',\n vertical: 'flex-col',\n },\n gap: {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n gap: 'md',\n },\n});\n\n/**\n * Selection indicator variants (for both radio and checkbox).\n * Renders as a rounded indicator with border.\n */\nexport const selectionIndicatorVariants = cva(\n 'shrink-0 rounded-full border shadow-xs transition-all flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/**\n * Checkbox indicator variants (square with rounded corners).\n */\nexport const checkboxIndicatorVariants = cva(\n 'shrink-0 border shadow-xs transition-[border-color,background-color,color,box-shadow] duration-200 ease-out motion-reduce:transition-none flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'size-4 rounded-[4px]',\n md: 'size-5 rounded-[5px]',\n lg: 'size-6 rounded-[6px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/**\n * Inner dot sizes for radio indicators when checked.\n */\nexport const innerDotSizes: Record<SelectionSize, string> = {\n sm: 'size-2',\n md: 'size-3',\n lg: 'size-4',\n};\n\n/**\n * Text size classes for selection labels.\n */\nexport const textSizeClasses: Record<SelectionSize, string> = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-sm',\n};\n\n/**\n * Icon size classes for checkbox indicators.\n */\nexport const iconSizeClasses: Record<SelectionSize, string> = {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-5',\n};\n\n// =============================================================================\n// Draw-on checkmark SVG (shared delight animation)\n// =============================================================================\n\nexport const CHECKMARK_PATH = 'M4 12l5 5L20 6';\n\nexport function DrawCheck({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(className, 'delight-check-draw')}\n >\n <path d={CHECKMARK_PATH} />\n </svg>\n );\n}\n\n// =============================================================================\n// SelectionIndicator Component\n// =============================================================================\n\nexport interface SelectionIndicatorProps {\n /** Type of indicator to render */\n type: 'checkbox' | 'radio';\n /** Whether the indicator is checked */\n checked?: boolean;\n /** Whether the indicator is disabled */\n disabled?: boolean;\n /** Size of the indicator */\n size?: SelectionSize;\n /** Color of the indicator */\n color?: SelectionColor;\n /** Additional CSS classes */\n className?: string;\n /** Whether the checkbox is in indeterminate state (checkbox only) */\n indeterminate?: boolean;\n}\n\n/**\n * SelectionIndicator renders either a checkbox or radio indicator based on type.\n * For checkbox: renders a check icon when checked.\n * For radio: renders an inner dot when checked.\n */\nconst SelectionIndicator = React.forwardRef<\n HTMLSpanElement,\n SelectionIndicatorProps\n>(\n (\n {\n type,\n checked = false,\n disabled = false,\n size = 'sm',\n color = 'primary',\n className,\n indeterminate = false,\n },\n ref,\n ) => {\n const colors = selectionColorClasses[color];\n\n if (type === 'checkbox') {\n return (\n <span\n ref={ref}\n data-slot=\"selection-indicator\"\n data-type=\"checkbox\"\n data-checked={checked}\n data-indeterminate={indeterminate || undefined}\n className={cn(\n checkboxIndicatorVariants({ size }),\n checked || indeterminate\n ? cn(\n colors.indicatorChecked,\n colors.border,\n colors.text,\n 'border',\n 'delight-check-bounce',\n )\n : 'border-input bg-background',\n disabled && 'opacity-50',\n className,\n )}\n aria-hidden=\"true\"\n >\n {(checked || indeterminate) &&\n (indeterminate ? (\n <Minus\n className={cn(\n iconSizeClasses[size],\n 'animate-[scale-in_150ms_ease-out] motion-reduce:animate-none',\n )}\n strokeWidth={3}\n />\n ) : (\n <DrawCheck className={iconSizeClasses[size]} />\n ))}\n </span>\n );\n }\n\n // Radio type\n return (\n <span\n ref={ref}\n data-slot=\"selection-indicator\"\n data-type=\"radio\"\n data-checked={checked}\n className={cn(\n selectionIndicatorVariants({ size }),\n 'transition-[background-color,border-color] duration-150 motion-reduce:transition-none',\n 'border-input bg-transparent',\n disabled && 'opacity-50',\n className,\n )}\n aria-hidden=\"true\"\n >\n <span\n className={cn(\n 'rounded-full transition-transform duration-150 ease-out motion-reduce:transition-none',\n colors.indicatorChecked,\n innerDotSizes[size],\n checked ? 'scale-100' : 'scale-0',\n )}\n />\n </span>\n );\n },\n);\n\nSelectionIndicator.displayName = 'SelectionIndicator';\n\n// =============================================================================\n// FeaturedIcon Component\n// =============================================================================\n\nexport interface FeaturedIconProps {\n /** The icon content to display */\n children: React.ReactNode;\n /** Size of the featured icon container */\n size?: SelectionSize;\n /** Additional CSS classes */\n className?: string;\n}\n\n// Hoisted outside component to avoid recreation on every render\nconst featuredIconContainerSizes: Record<SelectionSize, string> = {\n sm: 'size-8',\n md: 'size-10',\n lg: 'size-12',\n};\n\nconst featuredIconInnerSizes: Record<SelectionSize, string> = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n};\n\n/**\n * FeaturedIcon is a container for icons with border and shadow.\n * Used in icon-simple and icon-card variants.\n */\nconst FeaturedIcon = React.forwardRef<HTMLDivElement, FeaturedIconProps>(\n ({ children, size = 'sm', className }, ref) => {\n const containerSize = featuredIconContainerSizes[size];\n const innerSize = featuredIconInnerSizes[size];\n\n return (\n <div\n ref={ref}\n data-slot=\"featured-icon\"\n className={cn(\n 'shrink-0 rounded-md border border-border bg-card/60',\n 'flex items-center justify-center',\n 'dark:border-border',\n containerSize,\n className,\n )}\n style={{\n boxShadow: 'var(--shadow-inset-ring)',\n }}\n >\n <div className={cn('text-secondary-foreground', innerSize)}>\n {children}\n </div>\n </div>\n );\n },\n);\n\nFeaturedIcon.displayName = 'FeaturedIcon';\n\n// =============================================================================\n// ColorDot Component\n// =============================================================================\n\nexport type ColorDotColor =\n | 'gray'\n | 'orange'\n | 'red'\n | 'darkRed'\n | 'brand'\n | 'success'\n | 'warning'\n | 'error'\n | string; // Allow custom hex colors\n\nconst dotColorMap: Record<string, string> = {\n gray: 'bg-muted',\n orange: 'bg-warning',\n red: 'bg-destructive',\n darkRed: 'bg-destructive-hover',\n brand: 'bg-primary/10',\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n error: 'bg-destructive/10',\n};\n\nconst dotSizeMap: Record<SelectionSize, string> = {\n sm: 'size-[10px]',\n md: 'size-3',\n lg: 'size-3.5',\n};\n\nexport interface ColorDotProps {\n /** Color of the dot (named color or hex) */\n color?: ColorDotColor;\n /** Size of the dot */\n size?: SelectionSize;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * ColorDot renders a colored dot for chip variant.\n * Supports named colors (gray, orange, red, etc.) and hex colors.\n */\nconst ColorDot = React.forwardRef<HTMLSpanElement, ColorDotProps>(\n ({ color, size = 'sm', className }, ref) => {\n if (!color) return null;\n\n const colorClass = dotColorMap[color];\n const isHexColor = color.startsWith('#');\n\n return (\n <span\n ref={ref}\n data-slot=\"color-dot\"\n className={cn(\n 'shrink-0 rounded-full',\n dotSizeMap[size],\n !isHexColor && colorClass,\n className,\n )}\n style={isHexColor ? { backgroundColor: color } : undefined}\n aria-hidden=\"true\"\n />\n );\n },\n);\n\nColorDot.displayName = 'ColorDot';\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { ColorDot, FeaturedIcon, SelectionIndicator };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection-group.js","names":[],"sources":["../../src/components/ui/selection-group.tsx"],"sourcesContent":["'use client';\n\nimport { cva } from 'class-variance-authority';\nimport { Minus } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type SelectionColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'info'\n | 'destructive';\n\nexport type SelectionSize = 'sm' | 'md' | 'lg';\n\nexport type SelectionVariant =\n | 'default'\n | 'card'\n | 'pill'\n | 'stacked'\n | 'icon-simple'\n | 'icon-card'\n | 'avatar'\n | 'payment'\n | 'simple'\n | 'chip';\n\nexport interface SelectionItem {\n /** Unique value for the option */\n value: string;\n /** Display label */\n label: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Secondary text (e.g., \"$10/month\") */\n subtext?: string;\n /** Supporting description text */\n description?: string;\n /** Leading icon component */\n icon?: React.ReactNode;\n /** Avatar element */\n avatar?: React.ReactNode;\n /** Image URL */\n image?: string;\n /** Alt text for the image (defaults to \"\" if omitted) */\n imageAlt?: string;\n /** Position of the image */\n imagePosition?: 'top' | 'left' | 'trailing';\n /** Badge element */\n badge?: React.ReactNode;\n /** Dot color for chip variant (named color or hex) */\n dotColor?: string;\n /** Price display (e.g., \"$10\") */\n price?: string;\n /** Price period (e.g., \"per month\") */\n pricePeriod?: string;\n /** Payment icon element */\n paymentIcon?: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n}\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\ninterface UseSelectionStateOptions {\n /** Controlled value */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n}\n\n/**\n * Hook for managing single selection state (radio behavior).\n * Supports both controlled and uncontrolled modes.\n */\nexport function useSelectionState(\n options: UseSelectionStateOptions = {},\n): [string | undefined, (value: string) => void] {\n const { value: controlledValue, defaultValue, onValueChange } = options;\n\n const [internalValue, setInternalValue] = React.useState<string | undefined>(\n defaultValue,\n );\n\n const isControlled = controlledValue !== undefined;\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n const setValue = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n return [selectedValue, setValue];\n}\n\ninterface UseMultiSelectionStateOptions {\n /** Controlled value */\n value?: string[];\n /** Default value for uncontrolled mode */\n defaultValue?: string[];\n /** Callback when value changes */\n onValueChange?: (value: string[]) => void;\n}\n\n/**\n * Hook for managing multi selection state (checkbox behavior).\n * Supports both controlled and uncontrolled modes.\n */\nexport function useMultiSelectionState(\n options: UseMultiSelectionStateOptions = {},\n): [string[], (value: string, checked: boolean) => void] {\n const { value: controlledValue, defaultValue = [], onValueChange } = options;\n\n const [internalValue, setInternalValue] =\n React.useState<string[]>(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const selectedValues = isControlled ? controlledValue : internalValue;\n\n const setValue = React.useCallback(\n (itemValue: string, checked: boolean) => {\n const newValue = checked\n ? [...selectedValues, itemValue]\n : selectedValues.filter((v) => v !== itemValue);\n\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, selectedValues, onValueChange],\n );\n\n return [selectedValues, setValue];\n}\n\n// =============================================================================\n// Color Mappings\n// =============================================================================\n\nexport const selectionColorClasses: Record<\n SelectionColor,\n {\n indicator: string;\n indicatorChecked: string;\n border: string;\n bg: string;\n text: string;\n }\n> = {\n primary: {\n indicator: 'border-primary',\n indicatorChecked: 'bg-primary',\n border: 'border-primary',\n bg: 'bg-primary',\n text: 'text-primary-foreground',\n },\n secondary: {\n indicator: 'border-secondary',\n indicatorChecked: 'bg-secondary-foreground',\n border: 'border-secondary',\n bg: 'bg-secondary',\n text: 'text-secondary-foreground',\n },\n success: {\n indicator: 'border-success',\n indicatorChecked: 'bg-success',\n border: 'border-success',\n bg: 'bg-success',\n text: 'text-primary-foreground',\n },\n warning: {\n indicator: 'border-warning',\n indicatorChecked: 'bg-warning',\n border: 'border-warning',\n bg: 'bg-warning',\n text: 'text-primary-foreground',\n },\n info: {\n indicator: 'border-info',\n indicatorChecked: 'bg-info',\n border: 'border-info',\n bg: 'bg-info',\n text: 'text-primary-foreground',\n },\n destructive: {\n indicator: 'border-destructive',\n indicatorChecked: 'bg-destructive',\n border: 'border-destructive',\n bg: 'bg-destructive',\n text: 'text-primary-foreground',\n },\n};\n\n// =============================================================================\n// CVA Variants\n// =============================================================================\n\n/**\n * Selection group container variants.\n * Used for the outer wrapper of a group of selection items.\n */\nexport const selectionGroupVariants = cva('flex', {\n variants: {\n orientation: {\n horizontal: 'flex-row flex-wrap',\n vertical: 'flex-col',\n },\n gap: {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n gap: 'md',\n },\n});\n\n/**\n * Selection indicator variants (for both radio and checkbox).\n * Renders as a rounded indicator with border.\n */\nexport const selectionIndicatorVariants = cva(\n 'shrink-0 rounded-full border shadow-xs transition-all flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/**\n * Checkbox indicator variants (square with rounded corners).\n */\nexport const checkboxIndicatorVariants = cva(\n 'shrink-0 border shadow-xs transition-[border-color,background-color,color,box-shadow] duration-200 ease-out motion-reduce:transition-none flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'size-4 rounded-[4px]',\n md: 'size-5 rounded-[5px]',\n lg: 'size-6 rounded-[6px]',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/**\n * Inner dot sizes for radio indicators when checked.\n */\nexport const innerDotSizes: Record<SelectionSize, string> = {\n sm: 'size-2',\n md: 'size-3',\n lg: 'size-4',\n};\n\n/**\n * Text size classes for selection labels.\n */\nexport const textSizeClasses: Record<SelectionSize, string> = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-sm',\n};\n\n/**\n * Icon size classes for checkbox indicators.\n */\nexport const iconSizeClasses: Record<SelectionSize, string> = {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-5',\n};\n\n// =============================================================================\n// Draw-on checkmark SVG (shared delight animation)\n// =============================================================================\n\nexport const CHECKMARK_PATH = 'M4 12l5 5L20 6';\n\nexport function DrawCheck({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(className, 'delight-check-draw')}\n >\n <path d={CHECKMARK_PATH} />\n </svg>\n );\n}\n\n// =============================================================================\n// SelectionIndicator Component\n// =============================================================================\n\nexport interface SelectionIndicatorProps {\n /** Type of indicator to render */\n type: 'checkbox' | 'radio';\n /** Whether the indicator is checked */\n checked?: boolean;\n /** Whether the indicator is disabled */\n disabled?: boolean;\n /** Size of the indicator */\n size?: SelectionSize;\n /** Color of the indicator */\n color?: SelectionColor;\n /** Additional CSS classes */\n className?: string;\n /** Whether the checkbox is in indeterminate state (checkbox only) */\n indeterminate?: boolean;\n}\n\n/**\n * SelectionIndicator renders either a checkbox or radio indicator based on type.\n * For checkbox: renders a check icon when checked.\n * For radio: renders an inner dot when checked.\n */\nconst SelectionIndicator = React.forwardRef<\n HTMLSpanElement,\n SelectionIndicatorProps\n>(\n (\n {\n type,\n checked = false,\n disabled = false,\n size = 'sm',\n color = 'primary',\n className,\n indeterminate = false,\n },\n ref,\n ) => {\n const colors = selectionColorClasses[color];\n\n if (type === 'checkbox') {\n return (\n <span\n ref={ref}\n data-slot=\"selection-indicator\"\n data-type=\"checkbox\"\n data-checked={checked}\n data-indeterminate={indeterminate || undefined}\n className={cn(\n checkboxIndicatorVariants({ size }),\n checked || indeterminate\n ? cn(\n colors.indicatorChecked,\n colors.border,\n colors.text,\n 'border',\n 'delight-check-bounce',\n )\n : 'border-input bg-background',\n disabled && 'opacity-50',\n className,\n )}\n aria-hidden=\"true\"\n >\n {(checked || indeterminate) &&\n (indeterminate ? (\n <Minus\n className={cn(\n iconSizeClasses[size],\n 'animate-[scale-in_150ms_ease-out] motion-reduce:animate-none',\n )}\n strokeWidth={3}\n />\n ) : (\n <DrawCheck className={iconSizeClasses[size]} />\n ))}\n </span>\n );\n }\n\n // Radio type\n return (\n <span\n ref={ref}\n data-slot=\"selection-indicator\"\n data-type=\"radio\"\n data-checked={checked}\n className={cn(\n selectionIndicatorVariants({ size }),\n 'transition-[background-color,border-color] duration-150 motion-reduce:transition-none',\n 'border-input bg-transparent',\n disabled && 'opacity-50',\n className,\n )}\n aria-hidden=\"true\"\n >\n <span\n className={cn(\n 'rounded-full transition-transform duration-150 ease-out motion-reduce:transition-none',\n colors.indicatorChecked,\n innerDotSizes[size],\n checked ? 'scale-100' : 'scale-0',\n )}\n />\n </span>\n );\n },\n);\n\nSelectionIndicator.displayName = 'SelectionIndicator';\n\n// =============================================================================\n// FeaturedIcon Component\n// =============================================================================\n\nexport interface FeaturedIconProps {\n /** The icon content to display */\n children: React.ReactNode;\n /** Size of the featured icon container */\n size?: SelectionSize;\n /** Additional CSS classes */\n className?: string;\n}\n\n// Hoisted outside component to avoid recreation on every render\nconst featuredIconContainerSizes: Record<SelectionSize, string> = {\n sm: 'size-8',\n md: 'size-10',\n lg: 'size-12',\n};\n\nconst featuredIconInnerSizes: Record<SelectionSize, string> = {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n};\n\n/**\n * FeaturedIcon is a container for icons with border and shadow.\n * Used in icon-simple and icon-card variants.\n */\nconst FeaturedIcon = React.forwardRef<HTMLDivElement, FeaturedIconProps>(\n ({ children, size = 'sm', className }, ref) => {\n const containerSize = featuredIconContainerSizes[size];\n const innerSize = featuredIconInnerSizes[size];\n\n return (\n <div\n ref={ref}\n data-slot=\"featured-icon\"\n className={cn(\n 'shrink-0 rounded-md border border-border bg-card/60',\n 'flex items-center justify-center',\n 'dark:border-border',\n containerSize,\n className,\n )}\n style={{\n boxShadow: 'var(--shadow-inset-ring)',\n }}\n >\n <div\n className={cn(\n 'text-secondary-foreground [&>svg]:block [&>svg]:size-full',\n innerSize,\n )}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nFeaturedIcon.displayName = 'FeaturedIcon';\n\n// =============================================================================\n// ColorDot Component\n// =============================================================================\n\nexport type ColorDotColor =\n | 'gray'\n | 'orange'\n | 'red'\n | 'darkRed'\n | 'brand'\n | 'success'\n | 'warning'\n | 'error'\n | string; // Allow custom hex colors\n\nconst dotColorMap: Record<string, string> = {\n gray: 'bg-muted',\n orange: 'bg-warning',\n red: 'bg-destructive',\n darkRed: 'bg-destructive-hover',\n brand: 'bg-primary/10',\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n error: 'bg-destructive/10',\n};\n\nconst dotSizeMap: Record<SelectionSize, string> = {\n sm: 'size-[10px]',\n md: 'size-3',\n lg: 'size-3.5',\n};\n\nexport interface ColorDotProps {\n /** Color of the dot (named color or hex) */\n color?: ColorDotColor;\n /** Size of the dot */\n size?: SelectionSize;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * ColorDot renders a colored dot for chip variant.\n * Supports named colors (gray, orange, red, etc.) and hex colors.\n */\nconst ColorDot = React.forwardRef<HTMLSpanElement, ColorDotProps>(\n ({ color, size = 'sm', className }, ref) => {\n if (!color) return null;\n\n const colorClass = dotColorMap[color];\n const isHexColor = color.startsWith('#');\n\n return (\n <span\n ref={ref}\n data-slot=\"color-dot\"\n className={cn(\n 'shrink-0 rounded-full',\n dotSizeMap[size],\n !isHexColor && colorClass,\n className,\n )}\n style={isHexColor ? { backgroundColor: color } : undefined}\n aria-hidden=\"true\"\n />\n );\n },\n);\n\nColorDot.displayName = 'ColorDot';\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { ColorDot, FeaturedIcon, SelectionIndicator };\n"],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { n as g, t as d } from "./useIsoLayoutEffect.js";
|
|
|
2
2
|
import { n as A, t as c } from "./useAnimationFrame.js";
|
|
3
3
|
import * as m from "react";
|
|
4
4
|
import * as v from "react-dom";
|
|
5
|
+
function b(t) {
|
|
6
|
+
return t == null ? t : "current" in t ? t.current : t;
|
|
7
|
+
}
|
|
5
8
|
function p(t, a = !1, o = !1) {
|
|
6
9
|
const [e, r] = m.useState(t && a ? "idle" : void 0), [n, i] = m.useState(t);
|
|
7
10
|
return t && !n && (i(!0), r("starting")), !t && n && e !== "ending" && !o && r("ending"), !t && !n && e === "ending" && r(void 0), d(() => {
|
|
@@ -46,19 +49,11 @@ function p(t, a = !1, o = !1) {
|
|
|
46
49
|
transitionStatus: e
|
|
47
50
|
};
|
|
48
51
|
}
|
|
49
|
-
|
|
50
|
-
return t.startingStyle = "data-starting-style", t.endingStyle = "data-ending-style", t;
|
|
51
|
-
})({}), b = { "data-starting-style": "" }, h = { "data-ending-style": "" }, F = { transitionStatus(t) {
|
|
52
|
-
return t === "starting" ? b : t === "ending" ? h : null;
|
|
53
|
-
} };
|
|
54
|
-
function O(t) {
|
|
55
|
-
return t == null ? t : "current" in t ? t.current : t;
|
|
56
|
-
}
|
|
57
|
-
function S(t, a = !1) {
|
|
52
|
+
function h(t, a = !1) {
|
|
58
53
|
const o = A();
|
|
59
54
|
return g((e, r = null) => {
|
|
60
55
|
o.cancel();
|
|
61
|
-
const n =
|
|
56
|
+
const n = b(t);
|
|
62
57
|
if (n == null) return;
|
|
63
58
|
const i = n, s = () => {
|
|
64
59
|
v.flushSync(e);
|
|
@@ -98,8 +93,8 @@ function S(t, a = !1) {
|
|
|
98
93
|
o.request(f);
|
|
99
94
|
});
|
|
100
95
|
}
|
|
101
|
-
function
|
|
102
|
-
const { enabled: a = !0, open: o, ref: e, onComplete: r } = t, n = g(r), i =
|
|
96
|
+
function q(t) {
|
|
97
|
+
const { enabled: a = !0, open: o, ref: e, onComplete: r } = t, n = g(r), i = h(e, o);
|
|
103
98
|
m.useEffect(() => {
|
|
104
99
|
if (!a) return;
|
|
105
100
|
const s = new AbortController();
|
|
@@ -113,13 +108,18 @@ function M(t) {
|
|
|
113
108
|
i
|
|
114
109
|
]);
|
|
115
110
|
}
|
|
111
|
+
var F = /* @__PURE__ */ (function(t) {
|
|
112
|
+
return t.startingStyle = "data-starting-style", t.endingStyle = "data-ending-style", t;
|
|
113
|
+
})({}), O = { "data-starting-style": "" }, S = { "data-ending-style": "" }, M = { transitionStatus(t) {
|
|
114
|
+
return t === "starting" ? O : t === "ending" ? S : null;
|
|
115
|
+
} };
|
|
116
116
|
export {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
p as a,
|
|
118
|
+
h as i,
|
|
119
|
+
M as n,
|
|
120
|
+
b as o,
|
|
121
|
+
q as r,
|
|
122
|
+
F as t
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=stateAttributesMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateAttributesMapping.js","names":["React"],"sources":["../../../../node_modules/.bun/@base-ui+react@1.7.0+8a291ac5721f2b4f/node_modules/@base-ui/react/utils/resolveRef.mjs","../../../../node_modules/.bun/@base-ui+react@1.7.0+8a291ac5721f2b4f/node_modules/@base-ui/react/internals/useTransitionStatus.mjs","../../../../node_modules/.bun/@base-ui+react@1.7.0+8a291ac5721f2b4f/node_modules/@base-ui/react/internals/useAnimationsFinished.mjs","../../../../node_modules/.bun/@base-ui+react@1.7.0+8a291ac5721f2b4f/node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs","../../../../node_modules/.bun/@base-ui+react@1.7.0+8a291ac5721f2b4f/node_modules/@base-ui/react/internals/stateAttributesMapping.mjs"],"sourcesContent":["/**\n * If the provided argument is a ref object, returns its `current` value.\n * Otherwise, returns the argument itself.\n */\nexport function resolveRef(maybeRef) {\n if (maybeRef == null) {\n return maybeRef;\n }\n return 'current' in maybeRef ? maybeRef.current : maybeRef;\n}","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { AnimationFrame } from '@base-ui/utils/useAnimationFrame';\n/**\n * Provides a status string for CSS animations.\n * @param open - a boolean that determines if the element is open.\n * @param enableIdleState - a boolean that enables the `'idle'` state between `'starting'` and `'ending'`\n */\nexport function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) {\n const [transitionStatus, setTransitionStatus] = React.useState(open && enableIdleState ? 'idle' : undefined);\n const [mounted, setMounted] = React.useState(open);\n if (open && !mounted) {\n setMounted(true);\n setTransitionStatus('starting');\n }\n if (!open && mounted && transitionStatus !== 'ending' && !deferEndingState) {\n setTransitionStatus('ending');\n }\n if (!open && !mounted && transitionStatus === 'ending') {\n setTransitionStatus(undefined);\n }\n useIsoLayoutEffect(() => {\n if (!open && mounted && transitionStatus !== 'ending' && deferEndingState) {\n const frame = AnimationFrame.request(() => {\n setTransitionStatus('ending');\n });\n return () => {\n AnimationFrame.cancel(frame);\n };\n }\n return undefined;\n }, [open, mounted, transitionStatus, deferEndingState]);\n useIsoLayoutEffect(() => {\n if (!open || enableIdleState) {\n return undefined;\n }\n const frame = AnimationFrame.request(() => {\n // Avoid `flushSync` here due to Firefox.\n // See https://github.com/mui/base-ui/pull/3424\n setTransitionStatus(undefined);\n });\n return () => {\n AnimationFrame.cancel(frame);\n };\n }, [enableIdleState, open]);\n useIsoLayoutEffect(() => {\n if (!open || !enableIdleState) {\n return undefined;\n }\n if (open && mounted && transitionStatus !== 'idle') {\n setTransitionStatus('starting');\n }\n const frame = AnimationFrame.request(() => {\n setTransitionStatus('idle');\n });\n return () => {\n AnimationFrame.cancel(frame);\n };\n }, [enableIdleState, open, mounted, transitionStatus]);\n return {\n mounted,\n setMounted,\n transitionStatus\n };\n}","'use client';\n\nimport * as ReactDOM from 'react-dom';\nimport { useAnimationFrame } from '@base-ui/utils/useAnimationFrame';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { resolveRef } from \"../utils/resolveRef.mjs\";\n\n/**\n * Executes a function once all animations have finished on the provided element.\n * If an animation is canceled, waits for any replacement animations before executing.\n * @param elementOrRef - The element to watch for animations.\n * @param waitForStartingStyleRemoved - Whether to wait for [data-starting-style] to be removed before checking for animations.\n * @returns A function that takes a callback to execute once all animations have finished, and an optional AbortSignal to abort the callback\n */\nexport function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false) {\n const frame = useAnimationFrame();\n return useStableCallback((fnToExecute,\n /**\n * An optional [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that\n * can be used to abort `fnToExecute` before all the animations have finished.\n * @default null\n */\n signal = null) => {\n frame.cancel();\n const element = resolveRef(elementOrRef);\n if (element == null) {\n return;\n }\n const resolvedElement = element;\n const done = () => {\n // Synchronously flush the unmounting of the component so that the browser doesn't\n // paint: https://github.com/mui/base-ui/issues/979\n ReactDOM.flushSync(fnToExecute);\n };\n if (typeof resolvedElement.getAnimations !== 'function' || globalThis.BASE_UI_ANIMATIONS_DISABLED) {\n fnToExecute();\n return;\n }\n function exec() {\n Promise.all(resolvedElement.getAnimations().map(animation => animation.finished)).then(() => {\n if (!signal?.aborted) {\n done();\n }\n }, () => {\n if (signal?.aborted) {\n return;\n }\n const currentAnimations = resolvedElement.getAnimations();\n if (currentAnimations.some(animation => animation.pending || animation.playState !== 'finished')) {\n // Sometimes animations can be aborted because a property they depend on changes while the animation plays.\n // In such cases, we need to re-check if any new animations have started.\n exec();\n return;\n }\n done();\n });\n }\n if (waitForStartingStyleRemoved) {\n const startingStyleAttribute = 'data-starting-style';\n\n // If `[data-starting-style]` isn't present, fall back to waiting one more frame\n // to give \"open\" animations a chance to be registered.\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n frame.request(exec);\n return;\n }\n\n // Wait for `[data-starting-style]` to have been removed.\n const attributeObserver = new MutationObserver(() => {\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n attributeObserver.disconnect();\n exec();\n }\n });\n attributeObserver.observe(resolvedElement, {\n attributes: true,\n attributeFilter: [startingStyleAttribute]\n });\n signal?.addEventListener('abort', () => attributeObserver.disconnect(), {\n once: true\n });\n return;\n }\n frame.request(exec);\n });\n}","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useAnimationsFinished } from \"./useAnimationsFinished.mjs\";\n\n/**\n * Calls the provided function when the CSS open/close animation or transition completes.\n */\nexport function useOpenChangeComplete(parameters) {\n const {\n enabled = true,\n open,\n ref,\n onComplete: onCompleteParam\n } = parameters;\n const onComplete = useStableCallback(onCompleteParam);\n const runOnceAnimationsFinish = useAnimationsFinished(ref, open);\n React.useEffect(() => {\n if (!enabled) {\n return undefined;\n }\n const abortController = new AbortController();\n runOnceAnimationsFinish(onComplete, abortController.signal);\n return () => {\n abortController.abort();\n };\n }, [enabled, open, onComplete, runOnceAnimationsFinish]);\n}","export let TransitionStatusDataAttributes = /*#__PURE__*/function (TransitionStatusDataAttributes) {\n /**\n * Present when the component begins animating in.\n */\n TransitionStatusDataAttributes[\"startingStyle\"] = \"data-starting-style\";\n /**\n * Present when the component is animating out.\n */\n TransitionStatusDataAttributes[\"endingStyle\"] = \"data-ending-style\";\n return TransitionStatusDataAttributes;\n}({});\nconst STARTING_HOOK = {\n 'data-starting-style': ''\n};\nconst ENDING_HOOK = {\n 'data-ending-style': ''\n};\nexport const transitionStatusMapping = {\n transitionStatus(value) {\n if (value === 'starting') {\n return STARTING_HOOK;\n }\n if (value === 'ending') {\n return ENDING_HOOK;\n }\n return null;\n }\n};"],"x_google_ignoreList":[0,1,2,3,4],"mappings":";;;;AAIA,SAAgB,EAAW,GAAU;AACnC,SAAI,KAAY,OACP,IAEF,aAAa,IAAW,EAAS,UAAU;AACpD;ACCA,SAAgB,EAAoB,GAAM,IAAkB,IAAO,IAAmB,IAAO;AAC3F,QAAM,CAAC,GAAkB,CAAA,IAAuBA,EAAM,SAAS,KAAQ,IAAkB,SAAS,MAAS,GACrG,CAAC,GAAS,CAAA,IAAcA,EAAM,SAAS,CAAI;AACjD,SAAI,KAAQ,CAAC,MACX,EAAW,EAAI,GACf,EAAoB,UAAU,IAE5B,CAAC,KAAQ,KAAW,MAAqB,YAAY,CAAC,KACxD,EAAoB,QAAQ,GAE1B,CAAC,KAAQ,CAAC,KAAW,MAAqB,YAC5C,EAAoB,MAAS,GAE/B,EAAA,MAAyB;AACvB,QAAI,CAAC,KAAQ,KAAW,MAAqB,YAAY,GAAkB;AACzE,YAAM,IAAQ,EAAe,QAAA,MAAc;AACzC,QAAA,EAAoB,QAAQ;AAAA,MAC9B,CAAC;AACD,aAAA,MAAa;AACX,QAAA,EAAe,OAAO,CAAK;AAAA,MAC7B;AAAA,IACF;AAAA,EAEF,GAAG;AAAA,IAAC;AAAA,IAAM;AAAA,IAAS;AAAA,IAAkB;AAAA,EAAgB,CAAC,GACtD,EAAA,MAAyB;AACvB,QAAI,CAAC,KAAQ,EACX;AAEF,UAAM,IAAQ,EAAe,QAAA,MAAc;AAGzC,MAAA,EAAoB,MAAS;AAAA,IAC/B,CAAC;AACD,WAAA,MAAa;AACX,MAAA,EAAe,OAAO,CAAK;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,GAAiB,CAAI,CAAC,GAC1B,EAAA,MAAyB;AACvB,QAAI,CAAC,KAAQ,CAAC,EACZ;AAEF,IAAI,KAAQ,KAAW,MAAqB,UAC1C,EAAoB,UAAU;AAEhC,UAAM,IAAQ,EAAe,QAAA,MAAc;AACzC,MAAA,EAAoB,MAAM;AAAA,IAC5B,CAAC;AACD,WAAA,MAAa;AACX,MAAA,EAAe,OAAO,CAAK;AAAA,IAC7B;AAAA,EACF,GAAG;AAAA,IAAC;AAAA,IAAiB;AAAA,IAAM;AAAA,IAAS;AAAA,EAAgB,CAAC,GAC9C;AAAA,IACL,SAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,EACF;AACF;ACpDA,SAAgB,EAAsB,GAAc,IAA8B,IAAO;AACvF,QAAM,IAAQ,EAAkB;AAChC,SAAO,EAAA,CAAmB,GAM1B,IAAS,SAAS;AAChB,IAAA,EAAM,OAAO;AACb,UAAM,IAAU,EAAW,CAAY;AACvC,QAAI,KAAW,KACb;AAEF,UAAM,IAAkB,GAClB,IAAA,MAAa;AAGjB,MAAA,EAAS,UAAU,CAAW;AAAA,IAChC;AACA,QAAI,OAAO,EAAgB,iBAAkB,cAAc,WAAW,6BAA6B;AACjG,MAAA,EAAY;AACZ;AAAA,IACF;AACA,aAAS,IAAO;AACd,cAAQ,IAAI,EAAgB,cAAc,EAAE,IAAA,CAAI,MAAa,EAAU,QAAQ,CAAC,EAAE,KAAA,MAAW;AAC3F,QAAK,GAAQ,WACX,EAAK;AAAA,MAET,GAAA,MAAS;AACP,YAAI,CAAA,GAAQ,SAIZ;AAAA,cAD0B,EAAgB,cACtB,EAAE,KAAA,CAAK,MAAa,EAAU,WAAW,EAAU,cAAc,UAAU,GAAG;AAGhG,YAAA,EAAK;AACL;AAAA,UACF;AACA,UAAA,EAAK;AAAA;AAAA,MACP,CAAC;AAAA,IACH;AACA,QAAI,GAA6B;AAC/B,YAAM,IAAyB;AAI/B,UAAI,CAAC,EAAgB,aAAa,CAAsB,GAAG;AACzD,QAAA,EAAM,QAAQ,CAAI;AAClB;AAAA,MACF;AAGA,YAAM,IAAoB,IAAI,iBAAA,MAAuB;AACnD,QAAK,EAAgB,aAAa,CAAsB,MACtD,EAAkB,WAAW,GAC7B,EAAK;AAAA,MAET,CAAC;AACD,MAAA,EAAkB,QAAQ,GAAiB;AAAA,QACzC,YAAY;AAAA,QACZ,iBAAiB,CAAC,CAAsB;AAAA,MAC1C,CAAC,GACD,GAAQ,iBAAiB,SAAA,MAAe,EAAkB,WAAW,GAAG,EACtE,MAAM,GACR,CAAC;AACD;AAAA,IACF;AACA,IAAA,EAAM,QAAQ,CAAI;AAAA,EACpB,CAAC;AACH;AC5EA,SAAgB,EAAsB,GAAY;AAChD,QAAM,EACJ,SAAA,IAAU,IACV,MAAA,GACA,KAAA,GACA,YAAY,EAAA,IACV,GACE,IAAa,EAAkB,CAAe,GAC9C,IAA0B,EAAsB,GAAK,CAAI;AAC/D,EAAA,EAAM,UAAA,MAAgB;AACpB,QAAI,CAAC,EACH;AAEF,UAAM,IAAkB,IAAI,gBAAgB;AAC5C,WAAA,EAAwB,GAAY,EAAgB,MAAM,GAC1D,MAAa;AACX,MAAA,EAAgB,MAAM;AAAA,IACxB;AAAA,EACF,GAAG;AAAA,IAAC;AAAA,IAAS;AAAA,IAAM;AAAA,IAAY;AAAA,EAAuB,CAAC;AACzD;AC5BA,IAAW,IAA8C,0BAAU,GAAgC;AAIjG,SAAA,EAA+B,gBAAmB,uBAIlD,EAA+B,cAAiB,qBACzC;AACT,GAAE,CAAC,CAAC,GACE,IAAgB,EACpB,uBAAuB,GACzB,GACM,IAAc,EAClB,qBAAqB,GACvB,GACa,IAA0B,EACrC,iBAAiB,GAAO;AACtB,SAAI,MAAU,aACL,IAEL,MAAU,WACL,IAEF;AACT,EACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { bt as W, u as M, wt as _ } from "./vendor/recharts.js";
|
|
2
2
|
import { n as y } from "./chunk-Y2CYZVJY.js";
|
|
3
3
|
import { t as S } from "./chunk-X3CZISLH.js";
|
|
4
4
|
import { O as G, c as P, s as T, x as t } from "./chunk-DU6HZSFF.js";
|
|
@@ -87,11 +87,11 @@ var J = /* @__PURE__ */ y((e) => e.append("circle").attr("class", "start-state")
|
|
|
87
87
|
}
|
|
88
88
|
}, "getRelationType");
|
|
89
89
|
i.points = i.points.filter((s) => !Number.isNaN(s.y));
|
|
90
|
-
const n = i.points, x =
|
|
90
|
+
const n = i.points, x = _().x(function(s) {
|
|
91
91
|
return s.x;
|
|
92
92
|
}).y(function(s) {
|
|
93
93
|
return s.y;
|
|
94
|
-
}).curve(
|
|
94
|
+
}).curve(W), p = e.append("path").attr("d", x(n)).attr("id", "edge" + L).attr("class", "transition");
|
|
95
95
|
let a = "";
|
|
96
96
|
if (t().state.arrowMarkerAbsolute && (a = G(!0)), p.attr("marker-end", "url(" + a + "#" + o(N.relationType.DEPENDENCY) + "End)"), d.title !== void 0) {
|
|
97
97
|
const s = e.append("g").attr("class", "stateLabel"), { x: h, y: g } = R.calcLabelPosition(i.points), c = T.getRows(d.title);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Et as lt, u as Z } from "./vendor/recharts.js";
|
|
2
2
|
import { n as o, t as Ct } from "./chunk-Y2CYZVJY.js";
|
|
3
3
|
import { t as b } from "./chunk-X3CZISLH.js";
|
|
4
4
|
import { J as gt, a as Wt, b as ft, et as Pt, o as Bt, rt as Vt, tt as Ft, x as yt } from "./chunk-DU6HZSFF.js";
|
|
5
|
-
import { p as
|
|
6
|
-
import { a as
|
|
5
|
+
import { p as zt } from "./chunk-75Z2AOVW.js";
|
|
6
|
+
import { a as Ot } from "./mermaid.core.js";
|
|
7
7
|
var tt = (function() {
|
|
8
8
|
var e = /* @__PURE__ */ o(function(i, l, u, h) {
|
|
9
9
|
for (u = u || {}, h = i.length; h--; u[i[h]] = l) ;
|
|
@@ -218,7 +218,7 @@ var tt = (function() {
|
|
|
218
218
|
return typeof P != "number" && (P instanceof Array && (g = P, P = g.pop()), P = u.symbols_[P] || P), P;
|
|
219
219
|
}
|
|
220
220
|
o($, "lex");
|
|
221
|
-
for (var _, H, C, N, D, G = {}, K,
|
|
221
|
+
for (var _, H, C, N, D, G = {}, K, z, ot, j; ; ) {
|
|
222
222
|
if (C = h[h.length - 1], this.defaultActions[C] ? N = this.defaultActions[C] : ((_ === null || typeof _ > "u") && (_ = $()), N = S[C] && S[C][_]), typeof N > "u" || !N.length || !N[0]) {
|
|
223
223
|
var Y = "";
|
|
224
224
|
j = [];
|
|
@@ -239,12 +239,12 @@ Expecting ` + j.join(", ") + ", got '" + (this.terminals_[_] || _) + "'" : Y = "
|
|
|
239
239
|
h.push(_), x.push(w.yytext), p.push(w.yylloc), h.push(N[1]), _ = null, H ? (_ = H, H = null) : (W = w.yyleng, k = w.yytext, L = w.yylineno, T = w.yylloc, B > 0 && B--);
|
|
240
240
|
break;
|
|
241
241
|
case 2:
|
|
242
|
-
if (
|
|
243
|
-
first_line: p[p.length - (
|
|
242
|
+
if (z = this.productions_[N[1]][1], G.$ = x[x.length - z], G._$ = {
|
|
243
|
+
first_line: p[p.length - (z || 1)].first_line,
|
|
244
244
|
last_line: p[p.length - 1].last_line,
|
|
245
|
-
first_column: p[p.length - (
|
|
245
|
+
first_column: p[p.length - (z || 1)].first_column,
|
|
246
246
|
last_column: p[p.length - 1].last_column
|
|
247
|
-
}, v && (G._$.range = [p[p.length - (
|
|
247
|
+
}, v && (G._$.range = [p[p.length - (z || 1)].range[0], p[p.length - 1].range[1]]), D = this.performAction.apply(G, [
|
|
248
248
|
k,
|
|
249
249
|
W,
|
|
250
250
|
L,
|
|
@@ -253,7 +253,7 @@ Expecting ` + j.join(", ") + ", got '" + (this.terminals_[_] || _) + "'" : Y = "
|
|
|
253
253
|
x,
|
|
254
254
|
p
|
|
255
255
|
].concat(R)), typeof D < "u") return D;
|
|
256
|
-
|
|
256
|
+
z && (h = h.slice(0, -1 * z * 2), x = x.slice(0, -1 * z), p = p.slice(0, -1 * z)), h.push(this.productions_[N[1]][0]), x.push(G.$), p.push(G._$), ot = S[h[h.length - 2]][h[h.length - 1]], h.push(ot);
|
|
257
257
|
break;
|
|
258
258
|
case 3:
|
|
259
259
|
return !0;
|
|
@@ -844,10 +844,10 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
844
844
|
setConf: /* @__PURE__ */ o(() => {
|
|
845
845
|
}, "setConf"),
|
|
846
846
|
draw: ne
|
|
847
|
-
}, Q = 200,
|
|
847
|
+
}, Q = 200, O = 5, se = Q + O * 2, at = Q + 100, ae = at + O * 2, Mt = 10, oe = 0, dt = 20, At = 20, ut = 30, Rt = 50, le = /* @__PURE__ */ o(function(e, t, n, a) {
|
|
848
848
|
const r = yt(), c = r.timeline?.leftMargin ?? 50;
|
|
849
849
|
b.debug("timeline", a.db);
|
|
850
|
-
const s =
|
|
850
|
+
const s = Ot(t);
|
|
851
851
|
s.append("g");
|
|
852
852
|
const d = a.db.getTasks(), y = a.db.getCommonDb().getDiagramTitle();
|
|
853
853
|
b.debug("task", d), A.initGraphics(s);
|
|
@@ -858,14 +858,14 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
858
858
|
let u = 50;
|
|
859
859
|
const h = u, g = l, x = se + At, p = ae + Rt, S = g + x;
|
|
860
860
|
let k = 0;
|
|
861
|
-
const L = f && f.length > 0, W = L ? S : l + x, B = Math.max(50, x + p -
|
|
861
|
+
const L = f && f.length > 0, W = L ? S : l + x, B = Math.max(50, x + p - O * 2);
|
|
862
862
|
f.forEach(function(v) {
|
|
863
863
|
const E = {
|
|
864
864
|
number: k,
|
|
865
865
|
descr: v,
|
|
866
866
|
section: k,
|
|
867
867
|
width: B,
|
|
868
|
-
padding:
|
|
868
|
+
padding: O,
|
|
869
869
|
maxHeight: m
|
|
870
870
|
}, $ = A.getVirtualNodeHeight(s, E, r);
|
|
871
871
|
b.debug("sectionHeight before draw", $), m = Math.max(m, $);
|
|
@@ -878,7 +878,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
878
878
|
descr: E,
|
|
879
879
|
section: E.section,
|
|
880
880
|
width: Q,
|
|
881
|
-
padding:
|
|
881
|
+
padding: O,
|
|
882
882
|
maxHeight: i
|
|
883
883
|
}, _ = A.getVirtualNodeHeight(s, $, r);
|
|
884
884
|
b.debug("taskHeight before draw", _), i = Math.max(i, _);
|
|
@@ -889,7 +889,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
889
889
|
section: E.section,
|
|
890
890
|
number: E.section,
|
|
891
891
|
width: at,
|
|
892
|
-
padding:
|
|
892
|
+
padding: O,
|
|
893
893
|
maxHeight: 50
|
|
894
894
|
};
|
|
895
895
|
H += A.getVirtualNodeHeight(s, N, r);
|
|
@@ -904,7 +904,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
904
904
|
descr: v,
|
|
905
905
|
section: k,
|
|
906
906
|
width: B,
|
|
907
|
-
padding:
|
|
907
|
+
padding: O,
|
|
908
908
|
maxHeight: m
|
|
909
909
|
};
|
|
910
910
|
b.debug("sectionNode", $);
|
|
@@ -923,7 +923,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
923
923
|
if (s.append("text").text(y).attr("x", R.width / 2 - c).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20), R = s.node()?.getBBox(), !R) throw new Error("bbox not found");
|
|
924
924
|
b.debug("bounds after title", R);
|
|
925
925
|
}
|
|
926
|
-
const [w] =
|
|
926
|
+
const [w] = zt(r.fontSize), M = (w ?? 16) * 2, F = (w ?? 16) * 0.5 + 20, T = s.append("g").attr("class", "lineWrapper");
|
|
927
927
|
T.append("line").attr("x1", W).attr("y1", h - M).attr("x2", W).attr("y2", R.y + R.height + F).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"), T.lower(), gt(void 0, s, r.timeline?.padding ?? 50, r.timeline?.useMaxWidth ?? !1);
|
|
928
928
|
}, "draw"), pt = /* @__PURE__ */ o(function(e, t, n, a, r, c, s, d, y) {
|
|
929
929
|
for (const f of t) {
|
|
@@ -932,7 +932,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
932
932
|
section: n,
|
|
933
933
|
number: n,
|
|
934
934
|
width: Q,
|
|
935
|
-
padding:
|
|
935
|
+
padding: O,
|
|
936
936
|
maxHeight: c
|
|
937
937
|
};
|
|
938
938
|
b.debug("taskNode", m);
|
|
@@ -953,7 +953,7 @@ var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
|
|
|
953
953
|
section: n,
|
|
954
954
|
number: n,
|
|
955
955
|
width: at,
|
|
956
|
-
padding:
|
|
956
|
+
padding: O,
|
|
957
957
|
maxHeight: 0
|
|
958
958
|
};
|
|
959
959
|
b.debug("eventNode", f);
|
|
@@ -7,7 +7,7 @@ import { t as ie } from "./useBaseUiId.js";
|
|
|
7
7
|
import { t as ae } from "./addEventListener.js";
|
|
8
8
|
import { t as b } from "./useAnimationFrame.js";
|
|
9
9
|
import { t as ue } from "./useValueAsRef.js";
|
|
10
|
-
import {
|
|
10
|
+
import { a as ce, i as le, r as fe, t as Y } from "./stateAttributesMapping.js";
|
|
11
11
|
import * as o from "react";
|
|
12
12
|
function Ie(e) {
|
|
13
13
|
const { open: r, defaultOpen: i, onOpenChange: l, disabled: u } = e, [n, g] = te({
|
|
@@ -15,7 +15,7 @@ function Ie(e) {
|
|
|
15
15
|
default: i,
|
|
16
16
|
name: "Collapsible",
|
|
17
17
|
state: "open"
|
|
18
|
-
}), { mounted: s, setMounted: p, transitionStatus: O } =
|
|
18
|
+
}), { mounted: s, setMounted: p, transitionStatus: O } = ce(n, !0, !0), c = ie(), [f, m] = o.useState(), h = f === null ? void 0 : f ?? c, I = M((P) => {
|
|
19
19
|
const S = !n, v = $(se, P.nativeEvent);
|
|
20
20
|
l(S, v), !v.isCanceled && g(S);
|
|
21
21
|
});
|
|
@@ -62,7 +62,7 @@ var B = (function(e) {
|
|
|
62
62
|
width: void 0
|
|
63
63
|
};
|
|
64
64
|
function xe(e) {
|
|
65
|
-
const { externalRef: r, hiddenUntilFound: i, id: l, keepMounted: u, mounted: n, onOpenChange: g, open: s, setMounted: p, setOpen: O, transitionStatus: c } = e, f = o.useRef(null), m = o.useRef(null), [h, I] = o.useState(A), P = o.useRef(A), S = o.useRef(!1), v = o.useRef(s), F = o.useRef(!1), [j, w] = o.useState(!1), C = o.useRef(null), z = ne(r, f), U = ue(s), V =
|
|
65
|
+
const { externalRef: r, hiddenUntilFound: i, id: l, keepMounted: u, mounted: n, onOpenChange: g, open: s, setMounted: p, setOpen: O, transitionStatus: c } = e, f = o.useRef(null), m = o.useRef(null), [h, I] = o.useState(A), P = o.useRef(A), S = o.useRef(!1), v = o.useRef(s), F = o.useRef(!1), [j, w] = o.useState(!1), C = o.useRef(null), z = ne(r, f), U = ue(s), V = le(f), D = !s && !n, N = j ? "idle" : c, k = s && (v.current || F.current), q = !s && n && m.current === "css-animation" && h.height === void 0 && h.width === void 0 ? P.current : h, G = i && D && m.current !== "css-animation", d = M((t, a = !0) => {
|
|
66
66
|
a && (P.current = t), I(t);
|
|
67
67
|
}), E = M(() => {
|
|
68
68
|
C.current?.(), C.current = null;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ot as i } from "./vendor/recharts.js";
|
|
2
2
|
import { u } from "./useRenderElement.js";
|
|
3
3
|
import * as t from "react";
|
|
4
4
|
var c = i();
|
|
5
|
-
function
|
|
5
|
+
function a(r) {
|
|
6
6
|
const o = t.useCallback((e) => r === void 0 ? u : r.subscribeStore(e), [r]), s = t.useCallback(() => r === void 0 ? void 0 : r.store, [r]);
|
|
7
7
|
return (0, c.useSyncExternalStore)(o, s, () => r?.serverStore);
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
|
-
|
|
10
|
+
a as t
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
//# sourceMappingURL=usePopupHandleStore.js.map
|
|
@@ -12,8 +12,8 @@ import { o as Xe, s as ct, t as He } from "./element.js";
|
|
|
12
12
|
import { t as D } from "./addEventListener.js";
|
|
13
13
|
import { n as lt, t as Ot } from "./useAnimationFrame.js";
|
|
14
14
|
import { t as ie } from "./useValueAsRef.js";
|
|
15
|
-
import { r as z } from "./useOpenChangeComplete.js";
|
|
16
15
|
import { n as Re, t as Be } from "./useTimeout.js";
|
|
16
|
+
import { o as z } from "./stateAttributesMapping.js";
|
|
17
17
|
import * as y from "react";
|
|
18
18
|
import { jsx as Te, jsxs as It } from "react/jsx-runtime";
|
|
19
19
|
var ce = 0;
|