@elliemae/ds-shuttle-v2 3.15.0-rc.2 → 3.16.0-next.1

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.
Files changed (41) hide show
  1. package/dist/cjs/config/useAutoCalculated/useDataStructure.js +25 -6
  2. package/dist/cjs/config/useAutoCalculated/useDataStructure.js.map +2 -2
  3. package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js +4 -4
  4. package/dist/cjs/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
  5. package/dist/cjs/config/useStore/focusAndTabIndexManager.js.map +1 -1
  6. package/dist/cjs/config/useStore/useStore.js.map +2 -2
  7. package/dist/cjs/parts/Item/Item.js +6 -2
  8. package/dist/cjs/parts/Item/Item.js.map +2 -2
  9. package/dist/cjs/parts/Item/ItemActions/ItemActions.js +3 -3
  10. package/dist/cjs/parts/Item/ItemActions/ItemActions.js.map +2 -2
  11. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +3 -4
  12. package/dist/cjs/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +2 -2
  13. package/dist/cjs/react-desc-prop-types.js +52 -2
  14. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  15. package/dist/esm/config/useAutoCalculated/useDataStructure.js +25 -6
  16. package/dist/esm/config/useAutoCalculated/useDataStructure.js.map +2 -2
  17. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js +4 -4
  18. package/dist/esm/config/useFocusTracker/useFocusActionTrackers.js.map +2 -2
  19. package/dist/esm/config/useStore/focusAndTabIndexManager.js.map +1 -1
  20. package/dist/esm/config/useStore/useStore.js.map +2 -2
  21. package/dist/esm/parts/Item/Item.js +6 -2
  22. package/dist/esm/parts/Item/Item.js.map +2 -2
  23. package/dist/esm/parts/Item/ItemActions/ItemActions.js +3 -3
  24. package/dist/esm/parts/Item/ItemActions/ItemActions.js.map +2 -2
  25. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js +3 -4
  26. package/dist/esm/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.js.map +2 -2
  27. package/dist/esm/react-desc-prop-types.js +52 -2
  28. package/dist/esm/react-desc-prop-types.js.map +2 -2
  29. package/dist/types/config/useFocusTracker/useFocusActionTrackers.d.ts +2 -2
  30. package/dist/types/config/useFocusTracker/useFocusTracker.d.ts +2 -2
  31. package/dist/types/config/useStore/focusAndTabIndexManager.d.ts +5 -5
  32. package/dist/types/config/useStore/useStore.d.ts +12 -13
  33. package/dist/types/parts/Item/ItemActions/useActionsHandlers.d.ts +2 -2
  34. package/dist/types/parts/Panel/middle/ItemListWrapper/useGetDatumHydratables.d.ts +1 -1
  35. package/dist/types/react-desc-prop-types.d.ts +35 -4
  36. package/package.json +15 -15
  37. package/dist/cjs/config/useStore/types.js +0 -24
  38. package/dist/cjs/config/useStore/types.js.map +0 -7
  39. package/dist/esm/config/useStore/types.js +0 -2
  40. package/dist/esm/config/useStore/types.js.map +0 -7
  41. package/dist/types/config/useStore/types.d.ts +0 -28
@@ -30,7 +30,8 @@ const defaultProps = {
30
30
  },
31
31
  destinationSoftDeletedItems: {},
32
32
  onDestinationSoftDelete: () => {
33
- }
33
+ },
34
+ getPreventMove: () => false
34
35
  };
35
36
  const DSShuttleV2PropTypes = {
36
37
  ...globalAttributesPropTypes,
@@ -46,7 +47,56 @@ const DSShuttleV2PropTypes = {
46
47
  DestinationHeader: PropTypes.node.description("hello!").isRequired,
47
48
  onDestinationDrilldown: PropTypes.func.description("hello!").isRequired,
48
49
  getId: PropTypes.func.description("hello!").isRequired,
49
- getLabel: PropTypes.func.description("hello!").isRequired
50
+ getLabel: PropTypes.func.description("hello!").isRequired,
51
+ sourceIsLoading: PropTypes.bool.description("hello!").defaultValue(false),
52
+ destinationIsLoading: PropTypes.bool.description("hello!").defaultValue(false),
53
+ sourceWithLoadMore: PropTypes.bool.description("hello!").defaultValue(false),
54
+ destinationWithLoadMore: PropTypes.bool.description("hello!").defaultValue(false),
55
+ sourceIsLoadingMore: PropTypes.bool.description("hello!").defaultValue(false),
56
+ destinationIsLoadingMore: PropTypes.bool.description("hello!").defaultValue(false),
57
+ onSourceLoadMore: PropTypes.func.description("hello!").defaultValue(() => {
58
+ }),
59
+ onDestinationLoadMore: PropTypes.func.description("hello!").defaultValue(() => {
60
+ }),
61
+ onSourceAdd: PropTypes.func.description("hello!").defaultValue(() => {
62
+ }),
63
+ onDestinationAdd: PropTypes.func.description("hello!").defaultValue(() => {
64
+ }),
65
+ onSourceRemove: PropTypes.func.description("hello!").defaultValue(() => {
66
+ }),
67
+ onDestinationRemove: PropTypes.func.description("hello!").defaultValue(() => {
68
+ }),
69
+ onSourceReorder: PropTypes.func.description("hello!").defaultValue(() => {
70
+ }),
71
+ onDestinationReorder: PropTypes.func.description("hello!").defaultValue(() => {
72
+ }),
73
+ sourceSoftDeletedItems: PropTypes.object.description("hello!").defaultValue({}),
74
+ onSourceSoftDelete: PropTypes.func.description("hello!").defaultValue(() => {
75
+ }),
76
+ destinationSoftDeletedItems: PropTypes.object.description("hello!").defaultValue({}),
77
+ onDestinationSoftDelete: PropTypes.func.description("hello!").defaultValue(() => {
78
+ }),
79
+ getPreventMove: PropTypes.func.description("hello!").defaultValue(() => false),
80
+ addDragAndDropFromSource: PropTypes.bool.description("hello!").defaultValue(false),
81
+ removeDragAndDropFromDestination: PropTypes.bool.description("hello!").defaultValue(false),
82
+ sourceItemProps: PropTypes.object.description("hello!").defaultValue({}),
83
+ destinationItemProps: PropTypes.object.description("hello!").defaultValue({}),
84
+ sourceShowSearchbar: PropTypes.bool.description("hello!").defaultValue(false),
85
+ destinationShowSearchbar: PropTypes.bool.description("hello!").defaultValue(false),
86
+ onSourceOpenSearchbar: PropTypes.func.description("hello!").defaultValue(() => {
87
+ }),
88
+ onDesinationOpenSearchbar: PropTypes.func.description("hello!").defaultValue(() => {
89
+ }),
90
+ sourceFilterValue: PropTypes.string.description("hello!").defaultValue(""),
91
+ destinationFilterValue: PropTypes.string.description("hello!").defaultValue(""),
92
+ onSourceFilterChange: PropTypes.func.description("hello!").defaultValue(() => {
93
+ }),
94
+ onDestinationFilterChange: PropTypes.func.description("hello!").defaultValue(() => {
95
+ }),
96
+ getSubtitle: PropTypes.func.description("hello!").defaultValue(() => ""),
97
+ getIcon: PropTypes.func.description("hello!").defaultValue(() => ""),
98
+ getPreventDrilldown: PropTypes.func.description("hello!").defaultValue(() => false),
99
+ getCustomRenderer: PropTypes.func.description("hello!").defaultValue(() => void 0)
50
100
  };
51
101
  const DSShuttleV2PropTypesSchema = DSShuttleV2PropTypes;
52
102
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/react-desc-prop-types.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport type { WeakValidationMap } from 'react';\nimport type React from 'react';\nimport type { GlobalAttributesT, XstyledProps, DSPropTypesSchema } from '@elliemae/ds-utilities';\nimport { PropTypes, globalAttributesPropTypes, xstyledPropTypes } from '@elliemae/ds-utilities';\nimport { type DSControlledCheckboxT } from '@elliemae/ds-form-checkbox';\nimport { type DSButtonT } from '@elliemae/ds-button-v2';\nimport { type useSortable, type DnDKitTree } from '@elliemae/ds-drag-and-drop';\n\nexport declare namespace DSShuttleV2T {\n export type Datum = Record<string, unknown>;\n export type PanelMetaInfo = { isDestinationPanel: boolean; hasMultipleSelection: boolean };\n type HydratedId = string;\n\n export type DatumInternalMeta = {\n isFirst: boolean;\n isLast: boolean;\n isSelected: boolean;\n softDeleted: boolean;\n localIndex: number;\n hydratedId: HydratedId;\n };\n export type DatumRenderFlags = {\n selectionPrevented: boolean;\n withActions: boolean;\n withMoveBtn: boolean;\n withDrilldownBtn: boolean;\n internallyDisabledMove: boolean;\n internallyDisabledDrilldown: boolean;\n };\n\n // =============================================================================\n // Hydratables section\n // Component-less\n // =============================================================================\n export type PrimaryKeyHydratables = {\n id: HydratedId;\n };\n type RequiredDatumHydratablesWithoutComponents = {\n label: string;\n };\n type OptionalDatumHydratablesWithoutComponents = {\n subtitle?: string;\n preventDrilldown?: boolean;\n preventMove?: boolean;\n };\n type DatumHydratablesWithoutComponents = PrimaryKeyHydratables &\n RequiredDatumHydratablesWithoutComponents &\n OptionalDatumHydratablesWithoutComponents;\n // =============================================================================\n // Hydratables section\n // Component-only\n // =============================================================================\n export type ComponentProps = {\n datum: Datum;\n panelMetaInfo: PanelMetaInfo;\n datumInternalMeta: DatumInternalMeta;\n datumHydratables: DatumHydratablesWithoutComponents;\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n type RequiredDatumHydratablesComponents = {};\n type OptionalDatumHydratablesComponents = {\n Icon?: React.ComponentType<ComponentProps>;\n CustomRenderer?: React.ComponentType<ComponentProps>;\n };\n // =============================================================================\n // Hydratables section\n // Finals\n // =============================================================================\n type RequiredDatumHydratables = RequiredDatumHydratablesWithoutComponents & RequiredDatumHydratablesComponents;\n type OptionalDatumHydratables = OptionalDatumHydratablesWithoutComponents & OptionalDatumHydratablesComponents;\n export type DatumHydratables = RequiredDatumHydratables & OptionalDatumHydratables;\n\n // =============================================================================\n // Hydraters\n // =============================================================================\n export type PrimaryKeyHydraters = Hydraters<PrimaryKeyHydratables, [Datum]>;\n type HydratersMeta = { datumMeta: DatumInternalMeta; panelMetaInfo: PanelMetaInfo };\n type RequiredDatumHydraters = Hydraters<RequiredDatumHydratables, [Datum, HydratersMeta]>;\n type OptionalDatumHydraters = Hydraters<OptionalDatumHydratables, [Datum, HydratersMeta]>;\n\n type DatumHydraters = PrimaryKeyHydraters & RequiredDatumHydraters & OptionalDatumHydraters;\n\n // =============================================================================\n // Datum & Internals structures\n // =============================================================================\n export type ConfiguredDatum = DatumInternalMeta & { original: Datum };\n export interface ItemMeta extends PanelMetaInfo {\n datum: Datum;\n datumHydratables: DatumHydratables;\n datumInternalMeta: DatumInternalMeta;\n datumRenderFlags: DatumRenderFlags;\n withDragNDrop: boolean;\n useSortableHelpers?: ReturnType<typeof useSortable>;\n }\n\n // =============================================================================\n // Callbacks\n // =============================================================================\n type OnDataChange = (\n newData: Datum[],\n metainfo: {\n event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n item?: Datum;\n selectedItems?: Datum[];\n },\n ) => void;\n\n type OnChangeEvent = (\n items: Datum[],\n metainfo: {\n event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n },\n ) => void;\n\n type OnReorderEventMetadata = Omit<DnDKitTree.OnReorder<DSShuttleV2T.Datum>, 'considerExpanding'>;\n type OnReorderEvent = (movedItem: Datum, metadata: OnReorderEventMetadata) => void;\n\n export type SelectionMap = Record<string, boolean>;\n type OnSelectionChange = (\n newSelection: SelectionMap,\n metainfo: {\n event:\n | Parameters<Required<DSButtonT.Props>['onClick']>[0]\n | Parameters<DSControlledCheckboxT.InternalProps['onChange']>[1]\n | React.MouseEvent<HTMLButtonElement | HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>\n | React.ChangeEvent<HTMLInputElement>;\n item?: Datum;\n },\n ) => void;\n type OnSelectionDrilldown = (\n item: Datum,\n metainfo: { event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement> },\n ) => void;\n\n type OnLoadMore = (e: Parameters<Required<DSButtonT.Props>['onClick']>[0]) => void;\n type OnFilterChange = (\n newfilter: string | null,\n metainfo: { event: React.ChangeEvent<HTMLInputElement> | React.MouseEvent<HTMLButtonElement> },\n ) => void;\n type OnSearchbarOpen = (\n newfilter: boolean,\n metainfo: { event: Parameters<Required<DSButtonT.Props>['onClick']>[0] },\n ) => void;\n\n export type SoftDeletedMap = Record<string, boolean>;\n type OnSoftDeletedChange = (\n newSoftDeleted: SoftDeletedMap,\n metainfo: {\n event:\n | Parameters<Required<DSButtonT.Props>['onClick']>[0]\n | Parameters<DSControlledCheckboxT.InternalProps['onChange']>[1]\n | React.MouseEvent<HTMLButtonElement | HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>\n | React.ChangeEvent<HTMLInputElement>;\n item?: Datum;\n },\n ) => void;\n // =============================================================================\n // Final Props\n // =============================================================================\n export interface RequiredProps extends RequiredDatumHydraters, PrimaryKeyHydraters {\n sourceData: Datum[];\n sourceSelectedItems: SelectionMap;\n onSourceSelectionChange: OnSelectionChange;\n SourceHeader: React.ComponentType<unknown>;\n onSourceDrilldown: OnSelectionDrilldown;\n\n destinationData: Datum[];\n destinationSelectedItems: SelectionMap;\n onDestinationSelectionChange: OnSelectionChange;\n DestinationHeader: React.ComponentType<unknown>;\n onDestinationDrilldown: OnSelectionDrilldown;\n }\n\n export interface DefaultProps {\n // load-more and loaders\n sourceIsLoading: boolean;\n sourceWithLoadMore: boolean;\n sourceIsLoadingMore: boolean;\n onSourceLoadMore: OnLoadMore;\n destinationIsLoading: boolean;\n destinationWithLoadMore: boolean;\n destinationIsLoadingMore: boolean;\n onDestinationLoadMore: OnLoadMore;\n\n // switch side\n onSourceAdd: OnChangeEvent;\n onSourceRemove: OnChangeEvent;\n onDestinationAdd: OnChangeEvent;\n onDestinationRemove: OnChangeEvent;\n\n // dnd\n addDragAndDropFromSource: boolean;\n removeDragAndDropFromDestination: boolean;\n onSourceReorder: OnReorderEvent;\n onDestinationReorder: OnReorderEvent;\n\n // soft delete\n sourceSoftDeletedItems: SoftDeletedMap;\n onSourceSoftDelete: OnSoftDeletedChange;\n destinationSoftDeletedItems: SoftDeletedMap;\n onDestinationSoftDelete: OnSoftDeletedChange;\n }\n\n export interface OptionalProps extends OptionalDatumHydraters {\n sourceItemProps?: Record<string, unknown>;\n destinationItemProps?: Record<string, unknown>;\n\n // filtering\n sourceShowSearchbar?: boolean;\n destinationShowSearchbar?: boolean;\n onSourceOpenSearchbar?: OnSearchbarOpen;\n onDesinationOpenSearchbar?: OnSearchbarOpen;\n\n sourceFilterValue?: string;\n destinationFilterValue?: string;\n onSourceFilterChange?: OnFilterChange;\n onDestinationFilterChange?: OnFilterChange;\n }\n\n export interface Props\n extends Partial<DefaultProps>,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps | keyof RequiredProps>,\n XstyledProps,\n RequiredProps {}\n\n export interface InternalProps\n extends DefaultProps,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps | keyof RequiredProps>,\n XstyledProps,\n RequiredProps {}\n}\n\nexport const defaultProps: DSShuttleV2T.DefaultProps = {\n addDragAndDropFromSource: false,\n removeDragAndDropFromDestination: false,\n\n sourceIsLoading: false,\n destinationIsLoading: false,\n sourceWithLoadMore: false,\n destinationWithLoadMore: false,\n sourceIsLoadingMore: false,\n destinationIsLoadingMore: false,\n onSourceLoadMore: () => {},\n onDestinationLoadMore: () => {},\n\n onSourceAdd: () => {},\n onDestinationAdd: () => {},\n onSourceRemove: () => {},\n onDestinationRemove: () => {},\n onSourceReorder: () => {},\n onDestinationReorder: () => {},\n\n sourceSoftDeletedItems: {},\n onSourceSoftDelete: () => {},\n destinationSoftDeletedItems: {},\n onDestinationSoftDelete: () => {},\n};\n\nconst DSShuttleV2PropTypes: DSPropTypesSchema<DSShuttleV2T.Props> = {\n ...globalAttributesPropTypes,\n ...xstyledPropTypes,\n\n sourceData: PropTypes.arrayOf(PropTypes.object).description('hello!').isRequired,\n sourceSelectedItems: PropTypes.object.description('hello!').isRequired,\n onSourceSelectionChange: PropTypes.func.description('hello!').isRequired,\n SourceHeader: PropTypes.node.description('hello!').isRequired,\n onSourceDrilldown: PropTypes.func.description('hello!').isRequired,\n\n destinationData: PropTypes.arrayOf(PropTypes.object).description('hello!').isRequired,\n destinationSelectedItems: PropTypes.object.description('hello!').isRequired,\n onDestinationSelectionChange: PropTypes.func.description('hello!').isRequired,\n DestinationHeader: PropTypes.node.description('hello!').isRequired,\n onDestinationDrilldown: PropTypes.func.description('hello!').isRequired,\n\n getId: PropTypes.func.description('hello!').isRequired,\n getLabel: PropTypes.func.description('hello!').isRequired,\n};\nexport const DSShuttleV2PropTypesSchema = DSShuttleV2PropTypes as unknown as WeakValidationMap<DSShuttleV2T.Props>;\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACIvB,SAAS,WAAW,2BAA2B,wBAAwB;AAyOhE,MAAM,eAA0C;AAAA,EACrD,0BAA0B;AAAA,EAC1B,kCAAkC;AAAA,EAElC,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,uBAAuB,MAAM;AAAA,EAAC;AAAA,EAE9B,aAAa,MAAM;AAAA,EAAC;AAAA,EACpB,kBAAkB,MAAM;AAAA,EAAC;AAAA,EACzB,gBAAgB,MAAM;AAAA,EAAC;AAAA,EACvB,qBAAqB,MAAM;AAAA,EAAC;AAAA,EAC5B,iBAAiB,MAAM;AAAA,EAAC;AAAA,EACxB,sBAAsB,MAAM;AAAA,EAAC;AAAA,EAE7B,wBAAwB,CAAC;AAAA,EACzB,oBAAoB,MAAM;AAAA,EAAC;AAAA,EAC3B,6BAA6B,CAAC;AAAA,EAC9B,yBAAyB,MAAM;AAAA,EAAC;AAClC;AAEA,MAAM,uBAA8D;AAAA,EAClE,GAAG;AAAA,EACH,GAAG;AAAA,EAEH,YAAY,UAAU,QAAQ,UAAU,MAAM,EAAE,YAAY,QAAQ,EAAE;AAAA,EACtE,qBAAqB,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,EAC5D,yBAAyB,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EAC9D,cAAc,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EACnD,mBAAmB,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EAExD,iBAAiB,UAAU,QAAQ,UAAU,MAAM,EAAE,YAAY,QAAQ,EAAE;AAAA,EAC3E,0BAA0B,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,EACjE,8BAA8B,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EACnE,mBAAmB,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EACxD,wBAAwB,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EAE7D,OAAO,UAAU,KAAK,YAAY,QAAQ,EAAE;AAAA,EAC5C,UAAU,UAAU,KAAK,YAAY,QAAQ,EAAE;AACjD;AACO,MAAM,6BAA6B;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport type { WeakValidationMap } from 'react';\nimport type React from 'react';\nimport type { GlobalAttributesT, XstyledProps, DSPropTypesSchema } from '@elliemae/ds-utilities';\nimport { PropTypes, globalAttributesPropTypes, xstyledPropTypes } from '@elliemae/ds-utilities';\nimport { type DSControlledCheckboxT } from '@elliemae/ds-form-checkbox';\nimport { type DSButtonT } from '@elliemae/ds-button-v2';\nimport { type useSortable, type DnDKitTree } from '@elliemae/ds-drag-and-drop';\nimport type { ZustandT } from '@elliemae/ds-zustand-helpers';\n\nimport type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from './constants';\nimport type { useAutoCalculated } from './config/useAutoCalculated';\n\nexport declare namespace DSShuttleV2T {\n export type Datum = Record<string, unknown>;\n export type PanelMetaInfo = { isDestinationPanel: boolean; hasMultipleSelection: boolean };\n type HydratedId = string;\n\n export type DatumInternalMeta = {\n isFirst: boolean;\n isLast: boolean;\n isSelected: boolean;\n softDeleted: boolean;\n localIndex: number;\n hydratedId: HydratedId;\n hydratedPreventMove: boolean;\n };\n export type DatumRenderFlags = {\n selectionPrevented: boolean;\n withActions: boolean;\n withMoveBtn: boolean;\n withDrilldownBtn: boolean;\n internallyDisabledMove: boolean;\n internallyDisabledDrilldown: boolean;\n };\n\n // =============================================================================\n // Hydratables section\n // Component-less\n // =============================================================================\n export type PrimaryKeyHydratables = {\n id: HydratedId;\n };\n type FunctionalHydratables = {\n preventMove?: boolean;\n };\n type RequiredDatumHydratablesWithoutComponents = {\n label: string;\n };\n type OptionalDatumHydratablesWithoutComponents = {\n subtitle?: string;\n preventDrilldown?: boolean;\n };\n type DatumHydratablesWithoutComponents = PrimaryKeyHydratables &\n FunctionalHydratables &\n RequiredDatumHydratablesWithoutComponents &\n OptionalDatumHydratablesWithoutComponents;\n // =============================================================================\n // Hydratables section\n // Component-only\n // =============================================================================\n export type ComponentProps = {\n datum: Datum;\n panelMetaInfo: PanelMetaInfo;\n datumInternalMeta: DatumInternalMeta;\n datumHydratables: DatumHydratablesWithoutComponents;\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n type RequiredDatumHydratablesComponents = {};\n type OptionalDatumHydratablesComponents = {\n Icon?: React.ComponentType<ComponentProps>;\n CustomRenderer?: React.ComponentType<ComponentProps>;\n };\n // =============================================================================\n // Hydratables section\n // Finals\n // =============================================================================\n type RequiredDatumHydratables = RequiredDatumHydratablesWithoutComponents & RequiredDatumHydratablesComponents;\n type OptionalDatumHydratables = OptionalDatumHydratablesWithoutComponents & OptionalDatumHydratablesComponents;\n export type DatumHydratables = RequiredDatumHydratables & OptionalDatumHydratables;\n\n // =============================================================================\n // Hydraters\n // =============================================================================\n export type PrimaryKeyHydraters = Hydraters<PrimaryKeyHydratables, [Datum]>;\n export type FunctionalHydraters = Hydraters<FunctionalHydratables, [Datum]>;\n type HydratersMeta = { datumMeta: DatumInternalMeta; panelMetaInfo: PanelMetaInfo };\n type RequiredDatumHydraters = Hydraters<RequiredDatumHydratables, [Datum, HydratersMeta]>;\n type OptionalDatumHydraters = Hydraters<OptionalDatumHydratables, [Datum, HydratersMeta]>;\n\n type DatumHydraters = PrimaryKeyHydraters & FunctionalHydraters & RequiredDatumHydraters & OptionalDatumHydraters;\n\n // =============================================================================\n // Datum & Internals structures\n // =============================================================================\n export type ConfiguredDatum = DatumInternalMeta & { original: Datum };\n export interface ItemMeta extends PanelMetaInfo {\n datum: Datum;\n datumHydratables: DatumHydratables;\n datumInternalMeta: DatumInternalMeta;\n datumRenderFlags: DatumRenderFlags;\n withDragNDrop: boolean;\n useSortableHelpers?: ReturnType<typeof useSortable>;\n }\n\n // =============================================================================\n // Callbacks\n // =============================================================================\n type OnDataChange = (\n newData: Datum[],\n metainfo: {\n event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n item?: Datum;\n selectedItems?: Datum[];\n },\n ) => void;\n\n type OnChangeEvent = (\n items: Datum[],\n metainfo: {\n event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n },\n ) => void;\n\n type OnReorderEventMetadata = Omit<DnDKitTree.OnReorder<DSShuttleV2T.Datum>, 'considerExpanding'>;\n type OnReorderEvent = (movedItem: Datum, metadata: OnReorderEventMetadata) => void;\n\n export type SelectionMap = Record<string, boolean>;\n type OnSelectionChange = (\n newSelection: SelectionMap,\n metainfo: {\n event:\n | Parameters<Required<DSButtonT.Props>['onClick']>[0]\n | Parameters<DSControlledCheckboxT.InternalProps['onChange']>[1]\n | React.MouseEvent<HTMLButtonElement | HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>\n | React.ChangeEvent<HTMLInputElement>;\n item?: Datum;\n },\n ) => void;\n type OnSelectionDrilldown = (\n item: Datum,\n metainfo: { event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement> },\n ) => void;\n\n type OnLoadMore = (e: Parameters<Required<DSButtonT.Props>['onClick']>[0]) => void;\n type OnFilterChange = (\n newfilter: string | null,\n metainfo: { event: React.ChangeEvent<HTMLInputElement> | React.MouseEvent<HTMLButtonElement> },\n ) => void;\n type OnSearchbarOpen = (\n newfilter: boolean,\n metainfo: { event: Parameters<Required<DSButtonT.Props>['onClick']>[0] },\n ) => void;\n\n export type SoftDeletedMap = Record<string, boolean>;\n type OnSoftDeletedChange = (\n newSoftDeleted: SoftDeletedMap,\n metainfo: {\n event:\n | Parameters<Required<DSButtonT.Props>['onClick']>[0]\n | Parameters<DSControlledCheckboxT.InternalProps['onChange']>[1]\n | React.MouseEvent<HTMLButtonElement | HTMLDivElement>\n | React.KeyboardEvent<HTMLDivElement>\n | React.ChangeEvent<HTMLInputElement>;\n item?: Datum;\n },\n ) => void;\n // =============================================================================\n // Zustand Store\n // =============================================================================\n export type FocusRegion = (typeof REGIONS_FOCUSES)[keyof typeof REGIONS_FOCUSES];\n export type FocusItem = Omit<(typeof ITEMS_FOCUSES)[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;\n export type FocusItemAction = (typeof ACTIONS_FOCUSES)[keyof typeof ACTIONS_FOCUSES];\n export type InternalAtoms = {\n focusRegion: FocusRegion;\n focusItem: FocusItem;\n focusItemAction: FocusItemAction;\n shouldFocusItemOnRender: boolean;\n dropIndicatorPosition: number;\n overId: string;\n dndDraggingItem: ConfiguredDatum | null;\n dndDraggingItemMeta: ItemMeta | null;\n lastActiveId: string;\n isDropValid: boolean;\n sourcePanelLastSelectedItem: string | null | undefined;\n destinationPanelLastSelectedItem: string | null | undefined;\n };\n export type UseAutoCalculatedT = ReturnType<typeof useAutoCalculated>;\n export type Selectors = {\n getIsDragAndDropHappening: () => boolean;\n getPanelLastSelectedItem: (isDestinationPanel: boolean) => string | null | undefined;\n };\n export type Reducers = Record<string, never>;\n export type ShuttleInternalStore = ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;\n // =============================================================================\n // Final Props\n // =============================================================================\n export interface RequiredProps extends RequiredDatumHydraters, PrimaryKeyHydraters {\n sourceData: Datum[];\n sourceSelectedItems: SelectionMap;\n onSourceSelectionChange: OnSelectionChange;\n SourceHeader: React.ComponentType<unknown>;\n onSourceDrilldown: OnSelectionDrilldown;\n\n destinationData: Datum[];\n destinationSelectedItems: SelectionMap;\n onDestinationSelectionChange: OnSelectionChange;\n DestinationHeader: React.ComponentType<unknown>;\n onDestinationDrilldown: OnSelectionDrilldown;\n }\n\n export interface DefaultProps extends Required<FunctionalHydraters> {\n // load-more and loaders\n sourceIsLoading: boolean;\n sourceWithLoadMore: boolean;\n sourceIsLoadingMore: boolean;\n onSourceLoadMore: OnLoadMore;\n destinationIsLoading: boolean;\n destinationWithLoadMore: boolean;\n destinationIsLoadingMore: boolean;\n onDestinationLoadMore: OnLoadMore;\n\n // switch side\n onSourceAdd: OnChangeEvent;\n onSourceRemove: OnChangeEvent;\n onDestinationAdd: OnChangeEvent;\n onDestinationRemove: OnChangeEvent;\n\n // dnd\n addDragAndDropFromSource: boolean;\n removeDragAndDropFromDestination: boolean;\n onSourceReorder: OnReorderEvent;\n onDestinationReorder: OnReorderEvent;\n\n // soft delete\n sourceSoftDeletedItems: SoftDeletedMap;\n onSourceSoftDelete: OnSoftDeletedChange;\n destinationSoftDeletedItems: SoftDeletedMap;\n onDestinationSoftDelete: OnSoftDeletedChange;\n }\n\n export interface OptionalProps extends OptionalDatumHydraters {\n sourceItemProps?: Record<string, unknown>;\n destinationItemProps?: Record<string, unknown>;\n\n // filtering\n sourceShowSearchbar?: boolean;\n destinationShowSearchbar?: boolean;\n onSourceOpenSearchbar?: OnSearchbarOpen;\n onDesinationOpenSearchbar?: OnSearchbarOpen;\n\n sourceFilterValue?: string;\n destinationFilterValue?: string;\n onSourceFilterChange?: OnFilterChange;\n onDestinationFilterChange?: OnFilterChange;\n }\n\n export interface Props\n extends Partial<DefaultProps>,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps | keyof RequiredProps>,\n XstyledProps,\n RequiredProps {}\n\n export interface InternalProps\n extends DefaultProps,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLButtonElement>, keyof DefaultProps | keyof OptionalProps | keyof RequiredProps>,\n XstyledProps,\n RequiredProps {}\n}\n\nexport const defaultProps: DSShuttleV2T.DefaultProps = {\n addDragAndDropFromSource: false,\n removeDragAndDropFromDestination: false,\n\n sourceIsLoading: false,\n destinationIsLoading: false,\n sourceWithLoadMore: false,\n destinationWithLoadMore: false,\n sourceIsLoadingMore: false,\n destinationIsLoadingMore: false,\n onSourceLoadMore: () => {},\n onDestinationLoadMore: () => {},\n\n onSourceAdd: () => {},\n onDestinationAdd: () => {},\n onSourceRemove: () => {},\n onDestinationRemove: () => {},\n onSourceReorder: () => {},\n onDestinationReorder: () => {},\n\n sourceSoftDeletedItems: {},\n onSourceSoftDelete: () => {},\n destinationSoftDeletedItems: {},\n onDestinationSoftDelete: () => {},\n\n getPreventMove: () => false,\n};\n\nconst DSShuttleV2PropTypes: DSPropTypesSchema<DSShuttleV2T.Props> = {\n ...globalAttributesPropTypes,\n ...xstyledPropTypes,\n\n sourceData: PropTypes.arrayOf(PropTypes.object).description('hello!').isRequired,\n sourceSelectedItems: PropTypes.object.description('hello!').isRequired,\n onSourceSelectionChange: PropTypes.func.description('hello!').isRequired,\n SourceHeader: PropTypes.node.description('hello!').isRequired,\n onSourceDrilldown: PropTypes.func.description('hello!').isRequired,\n\n destinationData: PropTypes.arrayOf(PropTypes.object).description('hello!').isRequired,\n destinationSelectedItems: PropTypes.object.description('hello!').isRequired,\n onDestinationSelectionChange: PropTypes.func.description('hello!').isRequired,\n DestinationHeader: PropTypes.node.description('hello!').isRequired,\n onDestinationDrilldown: PropTypes.func.description('hello!').isRequired,\n\n getId: PropTypes.func.description('hello!').isRequired,\n getLabel: PropTypes.func.description('hello!').isRequired,\n\n sourceIsLoading: PropTypes.bool.description('hello!').defaultValue(false),\n destinationIsLoading: PropTypes.bool.description('hello!').defaultValue(false),\n sourceWithLoadMore: PropTypes.bool.description('hello!').defaultValue(false),\n destinationWithLoadMore: PropTypes.bool.description('hello!').defaultValue(false),\n sourceIsLoadingMore: PropTypes.bool.description('hello!').defaultValue(false),\n destinationIsLoadingMore: PropTypes.bool.description('hello!').defaultValue(false),\n onSourceLoadMore: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDestinationLoadMore: PropTypes.func.description('hello!').defaultValue(() => {}),\n onSourceAdd: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDestinationAdd: PropTypes.func.description('hello!').defaultValue(() => {}),\n onSourceRemove: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDestinationRemove: PropTypes.func.description('hello!').defaultValue(() => {}),\n onSourceReorder: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDestinationReorder: PropTypes.func.description('hello!').defaultValue(() => {}),\n sourceSoftDeletedItems: PropTypes.object.description('hello!').defaultValue({}),\n onSourceSoftDelete: PropTypes.func.description('hello!').defaultValue(() => {}),\n destinationSoftDeletedItems: PropTypes.object.description('hello!').defaultValue({}),\n onDestinationSoftDelete: PropTypes.func.description('hello!').defaultValue(() => {}),\n getPreventMove: PropTypes.func.description('hello!').defaultValue(() => false),\n\n addDragAndDropFromSource: PropTypes.bool.description('hello!').defaultValue(false),\n removeDragAndDropFromDestination: PropTypes.bool.description('hello!').defaultValue(false),\n\n sourceItemProps: PropTypes.object.description('hello!').defaultValue({}),\n destinationItemProps: PropTypes.object.description('hello!').defaultValue({}),\n\n sourceShowSearchbar: PropTypes.bool.description('hello!').defaultValue(false),\n destinationShowSearchbar: PropTypes.bool.description('hello!').defaultValue(false),\n onSourceOpenSearchbar: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDesinationOpenSearchbar: PropTypes.func.description('hello!').defaultValue(() => {}),\n sourceFilterValue: PropTypes.string.description('hello!').defaultValue(''),\n destinationFilterValue: PropTypes.string.description('hello!').defaultValue(''),\n onSourceFilterChange: PropTypes.func.description('hello!').defaultValue(() => {}),\n onDestinationFilterChange: PropTypes.func.description('hello!').defaultValue(() => {}),\n\n getSubtitle: PropTypes.func.description('hello!').defaultValue(() => ''),\n getIcon: PropTypes.func.description('hello!').defaultValue(() => ''),\n getPreventDrilldown: PropTypes.func.description('hello!').defaultValue(() => false),\n\n getCustomRenderer: PropTypes.func.description('hello!').defaultValue(() => undefined),\n};\n\nexport const DSShuttleV2PropTypesSchema = DSShuttleV2PropTypes as unknown as WeakValidationMap<DSShuttleV2T.Props>;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,6 @@ export declare const useFocusActionTrackers: () => {
5
5
  trackFocusActionDragAndDrop: () => void;
6
6
  trackFocusActionParent: () => void;
7
7
  trackFocusActionReset: () => void;
8
- trackFocusPrevAction: ({ isDestinationPanel, datumHydratables }: DSShuttleV2T.ItemMeta) => void;
9
- trackFocusNextAction: ({ isDestinationPanel, datumHydratables }: DSShuttleV2T.ItemMeta) => void;
8
+ trackFocusPrevAction: ({ isDestinationPanel, datumHydratables, datumInternalMeta: { hydratedPreventMove } }: DSShuttleV2T.ItemMeta) => void;
9
+ trackFocusNextAction: ({ isDestinationPanel, datumHydratables, datumInternalMeta: { hydratedPreventMove } }: DSShuttleV2T.ItemMeta) => void;
10
10
  };
@@ -4,8 +4,8 @@ export declare const useFocusTracker: () => {
4
4
  trackFocusActionDragAndDrop: () => void;
5
5
  trackFocusActionParent: () => void;
6
6
  trackFocusActionReset: () => void;
7
- trackFocusPrevAction: ({ isDestinationPanel, datumHydratables }: import("../../react-desc-prop-types").DSShuttleV2T.ItemMeta) => void;
8
- trackFocusNextAction: ({ isDestinationPanel, datumHydratables }: import("../../react-desc-prop-types").DSShuttleV2T.ItemMeta) => void;
7
+ trackFocusPrevAction: ({ isDestinationPanel, datumHydratables, datumInternalMeta: { hydratedPreventMove } }: import("../../react-desc-prop-types").DSShuttleV2T.ItemMeta) => void;
8
+ trackFocusNextAction: ({ isDestinationPanel, datumHydratables, datumInternalMeta: { hydratedPreventMove } }: import("../../react-desc-prop-types").DSShuttleV2T.ItemMeta) => void;
9
9
  trackFocusItem: (item: import("../../react-desc-prop-types").DSShuttleV2T.ConfiguredDatum) => void;
10
10
  trackFocusItemReset: () => void;
11
11
  trackFocusItemFirst: ({ isDestinationPanel }: import("../../react-desc-prop-types").DSShuttleV2T.PanelMetaInfo) => void;
@@ -1,10 +1,10 @@
1
- import type { FocusItem, FocusItemAction, FocusRegion, InternalAtoms, Reducers, Selectors } from './types';
1
+ import { type DSShuttleV2T } from '../../react-desc-prop-types';
2
2
  import type { ZustandT } from '@elliemae/ds-zustand-helpers';
3
3
  type State = readonly [
4
- FocusRegion,
5
- FocusItem,
6
- FocusItemAction,
7
- () => ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>
4
+ DSShuttleV2T.FocusRegion,
5
+ DSShuttleV2T.FocusItem,
6
+ DSShuttleV2T.FocusItemAction,
7
+ () => ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>
8
8
  ];
9
9
  export declare const focusAndTabIndexManager: (selectedState: State, previousSelectedState: State) => void;
10
10
  export {};
@@ -1,7 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { type ZustandT } from '@elliemae/ds-zustand-helpers';
3
3
  import { type DSShuttleV2T } from '../../react-desc-prop-types';
4
- import type { InternalAtoms, ShuttleInternalStore, Selectors, Reducers } from './types';
5
4
  export declare const PropsProvider: ({ createStore, children, }: {
6
5
  createStore: () => ZustandT.ZustandStore<ZustandT.PropsStore<DSShuttleV2T.InternalProps & {
7
6
  sourceVirtualItems: import("react-virtual").VirtualItem[];
@@ -149,15 +148,15 @@ export declare const PropsProvider: ({ createStore, children, }: {
149
148
  sourceSelectionableIds: string;
150
149
  }>) => U, equalityFn?: ((a: U, b: U) => boolean) | undefined): U;
151
150
  }, InternalProvider: ({ createStore, children, }: {
152
- createStore: () => ZustandT.ZustandStore<ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>>;
151
+ createStore: () => ZustandT.ZustandStore<ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>>;
153
152
  children: import("react").ReactNode;
154
- }) => import("react").FunctionComponentElement<import("react").ProviderProps<ZustandT.ZustandStore<ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>> | undefined>>, useInternalStore: {
155
- (): ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;
156
- <U_1>(selector: (state: ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>) => U_1, equalityFn?: ((a: U_1, b: U_1) => boolean) | undefined): U_1;
153
+ }) => import("react").FunctionComponentElement<import("react").ProviderProps<ZustandT.ZustandStore<ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>> | undefined>>, useInternalStore: {
154
+ (): ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>;
155
+ <U_1>(selector: (state: ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>) => U_1, equalityFn?: ((a: U_1, b: U_1) => boolean) | undefined): U_1;
157
156
  };
158
157
  export declare const config: {
159
158
  defaultProps: DSShuttleV2T.InternalProps;
160
- internalAtomDefaultValues: InternalAtoms;
159
+ internalAtomDefaultValues: DSShuttleV2T.InternalAtoms;
161
160
  useAutoCalculated: (propsWithDefaults: DSShuttleV2T.InternalProps) => {
162
161
  sourceVirtualItems: import("react-virtual").VirtualItem[];
163
162
  sourceTotalSize: number;
@@ -194,9 +193,9 @@ export declare const config: {
194
193
  sourceSelectionableDataIds: string[];
195
194
  sourceSelectionableIds: string;
196
195
  };
197
- selectors: ZustandT.SelectorObject<ShuttleInternalStore, Selectors>;
198
- reducers: ZustandT.ReducerObject<ShuttleInternalStore, Reducers>;
199
- subscribers: ZustandT.Subscribers<ShuttleInternalStore>;
196
+ selectors: ZustandT.SelectorObject<DSShuttleV2T.ShuttleInternalStore, DSShuttleV2T.Selectors>;
197
+ reducers: ZustandT.ReducerObject<DSShuttleV2T.ShuttleInternalStore, DSShuttleV2T.Reducers>;
198
+ subscribers: ZustandT.Subscribers<DSShuttleV2T.ShuttleInternalStore>;
200
199
  PropsProvider: ({ createStore, children, }: {
201
200
  createStore: () => ZustandT.ZustandStore<ZustandT.PropsStore<DSShuttleV2T.InternalProps & {
202
201
  sourceVirtualItems: import("react-virtual").VirtualItem[];
@@ -346,11 +345,11 @@ export declare const config: {
346
345
  }>) => U, equalityFn?: ((a: U, b: U) => boolean) | undefined): U;
347
346
  };
348
347
  InternalProvider: ({ createStore, children, }: {
349
- createStore: () => ZustandT.ZustandStore<ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>>;
348
+ createStore: () => ZustandT.ZustandStore<ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>>;
350
349
  children: import("react").ReactNode;
351
- }) => import("react").FunctionComponentElement<import("react").ProviderProps<ZustandT.ZustandStore<ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>> | undefined>>;
350
+ }) => import("react").FunctionComponentElement<import("react").ProviderProps<ZustandT.ZustandStore<ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>> | undefined>>;
352
351
  useInternalStore: {
353
- (): ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;
354
- <U_1>(selector: (state: ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>) => U_1, equalityFn?: ((a: U_1, b: U_1) => boolean) | undefined): U_1;
352
+ (): ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>;
353
+ <U_1>(selector: (state: ZustandT.InternalStore<DSShuttleV2T.InternalAtoms, DSShuttleV2T.Selectors, DSShuttleV2T.Reducers>) => U_1, equalityFn?: ((a: U_1, b: U_1) => boolean) | undefined): U_1;
355
354
  };
356
355
  };
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { type DSShuttleV2T } from '../../../react-desc-prop-types';
3
3
  export declare const useActionsHandlers: (itemMeta: DSShuttleV2T.ItemMeta) => {
4
- handleClickDrilldown: (e: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.KeyboardEvent<HTMLButtonElement>) => void;
5
- handleClickSingleMove: (e: React.MouseEvent<HTMLButtonElement, MouseEvent> | React.KeyboardEvent<HTMLButtonElement>) => void;
4
+ handleClickDrilldown: (e: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
5
+ handleClickSingleMove: (e: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
6
6
  handleKeyDownSelectionBubbleUp: React.KeyboardEventHandler<HTMLButtonElement>;
7
7
  };
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import { type DSShuttleV2T } from '../../../../react-desc-prop-types';
3
3
  export declare const useGetDatumHydratables: (panelMetaInfo: DSShuttleV2T.PanelMetaInfo) => (item: DSShuttleV2T.ConfiguredDatum) => {
4
- preventMove?: boolean | undefined;
5
4
  preventDrilldown?: boolean | undefined;
6
5
  CustomRenderer?: React.ComponentType<DSShuttleV2T.ComponentProps> | undefined;
7
6
  Icon?: React.ComponentType<DSShuttleV2T.ComponentProps> | undefined;
8
7
  subtitle?: string | undefined;
9
8
  id: string;
9
+ preventMove: boolean;
10
10
  label: string;
11
11
  };
@@ -4,6 +4,9 @@ import type { GlobalAttributesT, XstyledProps } from '@elliemae/ds-utilities';
4
4
  import { type DSControlledCheckboxT } from '@elliemae/ds-form-checkbox';
5
5
  import { type DSButtonT } from '@elliemae/ds-button-v2';
6
6
  import { type useSortable, type DnDKitTree } from '@elliemae/ds-drag-and-drop';
7
+ import type { ZustandT } from '@elliemae/ds-zustand-helpers';
8
+ import type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from './constants';
9
+ import type { useAutoCalculated } from './config/useAutoCalculated';
7
10
  export declare namespace DSShuttleV2T {
8
11
  type Datum = Record<string, unknown>;
9
12
  type PanelMetaInfo = {
@@ -18,6 +21,7 @@ export declare namespace DSShuttleV2T {
18
21
  softDeleted: boolean;
19
22
  localIndex: number;
20
23
  hydratedId: HydratedId;
24
+ hydratedPreventMove: boolean;
21
25
  };
22
26
  type DatumRenderFlags = {
23
27
  selectionPrevented: boolean;
@@ -30,15 +34,17 @@ export declare namespace DSShuttleV2T {
30
34
  type PrimaryKeyHydratables = {
31
35
  id: HydratedId;
32
36
  };
37
+ type FunctionalHydratables = {
38
+ preventMove?: boolean;
39
+ };
33
40
  type RequiredDatumHydratablesWithoutComponents = {
34
41
  label: string;
35
42
  };
36
43
  type OptionalDatumHydratablesWithoutComponents = {
37
44
  subtitle?: string;
38
45
  preventDrilldown?: boolean;
39
- preventMove?: boolean;
40
46
  };
41
- type DatumHydratablesWithoutComponents = PrimaryKeyHydratables & RequiredDatumHydratablesWithoutComponents & OptionalDatumHydratablesWithoutComponents;
47
+ type DatumHydratablesWithoutComponents = PrimaryKeyHydratables & FunctionalHydratables & RequiredDatumHydratablesWithoutComponents & OptionalDatumHydratablesWithoutComponents;
42
48
  type ComponentProps = {
43
49
  datum: Datum;
44
50
  panelMetaInfo: PanelMetaInfo;
@@ -54,13 +60,14 @@ export declare namespace DSShuttleV2T {
54
60
  type OptionalDatumHydratables = OptionalDatumHydratablesWithoutComponents & OptionalDatumHydratablesComponents;
55
61
  type DatumHydratables = RequiredDatumHydratables & OptionalDatumHydratables;
56
62
  type PrimaryKeyHydraters = Hydraters<PrimaryKeyHydratables, [Datum]>;
63
+ type FunctionalHydraters = Hydraters<FunctionalHydratables, [Datum]>;
57
64
  type HydratersMeta = {
58
65
  datumMeta: DatumInternalMeta;
59
66
  panelMetaInfo: PanelMetaInfo;
60
67
  };
61
68
  type RequiredDatumHydraters = Hydraters<RequiredDatumHydratables, [Datum, HydratersMeta]>;
62
69
  type OptionalDatumHydraters = Hydraters<OptionalDatumHydratables, [Datum, HydratersMeta]>;
63
- type DatumHydraters = PrimaryKeyHydraters & RequiredDatumHydraters & OptionalDatumHydraters;
70
+ type DatumHydraters = PrimaryKeyHydraters & FunctionalHydraters & RequiredDatumHydraters & OptionalDatumHydraters;
64
71
  type ConfiguredDatum = DatumInternalMeta & {
65
72
  original: Datum;
66
73
  };
@@ -102,6 +109,30 @@ export declare namespace DSShuttleV2T {
102
109
  event: Parameters<Required<DSButtonT.Props>['onClick']>[0] | Parameters<DSControlledCheckboxT.InternalProps['onChange']>[1] | React.MouseEvent<HTMLButtonElement | HTMLDivElement> | React.KeyboardEvent<HTMLDivElement> | React.ChangeEvent<HTMLInputElement>;
103
110
  item?: Datum;
104
111
  }) => void;
112
+ type FocusRegion = (typeof REGIONS_FOCUSES)[keyof typeof REGIONS_FOCUSES];
113
+ type FocusItem = Omit<(typeof ITEMS_FOCUSES)[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;
114
+ type FocusItemAction = (typeof ACTIONS_FOCUSES)[keyof typeof ACTIONS_FOCUSES];
115
+ type InternalAtoms = {
116
+ focusRegion: FocusRegion;
117
+ focusItem: FocusItem;
118
+ focusItemAction: FocusItemAction;
119
+ shouldFocusItemOnRender: boolean;
120
+ dropIndicatorPosition: number;
121
+ overId: string;
122
+ dndDraggingItem: ConfiguredDatum | null;
123
+ dndDraggingItemMeta: ItemMeta | null;
124
+ lastActiveId: string;
125
+ isDropValid: boolean;
126
+ sourcePanelLastSelectedItem: string | null | undefined;
127
+ destinationPanelLastSelectedItem: string | null | undefined;
128
+ };
129
+ type UseAutoCalculatedT = ReturnType<typeof useAutoCalculated>;
130
+ type Selectors = {
131
+ getIsDragAndDropHappening: () => boolean;
132
+ getPanelLastSelectedItem: (isDestinationPanel: boolean) => string | null | undefined;
133
+ };
134
+ type Reducers = Record<string, never>;
135
+ type ShuttleInternalStore = ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;
105
136
  interface RequiredProps extends RequiredDatumHydraters, PrimaryKeyHydraters {
106
137
  sourceData: Datum[];
107
138
  sourceSelectedItems: SelectionMap;
@@ -114,7 +145,7 @@ export declare namespace DSShuttleV2T {
114
145
  DestinationHeader: React.ComponentType<unknown>;
115
146
  onDestinationDrilldown: OnSelectionDrilldown;
116
147
  }
117
- interface DefaultProps {
148
+ interface DefaultProps extends Required<FunctionalHydraters> {
118
149
  sourceIsLoading: boolean;
119
150
  sourceWithLoadMore: boolean;
120
151
  sourceIsLoadingMore: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-shuttle-v2",
3
- "version": "3.15.0-rc.2",
3
+ "version": "3.16.0-next.1",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Shuttle v2",
6
6
  "files": [
@@ -38,18 +38,18 @@
38
38
  "fast-deep-equal": "~3.1.3",
39
39
  "react-virtual": "~2.10.4",
40
40
  "uid": "~2.0.0",
41
- "@elliemae/ds-button-v2": "3.15.0-rc.2",
42
- "@elliemae/ds-circular-progress-indicator": "3.15.0-rc.2",
43
- "@elliemae/ds-form-input-text": "3.15.0-rc.2",
44
- "@elliemae/ds-drag-and-drop": "3.15.0-rc.2",
45
- "@elliemae/ds-grid": "3.15.0-rc.2",
46
- "@elliemae/ds-icons": "3.15.0-rc.2",
47
- "@elliemae/ds-form-checkbox": "3.15.0-rc.2",
48
- "@elliemae/ds-indeterminate-progress-indicator": "3.15.0-rc.2",
49
- "@elliemae/ds-system": "3.15.0-rc.2",
50
- "@elliemae/ds-typography": "3.15.0-rc.2",
51
- "@elliemae/ds-utilities": "3.15.0-rc.2",
52
- "@elliemae/ds-zustand-helpers": "3.15.0-rc.2"
41
+ "@elliemae/ds-button-v2": "3.16.0-next.1",
42
+ "@elliemae/ds-circular-progress-indicator": "3.16.0-next.1",
43
+ "@elliemae/ds-grid": "3.16.0-next.1",
44
+ "@elliemae/ds-indeterminate-progress-indicator": "3.16.0-next.1",
45
+ "@elliemae/ds-icons": "3.16.0-next.1",
46
+ "@elliemae/ds-form-checkbox": "3.16.0-next.1",
47
+ "@elliemae/ds-drag-and-drop": "3.16.0-next.1",
48
+ "@elliemae/ds-system": "3.16.0-next.1",
49
+ "@elliemae/ds-typography": "3.16.0-next.1",
50
+ "@elliemae/ds-form-input-text": "3.16.0-next.1",
51
+ "@elliemae/ds-zustand-helpers": "3.16.0-next.1",
52
+ "@elliemae/ds-utilities": "3.16.0-next.1"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@testing-library/dom": "~8.19.0",
@@ -57,8 +57,8 @@
57
57
  "@testing-library/user-event": "~13.5.0",
58
58
  "lodash": "^4.17.21",
59
59
  "styled-components": "~5.3.6",
60
- "@elliemae/ds-breadcrumb": "3.15.0-rc.2",
61
- "@elliemae/ds-tree-model": "3.15.0-rc.2"
60
+ "@elliemae/ds-breadcrumb": "3.16.0-next.1",
61
+ "@elliemae/ds-tree-model": "3.16.0-next.1"
62
62
  },
63
63
  "peerDependencies": {
64
64
  "lodash": "^4.17.21",
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
18
- mod
19
- ));
20
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
- var types_exports = {};
22
- module.exports = __toCommonJS(types_exports);
23
- var React = __toESM(require("react"));
24
- //# sourceMappingURL=types.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/config/useStore/types.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import type { ZustandT } from '@elliemae/ds-zustand-helpers';\nimport type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from '../../constants';\nimport type { useAutoCalculated } from '../useAutoCalculated';\nimport { type DSShuttleV2T } from '../../react-desc-prop-types';\n\nexport type FocusRegion = (typeof REGIONS_FOCUSES)[keyof typeof REGIONS_FOCUSES];\n\nexport type FocusItem = Omit<(typeof ITEMS_FOCUSES)[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;\n\nexport type FocusItemAction = (typeof ACTIONS_FOCUSES)[keyof typeof ACTIONS_FOCUSES];\n\nexport type InternalAtoms = {\n focusRegion: FocusRegion;\n focusItem: FocusItem;\n focusItemAction: FocusItemAction;\n shouldFocusItemOnRender: boolean;\n dropIndicatorPosition: number;\n overId: string;\n dndDraggingItem: DSShuttleV2T.ConfiguredDatum | null;\n dndDraggingItemMeta: DSShuttleV2T.ItemMeta | null;\n lastActiveId: string;\n isDropValid: boolean;\n sourcePanelLastSelectedItem: string | null | undefined;\n destinationPanelLastSelectedItem: string | null | undefined;\n};\n\nexport type UseAutoCalculatedT = ReturnType<typeof useAutoCalculated>;\n\nexport type Selectors = {\n getIsDragAndDropHappening: () => boolean;\n getPanelLastSelectedItem: (isDestinationPanel: boolean) => string | null | undefined;\n};\n\nexport type Reducers = Record<string, never>;\n\nexport type ShuttleInternalStore = ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- import * as React from "react";
2
- //# sourceMappingURL=types.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n"],
5
- "mappings": "AAAA,YAAY,WAAW;",
6
- "names": []
7
- }
@@ -1,28 +0,0 @@
1
- import type { ZustandT } from '@elliemae/ds-zustand-helpers';
2
- import type { REGIONS_FOCUSES, ACTIONS_FOCUSES, ITEMS_FOCUSES } from '../../constants';
3
- import type { useAutoCalculated } from '../useAutoCalculated';
4
- import { type DSShuttleV2T } from '../../react-desc-prop-types';
5
- export type FocusRegion = (typeof REGIONS_FOCUSES)[keyof typeof REGIONS_FOCUSES];
6
- export type FocusItem = Omit<(typeof ITEMS_FOCUSES)[keyof typeof ITEMS_FOCUSES], 'GET_SPECIFIC_ITEM'> & string;
7
- export type FocusItemAction = (typeof ACTIONS_FOCUSES)[keyof typeof ACTIONS_FOCUSES];
8
- export type InternalAtoms = {
9
- focusRegion: FocusRegion;
10
- focusItem: FocusItem;
11
- focusItemAction: FocusItemAction;
12
- shouldFocusItemOnRender: boolean;
13
- dropIndicatorPosition: number;
14
- overId: string;
15
- dndDraggingItem: DSShuttleV2T.ConfiguredDatum | null;
16
- dndDraggingItemMeta: DSShuttleV2T.ItemMeta | null;
17
- lastActiveId: string;
18
- isDropValid: boolean;
19
- sourcePanelLastSelectedItem: string | null | undefined;
20
- destinationPanelLastSelectedItem: string | null | undefined;
21
- };
22
- export type UseAutoCalculatedT = ReturnType<typeof useAutoCalculated>;
23
- export type Selectors = {
24
- getIsDragAndDropHappening: () => boolean;
25
- getPanelLastSelectedItem: (isDestinationPanel: boolean) => string | null | undefined;
26
- };
27
- export type Reducers = Record<string, never>;
28
- export type ShuttleInternalStore = ZustandT.InternalStore<InternalAtoms, Selectors, Reducers>;