@elliemae/ds-shuttle-v2 3.14.0-next.1 → 3.14.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/DSShuttleV2.js.map +2 -2
- package/dist/cjs/config/DSShuttleV2Definitions.js.map +1 -1
- package/dist/cjs/config/itemMovementHelpers.js +99 -74
- package/dist/cjs/config/itemMovementHelpers.js.map +2 -2
- package/dist/cjs/config/useAutoCalculated/useDataStructure.js +55 -34
- package/dist/cjs/config/useAutoCalculated/useDataStructure.js.map +2 -2
- package/dist/cjs/config/useAutoCalculated/useShuttleVirtualized.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js +6 -6
- package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js +5 -5
- package/dist/cjs/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js +2 -2
- package/dist/cjs/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
- package/dist/cjs/config/useShuttleV2.js +2 -0
- package/dist/cjs/config/useShuttleV2.js.map +2 -2
- package/dist/cjs/config/useStore/createAtomInStore.bak +18 -0
- package/dist/cjs/config/useStore/useStore.js +14 -1
- package/dist/cjs/config/useStore/useStore.js.map +2 -2
- package/dist/cjs/config/{useStore/createAtomInStore.js → useValidateProps.js} +9 -13
- package/dist/cjs/config/useValidateProps.js.map +7 -0
- package/dist/cjs/constants/index.js +3 -1
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/parts/Dnd/DndHandle.js +17 -10
- package/dist/cjs/parts/Dnd/DndHandle.js.map +2 -2
- package/dist/cjs/parts/Dnd/DragOverlay.js +47 -0
- package/dist/cjs/parts/Dnd/DragOverlay.js.map +7 -0
- package/dist/cjs/parts/Header.js +5 -5
- package/dist/cjs/parts/Header.js.map +2 -2
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js +42 -17
- package/dist/cjs/parts/HoC/withConditionalDnDRowContext.js.map +3 -3
- package/dist/cjs/parts/HoC/withConditionalUseSortable.js +4 -3
- package/dist/cjs/parts/HoC/withConditionalUseSortable.js.map +2 -2
- package/dist/cjs/parts/Item/Item.js +42 -33
- package/dist/cjs/parts/Item/Item.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js +16 -14
- package/dist/cjs/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useActionsHandlers.js +8 -3
- package/dist/cjs/parts/Item/ItemActions/useActionsHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js +27 -39
- package/dist/cjs/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js +2 -2
- package/dist/cjs/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/cjs/parts/Item/ItemMiddleSection.js +21 -22
- package/dist/cjs/parts/Item/ItemMiddleSection.js.map +2 -2
- package/dist/cjs/parts/Item/ItemOverlay.js +15 -7
- package/dist/cjs/parts/Item/ItemOverlay.js.map +2 -2
- package/dist/cjs/parts/Item/ItemSelection.js +3 -1
- package/dist/cjs/parts/Item/ItemSelection.js.map +2 -2
- package/dist/cjs/parts/Item/TextSection.js +50 -0
- package/dist/cjs/parts/Item/TextSection.js.map +7 -0
- package/dist/cjs/parts/Item/useItemArrowNavigation.js +46 -20
- package/dist/cjs/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/cjs/parts/Item/useItemKeyboardSelection.js +57 -0
- package/dist/cjs/parts/Item/useItemKeyboardSelection.js.map +7 -0
- package/dist/cjs/parts/Item/useSelectionLogic.js +64 -21
- package/dist/cjs/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/cjs/parts/MainContent.js +5 -2
- package/dist/cjs/parts/MainContent.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js +3 -3
- package/dist/cjs/parts/Panel/bottom/LoadMoreBtn.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/LoadingMore.js +1 -1
- package/dist/cjs/parts/Panel/bottom/LoadingMore.js.map +2 -2
- package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js +1 -1
- package/dist/cjs/parts/Panel/bottom/PanelContentBottomSection.js.map +1 -1
- package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
- package/dist/cjs/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +25 -19
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +44 -0
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +57 -0
- package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js +30 -7
- package/dist/cjs/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js +12 -22
- package/dist/cjs/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/cjs/parts/Panel/top/SelectionHeader.js +1 -1
- package/dist/cjs/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/cjs/parts/PanelWrapper.js +8 -11
- package/dist/cjs/parts/PanelWrapper.js.map +2 -2
- package/dist/cjs/react-desc-prop-types.js +31 -14
- package/dist/cjs/react-desc-prop-types.js.map +2 -2
- package/dist/esm/DSShuttleV2.js.map +2 -2
- package/dist/esm/config/DSShuttleV2Definitions.js.map +1 -1
- package/dist/esm/config/itemMovementHelpers.js +99 -74
- package/dist/esm/config/itemMovementHelpers.js.map +2 -2
- package/dist/esm/config/useAutoCalculated/useDataStructure.js +55 -34
- package/dist/esm/config/useAutoCalculated/useDataStructure.js.map +2 -2
- package/dist/esm/config/useAutoCalculated/useShuttleVirtualized.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +6 -6
- package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusItemTracker.js +5 -5
- package/dist/esm/config/useFocusTracker/useFocusItemTracker.js.map +2 -2
- package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js +2 -2
- package/dist/esm/config/useFocusTracker/useFocusRegionTrackers.js.map +2 -2
- package/dist/esm/config/useShuttleV2.js +3 -1
- package/dist/esm/config/useShuttleV2.js.map +2 -2
- package/dist/esm/config/useStore/createAtomInStore.bak +18 -0
- package/dist/esm/config/useStore/useStore.js +14 -1
- package/dist/esm/config/useStore/useStore.js.map +2 -2
- package/dist/esm/config/useValidateProps.js +10 -0
- package/dist/esm/config/useValidateProps.js.map +7 -0
- package/dist/esm/constants/index.js +3 -1
- package/dist/esm/constants/index.js.map +2 -2
- package/dist/esm/parts/Dnd/DndHandle.js +17 -10
- package/dist/esm/parts/Dnd/DndHandle.js.map +2 -2
- package/dist/esm/parts/Dnd/DragOverlay.js +21 -0
- package/dist/esm/parts/Dnd/DragOverlay.js.map +7 -0
- package/dist/esm/parts/Header.js +4 -4
- package/dist/esm/parts/Header.js.map +2 -2
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js +43 -18
- package/dist/esm/parts/HoC/withConditionalDnDRowContext.js.map +3 -3
- package/dist/esm/parts/HoC/withConditionalUseSortable.js +4 -3
- package/dist/esm/parts/HoC/withConditionalUseSortable.js.map +2 -2
- package/dist/esm/parts/Item/Item.js +42 -33
- package/dist/esm/parts/Item/Item.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/ItemActions.js +13 -11
- package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js +8 -3
- package/dist/esm/parts/Item/ItemActions/useActionsHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js +28 -40
- package/dist/esm/parts/Item/ItemActions/useActionsLogicHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js +2 -2
- package/dist/esm/parts/Item/ItemActions/useInnerRefHandlers.js.map +2 -2
- package/dist/esm/parts/Item/ItemMiddleSection.js +20 -21
- package/dist/esm/parts/Item/ItemMiddleSection.js.map +2 -2
- package/dist/esm/parts/Item/ItemOverlay.js +15 -7
- package/dist/esm/parts/Item/ItemOverlay.js.map +2 -2
- package/dist/esm/parts/Item/ItemSelection.js +3 -1
- package/dist/esm/parts/Item/ItemSelection.js.map +2 -2
- package/dist/esm/parts/Item/TextSection.js +24 -0
- package/dist/esm/parts/Item/TextSection.js.map +7 -0
- package/dist/esm/parts/Item/useItemArrowNavigation.js +47 -21
- package/dist/esm/parts/Item/useItemArrowNavigation.js.map +2 -2
- package/dist/esm/parts/Item/useItemKeyboardSelection.js +31 -0
- package/dist/esm/parts/Item/useItemKeyboardSelection.js.map +7 -0
- package/dist/esm/parts/Item/useSelectionLogic.js +64 -21
- package/dist/esm/parts/Item/useSelectionLogic.js.map +2 -2
- package/dist/esm/parts/MainContent.js +5 -2
- package/dist/esm/parts/MainContent.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js +1 -1
- package/dist/esm/parts/Panel/bottom/LoadMoreBtn.js.map +1 -1
- package/dist/esm/parts/Panel/bottom/LoadingMore.js +1 -1
- package/dist/esm/parts/Panel/bottom/LoadingMore.js.map +2 -2
- package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js +1 -1
- package/dist/esm/parts/Panel/bottom/PanelContentBottomSection.js.map +1 -1
- package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js +4 -3
- package/dist/esm/parts/Panel/bottom/useLoadMoreBtnArrowNavigation.js.map +2 -2
- package/dist/esm/parts/Panel/middle/{ItemListWrapper.js → ItemListWrapper/Index.js} +22 -16
- package/dist/esm/parts/Panel/middle/ItemListWrapper/Index.js.map +7 -0
- package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js +18 -0
- package/dist/esm/parts/Panel/middle/ItemListWrapper/getDatumFlags.js.map +7 -0
- package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +31 -0
- package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +7 -0
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js +29 -6
- package/dist/esm/parts/Panel/middle/MultipleSelectionAction.js.map +2 -2
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js +11 -21
- package/dist/esm/parts/Panel/middle/PanelContentMiddleSection.js.map +2 -2
- package/dist/esm/parts/Panel/top/SelectionHeader.js +1 -1
- package/dist/esm/parts/Panel/top/SelectionHeader.js.map +2 -2
- package/dist/esm/parts/PanelWrapper.js +8 -11
- package/dist/esm/parts/PanelWrapper.js.map +2 -2
- package/dist/esm/react-desc-prop-types.js +32 -15
- package/dist/esm/react-desc-prop-types.js.map +2 -2
- package/package.json +13 -11
- package/dist/cjs/config/useStore/createAtomInStore.js.map +0 -7
- package/dist/cjs/parts/Panel/middle/ItemListWrapper.js.map +0 -7
- package/dist/esm/config/useStore/createAtomInStore.js +0 -14
- package/dist/esm/config/useStore/createAtomInStore.js.map +0 -7
- package/dist/esm/parts/Panel/middle/ItemListWrapper.js.map +0 -7
|
@@ -3,15 +3,15 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import React2 from "react";
|
|
4
4
|
import { styled } from "@elliemae/ds-system";
|
|
5
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
6
|
-
import { DSTypography } from "@elliemae/ds-typography";
|
|
7
6
|
import { DSShuttleV2Name, DSShuttleV2Slots } from "../../config/DSShuttleV2Definitions";
|
|
7
|
+
import { TextSection } from "./TextSection";
|
|
8
8
|
const IconWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ICON_WRAPPER })`
|
|
9
9
|
min-height: 1rem;
|
|
10
10
|
`;
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const MidSection = styled(Grid, {
|
|
12
|
+
name: DSShuttleV2Name,
|
|
13
|
+
slot: DSShuttleV2Slots.ITEM_MIDSECTION_WRAPPER
|
|
14
|
+
})`
|
|
15
15
|
min-height: 1rem;
|
|
16
16
|
${(props) => {
|
|
17
17
|
if (props.$softDeleted)
|
|
@@ -26,20 +26,19 @@ const MidSection = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.
|
|
|
26
26
|
`;
|
|
27
27
|
const customMidSectionCols = ["1fr"];
|
|
28
28
|
const customMidSectionRows = ["1fr"];
|
|
29
|
-
const withSubtitleRows = ["auto", "auto"];
|
|
30
|
-
const TextSection = React2.memo((props) => {
|
|
31
|
-
const { label, subtitle } = props.item.original;
|
|
32
|
-
if (subtitle === void 0)
|
|
33
|
-
return /* @__PURE__ */ jsx(LabelWrapper, { alignItems: "center", children: /* @__PURE__ */ jsx(DSTypography, { variant: "b1", children: label }) });
|
|
34
|
-
return /* @__PURE__ */ jsxs(Grid, { alignItems: "center", rows: withSubtitleRows, gutter: "1px", children: [
|
|
35
|
-
/* @__PURE__ */ jsx(DSTypography, { variant: "b1", children: label }),
|
|
36
|
-
/* @__PURE__ */ jsx(DSTypography, { variant: "b4", children: subtitle })
|
|
37
|
-
] });
|
|
38
|
-
});
|
|
39
29
|
const ItemMiddleSection = React2.memo((itemMeta) => {
|
|
40
|
-
const {
|
|
41
|
-
const {
|
|
42
|
-
const {
|
|
30
|
+
const { datum, datumHydratables, datumInternalMeta, isDestinationPanel, hasMultipleSelection } = itemMeta;
|
|
31
|
+
const { Icon, CustomRenderer, ...componentlessHydratables } = datumHydratables;
|
|
32
|
+
const { softDeleted, hydratedId } = datumInternalMeta;
|
|
33
|
+
const customComponentProps = React2.useMemo(
|
|
34
|
+
() => ({
|
|
35
|
+
datum,
|
|
36
|
+
panelMetaInfo: { isDestinationPanel, hasMultipleSelection },
|
|
37
|
+
datumInternalMeta,
|
|
38
|
+
datumHydratables: { ...componentlessHydratables, id: hydratedId }
|
|
39
|
+
}),
|
|
40
|
+
[componentlessHydratables, datum, datumInternalMeta, hasMultipleSelection, hydratedId, isDestinationPanel]
|
|
41
|
+
);
|
|
43
42
|
const cols = React2.useMemo(() => {
|
|
44
43
|
if (CustomRenderer)
|
|
45
44
|
return [];
|
|
@@ -50,9 +49,9 @@ const ItemMiddleSection = React2.memo((itemMeta) => {
|
|
|
50
49
|
return dynamicCols;
|
|
51
50
|
}, [CustomRenderer, Icon]);
|
|
52
51
|
if (CustomRenderer)
|
|
53
|
-
return /* @__PURE__ */ jsx(MidSection, { cols: customMidSectionCols, rows: customMidSectionRows, $softDeleted: softDeleted, children: /* @__PURE__ */ jsx(CustomRenderer, { ...
|
|
54
|
-
return /* @__PURE__ */ jsxs(MidSection, { cols, alignItems: "center", ml: "xxs", $softDeleted: softDeleted, children: [
|
|
55
|
-
Icon ? /* @__PURE__ */ jsx(IconWrapper, { alignItems: "center", mr: "xxs", children: /* @__PURE__ */ jsx(Icon, { ...
|
|
52
|
+
return /* @__PURE__ */ jsx(MidSection, { cols: customMidSectionCols, rows: customMidSectionRows, $softDeleted: Boolean(softDeleted), children: /* @__PURE__ */ jsx(CustomRenderer, { ...customComponentProps }) });
|
|
53
|
+
return /* @__PURE__ */ jsxs(MidSection, { cols, alignItems: "center", ml: "xxs", $softDeleted: Boolean(softDeleted), children: [
|
|
54
|
+
Icon ? /* @__PURE__ */ jsx(IconWrapper, { alignItems: "center", mr: "xxs", children: /* @__PURE__ */ jsx(Icon, { ...customComponentProps }) }) : null,
|
|
56
55
|
/* @__PURE__ */ jsx(TextSection, { ...itemMeta })
|
|
57
56
|
] });
|
|
58
57
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/ItemMiddleSection.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { TextSection } from './TextSection';\n\nconst IconWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_ICON_WRAPPER })`\n min-height: 1rem;\n`;\n\nconst MidSection = styled(Grid, {\n name: DSShuttleV2Name,\n slot: DSShuttleV2Slots.ITEM_MIDSECTION_WRAPPER,\n})<{ $softDeleted: boolean }>`\n min-height: 1rem;\n ${(props) => {\n if (props.$softDeleted)\n return `\n color: ${props.theme.colors.neutral[500]};\n svg {\n fill: ${props.theme.colors.neutral[400]};\n }\n `;\n return '';\n }};\n`;\nconst customMidSectionCols = ['1fr'];\nconst customMidSectionRows = ['1fr'];\n\nexport const ItemMiddleSection = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datum, datumHydratables, datumInternalMeta, isDestinationPanel, hasMultipleSelection } = itemMeta;\n const { Icon, CustomRenderer, ...componentlessHydratables } = datumHydratables;\n const { softDeleted, hydratedId } = datumInternalMeta;\n const customComponentProps = React.useMemo<DSShuttleV2T.ComponentProps>(\n () => ({\n datum,\n panelMetaInfo: { isDestinationPanel, hasMultipleSelection },\n datumInternalMeta,\n datumHydratables: { ...componentlessHydratables, id: hydratedId },\n }),\n [componentlessHydratables, datum, datumInternalMeta, hasMultipleSelection, hydratedId, isDestinationPanel],\n );\n const cols = React.useMemo(() => {\n // if CustomRenderer is defined, shortcircuit\n if (CustomRenderer) return [];\n const dynamicCols = [];\n if (Icon) dynamicCols.push('auto');\n dynamicCols.push('1fr');\n return dynamicCols;\n }, [CustomRenderer, Icon]);\n\n if (CustomRenderer)\n return (\n <MidSection cols={customMidSectionCols} rows={customMidSectionRows} $softDeleted={Boolean(softDeleted)}>\n <CustomRenderer {...customComponentProps} />\n </MidSection>\n );\n\n return (\n <MidSection cols={cols} alignItems=\"center\" ml=\"xxs\" $softDeleted={Boolean(softDeleted)}>\n {Icon ? (\n <IconWrapper alignItems=\"center\" mr=\"xxs\">\n <Icon {...customComponentProps} />\n </IconWrapper>\n ) : null}\n <TextSection {...itemMeta} />\n </MidSection>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACuDf,cAKJ,YALI;AAvDR,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AAErB,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,mBAAmB;AAE5B,MAAM,cAAc,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,kBAAkB,CAAC;AAAA;AAAA;AAIpG,MAAM,aAAa,OAAO,MAAM;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,iBAAiB;AACzB,CAAC;AAAA;AAAA,IAEG,CAAC,UAAU;AACX,MAAI,MAAM;AACR,WAAO;AAAA,eACE,MAAM,MAAM,OAAO,QAAQ;AAAA;AAAA,gBAE1B,MAAM,MAAM,OAAO,QAAQ;AAAA;AAAA;AAGvC,SAAO;AACT;AAAA;AAEF,MAAM,uBAAuB,CAAC,KAAK;AACnC,MAAM,uBAAuB,CAAC,KAAK;AAE5B,MAAM,oBAAoBA,OAAM,KAAK,CAAC,aAAoC;AAC/E,QAAM,EAAE,OAAO,kBAAkB,mBAAmB,oBAAoB,qBAAqB,IAAI;AACjG,QAAM,EAAE,MAAM,mBAAmB,yBAAyB,IAAI;AAC9D,QAAM,EAAE,aAAa,WAAW,IAAI;AACpC,QAAM,uBAAuBA,OAAM;AAAA,IACjC,OAAO;AAAA,MACL;AAAA,MACA,eAAe,EAAE,oBAAoB,qBAAqB;AAAA,MAC1D;AAAA,MACA,kBAAkB,EAAE,GAAG,0BAA0B,IAAI,WAAW;AAAA,IAClE;AAAA,IACA,CAAC,0BAA0B,OAAO,mBAAmB,sBAAsB,YAAY,kBAAkB;AAAA,EAC3G;AACA,QAAM,OAAOA,OAAM,QAAQ,MAAM;AAE/B,QAAI;AAAgB,aAAO,CAAC;AAC5B,UAAM,cAAc,CAAC;AACrB,QAAI;AAAM,kBAAY,KAAK,MAAM;AACjC,gBAAY,KAAK,KAAK;AACtB,WAAO;AAAA,EACT,GAAG,CAAC,gBAAgB,IAAI,CAAC;AAEzB,MAAI;AACF,WACE,oBAAC,cAAW,MAAM,sBAAsB,MAAM,sBAAsB,cAAc,QAAQ,WAAW,GACnG,8BAAC,kBAAgB,GAAG,sBAAsB,GAC5C;AAGJ,SACE,qBAAC,cAAW,MAAY,YAAW,UAAS,IAAG,OAAM,cAAc,QAAQ,WAAW,GACnF;AAAA,WACC,oBAAC,eAAY,YAAW,UAAS,IAAG,OAClC,8BAAC,QAAM,GAAG,sBAAsB,GAClC,IACE;AAAA,IACJ,oBAAC,eAAa,GAAG,UAAU;AAAA,KAC7B;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -5,9 +5,9 @@ import { styled } from "@elliemae/ds-system";
|
|
|
5
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
6
6
|
import { useInternalStore } from "../../config/useStore";
|
|
7
7
|
import { ItemMiddleSection } from "./ItemMiddleSection";
|
|
8
|
-
import {
|
|
8
|
+
import { DragOverlay } from "../Dnd/DragOverlay";
|
|
9
9
|
const ItemWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "item-wrapper-overlay" })`
|
|
10
|
-
min-height:
|
|
10
|
+
min-height: 2.769rem;
|
|
11
11
|
position: relative;
|
|
12
12
|
background-color: white;
|
|
13
13
|
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);
|
|
@@ -20,12 +20,20 @@ const ItemWrapper = styled(Grid, { name: "ds-shuttle-v2", slot: "item-wrapper-ov
|
|
|
20
20
|
border-bottom: 1px solid neutral-100;
|
|
21
21
|
`;
|
|
22
22
|
const ItemOverlay = React2.memo((itemMeta) => {
|
|
23
|
-
const {
|
|
24
|
-
const {
|
|
25
|
-
const
|
|
26
|
-
const
|
|
23
|
+
const { datumInternalMeta } = itemMeta;
|
|
24
|
+
const { isSelected, hydratedId } = datumInternalMeta;
|
|
25
|
+
const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
|
|
26
|
+
const isDragAndDropHappening = getIsDragAndDropHappening();
|
|
27
|
+
const dndDraggingItem = useInternalStore((state) => state.dndDraggingItem);
|
|
27
28
|
return /* @__PURE__ */ jsxs(ItemWrapper, { cols: ["auto", "auto"], alignItems: "center", role: "checkbox", "aria-checked": isSelected, children: [
|
|
28
|
-
/* @__PURE__ */ jsx(
|
|
29
|
+
/* @__PURE__ */ jsx(
|
|
30
|
+
DragOverlay,
|
|
31
|
+
{
|
|
32
|
+
id: `${hydratedId}-overlay`,
|
|
33
|
+
isDndActive: isDragAndDropHappening,
|
|
34
|
+
isDragging: dndDraggingItem?.hydratedId === hydratedId
|
|
35
|
+
}
|
|
36
|
+
),
|
|
29
37
|
/* @__PURE__ */ jsx(ItemMiddleSection, { ...itemMeta })
|
|
30
38
|
] });
|
|
31
39
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/ItemOverlay.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\n\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nimport { ItemMiddleSection } from './ItemMiddleSection';\n\nimport {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\n\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nimport { ItemMiddleSection } from './ItemMiddleSection';\n\nimport { DragOverlay } from '../Dnd/DragOverlay';\n\n// we are using the class-name added via slot for the children `:hover` styling of icon colors\n\nconst ItemWrapper = styled(Grid, { name: 'ds-shuttle-v2', slot: 'item-wrapper-overlay' })`\n min-height: 2.769rem;\n position: relative;\n background-color: white;\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);\n padding-right: 5px;\n\n &:focus {\n outline: 2px solid brand-700;\n outline-offset: -2px;\n }\n border-bottom: 1px solid neutral-100;\n`;\n\nexport const ItemOverlay = React.memo((itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumInternalMeta } = itemMeta;\n const { isSelected, hydratedId } = datumInternalMeta;\n\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n const isDragAndDropHappening = getIsDragAndDropHappening();\n const dndDraggingItem = useInternalStore((state) => state.dndDraggingItem);\n\n return (\n <ItemWrapper cols={['auto', 'auto']} alignItems=\"center\" role=\"checkbox\" aria-checked={isSelected}>\n <DragOverlay\n id={`${hydratedId}-overlay`}\n isDndActive={isDragAndDropHappening}\n isDragging={dndDraggingItem?.hydratedId === hydratedId}\n />\n <ItemMiddleSection {...itemMeta} />\n </ItemWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACoCnB,SACE,KADF;AApCJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AAEvB,SAAS,YAAY;AAErB,SAAS,wBAAwB;AAEjC,SAAS,yBAAyB;AAElC,SAAS,mBAAmB;AAI5B,MAAM,cAAc,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcjF,MAAM,cAAcA,OAAM,KAAK,CAAC,aAAoC;AACzE,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,YAAY,WAAW,IAAI;AAEnC,QAAM,4BAA4B,iBAAiB,CAAC,UAAU,MAAM,yBAAyB;AAC7F,QAAM,yBAAyB,0BAA0B;AACzD,QAAM,kBAAkB,iBAAiB,CAAC,UAAU,MAAM,eAAe;AAEzE,SACE,qBAAC,eAAY,MAAM,CAAC,QAAQ,MAAM,GAAG,YAAW,UAAS,MAAK,YAAW,gBAAc,YACrF;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG;AAAA,QACP,aAAa;AAAA,QACb,YAAY,iBAAiB,eAAe;AAAA;AAAA,IAC9C;AAAA,IACA,oBAAC,qBAAmB,GAAG,UAAU;AAAA,KACnC;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -16,7 +16,9 @@ const StyledItemSelection = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttl
|
|
|
16
16
|
return props.theme.colors.brand[300];
|
|
17
17
|
}};
|
|
18
18
|
`;
|
|
19
|
-
const ItemSelection = React2.memo(
|
|
19
|
+
const ItemSelection = React2.memo(
|
|
20
|
+
({ datumInternalMeta: { isSelected }, datumRenderFlags: { selectionPrevented } }) => /* @__PURE__ */ jsx(StyledItemSelection, { $isSelected: isSelected, $selectionPrevented: selectionPrevented })
|
|
21
|
+
);
|
|
20
22
|
export {
|
|
21
23
|
ItemSelection
|
|
22
24
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/ItemSelection.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\n\n// border-right: ${(props) => {\n// if (props.$selectionPrevented === true) return `1px solid ${props.theme.colors.neutral['200']}`;\n// return '';\n// }};\n// border-bottom: ${(props) => {\n// if (props.$selectionPrevented === true) return `1px solid ${props.theme.colors.neutral['200']}`;\n// return '';\n// }};\n\nconst StyledItemSelection = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_SELECTION })<{\n $isSelected: boolean;\n $selectionPrevented?: boolean;\n}>`\n width: 5px;\n height: 100%;\n box-sizing: border-box;\n background-color: ${(props) => {\n if (props.$isSelected) return props.theme.colors.brand[600];\n if (props.$selectionPrevented === true) return props.theme.colors.neutral['080'];\n return props.theme.colors.brand[300];\n }};\n`;\n\nexport const ItemSelection = React.memo(({
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\n\n// border-right: ${(props) => {\n// if (props.$selectionPrevented === true) return `1px solid ${props.theme.colors.neutral['200']}`;\n// return '';\n// }};\n// border-bottom: ${(props) => {\n// if (props.$selectionPrevented === true) return `1px solid ${props.theme.colors.neutral['200']}`;\n// return '';\n// }};\n\nconst StyledItemSelection = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_SELECTION })<{\n $isSelected: boolean;\n $selectionPrevented?: boolean;\n}>`\n width: 5px;\n height: 100%;\n box-sizing: border-box;\n background-color: ${(props) => {\n if (props.$isSelected) return props.theme.colors.brand[600];\n if (props.$selectionPrevented === true) return props.theme.colors.neutral['080'];\n return props.theme.colors.brand[300];\n }};\n`;\n\nexport const ItemSelection = React.memo(\n ({ datumInternalMeta: { isSelected }, datumRenderFlags: { selectionPrevented } }: DSShuttleV2T.ItemMeta) => (\n <StyledItemSelection $isSelected={isSelected} $selectionPrevented={selectionPrevented} />\n ),\n);\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC+BnB;AA/BJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AAErB,SAAS,iBAAiB,wBAAwB;AAWlD,MAAM,sBAAsB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA,sBAOnF,CAAC,UAAU;AAC7B,MAAI,MAAM;AAAa,WAAO,MAAM,MAAM,OAAO,MAAM;AACvD,MAAI,MAAM,wBAAwB;AAAM,WAAO,MAAM,MAAM,OAAO,QAAQ;AAC1E,SAAO,MAAM,MAAM,OAAO,MAAM;AAClC;AAAA;AAGK,MAAM,gBAAgBA,OAAM;AAAA,EACjC,CAAC,EAAE,mBAAmB,EAAE,WAAW,GAAG,kBAAkB,EAAE,mBAAmB,EAAE,MAC7E,oBAAC,uBAAoB,aAAa,YAAY,qBAAqB,oBAAoB;AAE3F;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React2 from "react";
|
|
4
|
+
import { Grid } from "@elliemae/ds-grid";
|
|
5
|
+
import { styled } from "@elliemae/ds-system";
|
|
6
|
+
import { DSTypography } from "@elliemae/ds-typography";
|
|
7
|
+
import { DSShuttleV2Name, DSShuttleV2Slots } from "../../config/DSShuttleV2Definitions";
|
|
8
|
+
const withSubtitleRows = ["auto", "auto"];
|
|
9
|
+
const LabelWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_LABEL_WRAPPER })`
|
|
10
|
+
min-height: 1rem;
|
|
11
|
+
`;
|
|
12
|
+
const TextSection = React2.memo((props) => {
|
|
13
|
+
const { label, subtitle } = props.datumHydratables;
|
|
14
|
+
if (subtitle === void 0)
|
|
15
|
+
return /* @__PURE__ */ jsx(LabelWrapper, { alignItems: "center", children: /* @__PURE__ */ jsx(DSTypography, { variant: "b1", children: label }) });
|
|
16
|
+
return /* @__PURE__ */ jsxs(Grid, { alignItems: "center", rows: withSubtitleRows, gutter: "1px", children: [
|
|
17
|
+
/* @__PURE__ */ jsx(DSTypography, { variant: "b1", children: label }),
|
|
18
|
+
/* @__PURE__ */ jsx(DSTypography, { variant: "b4", children: subtitle })
|
|
19
|
+
] });
|
|
20
|
+
});
|
|
21
|
+
export {
|
|
22
|
+
TextSection
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=TextSection.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/TextSection.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { styled } from '@elliemae/ds-system';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../../config/DSShuttleV2Definitions';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\n\nconst withSubtitleRows = ['auto', 'auto'];\nconst LabelWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.ITEM_LABEL_WRAPPER })`\n min-height: 1rem;\n`;\nexport const TextSection = React.memo((props: DSShuttleV2T.ItemMeta) => {\n const { label, subtitle } = props.datumHydratables;\n if (subtitle === undefined)\n return (\n <LabelWrapper alignItems=\"center\">\n <DSTypography variant=\"b1\">{label}</DSTypography>\n </LabelWrapper>\n );\n return (\n <Grid alignItems=\"center\" rows={withSubtitleRows} gutter=\"1px\">\n <DSTypography variant=\"b1\">{label}</DSTypography>\n <DSTypography variant=\"b4\">{subtitle}</DSTypography>\n </Grid>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACgBf,cAIJ,YAJI;AAhBR,OAAOA,YAAW;AAClB,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB,wBAAwB;AAGlD,MAAM,mBAAmB,CAAC,QAAQ,MAAM;AACxC,MAAM,eAAe,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,mBAAmB,CAAC;AAAA;AAAA;AAG/F,MAAM,cAAcA,OAAM,KAAK,CAAC,UAAiC;AACtE,QAAM,EAAE,OAAO,SAAS,IAAI,MAAM;AAClC,MAAI,aAAa;AACf,WACE,oBAAC,gBAAa,YAAW,UACvB,8BAAC,gBAAa,SAAQ,MAAM,iBAAM,GACpC;AAEJ,SACE,qBAAC,QAAK,YAAW,UAAS,MAAM,kBAAkB,QAAO,OACvD;AAAA,wBAAC,gBAAa,SAAQ,MAAM,iBAAM;AAAA,IAClC,oBAAC,gBAAa,SAAQ,MAAM,oBAAS;AAAA,KACvC;AAEJ,CAAC;",
|
|
6
|
+
"names": ["React"]
|
|
7
|
+
}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import React2 from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { useMakeMutable } from "@elliemae/ds-utilities";
|
|
4
|
+
import { useFocusItemTracker, useFocusActionTrackers, useFocusRegionTrackers } from "../../config/useFocusTracker";
|
|
4
5
|
import { useInternalStore } from "../../config/useStore";
|
|
5
6
|
const useItemArrowNavigation = (itemMeta) => {
|
|
6
|
-
const {
|
|
7
|
-
const {
|
|
8
|
-
const {
|
|
9
|
-
const {
|
|
10
|
-
const
|
|
7
|
+
const { trackFocusRegionPanelFocusMoveAll } = useFocusRegionTrackers();
|
|
8
|
+
const { mutableFocusItem, trackFocusPrevItem, trackFocusNextItem, trackFocusItem, trackFocusItemReset } = useFocusItemTracker();
|
|
9
|
+
const { trackFocusNextAction, trackFocusPrevAction, trackFocusActionParent, trackFocusActionReset } = useFocusActionTrackers();
|
|
10
|
+
const { datumInternalMeta, datum, hasMultipleSelection, isDestinationPanel } = itemMeta;
|
|
11
|
+
const configuredDatum = React2.useMemo(() => ({ original: datum, ...datumInternalMeta }), [datum, datumInternalMeta]);
|
|
12
|
+
const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
|
|
13
|
+
const mutableItemMeta = useMakeMutable(itemMeta);
|
|
14
|
+
const mutableInternalMeta = useMakeMutable(datumInternalMeta);
|
|
15
|
+
const mutableConfiguredDatum = useMakeMutable(configuredDatum);
|
|
11
16
|
const onItemContainerKeyDown = React2.useCallback(
|
|
12
17
|
(e) => {
|
|
13
18
|
const { key } = e;
|
|
14
|
-
|
|
19
|
+
const isDragAndDropHappening = getIsDragAndDropHappening();
|
|
20
|
+
if (isDragAndDropHappening) {
|
|
15
21
|
e.preventDefault();
|
|
16
22
|
return;
|
|
17
23
|
}
|
|
@@ -20,35 +26,55 @@ const useItemArrowNavigation = (itemMeta) => {
|
|
|
20
26
|
if (["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(key))
|
|
21
27
|
e.stopPropagation();
|
|
22
28
|
if (key === "ArrowLeft") {
|
|
23
|
-
if (
|
|
24
|
-
|
|
29
|
+
if (hasMultipleSelection) {
|
|
30
|
+
trackFocusRegionPanelFocusMoveAll(isDestinationPanel);
|
|
31
|
+
trackFocusItemReset();
|
|
32
|
+
trackFocusActionReset();
|
|
33
|
+
return;
|
|
25
34
|
}
|
|
26
|
-
trackFocusPrevAction(
|
|
35
|
+
trackFocusPrevAction(mutableItemMeta.current);
|
|
36
|
+
if (mutableFocusItem.current === "first" && mutableInternalMeta.current.isFirst || mutableFocusItem.current === "last" && mutableInternalMeta.current.isLast) {
|
|
37
|
+
trackFocusItem(mutableConfiguredDatum.current);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
27
40
|
}
|
|
28
41
|
if (key === "ArrowRight") {
|
|
29
|
-
if (
|
|
30
|
-
|
|
42
|
+
if (hasMultipleSelection) {
|
|
43
|
+
trackFocusRegionPanelFocusMoveAll(isDestinationPanel);
|
|
44
|
+
trackFocusItemReset();
|
|
45
|
+
trackFocusActionReset();
|
|
46
|
+
return;
|
|
31
47
|
}
|
|
32
|
-
trackFocusNextAction(
|
|
48
|
+
trackFocusNextAction(mutableItemMeta.current);
|
|
49
|
+
if (mutableFocusItem.current === "first" && mutableInternalMeta.current.isFirst || mutableFocusItem.current === "last" && mutableInternalMeta.current.isLast) {
|
|
50
|
+
trackFocusItem(mutableConfiguredDatum.current);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
33
53
|
}
|
|
34
54
|
if (key === "ArrowUp") {
|
|
35
|
-
trackFocusPrevItem(
|
|
55
|
+
trackFocusPrevItem(mutableItemMeta.current);
|
|
36
56
|
trackFocusActionParent();
|
|
57
|
+
return;
|
|
37
58
|
}
|
|
38
59
|
if (key === "ArrowDown") {
|
|
39
|
-
trackFocusNextItem(
|
|
60
|
+
trackFocusNextItem(mutableItemMeta.current);
|
|
40
61
|
trackFocusActionParent();
|
|
62
|
+
return;
|
|
41
63
|
}
|
|
42
64
|
},
|
|
43
65
|
[
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
isFirst,
|
|
47
|
-
isLast,
|
|
66
|
+
getIsDragAndDropHappening,
|
|
67
|
+
hasMultipleSelection,
|
|
48
68
|
trackFocusPrevAction,
|
|
49
|
-
|
|
69
|
+
mutableItemMeta,
|
|
70
|
+
mutableFocusItem,
|
|
71
|
+
mutableInternalMeta,
|
|
72
|
+
trackFocusRegionPanelFocusMoveAll,
|
|
73
|
+
isDestinationPanel,
|
|
74
|
+
trackFocusItemReset,
|
|
75
|
+
trackFocusActionReset,
|
|
50
76
|
trackFocusItem,
|
|
51
|
-
|
|
77
|
+
mutableConfiguredDatum,
|
|
52
78
|
trackFocusNextAction,
|
|
53
79
|
trackFocusPrevItem,
|
|
54
80
|
trackFocusActionParent,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/useItemArrowNavigation.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React from 'react';\nimport { useFocusItemTracker, useFocusActionTrackers } from '../../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nexport const useItemArrowNavigation = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { mutableFocusItem, trackFocusPrevItem, trackFocusNextItem, trackFocusItem }
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React from 'react';\nimport { useMakeMutable } from '@elliemae/ds-utilities';\nimport { useFocusItemTracker, useFocusActionTrackers, useFocusRegionTrackers } from '../../config/useFocusTracker';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\n\nexport const useItemArrowNavigation = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { trackFocusRegionPanelFocusMoveAll } = useFocusRegionTrackers();\n const { mutableFocusItem, trackFocusPrevItem, trackFocusNextItem, trackFocusItem, trackFocusItemReset } =\n useFocusItemTracker();\n const { trackFocusNextAction, trackFocusPrevAction, trackFocusActionParent, trackFocusActionReset } =\n useFocusActionTrackers();\n const { datumInternalMeta, datum, hasMultipleSelection, isDestinationPanel } = itemMeta;\n const configuredDatum = React.useMemo(() => ({ original: datum, ...datumInternalMeta }), [datum, datumInternalMeta]);\n\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n // some optimization to avoid useless re-renders just because the \"onKeyDown\" callback changes...\n // all the \"trackFocus\" must be optimized and memoized too for this to make any sense\n const mutableItemMeta = useMakeMutable(itemMeta);\n const mutableInternalMeta = useMakeMutable(datumInternalMeta);\n const mutableConfiguredDatum = useMakeMutable(configuredDatum);\n\n const onItemContainerKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (e) => {\n const { key } = e;\n const isDragAndDropHappening = getIsDragAndDropHappening();\n if (isDragAndDropHappening) {\n e.preventDefault();\n return;\n }\n // stopping prepagation it's required to avoid \"ArrowUp/ArrowDown\" to trigger parents logic\n // preventDefault it's just me thinking it's good idea when stopping propagation\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) e.preventDefault();\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) e.stopPropagation();\n if (key === 'ArrowLeft') {\n if (hasMultipleSelection) {\n trackFocusRegionPanelFocusMoveAll(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n return;\n }\n\n trackFocusPrevAction(mutableItemMeta.current);\n if (\n (mutableFocusItem.current === 'first' && mutableInternalMeta.current.isFirst) ||\n (mutableFocusItem.current === 'last' && mutableInternalMeta.current.isLast)\n ) {\n trackFocusItem(mutableConfiguredDatum.current);\n }\n return;\n }\n if (key === 'ArrowRight') {\n if (hasMultipleSelection) {\n trackFocusRegionPanelFocusMoveAll(isDestinationPanel);\n trackFocusItemReset();\n trackFocusActionReset();\n return;\n }\n trackFocusNextAction(mutableItemMeta.current);\n if (\n (mutableFocusItem.current === 'first' && mutableInternalMeta.current.isFirst) ||\n (mutableFocusItem.current === 'last' && mutableInternalMeta.current.isLast)\n ) {\n trackFocusItem(mutableConfiguredDatum.current);\n }\n return;\n }\n if (key === 'ArrowUp') {\n trackFocusPrevItem(mutableItemMeta.current);\n trackFocusActionParent();\n return;\n }\n if (key === 'ArrowDown') {\n trackFocusNextItem(mutableItemMeta.current);\n trackFocusActionParent();\n return;\n }\n },\n [\n getIsDragAndDropHappening,\n hasMultipleSelection,\n trackFocusPrevAction,\n mutableItemMeta,\n mutableFocusItem,\n mutableInternalMeta,\n trackFocusRegionPanelFocusMoveAll,\n isDestinationPanel,\n trackFocusItemReset,\n trackFocusActionReset,\n trackFocusItem,\n mutableConfiguredDatum,\n trackFocusNextAction,\n trackFocusPrevItem,\n trackFocusActionParent,\n trackFocusNextItem,\n ],\n );\n\n return React.useMemo(() => ({ onItemContainerKeyDown }), [onItemContainerKeyDown]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACEvB,OAAOA,YAAW;AAClB,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB,wBAAwB,8BAA8B;AAEpF,SAAS,wBAAwB;AAE1B,MAAM,yBAAyB,CAAC,aAAoC;AACzE,QAAM,EAAE,kCAAkC,IAAI,uBAAuB;AACrE,QAAM,EAAE,kBAAkB,oBAAoB,oBAAoB,gBAAgB,oBAAoB,IACpG,oBAAoB;AACtB,QAAM,EAAE,sBAAsB,sBAAsB,wBAAwB,sBAAsB,IAChG,uBAAuB;AACzB,QAAM,EAAE,mBAAmB,OAAO,sBAAsB,mBAAmB,IAAI;AAC/E,QAAM,kBAAkBA,OAAM,QAAQ,OAAO,EAAE,UAAU,OAAO,GAAG,kBAAkB,IAAI,CAAC,OAAO,iBAAiB,CAAC;AAEnH,QAAM,4BAA4B,iBAAiB,CAAC,UAAU,MAAM,yBAAyB;AAG7F,QAAM,kBAAkB,eAAe,QAAQ;AAC/C,QAAM,sBAAsB,eAAe,iBAAiB;AAC5D,QAAM,yBAAyB,eAAe,eAAe;AAE7D,QAAM,yBAAyBA,OAAM;AAAA,IACnC,CAAC,MAAM;AACL,YAAM,EAAE,IAAI,IAAI;AAChB,YAAM,yBAAyB,0BAA0B;AACzD,UAAI,wBAAwB;AAC1B,UAAE,eAAe;AACjB;AAAA,MACF;AAGA,UAAI,CAAC,WAAW,aAAa,aAAa,YAAY,EAAE,SAAS,GAAG;AAAG,UAAE,eAAe;AACxF,UAAI,CAAC,WAAW,aAAa,aAAa,YAAY,EAAE,SAAS,GAAG;AAAG,UAAE,gBAAgB;AACzF,UAAI,QAAQ,aAAa;AACvB,YAAI,sBAAsB;AACxB,4CAAkC,kBAAkB;AACpD,8BAAoB;AACpB,gCAAsB;AACtB;AAAA,QACF;AAEA,6BAAqB,gBAAgB,OAAO;AAC5C,YACG,iBAAiB,YAAY,WAAW,oBAAoB,QAAQ,WACpE,iBAAiB,YAAY,UAAU,oBAAoB,QAAQ,QACpE;AACA,yBAAe,uBAAuB,OAAO;AAAA,QAC/C;AACA;AAAA,MACF;AACA,UAAI,QAAQ,cAAc;AACxB,YAAI,sBAAsB;AACxB,4CAAkC,kBAAkB;AACpD,8BAAoB;AACpB,gCAAsB;AACtB;AAAA,QACF;AACA,6BAAqB,gBAAgB,OAAO;AAC5C,YACG,iBAAiB,YAAY,WAAW,oBAAoB,QAAQ,WACpE,iBAAiB,YAAY,UAAU,oBAAoB,QAAQ,QACpE;AACA,yBAAe,uBAAuB,OAAO;AAAA,QAC/C;AACA;AAAA,MACF;AACA,UAAI,QAAQ,WAAW;AACrB,2BAAmB,gBAAgB,OAAO;AAC1C,+BAAuB;AACvB;AAAA,MACF;AACA,UAAI,QAAQ,aAAa;AACvB,2BAAmB,gBAAgB,OAAO;AAC1C,+BAAuB;AACvB;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAOA,OAAM,QAAQ,OAAO,EAAE,uBAAuB,IAAI,CAAC,sBAAsB,CAAC;AACnF;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import React2 from "react";
|
|
3
|
+
import { useInternalStore } from "../../config/useStore";
|
|
4
|
+
import { useSelectionLogic } from "./useSelectionLogic";
|
|
5
|
+
const useItemKeyboardSelection = (itemMeta) => {
|
|
6
|
+
const { datumInternalMeta } = itemMeta;
|
|
7
|
+
const { hydratedId } = datumInternalMeta;
|
|
8
|
+
const { selectItem } = useSelectionLogic(itemMeta);
|
|
9
|
+
const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);
|
|
10
|
+
const onItemKeyDownSelection = React2.useCallback(
|
|
11
|
+
(event) => {
|
|
12
|
+
const { key } = event;
|
|
13
|
+
if (["Spacebar", " ", "Enter"].includes(key)) {
|
|
14
|
+
const isDragNDroping = getIsDragAndDropHappening();
|
|
15
|
+
if (isDragNDroping || event.target.id === `${hydratedId}-drag-handle`) {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
event.preventDefault();
|
|
20
|
+
event.stopPropagation();
|
|
21
|
+
selectItem(event);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
[getIsDragAndDropHappening, hydratedId, selectItem]
|
|
25
|
+
);
|
|
26
|
+
return React2.useMemo(() => ({ onItemKeyDownSelection }), [onItemKeyDownSelection]);
|
|
27
|
+
};
|
|
28
|
+
export {
|
|
29
|
+
useItemKeyboardSelection
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=useItemKeyboardSelection.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/useItemKeyboardSelection.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useInternalStore } from '../../config/useStore';\nimport { useSelectionLogic } from './useSelectionLogic';\n\nexport const useItemKeyboardSelection = (itemMeta: DSShuttleV2T.ItemMeta) => {\n const { datumInternalMeta } = itemMeta;\n const { hydratedId } = datumInternalMeta;\n const { selectItem } = useSelectionLogic(itemMeta);\n const getIsDragAndDropHappening = useInternalStore((state) => state.getIsDragAndDropHappening);\n const onItemKeyDownSelection = React.useCallback<React.KeyboardEventHandler<HTMLDivElement>>(\n (event) => {\n const { key } = event;\n\n // Spacebar AND ' ' are cross-browser compatibility thing\n if (['Spacebar', ' ', 'Enter'].includes(key)) {\n // we need to invoke \"getIsDragAndDropHappening\" here to ensure we have the latest info at the moment of the event\n const isDragNDroping = getIsDragAndDropHappening();\n if (isDragNDroping || (event.target as HTMLElement).id === `${hydratedId}-drag-handle`) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n selectItem(event);\n }\n },\n [getIsDragAndDropHappening, hydratedId, selectItem],\n );\n return React.useMemo(() => ({ onItemKeyDownSelection }), [onItemKeyDownSelection]);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,OAAOA,YAAW;AAElB,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAE3B,MAAM,2BAA2B,CAAC,aAAoC;AAC3E,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,WAAW,IAAI;AACvB,QAAM,EAAE,WAAW,IAAI,kBAAkB,QAAQ;AACjD,QAAM,4BAA4B,iBAAiB,CAAC,UAAU,MAAM,yBAAyB;AAC7F,QAAM,yBAAyBA,OAAM;AAAA,IACnC,CAAC,UAAU;AACT,YAAM,EAAE,IAAI,IAAI;AAGhB,UAAI,CAAC,YAAY,KAAK,OAAO,EAAE,SAAS,GAAG,GAAG;AAE5C,cAAM,iBAAiB,0BAA0B;AACjD,YAAI,kBAAmB,MAAM,OAAuB,OAAO,GAAG,0BAA0B;AACtF,gBAAM,eAAe;AACrB;AAAA,QACF;AACA,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,2BAA2B,YAAY,UAAU;AAAA,EACpD;AACA,SAAOA,OAAM,QAAQ,OAAO,EAAE,uBAAuB,IAAI,CAAC,sBAAsB,CAAC;AACnF;",
|
|
6
|
+
"names": ["React"]
|
|
7
|
+
}
|
|
@@ -2,13 +2,22 @@ import * as React from "react";
|
|
|
2
2
|
import React2 from "react";
|
|
3
3
|
import { useInternalStore, usePropsStore } from "../../config/useStore";
|
|
4
4
|
import { useFocusItemTracker, useFocusActionTrackers, useFocusTracker } from "../../config/useFocusTracker";
|
|
5
|
-
const useSelectionLogic = ({
|
|
5
|
+
const useSelectionLogic = ({
|
|
6
|
+
isDestinationPanel,
|
|
7
|
+
datumInternalMeta,
|
|
8
|
+
datum,
|
|
9
|
+
datumRenderFlags
|
|
10
|
+
}) => {
|
|
6
11
|
const { trackFocusItem } = useFocusItemTracker();
|
|
7
12
|
const { trackFocusActionParent } = useFocusActionTrackers();
|
|
8
13
|
const { trackFocusRegionPanelItem } = useFocusTracker();
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
14
|
+
const getPanelLastSelectedItem = useInternalStore((store) => store.getPanelLastSelectedItem);
|
|
15
|
+
const setPanelLastSelectedItem = useInternalStore(
|
|
16
|
+
(store) => isDestinationPanel ? store.setDestinationLastSelectedItem : store.setSourceLastSelectedItem
|
|
17
|
+
);
|
|
18
|
+
const panelSelectionableDataIds = useInternalStore(
|
|
19
|
+
(store) => isDestinationPanel ? store.destinationSelectionableDataIds : store.sourceSelectionableDataIds
|
|
20
|
+
);
|
|
12
21
|
const onSelectionChange = usePropsStore(
|
|
13
22
|
(state) => isDestinationPanel ? state.onDestinationSelectionChange : state.onSourceSelectionChange
|
|
14
23
|
);
|
|
@@ -17,37 +26,71 @@ const useSelectionLogic = ({ item, isDestinationPanel }) => {
|
|
|
17
26
|
);
|
|
18
27
|
const selectItem = React2.useCallback(
|
|
19
28
|
(event) => {
|
|
20
|
-
const { selectionPrevented
|
|
21
|
-
const {
|
|
29
|
+
const { selectionPrevented } = datumRenderFlags;
|
|
30
|
+
const { hydratedId } = datumInternalMeta;
|
|
31
|
+
const { shiftKey } = event;
|
|
32
|
+
const lastSelectedItem = getPanelLastSelectedItem(isDestinationPanel);
|
|
22
33
|
if (!selectionPrevented) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
let newSelection = {};
|
|
35
|
+
if (shiftKey && lastSelectedItem) {
|
|
36
|
+
const startSelIndx = panelSelectionableDataIds.findIndex((id) => id === lastSelectedItem);
|
|
37
|
+
const endSelIndx = panelSelectionableDataIds.findIndex((id) => id === hydratedId);
|
|
38
|
+
if (startSelIndx !== -1 && endSelIndx !== -1) {
|
|
39
|
+
const ordererIndexes = [startSelIndx, endSelIndx].sort();
|
|
40
|
+
const shiftSelectedIdsArray = panelSelectionableDataIds.slice(ordererIndexes[0], ordererIndexes[1] + 1);
|
|
41
|
+
let shouldShiftDeSelect = true;
|
|
42
|
+
const allSelected = {};
|
|
43
|
+
const allDeSelected = {};
|
|
44
|
+
shiftSelectedIdsArray.forEach((id) => {
|
|
45
|
+
allSelected[id] = true;
|
|
46
|
+
allDeSelected[id] = false;
|
|
47
|
+
if (panelSelectedItems[id] !== true)
|
|
48
|
+
shouldShiftDeSelect = false;
|
|
49
|
+
});
|
|
50
|
+
if (shouldShiftDeSelect)
|
|
51
|
+
newSelection = { ...panelSelectedItems, ...allDeSelected };
|
|
52
|
+
else
|
|
53
|
+
newSelection = { ...panelSelectedItems, ...allSelected };
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
newSelection = { ...panelSelectedItems };
|
|
57
|
+
const isAddition = newSelection[hydratedId] !== true;
|
|
58
|
+
if (isAddition) {
|
|
59
|
+
newSelection[hydratedId] = true;
|
|
60
|
+
} else
|
|
61
|
+
delete newSelection[hydratedId];
|
|
62
|
+
}
|
|
63
|
+
setPanelLastSelectedItem(hydratedId);
|
|
64
|
+
onSelectionChange(newSelection, { event, item: datum });
|
|
34
65
|
}
|
|
35
66
|
trackFocusRegionPanelItem(isDestinationPanel);
|
|
36
|
-
trackFocusItem(
|
|
67
|
+
trackFocusItem({ original: datum, ...datumInternalMeta });
|
|
37
68
|
trackFocusActionParent();
|
|
38
69
|
},
|
|
39
70
|
[
|
|
71
|
+
datum,
|
|
72
|
+
datumInternalMeta,
|
|
73
|
+
datumRenderFlags,
|
|
74
|
+
getPanelLastSelectedItem,
|
|
40
75
|
isDestinationPanel,
|
|
41
|
-
item,
|
|
42
76
|
onSelectionChange,
|
|
43
77
|
panelSelectedItems,
|
|
44
|
-
|
|
78
|
+
panelSelectionableDataIds,
|
|
79
|
+
setPanelLastSelectedItem,
|
|
45
80
|
trackFocusActionParent,
|
|
46
81
|
trackFocusItem,
|
|
47
82
|
trackFocusRegionPanelItem
|
|
48
83
|
]
|
|
49
84
|
);
|
|
50
|
-
|
|
85
|
+
const onShiftMouseDownPreventTextSelection = React2.useCallback((event) => {
|
|
86
|
+
const { shiftKey } = event;
|
|
87
|
+
if (shiftKey)
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
}, []);
|
|
90
|
+
return React2.useMemo(
|
|
91
|
+
() => ({ selectItem, onShiftMouseDownPreventTextSelection }),
|
|
92
|
+
[selectItem, onShiftMouseDownPreventTextSelection]
|
|
93
|
+
);
|
|
51
94
|
};
|
|
52
95
|
export {
|
|
53
96
|
useSelectionLogic
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/Item/useSelectionLogic.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport React from 'react';\nimport { useInternalStore, usePropsStore } from '../../config/useStore';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\nimport { useFocusItemTracker, useFocusActionTrackers, useFocusTracker } from '../../config/useFocusTracker';\nexport const useSelectionLogic = ({\n isDestinationPanel,\n datumInternalMeta,\n datum,\n datumRenderFlags,\n}: DSShuttleV2T.ItemMeta) => {\n const { trackFocusItem } = useFocusItemTracker();\n const { trackFocusActionParent } = useFocusActionTrackers();\n const { trackFocusRegionPanelItem } = useFocusTracker();\n\n const getPanelLastSelectedItem = useInternalStore((store) => store.getPanelLastSelectedItem);\n const setPanelLastSelectedItem = useInternalStore((store) =>\n isDestinationPanel ? store.setDestinationLastSelectedItem : store.setSourceLastSelectedItem,\n );\n\n const panelSelectionableDataIds = useInternalStore((store) =>\n isDestinationPanel ? store.destinationSelectionableDataIds : store.sourceSelectionableDataIds,\n );\n\n const onSelectionChange = usePropsStore((state) =>\n isDestinationPanel ? state.onDestinationSelectionChange : state.onSourceSelectionChange,\n );\n const panelSelectedItems = usePropsStore((state) =>\n isDestinationPanel ? state.destinationSelectedItems : state.sourceSelectedItems,\n );\n const selectItem = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement | HTMLButtonElement>) => {\n const { selectionPrevented } = datumRenderFlags;\n const { hydratedId } = datumInternalMeta;\n const { shiftKey } = event;\n const lastSelectedItem = getPanelLastSelectedItem(isDestinationPanel);\n if (!selectionPrevented) {\n let newSelection: Record<string, boolean> = {};\n // shift select logic\n if (shiftKey && lastSelectedItem) {\n const startSelIndx = panelSelectionableDataIds.findIndex((id) => id === lastSelectedItem);\n const endSelIndx = panelSelectionableDataIds.findIndex((id) => id === hydratedId);\n if (startSelIndx !== -1 && endSelIndx !== -1) {\n const ordererIndexes = [startSelIndx, endSelIndx].sort();\n const shiftSelectedIdsArray = panelSelectionableDataIds.slice(ordererIndexes[0], ordererIndexes[1] + 1);\n let shouldShiftDeSelect = true;\n // I track both \"all Select\"/\"all unselect\" so I can \".forEach\" only once and apply either version after\n const allSelected: Record<string, boolean> = {};\n const allDeSelected: Record<string, boolean> = {};\n shiftSelectedIdsArray.forEach((id) => {\n allSelected[id] = true;\n allDeSelected[id] = false;\n // if anything inside the shift-select was not selected, shift-select will \"select\"\n if (panelSelectedItems[id] !== true) shouldShiftDeSelect = false;\n });\n if (shouldShiftDeSelect) newSelection = { ...panelSelectedItems, ...allDeSelected };\n else newSelection = { ...panelSelectedItems, ...allSelected };\n }\n } else {\n // single selection logic\n newSelection = { ...panelSelectedItems };\n const isAddition = newSelection[hydratedId] !== true;\n if (isAddition) {\n newSelection[hydratedId] = true;\n } else delete newSelection[hydratedId];\n }\n // we track the item for \"shift select\" purposes\n // this must happen AFTER shift select logic!\n setPanelLastSelectedItem(hydratedId);\n onSelectionChange(newSelection, { event, item: datum });\n }\n // focus tracking logic\n trackFocusRegionPanelItem(isDestinationPanel);\n trackFocusItem({ original: datum, ...datumInternalMeta });\n trackFocusActionParent();\n },\n [\n datum,\n datumInternalMeta,\n datumRenderFlags,\n getPanelLastSelectedItem,\n isDestinationPanel,\n onSelectionChange,\n panelSelectedItems,\n panelSelectionableDataIds,\n setPanelLastSelectedItem,\n trackFocusActionParent,\n trackFocusItem,\n trackFocusRegionPanelItem,\n ],\n );\n\n const onShiftMouseDownPreventTextSelection = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const { shiftKey } = event;\n if (shiftKey) event.preventDefault();\n }, []);\n return React.useMemo(\n () => ({ selectItem, onShiftMouseDownPreventTextSelection }),\n [selectItem, onShiftMouseDownPreventTextSelection],\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB,OAAOA,YAAW;AAClB,SAAS,kBAAkB,qBAAqB;AAEhD,SAAS,qBAAqB,wBAAwB,uBAAuB;AACtE,MAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,QAAM,EAAE,eAAe,IAAI,oBAAoB;AAC/C,QAAM,EAAE,uBAAuB,IAAI,uBAAuB;AAC1D,QAAM,EAAE,0BAA0B,IAAI,gBAAgB;AAEtD,QAAM,2BAA2B,iBAAiB,CAAC,UAAU,MAAM,wBAAwB;AAC3F,QAAM,2BAA2B;AAAA,IAAiB,CAAC,UACjD,qBAAqB,MAAM,iCAAiC,MAAM;AAAA,EACpE;AAEA,QAAM,4BAA4B;AAAA,IAAiB,CAAC,UAClD,qBAAqB,MAAM,kCAAkC,MAAM;AAAA,EACrE;AAEA,QAAM,oBAAoB;AAAA,IAAc,CAAC,UACvC,qBAAqB,MAAM,+BAA+B,MAAM;AAAA,EAClE;AACA,QAAM,qBAAqB;AAAA,IAAc,CAAC,UACxC,qBAAqB,MAAM,2BAA2B,MAAM;AAAA,EAC9D;AACA,QAAM,aAAaA,OAAM;AAAA,IACvB,CAAC,UAAsG;AACrG,YAAM,EAAE,mBAAmB,IAAI;AAC/B,YAAM,EAAE,WAAW,IAAI;AACvB,YAAM,EAAE,SAAS,IAAI;AACrB,YAAM,mBAAmB,yBAAyB,kBAAkB;AACpE,UAAI,CAAC,oBAAoB;AACvB,YAAI,eAAwC,CAAC;AAE7C,YAAI,YAAY,kBAAkB;AAChC,gBAAM,eAAe,0BAA0B,UAAU,CAAC,OAAO,OAAO,gBAAgB;AACxF,gBAAM,aAAa,0BAA0B,UAAU,CAAC,OAAO,OAAO,UAAU;AAChF,cAAI,iBAAiB,MAAM,eAAe,IAAI;AAC5C,kBAAM,iBAAiB,CAAC,cAAc,UAAU,EAAE,KAAK;AACvD,kBAAM,wBAAwB,0BAA0B,MAAM,eAAe,IAAI,eAAe,KAAK,CAAC;AACtG,gBAAI,sBAAsB;AAE1B,kBAAM,cAAuC,CAAC;AAC9C,kBAAM,gBAAyC,CAAC;AAChD,kCAAsB,QAAQ,CAAC,OAAO;AACpC,0BAAY,MAAM;AAClB,4BAAc,MAAM;AAEpB,kBAAI,mBAAmB,QAAQ;AAAM,sCAAsB;AAAA,YAC7D,CAAC;AACD,gBAAI;AAAqB,6BAAe,EAAE,GAAG,oBAAoB,GAAG,cAAc;AAAA;AAC7E,6BAAe,EAAE,GAAG,oBAAoB,GAAG,YAAY;AAAA,UAC9D;AAAA,QACF,OAAO;AAEL,yBAAe,EAAE,GAAG,mBAAmB;AACvC,gBAAM,aAAa,aAAa,gBAAgB;AAChD,cAAI,YAAY;AACd,yBAAa,cAAc;AAAA,UAC7B;AAAO,mBAAO,aAAa;AAAA,QAC7B;AAGA,iCAAyB,UAAU;AACnC,0BAAkB,cAAc,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,MACxD;AAEA,gCAA0B,kBAAkB;AAC5C,qBAAe,EAAE,UAAU,OAAO,GAAG,kBAAkB,CAAC;AACxD,6BAAuB;AAAA,IACzB;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,uCAAuCA,OAAM,YAAY,CAAC,UAA4C;AAC1G,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI;AAAU,YAAM,eAAe;AAAA,EACrC,GAAG,CAAC,CAAC;AACL,SAAOA,OAAM;AAAA,IACX,OAAO,EAAE,YAAY,qCAAqC;AAAA,IAC1D,CAAC,YAAY,oCAAoC;AAAA,EACnD;AACF;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -5,6 +5,7 @@ import { styled } from "@elliemae/ds-system";
|
|
|
5
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
6
6
|
import { useOnBlurOut } from "@elliemae/ds-utilities";
|
|
7
7
|
import { PanelWrapper } from "./PanelWrapper";
|
|
8
|
+
import { useInternalStore } from "../config/useStore";
|
|
8
9
|
import { DSShuttleV2Name, DSShuttleV2Slots } from "../config/DSShuttleV2Definitions";
|
|
9
10
|
import { useFocusTracker } from "../config/useFocusTracker";
|
|
10
11
|
const StyledWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.WRAPPER })`
|
|
@@ -25,9 +26,11 @@ const MainContent = React2.memo(() => {
|
|
|
25
26
|
[trackFocusActionReset, trackFocusItemReset, trackFocusRegionReset]
|
|
26
27
|
);
|
|
27
28
|
const handleOnBlurOut = useOnBlurOut(config);
|
|
29
|
+
const destinationHasMultipleSelectedItems = useInternalStore((store) => store.destinationHasMultipleSelectedItems);
|
|
30
|
+
const sourceHasMultipleSelectedItems = useInternalStore((store) => store.sourceHasMultipleSelectedItems);
|
|
28
31
|
return /* @__PURE__ */ jsxs(StyledWrapper, { cols: mainContentCols, gutter: "xs", p: "xs", onBlur: handleOnBlurOut, children: [
|
|
29
|
-
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: false }),
|
|
30
|
-
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: true })
|
|
32
|
+
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: false, hasMultipleSelection: sourceHasMultipleSelectedItems }),
|
|
33
|
+
/* @__PURE__ */ jsx(PanelWrapper, { isDestinationPanel: true, hasMultipleSelection: destinationHasMultipleSelectedItems })
|
|
31
34
|
] });
|
|
32
35
|
});
|
|
33
36
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/MainContent.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { useOnBlurOut } from '@elliemae/ds-utilities';\nimport { PanelWrapper } from './PanelWrapper';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../config/DSShuttleV2Definitions';\nimport { useFocusTracker } from '../config/useFocusTracker';\n\nconst StyledWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.WRAPPER })`\n min-width: 648px;\n min-height: 296px;\n`;\nconst mainContentCols = ['1fr', '1fr'];\n\nexport const MainContent = React.memo(() => {\n const { trackFocusRegionReset, trackFocusItemReset, trackFocusActionReset } = useFocusTracker();\n const config = React.useMemo(\n () => ({\n onBlur: () => {\n trackFocusRegionReset();\n trackFocusItemReset();\n trackFocusActionReset();\n },\n }),\n [trackFocusActionReset, trackFocusItemReset, trackFocusRegionReset],\n );\n const handleOnBlurOut = useOnBlurOut(config);\n return (\n <StyledWrapper cols={mainContentCols} gutter=\"xs\" p=\"xs\" onBlur={handleOnBlurOut}>\n <PanelWrapper isDestinationPanel={false} />\n <PanelWrapper isDestinationPanel />\n </StyledWrapper>\n );\n});\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { useOnBlurOut } from '@elliemae/ds-utilities';\nimport { PanelWrapper } from './PanelWrapper';\nimport { useInternalStore } from '../config/useStore';\nimport { DSShuttleV2Name, DSShuttleV2Slots } from '../config/DSShuttleV2Definitions';\nimport { useFocusTracker } from '../config/useFocusTracker';\n\nconst StyledWrapper = styled(Grid, { name: DSShuttleV2Name, slot: DSShuttleV2Slots.WRAPPER })`\n min-width: 648px;\n min-height: 296px;\n`;\nconst mainContentCols = ['1fr', '1fr'];\n\nexport const MainContent = React.memo(() => {\n const { trackFocusRegionReset, trackFocusItemReset, trackFocusActionReset } = useFocusTracker();\n const config = React.useMemo(\n () => ({\n onBlur: () => {\n trackFocusRegionReset();\n trackFocusItemReset();\n trackFocusActionReset();\n },\n }),\n [trackFocusActionReset, trackFocusItemReset, trackFocusRegionReset],\n );\n const handleOnBlurOut = useOnBlurOut(config);\n const destinationHasMultipleSelectedItems = useInternalStore((store) => store.destinationHasMultipleSelectedItems);\n const sourceHasMultipleSelectedItems = useInternalStore((store) => store.sourceHasMultipleSelectedItems);\n\n return (\n <StyledWrapper cols={mainContentCols} gutter=\"xs\" p=\"xs\" onBlur={handleOnBlurOut}>\n <PanelWrapper isDestinationPanel={false} hasMultipleSelection={sourceHasMultipleSelectedItems} />\n <PanelWrapper isDestinationPanel hasMultipleSelection={destinationHasMultipleSelectedItems} />\n </StyledWrapper>\n );\n});\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACgCnB,SACE,KADF;AAhCJ,OAAOA,YAAW;AAClB,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,uBAAuB;AAEhC,MAAM,gBAAgB,OAAO,MAAM,EAAE,MAAM,iBAAiB,MAAM,iBAAiB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAI5F,MAAM,kBAAkB,CAAC,OAAO,KAAK;AAE9B,MAAM,cAAcA,OAAM,KAAK,MAAM;AAC1C,QAAM,EAAE,uBAAuB,qBAAqB,sBAAsB,IAAI,gBAAgB;AAC9F,QAAM,SAASA,OAAM;AAAA,IACnB,OAAO;AAAA,MACL,QAAQ,MAAM;AACZ,8BAAsB;AACtB,4BAAoB;AACpB,8BAAsB;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,uBAAuB,qBAAqB,qBAAqB;AAAA,EACpE;AACA,QAAM,kBAAkB,aAAa,MAAM;AAC3C,QAAM,sCAAsC,iBAAiB,CAAC,UAAU,MAAM,mCAAmC;AACjH,QAAM,iCAAiC,iBAAiB,CAAC,UAAU,MAAM,8BAA8B;AAEvG,SACE,qBAAC,iBAAc,MAAM,iBAAiB,QAAO,MAAK,GAAE,MAAK,QAAQ,iBAC/D;AAAA,wBAAC,gBAAa,oBAAoB,OAAO,sBAAsB,gCAAgC;AAAA,IAC/F,oBAAC,gBAAa,oBAAkB,MAAC,sBAAsB,qCAAqC;AAAA,KAC9F;AAEJ,CAAC;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|