@geotab/zenith 3.5.0-beta.1 → 3.5.1-beta.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/README.md +4 -0
- package/dist/index.css +57 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -3
- package/dist/list/hooks/useDragAndDrop.d.ts +19 -1
- package/dist/list/hooks/useDragAndDrop.js +65 -26
- package/dist/list/utils/findElement.d.ts +1 -0
- package/dist/list/utils/findElement.js +13 -0
- package/dist/list/utils/findItemPosition.d.ts +1 -1
- package/dist/list/utils/findItemPosition.js +2 -2
- package/dist/list/utils/isDragNotClick.d.ts +6 -0
- package/dist/list/utils/isDragNotClick.js +9 -0
- package/dist/nav/context/nav.context.d.ts +2 -0
- package/dist/nav/context/nav.context.js +3 -1
- package/dist/nav/nav.js +20 -8
- package/dist/nav/navEditList/navEditList.d.ts +7 -0
- package/dist/nav/navEditList/navEditList.js +22 -0
- package/dist/nav/navEditList/navEditListUtils.d.ts +3 -0
- package/dist/nav/navEditList/navEditListUtils.js +14 -0
- package/dist/nav/navEditSection/navEditSection.d.ts +3 -0
- package/dist/nav/navEditSection/navEditSection.js +7 -0
- package/dist/nav/navFooter/navEditFooter/navEditFooter.d.ts +11 -0
- package/dist/nav/navFooter/navEditFooter/navEditFooter.js +110 -0
- package/dist/nav/navFooter/navFooter.d.ts +2 -7
- package/dist/nav/navFooter/navFooter.js +4 -4
- package/dist/nav/navItem/navActionItem.d.ts +14 -0
- package/dist/nav/navItem/navActionItem.js +15 -0
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/esm/list/hooks/useDragAndDrop.d.ts +19 -1
- package/esm/list/hooks/useDragAndDrop.js +65 -26
- package/esm/list/utils/findElement.d.ts +1 -0
- package/esm/list/utils/findElement.js +9 -0
- package/esm/list/utils/findItemPosition.d.ts +1 -1
- package/esm/list/utils/findItemPosition.js +2 -2
- package/esm/list/utils/isDragNotClick.d.ts +6 -0
- package/esm/list/utils/isDragNotClick.js +5 -0
- package/esm/nav/context/nav.context.d.ts +2 -0
- package/esm/nav/context/nav.context.js +3 -1
- package/esm/nav/nav.js +21 -9
- package/esm/nav/navEditList/navEditList.d.ts +7 -0
- package/esm/nav/navEditList/navEditList.js +18 -0
- package/esm/nav/navEditList/navEditListUtils.d.ts +3 -0
- package/esm/nav/navEditList/navEditListUtils.js +10 -0
- package/esm/nav/navEditSection/navEditSection.d.ts +3 -0
- package/esm/nav/navEditSection/navEditSection.js +3 -0
- package/esm/nav/navFooter/navEditFooter/navEditFooter.d.ts +11 -0
- package/esm/nav/navFooter/navEditFooter/navEditFooter.js +101 -0
- package/esm/nav/navFooter/navFooter.d.ts +2 -7
- package/esm/nav/navFooter/navFooter.js +4 -4
- package/esm/nav/navItem/navActionItem.d.ts +14 -0
- package/esm/nav/navItem/navActionItem.js +11 -0
- package/package.json +1 -1
- package/dist/list/utils/findListElement.d.ts +0 -1
- package/dist/list/utils/findListElement.js +0 -13
- package/esm/list/utils/findListElement.d.ts +0 -1
- package/esm/list/utils/findListElement.js +0 -9
package/README.md
CHANGED
|
@@ -47,6 +47,10 @@ Zenith library provides components defined in Zenith Design System. It includes
|
|
|
47
47
|
|
|
48
48
|
## Change log
|
|
49
49
|
|
|
50
|
+
### 3.5.1
|
|
51
|
+
|
|
52
|
+
Edit mode in the `Nav` component has been added.
|
|
53
|
+
|
|
50
54
|
### 3.5.0
|
|
51
55
|
|
|
52
56
|
Accessibility improvements, new DateInput control in FiltersBar, custom chart legend formatting, and new languages support. Plus several performance and stability fixes.
|
package/dist/index.css
CHANGED
|
@@ -14397,6 +14397,7 @@ button.zen-summary__clickable {
|
|
|
14397
14397
|
}
|
|
14398
14398
|
.zen-nav {
|
|
14399
14399
|
--nav-gap: 16px;
|
|
14400
|
+
--nav-items-gap: 8px;
|
|
14400
14401
|
--nav-bottom-padding: 12px;
|
|
14401
14402
|
--nav-top-padding: 9px;
|
|
14402
14403
|
--nav-left-right-padding: 12px;
|
|
@@ -14827,6 +14828,62 @@ button.zen-summary__clickable {
|
|
|
14827
14828
|
background: var(--backgrounds-content-0);
|
|
14828
14829
|
border-top: 1px solid var(--borders-general);
|
|
14829
14830
|
}
|
|
14831
|
+
.zen-nav-edit-footer {
|
|
14832
|
+
position: absolute;
|
|
14833
|
+
left: 0px;
|
|
14834
|
+
bottom: 0px;
|
|
14835
|
+
padding: 12px;
|
|
14836
|
+
width: calc(100% - 24px);
|
|
14837
|
+
display: flex;
|
|
14838
|
+
flex-direction: row;
|
|
14839
|
+
justify-content: space-between;
|
|
14840
|
+
}
|
|
14841
|
+
.zen-nav-edit-footer__button {
|
|
14842
|
+
width: calc(50% - 4px);
|
|
14843
|
+
}
|
|
14844
|
+
.zen-nav-edit-footer__button--with-margin {
|
|
14845
|
+
margin-bottom: 8px;
|
|
14846
|
+
}
|
|
14847
|
+
.zen-nav-edit-footer--mobile {
|
|
14848
|
+
flex-direction: column;
|
|
14849
|
+
bottom: 48px;
|
|
14850
|
+
}
|
|
14851
|
+
.zen-nav-edit-footer--mobile .zen-nav-edit-footer__button {
|
|
14852
|
+
width: 100%;
|
|
14853
|
+
}
|
|
14854
|
+
.zen-nav-edit-section {
|
|
14855
|
+
display: flex;
|
|
14856
|
+
flex-direction: column;
|
|
14857
|
+
gap: var(--nav-gap);
|
|
14858
|
+
}
|
|
14859
|
+
.zen-nav-edit-list {
|
|
14860
|
+
display: flex;
|
|
14861
|
+
flex-direction: column;
|
|
14862
|
+
gap: var(--nav-items-gap);
|
|
14863
|
+
}
|
|
14864
|
+
.zen-nav-edit-list__header {
|
|
14865
|
+
font-family: var(--main-font);
|
|
14866
|
+
font-size: 14px;
|
|
14867
|
+
font-style: normal;
|
|
14868
|
+
font-weight: 500;
|
|
14869
|
+
letter-spacing: 0.16px;
|
|
14870
|
+
line-height: 16px;
|
|
14871
|
+
text-transform: none;
|
|
14872
|
+
color: var(--text-secondary);
|
|
14873
|
+
margin: 0;
|
|
14874
|
+
}
|
|
14875
|
+
.zen-nav-edit-list__header--no-gap {
|
|
14876
|
+
margin-bottom: calc(var(--nav-items-gap) * -1);
|
|
14877
|
+
}
|
|
14878
|
+
.zen-nav-edit-list .zen-nav-edit-list__item--placeholder {
|
|
14879
|
+
list-style-type: none;
|
|
14880
|
+
}
|
|
14881
|
+
.zen-nav-edit-list .zen-nav-edit-list__item--dragging {
|
|
14882
|
+
display: none;
|
|
14883
|
+
}
|
|
14884
|
+
.zen-nav-edit-list__item--dragged {
|
|
14885
|
+
background-color: var(--backgrounds-hover);
|
|
14886
|
+
}
|
|
14830
14887
|
.zen-push {
|
|
14831
14888
|
box-sizing: border-box;
|
|
14832
14889
|
font-family: var(--main-font);
|
package/dist/index.d.ts
CHANGED
|
@@ -697,6 +697,7 @@ export { type IItemData, ItemData } from "./list/itemData/itemData";
|
|
|
697
697
|
export { type IList, List } from "./list/list";
|
|
698
698
|
export { type IListItem, ListItem } from "./list/listItem/listItem";
|
|
699
699
|
export { changeOrder } from "./list/utils/changeOrder";
|
|
700
|
+
export { isDragNotClick } from "./list/utils/isDragNotClick";
|
|
700
701
|
export { type IControlledMenu, ControlledMenu } from "./menu/controlledMenu";
|
|
701
702
|
export { type IMenu, Menu } from "./menu/menu";
|
|
702
703
|
export { findFirstFocusable } from "./menu/utils/findFirstFocusable";
|
package/dist/index.js
CHANGED
|
@@ -15,9 +15,9 @@ exports.IconMove = exports.IconMouseScrollUp = exports.IconMouseScrollDown = exp
|
|
|
15
15
|
exports.IconPullRequest = exports.IconProcessor = exports.IconPrinter = exports.IconPound = exports.IconPlusSquare = exports.IconPlusLines = exports.IconPlusFile = exports.IconPlusCircle = exports.IconPlus = exports.IconPlay = exports.IconPinLocation3 = exports.IconPinLocation2 = exports.IconPinLocation = exports.IconPin2 = exports.IconPin = exports.IconPhoneMobile = exports.IconPhone = exports.IconPerformance = exports.IconPercent = exports.IconPeopleLike = exports.IconPeopleGroup2 = exports.IconPeopleGroup = exports.IconPeople = exports.IconPencil2 = exports.IconPencil = exports.IconPause = exports.IconPassword = exports.IconPaperPlane = exports.IconPackage3 = exports.IconPackage2 = exports.IconPackage = exports.IconPDF = exports.IconOptAlt = exports.IconOpt = exports.IconOpen2 = exports.IconOpen = exports.IconOnDuty = exports.IconNumberedList = exports.IconNotifications = exports.IconNotificationOff = exports.IconNotificationBell = exports.IconNotificationAlarm = exports.IconNote = exports.IconNewspaper = exports.IconNews = exports.IconNavigationFooterExpanded = exports.IconNavigationFooterCollapsed = exports.IconMyGeotab = exports.IconMyAdmin = exports.IconMove2 = void 0;
|
|
16
16
|
exports.IconSortHorizontal = exports.IconSort2Vertical = exports.IconSort2Horizontal = exports.IconSmiley = exports.IconSign = exports.IconSidebar = exports.IconShield4 = exports.IconShield3 = exports.IconShield2 = exports.IconShield = exports.IconShare3 = exports.IconShare = exports.IconSettings8 = exports.IconSettings7 = exports.IconSettings6 = exports.IconSettings4 = exports.IconSettings3 = exports.IconSettings2 = exports.IconSettings1 = exports.IconServer3 = exports.IconServer2 = exports.IconServer = exports.IconSend = exports.IconSecuredLines = exports.IconSecured = exports.IconSeatbelt = exports.IconSearchPage = exports.IconSearchLines = exports.IconSearchDocument = exports.IconSearch = exports.IconSdCard = exports.IconRuler = exports.IconRoute = exports.IconRotateRepeat2 = exports.IconRotateRepeat = exports.IconRotateCounterclockwise = exports.IconRotateClockwise = exports.IconResizeSmall = exports.IconResizeBig = exports.IconRepeat2 = exports.IconRepeat = exports.IconRemovePeople = exports.IconRefrigeration = exports.IconRedo2 = exports.IconRedo = exports.IconRecord = exports.IconReceipt = exports.IconRadar = exports.IconQuestion = exports.IconPuzzle = void 0;
|
|
17
17
|
exports.IconWatch = exports.IconWarning = exports.IconWallet1 = exports.IconWallet = exports.IconVolumeOn = exports.IconVolumeOff = exports.IconVolumeMinimum = exports.IconVolumeHalf = exports.IconVolumeFull = exports.IconVolumeDown = exports.IconVoice = exports.IconVisitPage = exports.IconVideoReplay = exports.IconVideo2 = exports.IconVideo = exports.IconUsbHub = exports.IconUsb = exports.IconUpload = exports.IconUnlocked = exports.IconUndock = exports.IconUndo2 = exports.IconUndo = exports.IconUnderline = exports.IconUmbrella = exports.IconTrailer = exports.IconThumbsUp = exports.IconThumbsDown = exports.IconThermometer = exports.IconThermograph = exports.IconTextSize = exports.IconTelevision2 = exports.IconTelevision = exports.IconTarget3 = exports.IconTarget2 = exports.IconTarget = exports.IconTachographTimeCard = exports.IconTachograph = exports.IconTable = exports.IconSupport = exports.IconSun = exports.IconStrikeThrough = exports.IconStore = exports.IconStorage = exports.IconStopwatch = exports.IconStarFilled = exports.IconStarAi = exports.IconStar = exports.IconSquare = exports.IconSpeaker = exports.IconSortVertical = void 0;
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
20
|
-
exports.Waiting = exports.UserFormatProvider = exports.useDrive = exports.ThemeProvider = exports.ThemeDrive = exports.ThemeDark = exports.useLanguage = exports.injectString = exports.dictionaries = exports.LanguageProvider = exports.getFirstFocusableItem = exports.getNewFocusableItem = exports.HeaderButtonsProvider = exports.AbortablePromise = exports.Tooltip = exports.removeArrowClasses = exports.calculateArrowPosition = exports.ToggleButtonRaw = exports.ToggleButton = exports.Toast = exports.useToast = exports.TimePicker = exports.TextareaRaw = exports.Textarea = exports.TextInputRaw = exports.TextInput = exports.TextIconButton = exports.ButtonIconPosition = exports.Tabs = exports.TabsDisplayName = exports.ActionLinkColumn = exports.CheckboxColumn = void 0;
|
|
18
|
+
exports.PageHeaderDisplayName = exports.Notification = exports.getPredefinedFocusableItem = exports.DialogContentNew = exports.Modal = exports.MobileSheet = exports.MiniTabs = exports.MiniTabsSize = exports.isLink = exports.isButton = exports.findPrevFocusable = exports.findNextFocusable = exports.findLastFocusable = exports.findFirstFocusable = exports.Menu = exports.ControlledMenu = exports.isDragNotClick = exports.changeOrder = exports.ListItem = exports.List = exports.ItemData = exports.ItemCompact = exports.LineChartMini = exports.getDefaultDatasetStyle = exports.htmlLegendPlugin = exports.LEGEND_PLUGIN_ID = exports.LineChart = exports.useLayoutSize = exports.LayoutFullScreenProvider = exports.useLayoutFullScreen = exports.LayoutFullScreenElementProvider = exports.useLayoutFullScreenElement = exports.Layout = exports.ImageNothingFound = exports.ImageNoMatchingAssets = exports.ImageLooking = exports.ImageAdjustFilter = exports.IconZoom2 = exports.IconZoom = exports.IconZone = exports.IconYen = exports.IconWrite = exports.IconWrench = exports.IconWorld = exports.IconWorkday = exports.IconWifi2 = exports.IconWifi = exports.IconWhisper = exports.IconWebcam = exports.IconWatch2 = void 0;
|
|
19
|
+
exports.ActionsColumn = exports.getSortableValue = exports.ColumnSortDirection = exports.getEmptySelection = exports.Table = exports.useNestedRows = exports.NestedData = exports.TabBarContent = exports.TabBar = exports.SummaryTileBarDisplayName = exports.SummaryTileBar = exports.getTypeClassName = exports.SummaryTileTrigger = exports.SummaryTile = exports.SummaryTileDisplayName = exports.SummaryTileSize = exports.SummaryTileType = exports.Summary = exports.Summaries = exports.Stepper = exports.SortControl = exports.SortDirections = exports.Skeleton = exports.LazyContent = exports.SidePanel = exports.CUSTOM_POPUP_COMPONENT_CLASSNAME = exports.SidePanelCloseReason = exports.isChildPopup = exports.SelectField = exports.Select = exports.SearchInput = exports.Range = exports.RadioGroup = exports.Radio = exports.ProgressBar = exports.ProgreesBarSize = exports.ProgressBarType = exports.PrimaryIcon = exports.Popup = exports.PillExpandable = exports.Pill = exports.PaginationType = exports.Pagination = exports.PageLayout = exports.PageContentLayout = exports.PageHeaderMenu = exports.PageHeaderMenuDisplayName = exports.PageHeaderButton = exports.PageHeaderButtonDisplayName = exports.PageHeader = void 0;
|
|
20
|
+
exports.Waiting = exports.UserFormatProvider = exports.useDrive = exports.ThemeProvider = exports.ThemeDrive = exports.ThemeDark = exports.useLanguage = exports.injectString = exports.dictionaries = exports.LanguageProvider = exports.getFirstFocusableItem = exports.getNewFocusableItem = exports.HeaderButtonsProvider = exports.AbortablePromise = exports.Tooltip = exports.removeArrowClasses = exports.calculateArrowPosition = exports.ToggleButtonRaw = exports.ToggleButton = exports.Toast = exports.useToast = exports.TimePicker = exports.TextareaRaw = exports.Textarea = exports.TextInputRaw = exports.TextInput = exports.TextIconButton = exports.ButtonIconPosition = exports.Tabs = exports.TabsDisplayName = exports.ActionLinkColumn = exports.CheckboxColumn = exports.MainColumn = void 0;
|
|
21
21
|
/* eslint-disable max-len */
|
|
22
22
|
var absolute_1 = require("./absolute/absolute");
|
|
23
23
|
Object.defineProperty(exports, "Absolute", { enumerable: true, get: function () { return absolute_1.Absolute; } });
|
|
@@ -1487,6 +1487,8 @@ var listItem_1 = require("./list/listItem/listItem");
|
|
|
1487
1487
|
Object.defineProperty(exports, "ListItem", { enumerable: true, get: function () { return listItem_1.ListItem; } });
|
|
1488
1488
|
var changeOrder_1 = require("./list/utils/changeOrder");
|
|
1489
1489
|
Object.defineProperty(exports, "changeOrder", { enumerable: true, get: function () { return changeOrder_1.changeOrder; } });
|
|
1490
|
+
var isDragNotClick_1 = require("./list/utils/isDragNotClick");
|
|
1491
|
+
Object.defineProperty(exports, "isDragNotClick", { enumerable: true, get: function () { return isDragNotClick_1.isDragNotClick; } });
|
|
1490
1492
|
var controlledMenu_1 = require("./menu/controlledMenu");
|
|
1491
1493
|
Object.defineProperty(exports, "ControlledMenu", { enumerable: true, get: function () { return controlledMenu_1.ControlledMenu; } });
|
|
1492
1494
|
var menu_1 = require("./menu/menu");
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import { RefObject } from "react";
|
|
2
|
-
|
|
2
|
+
interface IMarkerClasses {
|
|
3
|
+
general: string;
|
|
4
|
+
placeholder: string;
|
|
5
|
+
dragging: string;
|
|
6
|
+
dragged?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A custom React hook that provides drag-and-drop functionality for reorderable list items.
|
|
10
|
+
* @param containerRef - A React ref pointing to the container element that holds the draggable items
|
|
11
|
+
* @param onChangeOrder - Callback function invoked when an item is dropped at a new position.
|
|
12
|
+
* Receives the start position and end position of the dragged item
|
|
13
|
+
* @param marksClassNames - Optional custom CSS class names for marking different states of list items.
|
|
14
|
+
* If not provided, defaults to 'zen-list-item' based classes
|
|
15
|
+
* @param onBeforeDragOver - Optional callback function called before placing the placeholder at a new position.
|
|
16
|
+
* Receives the target position and should return false to prevent the drag operation.
|
|
17
|
+
* @returns An object containing the `onDragStart` event handler to be attached to draggable elements
|
|
18
|
+
*/
|
|
19
|
+
export declare const useDragAndDrop: (containerRef: RefObject<HTMLElement | null>, onChangeOrder: (startPosition: number, endPosition: number) => void, marksClassNames?: IMarkerClasses, onBeforeDragOver?: (endPosition: number) => boolean) => {
|
|
3
20
|
onDragStart: (e: React.PointerEvent<HTMLElement>) => void;
|
|
4
21
|
};
|
|
22
|
+
export {};
|
|
@@ -3,33 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useDragAndDrop = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const getScrollableParent_1 = require("../../utils/getScrollableParent");
|
|
6
|
-
const
|
|
6
|
+
const findElement_1 = require("../utils/findElement");
|
|
7
7
|
const useContainerScroll_1 = require("./useContainerScroll");
|
|
8
8
|
const findItemPosition_1 = require("../utils/findItemPosition");
|
|
9
|
-
const
|
|
9
|
+
const isDragNotClick_1 = require("../utils/isDragNotClick");
|
|
10
|
+
/**
|
|
11
|
+
* A custom React hook that provides drag-and-drop functionality for reorderable list items.
|
|
12
|
+
* @param containerRef - A React ref pointing to the container element that holds the draggable items
|
|
13
|
+
* @param onChangeOrder - Callback function invoked when an item is dropped at a new position.
|
|
14
|
+
* Receives the start position and end position of the dragged item
|
|
15
|
+
* @param marksClassNames - Optional custom CSS class names for marking different states of list items.
|
|
16
|
+
* If not provided, defaults to 'zen-list-item' based classes
|
|
17
|
+
* @param onBeforeDragOver - Optional callback function called before placing the placeholder at a new position.
|
|
18
|
+
* Receives the target position and should return false to prevent the drag operation.
|
|
19
|
+
* @returns An object containing the `onDragStart` event handler to be attached to draggable elements
|
|
20
|
+
*/
|
|
21
|
+
const useDragAndDrop = (containerRef, onChangeOrder, marksClassNames, onBeforeDragOver) => {
|
|
10
22
|
const dragImageRef = (0, react_1.useRef)(null);
|
|
11
23
|
const dragMoveRef = (0, react_1.useRef)(undefined);
|
|
12
24
|
const { moveScroll, cancelMoveScroll } = (0, useContainerScroll_1.useContainerScroll)();
|
|
25
|
+
const cssMarks = marksClassNames
|
|
26
|
+
? marksClassNames
|
|
27
|
+
: {
|
|
28
|
+
general: "zen-list-item",
|
|
29
|
+
placeholder: "zen-list-item--placeholder",
|
|
30
|
+
dragging: "zen-list-item--dragging"
|
|
31
|
+
};
|
|
13
32
|
const getPlaceholder = (0, react_1.useCallback)((height) => {
|
|
14
33
|
const placeholder = document.createElement("li");
|
|
15
|
-
placeholder.className =
|
|
34
|
+
placeholder.className = `${cssMarks.general} ${cssMarks.placeholder}`;
|
|
16
35
|
placeholder.style.height = height + "px";
|
|
17
36
|
return placeholder;
|
|
18
|
-
}, []);
|
|
37
|
+
}, [cssMarks.general, cssMarks.placeholder]);
|
|
19
38
|
const removePlaceholders = (0, react_1.useCallback)((element) => {
|
|
20
|
-
const placeholders = element.querySelectorAll(
|
|
39
|
+
const placeholders = element.querySelectorAll(`.${cssMarks.placeholder}`);
|
|
21
40
|
for (const placeholder of placeholders) {
|
|
22
41
|
placeholder.remove();
|
|
23
42
|
}
|
|
24
|
-
}, []);
|
|
43
|
+
}, [cssMarks.placeholder]);
|
|
25
44
|
const setPlaceholder = (0, react_1.useCallback)((element) => {
|
|
26
45
|
if (!containerRef.current) {
|
|
27
46
|
return;
|
|
28
47
|
}
|
|
29
|
-
const items = containerRef.current.querySelectorAll(
|
|
48
|
+
const items = containerRef.current.querySelectorAll(`.${cssMarks.general}`);
|
|
30
49
|
const rect = element.getBoundingClientRect();
|
|
31
50
|
const listRect = containerRef.current.getBoundingClientRect();
|
|
32
51
|
if (rect.top < listRect.top) {
|
|
52
|
+
if (onBeforeDragOver && !onBeforeDragOver(0)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
33
55
|
// If the dragged element is above the list, insert placeholder at the top
|
|
34
56
|
const placeholder = getPlaceholder(rect.height);
|
|
35
57
|
removePlaceholders(containerRef.current);
|
|
@@ -43,18 +65,25 @@ const useDragAndDrop = (containerRef, onChangeOrder) => {
|
|
|
43
65
|
return;
|
|
44
66
|
}
|
|
45
67
|
if (rect.top > listRect.bottom) {
|
|
68
|
+
if (onBeforeDragOver && !onBeforeDragOver(items.length)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
46
71
|
const placeholder = getPlaceholder(rect.height);
|
|
47
72
|
removePlaceholders(containerRef.current);
|
|
48
73
|
containerRef.current.appendChild(placeholder);
|
|
49
74
|
return;
|
|
50
75
|
}
|
|
51
76
|
const dragItemTopOffset = 4;
|
|
52
|
-
for (
|
|
53
|
-
|
|
77
|
+
for (let i = 0; i < items.length; i++) {
|
|
78
|
+
const item = items[i];
|
|
79
|
+
if (item.classList.contains(cssMarks.placeholder) || item.classList.contains(cssMarks.dragging)) {
|
|
54
80
|
continue;
|
|
55
81
|
}
|
|
56
82
|
const itemRect = item.getBoundingClientRect();
|
|
57
83
|
if (item !== element && rect.top > itemRect.top + dragItemTopOffset && rect.top <= itemRect.bottom) {
|
|
84
|
+
if (onBeforeDragOver && !onBeforeDragOver(i + 1)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
58
87
|
const placeholder = getPlaceholder(rect.height);
|
|
59
88
|
removePlaceholders(containerRef.current);
|
|
60
89
|
const next = item.nextSibling;
|
|
@@ -67,19 +96,24 @@ const useDragAndDrop = (containerRef, onChangeOrder) => {
|
|
|
67
96
|
return;
|
|
68
97
|
}
|
|
69
98
|
}
|
|
70
|
-
}, [containerRef, getPlaceholder, removePlaceholders]);
|
|
99
|
+
}, [containerRef, getPlaceholder, removePlaceholders, onBeforeDragOver, cssMarks.general, cssMarks.placeholder, cssMarks.dragging]);
|
|
71
100
|
const onDragStart = (0, react_1.useCallback)((e) => {
|
|
72
|
-
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
const listItemElement = (0, findElement_1.findElement)(e.currentTarget, cssMarks.general);
|
|
73
103
|
if (!listItemElement) {
|
|
74
104
|
return;
|
|
75
105
|
}
|
|
76
|
-
const startPosition = (0, findItemPosition_1.findItemPosition)(listItemElement);
|
|
106
|
+
const startPosition = (0, findItemPosition_1.findItemPosition)(listItemElement, cssMarks.dragging);
|
|
77
107
|
const rect = listItemElement.getBoundingClientRect();
|
|
78
108
|
const offset = {
|
|
79
109
|
x: e.clientX - rect.left,
|
|
80
110
|
y: e.clientY - rect.top
|
|
81
111
|
};
|
|
112
|
+
const initialCoords = { x: e.clientX, y: e.clientY };
|
|
82
113
|
const div = listItemElement.cloneNode(true);
|
|
114
|
+
if (cssMarks.dragged) {
|
|
115
|
+
div.classList.add(cssMarks.dragged);
|
|
116
|
+
}
|
|
83
117
|
document.body.appendChild(div);
|
|
84
118
|
dragImageRef.current = div;
|
|
85
119
|
div.style.position = "absolute";
|
|
@@ -87,16 +121,25 @@ const useDragAndDrop = (containerRef, onChangeOrder) => {
|
|
|
87
121
|
div.style.top = (e.clientY - offset.y) + "px";
|
|
88
122
|
div.style.width = listItemElement.offsetWidth + "px";
|
|
89
123
|
div.style.height = listItemElement.offsetHeight + "px";
|
|
124
|
+
let isDragStarted = false;
|
|
90
125
|
dragMoveRef.current = (moveEvent) => {
|
|
91
126
|
if (!dragImageRef.current) {
|
|
92
127
|
return;
|
|
93
128
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
129
|
+
if (isDragStarted || (0, isDragNotClick_1.isDragNotClick)(initialCoords, { x: moveEvent.clientX, y: moveEvent.clientY })) {
|
|
130
|
+
if (!isDragStarted) {
|
|
131
|
+
isDragStarted = true;
|
|
132
|
+
listItemElement.classList.add(cssMarks.dragging);
|
|
133
|
+
const scrollableParent = (0, getScrollableParent_1.getScrollableParent)(containerRef.current);
|
|
134
|
+
moveScroll((scrollableParent || containerRef.current), dragImageRef.current, () => setPlaceholder(dragImageRef.current));
|
|
135
|
+
}
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
137
|
+
const pageScroll = window ? window.scrollY : 0;
|
|
138
|
+
dragImageRef.current.style.left = (moveEvent.clientX - offset.x) + "px";
|
|
139
|
+
dragImageRef.current.style.top = (pageScroll + moveEvent.clientY - offset.y) + "px";
|
|
140
|
+
setPlaceholder(dragImageRef.current);
|
|
141
|
+
moveEvent.preventDefault();
|
|
142
|
+
}
|
|
100
143
|
};
|
|
101
144
|
const onDragEnd = () => {
|
|
102
145
|
var _a;
|
|
@@ -107,9 +150,9 @@ const useDragAndDrop = (containerRef, onChangeOrder) => {
|
|
|
107
150
|
if (dragMoveRef.current) {
|
|
108
151
|
document.body.removeEventListener("pointermove", dragMoveRef.current, false);
|
|
109
152
|
}
|
|
110
|
-
const placeholderElement = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(
|
|
111
|
-
const endPosition = placeholderElement ? (0, findItemPosition_1.findItemPosition)(placeholderElement) : null;
|
|
112
|
-
listItemElement.classList.remove(
|
|
153
|
+
const placeholderElement = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(`.${cssMarks.placeholder}`);
|
|
154
|
+
const endPosition = placeholderElement ? (0, findItemPosition_1.findItemPosition)(placeholderElement, cssMarks.dragging) : null;
|
|
155
|
+
listItemElement.classList.remove(cssMarks.dragging);
|
|
113
156
|
if (containerRef.current) {
|
|
114
157
|
removePlaceholders(containerRef.current);
|
|
115
158
|
}
|
|
@@ -124,11 +167,7 @@ const useDragAndDrop = (containerRef, onChangeOrder) => {
|
|
|
124
167
|
document.body.addEventListener("pointermove", dragMoveRef.current, false);
|
|
125
168
|
document.body.addEventListener("pointerup", onDragEnd, false);
|
|
126
169
|
document.addEventListener("mouseleave", onDragEnd);
|
|
127
|
-
|
|
128
|
-
setPlaceholder(dragImageRef.current);
|
|
129
|
-
const scrollableParent = (0, getScrollableParent_1.getScrollableParent)(containerRef.current);
|
|
130
|
-
moveScroll((scrollableParent || containerRef.current), dragImageRef.current, () => setPlaceholder(dragImageRef.current));
|
|
131
|
-
}, [cancelMoveScroll, containerRef, moveScroll, onChangeOrder, removePlaceholders, setPlaceholder]);
|
|
170
|
+
}, [cancelMoveScroll, containerRef, moveScroll, onChangeOrder, removePlaceholders, setPlaceholder, cssMarks.general, cssMarks.placeholder, cssMarks.dragging, cssMarks.dragged]);
|
|
132
171
|
return { onDragStart };
|
|
133
172
|
};
|
|
134
173
|
exports.useDragAndDrop = useDragAndDrop;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const findElement: (element: HTMLElement, className: string) => HTMLElement | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findElement = void 0;
|
|
4
|
+
const findElement = (element, className) => {
|
|
5
|
+
if (element.classList.contains(className)) {
|
|
6
|
+
return element;
|
|
7
|
+
}
|
|
8
|
+
if (element.parentElement) {
|
|
9
|
+
return (0, exports.findElement)(element.parentElement, className);
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
};
|
|
13
|
+
exports.findElement = findElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const findItemPosition: (element: HTMLElement) => number;
|
|
1
|
+
export declare const findItemPosition: (element: HTMLElement, draggingClass?: string) => number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findItemPosition = void 0;
|
|
4
|
-
const findItemPosition = (element) => {
|
|
4
|
+
const findItemPosition = (element, draggingClass = "zen-list-item--dragging") => {
|
|
5
5
|
const parent = element.parentElement;
|
|
6
6
|
if (!parent) {
|
|
7
7
|
return -1;
|
|
@@ -9,7 +9,7 @@ const findItemPosition = (element) => {
|
|
|
9
9
|
let ignoreOriginalElement = false;
|
|
10
10
|
for (let i = 0; i < parent.children.length; i++) {
|
|
11
11
|
const currentChild = parent.children[i];
|
|
12
|
-
ignoreOriginalElement = ignoreOriginalElement || currentChild.classList.contains(
|
|
12
|
+
ignoreOriginalElement = ignoreOriginalElement || currentChild.classList.contains(draggingClass);
|
|
13
13
|
if (currentChild === element) {
|
|
14
14
|
return i - (ignoreOriginalElement ? 1 : 0);
|
|
15
15
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDragNotClick = void 0;
|
|
4
|
+
const isDragNotClick = (initialCoords, currentCoords, threshold = 5) => {
|
|
5
|
+
const xShift = initialCoords.x - currentCoords.x;
|
|
6
|
+
const yShift = initialCoords.y - currentCoords.y;
|
|
7
|
+
return Math.sqrt(xShift * xShift + yShift * yShift) > threshold;
|
|
8
|
+
};
|
|
9
|
+
exports.isDragNotClick = isDragNotClick;
|
|
@@ -7,6 +7,8 @@ export interface INavContext {
|
|
|
7
7
|
searchOpen?: boolean;
|
|
8
8
|
onSearchToggle?: (isOpen: boolean) => void;
|
|
9
9
|
onNavigate?: () => void;
|
|
10
|
+
isEditState?: boolean;
|
|
11
|
+
onEditStateToggle?: (isEdit: boolean) => void;
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
14
|
* @beta This component is not fully ready yet and may change in future releases.
|
|
@@ -12,7 +12,9 @@ exports.NavContext = (0, react_1.createContext)({
|
|
|
12
12
|
onSearch: undefined,
|
|
13
13
|
searchOpen: false,
|
|
14
14
|
onSearchToggle: undefined,
|
|
15
|
-
onNavigate: undefined
|
|
15
|
+
onNavigate: undefined,
|
|
16
|
+
isEditState: false,
|
|
17
|
+
onEditStateToggle: undefined
|
|
16
18
|
});
|
|
17
19
|
/**
|
|
18
20
|
* @beta This component is not fully ready yet and may change in future releases.
|
package/dist/nav/nav.js
CHANGED
|
@@ -13,6 +13,7 @@ const navMobileBar_1 = require("./navMobileBar/navMobileBar");
|
|
|
13
13
|
const useMobile_1 = require("../commonHelpers/hooks/useMobile");
|
|
14
14
|
const focusableSelector_1 = require("../utils/focusableSelector");
|
|
15
15
|
const NavContent = ({ children }) => {
|
|
16
|
+
const { isEditState } = (0, nav_context_1.useNavContext)();
|
|
16
17
|
const contentRef = (0, react_1.useRef)(null);
|
|
17
18
|
const [hasScrollbar, setHasScrollbar] = (0, react_1.useState)(false);
|
|
18
19
|
const [showTopShadow, setShowTopShadow] = (0, react_1.useState)(false);
|
|
@@ -43,8 +44,8 @@ const NavContent = ({ children }) => {
|
|
|
43
44
|
}, [handleResize]);
|
|
44
45
|
return (0, jsx_runtime_1.jsx)("div", { ref: contentRef, onScroll: handleScroll, className: (0, classNames_1.classNames)([
|
|
45
46
|
"zen-nav__content",
|
|
46
|
-
showTopShadow ? "zen-nav__content--show-top-shadow" : "",
|
|
47
|
-
showBottomShadow ? "zen-nav__content--show-bottom-shadow" : "",
|
|
47
|
+
showTopShadow && !isEditState ? "zen-nav__content--show-top-shadow" : "",
|
|
48
|
+
showBottomShadow && !isEditState ? "zen-nav__content--show-bottom-shadow" : "",
|
|
48
49
|
hasScrollbar ? "zen-nav__content--has-scrollbar" : "",
|
|
49
50
|
hasOverlayScrollbar ? "zen-nav__content--overlay-scrollbar" : ""
|
|
50
51
|
]), children: (0, jsx_runtime_1.jsx)("div", { className: "zen-nav__content-inner", children: children }) });
|
|
@@ -56,6 +57,7 @@ const Nav = ({ children, className, collapsed = false, onCollapseToggle, onMenuV
|
|
|
56
57
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = (0, react_1.useState)(false);
|
|
57
58
|
const menuRef = (0, react_1.useRef)(null);
|
|
58
59
|
const [isSearchOpen, setIsSearchOpen] = (0, react_1.useState)(false);
|
|
60
|
+
const [isEditState, setIsEditState] = (0, react_1.useState)(false);
|
|
59
61
|
const [searchTerm, setSearchTerm] = (0, react_1.useState)("");
|
|
60
62
|
const isMobile = (0, useMobile_1.useMobile)();
|
|
61
63
|
const prevIsMobileRef = (0, react_1.useRef)(false);
|
|
@@ -71,16 +73,18 @@ const Nav = ({ children, className, collapsed = false, onCollapseToggle, onMenuV
|
|
|
71
73
|
}
|
|
72
74
|
}, [isMobile, isMobileMenuOpen]);
|
|
73
75
|
const childrenArray = react_1.Children.toArray(children);
|
|
74
|
-
const header = childrenArray.find(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.displayName) === "NavHeader"; });
|
|
76
|
+
const header = isEditState ? undefined : childrenArray.find(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.displayName) === "NavHeader"; });
|
|
75
77
|
const sections = childrenArray.filter(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.displayName) === "NavSection"; });
|
|
76
78
|
const footer = childrenArray.find(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.displayName) === "NavFooter"; });
|
|
79
|
+
const editFooter = childrenArray.find(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.displayName) === "NavEditFooter"; });
|
|
77
80
|
const secondarySections = sections.map(section => (0, navUtils_1.filterPrimaryNavItems)(section, true)).filter(section => !!section && react_1.Children.count(section.props.children) > 0);
|
|
78
81
|
const primarySections = sections.map(section => (0, navUtils_1.filterPrimaryNavItems)(section, false)).filter(section => !!section && react_1.Children.count(section.props.children) > 0);
|
|
79
82
|
const sectionsToRender = isMobile ? secondarySections : sections;
|
|
80
83
|
const secondaryFooter = footer && (0, navUtils_1.filterPrimaryNavItems)(footer, true);
|
|
81
84
|
const primaryFooter = footer && (0, navUtils_1.filterPrimaryNavItems)(footer, false);
|
|
82
|
-
const footerToRender = isMobile ? secondaryFooter : footer;
|
|
85
|
+
const footerToRender = isEditState ? editFooter : (isMobile ? secondaryFooter : footer);
|
|
83
86
|
const primaryItems = [...primarySections, ...(primaryFooter ? [primaryFooter] : [])].flatMap(e => (0, navUtils_1.collectNavItems)(e));
|
|
87
|
+
const editListItems = childrenArray.find(child => { var _a; return ((_a = child.type) === null || _a === void 0 ? void 0 : _a.name) === "NavEditSection"; });
|
|
84
88
|
const onSearchOpen = (0, react_1.useCallback)((isOpen) => {
|
|
85
89
|
isOpen && onCollapseToggle && onCollapseToggle(false);
|
|
86
90
|
setIsSearchOpen(isOpen || isMobile);
|
|
@@ -88,6 +92,10 @@ const Nav = ({ children, className, collapsed = false, onCollapseToggle, onMenuV
|
|
|
88
92
|
const onMobileMenuToggle = (0, react_1.useCallback)(() => {
|
|
89
93
|
setIsMobileMenuOpen(!isMobileMenuOpen);
|
|
90
94
|
}, [isMobileMenuOpen, setIsMobileMenuOpen]);
|
|
95
|
+
const onEditStateToggle = (0, react_1.useCallback)((isEdit) => {
|
|
96
|
+
isEdit && onCollapseToggle && onCollapseToggle(false);
|
|
97
|
+
editListItems && editFooter && setIsEditState(isEdit);
|
|
98
|
+
}, [onCollapseToggle, setIsEditState, editListItems, editFooter]);
|
|
91
99
|
(0, react_1.useEffect)(() => {
|
|
92
100
|
const wasMobile = prevIsMobileRef.current;
|
|
93
101
|
prevIsMobileRef.current = isMobile;
|
|
@@ -122,14 +130,18 @@ const Nav = ({ children, className, collapsed = false, onCollapseToggle, onMenuV
|
|
|
122
130
|
collapsed,
|
|
123
131
|
onCollapseToggle,
|
|
124
132
|
searchOpen: isSearchOpen,
|
|
133
|
+
isEditState: isEditState,
|
|
134
|
+
onEditStateToggle,
|
|
125
135
|
onSearchToggle: onSearchOpen,
|
|
126
136
|
searchTerm,
|
|
127
137
|
onSearch: setSearchTerm,
|
|
128
138
|
onNavigate: () => setIsMobileMenuOpen(false)
|
|
129
139
|
}, children: [(!isMobile || isMobileMenuOpen)
|
|
130
|
-
? (0, jsx_runtime_1.jsxs)("div", { ref: menuRef, className: (0, classNames_1.classNames)(["zen-nav", isMobile ? "zen-nav--mobile" : "", collapsed ? "zen-nav--collapsed" : "", className || ""]), children: [header ? (0, react_1.cloneElement)(header, Object.assign(Object.assign({}, header.props), { className: (0, classNames_1.classNames)(["zen-nav__header", header.props.className || ""]) })) : null, (0, jsx_runtime_1.jsx)(NavContent, { children:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
140
|
+
? (0, jsx_runtime_1.jsxs)("div", { ref: menuRef, className: (0, classNames_1.classNames)(["zen-nav", isMobile ? "zen-nav--mobile" : "", collapsed ? "zen-nav--collapsed" : "", className || ""]), children: [header ? (0, react_1.cloneElement)(header, Object.assign(Object.assign({}, header.props), { className: (0, classNames_1.classNames)(["zen-nav__header", header.props.className || ""]) })) : null, (0, jsx_runtime_1.jsx)(NavContent, { children: isEditState
|
|
141
|
+
? editListItems
|
|
142
|
+
: sectionsToRender.map((section, index) => ((0, jsx_runtime_1.jsxs)(react_1.Fragment, { children: [(0, react_1.cloneElement)(section, {
|
|
143
|
+
className: (0, classNames_1.classNames)(["zen-nav__section", section.props.className || ""])
|
|
144
|
+
}), isMobile || index < sectionsToRender.length - 1 ? (0, jsx_runtime_1.jsx)(navDivider_1.NavDivider, {}) : null] }, index))) }), footerToRender] })
|
|
145
|
+
: null, mobileBarContainer && isMobile && (0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)(navMobileBar_1.NavMobileBar, { onMenuToggle: onMobileMenuToggle, isMenuOpen: isMobileMenuOpen, children: editListItems ? editListItems : primaryItems }), mobileBarContainer)] });
|
|
134
146
|
};
|
|
135
147
|
exports.Nav = Nav;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import "./navEditList.less";
|
|
2
|
+
import { IZenComponentProps } from "../../commonHelpers/zenComponent";
|
|
3
|
+
export interface INavEditList extends IZenComponentProps {
|
|
4
|
+
onItemsChangeOrder?: (startPosition: number, endPosition: number) => void;
|
|
5
|
+
onBeforeItemDrag?: (position: number) => boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const NavEditList: ({ children, className, onItemsChangeOrder, onBeforeItemDrag }: INavEditList) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NavEditList = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const useDragAndDrop_1 = require("../../list/hooks/useDragAndDrop");
|
|
7
|
+
const classNames_1 = require("../../commonHelpers/classNames/classNames");
|
|
8
|
+
const navEditListUtils_1 = require("./navEditListUtils");
|
|
9
|
+
const marksClassNames = {
|
|
10
|
+
general: "zen-nav-edit-list__item",
|
|
11
|
+
placeholder: "zen-nav-edit-list__item--placeholder",
|
|
12
|
+
dragging: "zen-nav-edit-list__item--dragging",
|
|
13
|
+
dragged: "zen-nav-edit-list__item--dragged"
|
|
14
|
+
};
|
|
15
|
+
const NavEditList = ({ children, className, onItemsChangeOrder, onBeforeItemDrag }) => {
|
|
16
|
+
const appsListRef = (0, react_1.useRef)(null);
|
|
17
|
+
const dragHandler = onItemsChangeOrder ? onItemsChangeOrder : () => { };
|
|
18
|
+
const { onDragStart } = (0, useDragAndDrop_1.useDragAndDrop)(appsListRef, dragHandler, marksClassNames, onBeforeItemDrag);
|
|
19
|
+
const childrenArray = (0, react_1.useMemo)(() => onItemsChangeOrder ? react_1.Children.map(children, child => (0, navEditListUtils_1.attachDndHandler)(child, onDragStart)) : children, [children, onItemsChangeOrder, onDragStart]);
|
|
20
|
+
return (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-nav-edit-list", className || ""]), ref: appsListRef, children: childrenArray });
|
|
21
|
+
};
|
|
22
|
+
exports.NavEditList = NavEditList;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { PointerEvent, ReactElement } from "react";
|
|
2
|
+
import { INavActionItem } from "../navItem/navActionItem";
|
|
3
|
+
export declare const attachDndHandler: (item: ReactElement<INavActionItem>, onPointerDown: (e: PointerEvent<HTMLElement>) => void) => ReactElement<INavActionItem, string | import("react").JSXElementConstructor<any>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachDndHandler = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const navActionItem_1 = require("../navItem/navActionItem");
|
|
7
|
+
const iconGrab_1 = require("../../icons/iconGrab");
|
|
8
|
+
const attachDndHandler = (item, onPointerDown) => {
|
|
9
|
+
if (item.type === navActionItem_1.NavActionItem) {
|
|
10
|
+
return (0, react_1.cloneElement)(item, Object.assign(Object.assign({}, item.props), { startNode: (0, jsx_runtime_1.jsx)("div", { className: "zen-nav-item__dnd", onPointerDown: onPointerDown, children: (0, jsx_runtime_1.jsx)(iconGrab_1.IconGrab, { size: "large" }) }) }));
|
|
11
|
+
}
|
|
12
|
+
return item;
|
|
13
|
+
};
|
|
14
|
+
exports.attachDndHandler = attachDndHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NavEditSection = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const classNames_1 = require("../../commonHelpers/classNames/classNames");
|
|
6
|
+
const NavEditSection = ({ children, className }) => (0, jsx_runtime_1.jsx)("div", { className: (0, classNames_1.classNames)(["zen-nav-edit-section", className || ""]), children: children });
|
|
7
|
+
exports.NavEditSection = NavEditSection;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import "./navEditFooter.less";
|
|
3
|
+
import { IZenComponentProps } from "../../../commonHelpers/zenComponent";
|
|
4
|
+
/**
|
|
5
|
+
* @beta This component is not fully ready yet and may change in future releases.
|
|
6
|
+
*/
|
|
7
|
+
export interface INavEditFooter extends IZenComponentProps {
|
|
8
|
+
handleSaveClick: () => void;
|
|
9
|
+
handleCancelClick: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const NavEditFooter: React.FC<INavEditFooter>;
|