@frontify/fondue 12.0.4 → 12.0.5

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.
@@ -1,18 +1,18 @@
1
1
  import { jsx as i, jsxs as g } from "react/jsx-runtime";
2
2
  import { Plate as G, PlateContent as M } from "@udecode/plate-core";
3
- import S from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
4
- import { useMemo as z, useCallback as E } from "react";
5
- import { BlurObserver as A } from "./BlurObserver.es.js";
6
- import { useMemoizedId as D } from "../../hooks/useMemoizedId.es.js";
7
- import { ContentReplacement as b } from "./ContentReplacement.es.js";
8
- import { RichTextEditorProvider as j } from "./context/RichTextEditorContext.es.js";
9
- import { PaddingSizes as B } from "./types.es.js";
10
- import { useEditorState as H } from "./hooks/useEditorState.es.js";
11
- import { KEY_ELEMENT_BREAK_AFTER_COLUMN as U, GAP_DEFAULT as J } from "./Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js";
12
- import { forceToFocusNextElement as Y } from "./helpers/forceToFocusElement.es.js";
3
+ import { useMemo as S, useCallback as E } from "react";
4
+ import { BlurObserver as z } from "./BlurObserver.es.js";
5
+ import { useMemoizedId as A } from "../../hooks/useMemoizedId.es.js";
6
+ import { ContentReplacement as D } from "./ContentReplacement.es.js";
7
+ import { RichTextEditorProvider as b } from "./context/RichTextEditorContext.es.js";
8
+ import { PaddingSizes as j } from "./types.es.js";
9
+ import { useEditorState as B } from "./hooks/useEditorState.es.js";
10
+ import { KEY_ELEMENT_BREAK_AFTER_COLUMN as H, GAP_DEFAULT as U } from "./Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js";
11
+ import { forceToFocusNextElement as J } from "./helpers/forceToFocusElement.es.js";
13
12
  import { Position as y } from "./components/EditorPositioningWrapper/types.es.js";
14
- import { defaultPlugins as $ } from "./Plugins/defaultPlugins.es.js";
15
- import { RenderPlaceholder as q } from "./components/RenderPlaceholder/RenderPlaceholder.es.js";
13
+ import { defaultPlugins as Y } from "./Plugins/defaultPlugins.es.js";
14
+ import { RenderPlaceholder as $ } from "./components/RenderPlaceholder/RenderPlaceholder.es.js";
15
+ import q from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
16
16
  import { parseRawValue as v } from "./utils/parseRawValue.es.js";
17
17
  const Q = ({
18
18
  id: T,
@@ -21,9 +21,9 @@ const Q = ({
21
21
  readonly: N = !1,
22
22
  onTextChange: R,
23
23
  onBlur: n,
24
- padding: x = B.None,
24
+ padding: x = j.None,
25
25
  position: s = y.FLOATING,
26
- plugins: l = $,
26
+ plugins: l = Y,
27
27
  updateValueOnChange: P = !1,
28
28
  onValueChanged: F,
29
29
  border: O = !0,
@@ -31,13 +31,13 @@ const Q = ({
31
31
  hideExternalFloatingModals: w
32
32
  }) => {
33
33
  var f, u;
34
- const r = D(T), { localValue: a, onChange: C, memoizedValue: I, config: t } = H({
34
+ const r = A(T), { localValue: a, onChange: C, memoizedValue: I, config: t } = B({
35
35
  editorId: r,
36
36
  initialValue: m,
37
37
  onTextChange: R,
38
38
  plugins: l,
39
39
  onValueChanged: F
40
- }), o = l.plugins.find((e) => e.key === U), c = ((f = o == null ? void 0 : o.options) == null ? void 0 : f.columns) ?? 1, d = ((u = o == null ? void 0 : o.options) == null ? void 0 : u.gap) ?? J, K = z(
40
+ }), o = l.plugins.find((e) => e.key === H), c = ((f = o == null ? void 0 : o.options) == null ? void 0 : f.columns) ?? 1, d = ((u = o == null ? void 0 : o.options) == null ? void 0 : u.gap) ?? U, K = S(
41
41
  () => ({
42
42
  columns: c,
43
43
  columnGap: d,
@@ -47,23 +47,23 @@ const Q = ({
47
47
  ), L = E(() => {
48
48
  n && n(JSON.stringify(a.current));
49
49
  }, [n, a]), _ = E((e) => {
50
- e.code === "Tab" && Y(e, !e.shiftKey);
50
+ e.code === "Tab" && J(e, !e.shiftKey);
51
51
  }, []), p = {
52
52
  placeholder: h,
53
- renderPlaceholder: q,
53
+ renderPlaceholder: $,
54
54
  readOnly: N,
55
55
  onBlur: L,
56
56
  className: `${x}`,
57
57
  style: K,
58
58
  onKeyDown: _,
59
- scrollSelectionIntoView: S
59
+ scrollSelectionIntoView: q
60
60
  };
61
- return /* @__PURE__ */ i(j, { styles: t.styles(), position: s, border: O, editorId: r, children: /* @__PURE__ */ g(G, { id: r, onChange: C, plugins: t.plugins, initialValue: I, children: [
61
+ return /* @__PURE__ */ i(b, { styles: t.styles(), position: s, border: O, editorId: r, children: /* @__PURE__ */ g(G, { id: r, onChange: C, plugins: t.plugins, initialValue: I, children: [
62
62
  /* @__PURE__ */ i(M, { ...p }),
63
63
  !p.readOnly && t.toolbar(V),
64
64
  t.inline(),
65
- P && /* @__PURE__ */ i(b, { value: v({ editorId: r, raw: m, plugins: l }) }),
66
- s === y.FLOATING && /* @__PURE__ */ i(A, { hideExternalFloatingModals: w })
65
+ P && /* @__PURE__ */ i(D, { value: v({ editorId: r, raw: m, plugins: l }) }),
66
+ s === y.FLOATING && /* @__PURE__ */ i(z, { hideExternalFloatingModals: w })
67
67
  ] }) });
68
68
  };
69
69
  Q.displayName = "FondueRichTextEditor";
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Plate, PlateContent, type TEditableProps } from '@udecode/plate-core';\nimport noop from 'lodash-es/noop';\nimport { type KeyboardEvent, useCallback, useMemo } from 'react';\n\nimport { BlurObserver } from '@components/RichTextEditor/BlurObserver';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\n\nimport { ContentReplacement } from './ContentReplacement';\nimport { GAP_DEFAULT, KEY_ELEMENT_BREAK_AFTER_COLUMN, type PluginComposer, defaultPlugins } from './Plugins';\nimport { Position } from './components/EditorPositioningWrapper';\nimport { RenderPlaceholder } from './components/RenderPlaceholder';\nimport { RichTextEditorProvider } from './context/RichTextEditorContext';\nimport { forceToFocusNextElement } from './helpers';\nimport { useEditorState } from './hooks';\nimport { PaddingSizes, type TreeOfNodes } from './types';\nimport { parseRawValue } from './utils';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n onValueChanged?: (value: TreeOfNodes | null) => void;\n border?: boolean;\n updateValueOnChange?: boolean; // Only set to true when you are sure that performance isn't an issue\n toolbarWidth?: number;\n hideExternalFloatingModals?: (editorId: string) => void;\n};\n\nexport const RichTextEditor = ({\n id,\n value,\n placeholder = '',\n readonly: readOnly = false,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins = defaultPlugins,\n updateValueOnChange = false,\n onValueChanged,\n border = true,\n toolbarWidth,\n hideExternalFloatingModals,\n}: RichTextEditorProps) => {\n const editorId = useMemoizedId(id);\n const { localValue, onChange, memoizedValue, config } = useEditorState({\n editorId,\n initialValue: value,\n onTextChange,\n plugins,\n onValueChanged,\n });\n const breakAfterPlugin = plugins.plugins.find((plugin) => plugin.key === KEY_ELEMENT_BREAK_AFTER_COLUMN);\n const columns = breakAfterPlugin?.options?.columns ?? 1;\n const columnGap = breakAfterPlugin?.options?.gap ?? GAP_DEFAULT;\n\n const style = useMemo(\n () => ({\n columns,\n columnGap,\n outline: 'none',\n }),\n [columns, columnGap],\n );\n\n const onBlurHandler = useCallback(() => {\n if (onBlur) {\n onBlur(JSON.stringify(localValue.current));\n }\n }, [onBlur, localValue]);\n\n const onKeyDownHandler = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (event.code === 'Tab') {\n forceToFocusNextElement(event, !event.shiftKey);\n }\n }, []);\n\n const editableProps: TEditableProps = {\n placeholder,\n renderPlaceholder: RenderPlaceholder,\n readOnly,\n onBlur: onBlurHandler,\n className: `${padding}`,\n style,\n onKeyDown: onKeyDownHandler,\n scrollSelectionIntoView: noop,\n };\n\n return (\n <RichTextEditorProvider styles={config.styles()} position={position} border={border} editorId={editorId}>\n <Plate id={editorId} onChange={onChange} plugins={config.plugins} initialValue={memoizedValue}>\n <PlateContent {...editableProps} />\n {!editableProps.readOnly && config.toolbar(toolbarWidth)}\n {config.inline()}\n {updateValueOnChange && <ContentReplacement value={parseRawValue({ editorId, raw: value, plugins })} />}\n {position === Position.FLOATING && (\n <BlurObserver hideExternalFloatingModals={hideExternalFloatingModals} />\n )}\n </Plate>\n </RichTextEditorProvider>\n );\n};\nRichTextEditor.displayName = 'FondueRichTextEditor';\n"],"names":["RichTextEditor","id","value","placeholder","readOnly","onTextChange","onBlur","padding","PaddingSizes","position","Position","plugins","defaultPlugins","updateValueOnChange","onValueChanged","border","toolbarWidth","hideExternalFloatingModals","editorId","useMemoizedId","localValue","onChange","memoizedValue","config","useEditorState","breakAfterPlugin","plugin","KEY_ELEMENT_BREAK_AFTER_COLUMN","columns","_a","columnGap","_b","GAP_DEFAULT","style","useMemo","onBlurHandler","useCallback","onKeyDownHandler","event","forceToFocusNextElement","editableProps","RenderPlaceholder","noop","RichTextEditorProvider","jsxs","Plate","jsx","PlateContent","ContentReplacement","parseRawValue","BlurObserver"],"mappings":";;;;;;;;;;;;;;;;AAoCO,MAAMA,IAAiB,CAAC;AAAA,EAC3B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAUC,IAAW;AAAA,EACrB,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC,IAAUC,EAAa;AAAA,EACvB,UAAAC,IAAWC,EAAS;AAAA,EACpB,SAAAC,IAAUC;AAAA,EACV,qBAAAC,IAAsB;AAAA,EACtB,gBAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,cAAAC;AAAA,EACA,4BAAAC;AACJ,MAA2B;;AACjB,QAAAC,IAAWC,EAAclB,CAAE,GAC3B,EAAE,YAAAmB,GAAY,UAAAC,GAAU,eAAAC,GAAe,QAAAC,EAAA,IAAWC,EAAe;AAAA,IACnE,UAAAN;AAAA,IACA,cAAchB;AAAA,IACd,cAAAG;AAAA,IACA,SAAAM;AAAA,IACA,gBAAAG;AAAA,EAAA,CACH,GACKW,IAAmBd,EAAQ,QAAQ,KAAK,CAACe,MAAWA,EAAO,QAAQC,CAA8B,GACjGC,MAAUC,IAAAJ,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAI,EAA2B,YAAW,GAChDC,MAAYC,IAAAN,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAM,EAA2B,QAAOC,GAE9CC,IAAQC;AAAA,IACV,OAAO;AAAA,MACH,SAAAN;AAAA,MACA,WAAAE;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,IAEb,CAACF,GAASE,CAAS;AAAA,EAAA,GAGjBK,IAAgBC,EAAY,MAAM;AACpC,IAAI9B,KACAA,EAAO,KAAK,UAAUc,EAAW,OAAO,CAAC;AAAA,EAC7C,GACD,CAACd,GAAQc,CAAU,CAAC,GAEjBiB,IAAmBD,EAAY,CAACE,MAAyC;AACvE,IAAAA,EAAM,SAAS,SACSC,EAAAD,GAAO,CAACA,EAAM,QAAQ;AAAA,EAEtD,GAAG,CAAE,CAAA,GAECE,IAAgC;AAAA,IAClC,aAAArC;AAAA,IACA,mBAAmBsC;AAAA,IACnB,UAAArC;AAAA,IACA,QAAQ+B;AAAA,IACR,WAAW,GAAG5B,CAAO;AAAA,IACrB,OAAA0B;AAAA,IACA,WAAWI;AAAA,IACX,yBAAyBK;AAAA,EAAA;AAG7B,2BACKC,GAAuB,EAAA,QAAQpB,EAAO,OAAO,GAAG,UAAAd,GAAoB,QAAAM,GAAgB,UAAAG,GACjF,UAAC,gBAAA0B,EAAAC,GAAA,EAAM,IAAI3B,GAAU,UAAAG,GAAoB,SAASE,EAAO,SAAS,cAAcD,GAC5E,UAAA;AAAA,IAAC,gBAAAwB,EAAAC,GAAA,EAAc,GAAGP,GAAe;AAAA,IAChC,CAACA,EAAc,YAAYjB,EAAO,QAAQP,CAAY;AAAA,IACtDO,EAAO,OAAO;AAAA,IACdV,KAAwB,gBAAAiC,EAAAE,GAAA,EAAmB,OAAOC,EAAc,EAAE,UAAA/B,GAAU,KAAKhB,GAAO,SAAAS,EAAQ,CAAC,EAAG,CAAA;AAAA,IACpGF,MAAaC,EAAS,YACnB,gBAAAoC,EAACI,KAAa,4BAAAjC,GAAwD;AAAA,EAAA,EAE9E,CAAA,EACJ,CAAA;AAER;AACAjB,EAAe,cAAc;"}
1
+ {"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Plate, PlateContent, type TEditableProps } from '@udecode/plate-core';\nimport { noop } from 'lodash-es';\nimport { type KeyboardEvent, useCallback, useMemo } from 'react';\n\nimport { BlurObserver } from '@components/RichTextEditor/BlurObserver';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\n\nimport { ContentReplacement } from './ContentReplacement';\nimport { GAP_DEFAULT, KEY_ELEMENT_BREAK_AFTER_COLUMN, type PluginComposer, defaultPlugins } from './Plugins';\nimport { Position } from './components/EditorPositioningWrapper';\nimport { RenderPlaceholder } from './components/RenderPlaceholder';\nimport { RichTextEditorProvider } from './context/RichTextEditorContext';\nimport { forceToFocusNextElement } from './helpers';\nimport { useEditorState } from './hooks';\nimport { PaddingSizes, type TreeOfNodes } from './types';\nimport { parseRawValue } from './utils';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n onValueChanged?: (value: TreeOfNodes | null) => void;\n border?: boolean;\n updateValueOnChange?: boolean; // Only set to true when you are sure that performance isn't an issue\n toolbarWidth?: number;\n hideExternalFloatingModals?: (editorId: string) => void;\n};\n\nexport const RichTextEditor = ({\n id,\n value,\n placeholder = '',\n readonly: readOnly = false,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins = defaultPlugins,\n updateValueOnChange = false,\n onValueChanged,\n border = true,\n toolbarWidth,\n hideExternalFloatingModals,\n}: RichTextEditorProps) => {\n const editorId = useMemoizedId(id);\n const { localValue, onChange, memoizedValue, config } = useEditorState({\n editorId,\n initialValue: value,\n onTextChange,\n plugins,\n onValueChanged,\n });\n const breakAfterPlugin = plugins.plugins.find((plugin) => plugin.key === KEY_ELEMENT_BREAK_AFTER_COLUMN);\n const columns = breakAfterPlugin?.options?.columns ?? 1;\n const columnGap = breakAfterPlugin?.options?.gap ?? GAP_DEFAULT;\n\n const style = useMemo(\n () => ({\n columns,\n columnGap,\n outline: 'none',\n }),\n [columns, columnGap],\n );\n\n const onBlurHandler = useCallback(() => {\n if (onBlur) {\n onBlur(JSON.stringify(localValue.current));\n }\n }, [onBlur, localValue]);\n\n const onKeyDownHandler = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (event.code === 'Tab') {\n forceToFocusNextElement(event, !event.shiftKey);\n }\n }, []);\n\n const editableProps: TEditableProps = {\n placeholder,\n renderPlaceholder: RenderPlaceholder,\n readOnly,\n onBlur: onBlurHandler,\n className: `${padding}`,\n style,\n onKeyDown: onKeyDownHandler,\n scrollSelectionIntoView: noop,\n };\n\n return (\n <RichTextEditorProvider styles={config.styles()} position={position} border={border} editorId={editorId}>\n <Plate id={editorId} onChange={onChange} plugins={config.plugins} initialValue={memoizedValue}>\n <PlateContent {...editableProps} />\n {!editableProps.readOnly && config.toolbar(toolbarWidth)}\n {config.inline()}\n {updateValueOnChange && <ContentReplacement value={parseRawValue({ editorId, raw: value, plugins })} />}\n {position === Position.FLOATING && (\n <BlurObserver hideExternalFloatingModals={hideExternalFloatingModals} />\n )}\n </Plate>\n </RichTextEditorProvider>\n );\n};\nRichTextEditor.displayName = 'FondueRichTextEditor';\n"],"names":["RichTextEditor","id","value","placeholder","readOnly","onTextChange","onBlur","padding","PaddingSizes","position","Position","plugins","defaultPlugins","updateValueOnChange","onValueChanged","border","toolbarWidth","hideExternalFloatingModals","editorId","useMemoizedId","localValue","onChange","memoizedValue","config","useEditorState","breakAfterPlugin","plugin","KEY_ELEMENT_BREAK_AFTER_COLUMN","columns","_a","columnGap","_b","GAP_DEFAULT","style","useMemo","onBlurHandler","useCallback","onKeyDownHandler","event","forceToFocusNextElement","editableProps","RenderPlaceholder","noop","RichTextEditorProvider","jsxs","Plate","jsx","PlateContent","ContentReplacement","parseRawValue","BlurObserver"],"mappings":";;;;;;;;;;;;;;;;AAoCO,MAAMA,IAAiB,CAAC;AAAA,EAC3B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAUC,IAAW;AAAA,EACrB,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC,IAAUC,EAAa;AAAA,EACvB,UAAAC,IAAWC,EAAS;AAAA,EACpB,SAAAC,IAAUC;AAAA,EACV,qBAAAC,IAAsB;AAAA,EACtB,gBAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,cAAAC;AAAA,EACA,4BAAAC;AACJ,MAA2B;;AACjB,QAAAC,IAAWC,EAAclB,CAAE,GAC3B,EAAE,YAAAmB,GAAY,UAAAC,GAAU,eAAAC,GAAe,QAAAC,EAAA,IAAWC,EAAe;AAAA,IACnE,UAAAN;AAAA,IACA,cAAchB;AAAA,IACd,cAAAG;AAAA,IACA,SAAAM;AAAA,IACA,gBAAAG;AAAA,EAAA,CACH,GACKW,IAAmBd,EAAQ,QAAQ,KAAK,CAACe,MAAWA,EAAO,QAAQC,CAA8B,GACjGC,MAAUC,IAAAJ,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAI,EAA2B,YAAW,GAChDC,MAAYC,IAAAN,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAM,EAA2B,QAAOC,GAE9CC,IAAQC;AAAA,IACV,OAAO;AAAA,MACH,SAAAN;AAAA,MACA,WAAAE;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,IAEb,CAACF,GAASE,CAAS;AAAA,EAAA,GAGjBK,IAAgBC,EAAY,MAAM;AACpC,IAAI9B,KACAA,EAAO,KAAK,UAAUc,EAAW,OAAO,CAAC;AAAA,EAC7C,GACD,CAACd,GAAQc,CAAU,CAAC,GAEjBiB,IAAmBD,EAAY,CAACE,MAAyC;AACvE,IAAAA,EAAM,SAAS,SACSC,EAAAD,GAAO,CAACA,EAAM,QAAQ;AAAA,EAEtD,GAAG,CAAE,CAAA,GAECE,IAAgC;AAAA,IAClC,aAAArC;AAAA,IACA,mBAAmBsC;AAAA,IACnB,UAAArC;AAAA,IACA,QAAQ+B;AAAA,IACR,WAAW,GAAG5B,CAAO;AAAA,IACrB,OAAA0B;AAAA,IACA,WAAWI;AAAA,IACX,yBAAyBK;AAAA,EAAA;AAG7B,2BACKC,GAAuB,EAAA,QAAQpB,EAAO,OAAO,GAAG,UAAAd,GAAoB,QAAAM,GAAgB,UAAAG,GACjF,UAAC,gBAAA0B,EAAAC,GAAA,EAAM,IAAI3B,GAAU,UAAAG,GAAoB,SAASE,EAAO,SAAS,cAAcD,GAC5E,UAAA;AAAA,IAAC,gBAAAwB,EAAAC,GAAA,EAAc,GAAGP,GAAe;AAAA,IAChC,CAACA,EAAc,YAAYjB,EAAO,QAAQP,CAAY;AAAA,IACtDO,EAAO,OAAO;AAAA,IACdV,KAAwB,gBAAAiC,EAAAE,GAAA,EAAmB,OAAOC,EAAc,EAAE,UAAA/B,GAAU,KAAKhB,GAAO,SAAAS,EAAQ,CAAC,EAAG,CAAA;AAAA,IACpGF,MAAaC,EAAS,YACnB,gBAAAoC,EAACI,KAAa,4BAAAjC,GAAwD;AAAA,EAAA,EAE9E,CAAA,EACJ,CAAA;AAER;AACAjB,EAAe,cAAc;"}
@@ -3,12 +3,12 @@ import { MeasuringStrategy as Ie, useSensors as Ne, useSensor as V, PointerSenso
3
3
  import { restrictToWindowEdges as De } from "@dnd-kit/modifiers";
4
4
  import { SortableContext as Ce, verticalListSortingStrategy as Te } from "@dnd-kit/sortable";
5
5
  import { enableMapSet as Oe, produce as fe } from "immer";
6
- import Y from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqual.es.js";
7
6
  import { memo as _e, useMemo as D, useReducer as xe, useTransition as ve, useState as g, useEffect as C, useCallback as c, useRef as Le, cloneElement as be } from "react";
8
7
  import { createPortal as Ae } from "react-dom";
9
8
  import { TreeContext as Pe } from "./TreeContext.es.js";
10
9
  import { getReactNodeIdsInFlatArray as Me, removeReactNodesFromFlatArray as je, getTreeNodesWithoutElements as Ge, getNodesToRender as ke } from "./helpers/nodes.es.js";
11
- import { findIndexById as He, getNodeChildrenIds as Ke, currentNodesChanged as Fe, getCurrentChildrenForNewNodesIfExpanded as J, updateNodeWithNewChildren as Ue, shouldUpdateTreeState as $ } from "./helpers/reducer.es.js";
10
+ import { findIndexById as He, getNodeChildrenIds as Ke, currentNodesChanged as Fe, getCurrentChildrenForNewNodesIfExpanded as Y, updateNodeWithNewChildren as Ue, shouldUpdateTreeState as J } from "./helpers/reducer.es.js";
11
+ import $ from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqual.es.js";
12
12
  import { handleKeyDownEvent as We } from "./helpers/treeHandleKeyDown.es.js";
13
13
  import { sortableTreeKeyboardCoordinates as Be } from "./utils/keyboardCoordinates.es.js";
14
14
  import { getAnnouncements as Xe } from "./helpers/getMovementAnnouncements.es.js";
@@ -39,7 +39,7 @@ const Qe = fe((o, n) => {
39
39
  o.selectionMode = n.payload.selectionMode;
40
40
  return;
41
41
  case "SET_PROJECTION": {
42
- Y(o.projection, n.payload) || (o.projection = n.payload);
42
+ $(o.projection, n.payload) || (o.projection = n.payload);
43
43
  return;
44
44
  }
45
45
  case "REGISTER_OVERLAY_ITEM": {
@@ -47,7 +47,7 @@ const Qe = fe((o, n) => {
47
47
  return;
48
48
  }
49
49
  case "REGISTER_ROOT_NODES": {
50
- o.rootNodes = J(
50
+ o.rootNodes = Y(
51
51
  o.rootNodes,
52
52
  o.expandedIds,
53
53
  n.payload
@@ -61,8 +61,8 @@ const Qe = fe((o, n) => {
61
61
  return;
62
62
  }
63
63
  const E = Ke(o.rootNodes, d), I = p.map((l) => l.props.id);
64
- if (!Y(E, I) || Fe(E, o.rootNodes, p)) {
65
- const l = J(
64
+ if (!$(E, I) || Fe(E, o.rootNodes, p)) {
65
+ const l = Y(
66
66
  o.rootNodes,
67
67
  o.expandedIds,
68
68
  p
@@ -133,12 +133,12 @@ const Qe = fe((o, n) => {
133
133
  ), [t, a] = xe(Qe, Q), [, Z] = ve(), [N, M] = g(null), [T, O] = g(null), [f, j] = g(null), [G, _] = g(null);
134
134
  C(() => {
135
135
  const e = (r) => {
136
- $(r, i) && a({
136
+ J(r, i) && a({
137
137
  type: "SET_SELECTION_MODE",
138
138
  payload: { selectionMode: "multiselect" }
139
139
  });
140
140
  }, s = (r) => {
141
- $(r, i) && a({
141
+ J(r, i) && a({
142
142
  type: "SET_SELECTION_MODE",
143
143
  payload: { selectionMode: "single" }
144
144
  });
@@ -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/isEqual';\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, type Overlay, TreeItemOverlay } from './TreeItem';\nimport { type InternalTreeItemMultiSelectProps } from './TreeItem/TreeItemMultiselect';\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 const [coordinateGetter] = useState(() => sortableTreeKeyboardCoordinates(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 // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\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 { TreeContext, type TreeContextProps } from './TreeContext';\nimport { type InternalTreeItemProps, type Overlay, TreeItemOverlay } from './TreeItem';\nimport { type InternalTreeItemMultiSelectProps } from './TreeItem/TreeItemMultiselect';\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 const [coordinateGetter] = useState(() => sortableTreeKeyboardCoordinates(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 // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\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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"}
@@ -3,17 +3,17 @@ import { memo as re, useRef as ae, useEffect as oe, useCallback as C, Children a
3
3
  import { useDndContext as de, useDndMonitor as le } from "@dnd-kit/core";
4
4
  import { useSortable as pe } from "@dnd-kit/sortable";
5
5
  import { CSS as ue } from "@dnd-kit/utilities";
6
- import me from "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
7
- import { TreeItemColorsClassMap as ce, TreeItemSpacingClassMap as ie, TreeItemBorderRadiusClassMap as M, TreeItemBorderClassMap as gt, TreeItemBorderStyleClassMap as we, TreeItemShadowClassMap as fe } from "../types.es.js";
6
+ import { TreeItemColorsClassMap as me, TreeItemSpacingClassMap as ce, TreeItemBorderRadiusClassMap as M, TreeItemBorderClassMap as gt, TreeItemBorderStyleClassMap as ie, TreeItemShadowClassMap as we } from "../types.es.js";
8
7
  import { useDebounce as Dt } from "../../../hooks/useDebounce.es.js";
9
- import { FOCUS_VISIBLE_STYLE as be } from "../../../utilities/focusStyle.es.js";
8
+ import { FOCUS_VISIBLE_STYLE as fe } from "../../../utilities/focusStyle.es.js";
10
9
  import { merge as b } from "../../../utilities/merge.es.js";
11
- import { DragHandle as he } from "./DragHandle.es.js";
12
- import { ExpandButton as Ie } from "./ExpandButton.es.js";
13
- import { useTreeItem as ye } from "./useTreeItem.es.js";
14
- import { EXPAND_ONHOVER_DELAY as ge, INDENTATION_WIDTH as Tt } from "../helpers/constants.es.js";
15
- import { removeFragmentsAndEnrichChildren as De } from "../utils/removeFragmentsAndEnrichChildren.es.js";
16
- import { useDeepCompareEffect as Te } from "../utils/useDeepCompareEffect.es.js";
10
+ import { DragHandle as be } from "./DragHandle.es.js";
11
+ import { ExpandButton as he } from "./ExpandButton.es.js";
12
+ import { useTreeItem as Ie } from "./useTreeItem.es.js";
13
+ import { EXPAND_ONHOVER_DELAY as ye, INDENTATION_WIDTH as Tt } from "../helpers/constants.es.js";
14
+ import { removeFragmentsAndEnrichChildren as ge } from "../utils/removeFragmentsAndEnrichChildren.es.js";
15
+ import { useDeepCompareEffect as De } from "../utils/useDeepCompareEffect.es.js";
16
+ import Te from "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
17
17
  const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
18
18
  ({
19
19
  id: r,
@@ -44,9 +44,9 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
44
44
  "data-test-id": At = "fondue-tree-item"
45
45
  }) => {
46
46
  var rt, at, ot, nt, dt, lt, pt, ut, mt, ct, it, wt, ft, bt, ht;
47
- const { active: o, over: R } = de(), { isSelected: c, isExpanded: i, projection: e } = ye(r), G = ae(), s = (o == null ? void 0 : o.id) === r, t = s && e !== null && e !== void 0 ? e : null, Rt = typeof ((at = (rt = R == null ? void 0 : R.data) == null ? void 0 : rt.current) == null ? void 0 : at.accepts) == "string" ? (ot = R.data.current.accepts) == null ? void 0 : ot.split(", ") : [], vt = typeof (t == null ? void 0 : t.accepts) == "string" ? (nt = t.accepts) == null ? void 0 : nt.split(", ") : [], g = ((dt = o == null ? void 0 : o.data.current) == null ? void 0 : dt.type) || "", D = ((lt = e == null ? void 0 : e.previousNode) == null ? void 0 : lt.depth) !== void 0 && (e == null ? void 0 : e.depth) > ((pt = e == null ? void 0 : e.previousNode) == null ? void 0 : pt.depth), Bt = D && e.depth - 1 === ((ut = e == null ? void 0 : e.previousNode) == null ? void 0 : ut.depth), Y = D && ((mt = e == null ? void 0 : e.previousNode) == null ? void 0 : mt.accepts) !== void 0 && (((ct = e == null ? void 0 : e.previousNode) == null ? void 0 : ct.accepts.includes(`${g}-deeper`)) || ((it = e == null ? void 0 : e.previousNode) == null ? void 0 : it.accepts.includes(`${g}-within`))), Ct = s && Bt && ((wt = t == null ? void 0 : t.previousNode) == null ? void 0 : wt.accepts) !== void 0 && ((ft = t == null ? void 0 : t.previousNode) == null ? void 0 : ft.accepts.includes(`${g}-within`)) || (t == null ? void 0 : t.isWithinParent) && vt.includes(`${g}-within`), T = s && (o == null ? void 0 : o.data.current) && (Rt.includes(g) && !D || Ct), J = Dt((a) => {
47
+ const { active: o, over: R } = de(), { isSelected: c, isExpanded: i, projection: e } = Ie(r), G = ae(), s = (o == null ? void 0 : o.id) === r, t = s && e !== null && e !== void 0 ? e : null, Rt = typeof ((at = (rt = R == null ? void 0 : R.data) == null ? void 0 : rt.current) == null ? void 0 : at.accepts) == "string" ? (ot = R.data.current.accepts) == null ? void 0 : ot.split(", ") : [], vt = typeof (t == null ? void 0 : t.accepts) == "string" ? (nt = t.accepts) == null ? void 0 : nt.split(", ") : [], g = ((dt = o == null ? void 0 : o.data.current) == null ? void 0 : dt.type) || "", D = ((lt = e == null ? void 0 : e.previousNode) == null ? void 0 : lt.depth) !== void 0 && (e == null ? void 0 : e.depth) > ((pt = e == null ? void 0 : e.previousNode) == null ? void 0 : pt.depth), Bt = D && e.depth - 1 === ((ut = e == null ? void 0 : e.previousNode) == null ? void 0 : ut.depth), Y = D && ((mt = e == null ? void 0 : e.previousNode) == null ? void 0 : mt.accepts) !== void 0 && (((ct = e == null ? void 0 : e.previousNode) == null ? void 0 : ct.accepts.includes(`${g}-deeper`)) || ((it = e == null ? void 0 : e.previousNode) == null ? void 0 : it.accepts.includes(`${g}-within`))), Ct = s && Bt && ((wt = t == null ? void 0 : t.previousNode) == null ? void 0 : wt.accepts) !== void 0 && ((ft = t == null ? void 0 : t.previousNode) == null ? void 0 : ft.accepts.includes(`${g}-within`)) || (t == null ? void 0 : t.isWithinParent) && vt.includes(`${g}-within`), T = s && (o == null ? void 0 : o.data.current) && (Rt.includes(g) && !D || Ct), J = Dt((a) => {
48
48
  G.current === a && (u == null || u(a));
49
- }, ge);
49
+ }, ye);
50
50
  oe(() => {
51
51
  var a, l, f;
52
52
  s && (G.current = D ? (a = t == null ? void 0 : t.previousNode) == null ? void 0 : a.id : null), s && Y && (t != null && t.parentId) && t.previousNode && t.parentId === t.previousNode.id && t.parentId !== ((f = (l = o == null ? void 0 : o.data) == null ? void 0 : l.current) == null ? void 0 : f.parentId) && J(t == null ? void 0 : t.parentId);
@@ -116,7 +116,7 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
116
116
  },
117
117
  q ? 300 : 0
118
118
  ), Q = H && (o == null ? void 0 : o.id) === H, Z = yt.count(I) > 0, { enrichedChildren: $, childrenIds: Et } = z(() => {
119
- const a = De(I, { parentId: r, level: p + 1 });
119
+ const a = ge(I, { parentId: r, level: p + 1 });
120
120
  return {
121
121
  enrichedChildren: a,
122
122
  childrenIds: a.map((l) => l.props.id)
@@ -136,7 +136,7 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
136
136
  animateLayoutChanges: Ne,
137
137
  transition: null
138
138
  });
139
- Te(() => {
139
+ De(() => {
140
140
  if (yt.count($) === 0) {
141
141
  d == null || d(r);
142
142
  return;
@@ -156,12 +156,12 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
156
156
  borderStyle: "none",
157
157
  activeColorStyle: "neutral",
158
158
  ...X
159
- }), [X]), w = ce[n.activeColorStyle ?? "neutral"], { liClassName: Vt, backgroundClassName: Kt } = z(() => ({
159
+ }), [X]), w = me[n.activeColorStyle ?? "neutral"], { liClassName: Vt, backgroundClassName: Kt } = z(() => ({
160
160
  liClassName: b([
161
- be,
161
+ fe,
162
162
  "tw-box-content tw-relative tw-cursor-default tw-transition-colors tw-outline-none tw-ring-inset tw-group tw-no-underline tw-leading-5",
163
163
  !s && c ? w.selectedTextColor : w.textColor,
164
- ie[n.spacingY ?? "none"]
164
+ ce[n.spacingY ?? "none"]
165
165
  ]),
166
166
  backgroundClassName: b([
167
167
  "tw-block tw-absolute tw-inset-0 tw-transition-colors -tw-z-10",
@@ -182,10 +182,10 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
182
182
  const Jt = n.borderWidth !== "none" && k === "" ? b([
183
183
  gt[n.borderWidth ?? "none"],
184
184
  M[n.borderRadius ?? "small"],
185
- we[n.borderStyle ?? "none"]
185
+ ie[n.borderStyle ?? "none"]
186
186
  ]) : "", Ot = n.contentHight === "single-line" ? "tw-h-10" : "tw-h-fit", Qt = n.contentHight === "single-line" ? "tw-h-12" : "tw-h-fit", Zt = b([
187
187
  "tw-relative tw-z-0 tw-transition-colors tw-flex tw-items-center tw-leading-5 tw-width-fit tw-justify-between",
188
- fe[n.shadow ?? "none"],
188
+ we[n.shadow ?? "none"],
189
189
  s ? "tw-border-dashed tw-border-2 tw-pr-0" : Jt,
190
190
  s && M[n.borderRadius ?? "small"],
191
191
  s ? Qt : Ot,
@@ -195,7 +195,7 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
195
195
  transform: ue.Transform.toString(v),
196
196
  transition: Yt
197
197
  }, et = { ...Ft, ..._t }, st = m !== "none" ? /* @__PURE__ */ N(
198
- he,
198
+ be,
199
199
  {
200
200
  ...m !== "none" ? et : {},
201
201
  active: c,
@@ -215,7 +215,7 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
215
215
  tabIndex: 0,
216
216
  role: "treeitem",
217
217
  style: Pt,
218
- onKeyDown: me,
218
+ onKeyDown: Te,
219
219
  "aria-label": h,
220
220
  "aria-level": p + 1,
221
221
  onClick: Ht,
@@ -231,7 +231,7 @@ const Ne = ({ isSorting: r, wasDragging: L }) => !(r || L), xe = re(
231
231
  /* @__PURE__ */ N("span", { className: Kt, style: jt, "aria-hidden": !0 }),
232
232
  m === "left" && st,
233
233
  U && /* @__PURE__ */ N(
234
- Ie,
234
+ he,
235
235
  {
236
236
  active: v != null && v.y ? !1 : c,
237
237
  onClick: O,