@frontify/fondue 13.6.1 → 13.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DatePicker/DatePicker.es.js.map +1 -1
- package/dist/components/Tree/Tree.es.js.map +1 -1
- package/dist/components/Tree/TreeItem/useMultiselectTreeItem.es.js.map +1 -1
- package/dist/components/Tree/helpers/projection.es.js.map +1 -1
- package/dist/components/Tree/types.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/packages/charts/style.css.d.ts +1 -0
- package/dist/packages/components/style.css +1 -1
- package/dist/packages/components/style.css.d.ts +1 -0
- package/dist/packages/locales/de-CH.js +7 -3
- package/dist/packages/locales/de-CH.js.map +1 -1
- package/dist/packages/locales/de-DE.js +7 -3
- package/dist/packages/locales/de-DE.js.map +1 -1
- package/dist/packages/locales/en-US.d.ts +4 -0
- package/dist/packages/locales/en-US.js +7 -3
- package/dist/packages/locales/en-US.js.map +1 -1
- package/dist/packages/locales/es-ES.js +7 -3
- package/dist/packages/locales/es-ES.js.map +1 -1
- package/dist/packages/locales/fr-CH.js +5 -1
- package/dist/packages/locales/fr-CH.js.map +1 -1
- package/dist/packages/locales/fr-FR.js +5 -1
- package/dist/packages/locales/fr-FR.js.map +1 -1
- package/dist/packages/locales/it-CH.js +7 -3
- package/dist/packages/locales/it-CH.js.map +1 -1
- package/dist/packages/locales/it-IT.js +7 -3
- package/dist/packages/locales/it-IT.js.map +1 -1
- package/dist/packages/locales/nl-NL.js +5 -1
- package/dist/packages/locales/nl-NL.js.map +1 -1
- package/dist/packages/locales/pl-PL.js +7 -3
- package/dist/packages/locales/pl-PL.js.map +1 -1
- package/dist/packages/locales/pt-PT.js +7 -3
- package/dist/packages/locales/pt-PT.js.map +1 -1
- package/dist/packages/rte/style.css +1 -1
- package/dist/packages/rte/style.css.d.ts +1 -0
- package/dist/packages/tokens/css/base.css.d.ts +1 -0
- package/dist/packages/tokens/legacy/deprecatedBaseTokens.css.d.ts +1 -0
- package/dist/packages/tokens/themes/themes.module.css.d.ts +1 -2
- package/dist/style.css.d.ts +1 -0
- package/dist/tools/sdk-cli/index.js +2 -2
- package/package.json +43 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.es.js","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport './styles.css';\n\nimport { offset, shift } from '@floating-ui/dom';\nimport { IconCaretLeft, IconCaretLeftDouble, IconCaretRight, IconCaretRightDouble } from '@frontify/fondue-icons';\nimport { format, getYear } from 'date-fns';\nimport { forwardRef, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport ReactDatePicker from 'react-datepicker';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@components/Button/Button';\nimport { ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button/ButtonTypes';\nimport { merge } from '@utilities/merge';\nimport { Validation } from '@utilities/validation';\n\nimport { DatePickerTrigger } from './DatePickerTrigger';\n\n// Needed because of https://github.com/Hacker0x01/react-datepicker/issues/3834\nconst ReactDatePickerComponent =\n (ReactDatePicker as unknown as { default: typeof ReactDatePicker }).default ?? ReactDatePicker;\n\ntype SingleDatePickerProps = {\n variant?: 'single';\n onChange: (date: Date | null) => void;\n startDate?: null;\n endDate?: null;\n};\n\ntype RangeDatePickerProps = {\n variant: 'range';\n onChange: (date: [Date | null, Date | null] | null) => void;\n startDate: Date | null;\n endDate: Date | null;\n};\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport type DatePickerProps = {\n placeHolder?: string;\n isClearable?: boolean;\n shouldCloseOnSelect?: boolean;\n dateFormat?: string;\n /** @description when the variant is of type 'range', the value should be the startDate */\n value?: Date | null;\n minDate?: Date;\n maxDate?: Date;\n validation?: Validation;\n customTrigger?: ReactNode;\n customHeader?: ReactNode;\n children?: ReactNode;\n hasPopperArrow?: boolean;\n preventOpenOnFocus?: boolean;\n inline?: boolean;\n filterDate?: (date: Date) => boolean;\n fixedHeight?: boolean;\n /**\n * @description When false, stretches to 100% of container width.\n * @default true\n */\n hugWidth?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n onBlur?: () => void;\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n triggerAriaLabel?: string;\n 'data-test-id'?: string;\n} & (SingleDatePickerProps | RangeDatePickerProps);\n\nconst getDayClasses = (variant: DatePickerProps['variant'], date: Date) => {\n if (variant === 'single') {\n return date < new Date() ? 'past-date' : 'future-date';\n }\n return 'range-day';\n};\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport type ReactDatePickerRef = ReactDatePicker<boolean, undefined>;\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport const DatePicker = forwardRef<ReactDatePickerRef, DatePickerProps>(\n (\n {\n placeHolder = 'Select a date',\n isClearable,\n shouldCloseOnSelect,\n onChange,\n onOpen,\n onClose,\n onBlur,\n onKeyDown,\n dateFormat = 'MMM dd, yyyy',\n value,\n startDate,\n endDate,\n minDate,\n maxDate,\n validation = Validation.Default,\n customTrigger,\n customHeader,\n children,\n fixedHeight = true,\n hasPopperArrow = true,\n preventOpenOnFocus = false,\n inline = false,\n filterDate = () => true,\n variant = 'single',\n hugWidth = true,\n 'data-test-id': dataTestId = 'date-picker',\n triggerAriaLabel = 'Open or close the date picker',\n },\n ref,\n ) => {\n const calendarCustomHeaderRef = useRef<HTMLDivElement>(null);\n const [isCalendarOpen, setIsCalendarOpen] = useState<boolean>(false);\n\n const handleOpen = () => {\n setIsCalendarOpen(true);\n onOpen?.();\n\n queueMicrotask(handleFocus);\n };\n\n const handleFocus = () => {\n calendarCustomHeaderRef.current?.querySelector<HTMLElement>('button')?.focus();\n };\n\n const handleClose = () => {\n setIsCalendarOpen(false);\n onClose?.();\n };\n\n return (\n <div data-test-id={dataTestId} className={hugWidth ? 'tw-w-auto' : 'tw-w-full'}>\n <ReactDatePickerComponent\n wrapperClassName={hugWidth ? 'tw-w-auto' : 'tw-w-full'}\n calendarClassName={merge([\n 'react-datepicker-wrap tw-pointer-events-auto',\n inline && 'react-datepicker-inline',\n ])}\n inline={inline}\n selected={value}\n startDate={startDate}\n endDate={endDate}\n minDate={minDate}\n maxDate={maxDate}\n calendarStartDay={1}\n onChange={onChange}\n onKeyDown={isCalendarOpen ? undefined : onKeyDown}\n onBlur={onBlur}\n selectsRange={variant === 'range'}\n showPopperArrow={hasPopperArrow}\n preventOpenOnFocus={preventOpenOnFocus}\n filterDate={filterDate}\n fixedHeight={fixedHeight}\n customInput={\n customTrigger ?? (\n <DatePickerTrigger\n isCalendarOpen={isCalendarOpen}\n isClearable={isClearable}\n placeHolder={placeHolder}\n validation={validation}\n onDateChanged={onChange}\n hugWidth={hugWidth}\n aria-haspopup=\"dialog\"\n aria-expanded={isCalendarOpen}\n aria-label={triggerAriaLabel}\n />\n )\n }\n ref={ref}\n formatWeekDay={(day) => day.slice(0, 1)}\n isClearable={isClearable}\n dateFormat={dateFormat}\n onCalendarClose={handleClose}\n onCalendarOpen={handleOpen}\n shouldCloseOnSelect={shouldCloseOnSelect}\n dayClassName={(date) => getDayClasses(variant, date)}\n popperProps={{\n strategy: 'fixed',\n }}\n popperContainer={({ children }) => createPortal(children, document.body)}\n popperModifiers={[shift({ padding: 8 }), offset(8)]}\n renderCustomHeader={({ date, decreaseMonth, increaseMonth, increaseYear, decreaseYear }) => (\n <div\n className=\"tw-flex tw-flex-col tw-gap-3\"\n ref={calendarCustomHeaderRef}\n data-test-id=\"date-picker-header\"\n >\n {customHeader}\n <div className=\"tw-flex tw-justify-between tw-pb-4 tw-px-0\">\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeftDouble size={20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeft size={20} />}\n />\n <p className=\"tw-font-sans tw-font-semibold tw-grow tw-self-center\">\n {format(date, 'MMMM')} {getYear(date)}\n </p>\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRight size={20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRightDouble size={20} />}\n />\n </div>\n </div>\n )}\n >\n {children}\n </ReactDatePickerComponent>\n </div>\n );\n },\n);\n\nDatePicker.displayName = 'FondueDatePicker';\n"],"names":["ReactDatePickerComponent","ReactDatePicker","getDayClasses","variant","date","DatePicker","forwardRef","placeHolder","isClearable","shouldCloseOnSelect","onChange","onOpen","onClose","onBlur","onKeyDown","dateFormat","value","startDate","endDate","minDate","maxDate","validation","Validation","customTrigger","customHeader","children","fixedHeight","hasPopperArrow","preventOpenOnFocus","inline","filterDate","hugWidth","dataTestId","triggerAriaLabel","ref","calendarCustomHeaderRef","useRef","isCalendarOpen","setIsCalendarOpen","useState","handleOpen","handleFocus","_b","_a","handleClose","jsx","merge","DatePickerTrigger","day","createPortal","shift","offset","decreaseMonth","increaseMonth","increaseYear","decreaseYear","jsxs","Button","ButtonStyle","ButtonSize","ButtonEmphasis","IconCaretLeftDouble","IconCaretLeft","format","getYear","IconCaretRight","IconCaretRightDouble"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker.es.js","sources":["../../../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport './styles.css';\nimport { offset, shift } from '@floating-ui/dom';\nimport { IconCaretLeft, IconCaretLeftDouble, IconCaretRight, IconCaretRightDouble } from '@frontify/fondue-icons';\nimport { format, getYear } from 'date-fns';\nimport { forwardRef, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport ReactDatePicker from 'react-datepicker';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@components/Button/Button';\nimport { ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button/ButtonTypes';\nimport { merge } from '@utilities/merge';\nimport { Validation } from '@utilities/validation';\n\nimport { DatePickerTrigger } from './DatePickerTrigger';\n\n// Needed because of https://github.com/Hacker0x01/react-datepicker/issues/3834\nconst ReactDatePickerComponent =\n (ReactDatePicker as unknown as { default: typeof ReactDatePicker }).default ?? ReactDatePicker;\n\ntype SingleDatePickerProps = {\n variant?: 'single';\n onChange: (date: Date | null) => void;\n startDate?: null;\n endDate?: null;\n};\n\ntype RangeDatePickerProps = {\n variant: 'range';\n onChange: (date: [Date | null, Date | null] | null) => void;\n startDate: Date | null;\n endDate: Date | null;\n};\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport type DatePickerProps = {\n placeHolder?: string;\n isClearable?: boolean;\n shouldCloseOnSelect?: boolean;\n dateFormat?: string;\n /** @description when the variant is of type 'range', the value should be the startDate */\n value?: Date | null;\n minDate?: Date;\n maxDate?: Date;\n validation?: Validation;\n customTrigger?: ReactNode;\n customHeader?: ReactNode;\n children?: ReactNode;\n hasPopperArrow?: boolean;\n preventOpenOnFocus?: boolean;\n inline?: boolean;\n filterDate?: (date: Date) => boolean;\n fixedHeight?: boolean;\n /**\n * @description When false, stretches to 100% of container width.\n * @default true\n */\n hugWidth?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n onBlur?: () => void;\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n triggerAriaLabel?: string;\n 'data-test-id'?: string;\n} & (SingleDatePickerProps | RangeDatePickerProps);\n\nconst getDayClasses = (variant: DatePickerProps['variant'], date: Date) => {\n if (variant === 'single') {\n return date < new Date() ? 'past-date' : 'future-date';\n }\n return 'range-day';\n};\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport type ReactDatePickerRef = ReactDatePicker<boolean, undefined>;\n\n/**\n * @deprecated Use `DatePicker` from `@frontify/fondue/components` instead.\n */\nexport const DatePicker = forwardRef<ReactDatePickerRef, DatePickerProps>(\n (\n {\n placeHolder = 'Select a date',\n isClearable,\n shouldCloseOnSelect,\n onChange,\n onOpen,\n onClose,\n onBlur,\n onKeyDown,\n dateFormat = 'MMM dd, yyyy',\n value,\n startDate,\n endDate,\n minDate,\n maxDate,\n validation = Validation.Default,\n customTrigger,\n customHeader,\n children,\n fixedHeight = true,\n hasPopperArrow = true,\n preventOpenOnFocus = false,\n inline = false,\n filterDate = () => true,\n variant = 'single',\n hugWidth = true,\n 'data-test-id': dataTestId = 'date-picker',\n triggerAriaLabel = 'Open or close the date picker',\n },\n ref,\n ) => {\n const calendarCustomHeaderRef = useRef<HTMLDivElement>(null);\n const [isCalendarOpen, setIsCalendarOpen] = useState<boolean>(false);\n\n const handleOpen = () => {\n setIsCalendarOpen(true);\n onOpen?.();\n\n queueMicrotask(handleFocus);\n };\n\n const handleFocus = () => {\n calendarCustomHeaderRef.current?.querySelector<HTMLElement>('button')?.focus();\n };\n\n const handleClose = () => {\n setIsCalendarOpen(false);\n onClose?.();\n };\n\n return (\n <div data-test-id={dataTestId} className={hugWidth ? 'tw-w-auto' : 'tw-w-full'}>\n <ReactDatePickerComponent\n wrapperClassName={hugWidth ? 'tw-w-auto' : 'tw-w-full'}\n calendarClassName={merge([\n 'react-datepicker-wrap tw-pointer-events-auto',\n inline && 'react-datepicker-inline',\n ])}\n inline={inline}\n selected={value}\n startDate={startDate}\n endDate={endDate}\n minDate={minDate}\n maxDate={maxDate}\n calendarStartDay={1}\n onChange={onChange}\n onKeyDown={isCalendarOpen ? undefined : onKeyDown}\n onBlur={onBlur}\n selectsRange={variant === 'range'}\n showPopperArrow={hasPopperArrow}\n preventOpenOnFocus={preventOpenOnFocus}\n filterDate={filterDate}\n fixedHeight={fixedHeight}\n customInput={\n customTrigger ?? (\n <DatePickerTrigger\n isCalendarOpen={isCalendarOpen}\n isClearable={isClearable}\n placeHolder={placeHolder}\n validation={validation}\n onDateChanged={onChange}\n hugWidth={hugWidth}\n aria-haspopup=\"dialog\"\n aria-expanded={isCalendarOpen}\n aria-label={triggerAriaLabel}\n />\n )\n }\n ref={ref}\n formatWeekDay={(day) => day.slice(0, 1)}\n isClearable={isClearable}\n dateFormat={dateFormat}\n onCalendarClose={handleClose}\n onCalendarOpen={handleOpen}\n shouldCloseOnSelect={shouldCloseOnSelect}\n dayClassName={(date) => getDayClasses(variant, date)}\n popperProps={{\n strategy: 'fixed',\n }}\n popperContainer={({ children }) => createPortal(children, document.body)}\n popperModifiers={[shift({ padding: 8 }), offset(8)]}\n renderCustomHeader={({ date, decreaseMonth, increaseMonth, increaseYear, decreaseYear }) => (\n <div\n className=\"tw-flex tw-flex-col tw-gap-3\"\n ref={calendarCustomHeaderRef}\n data-test-id=\"date-picker-header\"\n >\n {customHeader}\n <div className=\"tw-flex tw-justify-between tw-pb-4 tw-px-0\">\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeftDouble size={20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={decreaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretLeft size={20} />}\n />\n <p className=\"tw-font-sans tw-font-semibold tw-grow tw-self-center\">\n {format(date, 'MMMM')} {getYear(date)}\n </p>\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseMonth}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRight size={20} />}\n />\n <Button\n style={ButtonStyle.Default}\n size={ButtonSize.Medium}\n onClick={increaseYear}\n emphasis={ButtonEmphasis.Weak}\n icon={<IconCaretRightDouble size={20} />}\n />\n </div>\n </div>\n )}\n >\n {children}\n </ReactDatePickerComponent>\n </div>\n );\n },\n);\n\nDatePicker.displayName = 'FondueDatePicker';\n"],"names":["ReactDatePickerComponent","ReactDatePicker","getDayClasses","variant","date","DatePicker","forwardRef","placeHolder","isClearable","shouldCloseOnSelect","onChange","onOpen","onClose","onBlur","onKeyDown","dateFormat","value","startDate","endDate","minDate","maxDate","validation","Validation","customTrigger","customHeader","children","fixedHeight","hasPopperArrow","preventOpenOnFocus","inline","filterDate","hugWidth","dataTestId","triggerAriaLabel","ref","calendarCustomHeaderRef","useRef","isCalendarOpen","setIsCalendarOpen","useState","handleOpen","handleFocus","_b","_a","handleClose","jsx","merge","DatePickerTrigger","day","createPortal","shift","offset","decreaseMonth","increaseMonth","increaseYear","decreaseYear","jsxs","Button","ButtonStyle","ButtonSize","ButtonEmphasis","IconCaretLeftDouble","IconCaretLeft","format","getYear","IconCaretRight","IconCaretRightDouble"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tree.es.js","sources":["../../../src/components/Tree/Tree.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n DragOverlay,\n KeyboardSensor,\n type MeasuringConfiguration,\n MeasuringStrategy,\n PointerSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { enableMapSet, produce } from 'immer';\nimport { isEqual } from 'lodash-es';\nimport {\n type KeyboardEvent,\n cloneElement,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n useTransition,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n type DragHandlerPosition,\n type RegisterNodeChildrenPayload,\n type SensorContext,\n type TreeAnnouncements,\n type TreeDragOverEvent,\n type TreeDragStartEvent,\n type TreeItemProps,\n type TreeItemStyling,\n type TreeProps,\n type TreeState,\n type TreeStateAction,\n} from '@components/Tree/types';\n\nimport { TreeContext, type TreeContextProps } from './TreeContext';\nimport { type InternalTreeItemProps, TreeItemOverlay } from './TreeItem';\nimport { type InternalTreeItemMultiSelectProps } from './TreeItem/TreeItemMultiselect';\nimport { type Overlay } from './TreeItem/TreeItemOverlay';\nimport {\n ROOT_ID,\n currentNodesChanged,\n findIndexById,\n getAnnouncements,\n getCurrentChildrenForNewNodesIfExpanded,\n getNodeChildrenIds,\n getNodesToRender,\n getProjection,\n getReactNodeIdsInFlatArray,\n getTreeNodesWithoutElements,\n handleKeyDownEvent,\n removeReactNodesFromFlatArray,\n sensorsActivationConstraint,\n shouldUpdateTreeState,\n updateNodeWithNewChildren,\n} from './helpers';\nimport {\n recursivelyRemoveFragmentsAndEnrichChildren,\n sortableTreeKeyboardCoordinates,\n useDeepCompareEffect,\n} from './utils';\n\nconst measuring: MeasuringConfiguration = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n};\n\nenableMapSet();\n\nconst reducer = produce((draft: TreeState, action: TreeStateAction) => {\n switch (action.type) {\n case 'EXPAND_NODE': {\n draft.expandedIds = new Set(draft.expandedIds).add(action.payload);\n return;\n }\n\n case 'SHRINK_NODE': {\n const newExpanded = new Set(draft.expandedIds);\n newExpanded.delete(action.payload);\n\n draft.expandedIds = newExpanded;\n return;\n }\n\n case 'SET_SELECTION_MODE':\n draft.selectionMode = action.payload.selectionMode;\n return;\n\n case 'SET_PROJECTION': {\n if (!isEqual(draft.projection, action.payload)) {\n draft.projection = action.payload;\n }\n return;\n }\n\n case 'REGISTER_OVERLAY_ITEM': {\n draft.overlay = action.payload;\n return;\n }\n\n case 'REGISTER_ROOT_NODES': {\n // reset rootNodes keeping any children when expanded\n draft.rootNodes = getCurrentChildrenForNewNodesIfExpanded(\n draft.rootNodes,\n draft.expandedIds,\n action.payload,\n );\n return;\n }\n\n case 'REGISTER_NODE_CHILDREN': {\n const { id: parentId, children } = action.payload;\n\n if (findIndexById(draft.rootNodes, parentId) === -1) {\n // This can happen when this action is triggered before the rootNodes array is updated\n // It happens if using static data will all nodes and handling expandedIds outside the Tree component\n // Most of the cases, it will register the children properly afterwards\n // See Scrollable Tree With Label story\n console.warn(`Parent element with ID \"${parentId}\" not found when registering children.`);\n return;\n }\n\n const currentChildrenIds = getNodeChildrenIds(draft.rootNodes, parentId);\n const newChildrenIds = children.map((node) => node.props.id);\n\n if (\n !isEqual(currentChildrenIds, newChildrenIds) ||\n currentNodesChanged(currentChildrenIds, draft.rootNodes, children)\n ) {\n // keep any children when parent expanded\n const newChildren = getCurrentChildrenForNewNodesIfExpanded(\n draft.rootNodes,\n draft.expandedIds,\n children,\n );\n draft.rootNodes = updateNodeWithNewChildren(draft.rootNodes, parentId, newChildren);\n }\n\n return;\n }\n\n case 'UNREGISTER_NODE_CHILDREN': {\n const nodeIds = getReactNodeIdsInFlatArray(draft.rootNodes, action.payload);\n if (nodeIds.length > 0) {\n draft.rootNodes = removeReactNodesFromFlatArray(draft.rootNodes, nodeIds);\n }\n return;\n }\n\n case 'REGISTER_NODES': {\n draft.nodes = action.payload;\n return;\n }\n\n case 'REPLACE_EXPANDED': {\n draft.expandedIds = new Set(action.payload);\n return;\n }\n\n case 'REPLACE_SELECTED': {\n draft.selectedIds = new Set(action.payload);\n return;\n }\n\n case 'REPLACE_STATE': {\n draft.rootNodes = action.payload.rootNodes;\n draft.overlay = action.payload.overlay;\n draft.projection = action.payload.projection;\n draft.selectedIds = action.payload.selectedIds;\n draft.expandedIds = action.payload.expandedIds;\n draft.selectionMode = action.payload.selectionMode;\n return;\n }\n\n default: {\n console.warn(`Updated tree with action \"${action.type}\" but it has not effect.`);\n return;\n }\n }\n});\n\nexport const Tree = memo(\n ({\n id,\n onDrop,\n onSelect = () => {},\n onExpand,\n onShrink,\n children,\n selectedIds,\n expandedIds,\n draggable = false,\n multiselect = false,\n dragHandlerPosition = 'left',\n enableDragDelay = true,\n showDragHandlerOnHoverOnly = true,\n showContentWhileDragging = false,\n itemStyle,\n 'data-test-id': dataTestId = 'fondue-tree',\n }: TreeProps) => {\n const initialState: TreeState = useMemo(\n () => ({\n selectionMode: multiselect ? 'multiselect' : 'single',\n selectedIds: new Set(selectedIds ?? []),\n expandedIds: new Set(expandedIds ?? []),\n rootNodes: [],\n expandedNodes: [],\n nodes: [],\n nodesReady: false,\n projection: null,\n }),\n [expandedIds, multiselect, selectedIds],\n );\n\n const [treeState, updateTreeState] = useReducer(reducer, initialState);\n const [, startTransition] = useTransition();\n\n const [offset, setOffset] = useState<Nullable<number>>(null);\n const [overId, setOverId] = useState<Nullable<string>>(null);\n const [activeId, setActiveId] = useState<Nullable<string>>(null);\n const [currentPosition, setCurrentPosition] =\n useState<Nullable<{ overId: string; parentId: Nullable<string> }>>(null);\n\n useEffect(() => {\n const keyDownHandler = (event: globalThis.KeyboardEvent) => {\n if (shouldUpdateTreeState(event, multiselect)) {\n updateTreeState({\n type: 'SET_SELECTION_MODE',\n payload: { selectionMode: 'multiselect' },\n });\n }\n };\n\n const keyUpHandler = (event: globalThis.KeyboardEvent) => {\n if (shouldUpdateTreeState(event, multiselect)) {\n updateTreeState({\n type: 'SET_SELECTION_MODE',\n payload: { selectionMode: 'single' },\n });\n }\n };\n\n if (multiselect) {\n window.addEventListener('keydown', keyDownHandler);\n window.addEventListener('keyup', keyUpHandler);\n }\n\n return () => {\n window.removeEventListener('keydown', keyDownHandler);\n window.removeEventListener('keyup', keyUpHandler);\n };\n }, [multiselect]);\n\n const registerOverlay = useCallback((overlay: Overlay) => {\n updateTreeState({ type: 'REGISTER_OVERLAY_ITEM', payload: overlay });\n }, []);\n\n const registerNodeChildren = useCallback((payload: RegisterNodeChildrenPayload) => {\n updateTreeState({ type: 'REGISTER_NODE_CHILDREN', payload });\n }, []);\n\n const unregisterNodeChildren = useCallback((payload: string) => {\n updateTreeState({ type: 'UNREGISTER_NODE_CHILDREN', payload });\n }, []);\n\n const handleSelect = useCallback(\n (id: string, ignoreRemoveSelected = false) => {\n onSelect(id, ignoreRemoveSelected, getTreeNodesWithoutElements(treeState.nodes));\n },\n [onSelect, treeState.nodes],\n );\n\n const handleExpand = useCallback(\n (id: string) => {\n if (onExpand) {\n return onExpand(id);\n }\n\n updateTreeState({\n type: 'EXPAND_NODE',\n payload: id,\n });\n },\n [onExpand],\n );\n\n const handleShrink = useCallback(\n (id: string) => {\n if (onShrink) {\n return onShrink(id);\n }\n\n updateTreeState({\n type: 'SHRINK_NODE',\n payload: id,\n });\n },\n [onShrink],\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n resetState();\n\n const { over, active } = event;\n\n if (!over?.id || !active?.id || !treeState.projection?.parentId) {\n return;\n }\n\n const activeNode = treeState.nodes.find((node) => node.props.id === active.id);\n const contentComponent = activeNode?.props?.contentComponent;\n\n onDrop?.({\n id: active.id.toString(),\n parentId: treeState.projection.parentId,\n sort: treeState.projection.position,\n contentComponent,\n });\n };\n\n const handleDragStart = ({ active: { id: activeId, data } }: TreeDragStartEvent) => {\n setActiveId(activeId);\n setOverId(activeId);\n\n if (activeId && data.current) {\n setCurrentPosition({\n parentId: data.current.parentId,\n overId: activeId,\n });\n }\n\n document.body.style.setProperty('cursor', 'grabbing');\n };\n\n const handleDragOver = ({ over }: TreeDragOverEvent) => {\n setOverId(over?.id ?? null);\n };\n\n const handleDragMove = ({ delta }: DragMoveEvent) => {\n setOffset(delta.x);\n };\n\n const handleDragCancel = () => {\n resetState();\n };\n\n const resetState = () => {\n setOverId(null);\n setActiveId(null);\n setOffset(0);\n setCurrentPosition(null);\n\n document.body.style.setProperty('cursor', 'default');\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLUListElement>) => {\n return handleKeyDownEvent(\n event,\n treeState.expandedIds,\n treeState.nodes,\n handleSelect,\n handleShrink,\n handleExpand,\n );\n },\n [handleExpand, handleShrink, handleSelect, treeState.expandedIds, treeState.nodes],\n );\n\n const sensorContext: SensorContext = useRef({\n nodes: treeState.nodes,\n offset: offset ?? 0,\n });\n\n // eslint-disable-next-line @eslint-react/refs\n const coordinateGetter = useMemo(() => sortableTreeKeyboardCoordinates(sensorContext), [sensorContext]);\n const activationConstraint = sensorsActivationConstraint({ dragHandlerPosition, enableDragDelay });\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint }),\n useSensor(KeyboardSensor, { coordinateGetter }),\n );\n\n const announcements: TreeAnnouncements = useMemo(() => {\n return getAnnouncements(treeState, currentPosition, setCurrentPosition);\n }, [currentPosition, treeState]);\n\n useDeepCompareEffect(() => {\n if (!children) {\n return;\n }\n\n updateTreeState({\n type: 'REGISTER_ROOT_NODES',\n payload: recursivelyRemoveFragmentsAndEnrichChildren(children, { parentId: ROOT_ID, level: 0 }),\n });\n }, [children]);\n\n useDeepCompareEffect(() => {\n if (treeState.rootNodes.length === 0) {\n return;\n }\n\n startTransition(() => {\n const nodesToRender = getNodesToRender(treeState.rootNodes, treeState.expandedIds);\n\n updateTreeState({\n type: 'REGISTER_NODES',\n payload: nodesToRender,\n });\n });\n }, [treeState.rootNodes, treeState.expandedIds]);\n\n useEffect(() => {\n updateTreeState({\n type: 'REPLACE_EXPANDED',\n payload: expandedIds ?? [],\n });\n }, [expandedIds]);\n\n useEffect(() => {\n updateTreeState({\n type: 'REPLACE_SELECTED',\n payload: selectedIds ?? [],\n });\n }, [selectedIds]);\n\n useDeepCompareEffect(() => {\n sensorContext.current = {\n nodes: treeState.nodes,\n offset: offset ?? 0,\n };\n }, [offset, treeState.nodes]);\n\n useEffect(() => {\n const projection =\n activeId && overId\n ? getProjection({\n nodes: treeState.nodes,\n activeId,\n overId,\n dragOffset: offset ?? 0,\n })\n : null;\n\n updateTreeState({\n type: 'SET_PROJECTION',\n payload: projection,\n });\n }, [activeId, offset, overId, treeState.nodes]);\n\n const getPropToUse = (\n nodeProp: TreeItemProps['dragHandlerPosition' | 'showContentWhileDragging' | 'showDragHandlerOnHoverOnly'],\n treeProp: TreeProps['dragHandlerPosition' | 'showContentWhileDragging' | 'showDragHandlerOnHoverOnly'],\n ) => nodeProp || treeProp;\n\n const { nodes, items } = useMemo(() => {\n const treeItemStyle = {\n spacingY: 'none',\n contentHight: 'single-line',\n shadow: 'none',\n borderRadius: 'small',\n borderWidth: 'none',\n borderStyle: 'none',\n activeColorStyle: 'neutral',\n ...itemStyle,\n } as TreeItemStyling;\n\n const getTreeItemProps = (nodeProps: InternalTreeItemProps | InternalTreeItemMultiSelectProps) => {\n return multiselect\n ? {\n checkBoxPosition: getPropToUse(\n (nodeProps as InternalTreeItemMultiSelectProps).checkBoxPosition,\n dragHandlerPosition,\n ) as DragHandlerPosition,\n }\n : {\n draggable: (nodeProps as InternalTreeItemProps).draggable ? true : draggable,\n dragHandlerPosition: getPropToUse(\n (nodeProps as InternalTreeItemProps).dragHandlerPosition,\n dragHandlerPosition,\n ) as TreeProps['dragHandlerPosition'],\n showDragHandlerOnHoverOnly: getPropToUse(\n (nodeProps as InternalTreeItemProps).showDragHandlerOnHoverOnly,\n showDragHandlerOnHoverOnly,\n ) as TreeProps['showDragHandlerOnHoverOnly'],\n showContentWhileDragging: getPropToUse(\n (nodeProps as InternalTreeItemProps).showContentWhileDragging,\n showContentWhileDragging,\n ) as TreeProps['showContentWhileDragging'],\n };\n };\n\n return {\n items: treeState.nodes.map((node) => node.props.id),\n nodes: treeState.nodes.map((node) =>\n cloneElement(node, {\n ...getTreeItemProps(node.props),\n itemStyle: { ...treeItemStyle, ...node.props.itemStyle },\n registerOverlay,\n onExpand: handleExpand,\n onShrink: handleShrink,\n onSelect: handleSelect,\n registerNodeChildren,\n unregisterNodeChildren,\n }),\n ),\n };\n }, [\n itemStyle,\n treeState.nodes,\n draggable,\n multiselect,\n dragHandlerPosition,\n showDragHandlerOnHoverOnly,\n showContentWhileDragging,\n registerOverlay,\n handleExpand,\n handleShrink,\n handleSelect,\n registerNodeChildren,\n unregisterNodeChildren,\n ]);\n\n const contextValue: TreeContextProps = useMemo(\n () => ({\n treeState,\n onSelect: handleSelect,\n onExpand: handleExpand,\n onShrink: handleShrink,\n }),\n [treeState, handleSelect, handleExpand, handleShrink],\n );\n\n return (\n <TreeContext.Provider value={contextValue}>\n <ul\n id={id}\n role=\"tree\"\n data-test-id={dataTestId}\n onKeyDown={handleKeyDown}\n aria-multiselectable={treeState.selectionMode === 'multiselect'}\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left tw-text-sm tw-select-none\"\n >\n <DndContext\n sensors={sensors}\n measuring={measuring}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragMove={handleDragMove}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n accessibility={{\n announcements,\n container: document.getElementById(id)?.parentElement ?? document.body,\n }}\n collisionDetection={closestCorners}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {nodes}\n </SortableContext>\n\n {createPortal(\n <DragOverlay\n zIndex={1500}\n wrapperElement=\"ul\"\n dropAnimation={null}\n modifiers={[restrictToWindowEdges]}\n >\n {treeState.overlay && (\n <TreeItemOverlay\n {...treeState.overlay}\n isSelected={treeState.selectedIds.has(treeState.overlay.id)}\n />\n )}\n </DragOverlay>,\n document.body,\n )}\n </DndContext>\n </ul>\n </TreeContext.Provider>\n );\n },\n);\n\nTree.displayName = 'FondueTree';\n"],"names":["measuring","MeasuringStrategy","enableMapSet","reducer","produce","draft","action","newExpanded","isEqual","getCurrentChildrenForNewNodesIfExpanded","parentId","children","findIndexById","currentChildrenIds","getNodeChildrenIds","newChildrenIds","node","currentNodesChanged","newChildren","updateNodeWithNewChildren","nodeIds","getReactNodeIdsInFlatArray","removeReactNodesFromFlatArray","Tree","memo","id","onDrop","onSelect","onExpand","onShrink","selectedIds","expandedIds","draggable","multiselect","dragHandlerPosition","enableDragDelay","showDragHandlerOnHoverOnly","showContentWhileDragging","itemStyle","dataTestId","initialState","useMemo","treeState","updateTreeState","useReducer","startTransition","useTransition","offset","setOffset","useState","overId","setOverId","activeId","setActiveId","currentPosition","setCurrentPosition","useEffect","keyDownHandler","event","shouldUpdateTreeState","keyUpHandler","registerOverlay","useCallback","overlay","registerNodeChildren","payload","unregisterNodeChildren","handleSelect","ignoreRemoveSelected","getTreeNodesWithoutElements","handleExpand","handleShrink","handleDragEnd","resetState","over","active","_a","activeNode","contentComponent","_b","handleDragStart","data","handleDragOver","handleDragMove","delta","handleDragCancel","handleKeyDown","handleKeyDownEvent","sensorContext","useRef","coordinateGetter","sortableTreeKeyboardCoordinates","activationConstraint","sensorsActivationConstraint","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","announcements","getAnnouncements","useDeepCompareEffect","recursivelyRemoveFragmentsAndEnrichChildren","ROOT_ID","nodesToRender","getNodesToRender","projection","getProjection","getPropToUse","nodeProp","treeProp","nodes","items","treeItemStyle","getTreeItemProps","nodeProps","cloneElement","contextValue","jsx","TreeContext","jsxs","DndContext","closestCorners","SortableContext","verticalListSortingStrategy","createPortal","DragOverlay","restrictToWindowEdges","TreeItemOverlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tree.es.js","sources":["../../../src/components/Tree/Tree.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n DragOverlay,\n KeyboardSensor,\n type MeasuringConfiguration,\n MeasuringStrategy,\n PointerSensor,\n closestCorners,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { enableMapSet, produce } from 'immer';\nimport { isEqual } from 'lodash-es';\nimport {\n type KeyboardEvent,\n cloneElement,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n useTransition,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n type DragHandlerPosition,\n type RegisterNodeChildrenPayload,\n type SensorContext,\n type TreeAnnouncements,\n type TreeDragOverEvent,\n type TreeDragStartEvent,\n type TreeItemProps,\n type TreeItemStyling,\n type TreeProps,\n type TreeState,\n type TreeStateAction,\n} from '@components/Tree/types';\n\nimport {\n ROOT_ID,\n currentNodesChanged,\n findIndexById,\n getAnnouncements,\n getCurrentChildrenForNewNodesIfExpanded,\n getNodeChildrenIds,\n getNodesToRender,\n getProjection,\n getReactNodeIdsInFlatArray,\n getTreeNodesWithoutElements,\n handleKeyDownEvent,\n removeReactNodesFromFlatArray,\n sensorsActivationConstraint,\n shouldUpdateTreeState,\n updateNodeWithNewChildren,\n} from './helpers';\nimport { TreeContext, type TreeContextProps } from './TreeContext';\nimport { type InternalTreeItemProps, TreeItemOverlay } from './TreeItem';\nimport { type InternalTreeItemMultiSelectProps } from './TreeItem/TreeItemMultiselect';\nimport { type Overlay } from './TreeItem/TreeItemOverlay';\nimport {\n recursivelyRemoveFragmentsAndEnrichChildren,\n sortableTreeKeyboardCoordinates,\n useDeepCompareEffect,\n} from './utils';\n\nconst measuring: MeasuringConfiguration = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n};\n\nenableMapSet();\n\nconst reducer = produce((draft: TreeState, action: TreeStateAction) => {\n switch (action.type) {\n case 'EXPAND_NODE': {\n draft.expandedIds = new Set(draft.expandedIds).add(action.payload);\n return;\n }\n\n case 'SHRINK_NODE': {\n const newExpanded = new Set(draft.expandedIds);\n newExpanded.delete(action.payload);\n\n draft.expandedIds = newExpanded;\n return;\n }\n\n case 'SET_SELECTION_MODE':\n draft.selectionMode = action.payload.selectionMode;\n return;\n\n case 'SET_PROJECTION': {\n if (!isEqual(draft.projection, action.payload)) {\n draft.projection = action.payload;\n }\n return;\n }\n\n case 'REGISTER_OVERLAY_ITEM': {\n draft.overlay = action.payload;\n return;\n }\n\n case 'REGISTER_ROOT_NODES': {\n // reset rootNodes keeping any children when expanded\n draft.rootNodes = getCurrentChildrenForNewNodesIfExpanded(\n draft.rootNodes,\n draft.expandedIds,\n action.payload,\n );\n return;\n }\n\n case 'REGISTER_NODE_CHILDREN': {\n const { id: parentId, children } = action.payload;\n\n if (findIndexById(draft.rootNodes, parentId) === -1) {\n // This can happen when this action is triggered before the rootNodes array is updated\n // It happens if using static data will all nodes and handling expandedIds outside the Tree component\n // Most of the cases, it will register the children properly afterwards\n // See Scrollable Tree With Label story\n console.warn(`Parent element with ID \"${parentId}\" not found when registering children.`);\n return;\n }\n\n const currentChildrenIds = getNodeChildrenIds(draft.rootNodes, parentId);\n const newChildrenIds = children.map((node) => node.props.id);\n\n if (\n !isEqual(currentChildrenIds, newChildrenIds) ||\n currentNodesChanged(currentChildrenIds, draft.rootNodes, children)\n ) {\n // keep any children when parent expanded\n const newChildren = getCurrentChildrenForNewNodesIfExpanded(\n draft.rootNodes,\n draft.expandedIds,\n children,\n );\n draft.rootNodes = updateNodeWithNewChildren(draft.rootNodes, parentId, newChildren);\n }\n\n return;\n }\n\n case 'UNREGISTER_NODE_CHILDREN': {\n const nodeIds = getReactNodeIdsInFlatArray(draft.rootNodes, action.payload);\n if (nodeIds.length > 0) {\n draft.rootNodes = removeReactNodesFromFlatArray(draft.rootNodes, nodeIds);\n }\n return;\n }\n\n case 'REGISTER_NODES': {\n draft.nodes = action.payload;\n return;\n }\n\n case 'REPLACE_EXPANDED': {\n draft.expandedIds = new Set(action.payload);\n return;\n }\n\n case 'REPLACE_SELECTED': {\n draft.selectedIds = new Set(action.payload);\n return;\n }\n\n case 'REPLACE_STATE': {\n draft.rootNodes = action.payload.rootNodes;\n draft.overlay = action.payload.overlay;\n draft.projection = action.payload.projection;\n draft.selectedIds = action.payload.selectedIds;\n draft.expandedIds = action.payload.expandedIds;\n draft.selectionMode = action.payload.selectionMode;\n return;\n }\n\n default: {\n console.warn(`Updated tree with action \"${action.type}\" but it has not effect.`);\n return;\n }\n }\n});\n\nexport const Tree = memo(\n ({\n id,\n onDrop,\n onSelect = () => {},\n onExpand,\n onShrink,\n children,\n selectedIds,\n expandedIds,\n draggable = false,\n multiselect = false,\n dragHandlerPosition = 'left',\n enableDragDelay = true,\n showDragHandlerOnHoverOnly = true,\n showContentWhileDragging = false,\n itemStyle,\n 'data-test-id': dataTestId = 'fondue-tree',\n }: TreeProps) => {\n const initialState: TreeState = useMemo(\n () => ({\n selectionMode: multiselect ? 'multiselect' : 'single',\n selectedIds: new Set(selectedIds ?? []),\n expandedIds: new Set(expandedIds ?? []),\n rootNodes: [],\n expandedNodes: [],\n nodes: [],\n nodesReady: false,\n projection: null,\n }),\n [expandedIds, multiselect, selectedIds],\n );\n\n const [treeState, updateTreeState] = useReducer(reducer, initialState);\n const [, startTransition] = useTransition();\n\n const [offset, setOffset] = useState<Nullable<number>>(null);\n const [overId, setOverId] = useState<Nullable<string>>(null);\n const [activeId, setActiveId] = useState<Nullable<string>>(null);\n const [currentPosition, setCurrentPosition] =\n useState<Nullable<{ overId: string; parentId: Nullable<string> }>>(null);\n\n useEffect(() => {\n const keyDownHandler = (event: globalThis.KeyboardEvent) => {\n if (shouldUpdateTreeState(event, multiselect)) {\n updateTreeState({\n type: 'SET_SELECTION_MODE',\n payload: { selectionMode: 'multiselect' },\n });\n }\n };\n\n const keyUpHandler = (event: globalThis.KeyboardEvent) => {\n if (shouldUpdateTreeState(event, multiselect)) {\n updateTreeState({\n type: 'SET_SELECTION_MODE',\n payload: { selectionMode: 'single' },\n });\n }\n };\n\n if (multiselect) {\n window.addEventListener('keydown', keyDownHandler);\n window.addEventListener('keyup', keyUpHandler);\n }\n\n return () => {\n window.removeEventListener('keydown', keyDownHandler);\n window.removeEventListener('keyup', keyUpHandler);\n };\n }, [multiselect]);\n\n const registerOverlay = useCallback((overlay: Overlay) => {\n updateTreeState({ type: 'REGISTER_OVERLAY_ITEM', payload: overlay });\n }, []);\n\n const registerNodeChildren = useCallback((payload: RegisterNodeChildrenPayload) => {\n updateTreeState({ type: 'REGISTER_NODE_CHILDREN', payload });\n }, []);\n\n const unregisterNodeChildren = useCallback((payload: string) => {\n updateTreeState({ type: 'UNREGISTER_NODE_CHILDREN', payload });\n }, []);\n\n const handleSelect = useCallback(\n (id: string, ignoreRemoveSelected = false) => {\n onSelect(id, ignoreRemoveSelected, getTreeNodesWithoutElements(treeState.nodes));\n },\n [onSelect, treeState.nodes],\n );\n\n const handleExpand = useCallback(\n (id: string) => {\n if (onExpand) {\n return onExpand(id);\n }\n\n updateTreeState({\n type: 'EXPAND_NODE',\n payload: id,\n });\n },\n [onExpand],\n );\n\n const handleShrink = useCallback(\n (id: string) => {\n if (onShrink) {\n return onShrink(id);\n }\n\n updateTreeState({\n type: 'SHRINK_NODE',\n payload: id,\n });\n },\n [onShrink],\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n resetState();\n\n const { over, active } = event;\n\n if (!over?.id || !active?.id || !treeState.projection?.parentId) {\n return;\n }\n\n const activeNode = treeState.nodes.find((node) => node.props.id === active.id);\n const contentComponent = activeNode?.props?.contentComponent;\n\n onDrop?.({\n id: active.id.toString(),\n parentId: treeState.projection.parentId,\n sort: treeState.projection.position,\n contentComponent,\n });\n };\n\n const handleDragStart = ({ active: { id: activeId, data } }: TreeDragStartEvent) => {\n setActiveId(activeId);\n setOverId(activeId);\n\n if (activeId && data.current) {\n setCurrentPosition({\n parentId: data.current.parentId,\n overId: activeId,\n });\n }\n\n document.body.style.setProperty('cursor', 'grabbing');\n };\n\n const handleDragOver = ({ over }: TreeDragOverEvent) => {\n setOverId(over?.id ?? null);\n };\n\n const handleDragMove = ({ delta }: DragMoveEvent) => {\n setOffset(delta.x);\n };\n\n const handleDragCancel = () => {\n resetState();\n };\n\n const resetState = () => {\n setOverId(null);\n setActiveId(null);\n setOffset(0);\n setCurrentPosition(null);\n\n document.body.style.setProperty('cursor', 'default');\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLUListElement>) => {\n return handleKeyDownEvent(\n event,\n treeState.expandedIds,\n treeState.nodes,\n handleSelect,\n handleShrink,\n handleExpand,\n );\n },\n [handleExpand, handleShrink, handleSelect, treeState.expandedIds, treeState.nodes],\n );\n\n const sensorContext: SensorContext = useRef({\n nodes: treeState.nodes,\n offset: offset ?? 0,\n });\n\n // eslint-disable-next-line @eslint-react/refs\n const coordinateGetter = useMemo(() => sortableTreeKeyboardCoordinates(sensorContext), [sensorContext]);\n const activationConstraint = sensorsActivationConstraint({ dragHandlerPosition, enableDragDelay });\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint }),\n useSensor(KeyboardSensor, { coordinateGetter }),\n );\n\n const announcements: TreeAnnouncements = useMemo(() => {\n return getAnnouncements(treeState, currentPosition, setCurrentPosition);\n }, [currentPosition, treeState]);\n\n useDeepCompareEffect(() => {\n if (!children) {\n return;\n }\n\n updateTreeState({\n type: 'REGISTER_ROOT_NODES',\n payload: recursivelyRemoveFragmentsAndEnrichChildren(children, { parentId: ROOT_ID, level: 0 }),\n });\n }, [children]);\n\n useDeepCompareEffect(() => {\n if (treeState.rootNodes.length === 0) {\n return;\n }\n\n startTransition(() => {\n const nodesToRender = getNodesToRender(treeState.rootNodes, treeState.expandedIds);\n\n updateTreeState({\n type: 'REGISTER_NODES',\n payload: nodesToRender,\n });\n });\n }, [treeState.rootNodes, treeState.expandedIds]);\n\n useEffect(() => {\n updateTreeState({\n type: 'REPLACE_EXPANDED',\n payload: expandedIds ?? [],\n });\n }, [expandedIds]);\n\n useEffect(() => {\n updateTreeState({\n type: 'REPLACE_SELECTED',\n payload: selectedIds ?? [],\n });\n }, [selectedIds]);\n\n useDeepCompareEffect(() => {\n sensorContext.current = {\n nodes: treeState.nodes,\n offset: offset ?? 0,\n };\n }, [offset, treeState.nodes]);\n\n useEffect(() => {\n const projection =\n activeId && overId\n ? getProjection({\n nodes: treeState.nodes,\n activeId,\n overId,\n dragOffset: offset ?? 0,\n })\n : null;\n\n updateTreeState({\n type: 'SET_PROJECTION',\n payload: projection,\n });\n }, [activeId, offset, overId, treeState.nodes]);\n\n const getPropToUse = (\n nodeProp: TreeItemProps['dragHandlerPosition' | 'showContentWhileDragging' | 'showDragHandlerOnHoverOnly'],\n treeProp: TreeProps['dragHandlerPosition' | 'showContentWhileDragging' | 'showDragHandlerOnHoverOnly'],\n ) => nodeProp || treeProp;\n\n const { nodes, items } = useMemo(() => {\n const treeItemStyle = {\n spacingY: 'none',\n contentHight: 'single-line',\n shadow: 'none',\n borderRadius: 'small',\n borderWidth: 'none',\n borderStyle: 'none',\n activeColorStyle: 'neutral',\n ...itemStyle,\n } as TreeItemStyling;\n\n const getTreeItemProps = (nodeProps: InternalTreeItemProps | InternalTreeItemMultiSelectProps) => {\n return multiselect\n ? {\n checkBoxPosition: getPropToUse(\n (nodeProps as InternalTreeItemMultiSelectProps).checkBoxPosition,\n dragHandlerPosition,\n ) as DragHandlerPosition,\n }\n : {\n draggable: (nodeProps as InternalTreeItemProps).draggable ? true : draggable,\n dragHandlerPosition: getPropToUse(\n (nodeProps as InternalTreeItemProps).dragHandlerPosition,\n dragHandlerPosition,\n ) as TreeProps['dragHandlerPosition'],\n showDragHandlerOnHoverOnly: getPropToUse(\n (nodeProps as InternalTreeItemProps).showDragHandlerOnHoverOnly,\n showDragHandlerOnHoverOnly,\n ) as TreeProps['showDragHandlerOnHoverOnly'],\n showContentWhileDragging: getPropToUse(\n (nodeProps as InternalTreeItemProps).showContentWhileDragging,\n showContentWhileDragging,\n ) as TreeProps['showContentWhileDragging'],\n };\n };\n\n return {\n items: treeState.nodes.map((node) => node.props.id),\n nodes: treeState.nodes.map((node) =>\n cloneElement(node, {\n ...getTreeItemProps(node.props),\n itemStyle: { ...treeItemStyle, ...node.props.itemStyle },\n registerOverlay,\n onExpand: handleExpand,\n onShrink: handleShrink,\n onSelect: handleSelect,\n registerNodeChildren,\n unregisterNodeChildren,\n }),\n ),\n };\n }, [\n itemStyle,\n treeState.nodes,\n draggable,\n multiselect,\n dragHandlerPosition,\n showDragHandlerOnHoverOnly,\n showContentWhileDragging,\n registerOverlay,\n handleExpand,\n handleShrink,\n handleSelect,\n registerNodeChildren,\n unregisterNodeChildren,\n ]);\n\n const contextValue: TreeContextProps = useMemo(\n () => ({\n treeState,\n onSelect: handleSelect,\n onExpand: handleExpand,\n onShrink: handleShrink,\n }),\n [treeState, handleSelect, handleExpand, handleShrink],\n );\n\n return (\n <TreeContext.Provider value={contextValue}>\n <ul\n id={id}\n role=\"tree\"\n data-test-id={dataTestId}\n onKeyDown={handleKeyDown}\n aria-multiselectable={treeState.selectionMode === 'multiselect'}\n className=\"tw-p-0 tw-m-0 tw-font-sans tw-font-normal tw-list-none tw-text-left tw-text-sm tw-select-none\"\n >\n <DndContext\n sensors={sensors}\n measuring={measuring}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragMove={handleDragMove}\n onDragStart={handleDragStart}\n onDragCancel={handleDragCancel}\n accessibility={{\n announcements,\n container: document.getElementById(id)?.parentElement ?? document.body,\n }}\n collisionDetection={closestCorners}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n {nodes}\n </SortableContext>\n\n {createPortal(\n <DragOverlay\n zIndex={1500}\n wrapperElement=\"ul\"\n dropAnimation={null}\n modifiers={[restrictToWindowEdges]}\n >\n {treeState.overlay && (\n <TreeItemOverlay\n {...treeState.overlay}\n isSelected={treeState.selectedIds.has(treeState.overlay.id)}\n />\n )}\n </DragOverlay>,\n document.body,\n )}\n </DndContext>\n </ul>\n </TreeContext.Provider>\n );\n },\n);\n\nTree.displayName = 'FondueTree';\n"],"names":["measuring","MeasuringStrategy","enableMapSet","reducer","produce","draft","action","newExpanded","isEqual","getCurrentChildrenForNewNodesIfExpanded","parentId","children","findIndexById","currentChildrenIds","getNodeChildrenIds","newChildrenIds","node","currentNodesChanged","newChildren","updateNodeWithNewChildren","nodeIds","getReactNodeIdsInFlatArray","removeReactNodesFromFlatArray","Tree","memo","id","onDrop","onSelect","onExpand","onShrink","selectedIds","expandedIds","draggable","multiselect","dragHandlerPosition","enableDragDelay","showDragHandlerOnHoverOnly","showContentWhileDragging","itemStyle","dataTestId","initialState","useMemo","treeState","updateTreeState","useReducer","startTransition","useTransition","offset","setOffset","useState","overId","setOverId","activeId","setActiveId","currentPosition","setCurrentPosition","useEffect","keyDownHandler","event","shouldUpdateTreeState","keyUpHandler","registerOverlay","useCallback","overlay","registerNodeChildren","payload","unregisterNodeChildren","handleSelect","ignoreRemoveSelected","getTreeNodesWithoutElements","handleExpand","handleShrink","handleDragEnd","resetState","over","active","_a","activeNode","contentComponent","_b","handleDragStart","data","handleDragOver","handleDragMove","delta","handleDragCancel","handleKeyDown","handleKeyDownEvent","sensorContext","useRef","coordinateGetter","sortableTreeKeyboardCoordinates","activationConstraint","sensorsActivationConstraint","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","announcements","getAnnouncements","useDeepCompareEffect","recursivelyRemoveFragmentsAndEnrichChildren","ROOT_ID","nodesToRender","getNodesToRender","projection","getProjection","getPropToUse","nodeProp","treeProp","nodes","items","treeItemStyle","getTreeItemProps","nodeProps","cloneElement","contextValue","jsx","TreeContext","jsxs","DndContext","closestCorners","SortableContext","verticalListSortingStrategy","createPortal","DragOverlay","restrictToWindowEdges","TreeItemOverlay"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMultiselectTreeItem.es.js","sources":["../../../../src/components/Tree/TreeItem/useMultiselectTreeItem.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useContext } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"useMultiselectTreeItem.es.js","sources":["../../../../src/components/Tree/TreeItem/useMultiselectTreeItem.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { useContext } from 'react';\n\nimport { convertToPartialSelectedId } from '../helpers';\nimport { TreeContext } from '../TreeContext';\n\nexport const useMultiselectTreeItem = (id: string) => {\n const { treeState } = useContext(TreeContext);\n\n const node = treeState.nodes.find((n) => n.props.id === id);\n const parentId = node ? node.props.parentId : '';\n const parent = treeState.nodes.find((n) => n.props.id === parentId);\n\n const extendedId = node ? `${parentId}/${node.props.id}` : null;\n const parentExtendId = parent ? `${parent.props.parentId}/${parent.props.id}` : null;\n\n const isSelected = extendedId ? treeState.selectedIds.has(extendedId) : false;\n const isParentSelected = parentExtendId ? treeState.selectedIds.has(parentExtendId) : false;\n const isPartialSelected = extendedId\n ? treeState.selectedIds.has(convertToPartialSelectedId([extendedId])[0])\n : false;\n const isExpanded = treeState.expandedIds.has(id);\n\n return {\n isSelected,\n isParentSelected,\n isPartialSelected,\n isExpanded,\n };\n};\n"],"names":["useMultiselectTreeItem","id","treeState","useContext","TreeContext","node","parentId","parent","extendedId","parentExtendId","isSelected","isParentSelected","isPartialSelected","convertToPartialSelectedId","isExpanded"],"mappings":";;;AAOO,MAAMA,IAAyB,CAACC,MAAe;AAClD,QAAM,EAAE,WAAAC,EAAA,IAAcC,EAAWC,CAAW,GAEtCC,IAAOH,EAAU,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,OAAOD,CAAE,GACpDK,IAAWD,IAAOA,EAAK,MAAM,WAAW,IACxCE,IAASL,EAAU,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,OAAOI,CAAQ,GAE5DE,IAAaH,IAAO,GAAGC,CAAQ,IAAID,EAAK,MAAM,EAAE,KAAK,MACrDI,IAAiBF,IAAS,GAAGA,EAAO,MAAM,QAAQ,IAAIA,EAAO,MAAM,EAAE,KAAK,MAE1EG,IAAaF,IAAaN,EAAU,YAAY,IAAIM,CAAU,IAAI,IAClEG,IAAmBF,IAAiBP,EAAU,YAAY,IAAIO,CAAc,IAAI,IAChFG,IAAoBJ,IACpBN,EAAU,YAAY,IAAIW,EAA2B,CAACL,CAAU,CAAC,EAAE,CAAC,CAAC,IACrE,IACAM,IAAaZ,EAAU,YAAY,IAAID,CAAE;AAE/C,SAAO;AAAA,IACH,YAAAS;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,YAAAE;AAAA,EAAA;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.es.js","sources":["../../../../src/components/Tree/helpers/projection.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { arrayMove } from '@dnd-kit/sortable';\nimport { type ReactElement } from 'react';\n\nimport { type InternalTreeItemProps } from '../TreeItem';\nimport { INDENTATION_WIDTH, ROOT_ID } from '../helpers';\n\nexport type ProjectionArgs = {\n nodes: ReactElement<InternalTreeItemProps>[];\n activeId: string;\n overId: string;\n dragOffset: number;\n};\n\nexport type Projection = {\n depth: number;\n maxDepth: number;\n minDepth: number;\n position: number;\n type?: string;\n accepts?: string;\n parentId: Nullable<string>;\n isWithinParent: boolean | undefined;\n previousNode: Nullable<{ id: string; depth: number; accepts?: string }>;\n};\n\nconst getNodeDepth = (node: ReactElement) => {\n return node ? node.props.level : 0;\n};\n\nconst getDragDepth = (offset: number) => {\n return Math.round(offset / INDENTATION_WIDTH);\n};\n\nconst getNodeDepthConstraint = (node: ReactElement) => {\n return (node?.props.levelConstraint ?? null) !== null ? node.props.levelConstraint : false;\n};\n\nconst calculateMaxDepth = (previousNode: ReactElement, nextNode: ReactElement) => {\n const previousNodeDepth = getNodeDepth(previousNode);\n\n if (previousNode?.props.accepts) {\n const nextNodeDepth = getNodeDepth(nextNode);\n return previousNodeDepth >= nextNodeDepth ? previousNodeDepth + 1 : nextNodeDepth;\n } else {\n return previousNodeDepth;\n }\n};\n\nconst calculateMinDepth = (previousNode: ReactElement, nextNode: ReactElement) => {\n const nextNodeDepth = getNodeDepth(nextNode);\n\n if (previousNode?.props.accepts) {\n return nextNodeDepth;\n } else {\n return Math.min(getNodeDepth(previousNode), nextNodeDepth);\n }\n};\n\nexport const getProjection = ({ nodes, activeId, overId, dragOffset }: ProjectionArgs): Projection => {\n const overNodeIndex = nodes.findIndex(({ props }) => props.id === overId);\n const activeNodeIndex = nodes.findIndex(({ props }) => props.id === activeId);\n\n const activeNode = nodes[activeNodeIndex];\n const newNodes = arrayMove(nodes, activeNodeIndex, overNodeIndex);\n\n const previousNode = newNodes[overNodeIndex - 1];\n const nextNode = newNodes[overNodeIndex + 1];\n\n const activeNodeDepthConstraint = getNodeDepthConstraint(activeNode);\n const dragDepth = getDragDepth(dragOffset);\n const projectedDepth = (activeNode?.props?.level ?? 0) + dragDepth;\n\n const maxDepth =\n activeNodeDepthConstraint !== false ? activeNodeDepthConstraint : calculateMaxDepth(previousNode, nextNode);\n const minDepth =\n activeNodeDepthConstraint !== false ? activeNodeDepthConstraint : calculateMinDepth(previousNode, nextNode);\n\n let depth = projectedDepth || getNodeDepth(nextNode);\n if (projectedDepth >= maxDepth) {\n depth = maxDepth;\n } else if (projectedDepth < minDepth) {\n depth = minDepth;\n }\n\n const getParentId = () => {\n if (depth === 0 || !previousNode) {\n return ROOT_ID;\n }\n\n if (previousNode.props.parentId && depth === previousNode.props.level) {\n return previousNode.props.parentId ?? null;\n }\n\n if (previousNode.props.level !== undefined && depth > previousNode.props.level) {\n return previousNode.props.accepts\n ? previousNode.props.id\n : (previousNode.props.parentId ?? previousNode.props.id);\n }\n\n const newParent = newNodes\n .slice(0, overNodeIndex)\n .reverse()\n .find((item) => item.props.level === depth)?.props.parentId;\n\n return newParent ?? null;\n };\n\n const getParent = (parentId: Nullable<string>) => {\n if (!parentId) {\n return null;\n }\n return nodes.find(({ props }) => props.id === parentId)?.props;\n };\n\n const parentId = getParentId();\n const parent = getParent(parentId);\n\n // whether we are moving down there is a +1 offset, unless we are in the same parent\n const correctionDueDragDirection =\n activeNodeIndex < overNodeIndex && activeNode.props.parentId !== parentId ? 1 : 0;\n\n const nodesInParent = newNodes.filter(({ props }) => props.parentId === parentId);\n\n /**\n * To get the position the item is dropped within its parent (first match wins):\n * - Get the index of the active item among the parent nodes\n * - Use the 'over' item to get the position\n * - If the over element is the parent matched set it to the top\n * - If the item is going out:\n * - try to figure the position by the parent from the next element\n * - Or go to the first (going down) or last position (going up)\n * - if we move the item in or same depth and up it goes to the last position\n */\n let dropIndexInParent = nodesInParent.findIndex(({ props }) => props.id === activeId);\n\n if (dropIndexInParent < 0) {\n const overNextIndex = nodesInParent.findIndex(({ props }) => props.id === overId);\n if (overNextIndex >= 0) {\n dropIndexInParent = overNextIndex;\n } else if (parentId === overId) {\n dropIndexInParent = -1;\n } else if (dragDepth < 0) {\n const nextNodeNodesInParent = nextNode.props.parentId\n ? newNodes.filter(({ props }) => props.parentId === nextNode.props.parentId)\n : [];\n const nextNodePosition = nextNodeNodesInParent.findIndex(({ props }) => props.id === nextNode.props.id);\n if (nextNodePosition >= 0) {\n dropIndexInParent = nextNodePosition + (activeNodeIndex < overNodeIndex ? -1 : 0);\n } else {\n dropIndexInParent = activeNodeIndex < overNodeIndex ? nodesInParent.length : -1;\n }\n } else if (activeNodeIndex >= overNodeIndex) {\n dropIndexInParent = nodesInParent.length;\n }\n }\n\n dropIndexInParent = dropIndexInParent + correctionDueDragDirection;\n const parentDepth = parent?.level ?? 0;\n\n return {\n depth,\n maxDepth,\n minDepth,\n parentId: parentId ?? null,\n type: parent?.type,\n accepts: parent?.accepts,\n position: dropIndexInParent >= 0 ? dropIndexInParent : 0,\n isWithinParent: parentDepth ? depth > parentDepth : false,\n previousNode: previousNode\n ? {\n id: previousNode.props.id,\n depth: getNodeDepth(previousNode),\n accepts: previousNode.props.accepts,\n }\n : null,\n };\n};\n"],"names":["getNodeDepth","node","getDragDepth","offset","INDENTATION_WIDTH","getNodeDepthConstraint","calculateMaxDepth","previousNode","nextNode","previousNodeDepth","nextNodeDepth","calculateMinDepth","getProjection","nodes","activeId","overId","dragOffset","overNodeIndex","props","activeNodeIndex","activeNode","newNodes","arrayMove","activeNodeDepthConstraint","dragDepth","projectedDepth","_a","maxDepth","minDepth","depth","getParentId","ROOT_ID","item","getParent","parentId","parent","correctionDueDragDirection","nodesInParent","dropIndexInParent","overNextIndex","nextNodePosition","parentDepth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projection.es.js","sources":["../../../../src/components/Tree/helpers/projection.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { arrayMove } from '@dnd-kit/sortable';\nimport { type ReactElement } from 'react';\n\nimport { INDENTATION_WIDTH, ROOT_ID } from '../helpers';\nimport { type InternalTreeItemProps } from '../TreeItem';\n\nexport type ProjectionArgs = {\n nodes: ReactElement<InternalTreeItemProps>[];\n activeId: string;\n overId: string;\n dragOffset: number;\n};\n\nexport type Projection = {\n depth: number;\n maxDepth: number;\n minDepth: number;\n position: number;\n type?: string;\n accepts?: string;\n parentId: Nullable<string>;\n isWithinParent: boolean | undefined;\n previousNode: Nullable<{ id: string; depth: number; accepts?: string }>;\n};\n\nconst getNodeDepth = (node: ReactElement) => {\n return node ? node.props.level : 0;\n};\n\nconst getDragDepth = (offset: number) => {\n return Math.round(offset / INDENTATION_WIDTH);\n};\n\nconst getNodeDepthConstraint = (node: ReactElement) => {\n return (node?.props.levelConstraint ?? null) !== null ? node.props.levelConstraint : false;\n};\n\nconst calculateMaxDepth = (previousNode: ReactElement, nextNode: ReactElement) => {\n const previousNodeDepth = getNodeDepth(previousNode);\n\n if (previousNode?.props.accepts) {\n const nextNodeDepth = getNodeDepth(nextNode);\n return previousNodeDepth >= nextNodeDepth ? previousNodeDepth + 1 : nextNodeDepth;\n } else {\n return previousNodeDepth;\n }\n};\n\nconst calculateMinDepth = (previousNode: ReactElement, nextNode: ReactElement) => {\n const nextNodeDepth = getNodeDepth(nextNode);\n\n if (previousNode?.props.accepts) {\n return nextNodeDepth;\n } else {\n return Math.min(getNodeDepth(previousNode), nextNodeDepth);\n }\n};\n\nexport const getProjection = ({ nodes, activeId, overId, dragOffset }: ProjectionArgs): Projection => {\n const overNodeIndex = nodes.findIndex(({ props }) => props.id === overId);\n const activeNodeIndex = nodes.findIndex(({ props }) => props.id === activeId);\n\n const activeNode = nodes[activeNodeIndex];\n const newNodes = arrayMove(nodes, activeNodeIndex, overNodeIndex);\n\n const previousNode = newNodes[overNodeIndex - 1];\n const nextNode = newNodes[overNodeIndex + 1];\n\n const activeNodeDepthConstraint = getNodeDepthConstraint(activeNode);\n const dragDepth = getDragDepth(dragOffset);\n const projectedDepth = (activeNode?.props?.level ?? 0) + dragDepth;\n\n const maxDepth =\n activeNodeDepthConstraint !== false ? activeNodeDepthConstraint : calculateMaxDepth(previousNode, nextNode);\n const minDepth =\n activeNodeDepthConstraint !== false ? activeNodeDepthConstraint : calculateMinDepth(previousNode, nextNode);\n\n let depth = projectedDepth || getNodeDepth(nextNode);\n if (projectedDepth >= maxDepth) {\n depth = maxDepth;\n } else if (projectedDepth < minDepth) {\n depth = minDepth;\n }\n\n const getParentId = () => {\n if (depth === 0 || !previousNode) {\n return ROOT_ID;\n }\n\n if (previousNode.props.parentId && depth === previousNode.props.level) {\n return previousNode.props.parentId ?? null;\n }\n\n if (previousNode.props.level !== undefined && depth > previousNode.props.level) {\n return previousNode.props.accepts\n ? previousNode.props.id\n : (previousNode.props.parentId ?? previousNode.props.id);\n }\n\n const newParent = newNodes\n .slice(0, overNodeIndex)\n .reverse()\n .find((item) => item.props.level === depth)?.props.parentId;\n\n return newParent ?? null;\n };\n\n const getParent = (parentId: Nullable<string>) => {\n if (!parentId) {\n return null;\n }\n return nodes.find(({ props }) => props.id === parentId)?.props;\n };\n\n const parentId = getParentId();\n const parent = getParent(parentId);\n\n // whether we are moving down there is a +1 offset, unless we are in the same parent\n const correctionDueDragDirection =\n activeNodeIndex < overNodeIndex && activeNode.props.parentId !== parentId ? 1 : 0;\n\n const nodesInParent = newNodes.filter(({ props }) => props.parentId === parentId);\n\n /**\n * To get the position the item is dropped within its parent (first match wins):\n * - Get the index of the active item among the parent nodes\n * - Use the 'over' item to get the position\n * - If the over element is the parent matched set it to the top\n * - If the item is going out:\n * - try to figure the position by the parent from the next element\n * - Or go to the first (going down) or last position (going up)\n * - if we move the item in or same depth and up it goes to the last position\n */\n let dropIndexInParent = nodesInParent.findIndex(({ props }) => props.id === activeId);\n\n if (dropIndexInParent < 0) {\n const overNextIndex = nodesInParent.findIndex(({ props }) => props.id === overId);\n if (overNextIndex >= 0) {\n dropIndexInParent = overNextIndex;\n } else if (parentId === overId) {\n dropIndexInParent = -1;\n } else if (dragDepth < 0) {\n const nextNodeNodesInParent = nextNode.props.parentId\n ? newNodes.filter(({ props }) => props.parentId === nextNode.props.parentId)\n : [];\n const nextNodePosition = nextNodeNodesInParent.findIndex(({ props }) => props.id === nextNode.props.id);\n if (nextNodePosition >= 0) {\n dropIndexInParent = nextNodePosition + (activeNodeIndex < overNodeIndex ? -1 : 0);\n } else {\n dropIndexInParent = activeNodeIndex < overNodeIndex ? nodesInParent.length : -1;\n }\n } else if (activeNodeIndex >= overNodeIndex) {\n dropIndexInParent = nodesInParent.length;\n }\n }\n\n dropIndexInParent = dropIndexInParent + correctionDueDragDirection;\n const parentDepth = parent?.level ?? 0;\n\n return {\n depth,\n maxDepth,\n minDepth,\n parentId: parentId ?? null,\n type: parent?.type,\n accepts: parent?.accepts,\n position: dropIndexInParent >= 0 ? dropIndexInParent : 0,\n isWithinParent: parentDepth ? depth > parentDepth : false,\n previousNode: previousNode\n ? {\n id: previousNode.props.id,\n depth: getNodeDepth(previousNode),\n accepts: previousNode.props.accepts,\n }\n : null,\n };\n};\n"],"names":["getNodeDepth","node","getDragDepth","offset","INDENTATION_WIDTH","getNodeDepthConstraint","calculateMaxDepth","previousNode","nextNode","previousNodeDepth","nextNodeDepth","calculateMinDepth","getProjection","nodes","activeId","overId","dragOffset","overNodeIndex","props","activeNodeIndex","activeNode","newNodes","arrayMove","activeNodeDepthConstraint","dragDepth","projectedDepth","_a","maxDepth","minDepth","depth","getParentId","ROOT_ID","item","getParent","parentId","parent","correctionDueDragDirection","nodesInParent","dropIndexInParent","overNextIndex","nextNodePosition","parentDepth"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.es.js","sources":["../../../src/components/Tree/types.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type Active, type Collision, type Over, type Translate } from '@dnd-kit/core';\nimport { type useSortable } from '@dnd-kit/sortable';\nimport { type MutableRefObject, type ReactElement, type ReactNode } from 'react';\n\nimport { type InternalTreeItemProps } from './TreeItem';\nimport { type Overlay } from './TreeItem/TreeItemOverlay';\nimport { type Projection } from './helpers';\n\nexport type SensorContext = MutableRefObject<{\n nodes: ReactElement[];\n offset: number;\n}>;\n\nexport type TreeNodeWithoutElements = {\n id: string;\n level: number;\n parentId: string;\n extendedId: string;\n nodes: TreeNodeWithoutElements[];\n};\n\nexport type OnSelectCallback = (id: string, ignoreRemoveSelected?: boolean, nodes?: TreeNodeWithoutElements[]) => void;\nexport type OnSelectInternalCallback = (id: string, ignoreRemoveSelected?: boolean) => void;\nexport type OnExpandCallback = (id: string) => void;\n\nexport type OnShrinkCallback = (id: string) => void;\nexport type OnTreeDropCallback = (args: {\n id: string;\n parentId: Nullable<string>;\n sort: number;\n contentComponent: Nullable<ReactNode>;\n parentType?: string;\n}) => void;\n\nexport type DragHandlerPosition = 'left' | 'right' | 'none';\nexport type TreeItemPropsSizing = 'none' | 'x-small' | 'small' | 'medium' | 'large' | 'x-large';\ntype TreeItemContentFit = 'content-fit' | 'single-line';\ntype TreeItemBorderStyle = 'solid' | 'dashed' | 'dotted' | 'none';\nexport type TreeItemColors = 'neutral' | 'soft' | 'none';\ntype TreeItemColorStyles = {\n textColor: string;\n selectedTextColor: string;\n backgroundColor: string;\n selectedBackgroundColor: string;\n pressedBackgroundColor: string;\n dragHanlderTextColor: string;\n selectedDragHanlderTextColor: string;\n};\n\nexport const TreeItemSpacingClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-my-0',\n 'x-small': 'tw-my-0.5',\n small: 'tw-my-1',\n medium: 'tw-my-1.5',\n large: 'tw-my-2',\n 'x-large': 'tw-my-2.5',\n};\n\nexport const TreeItemShadowClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-shadow-none',\n 'x-small': 'tw-shadow-sm',\n small: 'tw-shadow',\n medium: 'tw-shadow-md',\n large: 'tw-shadow-lg',\n 'x-large': 'tw-shadow-xl',\n};\n\nexport const TreeItemBorderRadiusClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-rounded-none',\n 'x-small': 'tw-rounded-sm',\n small: 'tw-rounded',\n medium: 'tw-rounded-md',\n large: 'tw-rounded-lg',\n 'x-large': 'tw-rounded-xl',\n};\n\nexport const TreeItemBorderClassMap: Record<Exclude<TreeItemPropsSizing, 'x-large'>, string> = {\n none: 'tw-border-0',\n 'x-small': 'tw-border',\n small: 'tw-border-2',\n medium: 'tw-border-4',\n large: 'tw-border-8',\n};\n\nexport const TreeItemBorderStyleClassMap: Record<TreeItemBorderStyle, string> = {\n none: 'tw-border-none',\n solid: 'tw-border-solid',\n dotted: 'tw-border-dotted',\n dashed: 'tw-border-dashed',\n};\n\nexport const TreeItemColorsClassMap: Record<TreeItemColors, TreeItemColorStyles> = {\n none: {\n textColor: '',\n selectedTextColor: '',\n backgroundColor: '',\n selectedBackgroundColor: '',\n pressedBackgroundColor: '',\n dragHanlderTextColor: '',\n selectedDragHanlderTextColor: '',\n },\n soft: {\n textColor: 'tw-text-primary',\n selectedTextColor: 'tw-font-medium tw-text-primary',\n backgroundColor: 'group-hover:tw-bg-surface-hover',\n selectedBackgroundColor: 'tw-bg-surface-active group-hover:tw-bg-surface-hover',\n pressedBackgroundColor: 'group-active:tw-bg-surface-active',\n dragHanlderTextColor: 'tw-text-primary',\n selectedDragHanlderTextColor: 'tw-text-primary',\n },\n neutral: {\n textColor: 'tw-text-primary',\n selectedTextColor: 'tw-font-medium tw-text-primary',\n backgroundColor: 'group-hover:tw-bg-container-secondary-hover',\n selectedBackgroundColor: 'tw-bg-container-secondary-active group-hover:tw-bg-container-secondary-hover',\n pressedBackgroundColor: 'group-active:tw-bg-container-secondary-active',\n dragHanlderTextColor: 'tw-text-primary',\n selectedDragHanlderTextColor: 'tw-text-primary',\n },\n};\n\nexport type TreeItemStyling = {\n spacingY?: TreeItemPropsSizing;\n contentHight?: TreeItemContentFit;\n shadow?: TreeItemPropsSizing;\n borderRadius?: TreeItemPropsSizing;\n borderWidth?: Exclude<TreeItemPropsSizing, 'x-large'>;\n borderStyle?: TreeItemBorderStyle;\n activeColorStyle?: TreeItemColors;\n};\n\nexport type TreeProps = {\n id: string;\n draggable?: boolean;\n children: ReactNode;\n multiselect?: boolean;\n selectedIds?: string[];\n expandedIds?: string[];\n dragHandlerPosition?: DragHandlerPosition;\n enableDragDelay?: boolean;\n showDragHandlerOnHoverOnly?: boolean;\n showContentWhileDragging?: boolean;\n itemStyle?: TreeItemStyling;\n 'data-test-id'?: string;\n onSelect?: OnSelectCallback;\n onExpand?: OnExpandCallback;\n onShrink?: OnShrinkCallback;\n onDrop?: OnTreeDropCallback;\n};\n\ntype TreeItemBaseProps = {\n id: string;\n 'data-test-id'?: string;\n onDrop?: OnTreeDropCallback;\n /**\n * The type of item being dragged.\n */\n type?: string;\n /**\n * The kinds of dragItems this dropTarget accepts\n * @example 'itemA, itemA-within, itemA-deeper'\n * if suffix '-within' is appended, then it will allow dropping item inside it\n * if suffix '-deeper' is appended, then it will allow expand because it will allow dropping in levels deeper\n */\n accepts?: string;\n children?: ReactNode;\n draggable?: boolean;\n /** Removes the expand caret, recovering the space ignoring if there are children */\n expandable?: boolean;\n showDragHandlerOnHoverOnly?: boolean;\n /**\n * dragHandlerPosition = 'none' makes the whole item draggble rather than only the dragHandler\n */\n dragHandlerPosition?: DragHandlerPosition;\n showContentWhileDragging?: boolean;\n itemStyle?: TreeItemStyling;\n showCaret?: boolean;\n ignoreItemDoubleClick?: boolean;\n expandOnSelect?: boolean;\n levelConstraint?: Nullable<number>;\n};\n\nexport type TreeItemWithLabelProps = {\n label?: string;\n contentComponent?: never;\n} & TreeItemBaseProps;\n\nexport type TreeItemWithContentComponentProps = {\n label?: never;\n contentComponent?: ReactNode;\n} & TreeItemBaseProps;\n\nexport type SortableProps = Partial<ReturnType<typeof useSortable>>;\n\nexport type TreeItemProps = SortableProps & (TreeItemWithLabelProps | TreeItemWithContentComponentProps);\n\nexport type TreeItemMultiselectProps = Omit<\n TreeItemProps,\n | 'type'\n | 'onDrop'\n | 'accepts'\n | 'registerOverlay'\n | 'draggable'\n | 'showContentWhileDragging'\n | 'ignoreItemDoubleClick'\n | 'showDragHandlerOnHoverOnly'\n | 'dragHandlerPosition'\n> & {\n isDisabled?: boolean;\n checkBoxPosition?: DragHandlerPosition;\n onBeforeUnregisterChildren?: (id: string, nodes: TreeNodeWithoutElements[]) => void;\n};\n\nexport type SortableTreeItemProps = TreeItemProps;\n\nexport type TreeItemState = {\n parentId?: string;\n childrenIds?: string[];\n level: number;\n domElement?: HTMLElement;\n};\n\nexport type TreeState = {\n selectedIds: Set<string>;\n expandedIds: Set<string>;\n selectionMode: 'single' | 'multiselect';\n overlay?: Overlay;\n nodes: ReactElement<InternalTreeItemProps>[];\n rootNodes: ReactElement<InternalTreeItemProps>[];\n projection: Nullable<Projection>;\n};\n\nexport type TreeStateAction =\n | { type: 'REPLACE_STATE'; payload: TreeState }\n | { type: 'REGISTER_OVERLAY_ITEM'; payload: Overlay }\n | { type: 'SET_SELECT'; payload: string }\n | { type: 'EXPAND_NODE'; payload: string }\n | { type: 'SHRINK_NODE'; payload: string }\n | { type: 'SET_HIDDEN'; payload: { ids: string[]; isHidden: boolean } }\n | { type: 'SET_SELECTION_MODE'; payload: { selectionMode: TreeState['selectionMode'] } }\n | { type: 'SET_PROJECTION'; payload: Nullable<Projection> }\n | { type: 'REGISTER_NODE_CHILDREN'; payload: { id: string; children: ReactElement<InternalTreeItemProps>[] } }\n | { type: 'UNREGISTER_NODE_CHILDREN'; payload: string }\n | { type: 'REPLACE_EXPANDED'; payload: string[] }\n | { type: 'REPLACE_SELECTED'; payload: string[] }\n | { type: 'REGISTER_ROOT_NODES'; payload: ReactElement<InternalTreeItemProps>[] }\n | { type: 'REGISTER_NODES'; payload: ReactElement<InternalTreeItemProps>[] };\n\nexport type RegisterNodeChildrenPayload = Extract<TreeStateAction, { type: 'REGISTER_NODE_CHILDREN' }>['payload'];\n\nexport type CollisionPosition = Nullable<'before' | 'within' | 'after'>;\n\n// dnd-kit type overrides\nexport type TreeActive = Omit<Active, 'id'> & {\n id: string;\n};\n\nexport type TreeOver = Omit<Over, 'id'> & {\n id: string;\n};\n\ntype TreeCollision = Omit<Collision, 'id'> & {\n id: string;\n};\n\ntype TreeDragEvent = {\n activatorEvent: Event;\n active: TreeActive;\n collisions: TreeCollision[] | null;\n delta: Translate;\n over: TreeOver | null;\n};\n\nexport type TreeDragStartEvent = Pick<TreeDragEvent, 'active'>;\nexport type TreeDragMoveEvent = TreeDragEvent;\nexport type TreeDragOverEvent = TreeDragMoveEvent;\nexport type TreeDragEndEvent = TreeDragEvent;\nexport type TreeDragCancelEvent = TreeDragEndEvent;\n\nexport type TreeAnnouncements = {\n onDragStart({ active }: Pick<TreeDragEvent, 'active'>): string | undefined;\n onDragMove?({ active, over }: TreeDragEvent): string | undefined;\n onDragOver({ active, over }: TreeDragEvent): string | undefined;\n onDragEnd({ active, over }: TreeDragEvent): string | undefined;\n onDragCancel({ active, over }: TreeDragEvent): string | undefined;\n};\n"],"names":["TreeItemSpacingClassMap","TreeItemShadowClassMap","TreeItemBorderRadiusClassMap","TreeItemBorderClassMap","TreeItemBorderStyleClassMap","TreeItemColorsClassMap"],"mappings":"AAmDO,MAAMA,IAA+D;AAAA,EACxE,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAA8D;AAAA,EACvE,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAAoE;AAAA,EAC7E,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAAkF;AAAA,EAC3F,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAEaC,IAAmE;AAAA,EAC5E,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AACZ,GAEaC,IAAsE;AAAA,EAC/E,MAAM;AAAA,IACF,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAAA,EAElC,MAAM;AAAA,IACF,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAAA,EAElC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAEtC;"}
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../../../src/components/Tree/types.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type Active, type Collision, type Over, type Translate } from '@dnd-kit/core';\nimport { type useSortable } from '@dnd-kit/sortable';\nimport { type MutableRefObject, type ReactElement, type ReactNode } from 'react';\n\nimport { type Projection } from './helpers';\nimport { type InternalTreeItemProps } from './TreeItem';\nimport { type Overlay } from './TreeItem/TreeItemOverlay';\n\nexport type SensorContext = MutableRefObject<{\n nodes: ReactElement[];\n offset: number;\n}>;\n\nexport type TreeNodeWithoutElements = {\n id: string;\n level: number;\n parentId: string;\n extendedId: string;\n nodes: TreeNodeWithoutElements[];\n};\n\nexport type OnSelectCallback = (id: string, ignoreRemoveSelected?: boolean, nodes?: TreeNodeWithoutElements[]) => void;\nexport type OnSelectInternalCallback = (id: string, ignoreRemoveSelected?: boolean) => void;\nexport type OnExpandCallback = (id: string) => void;\n\nexport type OnShrinkCallback = (id: string) => void;\nexport type OnTreeDropCallback = (args: {\n id: string;\n parentId: Nullable<string>;\n sort: number;\n contentComponent: Nullable<ReactNode>;\n parentType?: string;\n}) => void;\n\nexport type DragHandlerPosition = 'left' | 'right' | 'none';\nexport type TreeItemPropsSizing = 'none' | 'x-small' | 'small' | 'medium' | 'large' | 'x-large';\ntype TreeItemContentFit = 'content-fit' | 'single-line';\ntype TreeItemBorderStyle = 'solid' | 'dashed' | 'dotted' | 'none';\nexport type TreeItemColors = 'neutral' | 'soft' | 'none';\ntype TreeItemColorStyles = {\n textColor: string;\n selectedTextColor: string;\n backgroundColor: string;\n selectedBackgroundColor: string;\n pressedBackgroundColor: string;\n dragHanlderTextColor: string;\n selectedDragHanlderTextColor: string;\n};\n\nexport const TreeItemSpacingClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-my-0',\n 'x-small': 'tw-my-0.5',\n small: 'tw-my-1',\n medium: 'tw-my-1.5',\n large: 'tw-my-2',\n 'x-large': 'tw-my-2.5',\n};\n\nexport const TreeItemShadowClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-shadow-none',\n 'x-small': 'tw-shadow-sm',\n small: 'tw-shadow',\n medium: 'tw-shadow-md',\n large: 'tw-shadow-lg',\n 'x-large': 'tw-shadow-xl',\n};\n\nexport const TreeItemBorderRadiusClassMap: Record<TreeItemPropsSizing, string> = {\n none: 'tw-rounded-none',\n 'x-small': 'tw-rounded-sm',\n small: 'tw-rounded',\n medium: 'tw-rounded-md',\n large: 'tw-rounded-lg',\n 'x-large': 'tw-rounded-xl',\n};\n\nexport const TreeItemBorderClassMap: Record<Exclude<TreeItemPropsSizing, 'x-large'>, string> = {\n none: 'tw-border-0',\n 'x-small': 'tw-border',\n small: 'tw-border-2',\n medium: 'tw-border-4',\n large: 'tw-border-8',\n};\n\nexport const TreeItemBorderStyleClassMap: Record<TreeItemBorderStyle, string> = {\n none: 'tw-border-none',\n solid: 'tw-border-solid',\n dotted: 'tw-border-dotted',\n dashed: 'tw-border-dashed',\n};\n\nexport const TreeItemColorsClassMap: Record<TreeItemColors, TreeItemColorStyles> = {\n none: {\n textColor: '',\n selectedTextColor: '',\n backgroundColor: '',\n selectedBackgroundColor: '',\n pressedBackgroundColor: '',\n dragHanlderTextColor: '',\n selectedDragHanlderTextColor: '',\n },\n soft: {\n textColor: 'tw-text-primary',\n selectedTextColor: 'tw-font-medium tw-text-primary',\n backgroundColor: 'group-hover:tw-bg-surface-hover',\n selectedBackgroundColor: 'tw-bg-surface-active group-hover:tw-bg-surface-hover',\n pressedBackgroundColor: 'group-active:tw-bg-surface-active',\n dragHanlderTextColor: 'tw-text-primary',\n selectedDragHanlderTextColor: 'tw-text-primary',\n },\n neutral: {\n textColor: 'tw-text-primary',\n selectedTextColor: 'tw-font-medium tw-text-primary',\n backgroundColor: 'group-hover:tw-bg-container-secondary-hover',\n selectedBackgroundColor: 'tw-bg-container-secondary-active group-hover:tw-bg-container-secondary-hover',\n pressedBackgroundColor: 'group-active:tw-bg-container-secondary-active',\n dragHanlderTextColor: 'tw-text-primary',\n selectedDragHanlderTextColor: 'tw-text-primary',\n },\n};\n\nexport type TreeItemStyling = {\n spacingY?: TreeItemPropsSizing;\n contentHight?: TreeItemContentFit;\n shadow?: TreeItemPropsSizing;\n borderRadius?: TreeItemPropsSizing;\n borderWidth?: Exclude<TreeItemPropsSizing, 'x-large'>;\n borderStyle?: TreeItemBorderStyle;\n activeColorStyle?: TreeItemColors;\n};\n\nexport type TreeProps = {\n id: string;\n draggable?: boolean;\n children: ReactNode;\n multiselect?: boolean;\n selectedIds?: string[];\n expandedIds?: string[];\n dragHandlerPosition?: DragHandlerPosition;\n enableDragDelay?: boolean;\n showDragHandlerOnHoverOnly?: boolean;\n showContentWhileDragging?: boolean;\n itemStyle?: TreeItemStyling;\n 'data-test-id'?: string;\n onSelect?: OnSelectCallback;\n onExpand?: OnExpandCallback;\n onShrink?: OnShrinkCallback;\n onDrop?: OnTreeDropCallback;\n};\n\ntype TreeItemBaseProps = {\n id: string;\n 'data-test-id'?: string;\n onDrop?: OnTreeDropCallback;\n /**\n * The type of item being dragged.\n */\n type?: string;\n /**\n * The kinds of dragItems this dropTarget accepts\n * @example 'itemA, itemA-within, itemA-deeper'\n * if suffix '-within' is appended, then it will allow dropping item inside it\n * if suffix '-deeper' is appended, then it will allow expand because it will allow dropping in levels deeper\n */\n accepts?: string;\n children?: ReactNode;\n draggable?: boolean;\n /** Removes the expand caret, recovering the space ignoring if there are children */\n expandable?: boolean;\n showDragHandlerOnHoverOnly?: boolean;\n /**\n * dragHandlerPosition = 'none' makes the whole item draggble rather than only the dragHandler\n */\n dragHandlerPosition?: DragHandlerPosition;\n showContentWhileDragging?: boolean;\n itemStyle?: TreeItemStyling;\n showCaret?: boolean;\n ignoreItemDoubleClick?: boolean;\n expandOnSelect?: boolean;\n levelConstraint?: Nullable<number>;\n};\n\nexport type TreeItemWithLabelProps = {\n label?: string;\n contentComponent?: never;\n} & TreeItemBaseProps;\n\nexport type TreeItemWithContentComponentProps = {\n label?: never;\n contentComponent?: ReactNode;\n} & TreeItemBaseProps;\n\nexport type SortableProps = Partial<ReturnType<typeof useSortable>>;\n\nexport type TreeItemProps = SortableProps & (TreeItemWithLabelProps | TreeItemWithContentComponentProps);\n\nexport type TreeItemMultiselectProps = Omit<\n TreeItemProps,\n | 'type'\n | 'onDrop'\n | 'accepts'\n | 'registerOverlay'\n | 'draggable'\n | 'showContentWhileDragging'\n | 'ignoreItemDoubleClick'\n | 'showDragHandlerOnHoverOnly'\n | 'dragHandlerPosition'\n> & {\n isDisabled?: boolean;\n checkBoxPosition?: DragHandlerPosition;\n onBeforeUnregisterChildren?: (id: string, nodes: TreeNodeWithoutElements[]) => void;\n};\n\nexport type SortableTreeItemProps = TreeItemProps;\n\nexport type TreeItemState = {\n parentId?: string;\n childrenIds?: string[];\n level: number;\n domElement?: HTMLElement;\n};\n\nexport type TreeState = {\n selectedIds: Set<string>;\n expandedIds: Set<string>;\n selectionMode: 'single' | 'multiselect';\n overlay?: Overlay;\n nodes: ReactElement<InternalTreeItemProps>[];\n rootNodes: ReactElement<InternalTreeItemProps>[];\n projection: Nullable<Projection>;\n};\n\nexport type TreeStateAction =\n | { type: 'REPLACE_STATE'; payload: TreeState }\n | { type: 'REGISTER_OVERLAY_ITEM'; payload: Overlay }\n | { type: 'SET_SELECT'; payload: string }\n | { type: 'EXPAND_NODE'; payload: string }\n | { type: 'SHRINK_NODE'; payload: string }\n | { type: 'SET_HIDDEN'; payload: { ids: string[]; isHidden: boolean } }\n | { type: 'SET_SELECTION_MODE'; payload: { selectionMode: TreeState['selectionMode'] } }\n | { type: 'SET_PROJECTION'; payload: Nullable<Projection> }\n | { type: 'REGISTER_NODE_CHILDREN'; payload: { id: string; children: ReactElement<InternalTreeItemProps>[] } }\n | { type: 'UNREGISTER_NODE_CHILDREN'; payload: string }\n | { type: 'REPLACE_EXPANDED'; payload: string[] }\n | { type: 'REPLACE_SELECTED'; payload: string[] }\n | { type: 'REGISTER_ROOT_NODES'; payload: ReactElement<InternalTreeItemProps>[] }\n | { type: 'REGISTER_NODES'; payload: ReactElement<InternalTreeItemProps>[] };\n\nexport type RegisterNodeChildrenPayload = Extract<TreeStateAction, { type: 'REGISTER_NODE_CHILDREN' }>['payload'];\n\nexport type CollisionPosition = Nullable<'before' | 'within' | 'after'>;\n\n// dnd-kit type overrides\nexport type TreeActive = Omit<Active, 'id'> & {\n id: string;\n};\n\nexport type TreeOver = Omit<Over, 'id'> & {\n id: string;\n};\n\ntype TreeCollision = Omit<Collision, 'id'> & {\n id: string;\n};\n\ntype TreeDragEvent = {\n activatorEvent: Event;\n active: TreeActive;\n collisions: TreeCollision[] | null;\n delta: Translate;\n over: TreeOver | null;\n};\n\nexport type TreeDragStartEvent = Pick<TreeDragEvent, 'active'>;\nexport type TreeDragMoveEvent = TreeDragEvent;\nexport type TreeDragOverEvent = TreeDragMoveEvent;\nexport type TreeDragEndEvent = TreeDragEvent;\nexport type TreeDragCancelEvent = TreeDragEndEvent;\n\nexport type TreeAnnouncements = {\n onDragStart({ active }: Pick<TreeDragEvent, 'active'>): string | undefined;\n onDragMove?({ active, over }: TreeDragEvent): string | undefined;\n onDragOver({ active, over }: TreeDragEvent): string | undefined;\n onDragEnd({ active, over }: TreeDragEvent): string | undefined;\n onDragCancel({ active, over }: TreeDragEvent): string | undefined;\n};\n"],"names":["TreeItemSpacingClassMap","TreeItemShadowClassMap","TreeItemBorderRadiusClassMap","TreeItemBorderClassMap","TreeItemBorderStyleClassMap","TreeItemColorsClassMap"],"mappings":"AAmDO,MAAMA,IAA+D;AAAA,EACxE,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAA8D;AAAA,EACvE,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAAoE;AAAA,EAC7E,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AACf,GAEaC,IAAkF;AAAA,EAC3F,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAEaC,IAAmE;AAAA,EAC5E,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AACZ,GAEaC,IAAsE;AAAA,EAC/E,MAAM;AAAA,IACF,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAAA,EAElC,MAAM;AAAA,IACF,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAAA,EAElC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,EAAA;AAEtC;"}
|