@hitachivantara/uikit-react-core 5.34.0 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/cjs/components/BaseInput/BaseInput.styles.cjs +14 -16
  2. package/dist/cjs/components/BaseInput/BaseInput.styles.cjs.map +1 -1
  3. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs +14 -19
  4. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs.map +1 -1
  5. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.styles.cjs +7 -38
  6. package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.styles.cjs.map +1 -1
  7. package/dist/cjs/components/Drawer/Drawer.cjs +26 -8
  8. package/dist/cjs/components/Drawer/Drawer.cjs.map +1 -1
  9. package/dist/cjs/components/Dropdown/List/List.cjs +5 -1
  10. package/dist/cjs/components/Dropdown/List/List.cjs.map +1 -1
  11. package/dist/cjs/components/ListContainer/ListItem/ListItem.cjs +3 -2
  12. package/dist/cjs/components/ListContainer/ListItem/ListItem.cjs.map +1 -1
  13. package/dist/cjs/components/TreeView/TreeItem/DefaultContent.cjs +54 -0
  14. package/dist/cjs/components/TreeView/TreeItem/DefaultContent.cjs.map +1 -0
  15. package/dist/cjs/components/TreeView/TreeItem/TreeItem.cjs +124 -0
  16. package/dist/cjs/components/TreeView/TreeItem/TreeItem.cjs.map +1 -0
  17. package/dist/cjs/components/TreeView/TreeItem/TreeItem.styles.cjs +74 -0
  18. package/dist/cjs/components/TreeView/TreeItem/TreeItem.styles.cjs.map +1 -0
  19. package/dist/cjs/components/TreeView/TreeItem/useHvTreeItem.cjs +62 -0
  20. package/dist/cjs/components/TreeView/TreeItem/useHvTreeItem.cjs.map +1 -0
  21. package/dist/cjs/components/TreeView/TreeView.cjs +72 -0
  22. package/dist/cjs/components/TreeView/TreeView.cjs.map +1 -0
  23. package/dist/cjs/components/TreeView/TreeView.styles.cjs +18 -0
  24. package/dist/cjs/components/TreeView/TreeView.styles.cjs.map +1 -0
  25. package/dist/cjs/components/TreeView/internals.cjs +30 -0
  26. package/dist/cjs/components/TreeView/internals.cjs.map +1 -0
  27. package/dist/cjs/index.cjs +10 -0
  28. package/dist/cjs/index.cjs.map +1 -1
  29. package/dist/esm/components/BaseInput/BaseInput.styles.js +14 -16
  30. package/dist/esm/components/BaseInput/BaseInput.styles.js.map +1 -1
  31. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js +15 -20
  32. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js.map +1 -1
  33. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.styles.js +7 -38
  34. package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.styles.js.map +1 -1
  35. package/dist/esm/components/Drawer/Drawer.js +28 -10
  36. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  37. package/dist/esm/components/Dropdown/List/List.js +6 -2
  38. package/dist/esm/components/Dropdown/List/List.js.map +1 -1
  39. package/dist/esm/components/ListContainer/ListItem/ListItem.js +4 -3
  40. package/dist/esm/components/ListContainer/ListItem/ListItem.js.map +1 -1
  41. package/dist/esm/components/TreeView/TreeItem/DefaultContent.js +54 -0
  42. package/dist/esm/components/TreeView/TreeItem/DefaultContent.js.map +1 -0
  43. package/dist/esm/components/TreeView/TreeItem/TreeItem.js +125 -0
  44. package/dist/esm/components/TreeView/TreeItem/TreeItem.js.map +1 -0
  45. package/dist/esm/components/TreeView/TreeItem/TreeItem.styles.js +74 -0
  46. package/dist/esm/components/TreeView/TreeItem/TreeItem.styles.js.map +1 -0
  47. package/dist/esm/components/TreeView/TreeItem/useHvTreeItem.js +62 -0
  48. package/dist/esm/components/TreeView/TreeItem/useHvTreeItem.js.map +1 -0
  49. package/dist/esm/components/TreeView/TreeView.js +73 -0
  50. package/dist/esm/components/TreeView/TreeView.js.map +1 -0
  51. package/dist/esm/components/TreeView/TreeView.styles.js +18 -0
  52. package/dist/esm/components/TreeView/TreeView.styles.js.map +1 -0
  53. package/dist/esm/components/TreeView/internals.js +15 -0
  54. package/dist/esm/components/TreeView/internals.js.map +1 -0
  55. package/dist/esm/index.js +12 -2
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/types/index.d.ts +126 -9
  58. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ListItem.js","sources":["../../../../../src/components/ListContainer/ListItem/ListItem.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo } from \"react\";\n\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\nimport { ExtractNames } from \"@core/utils/classes\";\nimport { HvFocus } from \"@core/components/Focus\";\n\nimport HvListContext from \"../ListContext\";\nimport { staticClasses, useClasses } from \"./ListItem.styles\";\n\nexport { staticClasses as listItemClasses };\n\nexport type HvListItemClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvListItemProps extends HvBaseProps<HTMLLIElement> {\n /**\n * Overrides the implicit list item role.\n */\n role?: string;\n /** Indicates if the list item is selected. */\n selected?: boolean;\n /** If true, the list item will be disabled. */\n disabled?: boolean;\n /**\n * If the list item is focusable and reacts to mouse over events.\n * Defaults to true if the container list is interactive, false otherwise.\n */\n interactive?: boolean;\n /**\n * If `true` compacts the vertical spacing intended to separate the list items.\n * Defaults to the value set in container list.\n */\n condensed?: boolean;\n /**\n * If `true`, the left and right padding is removed.\n * Defaults to the value set in container list.\n */\n disableGutters?: boolean;\n /**\n * Element placed before the children.\n * Also removes the left padding (gutter).\n *\n * Some modifications are applied, assuming that it is either an icon (changing the color when the item is disabled)\n * or a selector (preventing the double focus ring, propagating the checked and disabled states and wiring the onChange event).\n * If unwanted, the element should be placed directly as a child.\n */\n startAdornment?: React.ReactNode;\n /**\n * Element placed after the children and aligned next to the margin.\n * Also removes the right padding (gutter).\n *\n * Some modifications are applied, assuming that it is an icon (changing the color when the item is disabled).\n * If unwanted, the element should be placed directly as a child.\n */\n endAdornment?: React.ReactNode;\n /** The value to be set on the 'li' element */\n value?: any;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvListItemClasses;\n}\n\nconst applyClassNameAndStateToElement = (\n element,\n selected,\n disabled,\n onClick,\n className\n) => {\n if (element != null) {\n return React.cloneElement(element, {\n className,\n checked: !!selected,\n disabled,\n onChange: (evt) => onClick?.(evt),\n });\n }\n\n return null;\n};\n\nconst applyClassNameToElement = (element, className) => {\n if (element != null) {\n return React.cloneElement(element, {\n className,\n });\n }\n\n return null;\n};\n\n/**\n * ListItem description/documentation paragraph\n */\nexport const HvListItem = (props: HvListItemProps) => {\n const {\n id,\n classes: classesProp,\n className,\n role,\n value,\n selected,\n disabled,\n interactive: interactiveProp,\n condensed: condensedProp,\n disableGutters: disableGuttersProp,\n startAdornment,\n endAdornment,\n onClick,\n children,\n tabIndex,\n ...others\n } = useDefaultProps(\"HvListItem\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const {\n topContainerRef,\n condensed: condensedContext,\n disableGutters: disableGuttersContext,\n interactive: interactiveContext,\n } = useContext(HvListContext);\n\n const condensed = condensedProp != null ? condensedProp : condensedContext;\n const disableGutters =\n disableGuttersProp != null ? disableGuttersProp : disableGuttersContext;\n const interactive =\n interactiveProp != null ? interactiveProp : interactiveContext;\n\n const handleOnClick = useCallback(\n (evt) => {\n if (!disabled) {\n onClick?.(evt);\n }\n },\n [disabled, onClick]\n );\n\n const clonedStartAdornment = useMemo(\n () =>\n applyClassNameAndStateToElement(\n startAdornment,\n selected,\n disabled,\n handleOnClick,\n cx(\n classes.startAdornment,\n { [classes.disabled]: disabled },\n React.isValidElement(startAdornment)\n ? startAdornment.props.className\n : undefined\n )\n ),\n [\n cx,\n classes?.startAdornment,\n classes?.disabled,\n disabled,\n handleOnClick,\n selected,\n startAdornment,\n ]\n );\n const clonedEndAdornment = useMemo(\n () =>\n applyClassNameToElement(\n endAdornment,\n cx(\n classes.endAdornment,\n { [classes.disabled]: disabled },\n React.isValidElement(endAdornment)\n ? endAdornment.props.className\n : undefined\n )\n ),\n [cx, classes?.endAdornment, classes?.disabled, disabled, endAdornment]\n );\n\n const roleOptionAriaProps =\n role === \"option\" || role === \"menuitem\"\n ? {\n \"aria-disabled\": disabled || undefined,\n \"aria-selected\": selected,\n }\n : {};\n\n const listItem = (\n // For later: this should only have an onClick event if interactive and has the appropriate role.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <li\n id={id}\n role={role}\n value={value}\n className={cx(\n classes.root,\n {\n [classes.gutters]: !disableGutters,\n [classes.condensed]: condensed,\n [classes.interactive]: interactive,\n [classes.selected]: !!selected,\n [classes.disabled]: !!disabled,\n [classes.withStartAdornment]: startAdornment != null,\n [classes.withEndAdornment]: endAdornment != null,\n },\n className\n )}\n onClick={handleOnClick}\n onKeyDown={() => {}} // Needed because of jsx-a11yclick-events-have-key-events\n {...roleOptionAriaProps}\n {...others}\n >\n {clonedStartAdornment}\n {children}\n {clonedEndAdornment}\n </li>\n );\n\n return interactive ? (\n <HvFocus\n rootRef={topContainerRef}\n selected={selected}\n disabledClass={disabled || undefined}\n strategy={role === \"option\" ? \"listbox\" : \"menu\"}\n classes={{ focus: classes.focus }}\n configuration={{\n tabIndex,\n }}\n >\n {listItem}\n </HvFocus>\n ) : (\n listItem\n );\n};\n"],"names":["applyClassNameAndStateToElement","element","selected","disabled","onClick","className","React","cloneElement","checked","onChange","evt","applyClassNameToElement","HvListItem","props","id","classes","classesProp","role","value","interactive","interactiveProp","condensed","condensedProp","disableGutters","disableGuttersProp","startAdornment","endAdornment","children","tabIndex","others","useDefaultProps","cx","useClasses","topContainerRef","condensedContext","disableGuttersContext","interactiveContext","useContext","HvListContext","handleOnClick","useCallback","clonedStartAdornment","useMemo","isValidElement","undefined","clonedEndAdornment","roleOptionAriaProps","listItem","root","gutters","withStartAdornment","withEndAdornment","focus"],"mappings":"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"}
1
+ {"version":3,"file":"ListItem.js","sources":["../../../../../src/components/ListContainer/ListItem/ListItem.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\nimport { ExtractNames } from \"@core/utils/classes\";\nimport { HvFocus } from \"@core/components/Focus\";\n\nimport HvListContext from \"../ListContext\";\nimport { staticClasses, useClasses } from \"./ListItem.styles\";\n\nexport { staticClasses as listItemClasses };\n\nexport type HvListItemClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvListItemProps extends HvBaseProps<HTMLLIElement> {\n /**\n * Overrides the implicit list item role.\n */\n role?: HvBaseProps<HTMLLIElement>[\"role\"];\n /** Indicates if the list item is selected. */\n selected?: boolean;\n /** If true, the list item will be disabled. */\n disabled?: boolean;\n /**\n * If the list item is focusable and reacts to mouse over events.\n * Defaults to true if the container list is interactive, false otherwise.\n */\n interactive?: boolean;\n /**\n * If `true` compacts the vertical spacing intended to separate the list items.\n * Defaults to the value set in container list.\n */\n condensed?: boolean;\n /**\n * If `true`, the left and right padding is removed.\n * Defaults to the value set in container list.\n */\n disableGutters?: boolean;\n /**\n * Element placed before the children.\n * Also removes the left padding (gutter).\n *\n * Some modifications are applied, assuming that it is either an icon (changing the color when the item is disabled)\n * or a selector (preventing the double focus ring, propagating the checked and disabled states and wiring the onChange event).\n * If unwanted, the element should be placed directly as a child.\n */\n startAdornment?: React.ReactNode;\n /**\n * Element placed after the children and aligned next to the margin.\n * Also removes the right padding (gutter).\n *\n * Some modifications are applied, assuming that it is an icon (changing the color when the item is disabled).\n * If unwanted, the element should be placed directly as a child.\n */\n endAdornment?: React.ReactNode;\n /** The value to be set on the 'li' element */\n value?: any;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvListItemClasses;\n}\n\nconst applyClassNameAndStateToElement = (\n element,\n selected,\n disabled,\n onClick,\n className\n) => {\n if (element != null) {\n return React.cloneElement(element, {\n className,\n checked: !!selected,\n disabled,\n onChange: (evt) => onClick?.(evt),\n });\n }\n\n return null;\n};\n\nconst applyClassNameToElement = (element, className) => {\n if (element != null) {\n return React.cloneElement(element, {\n className,\n });\n }\n\n return null;\n};\n\n/**\n * ListItem description/documentation paragraph\n */\nexport const HvListItem = forwardRef<any, HvListItemProps>((props, ref) => {\n const {\n id,\n classes: classesProp,\n className,\n role,\n value,\n selected,\n disabled,\n interactive: interactiveProp,\n condensed: condensedProp,\n disableGutters: disableGuttersProp,\n startAdornment,\n endAdornment,\n onClick,\n children,\n tabIndex,\n ...others\n } = useDefaultProps(\"HvListItem\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const {\n topContainerRef,\n condensed: condensedContext,\n disableGutters: disableGuttersContext,\n interactive: interactiveContext,\n } = useContext(HvListContext);\n\n const condensed = condensedProp != null ? condensedProp : condensedContext;\n const disableGutters =\n disableGuttersProp != null ? disableGuttersProp : disableGuttersContext;\n const interactive =\n interactiveProp != null ? interactiveProp : interactiveContext;\n\n const handleOnClick = useCallback(\n (evt) => {\n if (!disabled) {\n onClick?.(evt);\n }\n },\n [disabled, onClick]\n );\n\n const clonedStartAdornment = useMemo(\n () =>\n applyClassNameAndStateToElement(\n startAdornment,\n selected,\n disabled,\n handleOnClick,\n cx(\n classes.startAdornment,\n { [classes.disabled]: disabled },\n React.isValidElement(startAdornment)\n ? startAdornment.props.className\n : undefined\n )\n ),\n [\n cx,\n classes?.startAdornment,\n classes?.disabled,\n disabled,\n handleOnClick,\n selected,\n startAdornment,\n ]\n );\n const clonedEndAdornment = useMemo(\n () =>\n applyClassNameToElement(\n endAdornment,\n cx(\n classes.endAdornment,\n { [classes.disabled]: disabled },\n React.isValidElement(endAdornment)\n ? endAdornment.props.className\n : undefined\n )\n ),\n [cx, classes?.endAdornment, classes?.disabled, disabled, endAdornment]\n );\n\n const roleOptionAriaProps =\n role === \"option\" || role === \"menuitem\"\n ? {\n \"aria-disabled\": disabled || undefined,\n \"aria-selected\": selected,\n }\n : {};\n\n const listItem = (\n // For later: this should only have an onClick event if interactive and has the appropriate role.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <li\n id={id}\n ref={ref}\n role={role}\n value={value}\n className={cx(\n classes.root,\n {\n [classes.gutters]: !disableGutters,\n [classes.condensed]: condensed,\n [classes.interactive]: interactive,\n [classes.selected]: !!selected,\n [classes.disabled]: !!disabled,\n [classes.withStartAdornment]: startAdornment != null,\n [classes.withEndAdornment]: endAdornment != null,\n },\n className\n )}\n onClick={handleOnClick}\n onKeyDown={() => {}} // Needed because of jsx-a11yclick-events-have-key-events\n {...roleOptionAriaProps}\n {...others}\n >\n {clonedStartAdornment}\n {children}\n {clonedEndAdornment}\n </li>\n );\n\n return interactive ? (\n <HvFocus\n rootRef={topContainerRef}\n selected={selected}\n disabledClass={disabled || undefined}\n strategy={role === \"option\" ? \"listbox\" : \"menu\"}\n classes={{ focus: classes.focus }}\n configuration={{\n tabIndex,\n }}\n >\n {listItem}\n </HvFocus>\n ) : (\n listItem\n );\n});\n"],"names":["applyClassNameAndStateToElement","element","selected","disabled","onClick","className","React","cloneElement","checked","onChange","evt","applyClassNameToElement","HvListItem","forwardRef","props","ref","id","classes","classesProp","role","value","interactive","interactiveProp","condensed","condensedProp","disableGutters","disableGuttersProp","startAdornment","endAdornment","children","tabIndex","others","useDefaultProps","cx","useClasses","topContainerRef","condensedContext","disableGuttersContext","interactiveContext","useContext","HvListContext","handleOnClick","useCallback","clonedStartAdornment","useMemo","isValidElement","undefined","clonedEndAdornment","roleOptionAriaProps","listItem","root","gutters","withStartAdornment","withEndAdornment","focus"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { jsxs, jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useCss } from "../../../hooks/useCss.js";
4
+ import { useHvTreeItem } from "./useHvTreeItem.js";
5
+ const DefaultContent = forwardRef((props, ref) => {
6
+ const {
7
+ classes,
8
+ className,
9
+ displayIcon,
10
+ expansionIcon,
11
+ icon: iconProp,
12
+ label,
13
+ nodeId,
14
+ onClick,
15
+ onMouseDown,
16
+ ...others
17
+ } = props;
18
+ const {
19
+ cx
20
+ } = useCss();
21
+ const {
22
+ disabled,
23
+ expanded,
24
+ selected,
25
+ focused,
26
+ handleExpansion,
27
+ handleSelection,
28
+ preventSelection
29
+ } = useHvTreeItem(nodeId);
30
+ const icon = iconProp ?? expansionIcon ?? displayIcon;
31
+ return (
32
+ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions -- Key event is handled by the TreeView */
33
+ /* @__PURE__ */ jsxs("div", { ...others, className: cx(className, classes.root, {
34
+ [classes.expanded]: expanded,
35
+ [classes.selected]: selected,
36
+ [classes.focused]: focused,
37
+ [classes.disabled]: disabled
38
+ }), onClick: (event) => {
39
+ handleExpansion(event);
40
+ handleSelection(event);
41
+ onClick?.(event);
42
+ }, onMouseDown: (event) => {
43
+ preventSelection(event);
44
+ onMouseDown?.(event);
45
+ }, ref, children: [
46
+ /* @__PURE__ */ jsx("div", { className: classes.iconContainer, children: icon }),
47
+ /* @__PURE__ */ jsx("div", { className: classes.label, children: label })
48
+ ] })
49
+ );
50
+ });
51
+ export {
52
+ DefaultContent
53
+ };
54
+ //# sourceMappingURL=DefaultContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultContent.js","sources":["../../../../../src/components/TreeView/TreeItem/DefaultContent.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nimport { useCss } from \"@core/hooks/useCss\";\n\nimport type { HvTreeContentProps } from \"./TreeItem\";\nimport { useHvTreeItem } from \"./useHvTreeItem\";\n\n/**\n * Internal default TreeItem `component`.\n * Use this as a basis to create a custom component.\n */\nexport const DefaultContent = forwardRef<HTMLDivElement, HvTreeContentProps>(\n (props, ref) => {\n const {\n classes,\n className,\n displayIcon,\n expansionIcon,\n icon: iconProp,\n label,\n nodeId,\n onClick,\n onMouseDown,\n ...others\n } = props;\n\n const { cx } = useCss();\n\n const {\n disabled,\n expanded,\n selected,\n focused,\n handleExpansion,\n handleSelection,\n preventSelection,\n } = useHvTreeItem(nodeId);\n\n const icon = iconProp ?? expansionIcon ?? displayIcon;\n\n return (\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions -- Key event is handled by the TreeView */\n <div\n {...others}\n className={cx(className, classes.root, {\n [classes.expanded]: expanded,\n [classes.selected]: selected,\n [classes.focused]: focused,\n [classes.disabled]: disabled,\n })}\n onClick={(event) => {\n handleExpansion(event);\n handleSelection(event);\n onClick?.(event);\n }}\n onMouseDown={(event) => {\n preventSelection(event);\n onMouseDown?.(event);\n }}\n ref={ref}\n >\n <div className={classes.iconContainer}>{icon}</div>\n <div className={classes.label}>{label}</div>\n </div>\n );\n }\n);\n"],"names":["DefaultContent","forwardRef","props","ref","classes","className","displayIcon","expansionIcon","icon","iconProp","label","nodeId","onClick","onMouseDown","others","cx","useCss","disabled","expanded","selected","focused","handleExpansion","handleSelection","preventSelection","useHvTreeItem","root","event","iconContainer"],"mappings":";;;;AAWO,MAAMA,iBAAiBC,WAC5B,CAACC,OAAOC,QAAQ;AACR,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,MAAMC;AAAAA,IACNC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACA,GAAGC;AAAAA,EACDZ,IAAAA;AAEE,QAAA;AAAA,IAAEa;AAAAA,MAAOC,OAAO;AAEhB,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,EAAAA,IACEC,cAAcb,MAAM;AAElBH,QAAAA,OAAOC,YAAYF,iBAAiBD;AAE1C;AAAA;AAAA,IAEE,qBAAC,SACC,GAAIQ,QACJ,WAAWC,GAAGV,WAAWD,QAAQqB,MAAM;AAAA,MACrC,CAACrB,QAAQc,QAAQ,GAAGA;AAAAA,MACpB,CAACd,QAAQe,QAAQ,GAAGA;AAAAA,MACpB,CAACf,QAAQgB,OAAO,GAAGA;AAAAA,MACnB,CAAChB,QAAQa,QAAQ,GAAGA;AAAAA,IAAAA,CACrB,GACD,SAAUS,CAAU,UAAA;AAClBL,sBAAgBK,KAAK;AACrBJ,sBAAgBI,KAAK;AACrBd,gBAAUc,KAAK;AAAA,IAAA,GAEjB,aAAcA,CAAU,UAAA;AACtBH,uBAAiBG,KAAK;AACtBb,oBAAca,KAAK;AAAA,IAAA,GAErB,KAEA,UAAA;AAAA,MAAA,oBAAC,OAAI,EAAA,WAAWtB,QAAQuB,eAAgBnB,UAAK,MAAA;AAAA,MAC5C,oBAAA,OAAA,EAAI,WAAWJ,QAAQM,OAAQA,UAAM,OAAA;AAAA,IAAA,GACxC;AAAA;AAEJ,CACF;"}
@@ -0,0 +1,125 @@
1
+ import { jsxs, jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef, useState, useRef, useMemo, useEffect } from "react";
3
+ import { Collapse } from "@mui/material";
4
+ import { useForkRef } from "../../../hooks/useForkRef.js";
5
+ import { useDefaultProps } from "../../../hooks/useDefaultProps.js";
6
+ import "../internals.js";
7
+ import { useClasses } from "./TreeItem.styles.js";
8
+ import { staticClasses } from "./TreeItem.styles.js";
9
+ import { DefaultContent } from "./DefaultContent.js";
10
+ import { useTreeViewContext } from "@mui/x-tree-view/internals/TreeViewProvider/useTreeViewContext";
11
+ import { useDescendant, DescendantProvider } from "@mui/x-tree-view/internals/TreeViewProvider/DescendantProvider";
12
+ const HvTreeItem = forwardRef((props, ref) => {
13
+ const {
14
+ id: idProp,
15
+ nodeId,
16
+ children,
17
+ classes: classesProp,
18
+ className,
19
+ label,
20
+ disabled: disabledProp,
21
+ icon,
22
+ endIcon,
23
+ expandIcon,
24
+ collapseIcon,
25
+ ContentComponent: Component = DefaultContent,
26
+ TransitionProps: transitionProps,
27
+ ContentProps: contentProps,
28
+ ...others
29
+ } = useDefaultProps("HvTreeItem", props);
30
+ const {
31
+ classes,
32
+ cx
33
+ } = useClasses(classesProp);
34
+ const {
35
+ instance,
36
+ multiSelect,
37
+ disabledItemsFocusable,
38
+ treeId,
39
+ icons: contextIcons
40
+ } = useTreeViewContext();
41
+ const id = idProp || treeId && nodeId && `${treeId}-${nodeId}` || void 0;
42
+ const [treeItemElement, setTreeItemElement] = useState(null);
43
+ const contentRef = useRef(null);
44
+ const handleRef = useForkRef(setTreeItemElement, ref);
45
+ const descendant = useMemo(() => ({
46
+ element: treeItemElement,
47
+ id: nodeId
48
+ }), [nodeId, treeItemElement]);
49
+ const {
50
+ index,
51
+ parentId
52
+ } = useDescendant(descendant);
53
+ const expandable = !!(Array.isArray(children) ? children.length : children);
54
+ const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
55
+ const focused = instance ? instance.isNodeFocused(nodeId) : false;
56
+ const selected = instance ? instance.isNodeSelected(nodeId) : false;
57
+ const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
58
+ const expansionIcon = !expanded ? expandIcon || contextIcons.defaultExpandIcon : collapseIcon || contextIcons.defaultCollapseIcon;
59
+ const displayIcon = expandable ? contextIcons.defaultParentIcon : endIcon || contextIcons.defaultEndIcon;
60
+ useEffect(() => {
61
+ if (instance && index !== -1) {
62
+ instance.updateNode({
63
+ id: nodeId,
64
+ idAttribute: id,
65
+ index,
66
+ parentId,
67
+ expandable,
68
+ disabled: disabledProp
69
+ });
70
+ return () => instance.removeNode(nodeId);
71
+ }
72
+ return void 0;
73
+ }, [instance, parentId, index, nodeId, expandable, disabledProp, id]);
74
+ useEffect(() => {
75
+ if (instance && label) {
76
+ return instance.mapFirstChar(nodeId, (contentRef.current?.textContent ?? "").substring(0, 1).toLowerCase());
77
+ }
78
+ return void 0;
79
+ }, [instance, nodeId, label]);
80
+ const handleFocus = (event) => {
81
+ if (event.target === event.currentTarget) {
82
+ const rootElement = typeof event.target.getRootNode === "function" ? event.target.getRootNode() : event.target.ownerDocument || document;
83
+ rootElement.getElementById(treeId).focus({
84
+ preventScroll: true
85
+ });
86
+ }
87
+ const unfocusable = !disabledItemsFocusable && disabled;
88
+ const canFocus = instance && !focused && !disabled && !unfocusable && event.currentTarget === event.target;
89
+ if (canFocus) {
90
+ instance.focusNode(event, nodeId);
91
+ }
92
+ };
93
+ return /* @__PURE__ */ jsxs(
94
+ "li",
95
+ {
96
+ id,
97
+ ref: handleRef,
98
+ role: "treeitem",
99
+ "aria-expanded": expandable ? expanded : void 0,
100
+ "aria-selected": multiSelect && selected || selected || void 0,
101
+ "aria-disabled": disabled || void 0,
102
+ className: cx(classes.root, className),
103
+ onFocus: handleFocus,
104
+ tabIndex: -1,
105
+ ...others,
106
+ children: [
107
+ /* @__PURE__ */ jsx(Component, { ref: contentRef, nodeId, classes: {
108
+ root: classes.content,
109
+ expanded: classes.expanded,
110
+ selected: classes.selected,
111
+ focused: classes.focused,
112
+ disabled: classes.disabled,
113
+ label: classes.label,
114
+ iconContainer: classes.iconContainer
115
+ }, label, icon, expansionIcon: expandable && expansionIcon, displayIcon, ...contentProps }),
116
+ children && /* @__PURE__ */ jsx(DescendantProvider, { id: nodeId, children: /* @__PURE__ */ jsx(Collapse, { component: "ul", role: "group", unmountOnExit: true, className: classes.group, in: expanded, ...transitionProps, children }) })
117
+ ]
118
+ }
119
+ );
120
+ });
121
+ export {
122
+ HvTreeItem,
123
+ staticClasses as treeItemClasses
124
+ };
125
+ //# sourceMappingURL=TreeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeItem.js","sources":["../../../../../src/components/TreeView/TreeItem/TreeItem.tsx"],"sourcesContent":["import {\n FocusEvent,\n ReactNode,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Collapse } from \"@mui/material\";\nimport type { TreeItemContentProps, TreeItemProps } from \"@mui/x-tree-view\";\n\nimport { ExtractNames } from \"@core/utils/classes\";\nimport { useForkRef } from \"@core/hooks/useForkRef\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\n\nimport {\n HvTreeViewPlugins,\n DescendantProvider,\n TreeItemDescendant,\n useDescendant,\n useTreeViewContext,\n} from \"../internals\";\nimport { staticClasses, useClasses } from \"./TreeItem.styles\";\nimport { DefaultContent } from \"./DefaultContent\";\n\nexport { staticClasses as treeItemClasses };\n\nexport type HvTreeItemClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvTreeContentProps extends TreeItemContentProps {}\n\nexport interface HvTreeItemProps extends TreeItemProps {\n classes?: HvTreeItemClasses;\n disabled?: boolean;\n icon?: ReactNode;\n ContentComponent?: React.JSXElementConstructor<HvTreeContentProps>;\n}\n\nexport const HvTreeItem = forwardRef<HTMLLIElement, HvTreeItemProps>(\n (props, ref) => {\n const {\n id: idProp,\n nodeId,\n children,\n classes: classesProp,\n className,\n label,\n disabled: disabledProp,\n icon,\n endIcon,\n expandIcon,\n collapseIcon,\n ContentComponent: Component = DefaultContent,\n TransitionProps: transitionProps,\n ContentProps: contentProps,\n ...others\n } = useDefaultProps(\"HvTreeItem\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const {\n instance,\n multiSelect,\n disabledItemsFocusable,\n treeId,\n icons: contextIcons,\n } = useTreeViewContext<HvTreeViewPlugins>();\n\n const id =\n idProp || (treeId && nodeId && `${treeId}-${nodeId}`) || undefined;\n\n const [treeItemElement, setTreeItemElement] =\n useState<HTMLLIElement | null>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(setTreeItemElement, ref);\n\n const descendant = useMemo<TreeItemDescendant>(\n () => ({ element: treeItemElement!, id: nodeId }),\n [nodeId, treeItemElement]\n );\n\n const { index, parentId } = useDescendant(descendant);\n\n const expandable = !!(Array.isArray(children) ? children.length : children);\n const expanded = instance ? instance.isNodeExpanded(nodeId) : false;\n const focused = instance ? instance.isNodeFocused(nodeId) : false;\n const selected = instance ? instance.isNodeSelected(nodeId) : false;\n const disabled = instance ? instance.isNodeDisabled(nodeId) : false;\n\n const expansionIcon = !expanded\n ? expandIcon || contextIcons.defaultExpandIcon\n : collapseIcon || contextIcons.defaultCollapseIcon;\n\n const displayIcon = expandable\n ? contextIcons.defaultParentIcon\n : endIcon || contextIcons.defaultEndIcon;\n\n useEffect(() => {\n // On the first render a node's index will be -1. We want to wait for the real index.\n if (instance && index !== -1) {\n instance.updateNode({\n id: nodeId,\n idAttribute: id,\n index,\n parentId,\n expandable,\n disabled: disabledProp,\n });\n\n return () => instance.removeNode(nodeId);\n }\n\n return undefined;\n }, [instance, parentId, index, nodeId, expandable, disabledProp, id]);\n\n useEffect(() => {\n if (instance && label) {\n return instance.mapFirstChar(\n nodeId,\n (contentRef.current?.textContent ?? \"\").substring(0, 1).toLowerCase()\n );\n }\n return undefined;\n }, [instance, nodeId, label]);\n\n const handleFocus = (event: FocusEvent<HTMLLIElement, any>) => {\n // DOM focus stays on the tree which manages focus with aria-activedescendant\n if (event.target === event.currentTarget) {\n const rootElement: any =\n typeof event.target.getRootNode === \"function\"\n ? event.target.getRootNode()\n : event.target.ownerDocument || document;\n\n rootElement.getElementById(treeId).focus({ preventScroll: true });\n }\n\n const unfocusable = !disabledItemsFocusable && disabled;\n const canFocus =\n instance &&\n !focused &&\n !disabled &&\n !unfocusable &&\n event.currentTarget === event.target;\n\n if (canFocus) {\n instance.focusNode(event, nodeId);\n }\n };\n\n return (\n <li\n id={id}\n ref={handleRef}\n role=\"treeitem\"\n aria-expanded={expandable ? expanded : undefined}\n aria-selected={(multiSelect && selected) || selected || undefined}\n aria-disabled={disabled || undefined}\n className={cx(classes.root, className)}\n // @ts-ignore\n onFocus={handleFocus}\n tabIndex={-1}\n {...others}\n >\n <Component\n ref={contentRef}\n nodeId={nodeId}\n classes={{\n root: classes.content,\n expanded: classes.expanded,\n selected: classes.selected,\n focused: classes.focused,\n disabled: classes.disabled,\n label: classes.label,\n iconContainer: classes.iconContainer,\n }}\n label={label}\n icon={icon}\n expansionIcon={expandable && expansionIcon}\n displayIcon={displayIcon}\n {...contentProps}\n />\n {children && (\n <DescendantProvider id={nodeId}>\n <Collapse\n component=\"ul\"\n role=\"group\"\n unmountOnExit\n className={classes.group}\n in={expanded}\n {...transitionProps}\n >\n {children}\n </Collapse>\n </DescendantProvider>\n )}\n </li>\n );\n }\n);\n"],"names":["HvTreeItem","forwardRef","props","ref","id","idProp","nodeId","children","classes","classesProp","className","label","disabled","disabledProp","icon","endIcon","expandIcon","collapseIcon","ContentComponent","Component","DefaultContent","TransitionProps","transitionProps","ContentProps","contentProps","others","useDefaultProps","cx","useClasses","instance","multiSelect","disabledItemsFocusable","treeId","icons","contextIcons","useTreeViewContext","undefined","treeItemElement","setTreeItemElement","useState","contentRef","useRef","handleRef","useForkRef","descendant","useMemo","element","index","parentId","useDescendant","expandable","Array","isArray","length","expanded","isNodeExpanded","focused","isNodeFocused","selected","isNodeSelected","isNodeDisabled","expansionIcon","defaultExpandIcon","defaultCollapseIcon","displayIcon","defaultParentIcon","defaultEndIcon","useEffect","updateNode","idAttribute","removeNode","mapFirstChar","current","textContent","substring","toLowerCase","handleFocus","event","target","currentTarget","rootElement","getRootNode","ownerDocument","document","getElementById","focus","preventScroll","unfocusable","canFocus","focusNode","root","content","iconContainer","group"],"mappings":";;;;;;;;;;;AAuCO,MAAMA,aAAaC,WACxB,CAACC,OAAOC,QAAQ;AACR,QAAA;AAAA,IACJC,IAAIC;AAAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC,SAASC;AAAAA,IACTC;AAAAA,IACAC;AAAAA,IACAC,UAAUC;AAAAA,IACVC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,kBAAkBC,YAAYC;AAAAA,IAC9BC,iBAAiBC;AAAAA,IACjBC,cAAcC;AAAAA,IACd,GAAGC;AAAAA,EAAAA,IACDC,gBAAgB,cAAcxB,KAAK;AACjC,QAAA;AAAA,IAAEM;AAAAA,IAASmB;AAAAA,EAAAA,IAAOC,WAAWnB,WAAW;AAExC,QAAA;AAAA,IACJoB;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,OAAOC;AAAAA,MACLC,mBAAsC;AAEpC/B,QAAAA,KACJC,UAAW2B,UAAU1B,UAAW,GAAE0B,MAAO,IAAG1B,MAAO,MAAM8B;AAE3D,QAAM,CAACC,iBAAiBC,kBAAkB,IACxCC,SAA+B,IAAI;AAC/BC,QAAAA,aAAaC,OAAuB,IAAI;AACxCC,QAAAA,YAAYC,WAAWL,oBAAoBnC,GAAG;AAE9CyC,QAAAA,aAAaC,QACjB,OAAO;AAAA,IAAEC,SAAST;AAAAA,IAAkBjC,IAAIE;AAAAA,EACxC,IAAA,CAACA,QAAQ+B,eAAe,CAC1B;AAEM,QAAA;AAAA,IAAEU;AAAAA,IAAOC;AAAAA,EAAAA,IAAaC,cAAcL,UAAU;AAE9CM,QAAAA,aAAa,CAAC,EAAEC,MAAMC,QAAQ7C,QAAQ,IAAIA,SAAS8C,SAAS9C;AAClE,QAAM+C,WAAWzB,WAAWA,SAAS0B,eAAejD,MAAM,IAAI;AAC9D,QAAMkD,UAAU3B,WAAWA,SAAS4B,cAAcnD,MAAM,IAAI;AAC5D,QAAMoD,WAAW7B,WAAWA,SAAS8B,eAAerD,MAAM,IAAI;AAC9D,QAAMM,WAAWiB,WAAWA,SAAS+B,eAAetD,MAAM,IAAI;AAE9D,QAAMuD,gBAAgB,CAACP,WACnBtC,cAAckB,aAAa4B,oBAC3B7C,gBAAgBiB,aAAa6B;AAEjC,QAAMC,cAAcd,aAChBhB,aAAa+B,oBACblD,WAAWmB,aAAagC;AAE5BC,YAAU,MAAM;AAEVtC,QAAAA,YAAYkB,UAAU,IAAI;AAC5BlB,eAASuC,WAAW;AAAA,QAClBhE,IAAIE;AAAAA,QACJ+D,aAAajE;AAAAA,QACb2C;AAAAA,QACAC;AAAAA,QACAE;AAAAA,QACAtC,UAAUC;AAAAA,MAAAA,CACX;AAEM,aAAA,MAAMgB,SAASyC,WAAWhE,MAAM;AAAA,IACzC;AAEO8B,WAAAA;AAAAA,EAAAA,GACN,CAACP,UAAUmB,UAAUD,OAAOzC,QAAQ4C,YAAYrC,cAAcT,EAAE,CAAC;AAEpE+D,YAAU,MAAM;AACd,QAAItC,YAAYlB,OAAO;AACrB,aAAOkB,SAAS0C,aACdjE,SACCkC,WAAWgC,SAASC,eAAe,IAAIC,UAAU,GAAG,CAAC,EAAEC,YAC1D,CAAA;AAAA,IACF;AACOvC,WAAAA;AAAAA,EACN,GAAA,CAACP,UAAUvB,QAAQK,KAAK,CAAC;AAEtBiE,QAAAA,cAAcA,CAACC,UAA0C;AAEzDA,QAAAA,MAAMC,WAAWD,MAAME,eAAe;AACxC,YAAMC,cACJ,OAAOH,MAAMC,OAAOG,gBAAgB,aAChCJ,MAAMC,OAAOG,YAAY,IACzBJ,MAAMC,OAAOI,iBAAiBC;AAExBC,kBAAAA,eAAepD,MAAM,EAAEqD,MAAM;AAAA,QAAEC,eAAe;AAAA,MAAA,CAAM;AAAA,IAClE;AAEMC,UAAAA,cAAc,CAACxD,0BAA0BnB;AACzC4E,UAAAA,WACJ3D,YACA,CAAC2B,WACD,CAAC5C,YACD,CAAC2E,eACDV,MAAME,kBAAkBF,MAAMC;AAEhC,QAAIU,UAAU;AACHC,eAAAA,UAAUZ,OAAOvE,MAAM;AAAA,IAClC;AAAA,EAAA;AAIA,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,KAAKoC;AAAAA,MACL,MAAK;AAAA,MACL,iBAAeQ,aAAaI,WAAWlB;AAAAA,MACvC,iBAAgBN,eAAe4B,YAAaA,YAAYtB;AAAAA,MACxD,iBAAexB,YAAYwB;AAAAA,MAC3B,WAAWT,GAAGnB,QAAQkF,MAAMhF,SAAS;AAAA,MAErC,SAASkE;AAAAA,MACT,UAAU;AAAA,MACV,GAAInD;AAAAA,MAEJ,UAAA;AAAA,QAAA,oBAAC,WACC,EAAA,KAAKe,YACL,QACA,SAAS;AAAA,UACPkD,MAAMlF,QAAQmF;AAAAA,UACdrC,UAAU9C,QAAQ8C;AAAAA,UAClBI,UAAUlD,QAAQkD;AAAAA,UAClBF,SAAShD,QAAQgD;AAAAA,UACjB5C,UAAUJ,QAAQI;AAAAA,UAClBD,OAAOH,QAAQG;AAAAA,UACfiF,eAAepF,QAAQoF;AAAAA,QAAAA,GAEzB,OACA,MACA,eAAe1C,cAAcW,eAC7B,aACA,GAAIrC,cAAa;AAAA,QAElBjB,gCACE,oBAAmB,EAAA,IAAID,QACtB,UAAC,oBAAA,UAAA,EACC,WAAU,MACV,MAAK,SACL,eAAa,MACb,WAAWE,QAAQqF,OACnB,IAAIvC,UACJ,GAAIhC,iBAEHf,SAAAA,CACH,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CACF;"}
@@ -0,0 +1,74 @@
1
+ import { theme } from "@hitachivantara/uikit-styles";
2
+ import { createClasses } from "../../../utils/classes.js";
3
+ import { outlineStyles } from "../../../utils/focusUtils.js";
4
+ const {
5
+ staticClasses,
6
+ useClasses
7
+ } = createClasses("HvTreeItem", {
8
+ /** Applied to the root element */
9
+ root: {
10
+ listStyle: "none",
11
+ margin: 0,
12
+ padding: 0,
13
+ outline: 0
14
+ },
15
+ group: {
16
+ margin: 0,
17
+ padding: 0,
18
+ marginLeft: theme.space.sm
19
+ },
20
+ content: {
21
+ padding: theme.spacing(0, 1),
22
+ minHeight: 32,
23
+ // TODO: review
24
+ width: "100%",
25
+ boxSizing: "border-box",
26
+ // prevent width + padding to overflow
27
+ display: "flex",
28
+ alignItems: "center",
29
+ cursor: "pointer",
30
+ WebkitTapHighlightColor: "transparent",
31
+ "&:hover:not($disabled)": {
32
+ backgroundColor: theme.colors.containerBackgroundHover
33
+ }
34
+ },
35
+ expanded: {},
36
+ selected: {
37
+ backgroundColor: theme.colors.atmo3
38
+ },
39
+ focused: {
40
+ backgroundColor: theme.colors.containerBackgroundHover,
41
+ "&:focus-visible": {
42
+ ...outlineStyles
43
+ }
44
+ },
45
+ disabled: {
46
+ cursor: "not-allowed",
47
+ color: theme.colors.secondary_60,
48
+ "& $label": {
49
+ color: theme.colors.secondary_60
50
+ }
51
+ },
52
+ label: {
53
+ paddingLeft: 4,
54
+ width: "100%",
55
+ boxSizing: "border-box",
56
+ // fixes overflow
57
+ minWidth: 0,
58
+ position: "relative",
59
+ ...theme.typography.body
60
+ },
61
+ iconContainer: {
62
+ display: "flex",
63
+ flexShrink: 0,
64
+ justifyContent: "center",
65
+ width: 16,
66
+ // TODO: review
67
+ marginRight: 4
68
+ }
69
+ });
70
+ export {
71
+ staticClasses,
72
+ useClasses
73
+ };
74
+ //# sourceMappingURL=TreeItem.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeItem.styles.js","sources":["../../../../../src/components/TreeView/TreeItem/TreeItem.styles.ts"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"@core/utils/classes\";\nimport { outlineStyles } from \"@core/utils/focusUtils\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvTreeItem\", {\n /** Applied to the root element */\n root: {\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n outline: 0,\n },\n group: {\n margin: 0,\n padding: 0,\n marginLeft: theme.space.sm,\n },\n\n content: {\n padding: theme.spacing(0, 1),\n minHeight: 32, // TODO: review\n\n width: \"100%\",\n boxSizing: \"border-box\", // prevent width + padding to overflow\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n WebkitTapHighlightColor: \"transparent\",\n \"&:hover:not($disabled)\": {\n backgroundColor: theme.colors.containerBackgroundHover,\n },\n },\n expanded: {},\n selected: {\n backgroundColor: theme.colors.atmo3,\n },\n focused: {\n backgroundColor: theme.colors.containerBackgroundHover,\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n disabled: {\n cursor: \"not-allowed\",\n color: theme.colors.secondary_60,\n \"& $label\": {\n color: theme.colors.secondary_60,\n },\n },\n label: {\n paddingLeft: 4,\n width: \"100%\",\n boxSizing: \"border-box\",\n\n // fixes overflow\n minWidth: 0,\n position: \"relative\",\n ...theme.typography.body,\n },\n iconContainer: {\n display: \"flex\",\n flexShrink: 0,\n justifyContent: \"center\",\n\n width: 16, // TODO: review\n marginRight: 4,\n },\n});\n"],"names":["staticClasses","useClasses","createClasses","root","listStyle","margin","padding","outline","group","marginLeft","theme","space","sm","content","spacing","minHeight","width","boxSizing","display","alignItems","cursor","WebkitTapHighlightColor","backgroundColor","colors","containerBackgroundHover","expanded","selected","atmo3","focused","outlineStyles","disabled","color","secondary_60","label","paddingLeft","minWidth","position","typography","body","iconContainer","flexShrink","justifyContent","marginRight"],"mappings":";;;AAKa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,cAAc,cAAc;AAAA;AAAA,EAEvEC,MAAM;AAAA,IACJC,WAAW;AAAA,IACXC,QAAQ;AAAA,IACRC,SAAS;AAAA,IACTC,SAAS;AAAA,EACX;AAAA,EACAC,OAAO;AAAA,IACLH,QAAQ;AAAA,IACRC,SAAS;AAAA,IACTG,YAAYC,MAAMC,MAAMC;AAAAA,EAC1B;AAAA,EAEAC,SAAS;AAAA,IACPP,SAASI,MAAMI,QAAQ,GAAG,CAAC;AAAA,IAC3BC,WAAW;AAAA;AAAA,IAEXC,OAAO;AAAA,IACPC,WAAW;AAAA;AAAA,IACXC,SAAS;AAAA,IACTC,YAAY;AAAA,IACZC,QAAQ;AAAA,IACRC,yBAAyB;AAAA,IACzB,0BAA0B;AAAA,MACxBC,iBAAiBZ,MAAMa,OAAOC;AAAAA,IAChC;AAAA,EACF;AAAA,EACAC,UAAU,CAAC;AAAA,EACXC,UAAU;AAAA,IACRJ,iBAAiBZ,MAAMa,OAAOI;AAAAA,EAChC;AAAA,EACAC,SAAS;AAAA,IACPN,iBAAiBZ,MAAMa,OAAOC;AAAAA,IAC9B,mBAAmB;AAAA,MACjB,GAAGK;AAAAA,IACL;AAAA,EACF;AAAA,EACAC,UAAU;AAAA,IACRV,QAAQ;AAAA,IACRW,OAAOrB,MAAMa,OAAOS;AAAAA,IACpB,YAAY;AAAA,MACVD,OAAOrB,MAAMa,OAAOS;AAAAA,IACtB;AAAA,EACF;AAAA,EACAC,OAAO;AAAA,IACLC,aAAa;AAAA,IACblB,OAAO;AAAA,IACPC,WAAW;AAAA;AAAA,IAGXkB,UAAU;AAAA,IACVC,UAAU;AAAA,IACV,GAAG1B,MAAM2B,WAAWC;AAAAA,EACtB;AAAA,EACAC,eAAe;AAAA,IACbrB,SAAS;AAAA,IACTsB,YAAY;AAAA,IACZC,gBAAgB;AAAA,IAEhBzB,OAAO;AAAA;AAAA,IACP0B,aAAa;AAAA,EACf;AACF,CAAC;"}
@@ -0,0 +1,62 @@
1
+ import "../internals.js";
2
+ import { useTreeViewContext } from "@mui/x-tree-view/internals/TreeViewProvider/useTreeViewContext";
3
+ function useHvTreeItem(nodeId) {
4
+ const {
5
+ instance,
6
+ multiSelect
7
+ } = useTreeViewContext();
8
+ const expandable = instance ? instance.isNodeExpandable(nodeId) : false;
9
+ const expanded = instance ? instance.isNodeExpanded(nodeId) : false;
10
+ const focused = instance ? instance.isNodeFocused(nodeId) : false;
11
+ const selected = instance ? instance.isNodeSelected(nodeId) : false;
12
+ const disabled = instance ? instance.isNodeDisabled(nodeId) : false;
13
+ const handleExpansion = (event) => {
14
+ if (!instance || disabled)
15
+ return;
16
+ if (!focused) {
17
+ instance.focusNode(event, nodeId);
18
+ }
19
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
20
+ if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) {
21
+ instance.toggleNodeExpansion(event, nodeId);
22
+ }
23
+ };
24
+ const handleSelection = (event) => {
25
+ if (!instance || disabled)
26
+ return;
27
+ if (!focused) {
28
+ instance.focusNode(event, nodeId);
29
+ }
30
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
31
+ if (multiple) {
32
+ if (event.shiftKey) {
33
+ instance.selectRange(event, {
34
+ end: nodeId
35
+ });
36
+ } else {
37
+ instance.selectNode(event, nodeId, true);
38
+ }
39
+ } else {
40
+ instance.selectNode(event, nodeId);
41
+ }
42
+ };
43
+ const preventSelection = (event) => {
44
+ if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {
45
+ event.preventDefault();
46
+ }
47
+ };
48
+ return {
49
+ instance,
50
+ disabled,
51
+ expanded,
52
+ selected,
53
+ focused,
54
+ handleExpansion,
55
+ handleSelection,
56
+ preventSelection
57
+ };
58
+ }
59
+ export {
60
+ useHvTreeItem
61
+ };
62
+ //# sourceMappingURL=useHvTreeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHvTreeItem.js","sources":["../../../../../src/components/TreeView/TreeItem/useHvTreeItem.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { useTreeViewContext, HvTreeViewPlugins } from \"../internals\";\n\nexport function useHvTreeItem(nodeId: string) {\n const { instance, multiSelect } = useTreeViewContext<HvTreeViewPlugins>();\n\n const expandable = instance ? instance.isNodeExpandable(nodeId) : false;\n const expanded = instance ? instance.isNodeExpanded(nodeId) : false;\n const focused = instance ? instance.isNodeFocused(nodeId) : false;\n const selected = instance ? instance.isNodeSelected(nodeId) : false;\n const disabled = instance ? instance.isNodeDisabled(nodeId) : false;\n\n const handleExpansion = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!instance || disabled) return;\n\n if (!focused) {\n instance.focusNode(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n // If already expanded and trying to toggle selection don't close\n if (expandable && !(multiple && instance.isNodeExpanded(nodeId))) {\n instance.toggleNodeExpansion(event, nodeId);\n }\n };\n\n const handleSelection = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!instance || disabled) return;\n\n if (!focused) {\n instance.focusNode(event, nodeId);\n }\n\n const multiple =\n multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n if (multiple) {\n if (event.shiftKey) {\n instance.selectRange(event, { end: nodeId });\n } else {\n instance.selectNode(event, nodeId, true);\n }\n } else {\n instance.selectNode(event, nodeId);\n }\n };\n\n const preventSelection = (event: React.MouseEvent<HTMLDivElement>) => {\n if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {\n // Prevent text selection\n event.preventDefault();\n }\n };\n\n return {\n instance,\n disabled,\n expanded,\n selected,\n focused,\n handleExpansion,\n handleSelection,\n preventSelection,\n };\n}\n"],"names":["useHvTreeItem","nodeId","instance","multiSelect","useTreeViewContext","expandable","isNodeExpandable","expanded","isNodeExpanded","focused","isNodeFocused","selected","isNodeSelected","disabled","isNodeDisabled","handleExpansion","event","focusNode","multiple","shiftKey","ctrlKey","metaKey","toggleNodeExpansion","handleSelection","selectRange","end","selectNode","preventSelection","preventDefault"],"mappings":";;AAIO,SAASA,cAAcC,QAAgB;AACtC,QAAA;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,MAAgBC,mBAAsC;AAExE,QAAMC,aAAaH,WAAWA,SAASI,iBAAiBL,MAAM,IAAI;AAClE,QAAMM,WAAWL,WAAWA,SAASM,eAAeP,MAAM,IAAI;AAC9D,QAAMQ,UAAUP,WAAWA,SAASQ,cAAcT,MAAM,IAAI;AAC5D,QAAMU,WAAWT,WAAWA,SAASU,eAAeX,MAAM,IAAI;AAC9D,QAAMY,WAAWX,WAAWA,SAASY,eAAeb,MAAM,IAAI;AAExDc,QAAAA,kBAAkBA,CAACC,UAA4C;AACnE,QAAI,CAACd,YAAYW;AAAU;AAE3B,QAAI,CAACJ,SAAS;AACHQ,eAAAA,UAAUD,OAAOf,MAAM;AAAA,IAClC;AAEA,UAAMiB,WACJf,gBAAgBa,MAAMG,YAAYH,MAAMI,WAAWJ,MAAMK;AAG3D,QAAIhB,cAAc,EAAEa,YAAYhB,SAASM,eAAeP,MAAM,IAAI;AACvDqB,eAAAA,oBAAoBN,OAAOf,MAAM;AAAA,IAC5C;AAAA,EAAA;AAGIsB,QAAAA,kBAAkBA,CAACP,UAA4C;AACnE,QAAI,CAACd,YAAYW;AAAU;AAE3B,QAAI,CAACJ,SAAS;AACHQ,eAAAA,UAAUD,OAAOf,MAAM;AAAA,IAClC;AAEA,UAAMiB,WACJf,gBAAgBa,MAAMG,YAAYH,MAAMI,WAAWJ,MAAMK;AAE3D,QAAIH,UAAU;AACZ,UAAIF,MAAMG,UAAU;AAClBjB,iBAASsB,YAAYR,OAAO;AAAA,UAAES,KAAKxB;AAAAA,QAAAA,CAAQ;AAAA,MAAA,OACtC;AACIyB,iBAAAA,WAAWV,OAAOf,QAAQ,IAAI;AAAA,MACzC;AAAA,IAAA,OACK;AACIyB,eAAAA,WAAWV,OAAOf,MAAM;AAAA,IACnC;AAAA,EAAA;AAGI0B,QAAAA,mBAAmBA,CAACX,UAA4C;AACpE,QAAIA,MAAMG,YAAYH,MAAMI,WAAWJ,MAAMK,WAAWR,UAAU;AAEhEG,YAAMY,eAAe;AAAA,IACvB;AAAA,EAAA;AAGK,SAAA;AAAA,IACL1B;AAAAA,IACAW;AAAAA,IACAN;AAAAA,IACAI;AAAAA,IACAF;AAAAA,IACAM;AAAAA,IACAQ;AAAAA,IACAI;AAAAA,EAAAA;AAEJ;"}
@@ -0,0 +1,73 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useSlotProps } from "@mui/base/utils";
4
+ import { DropDownXS, DropRightXS } from "@hitachivantara/uikit-react-icons";
5
+ import { useDefaultProps } from "../../hooks/useDefaultProps.js";
6
+ import { HV_TREE_VIEW_PLUGINS } from "./internals.js";
7
+ import { useClasses } from "./TreeView.styles.js";
8
+ import { staticClasses } from "./TreeView.styles.js";
9
+ import { useTreeView } from "@mui/x-tree-view/internals/useTreeView";
10
+ import { TreeViewProvider } from "@mui/x-tree-view/internals/TreeViewProvider";
11
+ const HvTreeView = forwardRef(function HvTreeView2(props, ref) {
12
+ const {
13
+ id,
14
+ children,
15
+ classes: classesProp,
16
+ className,
17
+ disabledItemsFocusable,
18
+ multiSelect,
19
+ expanded,
20
+ defaultExpanded,
21
+ selected,
22
+ defaultSelected,
23
+ disableSelection,
24
+ defaultCollapseIcon = /* @__PURE__ */ jsx(DropDownXS, { role: "none" }),
25
+ defaultExpandIcon = /* @__PURE__ */ jsx(DropRightXS, { role: "none" }),
26
+ defaultEndIcon,
27
+ defaultParentIcon,
28
+ onNodeSelect,
29
+ onNodeToggle,
30
+ onNodeFocus,
31
+ ...others
32
+ } = useDefaultProps("HvTreeView", props);
33
+ const {
34
+ classes,
35
+ cx
36
+ } = useClasses(classesProp);
37
+ const {
38
+ getRootProps,
39
+ contextValue
40
+ } = useTreeView({
41
+ disabledItemsFocusable,
42
+ expanded,
43
+ defaultExpanded,
44
+ onNodeToggle,
45
+ onNodeFocus,
46
+ disableSelection,
47
+ defaultSelected,
48
+ selected,
49
+ multiSelect,
50
+ onNodeSelect,
51
+ id,
52
+ defaultCollapseIcon,
53
+ defaultEndIcon,
54
+ defaultExpandIcon,
55
+ defaultParentIcon,
56
+ plugins: HV_TREE_VIEW_PLUGINS,
57
+ rootRef: ref
58
+ });
59
+ const rootProps = useSlotProps({
60
+ elementType: "ul",
61
+ externalSlotProps: {},
62
+ externalForwardedProps: others,
63
+ className: classes.root,
64
+ getSlotProps: getRootProps,
65
+ ownerState: props
66
+ });
67
+ return /* @__PURE__ */ jsx(TreeViewProvider, { value: contextValue, children: /* @__PURE__ */ jsx("ul", { className: cx(classes.root, className), ...rootProps, ...others, children }) });
68
+ });
69
+ export {
70
+ HvTreeView,
71
+ staticClasses as treeView2Classes
72
+ };
73
+ //# sourceMappingURL=TreeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeView.js","sources":["../../../../src/components/TreeView/TreeView.tsx"],"sourcesContent":["import { ReactNode, Ref, forwardRef } from \"react\";\nimport { useSlotProps } from \"@mui/base/utils\";\nimport { DropDownXS, DropRightXS } from \"@hitachivantara/uikit-react-icons\";\n\nimport { HvBaseProps } from \"@core/types/generic\";\nimport { ExtractNames } from \"@core/utils/classes\";\nimport { useDefaultProps } from \"@core/hooks/useDefaultProps\";\n\nimport {\n HV_TREE_VIEW_PLUGINS,\n HvTreeViewPluginParameters,\n TreeViewProvider,\n useTreeView,\n} from \"./internals\";\nimport { staticClasses, useClasses } from \"./TreeView.styles\";\n\nexport { staticClasses as treeView2Classes }; // TODO: remove old `treeViewClasses`\n\nexport type HvTreeViewClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvTreeViewProps<Multiple extends boolean | undefined>\n extends HvBaseProps<HTMLUListElement>,\n HvTreeViewPluginParameters<Multiple> {\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvTreeViewClasses;\n /** Tree View children. Usually a `HvTreeItem` instance, or a custom variation of it */\n children?: ReactNode;\n}\n\ntype HvTreeViewComponent = <Multiple extends boolean | undefined = undefined>(\n props: HvTreeViewProps<Multiple>\n) => React.JSX.Element;\n\n/* eslint-disable prefer-arrow-callback */\n/**\n * A Tree View displays hierarchical structures.\n * It also facilitates the exploration of categorical levels and their content.\n *\n * Tree structures are built through composing the `HvTreeItem` component,\n * or a custom variation of it.\n *\n * It is based on MUI's [TreeView](https://mui.com/x/react-tree-view) component.\n *\n * @example\n * ```tsx\n * <HvTreeView>\n * <HvTreeItem nodeId=\"1\" label=\"File1\" />\n * </HvTreeView>\n * ```\n */\nconst HvTreeView = forwardRef(function HvTreeView<\n Multiple extends boolean | undefined\n>(props: HvTreeViewProps<Multiple>, ref: Ref<HTMLUListElement>) {\n const {\n id,\n children,\n classes: classesProp,\n className,\n\n disabledItemsFocusable,\n multiSelect,\n expanded,\n defaultExpanded,\n selected,\n defaultSelected,\n disableSelection,\n defaultCollapseIcon = <DropDownXS role=\"none\" />,\n defaultExpandIcon = <DropRightXS role=\"none\" />,\n defaultEndIcon,\n defaultParentIcon,\n onNodeSelect,\n onNodeToggle,\n onNodeFocus,\n ...others\n } = useDefaultProps(\"HvTreeView\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const { getRootProps, contextValue } = useTreeView({\n disabledItemsFocusable,\n expanded,\n defaultExpanded,\n onNodeToggle,\n onNodeFocus,\n disableSelection,\n defaultSelected,\n selected,\n multiSelect,\n onNodeSelect: onNodeSelect as HvTreeViewProps<any>[\"onNodeSelect\"],\n id,\n defaultCollapseIcon,\n defaultEndIcon,\n defaultExpandIcon,\n defaultParentIcon,\n plugins: HV_TREE_VIEW_PLUGINS,\n rootRef: ref,\n });\n\n const rootProps = useSlotProps({\n elementType: \"ul\",\n externalSlotProps: {},\n externalForwardedProps: others,\n className: classes.root,\n getSlotProps: getRootProps,\n ownerState: props,\n });\n\n return (\n <TreeViewProvider value={contextValue}>\n <ul className={cx(classes.root, className)} {...rootProps} {...others}>\n {children}\n </ul>\n </TreeViewProvider>\n );\n}) as HvTreeViewComponent;\n\nexport { HvTreeView };\n"],"names":["HvTreeView","forwardRef","props","ref","id","children","classes","classesProp","className","disabledItemsFocusable","multiSelect","expanded","defaultExpanded","selected","defaultSelected","disableSelection","defaultCollapseIcon","defaultExpandIcon","defaultEndIcon","defaultParentIcon","onNodeSelect","onNodeToggle","onNodeFocus","others","useDefaultProps","cx","useClasses","getRootProps","contextValue","useTreeView","plugins","HV_TREE_VIEW_PLUGINS","rootRef","rootProps","useSlotProps","elementType","externalSlotProps","externalForwardedProps","root","getSlotProps","ownerState"],"mappings":";;;;;;;;;;AAkDA,MAAMA,aAAaC,WAAW,SAASD,YAErCE,OAAkCC,KAA4B;AACxD,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC,SAASC;AAAAA,IACTC;AAAAA,IAEAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,sBAAsB,oBAAC,YAAW,EAAA,MAAK,OAAS,CAAA;AAAA,IAChDC,oBAAoB,oBAAC,aAAY,EAAA,MAAK,OAAS,CAAA;AAAA,IAC/CC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACA,GAAGC;AAAAA,EAAAA,IACDC,gBAAgB,cAActB,KAAK;AACjC,QAAA;AAAA,IAAEI;AAAAA,IAASmB;AAAAA,EAAAA,IAAOC,WAAWnB,WAAW;AAExC,QAAA;AAAA,IAAEoB;AAAAA,IAAcC;AAAAA,MAAiBC,YAAY;AAAA,IACjDpB;AAAAA,IACAE;AAAAA,IACAC;AAAAA,IACAS;AAAAA,IACAC;AAAAA,IACAP;AAAAA,IACAD;AAAAA,IACAD;AAAAA,IACAH;AAAAA,IACAU;AAAAA,IACAhB;AAAAA,IACAY;AAAAA,IACAE;AAAAA,IACAD;AAAAA,IACAE;AAAAA,IACAW,SAASC;AAAAA,IACTC,SAAS7B;AAAAA,EAAAA,CACV;AAED,QAAM8B,YAAYC,aAAa;AAAA,IAC7BC,aAAa;AAAA,IACbC,mBAAmB,CAAC;AAAA,IACpBC,wBAAwBd;AAAAA,IACxBf,WAAWF,QAAQgC;AAAAA,IACnBC,cAAcZ;AAAAA,IACda,YAAYtC;AAAAA,EAAAA,CACb;AAED,6BACG,kBAAiB,EAAA,OAAO0B,cACvB,UAAA,oBAAC,QAAG,WAAWH,GAAGnB,QAAQgC,MAAM9B,SAAS,GAAG,GAAIyB,WAAeV,GAAAA,QAC5DlB,UACH,EACF,CAAA;AAEJ,CAAC;"}
@@ -0,0 +1,18 @@
1
+ import { createClasses } from "../../utils/classes.js";
2
+ const {
3
+ staticClasses,
4
+ useClasses
5
+ } = createClasses("HvTreeView", {
6
+ /** Applied to the root element */
7
+ root: {
8
+ padding: 0,
9
+ margin: 0,
10
+ listStyle: "none",
11
+ outline: "none"
12
+ }
13
+ });
14
+ export {
15
+ staticClasses,
16
+ useClasses
17
+ };
18
+ //# sourceMappingURL=TreeView.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeView.styles.js","sources":["../../../../src/components/TreeView/TreeView.styles.ts"],"sourcesContent":["import { createClasses } from \"@core/utils/classes\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvTreeView\", {\n /** Applied to the root element */\n root: {\n padding: 0,\n margin: 0,\n listStyle: \"none\",\n outline: \"none\",\n },\n});\n"],"names":["staticClasses","useClasses","createClasses","root","padding","margin","listStyle","outline"],"mappings":";AAEa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,cAAc,cAAc;AAAA;AAAA,EAEvEC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,QAAQ;AAAA,IACRC,WAAW;AAAA,IACXC,SAAS;AAAA,EACX;AACF,CAAC;"}
@@ -0,0 +1,15 @@
1
+ import { useTreeViewContext } from "@mui/x-tree-view/internals/TreeViewProvider/useTreeViewContext";
2
+ import { TreeViewProvider } from "@mui/x-tree-view/internals/TreeViewProvider";
3
+ import { DescendantProvider, useDescendant } from "@mui/x-tree-view/internals/TreeViewProvider/DescendantProvider";
4
+ import { DEFAULT_TREE_VIEW_PLUGINS } from "@mui/x-tree-view/internals/plugins/defaultPlugins";
5
+ import { useTreeView } from "@mui/x-tree-view/internals/useTreeView";
6
+ const HV_TREE_VIEW_PLUGINS = [...DEFAULT_TREE_VIEW_PLUGINS];
7
+ export {
8
+ DescendantProvider,
9
+ HV_TREE_VIEW_PLUGINS,
10
+ TreeViewProvider,
11
+ useDescendant,
12
+ useTreeView,
13
+ useTreeViewContext
14
+ };
15
+ //# sourceMappingURL=internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internals.js","sources":["../../../../src/components/TreeView/internals.ts"],"sourcesContent":["import { useTreeViewContext } from \"@mui/x-tree-view/internals/TreeViewProvider/useTreeViewContext\";\nimport { TreeViewProvider } from \"@mui/x-tree-view/internals/TreeViewProvider\";\nimport {\n DescendantProvider,\n TreeItemDescendant,\n useDescendant,\n} from \"@mui/x-tree-view/internals/TreeViewProvider/DescendantProvider\";\nimport {\n DEFAULT_TREE_VIEW_PLUGINS,\n DefaultTreeViewPlugins,\n DefaultTreeViewPluginParameters,\n} from \"@mui/x-tree-view/internals/plugins/defaultPlugins\";\nimport { useTreeView } from \"@mui/x-tree-view/internals/useTreeView\";\n\nexport type {\n DefaultTreeViewPlugins as HvTreeViewPlugins,\n DefaultTreeViewPluginParameters as HvTreeViewPluginParameters,\n TreeItemDescendant,\n};\n\nexport const HV_TREE_VIEW_PLUGINS = [...DEFAULT_TREE_VIEW_PLUGINS] as const;\n\nexport {\n DescendantProvider,\n TreeViewProvider,\n useDescendant,\n useTreeView,\n useTreeViewContext,\n};\n"],"names":["HV_TREE_VIEW_PLUGINS","DEFAULT_TREE_VIEW_PLUGINS"],"mappings":";;;;;AAoBaA,MAAAA,uBAAuB,CAAC,GAAGC,yBAAyB;"}
package/dist/esm/index.js CHANGED
@@ -260,7 +260,12 @@ import { HvCarouselControls } from "./components/Carousel/CarouselControls.js";
260
260
  import { HvCarouselThumbnails } from "./components/Carousel/CarouselThumbnails.js";
261
261
  import { staticClasses as staticClasses112 } from "./components/TimePicker/TimePicker.styles.js";
262
262
  import { HvTimePicker } from "./components/TimePicker/TimePicker.js";
263
- import { staticClasses as staticClasses113 } from "./components/Section/Section.styles.js";
263
+ import { staticClasses as staticClasses113 } from "./components/TreeView/TreeView.styles.js";
264
+ import { HvTreeView } from "./components/TreeView/TreeView.js";
265
+ import { staticClasses as staticClasses114 } from "./components/TreeView/TreeItem/TreeItem.styles.js";
266
+ import { HvTreeItem } from "./components/TreeView/TreeItem/TreeItem.js";
267
+ import { useHvTreeItem } from "./components/TreeView/TreeItem/useHvTreeItem.js";
268
+ import { staticClasses as staticClasses115 } from "./components/Section/Section.styles.js";
264
269
  import { HvSection } from "./components/Section/Section.js";
265
270
  import { useClickOutside } from "./hooks/useClickOutside.js";
266
271
  import { useControlled } from "./hooks/useControlled.js";
@@ -425,6 +430,8 @@ export {
425
430
  HvTimePicker,
426
431
  HvToggleButton,
427
432
  HvTooltip,
433
+ HvTreeItem,
434
+ HvTreeView,
428
435
  HvTypography,
429
436
  HvVerticalNavigation,
430
437
  HvVerticalNavigationAction,
@@ -578,7 +585,7 @@ export {
578
585
  staticClasses89 as rightControlClasses,
579
586
  staticClasses106 as scrollToHorizontalClasses,
580
587
  staticClasses104 as scrollToVerticalClasses,
581
- staticClasses113 as sectionClasses,
588
+ staticClasses115 as sectionClasses,
582
589
  staticClasses11 as selectionListClasses,
583
590
  setElementAttrs,
584
591
  setId,
@@ -608,6 +615,8 @@ export {
608
615
  staticClasses108 as timeAgoClasses,
609
616
  staticClasses112 as timePickerClasses,
610
617
  staticClasses48 as tooltipClasses,
618
+ staticClasses114 as treeItemClasses,
619
+ staticClasses113 as treeView2Classes,
611
620
  staticClasses98 as treeViewClasses,
612
621
  staticClasses99 as treeViewItemClasses,
613
622
  staticClasses as typographyClasses,
@@ -633,6 +642,7 @@ export {
633
642
  default3 as useHvTable,
634
643
  default6 as useHvTableSticky,
635
644
  default4 as useHvTableStyles,
645
+ useHvTreeItem,
636
646
  useImageLoaded,
637
647
  useInstance,
638
648
  useIsMounted,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}