@primereact/headless 11.0.0-rc.1 → 11.0.0-rc.2
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/accordion/index.mjs +1 -2
- package/animateonscroll/index.mjs +1 -2
- package/autocomplete/index.mjs +1 -2
- package/avatar/index.mjs +1 -2
- package/avatargroup/index.mjs +0 -1
- package/badge/index.mjs +1 -2
- package/breadcrumb/index.mjs +0 -1
- package/button/index.mjs +0 -1
- package/card/index.mjs +0 -1
- package/carousel/index.mjs +1 -2
- package/carousel/useCarousel.d.ts +28 -15
- package/checkbox/index.mjs +1 -2
- package/checkboxgroup/index.mjs +1 -2
- package/chip/index.mjs +1 -2
- package/collapsible/index.mjs +1 -2
- package/compare/index.mjs +1 -2
- package/contextmenu/index.mjs +1 -2
- package/contextmenu/submenu/index.mjs +0 -1
- package/datatable/features/index.mjs +8 -9
- package/datatable/features/useDataTableExport.d.ts +1 -1
- package/datatable/features/useDataTableKeyboard.d.ts +1 -1
- package/datatable/features/useDataTableSelection.d.ts +4 -4
- package/datatable/index.mjs +8 -9
- package/datatable/useDataTable.d.ts +2 -2
- package/datatable/utils/index.mjs +0 -1
- package/dataview/index.mjs +1 -2
- package/datepicker/index.mjs +1 -2
- package/dialog/index.mjs +1 -2
- package/dialog/useDialog.d.ts +12 -12
- package/divider/index.mjs +0 -1
- package/divider/useDivider.d.ts +1 -1
- package/dnd/index.mjs +1 -2
- package/drawer/index.mjs +1 -2
- package/fieldset/index.mjs +1 -2
- package/fileupload/index.mjs +1 -2
- package/fileupload/useFileUpload.d.ts +3 -0
- package/floatlabel/index.mjs +0 -1
- package/fluid/index.mjs +0 -1
- package/focustrap/index.mjs +1 -2
- package/gallery/index.mjs +1 -2
- package/gallery/item/index.mjs +1 -2
- package/gallery/useGallery.d.ts +17 -9
- package/iconfield/index.mjs +0 -1
- package/iftalabel/index.mjs +0 -1
- package/inplace/index.mjs +1 -2
- package/inplace/useInplace.d.ts +18 -6
- package/inputcolor/colorManager.d.ts +1 -1
- package/inputcolor/index.mjs +1 -2
- package/inputgroup/index.mjs +0 -1
- package/inputnumber/index.mjs +1 -2
- package/inputotp/index.mjs +1 -2
- package/inputpassword/index.mjs +1 -2
- package/inputtags/index.mjs +1 -2
- package/inputtext/index.mjs +1 -2
- package/knob/index.mjs +1 -2
- package/label/index.mjs +0 -1
- package/listbox/index.mjs +1 -2
- package/menu/checkboxitem/index.mjs +1 -2
- package/menu/index.mjs +1 -2
- package/menu/radioitem/index.mjs +1 -2
- package/menu/submenu/index.mjs +1 -2
- package/message/index.mjs +1 -2
- package/metergroup/index.mjs +1 -2
- package/navigationmenu/index.mjs +1 -2
- package/orderlist/index.mjs +1 -2
- package/orderlist/useOrderList.d.ts +1 -0
- package/organizationchart/index.mjs +1 -2
- package/overlaybadge/index.mjs +0 -1
- package/package.json +9 -7
- package/paginator/index.mjs +1 -2
- package/paginator/usePaginator.d.ts +1 -1
- package/panel/index.mjs +1 -2
- package/picklist/index.mjs +1 -2
- package/popover/index.mjs +1 -2
- package/portal/index.mjs +0 -1
- package/positioner/index.mjs +1 -2
- package/positioner/usePositioner.anchor.d.ts +2 -2
- package/positioner/usePositioner.fallback.d.ts +2 -2
- package/progressbar/index.mjs +1 -2
- package/progressspinner/index.mjs +1 -2
- package/radiobutton/index.mjs +1 -2
- package/radiobuttongroup/index.mjs +1 -2
- package/rating/index.mjs +1 -2
- package/scrollarea/index.mjs +1 -2
- package/scrollarea/useScrollArea.d.ts +1 -1
- package/select/index.mjs +1 -2
- package/sidebar/index.mjs +1 -2
- package/sidebar/useSidebar.d.ts +30 -4
- package/sidebar/useSidebarLayout.d.ts +4 -4
- package/sidebar/useSidebarMenuItem.d.ts +0 -1
- package/skeleton/index.mjs +0 -1
- package/slider/index.mjs +1 -2
- package/speeddial/index.mjs +1 -2
- package/splitter/index.mjs +1 -2
- package/stepper/index.mjs +1 -2
- package/styleclass/index.mjs +1 -2
- package/tabs/index.mjs +1 -2
- package/tag/index.mjs +0 -1
- package/terminal/index.mjs +1 -2
- package/textarea/index.mjs +1 -2
- package/timeline/index.mjs +0 -1
- package/toast/index.mjs +1 -2
- package/toaster/index.mjs +1 -2
- package/togglebutton/index.mjs +1 -2
- package/togglebuttongroup/index.mjs +1 -2
- package/toggleswitch/index.mjs +1 -2
- package/toolbar/index.mjs +0 -1
- package/tooltip/index.mjs +1 -2
- package/tooltipmanager/index.mjs +1 -2
- package/tree/index.mjs +1 -2
- package/tree/useTree.d.ts +4 -4
- package/tree/useTreeDragDrop.d.ts +2 -2
- package/tree/useTreeFlatten.d.ts +1 -1
- package/tree/useTreeSelection.d.ts +3 -3
- package/accordion/index.mjs.map +0 -1
- package/accordion/useAccordion.test.d.ts +0 -0
- package/animateonscroll/index.mjs.map +0 -1
- package/animateonscroll/useAnimateOnScroll.test.d.ts +0 -0
- package/autocomplete/index.mjs.map +0 -1
- package/autocomplete/useAutoComplete.test.d.ts +0 -0
- package/avatar/index.mjs.map +0 -1
- package/avatar/useAvatar.test.d.ts +0 -0
- package/avatargroup/index.mjs.map +0 -1
- package/badge/index.mjs.map +0 -1
- package/badge/useBadge.test.d.ts +0 -0
- package/breadcrumb/index.mjs.map +0 -1
- package/breadcrumb/useBreadcrumb.test.d.ts +0 -0
- package/button/index.mjs.map +0 -1
- package/button/useButton.test.d.ts +0 -0
- package/card/index.mjs.map +0 -1
- package/card/useCard.test.d.ts +0 -0
- package/carousel/index.mjs.map +0 -1
- package/carousel/useCarousel.test.d.ts +0 -0
- package/checkbox/index.mjs.map +0 -1
- package/checkbox/useCheckbox.test.d.ts +0 -0
- package/checkboxgroup/index.mjs.map +0 -1
- package/checkboxgroup/useCheckboxGroup.test.d.ts +0 -0
- package/chip/index.mjs.map +0 -1
- package/chip/useChip.test.d.ts +0 -0
- package/collapsible/index.mjs.map +0 -1
- package/collapsible/useCollapsible.test.d.ts +0 -0
- package/compare/index.mjs.map +0 -1
- package/compare/useCompare.test.d.ts +0 -0
- package/contextmenu/index.mjs.map +0 -1
- package/contextmenu/submenu/index.mjs.map +0 -1
- package/contextmenu/useContextMenu.test.d.ts +0 -0
- package/datatable/features/index.mjs.map +0 -1
- package/datatable/index.mjs.map +0 -1
- package/datatable/utils/index.mjs.map +0 -1
- package/dataview/index.mjs.map +0 -1
- package/dataview/useDataView.test.d.ts +0 -0
- package/datepicker/index.mjs.map +0 -1
- package/datepicker/useDatePicker.test.d.ts +0 -0
- package/dialog/index.mjs.map +0 -1
- package/dialog/useDialog.test.d.ts +0 -0
- package/divider/index.mjs.map +0 -1
- package/divider/useDivider.test.d.ts +0 -0
- package/dnd/index.mjs.map +0 -1
- package/drawer/index.mjs.map +0 -1
- package/drawer/useDrawer.test.d.ts +0 -0
- package/fieldset/index.mjs.map +0 -1
- package/fieldset/useFieldset.test.d.ts +0 -0
- package/fileupload/index.mjs.map +0 -1
- package/fileupload/useFileUpload.test.d.ts +0 -0
- package/floatlabel/index.mjs.map +0 -1
- package/floatlabel/useFloatLabel.test.d.ts +0 -0
- package/fluid/index.mjs.map +0 -1
- package/fluid/useFluid.test.d.ts +0 -0
- package/focustrap/index.mjs.map +0 -1
- package/focustrap/useFocusTrap.test.d.ts +0 -0
- package/gallery/index.mjs.map +0 -1
- package/gallery/item/index.mjs.map +0 -1
- package/gallery/useGallery.test.d.ts +0 -0
- package/iconfield/index.mjs.map +0 -1
- package/iconfield/useIconField.test.d.ts +0 -0
- package/iftalabel/index.mjs.map +0 -1
- package/iftalabel/useIftaLabel.test.d.ts +0 -0
- package/inplace/index.mjs.map +0 -1
- package/inplace/useInplace.test.d.ts +0 -0
- package/inputcolor/index.mjs.map +0 -1
- package/inputcolor/useInputColor.test.d.ts +0 -0
- package/inputgroup/index.mjs.map +0 -1
- package/inputgroup/useInputGroup.test.d.ts +0 -0
- package/inputnumber/index.mjs.map +0 -1
- package/inputnumber/useInputNumber.test.d.ts +0 -0
- package/inputotp/index.mjs.map +0 -1
- package/inputotp/useInputOtp.test.d.ts +0 -0
- package/inputpassword/index.mjs.map +0 -1
- package/inputpassword/useInputPassword.test.d.ts +0 -0
- package/inputtags/index.mjs.map +0 -1
- package/inputtags/useInputTags.test.d.ts +0 -0
- package/inputtext/index.mjs.map +0 -1
- package/inputtext/useInputText.test.d.ts +0 -0
- package/knob/index.mjs.map +0 -1
- package/knob/useKnob.test.d.ts +0 -0
- package/label/index.mjs.map +0 -1
- package/label/useLabel.test.d.ts +0 -0
- package/listbox/index.mjs.map +0 -1
- package/listbox/useListbox.test.d.ts +0 -0
- package/menu/checkboxitem/index.mjs.map +0 -1
- package/menu/index.mjs.map +0 -1
- package/menu/radioitem/index.mjs.map +0 -1
- package/menu/submenu/index.mjs.map +0 -1
- package/menu/useMenu.test.d.ts +0 -0
- package/message/index.mjs.map +0 -1
- package/message/useMessage.test.d.ts +0 -0
- package/metergroup/index.mjs.map +0 -1
- package/metergroup/useMeterGroup.test.d.ts +0 -0
- package/navigationmenu/index.mjs.map +0 -1
- package/navigationmenu/useNavigationMenu.test.d.ts +0 -0
- package/orderlist/index.mjs.map +0 -1
- package/organizationchart/index.mjs.map +0 -1
- package/organizationchart/useOrganizationChart.test.d.ts +0 -0
- package/overlaybadge/index.mjs.map +0 -1
- package/overlaybadge/useOverlayBadge.test.d.ts +0 -0
- package/paginator/index.mjs.map +0 -1
- package/paginator/usePaginator.test.d.ts +0 -0
- package/panel/index.mjs.map +0 -1
- package/panel/usePanel.test.d.ts +0 -0
- package/picklist/index.mjs.map +0 -1
- package/popover/index.mjs.map +0 -1
- package/popover/usePopover.test.d.ts +0 -0
- package/portal/index.mjs.map +0 -1
- package/portal/usePortal.test.d.ts +0 -0
- package/positioner/index.mjs.map +0 -1
- package/positioner/usePositioner.test.d.ts +0 -0
- package/progressbar/index.mjs.map +0 -1
- package/progressbar/useProgressBar.test.d.ts +0 -0
- package/progressspinner/index.mjs.map +0 -1
- package/radiobutton/index.mjs.map +0 -1
- package/radiobutton/useRadioButton.test.d.ts +0 -0
- package/radiobuttongroup/index.mjs.map +0 -1
- package/radiobuttongroup/useRadioButtonGroup.test.d.ts +0 -0
- package/rating/index.mjs.map +0 -1
- package/scrollarea/index.mjs.map +0 -1
- package/scrollarea/useScrollArea.test.d.ts +0 -0
- package/select/index.mjs.map +0 -1
- package/select/useSelect.test.d.ts +0 -1
- package/sidebar/index.mjs.map +0 -1
- package/skeleton/index.mjs.map +0 -1
- package/skeleton/useSkeleton.test.d.ts +0 -0
- package/slider/index.mjs.map +0 -1
- package/slider/useSlider.test.d.ts +0 -0
- package/speeddial/index.mjs.map +0 -1
- package/speeddial/useSpeedDial.test.d.ts +0 -0
- package/splitter/index.mjs.map +0 -1
- package/splitter/useSplitter.test.d.ts +0 -0
- package/stepper/index.mjs.map +0 -1
- package/stepper/useStepper.test.d.ts +0 -0
- package/styleclass/index.mjs.map +0 -1
- package/styleclass/useStyleClass.test.d.ts +0 -0
- package/tabs/index.mjs.map +0 -1
- package/tabs/useTabs.test.d.ts +0 -0
- package/tag/index.mjs.map +0 -1
- package/tag/useTag.test.d.ts +0 -0
- package/terminal/index.mjs.map +0 -1
- package/terminal/useTerminal.test.d.ts +0 -0
- package/textarea/index.mjs.map +0 -1
- package/textarea/useTextarea.test.d.ts +0 -0
- package/timeline/index.mjs.map +0 -1
- package/timeline/useTimeline.test.d.ts +0 -0
- package/toast/index.mjs.map +0 -1
- package/toast/useToast.test.d.ts +0 -0
- package/toaster/index.mjs.map +0 -1
- package/toaster/useToaster.test.d.ts +0 -0
- package/togglebutton/index.mjs.map +0 -1
- package/togglebutton/useToggle.test.d.ts +0 -0
- package/togglebuttongroup/index.mjs.map +0 -1
- package/togglebuttongroup/useToggleButtonGroup.test.d.ts +0 -0
- package/toggleswitch/index.mjs.map +0 -1
- package/toggleswitch/useToggleSwitch.test.d.ts +0 -0
- package/toolbar/index.mjs.map +0 -1
- package/toolbar/useToolbar.test.d.ts +0 -0
- package/tooltip/index.mjs.map +0 -1
- package/tooltip/useTooltip.test.d.ts +0 -0
- package/tooltipmanager/index.mjs.map +0 -1
- package/tooltipmanager/useTooltipManager.test.d.ts +0 -0
- package/tree/index.mjs.map +0 -1
- package/tree/useTree.test.d.ts +0 -0
package/menu/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/menu/useMenu.ts","../../src/menu/useMenu.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { usePopover } from '@primereact/headless/popover';\nimport { focus, isPrintableCharacter, toElement } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useMenu.props';\n\nconst compareDOMPosition = (a: HTMLElement, b: HTMLElement): number => {\n const position = a.compareDocumentPosition(b);\n\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n\n return 0;\n};\n\nexport const useMenu = withHeadless({\n name: 'useMenu',\n defaultProps,\n setup({ props, id }) {\n // NavigationMenu drives open state externally: when this Menu is registered\n // with a NavigationMenu, the NavigationMenu tracks which menu is open, and it expects\n // open-change notifications back. Derive the popover's open inputs\n // from the navigationmenu context so MenuRoot doesn't need to splice these.\n const navigationmenuManaged = !!(props.navigationmenu && props.navigationmenuMenuId);\n const effectiveOpen = navigationmenuManaged ? props.navigationmenu!.isMenuOpen(props.navigationmenuMenuId!) : props.open;\n const userOnOpenChange = props.onOpenChange;\n const effectiveOnOpenChange = navigationmenuManaged\n ? (event: { value?: boolean }) => {\n userOnOpenChange?.(event as Parameters<NonNullable<typeof userOnOpenChange>>[0]);\n props.navigationmenu!.onMenuOpenChange(props.navigationmenuMenuId!, !!event.value);\n }\n : userOnOpenChange;\n\n const ownPopover = usePopover({\n open: effectiveOpen,\n defaultOpen: props.defaultOpen,\n onOpenChange: effectiveOnOpenChange\n });\n\n // When nested under a Menu.Submenu, reuse the parent submenu's popover so\n // open state, anchor, and positioner stay in sync with the SubTrigger.\n const popover = props.context?.popover ?? ownPopover;\n\n const [focusedState, setFocusedState] = React.useState<boolean>(false);\n const [focusedOptionId, setFocusedOptionId] = React.useState<string | string[]>(props.composite ? [] : '');\n // Mirrors tooltip's `instantType` — set to 'switch' when the parent\n // navigationmenu signals a sibling traversal involving this menu so styles\n // can drop the enter/leave transition. Reset back to undefined a tick\n // later so subsequent normal opens/closes animate again.\n const [instantType, setInstantType] = React.useState<'switch' | undefined>(undefined);\n const isMouseInteractionRef = React.useRef(false);\n const isAutoFocused = React.useRef(true);\n\n // Hover-open timers for Menu.Trigger and per-subtrigger hover handlers.\n // Keyed by an arbitrary token (e.g. 'trigger', or an item id) so each\n // hover source can schedule independently without clobbering others.\n const hoverOpenTimersRef = React.useRef<Map<string, number>>(new Map());\n const hoverCloseTimersRef = React.useRef<Map<string, number>>(new Map());\n\n const clearHoverTimer = (mapRef: React.MutableRefObject<Map<string, number>>, key: string) => {\n const handle = mapRef.current.get(key);\n\n if (handle !== undefined) {\n window.clearTimeout(handle);\n mapRef.current.delete(key);\n }\n };\n\n const scheduleHover = (key: string, kind: 'open' | 'close', delay: number, action: () => void) => {\n const sameKindMap = kind === 'open' ? hoverOpenTimersRef : hoverCloseTimersRef;\n const otherKindMap = kind === 'open' ? hoverCloseTimersRef : hoverOpenTimersRef;\n\n // Cancel any pending opposite action for this key — the latest\n // intent wins (e.g. re-entering the trigger before the close timer\n // fires should keep it open).\n clearHoverTimer(otherKindMap, key);\n clearHoverTimer(sameKindMap, key);\n\n if (delay <= 0) {\n action();\n\n return;\n }\n\n const handle = window.setTimeout(() => {\n sameKindMap.current.delete(key);\n action();\n }, delay);\n\n sameKindMap.current.set(key, handle);\n };\n\n React.useEffect(() => {\n const open = hoverOpenTimersRef.current;\n const close = hoverCloseTimersRef.current;\n\n return () => {\n open.forEach((h) => window.clearTimeout(h));\n close.forEach((h) => window.clearTimeout(h));\n open.clear();\n close.clear();\n };\n }, []);\n\n const itemRefsById = React.useRef<Map<string, HTMLElement>>(new Map());\n const submenuRegistry = React.useRef<Map<string, { close: () => void; open: () => void; toggle: () => void; isOpen: () => boolean }>>(new Map());\n const submenuListRefs = React.useRef<Map<string, React.RefObject<HTMLElement | null>>>(new Map());\n const itemRefCallbacks = React.useRef<Map<string, (element: HTMLElement | null) => void>>(new Map());\n // Per-item activation hook used so keyboard (Enter/Space) activations route\n // through the same onSelect/closeOnSelect plumbing as mouse activation.\n // Returns true when the menu should close as part of activation.\n const itemSelectFireHandlers = React.useRef<Map<string, (event: React.SyntheticEvent) => boolean>>(new Map());\n\n const listRef = React.useRef<HTMLDivElement | null>(null);\n const setListRef = React.useCallback((node: HTMLDivElement | null) => {\n listRef.current = toElement(node) as HTMLDivElement;\n }, []);\n\n const state = {\n open: !!popover.state.open,\n focused: focusedState,\n focusedOptionId,\n anchorElement: popover.state.anchorElement,\n positionerElement: popover.state.positionerElement,\n popupElement: popover.state.popupElement,\n arrowElement: popover.state.arrowElement\n };\n\n const getItemId = React.useCallback(\n (value: string) => {\n return `${id}_item_${value}`;\n },\n [id]\n );\n\n const getListId = React.useCallback(\n (value?: string) => {\n return value ? `${id}_list_${value}` : `${id}_list`;\n },\n [id]\n );\n\n const getItemLevel = React.useCallback((element: HTMLElement): number => {\n let level = 0;\n let current = element.parentElement;\n\n while (current) {\n if (current.getAttribute('role') === 'menu') {\n level++;\n }\n\n if (current === listRef.current) break;\n\n current = current.parentElement;\n }\n\n if (current !== listRef.current) {\n const parentList = element.closest('[role=\"menu\"]');\n\n if (parentList) {\n for (const [triggerId, listRefObj] of submenuListRefs.current.entries()) {\n if (listRefObj.current === parentList) {\n const triggerEl = itemRefsById.current.get(triggerId);\n\n if (triggerEl) {\n return getItemLevel(triggerEl) + 1;\n }\n }\n }\n }\n }\n\n return Math.max(0, level - 1);\n }, []);\n\n const getSiblingItems = React.useCallback((element: HTMLElement): Array<{ id: string; element: HTMLElement }> => {\n const parentList = element.closest('[role=\"menu\"]');\n\n if (!parentList) return [];\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === parentList && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getRootLevelItems = React.useCallback((): Array<{ id: string; element: HTMLElement }> => {\n if (!listRef.current) return [];\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === listRef.current && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getSubmenuItems = React.useCallback((triggerId: string): Array<{ id: string; element: HTMLElement }> => {\n let submenuList: HTMLElement | null | undefined = submenuListRefs.current.get(triggerId)?.current;\n\n if (!submenuList) {\n const triggerElement = itemRefsById.current.get(triggerId);\n\n if (!triggerElement) return [];\n\n const subWrapper = triggerElement.closest('[data-scope=\"menu\"][data-part=\"submenu\"]') || triggerElement.parentElement;\n\n if (!subWrapper) return [];\n\n submenuList = subWrapper.querySelector('[role=\"menu\"]') as HTMLElement | null;\n\n if (!submenuList) return [];\n }\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === submenuList && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const updateItemAria = React.useCallback(\n (element: HTMLElement) => {\n if (!element) return;\n\n const level = getItemLevel(element) + 1;\n\n element.setAttribute('aria-level', String(level));\n\n const parentList = element.closest('[role=\"menu\"]');\n\n if (parentList) {\n const siblings: HTMLElement[] = [];\n\n itemRefsById.current.forEach((itemEl) => {\n if (itemEl.closest('[role=\"menu\"]') === parentList) {\n siblings.push(itemEl);\n }\n });\n\n siblings.sort(compareDOMPosition);\n\n const size = String(siblings.length);\n\n siblings.forEach((sibling, i) => {\n sibling.setAttribute('aria-posinset', String(i + 1));\n sibling.setAttribute('aria-setsize', size);\n });\n }\n },\n [getItemLevel]\n );\n\n const updateItemAriaRef = React.useRef(updateItemAria);\n\n updateItemAriaRef.current = updateItemAria;\n\n const getOrCreateItemRef = React.useCallback((itemId: string) => {\n if (!itemRefCallbacks.current.has(itemId)) {\n itemRefCallbacks.current.set(itemId, (element: HTMLElement | null) => {\n if (toElement(element)) {\n itemRefsById.current.set(itemId, toElement(element)!);\n updateItemAriaRef.current(toElement(element)!);\n } else {\n itemRefsById.current.delete(itemId);\n itemRefCallbacks.current.delete(itemId);\n }\n });\n }\n\n return itemRefCallbacks.current.get(itemId)!;\n }, []);\n\n const changeVisibleState = (isVisible: boolean) => {\n // When closing, kick off submenu close in the same sync block as\n // the outer popover update so React batches both state changes\n // into a single render and useMotion fires both leave animations\n // on the same frame. Without this the outer popup starts closing\n // a frame ahead of any open submenus.\n if (!isVisible) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n }\n\n popover.setOpen?.(isVisible);\n };\n\n const isFocused = React.useCallback(\n (itemId: string): boolean => {\n if (!focusedOptionId) return false;\n\n if (Array.isArray(focusedOptionId)) return focusedOptionId.includes(itemId);\n\n return focusedOptionId === itemId;\n },\n [focusedOptionId]\n );\n\n const getFocusableItems = React.useCallback(() => {\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((element, itemId) => {\n const isDisabled = element.hasAttribute('data-disabled');\n\n if (isDisabled) return;\n\n let currentElement: HTMLElement | null = element;\n let isVisible = true;\n\n while (currentElement && currentElement !== listRef.current) {\n const parentList = currentElement.closest('[data-part=\"list\"]') as HTMLElement | null;\n\n if (!parentList || parentList === listRef.current) break;\n\n const trigger = parentList.previousElementSibling as HTMLElement | null;\n\n if (trigger && trigger.getAttribute('aria-expanded') === 'false') {\n isVisible = false;\n break;\n }\n\n currentElement = parentList.parentElement;\n }\n\n if (!isVisible) return;\n\n items.push({ id: itemId, element });\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getFocusableItemsAtCurrentLevel = React.useCallback(() => {\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n return getRootLevelItems();\n }\n\n const focusedElement = itemRefsById.current.get(currentFocusedId);\n\n if (!focusedElement) return getRootLevelItems();\n\n return getSiblingItems(focusedElement);\n }, [focusedOptionId, getSiblingItems, getRootLevelItems]);\n\n const markMouseInteraction = (newValue: boolean) => {\n isMouseInteractionRef.current = newValue;\n };\n\n const changeFocusedOptionId = (newId: string) => {\n markMouseInteraction(true);\n\n if (props.composite) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n if (prevArray.length === 0) {\n return [newId];\n }\n\n const element = itemRefsById.current.get(newId);\n\n if (!element) return [newId];\n\n const idLevel = getItemLevel(element);\n\n const sameDepthIndex = prevArray.findIndex((prevId) => {\n const prevEl = itemRefsById.current.get(prevId);\n\n return prevEl && getItemLevel(prevEl) === idLevel;\n });\n\n if (sameDepthIndex !== -1) {\n return [...prevArray.slice(0, sameDepthIndex), newId];\n }\n\n const shallowerEntries = prevArray.filter((prevId) => {\n const prevEl = itemRefsById.current.get(prevId);\n\n return prevEl && getItemLevel(prevEl) < idLevel;\n });\n\n return [...shallowerEntries, newId];\n });\n } else {\n setFocusedOptionId(newId);\n }\n };\n\n const getCurrentFocusedId = () => {\n if (props.composite && Array.isArray(focusedOptionId)) {\n return focusedOptionId[focusedOptionId.length - 1] || '';\n }\n\n return typeof focusedOptionId === 'string' ? focusedOptionId : '';\n };\n\n const searchItems = (char: string) => {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n const startIndex = currentFocusedId ? focusableItems.findIndex((item) => item.id === currentFocusedId) + 1 : 0;\n const searchChar = char.toLowerCase();\n\n for (let i = startIndex; i < focusableItems.length; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n\n for (let i = 0; i < startIndex; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n };\n\n const closeSubmenuOfCurrentFocus = () => {\n if (!props.composite || !Array.isArray(focusedOptionId)) return;\n\n const currentFocusedId = focusedOptionId[focusedOptionId.length - 1];\n\n if (!currentFocusedId) return;\n\n const submenuMethods = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuMethods) {\n const element = itemRefsById.current.get(currentFocusedId);\n\n if (element && element.getAttribute('aria-expanded') === 'true') {\n submenuMethods.close();\n }\n }\n };\n\n const hideAllSubmenus = () => {\n if (props.composite) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n };\n\n const hideSubmenusAfterLevel = (targetItemId: string) => {\n if (!props.composite || !Array.isArray(focusedOptionId)) return;\n\n const targetElement = itemRefsById.current.get(targetItemId);\n\n if (!targetElement) return;\n\n const targetLevel = getItemLevel(targetElement);\n\n submenuRegistry.current.forEach((methods, triggerId) => {\n const triggerEl = itemRefsById.current.get(triggerId);\n\n if (!triggerEl) return;\n\n const triggerLevel = getItemLevel(triggerEl);\n\n if (triggerLevel >= targetLevel) {\n if (triggerEl.getAttribute('aria-expanded') === 'true') {\n methods.close();\n }\n }\n });\n\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return prevArray.filter((prevId) => {\n const el = itemRefsById.current.get(prevId);\n\n return el && getItemLevel(el) < targetLevel;\n });\n });\n };\n\n const onArrowDown = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const nextIndex = currentIndex < focusableItems.length - 1 ? currentIndex + 1 : 0;\n\n if (props.composite) {\n closeSubmenuOfCurrentFocus();\n changeFocusedOptionId(focusableItems[nextIndex].id);\n } else {\n setFocusedOptionId(focusableItems[nextIndex].id);\n }\n };\n\n const onArrowUp = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n if (event.altKey) {\n hide();\n\n return;\n }\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : focusableItems.length - 1;\n\n if (props.composite) {\n closeSubmenuOfCurrentFocus();\n changeFocusedOptionId(focusableItems[prevIndex].id);\n } else {\n setFocusedOptionId(focusableItems[prevIndex].id);\n }\n };\n\n const onArrowRight = (event: React.KeyboardEvent) => {\n if (!props.composite && !props.navigationmenu) return;\n\n event.preventDefault();\n\n const currentFocusedId = getCurrentFocusedId();\n const focusedElement = currentFocusedId ? itemRefsById.current.get(currentFocusedId) : null;\n const ariaExpanded = focusedElement?.getAttribute('aria-expanded') ?? null;\n\n // Focused element is a submenu trigger — open the submenu and\n // move focus into it (composite/navigationmenu share this behavior).\n if (currentFocusedId && ariaExpanded !== null) {\n if (ariaExpanded === 'false') {\n const submenuMethods = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuMethods) {\n submenuMethods.open();\n }\n }\n\n // Submenu items mount via portal after open() — poll across a\n // few animation frames so we focus the first item as soon as\n // it's registered, instead of guessing a fixed delay.\n let attempts = 0;\n\n const focusFirstSubmenuItem = () => {\n const submenuItems = getSubmenuItems(currentFocusedId);\n\n if (submenuItems.length > 0) {\n if (props.composite) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return [...prevArray, submenuItems[0].id];\n });\n } else {\n setFocusedOptionId(submenuItems[0].id);\n }\n\n return;\n }\n\n if (attempts++ < 5) {\n requestAnimationFrame(focusFirstSubmenuItem);\n }\n };\n\n requestAnimationFrame(focusFirstSubmenuItem);\n\n return;\n }\n\n // Either no item focused, or a non-subtrigger item is focused.\n // In a NavigationMenu this should jump to the next sibling trigger\n // regardless of focus state.\n if (props.navigationmenu && props.navigationmenuMenuId) {\n props.navigationmenu.focusSibling(props.navigationmenuMenuId, 'next');\n }\n };\n\n const onArrowLeft = (event: React.KeyboardEvent) => {\n if (!props.composite && !props.navigationmenu) return;\n\n event.preventDefault();\n\n // Composite: when focus is inside a nested submenu, pop the stack\n // to close that submenu and return focus to its trigger.\n if (props.composite && Array.isArray(focusedOptionId) && focusedOptionId.length > 1) {\n const parentTriggerId = focusedOptionId[focusedOptionId.length - 2];\n\n submenuRegistry.current.get(parentTriggerId)?.close();\n\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return prevArray.slice(0, -1);\n });\n\n return;\n }\n\n // Non-composite navigationmenu: walk DOM to detect the nested submenu\n // case (legacy path; default navigationmenus run with composite=true).\n if (props.navigationmenu && props.navigationmenuMenuId && !props.composite) {\n const currentFocusedId = getCurrentFocusedId();\n const focusedElement = currentFocusedId ? itemRefsById.current.get(currentFocusedId) : null;\n const closestList = focusedElement?.closest('[role=\"menu\"]') as HTMLElement | null;\n const isInNestedSubmenu = !!closestList && closestList !== listRef.current;\n\n if (isInNestedSubmenu) {\n let parentTriggerId: string | undefined;\n\n submenuListRefs.current.forEach((ref, triggerId) => {\n if (ref.current === closestList) parentTriggerId = triggerId;\n });\n\n if (parentTriggerId) {\n submenuRegistry.current.get(parentTriggerId)?.close();\n setFocusedOptionId(parentTriggerId);\n }\n\n return;\n }\n }\n\n // Top of an open menu inside a navigationmenu — jump to the previous\n // sibling trigger (mirrors onArrowRight's focusSibling 'next').\n if (props.navigationmenu && props.navigationmenuMenuId) {\n props.navigationmenu.focusSibling(props.navigationmenuMenuId, 'previous');\n }\n };\n\n const onHome = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n };\n\n const onEnd = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n };\n\n const onEnterKey = (event: React.KeyboardEvent) => {\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) return;\n\n const submenuEntry = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuEntry) {\n submenuEntry.toggle();\n event.preventDefault();\n\n return;\n }\n\n const list = listRef.current;\n\n if (list) {\n const element = itemRefsById.current.get(currentFocusedId);\n\n if (!element) return;\n\n // Run the item's onSelect/closeOnSelect plumbing first; only\n // close the menu when the handler reports it should.\n const fire = itemSelectFireHandlers.current.get(currentFocusedId);\n const shouldClose = fire ? fire(event) : true;\n\n if (shouldClose) {\n onItemClick(event, false, !!popover.state.open);\n }\n }\n\n event.preventDefault();\n };\n\n const onEscapeKey = () => {\n hideAllSubmenus();\n\n requestAnimationFrame(() => {\n if (popover.state.anchorElement) {\n focus(popover.state.anchorElement);\n }\n });\n };\n\n const onTabKey = () => {\n markMouseInteraction(false);\n\n if (state.open) {\n changeVisibleState(false);\n }\n };\n\n const onListKeyDown = (event: React.KeyboardEvent) => {\n const metaKey = event.metaKey || event.ctrlKey;\n\n switch (event.key) {\n case 'ArrowDown':\n onArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n onArrowUp(event);\n\n break;\n\n case 'ArrowRight':\n if (props.composite || props.navigationmenu) {\n onArrowRight(event);\n }\n\n break;\n\n case 'ArrowLeft':\n if (props.composite || props.navigationmenu) {\n onArrowLeft(event);\n }\n\n break;\n\n case 'Home':\n onHome(event);\n\n break;\n\n case 'End':\n onEnd(event);\n\n break;\n\n case 'Enter':\n case ' ':\n onEnterKey(event);\n\n break;\n\n case 'Escape':\n onEscapeKey();\n\n break;\n\n case 'Tab':\n onTabKey();\n\n break;\n\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n break;\n\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n searchItems(event.key);\n }\n\n break;\n }\n };\n\n const onListFocus = () => {\n setFocusedState(true);\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (currentFocusedId === '' && isAutoFocused.current) {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n // Walk into any defaultOpen submenu chain so cascade-style menus\n // highlight the active path even when opened via mouse — the\n // explicit defaultOpen signals user intent to surface that path.\n const path: string[] = [];\n let currentLevel: Array<{ id: string; element: HTMLElement }> = focusableItems;\n\n while (currentLevel.length > 0) {\n const openTrigger = currentLevel.find((item) => submenuRegistry.current.get(item.id)?.isOpen?.());\n\n if (!openTrigger) break;\n\n path.push(openTrigger.id);\n\n const subItems = getSubmenuItems(openTrigger.id);\n\n if (subItems.length === 0) break;\n\n currentLevel = subItems;\n }\n\n if (path.length > 0 && currentLevel.length > 0) {\n const leafId = currentLevel[0].id;\n\n if (props.composite) {\n setFocusedOptionId([...path, leafId]);\n } else {\n setFocusedOptionId(leafId);\n }\n\n markMouseInteraction(false);\n\n return;\n }\n\n if (isMouseInteractionRef.current) {\n markMouseInteraction(false);\n\n return;\n }\n\n if (focusableItems.length > 0) {\n // NavigationMenu context: only auto-focus an item when the navigationmenu\n // explicitly queued a target via setPendingFocus (i.e. the\n // trigger was activated with ArrowDown/ArrowUp/Enter/Space).\n // Mouse-opened menus get no highlighted item — keeping the\n // first item highlighted on hover/click would also trap\n // ArrowRight in onArrowRight's subtrigger branch instead of\n // routing to navigationmenu.focusSibling.\n if (props.navigationmenu) {\n const pending = props.navigationmenu.consumePendingFocus?.() ?? null;\n\n if (pending) {\n const target = pending === 'last' ? focusableItems[focusableItems.length - 1] : focusableItems[0];\n\n setFocusedOptionId(target.id);\n }\n } else if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n }\n }\n\n markMouseInteraction(false);\n };\n\n const onListBlur = () => {\n setFocusedState(false);\n\n // Inline menus (no Trigger / Portal) never set popover.state.open,\n // so blurring the list shouldn't close their submenus — that would\n // collapse a `defaultOpen` MenuSubmenu the moment the user clicks any\n // sibling item or outside the list. Only auto-close when the root\n // is acting as a real popup.\n if (props.composite) {\n if (popover.state.open) {\n hideAllSubmenus();\n }\n } else {\n setFocusedOptionId('');\n }\n };\n\n const hide = () => {\n // Close any open submenus in the same sync block so their leave\n // animations start on the same frame as the outer popup's.\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n\n popover.setOpen?.(false);\n\n if (props.composite) {\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n\n requestAnimationFrame(() => {\n if (popover.state.anchorElement) {\n focus(popover.state.anchorElement);\n }\n });\n };\n\n const onOverlayEnter = (autoFocus = true) => {\n isAutoFocused.current = autoFocus;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (toElement(listRef.current)) {\n focus(toElement(listRef.current)!);\n }\n });\n });\n };\n\n const onTriggerClick = () => {\n // A click cancels any pending hover-open/hover-close timers so\n // explicit user intent always wins over delayed hover timing.\n clearHoverTimer(hoverOpenTimersRef, 'trigger');\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n\n markMouseInteraction(true);\n popover.setOpen?.(!popover?.state.open);\n };\n\n const onTriggerPointerEnter = () => {\n if (!props.openOnHover) return;\n\n const delay = props.openDelay ?? 100;\n\n scheduleHover('trigger', 'open', delay, () => {\n if (!popover.state.open) {\n markMouseInteraction(true);\n popover.setOpen?.(true);\n }\n });\n };\n\n const onTriggerPointerLeave = () => {\n if (!props.openOnHover) return;\n\n // Wait at least 150ms so the pointer has time to cross the gap\n // (sideOffset, browser layout) between the trigger and the\n // popup; the popup tree's own pointerenter cancels this timer\n // when the pointer arrives.\n const effectiveCloseDelay = Math.max(props.closeDelay ?? 0, 150);\n\n scheduleHover('trigger', 'close', effectiveCloseDelay, () => {\n if (popover.state.open) {\n popover.setOpen?.(false);\n }\n });\n\n // Cancel the pending close as soon as the pointer enters the\n // popup tree (positioner / popup / list). Done imperatively\n // because the popup is rendered in a portal and may share or\n // diverge from React's event tree.\n const popupRoot = (popover.state.positionerElement as HTMLElement | null) ?? (popover.state.popupElement as HTMLElement | null) ?? null;\n\n if (popupRoot) {\n const cancelClose = () => {\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n popupRoot.removeEventListener('mouseenter', cancelClose);\n popupRoot.removeEventListener('pointerenter', cancelClose);\n\n if (cleanupHandle !== null) {\n window.clearTimeout(cleanupHandle);\n }\n };\n\n popupRoot.addEventListener('mouseenter', cancelClose);\n popupRoot.addEventListener('pointerenter', cancelClose);\n\n const cleanupHandle: number = window.setTimeout(() => {\n popupRoot.removeEventListener('mouseenter', cancelClose);\n popupRoot.removeEventListener('pointerenter', cancelClose);\n }, effectiveCloseDelay + 50);\n }\n };\n\n const onItemClick = (event: React.MouseEvent | React.KeyboardEvent, isBlur = false, isPortal = false) => {\n event.preventDefault();\n\n if (props.composite && !isPortal) {\n const rootFocusId = Array.isArray(focusedOptionId) && focusedOptionId.length > 0 ? focusedOptionId[0] : null;\n\n hideAllSubmenus();\n\n if (rootFocusId) {\n setFocusedOptionId([rootFocusId]);\n }\n } else if (isPortal) {\n hide();\n }\n\n if (listRef.current && isBlur && !isPortal) {\n listRef.current.blur();\n changeVisibleState(false);\n }\n };\n\n const getItemProps = React.useCallback(\n (input: {\n value: string;\n disabled?: boolean;\n type?: 'item' | 'checkbox' | 'radio';\n checked?: boolean;\n inPortal?: boolean;\n closeOnSelect?: boolean;\n onSelect?: (event: { originalEvent: React.SyntheticEvent; value: string; preventDefault: () => void; readonly defaultPrevented: boolean }) => void;\n }) => {\n const { value, disabled, type = 'item', checked, inPortal, closeOnSelect = true, onSelect } = input;\n const itemId = getItemId(value);\n const focused = isFocused(itemId);\n const role = type === 'checkbox' ? ('menuitemcheckbox' as const) : type === 'radio' ? ('menuitemradio' as const) : ('menuitem' as const);\n\n // Run user `onSelect` and report whether the menu should close.\n // Shared between mouse and keyboard activation so behavior matches.\n const fireSelect = (originalEvent: React.SyntheticEvent): boolean => {\n if (disabled) return false;\n\n let prevented = false;\n const selectEvent = {\n originalEvent,\n value,\n preventDefault: () => {\n prevented = true;\n },\n get defaultPrevented() {\n return prevented;\n }\n };\n\n onSelect?.(selectEvent);\n\n return !prevented && closeOnSelect;\n };\n\n itemSelectFireHandlers.current.set(itemId, fireSelect);\n\n return {\n ref: getOrCreateItemRef(itemId),\n id: itemId,\n role,\n tabIndex: -1 as const,\n 'aria-disabled': disabled || undefined,\n 'aria-checked': type !== 'item' ? checked : undefined,\n 'data-scope': 'menu' as const,\n 'data-part': 'item' as const,\n 'data-value': value,\n ...(focused && { 'data-focused': '' as const }),\n ...(type !== 'item' && (checked ? { 'data-checked': '' as const } : { 'data-unchecked': '' as const })),\n ...(disabled && { 'data-disabled': '' as const }),\n onMouseDown: (event: React.MouseEvent) => {\n if (disabled) return;\n\n const shouldClose = fireSelect(event);\n\n if (!shouldClose) {\n // Keep menu open; still manage focus on the activated item.\n markMouseInteraction(true);\n changeFocusedOptionId(itemId);\n\n return;\n }\n\n if (props.composite && !inPortal && event.detail > 0) {\n onItemClick(event, false, inPortal);\n\n return;\n }\n\n markMouseInteraction(true);\n\n const itemElement = itemRefsById.current.get(itemId);\n\n if (event.detail === 0 && itemElement) {\n itemElement.click();\n }\n\n if (inPortal) {\n if ((props.composite && event.detail > 0) || !props.composite) {\n onItemClick(event, false, inPortal);\n }\n } else {\n setTimeout(() => {\n onItemClick(event, true, inPortal);\n }, 0);\n }\n },\n onMouseMove: () => {\n if (!disabled && state.focused) {\n changeFocusedOptionId(itemId);\n }\n },\n onMouseEnter: props.composite\n ? () => {\n if (!disabled && state.focused) {\n hideSubmenusAfterLevel(itemId);\n changeFocusedOptionId(itemId);\n }\n }\n : undefined\n };\n },\n [focusedOptionId, props.composite, state.focused, state.open, isFocused, getItemLevel, getItemId]\n );\n\n const getSubTriggerProps = React.useCallback(\n (input: {\n value: string;\n disabled?: boolean;\n inPortal?: boolean;\n sub?: {\n state: { open: boolean };\n open: () => void;\n close: () => void;\n toggle: () => void;\n listRef: React.RefObject<HTMLElement | null>;\n subtriggerProps?: { ref: (node: HTMLElement | null) => void };\n openDelay?: number;\n closeDelay?: number;\n openOnHover?: boolean;\n };\n }) => {\n const { value, disabled, sub } = input;\n const submenuOpen = sub?.state.open;\n const subOpenDelay = sub?.openDelay ?? 100;\n const subCloseDelay = sub?.closeDelay ?? 0;\n const subOpenOnHover = sub?.openOnHover ?? true;\n const submenuMethods = sub ? { open: sub.open, close: sub.close, toggle: sub.toggle, isOpen: () => !!sub.state.open } : undefined;\n const submenuListRef = sub?.listRef;\n const subAnchorRef = sub?.subtriggerProps?.ref;\n const itemId = getItemId(value);\n const focused = isFocused(itemId);\n\n const itemRef = getOrCreateItemRef(itemId);\n\n // The ref callback is recreated on every render. React commits\n // the new ref by calling the old ref with null (cleanup) then\n // the new ref with the node (mount). If we only re-registered\n // submenuMethods at render time, the cleanup-null call would\n // silently wipe the registry between renders, leaving keyboard\n // activation (Enter/Space on a subtrigger) without a target —\n // it would fall through onEnterKey to onItemClick and close\n // the menu. Doing the set inside the mount branch keeps the\n // registry populated with the current render's fresh closures\n // and the unmount branch handles real teardown.\n const subTriggerRef = (node: HTMLElement | null) => {\n itemRef(node);\n subAnchorRef?.(node);\n\n if (node) {\n if (submenuMethods) submenuRegistry.current.set(itemId, submenuMethods);\n\n if (submenuListRef) submenuListRefs.current.set(itemId, submenuListRef);\n } else {\n submenuRegistry.current.delete(itemId);\n submenuListRefs.current.delete(itemId);\n }\n };\n\n // Also seed the registry at render time so the very first\n // commit (before any ref attaches) still has an entry — useful\n // for code paths that read the registry synchronously after\n // mount (e.g. Enter immediately after open).\n if (submenuMethods) {\n submenuRegistry.current.set(itemId, submenuMethods);\n }\n\n if (submenuListRef) {\n submenuListRefs.current.set(itemId, submenuListRef);\n }\n\n return {\n ref: subTriggerRef,\n id: itemId,\n role: 'menuitem' as const,\n tabIndex: -1 as const,\n 'aria-expanded': submenuOpen,\n 'aria-disabled': disabled || undefined,\n 'data-scope': 'menu' as const,\n 'data-part': 'subtrigger' as const,\n 'data-value': value,\n ...(focused && { 'data-focused': '' as const }),\n ...(disabled && { 'data-disabled': '' as const }),\n ...(submenuOpen && { 'data-open': '' as const }),\n onMouseDown: (event: React.MouseEvent) => {\n event.preventDefault();\n\n // Click is the user's explicit intent — drop any\n // pending hover-open / hover-close so the click takes\n // effect immediately without a delayed override.\n clearHoverTimer(hoverOpenTimersRef, itemId);\n clearHoverTimer(hoverCloseTimersRef, itemId);\n\n if (!disabled && event.detail > 0) {\n changeFocusedOptionId(itemId);\n submenuMethods?.toggle();\n }\n\n if (!disabled && toElement(listRef.current)) {\n focus(toElement(listRef.current)!);\n }\n },\n onMouseMove: () => {\n markMouseInteraction(true);\n\n if (!disabled && state.focused) {\n changeFocusedOptionId(itemId);\n }\n },\n onMouseEnter: () => {\n if (!subOpenOnHover) return;\n\n if (props.composite && !disabled && state.focused) {\n if (submenuOpen) {\n changeFocusedOptionId(itemId);\n } else {\n hideSubmenusAfterLevel(itemId);\n changeFocusedOptionId(itemId);\n\n if (submenuMethods) {\n scheduleHover(itemId, 'open', subOpenDelay, () => {\n if (!sub?.state.open) {\n submenuMethods.open();\n }\n });\n }\n }\n }\n },\n onMouseLeave: (event: React.MouseEvent) => {\n if (!subOpenOnHover) {\n return;\n }\n\n // Cancel a pending open if the pointer leaves before\n // the open delay fires.\n clearHoverTimer(hoverOpenTimersRef, itemId);\n\n if (props.composite && submenuOpen && submenuMethods) {\n const submenuList = submenuListRefs.current.get(itemId)?.current ?? null;\n const submenuPopup = (submenuList?.closest('[data-part=\"popup\"]') as HTMLElement | null) ?? null;\n const submenuPositioner = (submenuList?.closest('[data-part=\"positioner\"]') as HTMLElement | null) ?? null;\n const submenuRoot = submenuPositioner ?? submenuPopup ?? submenuList;\n const relatedTarget = toElement(event.relatedTarget) as HTMLElement;\n\n // Pointer is already inside the submenu portal —\n // no close needed.\n if (relatedTarget && submenuRoot && (submenuRoot === relatedTarget || submenuRoot.contains(relatedTarget))) {\n return;\n }\n\n // Wait at least 150ms so the pointer has time to\n // cross the gap between the subtrigger and the\n // submenu popup.\n const effectiveCloseDelay = Math.max(subCloseDelay, 150);\n\n scheduleHover(itemId, 'close', effectiveCloseDelay, () => {\n submenuMethods.close();\n });\n\n // Cancel the pending close as soon as the pointer\n // actually arrives over the submenu's popup tree.\n // The submenu lives in a separate useMenu instance\n // with its own timer maps, so the parent must\n // attach this listener imperatively rather than\n // relying on the inner menu's onMouseEnter.\n if (submenuRoot) {\n const cancelClose = () => {\n clearHoverTimer(hoverCloseTimersRef, itemId);\n submenuRoot.removeEventListener('mouseenter', cancelClose);\n submenuRoot.removeEventListener('pointerenter', cancelClose);\n\n if (cleanupHandle !== null) {\n window.clearTimeout(cleanupHandle);\n }\n };\n\n submenuRoot.addEventListener('mouseenter', cancelClose);\n submenuRoot.addEventListener('pointerenter', cancelClose);\n\n // If the pointer never arrives, drop the\n // listener once the close timer has already\n // fired.\n const cleanupHandle: number = window.setTimeout(() => {\n submenuRoot.removeEventListener('mouseenter', cancelClose);\n submenuRoot.removeEventListener('pointerenter', cancelClose);\n }, effectiveCloseDelay + 50);\n }\n }\n }\n };\n },\n [focusedOptionId, props.composite, state.focused, state.open, isFocused, getItemId]\n );\n\n const getIndicatorProps = React.useCallback((input: { type?: 'item' | 'checkbox' | 'radio'; checked?: boolean; submenuOpen?: boolean; match?: 'open' | 'closed' | 'checked' | 'unchecked' }) => {\n const { type, checked, submenuOpen, match } = input;\n\n const indicatorType = type === 'checkbox' ? 'checkbox' : type === 'radio' ? 'radio' : submenuOpen !== undefined ? 'submenu' : null;\n\n const active = type === 'checkbox' || type === 'radio' ? (checked ?? false) : submenuOpen !== undefined ? submenuOpen : false;\n\n const matchVisible = match ? active === (match === 'open' || match === 'checked') : true;\n\n const dataAttrKey = indicatorType === 'submenu' ? (active ? 'data-open' : 'data-closed') : active ? 'data-checked' : 'data-unchecked';\n\n return {\n matchVisible,\n [dataAttrKey]: '',\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n }, []);\n\n const checkboxItemIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const radioItemIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const submenuIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const getListProps = React.useCallback(\n (input: { value?: string; sub?: { state: { open: boolean }; listProps?: { ref: (node: HTMLDivElement | null) => void } } } = {}) => {\n const { value, sub } = input;\n const isSubmenu = !!sub;\n const subListRef = sub?.listProps?.ref;\n const listId = getListId(value);\n const activeDescendant = getCurrentFocusedId() || undefined;\n\n return {\n ...(!isSubmenu && { ref: setListRef }),\n ...(isSubmenu && subListRef && { ref: subListRef }),\n id: listId,\n role: 'menu' as const,\n 'aria-activedescendant': !isSubmenu ? activeDescendant : undefined,\n tabIndex: isSubmenu ? -1 : (props.tabIndex ?? 0),\n 'data-scope': 'menu' as const,\n 'data-part': 'list' as const,\n ...(isSubmenu && props.composite && { 'data-composite': '' }),\n onKeyDown: onListKeyDown,\n ...(isSubmenu ? {} : { onFocus: onListFocus, onBlur: onListBlur })\n };\n },\n [focusedOptionId, props.tabIndex, getListId]\n );\n\n const triggerProps = {\n ...popover.triggerProps,\n 'aria-haspopup': 'true' as const,\n 'aria-expanded': !!popover.state.open,\n 'data-scope': 'menu' as const,\n 'data-part': 'trigger' as const,\n ...(popover.state.open && { 'data-open': '' as const }),\n ...(popover.state.open && { 'data-expanded': '' as const }),\n onClick: onTriggerClick,\n ...(props.openOnHover && {\n onPointerEnter: onTriggerPointerEnter,\n onPointerLeave: onTriggerPointerLeave\n })\n };\n\n const arrowProps = {\n ...popover.arrowProps,\n ...(instantType && { 'data-instant': instantType })\n };\n\n // Popup-level hover handlers complete the trigger ⇄ popup hand-off\n // when openOnHover is enabled: entering the popup cancels the close\n // scheduled by trigger pointerleave; leaving the popup re-schedules\n // the close (the trigger's own pointerenter cancels it again if the\n // user tracks back to the trigger).\n const onPopupPointerEnter = () => {\n if (!props.openOnHover) return;\n\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n };\n\n const onPopupPointerLeave = () => {\n if (!props.openOnHover) return;\n\n const effectiveCloseDelay = Math.max(props.closeDelay ?? 0, 150);\n\n scheduleHover('trigger', 'close', effectiveCloseDelay, () => {\n if (popover.state.open) {\n popover.setOpen?.(false);\n }\n });\n };\n\n const popupProps = {\n ...popover.popupProps,\n ...(instantType && { 'data-instant': '' as const }),\n ...(instantType && { 'data-instant-type': instantType }),\n ...(props.openOnHover && {\n onPointerEnter: onPopupPointerEnter,\n onPointerLeave: onPopupPointerLeave\n })\n };\n\n const positionerProps = {\n ...popover.positionerProps\n };\n\n const labelProps = {\n role: 'none' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'label' as const\n };\n\n const separatorProps = {\n role: 'separator' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'separator' as const\n };\n\n const radioGroupProps = {\n role: 'group' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'radiogroup' as const\n };\n\n const rootProps = {\n id,\n 'data-scope': 'menu' as const,\n 'data-part': 'root' as const\n };\n\n React.useEffect(() => {\n if (popover.state.rendered) {\n onOverlayEnter();\n }\n }, [popover.state.rendered]);\n\n // Close every nested submenu when the outer menu closes so submenu\n // popups (which live in their own portals and have independent open\n // state) don't outlive the parent popup. Without this the parent's\n // leave animation runs while submenus stay visible — the user sees the\n // root close first and submenus dangling. With it everything tears\n // down in sync.\n React.useEffect(() => {\n if (!popover.state.open) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n }\n }, [popover.state.open]);\n\n // Subscribe to the parent navigationmenu's sibling-switch signal so this\n // menu can flag its own popup as instant (no animation) when it is\n // the menu being closed or opened mid-traversal. Reset to undefined\n // shortly after so the next normal open/close animates again.\n React.useEffect(() => {\n if (!props.navigationmenu || !props.navigationmenuMenuId) return;\n\n const unregister = props.navigationmenu.registerInstantSignal(props.navigationmenuMenuId, () => {\n setInstantType('switch');\n });\n\n return unregister;\n }, [props.navigationmenu, props.navigationmenuMenuId]);\n\n // Clear the instant flag once the popup state has settled into the\n // post-switch configuration. Watching popover.state.open means we\n // reset right after the (instant) leave/enter completes.\n React.useEffect(() => {\n if (instantType === undefined) return;\n\n const handle = window.setTimeout(() => setInstantType(undefined), 50);\n\n return () => window.clearTimeout(handle);\n }, [instantType, popover.state.open]);\n\n return {\n state,\n popover,\n // prop getters\n rootProps,\n triggerProps,\n arrowProps,\n popupProps,\n positionerProps,\n labelProps,\n separatorProps,\n radioGroupProps,\n getItemProps,\n getSubTriggerProps,\n getListProps,\n getIndicatorProps,\n checkboxItemIndicatorProps,\n radioItemIndicatorProps,\n submenuIndicatorProps,\n updateItemAria,\n // methods\n isFocused,\n getItemId,\n getListId,\n changeVisibleState,\n markMouseInteraction,\n changeFocusedOptionId,\n hideSubmenusAfterLevel,\n hideAllSubmenus,\n onListKeyDown,\n onListFocus,\n onListBlur,\n onOverlayEnter,\n onTriggerClick,\n onItemClick\n };\n }\n});\n","import type { UseMenuProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuProps = {\n open: undefined,\n defaultOpen: undefined,\n composite: true,\n appendTo: 'body',\n baseZIndex: 0,\n autoZIndex: true,\n tabIndex: 0,\n openDelay: 100,\n closeDelay: 0,\n openOnHover: false,\n onOpenChange: undefined,\n context: undefined,\n navigationmenu: undefined,\n navigationmenuMenuId: undefined\n};\n"],"mappings":"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","names":["withHeadless","usePopover","focus","isPrintableCharacter","toElement","React","defaultProps","compareDOMPosition","a","b","position","useMenu","withHeadless","defaultProps","props","id","_a","_b","navigationmenuManaged","effectiveOpen","userOnOpenChange","effectiveOnOpenChange","event","ownPopover","usePopover","popover","focusedState","setFocusedState","focusedOptionId","setFocusedOptionId","instantType","setInstantType","isMouseInteractionRef","isAutoFocused","hoverOpenTimersRef","hoverCloseTimersRef","clearHoverTimer","mapRef","key","handle","scheduleHover","kind","delay","action","sameKindMap","open","close","h","itemRefsById","submenuRegistry","submenuListRefs","itemRefCallbacks","itemSelectFireHandlers","listRef","setListRef","node","toElement","state","getItemId","value","getListId","getItemLevel","element","level","current","parentList","triggerId","listRefObj","triggerEl","getSiblingItems","items","itemEl","itemId","getRootLevelItems","getSubmenuItems","submenuList","triggerElement","subWrapper","updateItemAria","siblings","size","sibling","i","updateItemAriaRef","getOrCreateItemRef","changeVisibleState","isVisible","methods","isFocused","getFocusableItems","currentElement","trigger","getFocusableItemsAtCurrentLevel","currentFocusedId","getCurrentFocusedId","focusedElement","markMouseInteraction","newValue","changeFocusedOptionId","newId","prev","prevArray","idLevel","sameDepthIndex","prevId","prevEl","searchItems","char","focusableItems","startIndex","item","searchChar","closeSubmenuOfCurrentFocus","submenuMethods","hideAllSubmenus","hideSubmenusAfterLevel","targetItemId","targetElement","targetLevel","el","onArrowDown","currentIndex","nextIndex","onArrowUp","hide","prevIndex","onArrowRight","ariaExpanded","attempts","focusFirstSubmenuItem","submenuItems","onArrowLeft","parentTriggerId","closestList","ref","onHome","onEnd","onEnterKey","submenuEntry","fire","onItemClick","onEscapeKey","focus","onTabKey","onListKeyDown","metaKey","isPrintableCharacter","onListFocus","_c","path","currentLevel","openTrigger","subItems","leafId","pending","target","onListBlur","onOverlayEnter","autoFocus","onTriggerClick","onTriggerPointerEnter","onTriggerPointerLeave","effectiveCloseDelay","popupRoot","cancelClose","cleanupHandle","isBlur","isPortal","rootFocusId","getItemProps","input","disabled","type","checked","inPortal","closeOnSelect","onSelect","focused","role","fireSelect","originalEvent","prevented","selectEvent","__spreadProps","__spreadValues","itemElement","getSubTriggerProps","_d","sub","submenuOpen","subOpenDelay","subCloseDelay","subOpenOnHover","submenuListRef","subAnchorRef","itemRef","subTriggerRef","_e","submenuPopup","submenuPositioner","submenuRoot","relatedTarget","getIndicatorProps","match","indicatorType","active","checkboxItemIndicatorProps","radioItemIndicatorProps","submenuIndicatorProps","getListProps","isSubmenu","subListRef","listId","activeDescendant","triggerProps","arrowProps","onPopupPointerEnter","onPopupPointerLeave","popupProps","positionerProps","labelProps","separatorProps","radioGroupProps","rootProps"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/menu/radioitem/useMenuRadioItem.ts","../../../src/menu/radioitem/useMenuRadioItem.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useRadioButton } from '@primereact/headless/radiobutton';\nimport type { UseMenuItemSelectEvent, UseMenuRadioItemCheckedChangeEvent } from '@primereact/types/headless/menu';\nimport { equals } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useMenuRadioItem.props';\n\nexport const useMenuRadioItem = withHeadless({\n name: 'useMenuRadioItem',\n defaultProps,\n setup({ props }) {\n const group = props.group ?? null;\n\n // When attached to a parent radio-item group the checked state is\n // derived from the group's value and writes are forwarded back via\n // `group.updateChange`. Otherwise the underlying useRadioButton runs\n // fully controlled by the consumer's own props.\n const radioInput = group\n ? {\n ...props,\n checked: equals(group.value, props.value),\n defaultChecked: equals(group.defaultValue, props.value),\n name: props.name ?? group.name,\n disabled: props.disabled,\n value: props.value,\n onCheckedChange: (event: UseMenuRadioItemCheckedChangeEvent) => {\n group.updateChange({ ...event, value: props.value });\n props.onCheckedChange?.({ ...event, value: props.value });\n }\n }\n : {\n ...props,\n value: props.value,\n onCheckedChange: (event: UseMenuRadioItemCheckedChangeEvent) => props.onCheckedChange?.({ ...event, value: props.value })\n };\n\n const radio = useRadioButton(radioInput);\n\n const checked = !!radio.state.checked;\n const isDisabled = !!props.disabled;\n // Default closeOnSelect to false — selecting a radio-item should keep\n // the menu open. Consumers opt back in via `closeOnSelect={true}`.\n const closeOnSelect = props.closeOnSelect ?? false;\n\n const onSelect = React.useCallback(\n (event: UseMenuItemSelectEvent) => {\n if (isDisabled) return;\n\n // Re-selecting the active radio is a no-op so we don't fire\n // the useRadioButton toggle that would clear the value.\n if (!checked) {\n radio.onChange({ target: { checked: true } } as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n props.onSelect?.(event);\n },\n [radio, checked, isDisabled, props.onSelect]\n );\n\n return {\n ...radio,\n state: {\n ...radio.state,\n checked\n },\n closeOnSelect,\n onSelect\n };\n }\n});\n","import type { UseMenuRadioItemProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuRadioItemProps = {\n checked: undefined,\n defaultChecked: undefined,\n inputId: undefined,\n name: undefined,\n value: undefined,\n disabled: undefined,\n closeOnSelect: false,\n group: null,\n onSelect: undefined,\n onCheckedChange: undefined\n};\n"],"mappings":"6aAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,kBAAAC,MAAsB,mCAE/B,OAAS,UAAAC,MAAc,kBACvB,UAAYC,MAAW,QCFhB,IAAMC,EAAsC,CAC/C,QAAS,OACT,eAAgB,OAChB,QAAS,OACT,KAAM,OACN,MAAO,OACP,SAAU,OACV,cAAe,GACf,MAAO,KACP,SAAU,OACV,gBAAiB,MACrB,EDNO,IAAMC,EAAmBC,EAAa,CACzC,KAAM,mBACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CAVrB,IAAAC,EAAAC,EAAAC,EAWQ,IAAMC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,KAMvBI,EAAaD,EACbE,EAAAC,EAAA,GACOP,GADP,CAEI,QAASQ,EAAOJ,EAAM,MAAOJ,EAAM,KAAK,EACxC,eAAgBQ,EAAOJ,EAAM,aAAcJ,EAAM,KAAK,EACtD,MAAME,EAAAF,EAAM,OAAN,KAAAE,EAAcE,EAAM,KAC1B,SAAUJ,EAAM,SAChB,MAAOA,EAAM,MACb,gBAAkBS,GAA8C,CAzBlF,IAAAR,EA0BsBG,EAAM,aAAaE,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,EAAC,GACnDC,EAAAD,EAAM,kBAAN,MAAAC,EAAA,KAAAD,EAAwBM,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,GAC3D,CACJ,GACAM,EAAAC,EAAA,GACOP,GADP,CAEI,MAAOA,EAAM,MACb,gBAAkBS,GAA2C,CAjC/E,IAAAR,EAiCkF,OAAAA,EAAAD,EAAM,kBAAN,YAAAC,EAAA,KAAAD,EAAwBM,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,IAC3H,GAEAU,EAAQC,EAAeN,CAAU,EAEjCO,EAAU,CAAC,CAACF,EAAM,MAAM,QACxBG,EAAa,CAAC,CAACb,EAAM,SAGrBc,GAAgBX,EAAAH,EAAM,gBAAN,KAAAG,EAAuB,GAEvCY,EAAiB,cAClBN,GAAkC,CA7C/C,IAAAR,EA8CoBY,IAICD,GACDF,EAAM,SAAS,CAAE,OAAQ,CAAE,QAAS,EAAK,CAAE,CAAmD,GAGlGT,EAAAD,EAAM,WAAN,MAAAC,EAAA,KAAAD,EAAiBS,GACrB,EACA,CAACC,EAAOE,EAASC,EAAYb,EAAM,QAAQ,CAC/C,EAEA,OAAOM,EAAAC,EAAA,GACAG,GADA,CAEH,MAAOJ,EAAAC,EAAA,GACAG,EAAM,OADN,CAEH,QAAAE,CACJ,GACA,cAAAE,EACA,SAAAC,CACJ,EACJ,CACJ,CAAC","names":["withHeadless","useRadioButton","equals","React","defaultProps","useMenuRadioItem","withHeadless","defaultProps","props","_a","_b","_c","group","radioInput","__spreadProps","__spreadValues","equals","event","radio","useRadioButton","checked","isDisabled","closeOnSelect","onSelect"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/menu/submenu/useMenuSubmenu.ts","../../../src/menu/submenu/useMenuSubmenu.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { usePopover } from '@primereact/headless/popover';\nimport * as React from 'react';\nimport { defaultProps } from './useMenuSubmenu.props';\n\nexport const useMenuSubmenu = withHeadless({\n name: 'useMenuSubmenu',\n defaultProps,\n setup({ props }) {\n const popover = usePopover({\n open: props.open,\n defaultOpen: props.defaultOpen,\n onOpenChange: props.onOpenChange\n });\n\n const listRef = React.useRef<HTMLDivElement | null>(null);\n const setListRef = React.useCallback((node: HTMLDivElement | null) => {\n listRef.current = node;\n }, []);\n\n const state = {\n open: !!popover.state.open,\n anchorElement: popover.state.anchorElement,\n positionerElement: popover.state.positionerElement,\n popupElement: popover.state.popupElement,\n arrowElement: popover.state.arrowElement\n };\n\n const toggle = () => {\n if (!props.disabled) {\n popover.setOpen?.(!popover.state.open);\n }\n };\n\n const open = () => {\n if (!props.disabled) {\n popover.setOpen?.(true);\n }\n };\n\n const close = () => {\n if (!props.disabled) {\n popover.setOpen?.(false);\n }\n };\n\n const subtriggerProps = {\n ref: popover.setAnchorFallbackRef\n };\n\n const subProps = {\n ...(popover.state.open && { 'data-open': '' as const }),\n 'data-scope': 'menu' as const,\n 'data-part': 'sub' as const\n };\n\n const listProps = {\n ref: setListRef,\n 'data-scope': 'menu' as const,\n 'data-part': 'list' as const\n };\n\n return {\n state,\n popover,\n // refs\n listRef,\n // prop getters\n subtriggerProps,\n subProps,\n listProps,\n // methods\n toggle,\n open,\n close,\n // hover behavior (read by the parent Menu's subtrigger handler)\n openDelay: props.openDelay ?? 100,\n closeDelay: props.closeDelay ?? 0,\n openOnHover: props.openOnHover ?? true\n };\n }\n});\n","import type { UseMenuSubmenuProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuSubmenuProps = {\n open: undefined,\n defaultOpen: undefined,\n openDelay: 100,\n closeDelay: 0,\n openOnHover: true,\n onOpenChange: undefined\n};\n"],"mappings":"6aAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,cAAAC,MAAkB,+BAC3B,UAAYC,MAAW,QCAhB,IAAMC,EAAoC,CAC7C,KAAM,OACN,YAAa,OACb,UAAW,IACX,WAAY,EACZ,YAAa,GACb,aAAc,MAClB,EDJO,IAAMC,EAAiBC,EAAa,CACvC,KAAM,iBACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CARrB,IAAAC,EAAAC,EAAAC,EASQ,IAAMC,EAAUC,EAAW,CACvB,KAAML,EAAM,KACZ,YAAaA,EAAM,YACnB,aAAcA,EAAM,YACxB,CAAC,EAEKM,EAAgB,SAA8B,IAAI,EAClDC,EAAmB,cAAaC,GAAgC,CAClEF,EAAQ,QAAUE,CACtB,EAAG,CAAC,CAAC,EAECC,EAAQ,CACV,KAAM,CAAC,CAACL,EAAQ,MAAM,KACtB,cAAeA,EAAQ,MAAM,cAC7B,kBAAmBA,EAAQ,MAAM,kBACjC,aAAcA,EAAQ,MAAM,aAC5B,aAAcA,EAAQ,MAAM,YAChC,EAEMM,EAAS,IAAM,CA5B7B,IAAAT,EA6BiBD,EAAM,WACPC,EAAAG,EAAQ,UAAR,MAAAH,EAAA,KAAAG,EAAkB,CAACA,EAAQ,MAAM,KAEzC,EAEMO,EAAO,IAAM,CAlC3B,IAAAV,EAmCiBD,EAAM,WACPC,EAAAG,EAAQ,UAAR,MAAAH,EAAA,KAAAG,EAAkB,GAE1B,EAEMQ,EAAQ,IAAM,CAxC5B,IAAAX,EAyCiBD,EAAM,WACPC,EAAAG,EAAQ,UAAR,MAAAH,EAAA,KAAAG,EAAkB,GAE1B,EAEMS,EAAkB,CACpB,IAAKT,EAAQ,oBACjB,EAEMU,EAAWC,EAAAC,EAAA,GACTZ,EAAQ,MAAM,MAAQ,CAAE,YAAa,EAAY,GADxC,CAEb,aAAc,OACd,YAAa,KACjB,GAQA,MAAO,CACH,MAAAK,EACA,QAAAL,EAEA,QAAAE,EAEA,gBAAAO,EACA,SAAAC,EACA,UAdc,CACd,IAAKP,EACL,aAAc,OACd,YAAa,MACjB,EAYI,OAAAG,EACA,KAAAC,EACA,MAAAC,EAEA,WAAWX,EAAAD,EAAM,YAAN,KAAAC,EAAmB,IAC9B,YAAYC,EAAAF,EAAM,aAAN,KAAAE,EAAoB,EAChC,aAAaC,EAAAH,EAAM,cAAN,KAAAG,EAAqB,EACtC,CACJ,CACJ,CAAC","names":["withHeadless","usePopover","React","defaultProps","useMenuSubmenu","withHeadless","defaultProps","props","_a","_b","_c","popover","usePopover","listRef","setListRef","node","state","toggle","open","close","subtriggerProps","subProps","__spreadProps","__spreadValues"]}
|
package/menu/useMenu.test.d.ts
DELETED
|
File without changes
|
package/message/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/message/useMessage.ts","../../src/message/useMessage.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { defaultProps } from './useMessage.props';\n\nexport const useMessage = withHeadless({\n name: 'useMessage',\n defaultProps,\n setup: ({ props }) => {\n const [visibleState, setVisibleState] = React.useState<boolean>(true);\n const timerRef = React.useRef<NodeJS.Timeout | null>(null);\n\n const state = {\n visible: visibleState\n };\n\n // methods\n const handleClose = React.useCallback(() => {\n setVisibleState(false);\n\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n\n props.onClose?.();\n }, [props.onClose]);\n\n // effects\n React.useEffect(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n\n if (typeof props.life === 'number' && props.life > 0 && visibleState) {\n timerRef.current = setTimeout(() => {\n handleClose();\n }, props.life);\n }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [props.life, visibleState, handleClose]);\n\n // prop getters\n const rootProps = {\n 'data-scope': 'message' as const,\n 'data-part': 'root' as const,\n ...(!visibleState && { style: { display: 'none' } })\n };\n\n const closeProps = {\n 'data-scope': 'message' as const,\n 'data-part': 'close' as const,\n onClick: handleClose\n };\n\n return {\n state,\n // prop getters\n rootProps,\n closeProps,\n // methods\n handleClose\n };\n }\n});\n","import type { UseMessageProps } from '@primereact/types/headless/message';\n\nexport const defaultProps: UseMessageProps = {\n life: null,\n onClose: undefined\n};\n"],"mappings":"yVAAA,OAAS,gBAAAA,MAAoB,4BAC7B,UAAYC,MAAW,QCChB,IAAMC,EAAgC,CACzC,KAAM,KACN,QAAS,MACb,EDDO,IAAMC,EAAaC,EAAa,CACnC,KAAM,aACN,aAAAC,EACA,MAAO,CAAC,CAAE,MAAAC,CAAM,IAAM,CAClB,GAAM,CAACC,EAAcC,CAAe,EAAU,WAAkB,EAAI,EAC9DC,EAAiB,SAA8B,IAAI,EAEnDC,EAAQ,CACV,QAASH,CACb,EAGMI,EAAoB,cAAY,IAAM,CAhBpD,IAAAC,EAiBYJ,EAAgB,EAAK,EAEjBC,EAAS,UACT,aAAaA,EAAS,OAAO,EAC7BA,EAAS,QAAU,OAGvBG,EAAAN,EAAM,UAAN,MAAAM,EAAA,KAAAN,EACJ,EAAG,CAACA,EAAM,OAAO,CAAC,EAGZ,YAAU,KACRG,EAAS,UACT,aAAaA,EAAS,OAAO,EAC7BA,EAAS,QAAU,MAGnB,OAAOH,EAAM,MAAS,UAAYA,EAAM,KAAO,GAAKC,IACpDE,EAAS,QAAU,WAAW,IAAM,CAChCE,EAAY,CAChB,EAAGL,EAAM,IAAI,GAGV,IAAM,CACLG,EAAS,UACT,aAAaA,EAAS,OAAO,EAC7BA,EAAS,QAAU,KAE3B,GACD,CAACH,EAAM,KAAMC,EAAcI,CAAW,CAAC,EAG1C,IAAME,EAAYC,EAAA,CACd,aAAc,UACd,YAAa,QACT,CAACP,GAAgB,CAAE,MAAO,CAAE,QAAS,MAAO,CAAE,GAStD,MAAO,CACH,MAAAG,EAEA,UAAAG,EACA,WAVe,CACf,aAAc,UACd,YAAa,QACb,QAASF,CACb,EAQI,YAAAA,CACJ,CACJ,CACJ,CAAC","names":["withHeadless","React","defaultProps","useMessage","withHeadless","defaultProps","props","visibleState","setVisibleState","timerRef","state","handleClose","_a","rootProps","__spreadValues"]}
|
|
File without changes
|
package/metergroup/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metergroup/useMeterGroup.ts","../../src/metergroup/useMeterGroup.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { defaultProps } from './useMeterGroup.props';\n\nexport const useMeterGroup = withHeadless({\n name: 'useMeterGroup',\n defaultProps,\n setup({ props }) {\n const min = props.min ?? 0;\n const max = props.max ?? 100;\n\n const percent = React.useCallback(\n (meterValue: number = 0) => {\n return Math.round(Math.max(0, Math.min(100, ((meterValue - min) / (max - min)) * 100)));\n },\n [min, max]\n );\n\n const percentAsString = React.useCallback((meterValue: number = 0) => `${percent(meterValue)}%`, [percent]);\n\n const rootProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'root' as const,\n 'data-orientation': props.orientation,\n role: 'meter' as const,\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': 0\n };\n\n const metersProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'meters' as const,\n 'data-orientation': props.orientation\n };\n\n const labelsProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'labels' as const,\n 'data-orientation': props.orientation\n };\n\n const meterProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'meter' as const,\n 'data-orientation': props.orientation\n };\n\n const markerProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'marker' as const\n };\n\n const labelProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'label' as const\n };\n\n const textProps = {\n 'data-scope': 'metergroup' as const,\n 'data-part': 'text' as const\n };\n\n return {\n rootProps,\n metersProps,\n labelsProps,\n meterProps,\n markerProps,\n labelProps,\n textProps,\n percent,\n percentAsString\n };\n }\n});\n","import type { UseMeterGroupProps } from '@primereact/types/headless/metergroup';\n\nexport const defaultProps: UseMeterGroupProps = {\n min: 0,\n max: 100,\n orientation: 'horizontal'\n};\n"],"mappings":"AAAA,OAAS,gBAAAA,MAAoB,4BAC7B,UAAYC,MAAW,QCChB,IAAMC,EAAmC,CAC5C,IAAK,EACL,IAAK,IACL,YAAa,YACjB,EDFO,IAAMC,EAAgBC,EAAa,CACtC,KAAM,gBACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CAPrB,IAAAC,EAAAC,EAQQ,IAAMC,GAAMF,EAAAD,EAAM,MAAN,KAAAC,EAAa,EACnBG,GAAMF,EAAAF,EAAM,MAAN,KAAAE,EAAa,IAEnBG,EAAgB,cAClB,CAACC,EAAqB,IACX,KAAK,MAAM,KAAK,IAAI,EAAG,KAAK,IAAI,KAAOA,EAAaH,IAAQC,EAAMD,GAAQ,GAAG,CAAC,CAAC,EAE1F,CAACA,EAAKC,CAAG,CACb,EAEMG,EAAwB,cAAY,CAACD,EAAqB,IAAM,GAAGD,EAAQC,CAAU,CAAC,IAAK,CAACD,CAAO,CAAC,EAEpGG,EAAY,CACd,aAAc,aACd,YAAa,OACb,mBAAoBR,EAAM,YAC1B,KAAM,QACN,gBAAiBG,EACjB,gBAAiBC,EACjB,gBAAiB,CACrB,EAEMK,EAAc,CAChB,aAAc,aACd,YAAa,SACb,mBAAoBT,EAAM,WAC9B,EAEMU,EAAc,CAChB,aAAc,aACd,YAAa,SACb,mBAAoBV,EAAM,WAC9B,EAEMW,EAAa,CACf,aAAc,aACd,YAAa,QACb,mBAAoBX,EAAM,WAC9B,EAiBA,MAAO,CACH,UAAAQ,EACA,YAAAC,EACA,YAAAC,EACA,WAAAC,EACA,YApBgB,CAChB,aAAc,aACd,YAAa,QACjB,EAkBI,WAhBe,CACf,aAAc,aACd,YAAa,OACjB,EAcI,UAZc,CACd,aAAc,aACd,YAAa,MACjB,EAUI,QAAAN,EACA,gBAAAE,CACJ,CACJ,CACJ,CAAC","names":["withHeadless","React","defaultProps","useMeterGroup","withHeadless","defaultProps","props","_a","_b","min","max","percent","meterValue","percentAsString","rootProps","metersProps","labelsProps","meterProps"]}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/navigationmenu/useNavigationMenu.ts","../../src/navigationmenu/useNavigationMenu.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { focus, toElement } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useNavigationMenu.props';\n\nconst compareDOMPosition = (a: HTMLElement, b: HTMLElement): number => {\n const position = a.compareDocumentPosition(b);\n\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n\n return 0;\n};\n\nexport const useNavigationMenu = withHeadless({\n name: 'useNavigationMenu',\n defaultProps,\n setup({ props }) {\n const [openMenuId, setOpenMenuIdState] = React.useState<string | null>(null);\n const openMenuIdRef = React.useRef<string | null>(null);\n\n openMenuIdRef.current = openMenuId;\n\n const triggerRegistry = React.useRef<Map<string, HTMLElement>>(new Map());\n // Per-menu callbacks fired when this navigationmenu transitions between two\n // sibling menus. Registered by each child Menu so it can flip its own\n // `instantType` and skip the enter/leave animation during fast\n // traversal (mirrors tooltip's manager → tooltip notify pattern).\n const instantSignalHandlers = React.useRef<Map<string, () => void>>(new Map());\n // Tracks which list item should receive focus the next time the open\n // menu mounts. Set by `ArrowDown` / `ArrowUp` / `Enter` / `Space` on a\n // trigger so the embedded Menu can pick it up in onListFocus and\n // focus the first or last item respectively (WAI-ARIA NavigationMenu\n // keyboard pattern).\n const pendingMenuFocusRef = React.useRef<'first' | 'last' | null>(null);\n\n const orientation = props.orientation ?? 'horizontal';\n const loopFocus = props.loopFocus ?? true;\n const modal = !!props.modal;\n const disabled = !!props.disabled;\n\n const state = {\n openMenuId,\n hasOpenMenu: openMenuId !== null\n };\n\n const registerInstantSignal = React.useCallback((menuId: string, handler: () => void) => {\n instantSignalHandlers.current.set(menuId, handler);\n\n return () => {\n if (instantSignalHandlers.current.get(menuId) === handler) {\n instantSignalHandlers.current.delete(menuId);\n }\n };\n }, []);\n\n const updateOpenMenuId = React.useCallback((updater: string | null | ((prev: string | null) => string | null)) => {\n const current = openMenuIdRef.current;\n const next = typeof updater === 'function' ? (updater as (prev: string | null) => string | null)(current) : updater;\n\n if (current !== null && next !== null && current !== next) {\n instantSignalHandlers.current.get(current)?.();\n instantSignalHandlers.current.get(next)?.();\n }\n\n setOpenMenuIdState(next);\n }, []);\n\n const setOpenMenuId = React.useCallback(\n (menuId: string | null) => {\n updateOpenMenuId(menuId);\n },\n [updateOpenMenuId]\n );\n\n const consumePendingFocus = React.useCallback(() => {\n const value = pendingMenuFocusRef.current;\n\n pendingMenuFocusRef.current = null;\n\n return value;\n }, []);\n\n const setPendingFocus = React.useCallback((target: 'first' | 'last' | null) => {\n pendingMenuFocusRef.current = target;\n }, []);\n\n const isMenuOpen = React.useCallback(\n (menuId: string) => {\n return openMenuId === menuId;\n },\n [openMenuId]\n );\n\n const registerTrigger = React.useCallback((menuId: string, element: HTMLElement | null) => {\n const resolved = toElement(element) ?? null;\n\n if (resolved) {\n triggerRegistry.current.set(menuId, resolved);\n } else {\n triggerRegistry.current.delete(menuId);\n }\n }, []);\n\n const getOrderedTriggers = React.useCallback((): Array<{ id: string; element: HTMLElement }> => {\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n triggerRegistry.current.forEach((element, id) => {\n if (!element.hasAttribute('data-disabled') && !(element as HTMLButtonElement).disabled) {\n items.push({ id, element });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const focusTriggerByDirection = React.useCallback(\n (currentId: string, direction: 'next' | 'previous' | 'first' | 'last') => {\n const triggers = getOrderedTriggers();\n\n if (triggers.length === 0) return;\n\n const currentIndex = triggers.findIndex((t) => t.id === currentId);\n let targetIndex: number;\n\n switch (direction) {\n case 'next':\n targetIndex = currentIndex + 1;\n\n if (targetIndex >= triggers.length) {\n targetIndex = loopFocus ? 0 : triggers.length - 1;\n }\n\n break;\n\n case 'previous':\n targetIndex = currentIndex - 1;\n\n if (targetIndex < 0) {\n targetIndex = loopFocus ? triggers.length - 1 : 0;\n }\n\n break;\n\n case 'first':\n targetIndex = 0;\n break;\n\n case 'last':\n targetIndex = triggers.length - 1;\n break;\n }\n\n const target = triggers[targetIndex];\n\n if (!target || target.id === currentId) return;\n\n focus(target.element);\n\n // If a menu is currently open, switch to the new trigger's menu.\n updateOpenMenuId((current) => (current !== null ? target.id : current));\n },\n [getOrderedTriggers, loopFocus]\n );\n\n const onTriggerKeyDown = React.useCallback(\n (menuId: string, event: React.KeyboardEvent) => {\n if (disabled) return;\n\n const isHorizontal = orientation === 'horizontal';\n // Sibling roving uses the cross-axis arrows (right/left for\n // horizontal navigationmenus). The orientation-axis arrows (down/up\n // for horizontal) open the menu instead of moving siblings.\n const nextSiblingKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prevSiblingKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n const openFirstKey = isHorizontal ? 'ArrowDown' : 'ArrowRight';\n const openLastKey = isHorizontal ? 'ArrowUp' : 'ArrowLeft';\n\n switch (event.key) {\n case nextSiblingKey:\n event.preventDefault();\n focusTriggerByDirection(menuId, 'next');\n break;\n\n case prevSiblingKey:\n event.preventDefault();\n focusTriggerByDirection(menuId, 'previous');\n break;\n\n case 'Home':\n event.preventDefault();\n focusTriggerByDirection(menuId, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n focusTriggerByDirection(menuId, 'last');\n break;\n\n case openFirstKey:\n case 'Enter':\n case ' ':\n // Open this menu and ask the embedded Menu to put\n // focus on its first item once the list mounts.\n event.preventDefault();\n pendingMenuFocusRef.current = 'first';\n updateOpenMenuId(menuId);\n break;\n\n case openLastKey:\n // Open this menu and put focus on its last item.\n event.preventDefault();\n pendingMenuFocusRef.current = 'last';\n updateOpenMenuId(menuId);\n break;\n\n default:\n break;\n }\n },\n [disabled, orientation, focusTriggerByDirection]\n );\n\n const onTriggerMouseEnter = React.useCallback(\n (menuId: string) => {\n if (disabled) return;\n\n // Hover-to-switch: when any menu is already open, hovering another trigger\n // moves the open state to it.\n updateOpenMenuId((current) => (current !== null && current !== menuId ? menuId : current));\n },\n [disabled, updateOpenMenuId]\n );\n\n const onMenuOpenChange = React.useCallback(\n (menuId: string, open: boolean) => {\n if (open) {\n updateOpenMenuId(menuId);\n } else {\n updateOpenMenuId((current) => (current === menuId ? null : current));\n }\n },\n [updateOpenMenuId]\n );\n\n const rootProps = {\n role: 'menubar' as const,\n 'aria-orientation': orientation,\n 'data-scope': 'navigationmenu' as const,\n 'data-part': 'root' as const,\n 'data-orientation': orientation,\n ...(state.hasOpenMenu && { 'data-has-open-menu': '' as const }),\n ...(modal && { 'data-modal': '' as const }),\n ...(disabled && { 'data-disabled': '' as const })\n };\n\n // Public sibling-navigation method used by Menu (when its list has\n // focus and the user presses Arrow keys) to jump to the next/previous\n // navigationmenu trigger and switch the open menu accordingly.\n const focusSibling = React.useCallback(\n (currentMenuId: string, direction: 'next' | 'previous') => {\n focusTriggerByDirection(currentMenuId, direction);\n },\n [focusTriggerByDirection]\n );\n\n return {\n state,\n // pre-built props\n rootProps,\n // echoed config (for child consumption)\n orientation,\n modal,\n disabled,\n // methods\n registerTrigger,\n setOpenMenuId,\n isMenuOpen,\n onTriggerKeyDown,\n onTriggerMouseEnter,\n onMenuOpenChange,\n focusSibling,\n setPendingFocus,\n consumePendingFocus,\n registerInstantSignal\n };\n }\n});\n","import type { UseNavigationMenuProps } from '@primereact/types/headless/navigationmenu';\n\nexport const defaultProps: UseNavigationMenuProps = {\n orientation: 'horizontal',\n loopFocus: true,\n modal: true,\n disabled: false\n};\n"],"mappings":"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","names":["withHeadless","focus","toElement","React","defaultProps","compareDOMPosition","a","b","position","useNavigationMenu","withHeadless","defaultProps","props","_a","_b","openMenuId","setOpenMenuIdState","openMenuIdRef","triggerRegistry","instantSignalHandlers","pendingMenuFocusRef","orientation","loopFocus","modal","disabled","state","registerInstantSignal","menuId","handler","updateOpenMenuId","updater","current","next","setOpenMenuId","consumePendingFocus","value","setPendingFocus","target","isMenuOpen","registerTrigger","element","resolved","toElement","getOrderedTriggers","items","id","focusTriggerByDirection","currentId","direction","triggers","currentIndex","t","targetIndex","focus","onTriggerKeyDown","event","isHorizontal","nextSiblingKey","prevSiblingKey","openFirstKey","openLastKey","onTriggerMouseEnter","onMenuOpenChange","open","rootProps","__spreadValues","focusSibling","currentMenuId"]}
|
|
File without changes
|
package/orderlist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderlist/useOrderList.ts","../../src/dnd/useSortableContainer.ts","../../src/dnd/useSortableContainer.props.ts","../../src/orderlist/useOrderList.props.ts"],"sourcesContent":["import { arrayMove } from '@primereact/core/dnd';\nimport { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { useSortableContainer } from '../dnd/useSortableContainer';\nimport { defaultProps } from './useOrderList.props';\n\nexport const useOrderList = withHeadless({\n name: 'useOrderList',\n defaultProps,\n setup({ id, props }) {\n const [valueState, setValueState] = React.useState(props.value ?? []);\n\n React.useEffect(() => {\n if (props.value !== undefined) setValueState(props.value);\n }, [props.value]);\n\n const selection = props.selection ?? [];\n\n const isItemSelected = React.useCallback((item: unknown): boolean => selection.indexOf(item) !== -1, [selection]);\n\n const updateValue = (newValue: unknown[], event?: React.SyntheticEvent | Event) => {\n setValueState(newValue);\n props.onReorder?.({ originalEvent: event, value: newValue });\n };\n\n const updateValueRef = React.useRef(updateValue);\n\n updateValueRef.current = updateValue;\n\n const valueRef = React.useRef(valueState);\n\n valueRef.current = valueState;\n\n const getSelectedIndices = (list: unknown[]): Set<number> => {\n const indices = new Set<number>();\n\n for (const sel of selection) {\n const idx = list.indexOf(sel);\n\n if (idx !== -1) indices.add(idx);\n }\n\n return indices;\n };\n\n const moveUp = (event?: React.SyntheticEvent) => {\n if (selection.length === 0 || !Array.isArray(valueState)) return;\n\n const list = [...valueState];\n const selectedIndices = getSelectedIndices(list);\n const sorted = [...selectedIndices].sort((a, b) => a - b);\n let moved = false;\n\n for (const idx of sorted) {\n if (idx > 0 && !selectedIndices.has(idx - 1)) {\n [list[idx], list[idx - 1]] = [list[idx - 1], list[idx]];\n selectedIndices.delete(idx);\n selectedIndices.add(idx - 1);\n moved = true;\n }\n }\n\n if (moved) updateValue(list, event);\n };\n\n const moveDown = (event?: React.SyntheticEvent) => {\n if (selection.length === 0 || !Array.isArray(valueState)) return;\n\n const list = [...valueState];\n const selectedIndices = getSelectedIndices(list);\n const sorted = [...selectedIndices].sort((a, b) => b - a);\n let moved = false;\n\n for (const idx of sorted) {\n if (idx < list.length - 1 && !selectedIndices.has(idx + 1)) {\n [list[idx], list[idx + 1]] = [list[idx + 1], list[idx]];\n selectedIndices.delete(idx);\n selectedIndices.add(idx + 1);\n moved = true;\n }\n }\n\n if (moved) updateValue(list, event);\n };\n\n const moveTop = (event?: React.SyntheticEvent) => {\n if (selection.length === 0 || !Array.isArray(valueState)) return;\n\n const selected: unknown[] = [];\n const rest: unknown[] = [];\n\n for (const item of valueState) {\n (isItemSelected(item) ? selected : rest).push(item);\n }\n\n updateValue([...selected, ...rest], event);\n };\n\n const moveBottom = (event?: React.SyntheticEvent) => {\n if (selection.length === 0 || !Array.isArray(valueState)) return;\n\n const selected: unknown[] = [];\n const rest: unknown[] = [];\n\n for (const item of valueState) {\n (isItemSelected(item) ? selected : rest).push(item);\n }\n\n updateValue([...rest, ...selected], event);\n };\n\n const {\n state: sortableState,\n getItemDndProps,\n listProps: sortableListProps\n } = useSortableContainer({\n id: 'orderlist',\n items: valueState,\n disabled: props.disabled || !props.draggable,\n placeholder: props.placeholder,\n onSort: ({ fromIndex, toIndex }: { fromIndex: number; toIndex: number }) => {\n const newValue = arrayMove(valueRef.current as unknown[], fromIndex, toIndex);\n\n updateValueRef.current(newValue);\n }\n });\n\n const getOptionProps = (item: unknown, index: number) => ({\n 'data-scope': 'orderlist',\n 'data-part': 'option',\n ...(isItemSelected(item) ? { 'data-selected': '' } : {}),\n ...getItemDndProps(index)\n });\n\n const hasSelection = Array.isArray(selection) && selection.length > 0;\n\n return {\n state: {\n value: valueState as unknown[],\n selection,\n dragging: sortableState.dragging\n },\n getOptionProps,\n moveUp,\n moveDown,\n moveTop,\n moveBottom,\n rootProps: { id, 'data-scope': 'orderlist', 'data-part': 'root' },\n controlsProps: { 'data-scope': 'orderlist', 'data-part': 'controls' },\n listProps: { 'data-scope': 'orderlist', 'data-part': 'list', ...sortableListProps },\n prevProps: { 'data-scope': 'orderlist', 'data-part': 'prev', type: 'button' as const, disabled: props.disabled || !hasSelection, 'aria-label': 'Move Up', onClick: (e: React.MouseEvent) => moveUp(e) },\n nextProps: { 'data-scope': 'orderlist', 'data-part': 'next', type: 'button' as const, disabled: props.disabled || !hasSelection, 'aria-label': 'Move Down', onClick: (e: React.MouseEvent) => moveDown(e) },\n firstProps: { 'data-scope': 'orderlist', 'data-part': 'first', type: 'button' as const, disabled: props.disabled || !hasSelection, 'aria-label': 'Move Top', onClick: (e: React.MouseEvent) => moveTop(e) },\n lastProps: { 'data-scope': 'orderlist', 'data-part': 'last', type: 'button' as const, disabled: props.disabled || !hasSelection, 'aria-label': 'Move Bottom', onClick: (e: React.MouseEvent) => moveBottom(e) }\n };\n }\n});\n","import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport type { DndCoordinator } from './useDnd';\nimport { defaultProps } from './useSortableContainer.props';\n\nconst getSortableItems = (listEl: HTMLElement): HTMLElement[] => Array.from(listEl.querySelectorAll(':scope > [data-sortable-item]'));\n\nexport const useSortableContainer = withHeadless({\n name: 'useSortableContainer',\n defaultProps,\n setup({ props }) {\n const dnd = props.dnd as DndCoordinator | undefined;\n const id = props.id;\n const items = props.items ?? [];\n const disabled = props.disabled ?? false;\n const placeholderMode = props.placeholder ?? 'clone';\n const onSort = props.onSort;\n const scopedListId = dnd ? `${dnd.uid}_${id}` : String(id);\n\n const listRef = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n if (!dnd || id == null) return;\n\n dnd.containers.set(id, { listRef, items });\n\n return () => {\n dnd.containers.delete(id);\n };\n }, [dnd, id]);\n\n const itemsRef = React.useRef(items);\n\n itemsRef.current = items;\n\n React.useEffect(() => {\n if (dnd && id != null) {\n const c = dnd.containers.get(id);\n\n if (c) c.items = items;\n }\n }, [dnd, id, items]);\n\n const [dragging, setDragging] = React.useState(false);\n\n const scrollRafRef = React.useRef<number>(0);\n\n const dragStateRef = React.useRef<{\n startX: number;\n startY: number;\n startScrollTop: number;\n node: HTMLElement;\n ghost: HTMLElement;\n clone: HTMLElement;\n itemHeight: number;\n gap: number;\n fromIndex: number;\n projectedIndex: number;\n originContainerId: unknown;\n currentContainerId: unknown;\n itemsAtStart: Map<unknown, unknown[]>;\n } | null>(null);\n\n const applyShifts = (listEl: HTMLElement, fromIndex: number, projectedIndex: number, draggedNode: HTMLElement, clone: HTMLElement, itemHeight: number, gap: number) => {\n const shift = itemHeight + gap;\n\n // During drag: node has data-sortable-item removed, clone has no data-sortable-item.\n // So getSortableItems returns only real siblings, in their original DOM order.\n // Items before fromIndex keep their index; items at/after fromIndex are shifted by 1.\n const realItems = getSortableItems(listEl);\n\n for (let i = 0; i < realItems.length; i++) {\n const logicalIndex = i < fromIndex ? i : i + 1;\n let offset = 0;\n\n if (fromIndex < projectedIndex) {\n if (logicalIndex > fromIndex && logicalIndex <= projectedIndex) offset = -shift;\n } else if (fromIndex > projectedIndex) {\n if (logicalIndex >= projectedIndex && logicalIndex < fromIndex) offset = shift;\n }\n\n realItems[i].style.transform = offset ? `translateY(${offset}px)` : '';\n }\n\n // Clone is placeholder at fromIndex slot; shift it to projectedIndex\n clone.style.transform = projectedIndex !== fromIndex ? `translateY(${(projectedIndex - fromIndex) * shift}px)` : '';\n };\n\n const clearShifts = (listEl: HTMLElement | null) => {\n if (!listEl) return;\n\n for (const child of getSortableItems(listEl)) {\n child.style.transform = '';\n }\n };\n\n const getListGap = (listEl: HTMLElement) => {\n const children = getSortableItems(listEl);\n\n return children.length > 1 ? children[1].getBoundingClientRect().top - children[0].getBoundingClientRect().bottom : 4;\n };\n\n const createGhost = (node: HTMLElement, rect: DOMRect): HTMLElement => {\n const ghost = node.cloneNode(true) as HTMLElement;\n\n ghost.setAttribute('inert', 'true');\n ghost.removeAttribute('data-sortable-item');\n ghost.removeAttribute('data-sortable-container');\n ghost.style.position = 'fixed';\n ghost.style.zIndex = '9999';\n ghost.style.pointerEvents = 'none';\n ghost.style.width = `${rect.width}px`;\n ghost.style.height = `${rect.height}px`;\n ghost.style.left = `${rect.left}px`;\n ghost.style.top = `${rect.top}px`;\n ghost.style.margin = '0';\n ghost.style.transform = 'translate(0px, 0px)';\n ghost.style.transition = 'none';\n ghost.style.opacity = '0.9';\n ghost.style.boxShadow = '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)';\n document.body.appendChild(ghost);\n\n return ghost;\n };\n\n const discoverListRefs = () => {\n if (dnd) {\n for (const [cId, cInfo] of dnd.containers) {\n if (!cInfo.listRef.current || !cInfo.listRef.current.isConnected) {\n const scopedId = `${dnd.uid}_${cId}`;\n const listEl = document.querySelector(`[data-sortable-list=\"${scopedId}\"]`) as HTMLElement | null;\n\n if (listEl) {\n cInfo.listRef.current = listEl;\n }\n }\n }\n }\n };\n\n const getItemDndProps = (index: number) => {\n if (disabled) return { 'data-sortable-item': '', 'data-sortable-container': String(id) };\n\n return {\n 'data-sortable-item': '',\n 'data-sortable-container': String(id),\n onPointerDown: (e: React.PointerEvent<HTMLElement>) => {\n if (e.button !== 0 || disabled) return;\n\n const node = e.currentTarget;\n const listEl = node.parentElement as HTMLElement;\n\n if (listEl) {\n listRef.current = listEl;\n\n if (dnd && id != null) {\n const c = dnd.containers.get(id);\n\n if (c) c.listRef.current = listEl;\n }\n }\n\n discoverListRefs();\n\n const rect = node.getBoundingClientRect();\n const startX = e.clientX;\n const startY = e.clientY;\n let activated = false;\n\n const containerId = id;\n const hasMultipleContainers = dnd ? dnd.containers.size > 1 : false;\n\n const itemsAtStart = new Map<unknown, unknown[]>();\n\n if (dnd) {\n for (const [cId, cInfo] of dnd.containers) {\n itemsAtStart.set(cId, [...cInfo.items]);\n }\n } else {\n itemsAtStart.set(id, [...itemsRef.current]);\n }\n\n let lastPointerX = startX;\n let lastPointerY = startY;\n\n const updateProjection = () => {\n const state = dragStateRef.current;\n\n if (!state) return;\n\n let hoveredContainerId = state.originContainerId;\n\n if (hasMultipleContainers && dnd) {\n for (const [cId, cInfo] of dnd.containers) {\n // Re-discover stale or missing refs on the fly\n if (!cInfo.listRef.current || !cInfo.listRef.current.isConnected) {\n const scopedId = `${dnd.uid}_${cId}`;\n const listEl = document.querySelector(`[data-sortable-list=\"${scopedId}\"]`) as HTMLElement | null;\n\n if (listEl) cInfo.listRef.current = listEl;\n }\n\n const cRect = cInfo.listRef.current?.getBoundingClientRect();\n\n if (cRect && lastPointerX >= cRect.left && lastPointerX <= cRect.right && lastPointerY >= cRect.top && lastPointerY <= cRect.bottom) {\n hoveredContainerId = cId;\n break;\n }\n }\n }\n\n const hoveredList = hasMultipleContainers && dnd ? dnd.containers.get(hoveredContainerId)?.listRef.current : listRef.current;\n\n if (!hoveredList) return;\n\n const oList = hasMultipleContainers && dnd ? dnd.containers.get(state.originContainerId)?.listRef.current : listRef.current;\n const scrollDelta = (oList?.scrollTop ?? 0) - state.startScrollTop;\n const dy = lastPointerY - state.startY;\n const step = state.itemHeight + state.gap;\n const hoveredItems = state.itemsAtStart.get(hoveredContainerId) ?? [];\n\n let projected: number;\n\n if (hoveredContainerId === state.originContainerId) {\n projected = state.fromIndex + Math.round((dy + scrollDelta) / step);\n projected = Math.max(0, Math.min(hoveredItems.length - 1, projected));\n } else {\n const listRect = hoveredList.getBoundingClientRect();\n const listPadding = parseFloat(getComputedStyle(hoveredList).paddingTop) || 0;\n const relY = lastPointerY - listRect.top - listPadding;\n\n projected = Math.round(relY / step);\n projected = Math.max(0, Math.min(hoveredItems.length, projected));\n }\n\n const sideChanged = hoveredContainerId !== state.currentContainerId;\n\n if (sideChanged || projected !== state.projectedIndex) {\n // When switching containers, smooth-clear the old hovered list\n if (sideChanged && dnd) {\n const oldList = dnd.containers.get(state.currentContainerId)?.listRef.current;\n\n if (oldList) clearShifts(oldList);\n }\n\n state.currentContainerId = hoveredContainerId;\n state.projectedIndex = projected;\n\n if (dnd) {\n dnd.setState({ currentContainerId: hoveredContainerId, projectedIndex: projected });\n }\n\n if (hoveredContainerId === state.originContainerId) {\n // Move clone back to origin list (before the dragged node)\n if (sideChanged) {\n state.node.parentElement?.insertBefore(state.clone, state.node);\n }\n\n state.clone.style.height = `${state.itemHeight}px`;\n state.clone.style.overflow = '';\n applyShifts(hoveredList, state.fromIndex, projected, state.node, state.clone, state.itemHeight, state.gap);\n } else {\n // Measure the hovered list's own step — may differ from origin list's step.\n const hoveredItems = getSortableItems(hoveredList);\n const hoveredStep = hoveredItems.length >= 2 ? hoveredItems[1].getBoundingClientRect().top - hoveredItems[0].getBoundingClientRect().top : state.itemHeight + state.gap;\n\n // On container switch: move clone to document.body as position:fixed.\n // This avoids any layout impact on the hovered list (no scroll growth).\n if (sideChanged) {\n document.body.appendChild(state.clone);\n state.clone.style.position = 'fixed';\n state.clone.style.height = `${state.itemHeight}px`;\n state.clone.style.overflow = 'hidden';\n state.clone.style.transform = '';\n state.clone.style.margin = '0';\n state.clone.style.zIndex = '9998';\n state.clone.style.pointerEvents = 'none';\n state.clone.style.boxSizing = 'border-box';\n hoveredList.style.position = '';\n }\n\n // Position clone at the projected slot using fixed viewport coords.\n // Use offsetTop (transform-independent) + list viewport offset for accuracy.\n const listRect = hoveredList.getBoundingClientRect();\n const listScrollTop = hoveredList.scrollTop;\n const listPadding = parseFloat(getComputedStyle(hoveredList).paddingTop) || 0;\n\n let cloneFixedTop: number;\n\n if (hoveredItems.length === 0) {\n cloneFixedTop = listRect.top + listPadding;\n } else if (projected < hoveredItems.length) {\n // Use getBoundingClientRect which accounts for scrollTop correctly.\n // Called before shift transforms are applied, so value is layout-accurate.\n cloneFixedTop = hoveredItems[projected].getBoundingClientRect().top;\n } else {\n const last = hoveredItems[hoveredItems.length - 1];\n\n cloneFixedTop = last.getBoundingClientRect().bottom + (hoveredStep - last.getBoundingClientRect().height);\n }\n\n state.clone.style.top = `${cloneFixedTop}px`;\n state.clone.style.left = `${listRect.left}px`;\n state.clone.style.width = `${listRect.width}px`;\n state.clone.style.transform = '';\n\n // Shift items at and after projected down to make room for clone\n for (let i = 0; i < hoveredItems.length; i++) {\n hoveredItems[i].style.transform = i >= projected ? `translateY(${hoveredStep}px)` : '';\n }\n }\n }\n\n return hoveredList;\n };\n\n const onMove = (ev: PointerEvent) => {\n const dist = Math.sqrt((ev.clientX - startX) ** 2 + (ev.clientY - startY) ** 2);\n\n if (!activated && dist < 5) return;\n\n if (!activated) {\n activated = true;\n\n const list = listRef.current;\n const gap = list ? getListGap(list) : 4;\n\n let clone: HTMLElement;\n\n if (placeholderMode === 'empty') {\n clone = document.createElement(node.tagName) as HTMLElement;\n } else {\n clone = node.cloneNode(true) as HTMLElement;\n }\n\n clone.setAttribute('inert', 'true');\n clone.setAttribute('data-sortable-placeholder', '');\n clone.removeAttribute('data-sortable-item');\n clone.removeAttribute('data-sortable-container');\n clone.style.width = `${rect.width}px`;\n clone.style.height = `${rect.height}px`;\n clone.style.flexShrink = '0';\n clone.style.transition = 'transform 200ms ease, opacity 150ms ease';\n clone.style.opacity = '0';\n node.parentElement?.insertBefore(clone, node);\n // Fade clone in on next frame so the slot opens smoothly\n requestAnimationFrame(() => {\n clone.style.opacity = '1';\n });\n\n // Blur the list so Listbox clears its focusedOptionIndex (removes p-focus class)\n listRef.current?.blur();\n\n // Create ghost BEFORE modifying node (cloneNode copies current inline styles)\n const ghost = createGhost(node, rect);\n\n // Keep node in DOM but out of flow — clone holds the layout slot.\n // Remove data-sortable-item so getSortableItems ignores it during drag.\n node.setAttribute('data-dragging', '');\n node.removeAttribute('data-sortable-item');\n node.style.position = 'absolute';\n node.style.visibility = 'hidden';\n node.style.pointerEvents = 'none';\n\n // Disable pointer events on all sibling items to prevent CSS :hover during drag\n const listEl2 = node.parentElement;\n\n if (listEl2) {\n for (const sibling of getSortableItems(listEl2)) {\n if (sibling !== node) {\n sibling.style.pointerEvents = 'none';\n sibling.style.transition = 'transform 200ms ease';\n }\n }\n }\n\n // For multi-container DnD, also prep the other list's items\n if (dnd) {\n for (const [cId, cInfo] of dnd.containers) {\n if (cId !== containerId && cInfo.listRef.current) {\n for (const sibling of getSortableItems(cInfo.listRef.current)) {\n sibling.style.pointerEvents = 'none';\n sibling.style.transition = 'transform 200ms ease';\n }\n }\n }\n }\n\n dragStateRef.current = {\n startX,\n startY,\n startScrollTop: list?.scrollTop ?? 0,\n node,\n ghost,\n clone,\n itemHeight: rect.height,\n gap,\n fromIndex: index,\n projectedIndex: index,\n originContainerId: containerId,\n currentContainerId: containerId,\n itemsAtStart\n };\n\n setDragging(true);\n\n if (dnd) {\n dnd.setState({\n dragging: true,\n activeContainerId: containerId,\n currentContainerId: containerId,\n fromIndex: index,\n projectedIndex: index\n });\n }\n }\n\n const state = dragStateRef.current;\n\n if (!state) return;\n\n lastPointerX = ev.clientX;\n lastPointerY = ev.clientY;\n\n state.ghost.style.transform = `translate(${ev.clientX - state.startX}px, ${ev.clientY - state.startY}px)`;\n\n const hoveredList = updateProjection();\n\n // Auto-scroll\n cancelAnimationFrame(scrollRafRef.current);\n\n if (hoveredList) {\n const scrollThreshold = 40;\n const scrollSpeed = 8;\n\n const autoScroll = () => {\n const lr = hoveredList.getBoundingClientRect();\n const distTop = lastPointerY - lr.top;\n const distBottom = lr.bottom - lastPointerY;\n\n let scrolled = false;\n\n if (distTop > 0 && distTop < scrollThreshold) {\n hoveredList.scrollTop -= scrollSpeed;\n scrolled = true;\n } else if (distBottom > 0 && distBottom < scrollThreshold) {\n hoveredList.scrollTop += scrollSpeed;\n scrolled = true;\n }\n\n if (scrolled) {\n // Force clone reposition after scroll by invalidating cached projected index\n if (dragStateRef.current) dragStateRef.current.projectedIndex = -1;\n updateProjection();\n scrollRafRef.current = requestAnimationFrame(autoScroll);\n }\n };\n\n autoScroll();\n }\n };\n\n const onUp = () => {\n document.removeEventListener('pointermove', onMove);\n document.removeEventListener('pointerup', onUp);\n cancelAnimationFrame(scrollRafRef.current);\n\n const state = dragStateRef.current;\n\n if (!state) return;\n\n const isCrossList = state.currentContainerId !== state.originContainerId;\n\n let finalized = false;\n\n const finalize = () => {\n if (finalized) return;\n\n finalized = true;\n state.ghost.removeEventListener('transitionend', finalize);\n cancelAnimationFrame(scrollRafRef.current);\n\n // Remove ghost and placeholder\n state.ghost.remove();\n state.clone.remove();\n\n // Collect all relevant lists\n const allLists: HTMLElement[] = [];\n\n if (dnd && dnd.containers.size > 1) {\n for (const [, cInfo] of dnd.containers) {\n if (cInfo.listRef.current) allLists.push(cInfo.listRef.current);\n }\n } else if (listRef.current) {\n allLists.push(listRef.current);\n }\n\n // Keep node in DOM — React will replace or reconcile it during flushSync.\n // Restore position so it participates in layout correctly,\n // but keep visibility:hidden + pointer-events:none until after flushSync.\n state.node.style.position = '';\n state.node.removeAttribute('data-dragging');\n state.node.setAttribute('data-sortable-item', '');\n\n // Freeze transforms and restore pointer-events before React re-render\n for (const list of allLists) {\n for (const child of getSortableItems(list)) {\n child.style.transition = 'none';\n child.style.transform = '';\n child.style.pointerEvents = '';\n }\n }\n\n flushSync(() => {\n if (!isCrossList) {\n if (state.fromIndex !== state.projectedIndex) {\n if (dnd?.onSort) {\n dnd.onSort({ containerId: state.originContainerId, fromIndex: state.fromIndex, toIndex: state.projectedIndex });\n } else if (onSort) {\n onSort({ containerId: state.originContainerId, fromIndex: state.fromIndex, toIndex: state.projectedIndex });\n }\n }\n } else {\n dnd?.onTransfer?.({\n from: { containerId: state.originContainerId, index: state.fromIndex },\n to: { containerId: state.currentContainerId, index: state.projectedIndex }\n });\n }\n });\n\n // Force reflow then restore transitions\n for (const list of allLists) {\n void list.offsetHeight;\n\n for (const child of getSortableItems(list)) {\n child.style.transition = '';\n child.style.visibility = '';\n child.style.pointerEvents = '';\n }\n }\n\n dragStateRef.current = null;\n setDragging(false);\n\n if (dnd) {\n dnd.setState({\n dragging: false,\n activeContainerId: null,\n currentContainerId: null,\n fromIndex: -1,\n projectedIndex: -1\n });\n }\n\n // Restore focus to the drop target list with the correct item focused.\n // data-dnd-focus-index is read by useListbox.onListFocus to set focusedOptionIndex.\n const dropContainerId = isCrossList ? state.currentContainerId : state.originContainerId;\n const dropList = hasMultipleContainers && dnd ? dnd.containers.get(dropContainerId)?.listRef.current : listRef.current;\n\n if (dropList) {\n dropList.dataset.dndFocusIndex = String(state.projectedIndex);\n dropList.focus();\n delete dropList.dataset.dndFocusIndex;\n }\n };\n\n // Fade ghost out in place — no positional animation to avoid jump artifacts\n state.ghost.style.transition = 'opacity 150ms ease-out';\n state.ghost.style.opacity = '0';\n\n state.ghost.addEventListener('transitionend', finalize, { once: true });\n\n setTimeout(() => {\n if (dragStateRef.current === state) {\n finalize();\n }\n }, 200);\n };\n\n document.addEventListener('pointermove', onMove);\n document.addEventListener('pointerup', onUp);\n }\n };\n };\n\n const state = {\n dragging\n };\n\n const rootProps = React.useMemo(\n () => ({\n 'data-scope': 'dnd',\n 'data-part': 'sortable-container',\n ...(dragging ? { 'data-active': '' } : undefined),\n ...(disabled ? { 'data-disabled': '' } : undefined)\n }),\n [dragging, disabled]\n );\n\n const listProps = React.useMemo(\n () => ({\n 'data-sortable-list': scopedListId\n }),\n [scopedListId]\n );\n\n return {\n state,\n getItemDndProps,\n listProps,\n rootProps\n };\n }\n});\n","import type { UseSortableContainerProps } from '@primereact/types/headless/dnd';\n\nexport const defaultProps: UseSortableContainerProps = {\n dnd: undefined,\n id: undefined,\n items: undefined,\n disabled: false,\n placeholder: 'empty',\n onSort: undefined\n};\n","import type { UseOrderListProps } from '@primereact/types/headless/orderlist';\n\nexport const defaultProps: UseOrderListProps = {\n value: undefined,\n selection: undefined,\n disabled: false,\n draggable: false,\n placeholder: 'empty',\n onReorder: undefined\n};\n"],"mappings":"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","names":["arrayMove","withHeadless","React","withHeadless","React","flushSync","defaultProps","getSortableItems","listEl","useSortableContainer","withHeadless","defaultProps","props","_a","_b","_c","dnd","id","items","disabled","placeholderMode","onSort","scopedListId","listRef","itemsRef","c","dragging","setDragging","scrollRafRef","dragStateRef","applyShifts","fromIndex","projectedIndex","draggedNode","clone","itemHeight","gap","shift","realItems","i","logicalIndex","offset","clearShifts","child","getListGap","children","createGhost","node","rect","ghost","discoverListRefs","cId","cInfo","scopedId","getItemDndProps","index","e","startX","startY","activated","containerId","hasMultipleContainers","itemsAtStart","lastPointerX","lastPointerY","updateProjection","_d","_e","_f","_g","state","hoveredContainerId","cRect","hoveredList","oList","scrollDelta","dy","step","hoveredItems","projected","listRect","listPadding","relY","sideChanged","oldList","hoveredStep","listScrollTop","cloneFixedTop","last","onMove","ev","dist","list","listEl2","sibling","autoScroll","lr","distTop","distBottom","scrolled","onUp","isCrossList","finalized","finalize","allLists","flushSync","dropContainerId","dropList","rootProps","__spreadValues","listProps","defaultProps","useOrderList","withHeadless","defaultProps","id","props","_a","_b","valueState","setValueState","selection","isItemSelected","item","updateValue","newValue","event","updateValueRef","valueRef","getSelectedIndices","list","indices","sel","idx","moveUp","selectedIndices","sorted","a","b","moved","moveDown","moveTop","selected","rest","moveBottom","sortableState","getItemDndProps","sortableListProps","useSortableContainer","fromIndex","toIndex","arrayMove","getOptionProps","index","__spreadValues","hasSelection","e"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/organizationchart/useOrganizationChart.ts","../../src/organizationchart/useOrganizationChart.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useControlledState } from '@primereact/hooks/use-controlled-state';\nimport type { OrganizationChartCollapsedKeys, OrganizationChartSelectionKeys, TreeNode } from '@primereact/types/headless/organizationchart';\nimport * as React from 'react';\nimport { defaultProps } from './useOrganizationChart.props';\n\nfunction findNode(nodes: TreeNode[], key: string): TreeNode | null {\n for (const node of nodes) {\n if (node.key === key) return node;\n\n if (node.children) {\n const found = findNode(node.children, key);\n\n if (found) return found;\n }\n }\n\n return null;\n}\n\nfunction getDescendantKeys(node: TreeNode): string[] {\n const keys: string[] = [];\n\n for (const child of node.children ?? []) {\n keys.push(child.key, ...getDescendantKeys(child));\n }\n\n return keys;\n}\n\nfunction getAncestorKeys(nodes: TreeNode[], targetKey: string): string[] {\n const path: string[] = [];\n\n const walk = (list: TreeNode[], trail: string[]): boolean => {\n for (const node of list) {\n if (node.key === targetKey) {\n path.push(...trail);\n\n return true;\n }\n\n if (node.children && walk(node.children, [...trail, node.key])) return true;\n }\n\n return false;\n };\n\n walk(nodes, []);\n\n return path;\n}\n\nexport const useOrganizationChart = withHeadless({\n name: 'useOrganizationChart',\n defaultProps,\n setup({ props }) {\n const defaultCollapsedRef = React.useRef(props.defaultCollapsedKeys ?? {});\n const [collapsedKeyState, setCollapsedKeyState] = useControlledState({\n value: props.collapsedKeys,\n defaultValue: defaultCollapsedRef.current,\n onChange: props.onCollapsedChange\n });\n\n const defaultSelectionRef = React.useRef(props.defaultSelectionKeys ?? {});\n const [selectionKeyState, setSelectionKeyState] = useControlledState({\n value: props.selectionKeys,\n defaultValue: defaultSelectionRef.current,\n onChange: props.onSelectionChange\n });\n\n const collapsedKeys = (collapsedKeyState ?? {}) as OrganizationChartCollapsedKeys;\n const selectionKeys = (selectionKeyState ?? {}) as OrganizationChartSelectionKeys;\n\n const getNodes = React.useCallback(() => props.value ?? [], [props.value]);\n\n const findNodeByKey = React.useCallback((key: string) => findNode(props.value ?? [], key) ?? undefined, [props.value]);\n\n const getNodeLevel = React.useCallback((key: string) => getAncestorKeys(props.value ?? [], key).length + 1, [props.value]);\n\n const state = {\n collapsedKeys,\n selectionKeys\n };\n\n // ---- Predicates -------------------------------------------------------\n\n const isExpandable = React.useCallback((node?: TreeNode) => Boolean(node?.children && node.children.length > 0), []);\n\n const isSelectable = React.useCallback(() => props.selectionMode != null, [props.selectionMode]);\n\n const isCollapsed = React.useCallback(\n (node?: TreeNode) => {\n if (!node?.key) return false;\n\n return collapsedKeys[node.key] === true;\n },\n [collapsedKeys]\n );\n\n const isSelected = React.useCallback(\n (node?: TreeNode) => {\n if (!node?.key) return false;\n\n const entry = selectionKeys[node.key];\n\n if (props.selectionMode === 'checkbox') return (entry as { checked?: boolean } | undefined)?.checked === true;\n\n return entry === true;\n },\n [selectionKeys, props.selectionMode]\n );\n\n const isPartiallySelected = React.useCallback(\n (node?: TreeNode) => {\n if (!node?.key || props.selectionMode !== 'checkbox') return false;\n\n return (selectionKeys[node.key] as { partialChecked?: boolean } | undefined)?.partialChecked === true;\n },\n [selectionKeys, props.selectionMode]\n );\n\n // ---- Collapse ---------------------------------------------------------\n\n const toggleNodeCollapse = React.useCallback(\n (key?: string, event?: React.SyntheticEvent) => {\n if (!key) return;\n\n const next = { ...collapsedKeys };\n\n if (next[key]) delete next[key];\n else next[key] = true;\n\n const originalEvent = event ?? ({} as React.SyntheticEvent);\n\n setCollapsedKeyState([next, { originalEvent, value: next }]);\n },\n [collapsedKeys, setCollapsedKeyState]\n );\n\n // ---- Selection --------------------------------------------------------\n\n const commitSelection = React.useCallback(\n (next: OrganizationChartSelectionKeys, event?: React.SyntheticEvent) => {\n const originalEvent = event ?? ({} as React.SyntheticEvent);\n\n setSelectionKeyState([next, { originalEvent, value: next }]);\n },\n [setSelectionKeyState]\n );\n\n const toggleCheckboxSelect = React.useCallback(\n (key: string, event?: React.SyntheticEvent) => {\n const root = getNodes();\n const node = findNode(root, key);\n\n if (!node) return;\n\n const next: Record<string, { checked: boolean; partialChecked: boolean }> = {};\n\n for (const [k, v] of Object.entries(selectionKeys)) {\n next[k] = v as { checked: boolean; partialChecked: boolean };\n }\n\n const selecting = next[key]?.checked !== true;\n const downKeys = [key, ...getDescendantKeys(node)];\n\n for (const k of downKeys) {\n if (selecting) next[k] = { checked: true, partialChecked: false };\n else delete next[k];\n }\n\n const ancestors = getAncestorKeys(root, key);\n\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const ancestorKey = ancestors[i];\n const ancestorNode = findNode(root, ancestorKey);\n\n if (!ancestorNode?.children) continue;\n\n const childKeys = ancestorNode.children.map((c) => c.key);\n const allChecked = childKeys.every((c) => next[c]?.checked);\n const someChecked = childKeys.some((c) => next[c]?.checked || next[c]?.partialChecked);\n\n if (allChecked) next[ancestorKey] = { checked: true, partialChecked: false };\n else if (someChecked) next[ancestorKey] = { checked: false, partialChecked: true };\n else delete next[ancestorKey];\n }\n\n commitSelection(next, event);\n },\n [getNodes, selectionKeys, commitSelection]\n );\n\n const toggleNodeSelect = React.useCallback(\n (key?: string, event?: React.SyntheticEvent) => {\n if (!key || props.selectionMode == null) return;\n\n if (props.selectionMode === 'checkbox') {\n toggleCheckboxSelect(key, event);\n\n return;\n }\n\n const current = selectionKeys[key] === true;\n let next: OrganizationChartSelectionKeys;\n\n if (props.selectionMode === 'single') {\n next = current ? {} : { [key]: true };\n } else {\n next = { ...selectionKeys };\n\n if (current) delete next[key];\n else next[key] = true;\n }\n\n commitSelection(next, event);\n },\n [props.selectionMode, selectionKeys, toggleCheckboxSelect, commitSelection]\n );\n\n // ---- Keyboard ---------------------------------------------------------\n\n const handleNodeKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>, key?: string) => {\n if (event.key === 'Enter' || event.key === ' ') {\n toggleNodeSelect(key, event);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [toggleNodeSelect]\n );\n\n const handleCollapseKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>, key?: string) => {\n if (event.key === 'Enter' || event.key === ' ') {\n toggleNodeCollapse(key, event);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [toggleNodeCollapse]\n );\n\n // ---- Style ------------------------------------------------------------\n\n const orgChartStyle = React.useMemo(() => {\n let gap = props.gap ?? 40;\n\n if (!Array.isArray(gap)) gap = [gap, gap];\n else if (gap.length === 1) gap = [gap[0], gap[0]];\n else if (gap.length === 0) gap = [40, 40];\n\n return {\n '--px-gap-x': gap[0] + 'px',\n '--px-gap-y': gap[1] + 'px'\n };\n }, [props.gap]);\n\n // ---- Prop getters -----------------------------------------------------\n\n const rootProps = {\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'root' as const,\n role: 'tree' as const,\n 'aria-multiselectable': props.selectionMode === 'multiple' || props.selectionMode === 'checkbox'\n };\n\n const getTreeProps = React.useCallback(\n (node: TreeNode | undefined, level: number) => ({\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'tree' as const,\n role: 'treeitem' as const,\n 'data-level': level,\n ...(isCollapsed(node) ? { 'data-collapsed': '' } : {}),\n ...(isSelected(node) ? { 'data-selected': '' } : {}),\n ...(isExpandable(node) ? { 'data-expandable': '' } : {}),\n 'aria-level': level,\n 'aria-expanded': isExpandable(node) ? !isCollapsed(node) : undefined,\n 'aria-selected': isSelectable() ? isSelected(node) : undefined\n }),\n [isCollapsed, isSelected, isExpandable, isSelectable]\n );\n\n const getNodeProps = React.useCallback(\n (node: TreeNode | undefined, handleClick: (event: React.MouseEvent<HTMLDivElement>) => void) => ({\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'node' as const,\n tabIndex: isSelectable() ? 0 : -1,\n ...(isSelectable() ? { 'data-selectable': '' } : {}),\n ...(isExpandable(node) ? { 'data-collapsible': '' } : {}),\n ...(isCollapsed(node) ? { 'data-collapsed': '' } : {}),\n ...(isSelected(node) ? { 'data-selected': '' } : {}),\n onClick: handleClick,\n onKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => handleNodeKeyDown(event, node?.key)\n }),\n [isSelectable, isExpandable, isCollapsed, isSelected, handleNodeKeyDown]\n );\n\n const getCollapseButtonProps = React.useCallback(\n (node: TreeNode | undefined, handleClick: (event: React.MouseEvent<HTMLButtonElement>) => void) => ({\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'toggle' as const,\n onClick: handleClick,\n onKeyDown: (event: React.KeyboardEvent<HTMLButtonElement>) => handleCollapseKeyDown(event, node?.key)\n }),\n [handleCollapseKeyDown]\n );\n\n const getToggleIndicatorProps = React.useCallback(\n () => ({\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'toggle-indicator' as const,\n 'aria-hidden': true as const\n }),\n []\n );\n\n const subtreeProps = {\n 'data-scope': 'organizationchart' as const,\n 'data-part': 'subtree' as const,\n role: 'group' as const\n };\n\n return {\n state,\n getNodes,\n findNodeByKey,\n getNodeLevel,\n rootProps,\n getTreeProps,\n getNodeProps,\n getCollapseButtonProps,\n getToggleIndicatorProps,\n subtreeProps,\n orgChartStyle,\n toggleNodeSelect,\n toggleNodeCollapse,\n isExpandable,\n isSelectable,\n isCollapsed,\n isSelected,\n isPartiallySelected,\n handleNodeKeyDown,\n handleCollapseKeyDown\n };\n }\n});\n","import type { UseOrganizationChartProps } from '@primereact/types/headless/organizationchart';\n\nexport const defaultProps: UseOrganizationChartProps = {\n value: undefined,\n gap: [40, 56],\n selectionMode: undefined,\n collapsedKeys: undefined,\n defaultCollapsedKeys: undefined,\n onCollapsedChange: undefined,\n selectionKeys: undefined,\n defaultSelectionKeys: undefined,\n onSelectionChange: undefined\n};\n"],"mappings":"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","names":["withHeadless","useControlledState","React","defaultProps","findNode","nodes","key","node","found","getDescendantKeys","_a","keys","child","getAncestorKeys","targetKey","path","walk","list","trail","useOrganizationChart","withHeadless","defaultProps","props","_b","defaultCollapsedRef","collapsedKeyState","setCollapsedKeyState","useControlledState","defaultSelectionRef","selectionKeyState","setSelectionKeyState","collapsedKeys","selectionKeys","getNodes","findNodeByKey","getNodeLevel","state","isExpandable","isSelectable","isCollapsed","isSelected","entry","isPartiallySelected","toggleNodeCollapse","event","next","__spreadValues","originalEvent","commitSelection","toggleCheckboxSelect","root","k","v","selecting","downKeys","ancestors","i","ancestorKey","ancestorNode","childKeys","c","allChecked","someChecked","toggleNodeSelect","current","handleNodeKeyDown","handleCollapseKeyDown","orgChartStyle","gap","rootProps","getTreeProps","level","__spreadProps","getNodeProps","handleClick","getCollapseButtonProps","getToggleIndicatorProps"]}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/overlaybadge/useOverlayBadge.ts","../../src/overlaybadge/useOverlayBadge.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { defaultProps } from './useOverlayBadge.props';\n\nexport const useOverlayBadge = withHeadless({\n name: 'useOverlayBadge',\n defaultProps\n});\n","import type { UseOverlayBadgeProps } from '@primereact/types/headless/overlaybadge';\n\nexport const defaultProps: UseOverlayBadgeProps = {};\n"],"mappings":"AAAA,OAAS,gBAAAA,MAAoB,4BCEtB,IAAMC,EAAqC,CAAC,EDC5C,IAAMC,EAAkBC,EAAa,CACxC,KAAM,kBACN,aAAAC,CACJ,CAAC","names":["withHeadless","defaultProps","useOverlayBadge","withHeadless","defaultProps"]}
|
|
File without changes
|
package/paginator/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/paginator/usePaginator.ts","../../src/paginator/usePaginator.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { defaultProps } from './usePaginator.props';\n\nconst range = (start: number, end: number) => {\n const length = Math.max(0, end - start + 1);\n\n return Array.from({ length }, (_, i) => ({ type: 'page' as const, value: start + i }));\n};\n\nconst ELLIPSIS = { type: 'ellipsis' as const };\n\nconst primereact = {\n config: {\n locale: {\n aria: {\n pageLabel: 'Page {page}',\n firstPageLabel: 'First Page',\n lastPageLabel: 'Last Page',\n nextPageLabel: 'Next Page',\n prevPageLabel: 'Previous Page'\n }\n }\n }\n};\n\nexport const usePaginator = withHeadless({\n name: 'usePaginator',\n defaultProps,\n setup({ props }) {\n const getAriaLabel = (labelType: string) => {\n return primereact?.config?.locale?.aria ? (primereact.config.locale.aria as Record<string, string>)[labelType] : undefined;\n };\n\n const { edges = 1, siblings = 1, showEllipsis = true } = props;\n const [activePage, setActivePage] = React.useState(props.defaultPage ?? props.page ?? 1);\n\n const totalPages = Math.max(1, Math.ceil((props.total ?? 0) / (props.itemsPerPage ?? 1)));\n const canPrev = activePage > 1;\n const canNext = activePage < totalPages;\n\n const handlePage = (page?: number) => {\n if (props.disabled || page === undefined) return;\n\n const newPageValue = page < 1 ? 1 : page > totalPages ? totalPages : page;\n\n if (newPageValue !== activePage) {\n props.onPageChange?.({\n originalEvent: {} as React.SyntheticEvent,\n value: newPageValue\n });\n }\n\n setActivePage(newPageValue);\n };\n\n const next = () => handlePage(activePage + 1);\n const prev = () => handlePage(activePage - 1);\n const first = () => handlePage(1);\n const last = () => handlePage(totalPages);\n\n const pages = React.useMemo(() => {\n const leftSiblingIndex = Math.max(activePage - siblings, 1);\n const rightSiblingIndex = Math.min(activePage + siblings, totalPages);\n\n if (showEllipsis) {\n const windowSize = 2 * edges + 2 * siblings + (showEllipsis ? 3 : 1);\n\n if (windowSize >= totalPages) {\n return range(1, totalPages);\n }\n\n const isShowLeftEllipsis = leftSiblingIndex > edges + 2;\n const isShowRightEllipsis = rightSiblingIndex < totalPages - edges - 1;\n\n return [\n ...range(1, edges),\n\n ...(isShowLeftEllipsis ? [ELLIPSIS] : range(edges + 1, siblings * 2 + edges + 2)),\n\n ...(isShowLeftEllipsis && isShowRightEllipsis ? range(leftSiblingIndex, rightSiblingIndex) : []),\n\n ...(isShowRightEllipsis ? [ELLIPSIS] : range(totalPages - edges - 1 - 2 * siblings, totalPages - edges)),\n\n ...range(totalPages - edges + 1, totalPages)\n ];\n } else {\n return [...range(Math.max(Math.min(leftSiblingIndex, rightSiblingIndex - 2 * siblings), 1), Math.min(Math.max(rightSiblingIndex, leftSiblingIndex + 2 * siblings), totalPages))];\n }\n }, [totalPages, edges, siblings, activePage, showEllipsis]);\n\n React.useEffect(() => {\n if (props.page !== undefined) {\n handlePage(props.page);\n }\n }, [props.page]);\n\n // prop getters\n const rootProps = {\n 'data-scope': 'paginator',\n 'data-part': 'root'\n };\n\n const firstProps = {\n 'data-scope': 'paginator',\n 'data-part': 'first',\n onClick: first,\n disabled: !canPrev || props.disabled,\n ...(!canPrev || props.disabled ? { 'data-disabled': '' } : {})\n };\n\n const prevProps = {\n 'data-scope': 'paginator',\n 'data-part': 'prev',\n onClick: prev,\n disabled: !canPrev || props.disabled,\n ...(!canPrev || props.disabled ? { 'data-disabled': '' } : {})\n };\n\n const nextProps = {\n 'data-scope': 'paginator',\n 'data-part': 'next',\n onClick: next,\n disabled: !canNext || props.disabled,\n ...(!canNext || props.disabled ? { 'data-disabled': '' } : {})\n };\n\n const lastProps = {\n 'data-scope': 'paginator',\n 'data-part': 'last',\n onClick: last,\n disabled: !canNext || props.disabled,\n ...(!canNext || props.disabled ? { 'data-disabled': '' } : {})\n };\n\n const pagesProps = {\n 'data-scope': 'paginator' as const,\n 'data-part': 'pages' as const\n };\n\n const getPageProps = (value: number) => {\n const handleClick = () => handlePage(value);\n\n return {\n 'data-scope': 'paginator',\n 'data-part': 'page',\n onClick: handleClick,\n disabled: props.disabled,\n 'aria-current': (activePage === value ? 'page' : undefined) as 'page' | undefined,\n ...(activePage === value ? { 'data-active': '' } : {}),\n ...(props.disabled ? { 'data-disabled': '' } : {})\n };\n };\n\n return {\n state: {\n activePage,\n totalPages,\n canPrev,\n canNext\n },\n pages,\n // prop getters\n rootProps,\n firstProps,\n prevProps,\n nextProps,\n lastProps,\n pagesProps,\n getPageProps,\n // methods\n getAriaLabel,\n prev,\n next,\n first,\n last,\n handlePage\n };\n }\n});\n","import type { UsePaginatorProps } from '@primereact/types/headless/paginator';\n\nexport const defaultProps: UsePaginatorProps = {\n defaultPage: 1,\n page: undefined,\n total: 0,\n itemsPerPage: 10,\n onPageChange: undefined,\n siblings: 1,\n edges: 1,\n disabled: false,\n showEllipsis: true\n};\n"],"mappings":"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","names":["withHeadless","React","defaultProps","range","start","end","length","_","i","ELLIPSIS","primereact","usePaginator","withHeadless","defaultProps","props","_a","_b","_c","_d","getAriaLabel","labelType","edges","siblings","showEllipsis","activePage","setActivePage","totalPages","canPrev","canNext","handlePage","page","newPageValue","next","prev","first","last","pages","leftSiblingIndex","rightSiblingIndex","isShowLeftEllipsis","isShowRightEllipsis","rootProps","firstProps","__spreadValues","prevProps","nextProps","lastProps","value"]}
|
|
File without changes
|
package/panel/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panel/usePanel.ts","../../src/panel/usePanel.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useCollapsible } from '@primereact/headless/collapsible';\nimport { defaultProps } from './usePanel.props';\n\nexport const usePanel = withHeadless({\n name: 'usePanel',\n defaultProps,\n setup({ props }) {\n const collapsible = useCollapsible(props);\n\n // methods\n const onTriggerClick = (event?: React.SyntheticEvent) => {\n collapsible?.toggle(event);\n event?.preventDefault();\n };\n\n // prop getters\n const indicatorProps = {\n 'data-scope': 'panel',\n 'data-part': 'indicator',\n [collapsible?.state.open ? 'data-open' : 'data-closed']: ''\n };\n\n const triggerProps = {\n ...collapsible?.triggerProps,\n 'data-scope': 'panel',\n 'data-part': 'trigger',\n onClick: onTriggerClick\n };\n\n const contentProps = {\n ...collapsible?.contentProps,\n 'data-scope': 'panel',\n 'data-part': 'content'\n };\n\n const rootProps = {\n ...collapsible?.rootProps,\n 'data-scope': 'panel',\n 'data-part': 'root'\n };\n\n return {\n ...collapsible,\n // prop getters\n rootProps,\n contentProps,\n triggerProps,\n indicatorProps\n };\n }\n});\n","import * as useCollapsible from '@primereact/headless/collapsible';\nimport type { UsePanelProps } from '@primereact/types/headless/panel';\n\nexport const defaultProps: UsePanelProps = {\n ...useCollapsible.defaultProps\n};\n"],"mappings":"6aAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,kBAAAC,MAAsB,mCCD/B,UAAYC,MAAoB,mCAGzB,IAAMC,EAA8BC,EAAA,GACrB,gBDAf,IAAMC,EAAWC,EAAa,CACjC,KAAM,WACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CACb,IAAMC,EAAcC,EAAeF,CAAK,EAGlCG,EAAkBC,GAAiC,CACrDH,GAAA,MAAAA,EAAa,OAAOG,GACpBA,GAAA,MAAAA,EAAO,gBACX,EAGMC,EAAiB,CACnB,aAAc,QACd,YAAa,YACb,CAACJ,GAAA,MAAAA,EAAa,MAAM,KAAO,YAAc,aAAa,EAAG,EAC7D,EAEMK,EAAeC,EAAAC,EAAA,GACdP,GAAA,YAAAA,EAAa,cADC,CAEjB,aAAc,QACd,YAAa,UACb,QAASE,CACb,GAEMM,EAAeF,EAAAC,EAAA,GACdP,GAAA,YAAAA,EAAa,cADC,CAEjB,aAAc,QACd,YAAa,SACjB,GAEMS,EAAYH,EAAAC,EAAA,GACXP,GAAA,YAAAA,EAAa,WADF,CAEd,aAAc,QACd,YAAa,MACjB,GAEA,OAAOM,EAAAC,EAAA,GACAP,GADA,CAGH,UAAAS,EACA,aAAAD,EACA,aAAAH,EACA,eAAAD,CACJ,EACJ,CACJ,CAAC","names":["withHeadless","useCollapsible","useCollapsible","defaultProps","__spreadValues","usePanel","withHeadless","defaultProps","props","collapsible","useCollapsible","onTriggerClick","event","indicatorProps","triggerProps","__spreadProps","__spreadValues","contentProps","rootProps"]}
|
package/panel/usePanel.test.d.ts
DELETED
|
File without changes
|