@chayns-components/navigation 5.0.64 → 5.1.0
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/lib/cjs/components/navigation-layout/NavigationLayout.constants.js +14 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.constants.js.map +1 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.context.js +26 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.context.js.map +1 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.js +105 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.js.map +1 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.styles.js +74 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.types.js +6 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.types.js.map +1 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.utils.js +261 -0
- package/lib/cjs/components/navigation-layout/NavigationLayout.utils.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.js +31 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.styles.js +30 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.types.js +6 -0
- package/lib/cjs/components/navigation-layout/navigation-header/NavigationHeader.types.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.js +71 -0
- package/lib/cjs/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.styles.js +19 -0
- package/lib/cjs/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.context.js +26 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.context.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.js +140 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.styles.js +89 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.types.js +6 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.types.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.utils.js +83 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/NavigationSidebar.utils.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.js +17 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.styles.js +19 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.context.js +26 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.context.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.hooks.js +129 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.hooks.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.js +79 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.js +69 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.js +265 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.js +193 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.styles.js +132 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.styles.js.map +1 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.utils.js +78 -0
- package/lib/cjs/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.utils.js.map +1 -0
- package/lib/cjs/components/split-layout/SplitLayout.js +90 -0
- package/lib/cjs/components/split-layout/SplitLayout.js.map +1 -0
- package/lib/cjs/components/split-layout/SplitLayout.styles.js +44 -0
- package/lib/cjs/components/split-layout/SplitLayout.styles.js.map +1 -0
- package/lib/cjs/components/split-layout/SplitLayout.types.js +12 -0
- package/lib/cjs/components/split-layout/SplitLayout.types.js.map +1 -0
- package/lib/cjs/components/split-layout/SplitLayout.utils.js +25 -0
- package/lib/cjs/components/split-layout/SplitLayout.utils.js.map +1 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.hooks.js +63 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.hooks.js.map +1 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.js +34 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.js.map +1 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.styles.js +58 -0
- package/lib/cjs/components/split-layout/resize-handle/ResizeHandle.styles.js.map +1 -0
- package/lib/cjs/components/user-image/UserImage.js +38 -0
- package/lib/cjs/components/user-image/UserImage.js.map +1 -0
- package/lib/cjs/components/user-image/UserImage.types.js +6 -0
- package/lib/cjs/components/user-image/UserImage.types.js.map +1 -0
- package/lib/cjs/components/user-image/userImage.styles.js +27 -0
- package/lib/cjs/components/user-image/userImage.styles.js.map +1 -0
- package/lib/cjs/index.js +49 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/navigation-layout/NavigationLayout.constants.js +8 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.constants.js.map +1 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.context.js +17 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.context.js.map +1 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.js +97 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.js.map +1 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.styles.js +67 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.types.js +2 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.types.js.map +1 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.utils.js +251 -0
- package/lib/esm/components/navigation-layout/NavigationLayout.utils.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.js +24 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.styles.js +23 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.types.js +2 -0
- package/lib/esm/components/navigation-layout/navigation-header/NavigationHeader.types.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.js +64 -0
- package/lib/esm/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.styles.js +12 -0
- package/lib/esm/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.context.js +17 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.context.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.js +132 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.styles.js +82 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.types.js +2 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.types.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.utils.js +73 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/NavigationSidebar.utils.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.js +10 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.styles.js +12 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.context.js +17 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.context.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.hooks.js +119 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.hooks.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.js +71 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.js +62 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.js +257 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.js +186 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.styles.js +126 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.styles.js.map +1 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.utils.js +67 -0
- package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.utils.js.map +1 -0
- package/lib/esm/components/split-layout/SplitLayout.js +80 -0
- package/lib/esm/components/split-layout/SplitLayout.js.map +1 -0
- package/lib/esm/components/split-layout/SplitLayout.styles.js +37 -0
- package/lib/esm/components/split-layout/SplitLayout.styles.js.map +1 -0
- package/lib/esm/components/split-layout/SplitLayout.types.js +6 -0
- package/lib/esm/components/split-layout/SplitLayout.types.js.map +1 -0
- package/lib/esm/components/split-layout/SplitLayout.utils.js +17 -0
- package/lib/esm/components/split-layout/SplitLayout.utils.js.map +1 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.hooks.js +54 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.hooks.js.map +1 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.js +27 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.js.map +1 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.styles.js +52 -0
- package/lib/esm/components/split-layout/resize-handle/ResizeHandle.styles.js.map +1 -0
- package/lib/esm/components/user-image/UserImage.js +31 -0
- package/lib/esm/components/user-image/UserImage.js.map +1 -0
- package/lib/esm/components/user-image/UserImage.types.js +2 -0
- package/lib/esm/components/user-image/UserImage.types.js.map +1 -0
- package/lib/esm/components/user-image/userImage.styles.js +20 -0
- package/lib/esm/components/user-image/userImage.styles.js.map +1 -0
- package/lib/esm/index.js +15 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/types/components/navigation-layout/NavigationLayout.constants.d.ts +7 -0
- package/lib/types/components/navigation-layout/NavigationLayout.context.d.ts +15 -0
- package/lib/types/components/navigation-layout/NavigationLayout.d.ts +4 -0
- package/lib/types/components/navigation-layout/NavigationLayout.styles.d.ts +19 -0
- package/lib/types/components/navigation-layout/NavigationLayout.types.d.ts +125 -0
- package/lib/types/components/navigation-layout/NavigationLayout.utils.d.ts +22 -0
- package/lib/types/components/navigation-layout/navigation-header/NavigationHeader.d.ts +4 -0
- package/lib/types/components/navigation-layout/navigation-header/NavigationHeader.styles.d.ts +9 -0
- package/lib/types/components/navigation-layout/navigation-header/NavigationHeader.types.d.ts +10 -0
- package/lib/types/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.d.ts +8 -0
- package/lib/types/components/navigation-layout/navigation-header/menu-toggle/MenuToggle.styles.d.ts +3 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/NavigationSidebar.context.d.ts +19 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/NavigationSidebar.d.ts +4 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/NavigationSidebar.styles.d.ts +27 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/NavigationSidebar.types.d.ts +54 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/NavigationSidebar.utils.d.ts +22 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.d.ts +6 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-divider/SidebarDivider.styles.d.ts +6 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.context.d.ts +22 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.d.ts +9 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.hooks.d.ts +26 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.d.ts +9 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.d.ts +10 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.d.ts +51 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.styles.d.ts +24 -0
- package/lib/types/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.utils.d.ts +23 -0
- package/lib/types/components/split-layout/SplitLayout.d.ts +4 -0
- package/lib/types/components/split-layout/SplitLayout.styles.d.ts +12 -0
- package/lib/types/components/split-layout/SplitLayout.types.d.ts +19 -0
- package/lib/types/components/split-layout/SplitLayout.utils.d.ts +8 -0
- package/lib/types/components/split-layout/resize-handle/ResizeHandle.d.ts +11 -0
- package/lib/types/components/split-layout/resize-handle/ResizeHandle.hooks.d.ts +9 -0
- package/lib/types/components/split-layout/resize-handle/ResizeHandle.styles.d.ts +15 -0
- package/lib/types/components/user-image/UserImage.d.ts +4 -0
- package/lib/types/components/user-image/UserImage.types.d.ts +8 -0
- package/lib/types/components/user-image/userImage.styles.d.ts +10 -0
- package/lib/types/index.d.ts +10 -2
- package/package.json +3 -3
package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarGroup.js","names":["React","memo","useMemo","StyledSidebarDropZone","StyledSidebarGroup","SidebarItem","SidebarGroupReorderProvider","useSidebarGroupReorder","useNavigationSidebarContext","useNavigationLayoutContext","SidebarGroup","groupId","items","isReorderable","isCompact","onItemReorder","draggedItemId","dropTarget","isDragging","isGroupEndTargetActive","isReorderEnabled","handleDragEnd","handleDragStart","handleDrop","handleDropTargetChange","handleGroupDragOver","handleGroupDrop","handleGroupEndDragOver","handleGroupEndDrop","contextValue","onDragEnd","onDragStart","onDrop","onDropTargetChange","content","map","item","index","createElement","key","id","parentIds","value","onDragOver","$isActive","$isDragging","$placement","displayName"],"sources":["../../../../../../src/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.tsx"],"sourcesContent":["import React, { FC, memo, useMemo } from 'react';\nimport { StyledSidebarDropZone, StyledSidebarGroup } from './SidebarGroup.styles';\nimport { NavigationLayoutGroup, NavigationLayoutItem } from '../../NavigationLayout.types';\nimport SidebarItem from './sidebar-item/SidebarItem';\nimport { SidebarGroupReorderProvider } from './SidebarGroup.context';\nimport { useSidebarGroupReorder } from './SidebarGroup.hooks';\nimport { useNavigationSidebarContext } from '../NavigationSidebar.context';\nimport { useNavigationLayoutContext } from '../../NavigationLayout.context';\n\ninterface SidebarGroupProps {\n groupId: NavigationLayoutGroup['id'];\n items: NavigationLayoutItem[];\n isReorderable?: NavigationLayoutGroup['isReorderable'];\n}\n\nconst SidebarGroup: FC<SidebarGroupProps> = ({ groupId, items, isReorderable }) => {\n const { isCompact } = useNavigationSidebarContext();\n const { onItemReorder } = useNavigationLayoutContext();\n const {\n draggedItemId,\n dropTarget,\n isDragging,\n isGroupEndTargetActive,\n isReorderEnabled,\n handleDragEnd,\n handleDragStart,\n handleDrop,\n handleDropTargetChange,\n handleGroupDragOver,\n handleGroupDrop,\n handleGroupEndDragOver,\n handleGroupEndDrop,\n } = useSidebarGroupReorder({\n groupId,\n isCompact,\n isReorderable,\n items,\n onItemReorder,\n });\n\n const contextValue = useMemo(\n () => ({\n draggedItemId,\n dropTarget,\n isDragging,\n isReorderEnabled,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n onDrop: handleDrop,\n onDropTargetChange: handleDropTargetChange,\n }),\n [\n draggedItemId,\n dropTarget,\n handleDragEnd,\n handleDragStart,\n handleDrop,\n handleDropTargetChange,\n isDragging,\n isReorderEnabled,\n ],\n );\n\n const content = useMemo(\n () =>\n items.map((item, index) => (\n <SidebarItem key={item.id} item={item} index={index} parentIds={[]} />\n )),\n [items],\n );\n\n return (\n <SidebarGroupReorderProvider value={contextValue}>\n <StyledSidebarGroup onDragOver={handleGroupDragOver} onDrop={handleGroupDrop}>\n {content}\n {isReorderEnabled && (\n <StyledSidebarDropZone\n $isActive={isGroupEndTargetActive}\n $isDragging={isDragging}\n $placement=\"after\"\n onDragOver={handleGroupEndDragOver}\n onDrop={handleGroupEndDrop}\n />\n )}\n </StyledSidebarGroup>\n </SidebarGroupReorderProvider>\n );\n};\n\nSidebarGroup.displayName = 'SidebarGroup';\n\nexport default memo(SidebarGroup);\n"],"mappings":"AAAA,OAAOA,KAAK,IAAQC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAChD,SAASC,qBAAqB,EAAEC,kBAAkB,QAAQ,uBAAuB;AAEjF,OAAOC,WAAW,MAAM,4BAA4B;AACpD,SAASC,2BAA2B,QAAQ,wBAAwB;AACpE,SAASC,sBAAsB,QAAQ,sBAAsB;AAC7D,SAASC,2BAA2B,QAAQ,8BAA8B;AAC1E,SAASC,0BAA0B,QAAQ,gCAAgC;AAQ3E,MAAMC,YAAmC,GAAGA,CAAC;EAAEC,OAAO;EAAEC,KAAK;EAAEC;AAAc,CAAC,KAAK;EAC/E,MAAM;IAAEC;EAAU,CAAC,GAAGN,2BAA2B,CAAC,CAAC;EACnD,MAAM;IAAEO;EAAc,CAAC,GAAGN,0BAA0B,CAAC,CAAC;EACtD,MAAM;IACFO,aAAa;IACbC,UAAU;IACVC,UAAU;IACVC,sBAAsB;IACtBC,gBAAgB;IAChBC,aAAa;IACbC,eAAe;IACfC,UAAU;IACVC,sBAAsB;IACtBC,mBAAmB;IACnBC,eAAe;IACfC,sBAAsB;IACtBC;EACJ,CAAC,GAAGrB,sBAAsB,CAAC;IACvBI,OAAO;IACPG,SAAS;IACTD,aAAa;IACbD,KAAK;IACLG;EACJ,CAAC,CAAC;EAEF,MAAMc,YAAY,GAAG3B,OAAO,CACxB,OAAO;IACHc,aAAa;IACbC,UAAU;IACVC,UAAU;IACVE,gBAAgB;IAChBU,SAAS,EAAET,aAAa;IACxBU,WAAW,EAAET,eAAe;IAC5BU,MAAM,EAAET,UAAU;IAClBU,kBAAkB,EAAET;EACxB,CAAC,CAAC,EACF,CACIR,aAAa,EACbC,UAAU,EACVI,aAAa,EACbC,eAAe,EACfC,UAAU,EACVC,sBAAsB,EACtBN,UAAU,EACVE,gBAAgB,CAExB,CAAC;EAED,MAAMc,OAAO,GAAGhC,OAAO,CACnB,MACIU,KAAK,CAACuB,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,kBAClBrC,KAAA,CAAAsC,aAAA,CAACjC,WAAW;IAACkC,GAAG,EAAEH,IAAI,CAACI,EAAG;IAACJ,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAM;IAACI,SAAS,EAAE;EAAG,CAAE,CACxE,CAAC,EACN,CAAC7B,KAAK,CACV,CAAC;EAED,oBACIZ,KAAA,CAAAsC,aAAA,CAAChC,2BAA2B;IAACoC,KAAK,EAAEb;EAAa,gBAC7C7B,KAAA,CAAAsC,aAAA,CAAClC,kBAAkB;IAACuC,UAAU,EAAElB,mBAAoB;IAACO,MAAM,EAAEN;EAAgB,GACxEQ,OAAO,EACPd,gBAAgB,iBACbpB,KAAA,CAAAsC,aAAA,CAACnC,qBAAqB;IAClByC,SAAS,EAAEzB,sBAAuB;IAClC0B,WAAW,EAAE3B,UAAW;IACxB4B,UAAU,EAAC,OAAO;IAClBH,UAAU,EAAEhB,sBAAuB;IACnCK,MAAM,EAAEJ;EAAmB,CAC9B,CAEW,CACK,CAAC;AAEtC,CAAC;AAEDlB,YAAY,CAACqC,WAAW,GAAG,cAAc;AAEzC,4BAAe9C,IAAI,CAACS,YAAY,CAAC","ignoreList":[]}
|
package/lib/esm/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
export const StyledSidebarGroup = styled.div`
|
|
3
|
+
position: relative;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
gap: 2px;
|
|
7
|
+
`;
|
|
8
|
+
export const StyledSidebarDropZone = styled.div`
|
|
9
|
+
position: absolute;
|
|
10
|
+
left: ${({
|
|
11
|
+
$depth = 0
|
|
12
|
+
}) => $depth * 8}px;
|
|
13
|
+
right: 0;
|
|
14
|
+
height: 24px;
|
|
15
|
+
z-index: 1;
|
|
16
|
+
pointer-events: ${({
|
|
17
|
+
$isDragging
|
|
18
|
+
}) => $isDragging ? 'auto' : 'none'};
|
|
19
|
+
|
|
20
|
+
${({
|
|
21
|
+
$placement = 'before'
|
|
22
|
+
}) => {
|
|
23
|
+
if ($placement === 'after') {
|
|
24
|
+
return `
|
|
25
|
+
top: 100%;
|
|
26
|
+
transform: translateY(-50%);
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
if ($placement === 'inside') {
|
|
30
|
+
return `
|
|
31
|
+
top: 42px;
|
|
32
|
+
transform: translateY(-50%);
|
|
33
|
+
`;
|
|
34
|
+
}
|
|
35
|
+
return `
|
|
36
|
+
top: 0;
|
|
37
|
+
transform: translateY(-50%);
|
|
38
|
+
`;
|
|
39
|
+
}}
|
|
40
|
+
|
|
41
|
+
&::after {
|
|
42
|
+
content: '';
|
|
43
|
+
position: absolute;
|
|
44
|
+
left: 0;
|
|
45
|
+
right: 0;
|
|
46
|
+
top: 50%;
|
|
47
|
+
height: 2px;
|
|
48
|
+
transform: translateY(-50%);
|
|
49
|
+
border-radius: 999px;
|
|
50
|
+
background-color: ${({
|
|
51
|
+
$isActive
|
|
52
|
+
}) => $isActive ? 'rgba(255, 255, 255, 0.9)' : 'transparent'};
|
|
53
|
+
box-shadow: ${({
|
|
54
|
+
$isActive
|
|
55
|
+
}) => $isActive ? '0 0 0 1px rgba(255, 255, 255, 0.25)' : 'none'};
|
|
56
|
+
opacity: ${({
|
|
57
|
+
$isActive
|
|
58
|
+
}) => $isActive ? 1 : 0};
|
|
59
|
+
transition: opacity 0.15s ease;
|
|
60
|
+
}
|
|
61
|
+
`;
|
|
62
|
+
//# sourceMappingURL=SidebarGroup.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarGroup.styles.js","names":["styled","StyledSidebarGroup","div","StyledSidebarDropZone","$depth","$isDragging","$placement","$isActive"],"sources":["../../../../../../src/components/navigation-layout/navigation-sidebar/sidebar-group/SidebarGroup.styles.ts"],"sourcesContent":["import styled from 'styled-components';\n\nexport const StyledSidebarGroup = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\ninterface StyledSidebarDropZoneProps {\n $depth?: number;\n $isActive: boolean;\n $isDragging: boolean;\n $placement?: 'before' | 'after' | 'inside';\n}\n\nexport const StyledSidebarDropZone = styled.div<StyledSidebarDropZoneProps>`\n position: absolute;\n left: ${({ $depth = 0 }) => $depth * 8}px;\n right: 0;\n height: 24px;\n z-index: 1;\n pointer-events: ${({ $isDragging }) => ($isDragging ? 'auto' : 'none')};\n\n ${({ $placement = 'before' }) => {\n if ($placement === 'after') {\n return `\n top: 100%;\n transform: translateY(-50%);\n `;\n }\n\n if ($placement === 'inside') {\n return `\n top: 42px;\n transform: translateY(-50%);\n `;\n }\n\n return `\n top: 0;\n transform: translateY(-50%);\n `;\n }}\n\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 2px;\n transform: translateY(-50%);\n border-radius: 999px;\n background-color: ${({ $isActive }) =>\n $isActive ? 'rgba(255, 255, 255, 0.9)' : 'transparent'};\n box-shadow: ${({ $isActive }) =>\n $isActive ? '0 0 0 1px rgba(255, 255, 255, 0.25)' : 'none'};\n opacity: ${({ $isActive }) => ($isActive ? 1 : 0)};\n transition: opacity 0.15s ease;\n }\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,mBAAmB;AAEtC,OAAO,MAAMC,kBAAkB,GAAGD,MAAM,CAACE,GAAG;AAC5C;AACA;AACA;AACA;AACA,CAAC;AASD,OAAO,MAAMC,qBAAqB,GAAGH,MAAM,CAACE,GAA+B;AAC3E;AACA,YAAY,CAAC;EAAEE,MAAM,GAAG;AAAE,CAAC,KAAKA,MAAM,GAAG,CAAC;AAC1C;AACA;AACA;AACA,sBAAsB,CAAC;EAAEC;AAAY,CAAC,KAAMA,WAAW,GAAG,MAAM,GAAG,MAAO;AAC1E;AACA,MAAM,CAAC;EAAEC,UAAU,GAAG;AAAS,CAAC,KAAK;EAC7B,IAAIA,UAAU,KAAK,OAAO,EAAE;IACxB,OAAO;AACnB;AACA;AACA,aAAa;EACL;EAEA,IAAIA,UAAU,KAAK,QAAQ,EAAE;IACzB,OAAO;AACnB;AACA;AACA,aAAa;EACL;EAEA,OAAO;AACf;AACA;AACA,SAAS;AACL,CAAC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,CAAC;EAAEC;AAAU,CAAC,KAC9BA,SAAS,GAAG,0BAA0B,GAAG,aAAa;AAClE,sBAAsB,CAAC;EAAEA;AAAU,CAAC,KACxBA,SAAS,GAAG,qCAAqC,GAAG,MAAM;AACtE,mBAAmB,CAAC;EAAEA;AAAU,CAAC,KAAMA,SAAS,GAAG,CAAC,GAAG,CAAE;AACzD;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { areCoordinatesEqual, getScrollableAncestorElements, getSidebarItemPopupCoordinates } from './SidebarItem.utils';
|
|
3
|
+
import { isNavigationLayoutReorderTargetEqual } from '../../../NavigationLayout.utils';
|
|
4
|
+
const setDragMoveEffect = event => {
|
|
5
|
+
const {
|
|
6
|
+
dataTransfer
|
|
7
|
+
} = event;
|
|
8
|
+
dataTransfer.dropEffect = 'move';
|
|
9
|
+
};
|
|
10
|
+
const resolveSidebarContainer = item => {
|
|
11
|
+
if (!item) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return item.closest('[data-navigation-sidebar-root="true"]') ?? document.getElementById('sidebar');
|
|
15
|
+
};
|
|
16
|
+
export const useSidebarItemPopup = ({
|
|
17
|
+
isDisabled,
|
|
18
|
+
shouldShowCollapsedLabel
|
|
19
|
+
}) => {
|
|
20
|
+
const [coordinates, setCoordinates] = useState(null);
|
|
21
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
22
|
+
const [popupContainer, setPopupContainer] = useState(null);
|
|
23
|
+
const animationFrameIdRef = useRef(null);
|
|
24
|
+
const lastCoordinatesRef = useRef(null);
|
|
25
|
+
const itemRef = useRef(null);
|
|
26
|
+
const resetCoordinates = useCallback(() => {
|
|
27
|
+
lastCoordinatesRef.current = null;
|
|
28
|
+
setCoordinates(null);
|
|
29
|
+
}, []);
|
|
30
|
+
const resolvePopupContainer = useCallback(() => {
|
|
31
|
+
const nextContainer = resolveSidebarContainer(itemRef.current);
|
|
32
|
+
setPopupContainer(previousContainer => previousContainer === nextContainer ? previousContainer : nextContainer);
|
|
33
|
+
return nextContainer;
|
|
34
|
+
}, []);
|
|
35
|
+
const updateCoordinates = useCallback(() => {
|
|
36
|
+
const nextContainer = popupContainer ?? resolvePopupContainer();
|
|
37
|
+
const itemElement = itemRef.current;
|
|
38
|
+
if (!nextContainer || !itemElement) {
|
|
39
|
+
resetCoordinates();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const nextCoordinates = getSidebarItemPopupCoordinates({
|
|
43
|
+
container: nextContainer,
|
|
44
|
+
item: itemElement
|
|
45
|
+
});
|
|
46
|
+
if (areCoordinatesEqual({
|
|
47
|
+
coordinatesA: lastCoordinatesRef.current,
|
|
48
|
+
coordinatesB: nextCoordinates
|
|
49
|
+
})) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
lastCoordinatesRef.current = nextCoordinates;
|
|
53
|
+
setCoordinates(nextCoordinates);
|
|
54
|
+
}, [popupContainer, resetCoordinates, resolvePopupContainer]);
|
|
55
|
+
const scheduleCoordinatesUpdate = useCallback(() => {
|
|
56
|
+
if (animationFrameIdRef.current !== null) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
animationFrameIdRef.current = requestAnimationFrame(() => {
|
|
60
|
+
animationFrameIdRef.current = null;
|
|
61
|
+
updateCoordinates();
|
|
62
|
+
});
|
|
63
|
+
}, [updateCoordinates]);
|
|
64
|
+
const handleMouseEnter = useCallback(() => {
|
|
65
|
+
resolvePopupContainer();
|
|
66
|
+
setIsHovered(true);
|
|
67
|
+
scheduleCoordinatesUpdate();
|
|
68
|
+
}, [resolvePopupContainer, scheduleCoordinatesUpdate]);
|
|
69
|
+
const handleMouseLeave = useCallback(() => {
|
|
70
|
+
setIsHovered(false);
|
|
71
|
+
resetCoordinates();
|
|
72
|
+
}, [resetCoordinates]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
resolvePopupContainer();
|
|
75
|
+
}, [resolvePopupContainer]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!isHovered || isDisabled || !shouldShowCollapsedLabel) {
|
|
78
|
+
resetCoordinates();
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const nextContainer = popupContainer ?? resolvePopupContainer();
|
|
82
|
+
const itemElement = itemRef.current;
|
|
83
|
+
if (!nextContainer || !itemElement) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
scheduleCoordinatesUpdate();
|
|
87
|
+
const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => {
|
|
88
|
+
scheduleCoordinatesUpdate();
|
|
89
|
+
});
|
|
90
|
+
resizeObserver?.observe(nextContainer);
|
|
91
|
+
resizeObserver?.observe(itemElement);
|
|
92
|
+
const scrollableElements = getScrollableAncestorElements({
|
|
93
|
+
element: itemElement,
|
|
94
|
+
boundaryElement: nextContainer
|
|
95
|
+
});
|
|
96
|
+
scrollableElements.forEach(element => {
|
|
97
|
+
element.addEventListener('scroll', scheduleCoordinatesUpdate, {
|
|
98
|
+
passive: true
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
window.addEventListener('resize', scheduleCoordinatesUpdate);
|
|
102
|
+
return () => {
|
|
103
|
+
scrollableElements.forEach(element => {
|
|
104
|
+
element.removeEventListener('scroll', scheduleCoordinatesUpdate);
|
|
105
|
+
});
|
|
106
|
+
window.removeEventListener('resize', scheduleCoordinatesUpdate);
|
|
107
|
+
resizeObserver?.disconnect();
|
|
108
|
+
if (animationFrameIdRef.current !== null) {
|
|
109
|
+
cancelAnimationFrame(animationFrameIdRef.current);
|
|
110
|
+
animationFrameIdRef.current = null;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}, [isDisabled, isHovered, popupContainer, resetCoordinates, resolvePopupContainer, scheduleCoordinatesUpdate, shouldShowCollapsedLabel]);
|
|
114
|
+
return {
|
|
115
|
+
coordinates,
|
|
116
|
+
handleMouseEnter,
|
|
117
|
+
handleMouseLeave,
|
|
118
|
+
isHovered,
|
|
119
|
+
itemRef,
|
|
120
|
+
popupContainer,
|
|
121
|
+
shouldRenderPopup: !isDisabled && !!shouldShowCollapsedLabel && isHovered && !!coordinates
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
export const useSidebarItemReorder = ({
|
|
125
|
+
childItems,
|
|
126
|
+
draggedItemId,
|
|
127
|
+
dropTarget,
|
|
128
|
+
id,
|
|
129
|
+
index,
|
|
130
|
+
isDisabled,
|
|
131
|
+
isReorderEnabled,
|
|
132
|
+
onDragEnd,
|
|
133
|
+
onDragStart,
|
|
134
|
+
onDrop,
|
|
135
|
+
onDropInside,
|
|
136
|
+
onDropTargetChange,
|
|
137
|
+
parentIds
|
|
138
|
+
}) => {
|
|
139
|
+
const childParentIds = useMemo(() => [...parentIds, id], [id, parentIds]);
|
|
140
|
+
const canDragItem = isReorderEnabled && !isDisabled;
|
|
141
|
+
const canDropInsideItem = isReorderEnabled && !isDisabled;
|
|
142
|
+
const currentItem = useMemo(() => ({
|
|
143
|
+
itemId: id,
|
|
144
|
+
parentIds,
|
|
145
|
+
index
|
|
146
|
+
}), [id, index, parentIds]);
|
|
147
|
+
const beforeTarget = useMemo(() => ({
|
|
148
|
+
itemId: id,
|
|
149
|
+
parentIds,
|
|
150
|
+
index,
|
|
151
|
+
placement: 'before'
|
|
152
|
+
}), [id, index, parentIds]);
|
|
153
|
+
const insideTarget = useMemo(() => ({
|
|
154
|
+
itemId: id,
|
|
155
|
+
parentIds: childParentIds,
|
|
156
|
+
index: childItems?.length ?? 0,
|
|
157
|
+
placement: 'inside'
|
|
158
|
+
}), [childItems, childParentIds, id]);
|
|
159
|
+
const childListEndTarget = useMemo(() => {
|
|
160
|
+
const lastChild = childItems?.[childItems.length - 1];
|
|
161
|
+
if (!lastChild) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
itemId: lastChild.id,
|
|
166
|
+
parentIds: childParentIds,
|
|
167
|
+
index: childItems.length,
|
|
168
|
+
placement: 'after'
|
|
169
|
+
};
|
|
170
|
+
}, [childItems, childParentIds]);
|
|
171
|
+
const isBeforeDropTargetActive = useMemo(() => isNavigationLayoutReorderTargetEqual({
|
|
172
|
+
targetA: dropTarget,
|
|
173
|
+
targetB: beforeTarget
|
|
174
|
+
}), [beforeTarget, dropTarget]);
|
|
175
|
+
const isInsideDropTargetActive = useMemo(() => isNavigationLayoutReorderTargetEqual({
|
|
176
|
+
targetA: dropTarget,
|
|
177
|
+
targetB: insideTarget
|
|
178
|
+
}), [dropTarget, insideTarget]);
|
|
179
|
+
const isChildListEndTargetActive = useMemo(() => isNavigationLayoutReorderTargetEqual({
|
|
180
|
+
targetA: dropTarget,
|
|
181
|
+
targetB: childListEndTarget
|
|
182
|
+
}), [childListEndTarget, dropTarget]);
|
|
183
|
+
const handleDragStart = useCallback(event => {
|
|
184
|
+
if (!canDragItem) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
onDragStart(event, currentItem);
|
|
188
|
+
}, [canDragItem, currentItem, onDragStart]);
|
|
189
|
+
const handleResolvedDragEnd = useCallback(() => {
|
|
190
|
+
if (!canDragItem) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
onDragEnd();
|
|
194
|
+
}, [canDragItem, onDragEnd]);
|
|
195
|
+
const handleBeforeDragOver = useCallback(event => {
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
setDragMoveEffect(event);
|
|
198
|
+
onDropTargetChange(beforeTarget);
|
|
199
|
+
}, [beforeTarget, onDropTargetChange]);
|
|
200
|
+
const handleBeforeDrop = useCallback(event => {
|
|
201
|
+
event.preventDefault();
|
|
202
|
+
event.stopPropagation();
|
|
203
|
+
onDrop(beforeTarget);
|
|
204
|
+
}, [beforeTarget, onDrop]);
|
|
205
|
+
const handleInsideDragOver = useCallback(event => {
|
|
206
|
+
if (!canDropInsideItem) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
setDragMoveEffect(event);
|
|
211
|
+
onDropTargetChange(insideTarget);
|
|
212
|
+
}, [canDropInsideItem, insideTarget, onDropTargetChange]);
|
|
213
|
+
const handleInsideDrop = useCallback(event => {
|
|
214
|
+
if (!canDropInsideItem) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
event.preventDefault();
|
|
218
|
+
event.stopPropagation();
|
|
219
|
+
onDropInside?.();
|
|
220
|
+
onDrop(insideTarget);
|
|
221
|
+
}, [canDropInsideItem, insideTarget, onDrop, onDropInside]);
|
|
222
|
+
const handleChildListEndDragOver = useCallback(event => {
|
|
223
|
+
if (!childListEndTarget) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
event.preventDefault();
|
|
227
|
+
setDragMoveEffect(event);
|
|
228
|
+
onDropTargetChange(childListEndTarget);
|
|
229
|
+
}, [childListEndTarget, onDropTargetChange]);
|
|
230
|
+
const handleChildListEndDrop = useCallback(event => {
|
|
231
|
+
if (!childListEndTarget) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
event.preventDefault();
|
|
235
|
+
event.stopPropagation();
|
|
236
|
+
onDrop(childListEndTarget);
|
|
237
|
+
}, [childListEndTarget, onDrop]);
|
|
238
|
+
return {
|
|
239
|
+
canDragItem,
|
|
240
|
+
canDropInsideItem,
|
|
241
|
+
childParentIds,
|
|
242
|
+
childListEndTarget,
|
|
243
|
+
handleBeforeDragOver,
|
|
244
|
+
handleBeforeDrop,
|
|
245
|
+
handleChildListEndDragOver,
|
|
246
|
+
handleChildListEndDrop,
|
|
247
|
+
handleDragEnd: handleResolvedDragEnd,
|
|
248
|
+
handleDragStart,
|
|
249
|
+
handleInsideDragOver,
|
|
250
|
+
handleInsideDrop,
|
|
251
|
+
isBeforeDropTargetActive,
|
|
252
|
+
isChildListEndTargetActive,
|
|
253
|
+
isDragging: draggedItemId === id,
|
|
254
|
+
isInsideDropTargetActive
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=SidebarItem.hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItem.hooks.js","names":["useCallback","useEffect","useMemo","useRef","useState","areCoordinatesEqual","getScrollableAncestorElements","getSidebarItemPopupCoordinates","isNavigationLayoutReorderTargetEqual","setDragMoveEffect","event","dataTransfer","dropEffect","resolveSidebarContainer","item","closest","document","getElementById","useSidebarItemPopup","isDisabled","shouldShowCollapsedLabel","coordinates","setCoordinates","isHovered","setIsHovered","popupContainer","setPopupContainer","animationFrameIdRef","lastCoordinatesRef","itemRef","resetCoordinates","current","resolvePopupContainer","nextContainer","previousContainer","updateCoordinates","itemElement","nextCoordinates","container","coordinatesA","coordinatesB","scheduleCoordinatesUpdate","requestAnimationFrame","handleMouseEnter","handleMouseLeave","undefined","resizeObserver","ResizeObserver","observe","scrollableElements","element","boundaryElement","forEach","addEventListener","passive","window","removeEventListener","disconnect","cancelAnimationFrame","shouldRenderPopup","useSidebarItemReorder","childItems","draggedItemId","dropTarget","id","index","isReorderEnabled","onDragEnd","onDragStart","onDrop","onDropInside","onDropTargetChange","parentIds","childParentIds","canDragItem","canDropInsideItem","currentItem","itemId","beforeTarget","placement","insideTarget","length","childListEndTarget","lastChild","isBeforeDropTargetActive","targetA","targetB","isInsideDropTargetActive","isChildListEndTargetActive","handleDragStart","handleResolvedDragEnd","handleBeforeDragOver","preventDefault","handleBeforeDrop","stopPropagation","handleInsideDragOver","handleInsideDrop","handleChildListEndDragOver","handleChildListEndDrop","handleDragEnd","isDragging"],"sources":["../../../../../../../src/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.hooks.ts"],"sourcesContent":["import { RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n areCoordinatesEqual,\n Coordinates,\n getScrollableAncestorElements,\n getSidebarItemPopupCoordinates,\n} from './SidebarItem.utils';\nimport {\n NavigationLayoutItem,\n NavigationLayoutItemReorderSource,\n NavigationLayoutItemReorderTarget,\n} from '../../../NavigationLayout.types';\nimport { isNavigationLayoutReorderTargetEqual } from '../../../NavigationLayout.utils';\n\nexport interface UseSidebarItemPopupOptions {\n isDisabled: boolean;\n shouldShowCollapsedLabel?: boolean;\n}\n\nexport interface UseSidebarItemPopupResult {\n coordinates: Coordinates | null;\n handleMouseEnter: () => void;\n handleMouseLeave: () => void;\n isHovered: boolean;\n itemRef: RefObject<HTMLDivElement>;\n popupContainer: HTMLElement | null;\n shouldRenderPopup: boolean;\n}\n\nexport interface UseSidebarItemReorderOptions {\n childItems: NavigationLayoutItem['children'];\n draggedItemId?: NavigationLayoutItem['id'];\n dropTarget: NavigationLayoutItemReorderTarget | null;\n id: NavigationLayoutItem['id'];\n index: number;\n isDisabled?: NavigationLayoutItem['isDisabled'];\n isReorderEnabled: boolean;\n onDragEnd: VoidFunction;\n onDragStart: (\n event: React.DragEvent<HTMLDivElement>,\n item: NavigationLayoutItemReorderSource,\n ) => void;\n onDrop: (target: NavigationLayoutItemReorderTarget) => void;\n onDropInside?: VoidFunction;\n onDropTargetChange: (target: NavigationLayoutItemReorderTarget) => void;\n parentIds: NavigationLayoutItem['id'][];\n}\n\nexport interface UseSidebarItemReorderResult {\n canDragItem: boolean;\n canDropInsideItem: boolean;\n childParentIds: NavigationLayoutItem['id'][];\n childListEndTarget: NavigationLayoutItemReorderTarget | null;\n handleBeforeDragOver: (event: React.DragEvent<HTMLDivElement>) => void;\n handleBeforeDrop: (event: React.DragEvent<HTMLDivElement>) => void;\n handleChildListEndDragOver: (event: React.DragEvent<HTMLDivElement>) => void;\n handleChildListEndDrop: (event: React.DragEvent<HTMLDivElement>) => void;\n handleDragEnd: VoidFunction;\n handleDragStart: (event: React.DragEvent<HTMLDivElement>) => void;\n handleInsideDragOver: (event: React.DragEvent<HTMLDivElement>) => void;\n handleInsideDrop: (event: React.DragEvent<HTMLDivElement>) => void;\n isBeforeDropTargetActive: boolean;\n isChildListEndTargetActive: boolean;\n isDragging: boolean;\n isInsideDropTargetActive: boolean;\n}\n\nconst setDragMoveEffect = (event: React.DragEvent<HTMLDivElement>): void => {\n const { dataTransfer } = event;\n\n dataTransfer.dropEffect = 'move';\n};\n\nconst resolveSidebarContainer = (item: HTMLDivElement | null): HTMLElement | null => {\n if (!item) {\n return null;\n }\n\n return (\n item.closest<HTMLElement>('[data-navigation-sidebar-root=\"true\"]') ??\n document.getElementById('sidebar')\n );\n};\n\nexport const useSidebarItemPopup = ({\n isDisabled,\n shouldShowCollapsedLabel,\n}: UseSidebarItemPopupOptions): UseSidebarItemPopupResult => {\n const [coordinates, setCoordinates] = useState<Coordinates | null>(null);\n const [isHovered, setIsHovered] = useState(false);\n const [popupContainer, setPopupContainer] = useState<HTMLElement | null>(null);\n\n const animationFrameIdRef = useRef<number | null>(null);\n const lastCoordinatesRef = useRef<Coordinates | null>(null);\n const itemRef = useRef<HTMLDivElement>(null);\n\n const resetCoordinates = useCallback(() => {\n lastCoordinatesRef.current = null;\n setCoordinates(null);\n }, []);\n\n const resolvePopupContainer = useCallback(() => {\n const nextContainer = resolveSidebarContainer(itemRef.current);\n\n setPopupContainer((previousContainer) =>\n previousContainer === nextContainer ? previousContainer : nextContainer,\n );\n\n return nextContainer;\n }, []);\n\n const updateCoordinates = useCallback(() => {\n const nextContainer = popupContainer ?? resolvePopupContainer();\n const itemElement = itemRef.current;\n\n if (!nextContainer || !itemElement) {\n resetCoordinates();\n\n return;\n }\n\n const nextCoordinates = getSidebarItemPopupCoordinates({\n container: nextContainer,\n item: itemElement,\n });\n\n if (\n areCoordinatesEqual({\n coordinatesA: lastCoordinatesRef.current,\n coordinatesB: nextCoordinates,\n })\n ) {\n return;\n }\n\n lastCoordinatesRef.current = nextCoordinates;\n setCoordinates(nextCoordinates);\n }, [popupContainer, resetCoordinates, resolvePopupContainer]);\n\n const scheduleCoordinatesUpdate = useCallback(() => {\n if (animationFrameIdRef.current !== null) {\n return;\n }\n\n animationFrameIdRef.current = requestAnimationFrame(() => {\n animationFrameIdRef.current = null;\n updateCoordinates();\n });\n }, [updateCoordinates]);\n\n const handleMouseEnter = useCallback(() => {\n resolvePopupContainer();\n setIsHovered(true);\n scheduleCoordinatesUpdate();\n }, [resolvePopupContainer, scheduleCoordinatesUpdate]);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n resetCoordinates();\n }, [resetCoordinates]);\n\n useEffect(() => {\n resolvePopupContainer();\n }, [resolvePopupContainer]);\n\n useEffect(() => {\n if (!isHovered || isDisabled || !shouldShowCollapsedLabel) {\n resetCoordinates();\n\n return undefined;\n }\n\n const nextContainer = popupContainer ?? resolvePopupContainer();\n const itemElement = itemRef.current;\n\n if (!nextContainer || !itemElement) {\n return undefined;\n }\n\n scheduleCoordinatesUpdate();\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n scheduleCoordinatesUpdate();\n });\n\n resizeObserver?.observe(nextContainer);\n resizeObserver?.observe(itemElement);\n\n const scrollableElements = getScrollableAncestorElements({\n element: itemElement,\n boundaryElement: nextContainer,\n });\n\n scrollableElements.forEach((element) => {\n element.addEventListener('scroll', scheduleCoordinatesUpdate, { passive: true });\n });\n\n window.addEventListener('resize', scheduleCoordinatesUpdate);\n\n return () => {\n scrollableElements.forEach((element) => {\n element.removeEventListener('scroll', scheduleCoordinatesUpdate);\n });\n\n window.removeEventListener('resize', scheduleCoordinatesUpdate);\n resizeObserver?.disconnect();\n\n if (animationFrameIdRef.current !== null) {\n cancelAnimationFrame(animationFrameIdRef.current);\n animationFrameIdRef.current = null;\n }\n };\n }, [\n isDisabled,\n isHovered,\n popupContainer,\n resetCoordinates,\n resolvePopupContainer,\n scheduleCoordinatesUpdate,\n shouldShowCollapsedLabel,\n ]);\n\n return {\n coordinates,\n handleMouseEnter,\n handleMouseLeave,\n isHovered,\n itemRef,\n popupContainer,\n shouldRenderPopup: !isDisabled && !!shouldShowCollapsedLabel && isHovered && !!coordinates,\n };\n};\n\nexport const useSidebarItemReorder = ({\n childItems,\n draggedItemId,\n dropTarget,\n id,\n index,\n isDisabled,\n isReorderEnabled,\n onDragEnd,\n onDragStart,\n onDrop,\n onDropInside,\n onDropTargetChange,\n parentIds,\n}: UseSidebarItemReorderOptions): UseSidebarItemReorderResult => {\n const childParentIds = useMemo(() => [...parentIds, id], [id, parentIds]);\n const canDragItem = isReorderEnabled && !isDisabled;\n const canDropInsideItem = isReorderEnabled && !isDisabled;\n\n const currentItem = useMemo<NavigationLayoutItemReorderSource>(\n () => ({\n itemId: id,\n parentIds,\n index,\n }),\n [id, index, parentIds],\n );\n\n const beforeTarget = useMemo<NavigationLayoutItemReorderTarget>(\n () => ({\n itemId: id,\n parentIds,\n index,\n placement: 'before',\n }),\n [id, index, parentIds],\n );\n\n const insideTarget = useMemo<NavigationLayoutItemReorderTarget>(\n () => ({\n itemId: id,\n parentIds: childParentIds,\n index: childItems?.length ?? 0,\n placement: 'inside',\n }),\n [childItems, childParentIds, id],\n );\n\n const childListEndTarget = useMemo<NavigationLayoutItemReorderTarget | null>(() => {\n const lastChild = childItems?.[childItems.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n return {\n itemId: lastChild.id,\n parentIds: childParentIds,\n index: childItems.length,\n placement: 'after',\n };\n }, [childItems, childParentIds]);\n\n const isBeforeDropTargetActive = useMemo(\n () =>\n isNavigationLayoutReorderTargetEqual({\n targetA: dropTarget,\n targetB: beforeTarget,\n }),\n [beforeTarget, dropTarget],\n );\n\n const isInsideDropTargetActive = useMemo(\n () =>\n isNavigationLayoutReorderTargetEqual({\n targetA: dropTarget,\n targetB: insideTarget,\n }),\n [dropTarget, insideTarget],\n );\n\n const isChildListEndTargetActive = useMemo(\n () =>\n isNavigationLayoutReorderTargetEqual({\n targetA: dropTarget,\n targetB: childListEndTarget,\n }),\n [childListEndTarget, dropTarget],\n );\n\n const handleDragStart = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n if (!canDragItem) {\n return;\n }\n\n onDragStart(event, currentItem);\n },\n [canDragItem, currentItem, onDragStart],\n );\n\n const handleResolvedDragEnd = useCallback((): void => {\n if (!canDragItem) {\n return;\n }\n\n onDragEnd();\n }, [canDragItem, onDragEnd]);\n\n const handleBeforeDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setDragMoveEffect(event);\n onDropTargetChange(beforeTarget);\n },\n [beforeTarget, onDropTargetChange],\n );\n\n const handleBeforeDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n event.stopPropagation();\n onDrop(beforeTarget);\n },\n [beforeTarget, onDrop],\n );\n\n const handleInsideDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n if (!canDropInsideItem) {\n return;\n }\n\n event.preventDefault();\n setDragMoveEffect(event);\n onDropTargetChange(insideTarget);\n },\n [canDropInsideItem, insideTarget, onDropTargetChange],\n );\n\n const handleInsideDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n if (!canDropInsideItem) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n onDropInside?.();\n onDrop(insideTarget);\n },\n [canDropInsideItem, insideTarget, onDrop, onDropInside],\n );\n\n const handleChildListEndDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n if (!childListEndTarget) {\n return;\n }\n\n event.preventDefault();\n setDragMoveEffect(event);\n onDropTargetChange(childListEndTarget);\n },\n [childListEndTarget, onDropTargetChange],\n );\n\n const handleChildListEndDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>): void => {\n if (!childListEndTarget) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n onDrop(childListEndTarget);\n },\n [childListEndTarget, onDrop],\n );\n\n return {\n canDragItem,\n canDropInsideItem,\n childParentIds,\n childListEndTarget,\n handleBeforeDragOver,\n handleBeforeDrop,\n handleChildListEndDragOver,\n handleChildListEndDrop,\n handleDragEnd: handleResolvedDragEnd,\n handleDragStart,\n handleInsideDragOver,\n handleInsideDrop,\n isBeforeDropTargetActive,\n isChildListEndTargetActive,\n isDragging: draggedItemId === id,\n isInsideDropTargetActive,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { ExpandableContent, Icon, Tooltip } from '@chayns-components/core';
|
|
3
|
+
import { StyledSidebarItem, StyledSidebarItemChildren, StyledSidebarItemHead, StyledSidebarItemHeadContent, StyledSidebarItemIcon, StyledSidebarItemIconImage, StyledSidebarItemLabel, StyledMotionSidebarOpenIcon, StyledSidebarItemPopup } from './SidebarItem.styles';
|
|
4
|
+
import { isItemOrChildSelected } from './SidebarItem.utils';
|
|
5
|
+
import { createPortal } from 'react-dom';
|
|
6
|
+
import { AnimatePresence } from 'motion/react';
|
|
7
|
+
import { useSidebarItemPopup, useSidebarItemReorder } from './SidebarItem.hooks';
|
|
8
|
+
import { StyledSidebarDropZone } from '../SidebarGroup.styles';
|
|
9
|
+
import { useNavigationSidebarContext } from '../../NavigationSidebar.context';
|
|
10
|
+
import { useSidebarGroupReorderContext } from '../SidebarGroup.context';
|
|
11
|
+
const SidebarItem = ({
|
|
12
|
+
item,
|
|
13
|
+
index,
|
|
14
|
+
parentIds,
|
|
15
|
+
shouldShowCollapsedLabel: shouldShowCollapsedLabelProp
|
|
16
|
+
}) => {
|
|
17
|
+
const {
|
|
18
|
+
children: childItems,
|
|
19
|
+
disabledReason,
|
|
20
|
+
icons,
|
|
21
|
+
id,
|
|
22
|
+
imageElement,
|
|
23
|
+
imageUrl,
|
|
24
|
+
isDisabled,
|
|
25
|
+
label
|
|
26
|
+
} = item;
|
|
27
|
+
const [shouldShowChildren, setShouldShowChildren] = useState(false);
|
|
28
|
+
const {
|
|
29
|
+
color,
|
|
30
|
+
isCompact,
|
|
31
|
+
onItemClick,
|
|
32
|
+
selectedItemId,
|
|
33
|
+
shouldShowCollapsedLabel
|
|
34
|
+
} = useNavigationSidebarContext();
|
|
35
|
+
const {
|
|
36
|
+
draggedItemId,
|
|
37
|
+
dropTarget,
|
|
38
|
+
isReorderEnabled,
|
|
39
|
+
onDragEnd,
|
|
40
|
+
onDragStart,
|
|
41
|
+
onDrop,
|
|
42
|
+
onDropTargetChange
|
|
43
|
+
} = useSidebarGroupReorderContext();
|
|
44
|
+
const resolvedShouldShowCollapsedLabel = shouldShowCollapsedLabelProp ?? shouldShowCollapsedLabel;
|
|
45
|
+
const {
|
|
46
|
+
coordinates,
|
|
47
|
+
handleMouseEnter,
|
|
48
|
+
handleMouseLeave,
|
|
49
|
+
isHovered,
|
|
50
|
+
itemRef,
|
|
51
|
+
popupContainer,
|
|
52
|
+
shouldRenderPopup
|
|
53
|
+
} = useSidebarItemPopup({
|
|
54
|
+
isDisabled: Boolean(isDisabled),
|
|
55
|
+
shouldShowCollapsedLabel: resolvedShouldShowCollapsedLabel
|
|
56
|
+
});
|
|
57
|
+
const {
|
|
58
|
+
canDragItem,
|
|
59
|
+
canDropInsideItem,
|
|
60
|
+
childParentIds,
|
|
61
|
+
childListEndTarget,
|
|
62
|
+
handleBeforeDragOver,
|
|
63
|
+
handleBeforeDrop,
|
|
64
|
+
handleChildListEndDragOver,
|
|
65
|
+
handleChildListEndDrop,
|
|
66
|
+
handleDragEnd,
|
|
67
|
+
handleDragStart,
|
|
68
|
+
handleInsideDragOver,
|
|
69
|
+
handleInsideDrop,
|
|
70
|
+
isBeforeDropTargetActive,
|
|
71
|
+
isChildListEndTargetActive,
|
|
72
|
+
isDragging,
|
|
73
|
+
isInsideDropTargetActive
|
|
74
|
+
} = useSidebarItemReorder({
|
|
75
|
+
childItems,
|
|
76
|
+
draggedItemId,
|
|
77
|
+
dropTarget,
|
|
78
|
+
id,
|
|
79
|
+
index,
|
|
80
|
+
isDisabled,
|
|
81
|
+
isReorderEnabled,
|
|
82
|
+
onDragEnd,
|
|
83
|
+
onDragStart,
|
|
84
|
+
onDrop,
|
|
85
|
+
onDropInside: () => setShouldShowChildren(true),
|
|
86
|
+
onDropTargetChange,
|
|
87
|
+
parentIds
|
|
88
|
+
});
|
|
89
|
+
const isSelected = useMemo(() => isItemOrChildSelected(item, selectedItemId), [item, selectedItemId]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (isCompact) {
|
|
92
|
+
setShouldShowChildren(false);
|
|
93
|
+
}
|
|
94
|
+
}, [isCompact]);
|
|
95
|
+
const handleClick = useCallback(() => {
|
|
96
|
+
if (isDisabled || typeof onItemClick !== 'function') {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
onItemClick(id, parentIds);
|
|
100
|
+
}, [id, isDisabled, onItemClick, parentIds]);
|
|
101
|
+
const handleOpenIconClick = useCallback(event => {
|
|
102
|
+
event.stopPropagation();
|
|
103
|
+
setShouldShowChildren(previousValue => !previousValue);
|
|
104
|
+
}, []);
|
|
105
|
+
const renderChildItem = useCallback((childItem, childIndex) => /*#__PURE__*/React.createElement(SidebarItem, {
|
|
106
|
+
key: childItem.id,
|
|
107
|
+
item: childItem,
|
|
108
|
+
index: childIndex,
|
|
109
|
+
parentIds: childParentIds,
|
|
110
|
+
shouldShowCollapsedLabel: false
|
|
111
|
+
}), [childParentIds]);
|
|
112
|
+
const children = useMemo(() => {
|
|
113
|
+
if (!childItems?.length) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return childItems.map(renderChildItem);
|
|
117
|
+
}, [childItems, renderChildItem]);
|
|
118
|
+
return /*#__PURE__*/React.createElement(StyledSidebarItem, null, isReorderEnabled && /*#__PURE__*/React.createElement(StyledSidebarDropZone, {
|
|
119
|
+
$depth: parentIds.length,
|
|
120
|
+
$isActive: isBeforeDropTargetActive,
|
|
121
|
+
$isDragging: !!draggedItemId,
|
|
122
|
+
$placement: "before",
|
|
123
|
+
onDragOver: handleBeforeDragOver,
|
|
124
|
+
onDrop: handleBeforeDrop
|
|
125
|
+
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
126
|
+
item: {
|
|
127
|
+
text: disabledReason ?? ''
|
|
128
|
+
},
|
|
129
|
+
isDisabled: !disabledReason,
|
|
130
|
+
shouldUseFullWidth: true
|
|
131
|
+
}, /*#__PURE__*/React.createElement(StyledSidebarItemHead, {
|
|
132
|
+
ref: itemRef,
|
|
133
|
+
$shouldHighlight: !isDisabled && (isHovered || isSelected),
|
|
134
|
+
$isDisabled: isDisabled,
|
|
135
|
+
$hasDisabledReason: !!disabledReason,
|
|
136
|
+
$isDragging: isDragging,
|
|
137
|
+
$isReorderable: canDragItem,
|
|
138
|
+
draggable: canDragItem,
|
|
139
|
+
onDragEnd: handleDragEnd,
|
|
140
|
+
onDragStart: handleDragStart,
|
|
141
|
+
onMouseEnter: handleMouseEnter,
|
|
142
|
+
onMouseLeave: handleMouseLeave,
|
|
143
|
+
onClick: handleClick
|
|
144
|
+
}, /*#__PURE__*/React.createElement(StyledSidebarItemHeadContent, null, /*#__PURE__*/React.createElement(StyledSidebarItemIcon, null, imageUrl && /*#__PURE__*/React.createElement(StyledSidebarItemIconImage, {
|
|
145
|
+
src: imageUrl
|
|
146
|
+
}), imageElement, icons && /*#__PURE__*/React.createElement(Icon, {
|
|
147
|
+
icons: icons,
|
|
148
|
+
size: 21,
|
|
149
|
+
color: color
|
|
150
|
+
})), /*#__PURE__*/React.createElement(StyledSidebarItemLabel, null, label)), !!children && !isCompact && !isDisabled && /*#__PURE__*/React.createElement(StyledMotionSidebarOpenIcon, {
|
|
151
|
+
initial: false,
|
|
152
|
+
animate: {
|
|
153
|
+
rotate: shouldShowChildren ? 180 : 0
|
|
154
|
+
},
|
|
155
|
+
transition: {
|
|
156
|
+
type: 'tween'
|
|
157
|
+
},
|
|
158
|
+
onClick: handleOpenIconClick
|
|
159
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
160
|
+
icons: ['fa fa-chevron-down'],
|
|
161
|
+
color: color
|
|
162
|
+
})))), canDropInsideItem && /*#__PURE__*/React.createElement(StyledSidebarDropZone, {
|
|
163
|
+
$depth: childParentIds.length,
|
|
164
|
+
$isActive: isInsideDropTargetActive,
|
|
165
|
+
$isDragging: !!draggedItemId,
|
|
166
|
+
$placement: "inside",
|
|
167
|
+
onDragOver: handleInsideDragOver,
|
|
168
|
+
onDrop: handleInsideDrop
|
|
169
|
+
}), !!children && /*#__PURE__*/React.createElement(ExpandableContent, {
|
|
170
|
+
isOpen: shouldShowChildren
|
|
171
|
+
}, /*#__PURE__*/React.createElement(StyledSidebarItemChildren, null, children, isReorderEnabled && childListEndTarget && /*#__PURE__*/React.createElement(StyledSidebarDropZone, {
|
|
172
|
+
$depth: childParentIds.length,
|
|
173
|
+
$isActive: isChildListEndTargetActive,
|
|
174
|
+
$isDragging: !!draggedItemId,
|
|
175
|
+
$placement: "after",
|
|
176
|
+
onDragOver: handleChildListEndDragOver,
|
|
177
|
+
onDrop: handleChildListEndDrop
|
|
178
|
+
}))), popupContainer && /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(AnimatePresence, {
|
|
179
|
+
initial: false
|
|
180
|
+
}, shouldRenderPopup && coordinates && /*#__PURE__*/React.createElement(StyledSidebarItemPopup, {
|
|
181
|
+
$coordinates: coordinates
|
|
182
|
+
}, label)), popupContainer));
|
|
183
|
+
};
|
|
184
|
+
SidebarItem.displayName = 'SidebarItem';
|
|
185
|
+
export default /*#__PURE__*/memo(SidebarItem);
|
|
186
|
+
//# sourceMappingURL=SidebarItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItem.js","names":["React","memo","useCallback","useEffect","useMemo","useState","ExpandableContent","Icon","Tooltip","StyledSidebarItem","StyledSidebarItemChildren","StyledSidebarItemHead","StyledSidebarItemHeadContent","StyledSidebarItemIcon","StyledSidebarItemIconImage","StyledSidebarItemLabel","StyledMotionSidebarOpenIcon","StyledSidebarItemPopup","isItemOrChildSelected","createPortal","AnimatePresence","useSidebarItemPopup","useSidebarItemReorder","StyledSidebarDropZone","useNavigationSidebarContext","useSidebarGroupReorderContext","SidebarItem","item","index","parentIds","shouldShowCollapsedLabel","shouldShowCollapsedLabelProp","children","childItems","disabledReason","icons","id","imageElement","imageUrl","isDisabled","label","shouldShowChildren","setShouldShowChildren","color","isCompact","onItemClick","selectedItemId","draggedItemId","dropTarget","isReorderEnabled","onDragEnd","onDragStart","onDrop","onDropTargetChange","resolvedShouldShowCollapsedLabel","coordinates","handleMouseEnter","handleMouseLeave","isHovered","itemRef","popupContainer","shouldRenderPopup","Boolean","canDragItem","canDropInsideItem","childParentIds","childListEndTarget","handleBeforeDragOver","handleBeforeDrop","handleChildListEndDragOver","handleChildListEndDrop","handleDragEnd","handleDragStart","handleInsideDragOver","handleInsideDrop","isBeforeDropTargetActive","isChildListEndTargetActive","isDragging","isInsideDropTargetActive","onDropInside","isSelected","handleClick","handleOpenIconClick","event","stopPropagation","previousValue","renderChildItem","childItem","childIndex","createElement","key","length","map","$depth","$isActive","$isDragging","$placement","onDragOver","text","shouldUseFullWidth","ref","$shouldHighlight","$isDisabled","$hasDisabledReason","$isReorderable","draggable","onMouseEnter","onMouseLeave","onClick","src","size","initial","animate","rotate","transition","type","isOpen","$coordinates","displayName"],"sources":["../../../../../../../src/components/navigation-layout/navigation-sidebar/sidebar-group/sidebar-item/SidebarItem.tsx"],"sourcesContent":["import React, { FC, memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ExpandableContent, Icon, Tooltip } from '@chayns-components/core';\nimport {\n StyledSidebarItem,\n StyledSidebarItemChildren,\n StyledSidebarItemHead,\n StyledSidebarItemHeadContent,\n StyledSidebarItemIcon,\n StyledSidebarItemIconImage,\n StyledSidebarItemLabel,\n StyledMotionSidebarOpenIcon,\n StyledSidebarItemPopup,\n} from './SidebarItem.styles';\nimport { NavigationLayoutItem } from '../../../NavigationLayout.types';\nimport { isItemOrChildSelected } from './SidebarItem.utils';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence } from 'motion/react';\nimport { useSidebarItemPopup, useSidebarItemReorder } from './SidebarItem.hooks';\nimport { StyledSidebarDropZone } from '../SidebarGroup.styles';\nimport { useNavigationSidebarContext } from '../../NavigationSidebar.context';\nimport { useSidebarGroupReorderContext } from '../SidebarGroup.context';\n\ninterface SidebarItemProps {\n item: NavigationLayoutItem;\n index: number;\n parentIds: NavigationLayoutItem['id'][];\n shouldShowCollapsedLabel?: boolean;\n}\n\nconst SidebarItem: FC<SidebarItemProps> = ({\n item,\n index,\n parentIds,\n shouldShowCollapsedLabel: shouldShowCollapsedLabelProp,\n}) => {\n const {\n children: childItems,\n disabledReason,\n icons,\n id,\n imageElement,\n imageUrl,\n isDisabled,\n label,\n } = item;\n const [shouldShowChildren, setShouldShowChildren] = useState(false);\n const { color, isCompact, onItemClick, selectedItemId, shouldShowCollapsedLabel } =\n useNavigationSidebarContext();\n const {\n draggedItemId,\n dropTarget,\n isReorderEnabled,\n onDragEnd,\n onDragStart,\n onDrop,\n onDropTargetChange,\n } = useSidebarGroupReorderContext();\n const resolvedShouldShowCollapsedLabel =\n shouldShowCollapsedLabelProp ?? shouldShowCollapsedLabel;\n const {\n coordinates,\n handleMouseEnter,\n handleMouseLeave,\n isHovered,\n itemRef,\n popupContainer,\n shouldRenderPopup,\n } = useSidebarItemPopup({\n isDisabled: Boolean(isDisabled),\n shouldShowCollapsedLabel: resolvedShouldShowCollapsedLabel,\n });\n const {\n canDragItem,\n canDropInsideItem,\n childParentIds,\n childListEndTarget,\n handleBeforeDragOver,\n handleBeforeDrop,\n handleChildListEndDragOver,\n handleChildListEndDrop,\n handleDragEnd,\n handleDragStart,\n handleInsideDragOver,\n handleInsideDrop,\n isBeforeDropTargetActive,\n isChildListEndTargetActive,\n isDragging,\n isInsideDropTargetActive,\n } = useSidebarItemReorder({\n childItems,\n draggedItemId,\n dropTarget,\n id,\n index,\n isDisabled,\n isReorderEnabled,\n onDragEnd,\n onDragStart,\n onDrop,\n onDropInside: () => setShouldShowChildren(true),\n onDropTargetChange,\n parentIds,\n });\n\n const isSelected = useMemo(\n () => isItemOrChildSelected(item, selectedItemId),\n [item, selectedItemId],\n );\n\n useEffect(() => {\n if (isCompact) {\n setShouldShowChildren(false);\n }\n }, [isCompact]);\n\n const handleClick = useCallback(() => {\n if (isDisabled || typeof onItemClick !== 'function') {\n return;\n }\n\n onItemClick(id, parentIds);\n }, [id, isDisabled, onItemClick, parentIds]);\n\n const handleOpenIconClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n setShouldShowChildren((previousValue) => !previousValue);\n }, []);\n\n const renderChildItem = useCallback(\n (childItem: NavigationLayoutItem, childIndex: number) => (\n <SidebarItem\n key={childItem.id}\n item={childItem}\n index={childIndex}\n parentIds={childParentIds}\n shouldShowCollapsedLabel={false}\n />\n ),\n [childParentIds],\n );\n\n const children = useMemo(() => {\n if (!childItems?.length) {\n return null;\n }\n\n return childItems.map(renderChildItem);\n }, [childItems, renderChildItem]);\n\n return (\n <StyledSidebarItem>\n {isReorderEnabled && (\n <StyledSidebarDropZone\n $depth={parentIds.length}\n $isActive={isBeforeDropTargetActive}\n $isDragging={!!draggedItemId}\n $placement=\"before\"\n onDragOver={handleBeforeDragOver}\n onDrop={handleBeforeDrop}\n />\n )}\n <Tooltip\n item={{ text: disabledReason ?? '' }}\n isDisabled={!disabledReason}\n shouldUseFullWidth\n >\n <StyledSidebarItemHead\n ref={itemRef}\n $shouldHighlight={!isDisabled && (isHovered || isSelected)}\n $isDisabled={isDisabled}\n $hasDisabledReason={!!disabledReason}\n $isDragging={isDragging}\n $isReorderable={canDragItem}\n draggable={canDragItem}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n >\n <StyledSidebarItemHeadContent>\n <StyledSidebarItemIcon>\n {imageUrl && <StyledSidebarItemIconImage src={imageUrl} />}\n {imageElement}\n {icons && <Icon icons={icons} size={21} color={color} />}\n </StyledSidebarItemIcon>\n <StyledSidebarItemLabel>{label}</StyledSidebarItemLabel>\n </StyledSidebarItemHeadContent>\n {!!children && !isCompact && !isDisabled && (\n <StyledMotionSidebarOpenIcon\n initial={false}\n animate={{ rotate: shouldShowChildren ? 180 : 0 }}\n transition={{ type: 'tween' }}\n onClick={handleOpenIconClick}\n >\n <Icon icons={['fa fa-chevron-down']} color={color} />\n </StyledMotionSidebarOpenIcon>\n )}\n </StyledSidebarItemHead>\n </Tooltip>\n {canDropInsideItem && (\n <StyledSidebarDropZone\n $depth={childParentIds.length}\n $isActive={isInsideDropTargetActive}\n $isDragging={!!draggedItemId}\n $placement=\"inside\"\n onDragOver={handleInsideDragOver}\n onDrop={handleInsideDrop}\n />\n )}\n {!!children && (\n <ExpandableContent isOpen={shouldShowChildren}>\n <StyledSidebarItemChildren>\n {children}\n {isReorderEnabled && childListEndTarget && (\n <StyledSidebarDropZone\n $depth={childParentIds.length}\n $isActive={isChildListEndTargetActive}\n $isDragging={!!draggedItemId}\n $placement=\"after\"\n onDragOver={handleChildListEndDragOver}\n onDrop={handleChildListEndDrop}\n />\n )}\n </StyledSidebarItemChildren>\n </ExpandableContent>\n )}\n {popupContainer &&\n createPortal(\n <AnimatePresence initial={false}>\n {shouldRenderPopup && coordinates && (\n <StyledSidebarItemPopup $coordinates={coordinates}>\n {label}\n </StyledSidebarItemPopup>\n )}\n </AnimatePresence>,\n popupContainer,\n )}\n </StyledSidebarItem>\n );\n};\n\nSidebarItem.displayName = 'SidebarItem';\n\nexport default memo(SidebarItem);\n"],"mappings":"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","ignoreList":[]}
|