@nvidia-elements/core 2.9.0 → 2.11.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 (265) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -7
  3. package/dist/accordion/accordion.d.ts +4 -4
  4. package/dist/accordion/accordion2.js +4 -4
  5. package/dist/alert/alert-group.d.ts +1 -1
  6. package/dist/alert/alert-group2.js +1 -1
  7. package/dist/alert/alert.d.ts +1 -1
  8. package/dist/alert/alert2.js +1 -1
  9. package/dist/avatar/avatar-group.d.ts +1 -1
  10. package/dist/avatar/avatar-group2.js +1 -1
  11. package/dist/avatar/avatar.d.ts +1 -1
  12. package/dist/avatar/avatar2.js +1 -1
  13. package/dist/badge/badge.d.ts +1 -1
  14. package/dist/badge/badge2.js +1 -1
  15. package/dist/breadcrumb/breadcrumb.d.ts +2 -1
  16. package/dist/breadcrumb/breadcrumb2.js +1 -1
  17. package/dist/breadcrumb/breadcrumb2.js.map +1 -1
  18. package/dist/bundles/index.d.ts +183 -44
  19. package/dist/bundles/index.js +6 -6
  20. package/dist/button/button.d.ts +1 -1
  21. package/dist/button/button2.js +1 -1
  22. package/dist/button-group/button-group.d.ts +1 -1
  23. package/dist/button-group/button-group2.js +1 -1
  24. package/dist/card/card.d.ts +4 -4
  25. package/dist/card/card2.js +4 -4
  26. package/dist/chat-message/chat-message.d.ts +1 -1
  27. package/dist/chat-message/chat-message2.js +1 -1
  28. package/dist/checkbox/checkbox-group2.js +1 -1
  29. package/dist/checkbox/checkbox2.js +1 -1
  30. package/dist/color/color.d.ts +1 -1
  31. package/dist/color/color2.js +1 -1
  32. package/dist/combobox/combobox.d.ts +2 -2
  33. package/dist/combobox/combobox2.js +1 -1
  34. package/dist/copy-button/copy-button.d.ts +1 -1
  35. package/dist/copy-button/copy-button2.js +1 -1
  36. package/dist/custom-elements-jsx.d.ts +117 -25
  37. package/dist/custom-elements-vue.d.ts +115 -25
  38. package/dist/custom-elements.json +1075 -916
  39. package/dist/data.html.json +55 -7
  40. package/dist/data.snippets.json +45 -45
  41. package/dist/date/date.d.ts +1 -1
  42. package/dist/date/date2.js +1 -1
  43. package/dist/datetime/datetime.d.ts +1 -1
  44. package/dist/datetime/datetime2.js +1 -1
  45. package/dist/dialog/dialog-footer.d.ts +1 -1
  46. package/dist/dialog/dialog-footer2.js +1 -1
  47. package/dist/dialog/dialog-header.d.ts +1 -1
  48. package/dist/dialog/dialog-header2.js +1 -1
  49. package/dist/dialog/dialog.d.ts +1 -1
  50. package/dist/dialog/dialog2.js +1 -1
  51. package/dist/divider/divider.d.ts +1 -1
  52. package/dist/divider/divider2.js +1 -1
  53. package/dist/dot/dot.d.ts +1 -1
  54. package/dist/dot/dot2.js +1 -1
  55. package/dist/drawer/drawer-content.d.ts +1 -1
  56. package/dist/drawer/drawer-content2.js +1 -1
  57. package/dist/drawer/drawer-footer.d.ts +1 -1
  58. package/dist/drawer/drawer-footer2.js +1 -1
  59. package/dist/drawer/drawer-header.d.ts +1 -1
  60. package/dist/drawer/drawer-header2.js +1 -1
  61. package/dist/drawer/drawer.d.ts +1 -1
  62. package/dist/drawer/drawer2.js +1 -1
  63. package/dist/dropdown/dropdown-footer.d.ts +1 -1
  64. package/dist/dropdown/dropdown-footer2.js +1 -1
  65. package/dist/dropdown/dropdown-header.d.ts +1 -1
  66. package/dist/dropdown/dropdown-header2.js +1 -1
  67. package/dist/dropdown/dropdown.d.ts +1 -1
  68. package/dist/dropdown/dropdown2.js +1 -1
  69. package/dist/dropdown-group/dropdown-group.d.ts +1 -1
  70. package/dist/dropdown-group/dropdown-group.js +1 -1
  71. package/dist/dropzone/dropzone.d.ts +1 -1
  72. package/dist/dropzone/dropzone2.js +1 -1
  73. package/dist/file/file2.js +1 -1
  74. package/dist/format-bytes/format-bytes.d.ts +1 -1
  75. package/dist/format-bytes/format-bytes2.js +1 -1
  76. package/dist/format-datetime/format-datetime.d.ts +1 -1
  77. package/dist/format-datetime/format-datetime2.js +1 -1
  78. package/dist/format-number/format-number.d.ts +1 -1
  79. package/dist/format-number/format-number2.js +1 -1
  80. package/dist/format-relative-time/format-relative-time.d.ts +1 -1
  81. package/dist/format-relative-time/format-relative-time2.js +1 -1
  82. package/dist/format-truncate/format-truncate2.js +1 -1
  83. package/dist/forms/control/control2.js +1 -1
  84. package/dist/forms/control-group/control-group.d.ts +3 -1
  85. package/dist/forms/control-group/control-group2.js +1 -1
  86. package/dist/forms/control-group/control-group2.js.map +1 -1
  87. package/dist/forms/control-message/control-message.d.ts +1 -1
  88. package/dist/forms/control-message/control-message2.js +1 -1
  89. package/dist/gauge/gauge.d.ts +1 -1
  90. package/dist/gauge/gauge2.js +1 -1
  91. package/dist/grid/cell/cell.d.ts +1 -1
  92. package/dist/grid/cell/cell2.js +1 -1
  93. package/dist/grid/column/column.d.ts +1 -1
  94. package/dist/grid/column/column2.js +1 -1
  95. package/dist/grid/footer/footer.d.ts +1 -1
  96. package/dist/grid/footer/footer2.js +1 -1
  97. package/dist/grid/grid.d.ts +3 -1
  98. package/dist/grid/grid2.js +1 -1
  99. package/dist/grid/grid2.js.map +1 -1
  100. package/dist/grid/header/header.d.ts +1 -1
  101. package/dist/grid/header/header2.js +1 -1
  102. package/dist/grid/placeholder/placeholder.d.ts +1 -1
  103. package/dist/grid/placeholder/placeholder2.js +1 -1
  104. package/dist/grid/row/row.d.ts +1 -1
  105. package/dist/grid/row/row2.js +1 -1
  106. package/dist/icon/icon.d.ts +1 -1
  107. package/dist/icon/icon2.js +2 -2
  108. package/dist/icon-button/icon-button.d.ts +1 -1
  109. package/dist/icon-button/icon-button2.js +1 -1
  110. package/dist/index.js +1 -1
  111. package/dist/input/input-group2.js +1 -1
  112. package/dist/input/input2.js +1 -1
  113. package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
  114. package/dist/internal/services/global.service.js +1 -1
  115. package/dist/internal/types/index.d.ts +6 -2
  116. package/dist/internal/types/index.js.map +1 -1
  117. package/dist/internal/utils/audit.js +1 -1
  118. package/dist/internal/utils/audit.js.map +1 -1
  119. package/dist/internal/utils/dom.d.ts +3 -1
  120. package/dist/internal/utils/dom.js.map +1 -1
  121. package/dist/logo/logo.d.ts +1 -1
  122. package/dist/logo/logo2.js +1 -1
  123. package/dist/menu/define.d.ts +2 -1
  124. package/dist/menu/define.js +3 -2
  125. package/dist/menu/define.js.map +1 -1
  126. package/dist/menu/index.d.ts +1 -0
  127. package/dist/menu/index.js +3 -2
  128. package/dist/menu/menu-group.d.ts +50 -0
  129. package/dist/menu/menu-group.js +6 -0
  130. package/dist/menu/menu-group.js.map +1 -0
  131. package/dist/menu/menu-group2.js +53 -0
  132. package/dist/menu/menu-group2.js.map +1 -0
  133. package/dist/menu/menu-item.d.ts +2 -1
  134. package/dist/menu/menu-item.js +1 -1
  135. package/dist/menu/menu-item.js.map +1 -1
  136. package/dist/menu/menu-item2.js +2 -2
  137. package/dist/menu/menu-item2.js.map +1 -1
  138. package/dist/menu/menu.d.ts +7 -2
  139. package/dist/menu/menu.examples.js.map +1 -1
  140. package/dist/menu/menu.examples.json +53 -13
  141. package/dist/menu/menu.global.js +1 -1
  142. package/dist/menu/menu.global.js.map +1 -1
  143. package/dist/menu/menu2.js +16 -8
  144. package/dist/menu/menu2.js.map +1 -1
  145. package/dist/month/month.d.ts +1 -1
  146. package/dist/month/month2.js +1 -1
  147. package/dist/notification/notification-group.d.ts +1 -1
  148. package/dist/notification/notification-group2.js +1 -1
  149. package/dist/notification/notification.d.ts +1 -1
  150. package/dist/notification/notification2.js +1 -1
  151. package/dist/page/page-panel/page-panel-content.d.ts +1 -1
  152. package/dist/page/page-panel/page-panel-content2.js +1 -1
  153. package/dist/page/page-panel/page-panel-footer.d.ts +1 -1
  154. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  155. package/dist/page/page-panel/page-panel-header.d.ts +1 -1
  156. package/dist/page/page-panel/page-panel-header2.js +1 -1
  157. package/dist/page/page-panel/page-panel.d.ts +1 -1
  158. package/dist/page/page-panel/page-panel2.js +1 -1
  159. package/dist/page/page.d.ts +1 -1
  160. package/dist/page/page2.js +1 -1
  161. package/dist/page-header/page-header.d.ts +1 -1
  162. package/dist/page-header/page-header2.js +1 -1
  163. package/dist/page-loader/page-loader.d.ts +1 -1
  164. package/dist/page-loader/page-loader2.js +1 -1
  165. package/dist/pagination/pagination.d.ts +1 -1
  166. package/dist/pagination/pagination2.js +1 -1
  167. package/dist/panel/panel.d.ts +4 -4
  168. package/dist/panel/panel2.js +4 -4
  169. package/dist/password/password.d.ts +1 -1
  170. package/dist/password/password2.js +1 -1
  171. package/dist/preferences-input/preferences-input.d.ts +1 -1
  172. package/dist/preferences-input/preferences-input2.js +1 -1
  173. package/dist/progress-bar/progress-bar.d.ts +1 -1
  174. package/dist/progress-bar/progress-bar2.js +1 -1
  175. package/dist/progress-ring/progress-ring.d.ts +1 -1
  176. package/dist/progress-ring/progress-ring2.js +1 -1
  177. package/dist/progressive-filter-chip/progressive-filter-chip.d.ts +1 -1
  178. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  179. package/dist/pulse/pulse.d.ts +1 -1
  180. package/dist/pulse/pulse2.js +1 -1
  181. package/dist/radio/radio-group2.js +1 -1
  182. package/dist/radio/radio2.js +1 -1
  183. package/dist/range/range.d.ts +1 -1
  184. package/dist/range/range2.js +1 -1
  185. package/dist/resize-handle/resize-handle.d.ts +1 -1
  186. package/dist/resize-handle/resize-handle2.js +1 -1
  187. package/dist/search/search.d.ts +1 -1
  188. package/dist/search/search2.js +1 -1
  189. package/dist/select/select.d.ts +2 -2
  190. package/dist/select/select2.js +1 -1
  191. package/dist/skeleton/skeleton.d.ts +1 -1
  192. package/dist/skeleton/skeleton2.js +1 -1
  193. package/dist/sort-button/sort-button.d.ts +1 -1
  194. package/dist/sort-button/sort-button2.js +1 -1
  195. package/dist/sparkline/sparkline.d.ts +1 -1
  196. package/dist/sparkline/sparkline2.js +1 -1
  197. package/dist/star-rating/star-rating.d.ts +1 -1
  198. package/dist/star-rating/star-rating2.js +1 -1
  199. package/dist/steps/steps.d.ts +5 -5
  200. package/dist/steps/steps2.js +2 -2
  201. package/dist/steps/steps2.js.map +1 -1
  202. package/dist/switch/switch-group2.js +1 -1
  203. package/dist/switch/switch2.js +1 -1
  204. package/dist/tabs/tabs-group.d.ts +1 -1
  205. package/dist/tabs/tabs-group2.js +1 -1
  206. package/dist/tabs/tabs.d.ts +2 -2
  207. package/dist/tabs/tabs2.js +2 -2
  208. package/dist/tag/tag.d.ts +1 -1
  209. package/dist/tag/tag2.js +1 -1
  210. package/dist/textarea/textarea.d.ts +2 -2
  211. package/dist/textarea/textarea2.js +1 -1
  212. package/dist/time/time.d.ts +1 -1
  213. package/dist/time/time2.js +1 -1
  214. package/dist/toast/toast.d.ts +1 -1
  215. package/dist/toast/toast2.js +1 -1
  216. package/dist/toggletip/toggletip-footer.d.ts +1 -1
  217. package/dist/toggletip/toggletip-footer2.js +1 -1
  218. package/dist/toggletip/toggletip-header.d.ts +1 -1
  219. package/dist/toggletip/toggletip-header2.js +1 -1
  220. package/dist/toggletip/toggletip.d.ts +1 -1
  221. package/dist/toggletip/toggletip2.js +1 -1
  222. package/dist/toolbar/toolbar.d.ts +1 -1
  223. package/dist/toolbar/toolbar2.js +1 -1
  224. package/dist/tooltip/tooltip.d.ts +1 -1
  225. package/dist/tooltip/tooltip2.js +1 -1
  226. package/dist/tree/tree-node.d.ts +2 -2
  227. package/dist/tree/tree-node2.js +1 -1
  228. package/dist/tree/tree-node2.js.map +1 -1
  229. package/dist/tree/tree.d.ts +2 -1
  230. package/dist/tree/tree2.js +1 -1
  231. package/dist/tree/tree2.js.map +1 -1
  232. package/dist/viewport/define.d.ts +2 -1
  233. package/dist/viewport/define.js +2 -1
  234. package/dist/viewport/define.js.map +1 -1
  235. package/dist/viewport/index.d.ts +2 -1
  236. package/dist/viewport/index.js +2 -1
  237. package/dist/viewport/viewport-gesture-navigation.controller.d.ts +8 -10
  238. package/dist/viewport/viewport-gesture-navigation.controller.js +73 -66
  239. package/dist/viewport/viewport-gesture-navigation.controller.js.map +1 -1
  240. package/dist/viewport/viewport-gridlines.d.ts +1 -1
  241. package/dist/viewport/viewport-gridlines2.js +3 -3
  242. package/dist/viewport/viewport-gridlines2.js.map +1 -1
  243. package/dist/viewport/viewport-minimap.d.ts +36 -0
  244. package/dist/viewport/viewport-minimap.js +6 -0
  245. package/dist/viewport/viewport-minimap.js.map +1 -0
  246. package/dist/viewport/viewport-minimap.utils.d.ts +13 -0
  247. package/dist/viewport/viewport-minimap.utils.js +49 -0
  248. package/dist/viewport/viewport-minimap.utils.js.map +1 -0
  249. package/dist/viewport/viewport-minimap2.js +309 -0
  250. package/dist/viewport/viewport-minimap2.js.map +1 -0
  251. package/dist/viewport/viewport-navigation.controller.d.ts +7 -13
  252. package/dist/viewport/viewport-navigation.controller.js +14 -20
  253. package/dist/viewport/viewport-navigation.controller.js.map +1 -1
  254. package/dist/viewport/viewport-navigation.types.d.ts +0 -8
  255. package/dist/viewport/viewport.d.ts +31 -6
  256. package/dist/viewport/viewport.examples.js.map +1 -1
  257. package/dist/viewport/viewport.examples.json +13 -4
  258. package/dist/viewport/viewport.js +1 -1
  259. package/dist/viewport/viewport.js.map +1 -1
  260. package/dist/viewport/viewport.types.d.ts +50 -23
  261. package/dist/viewport/viewport2.js +173 -118
  262. package/dist/viewport/viewport2.js.map +1 -1
  263. package/dist/week/week.d.ts +1 -1
  264. package/dist/week/week2.js +1 -1
  265. package/package.json +7 -4
@@ -72,6 +72,6 @@ export declare class Tooltip extends LitElement {
72
72
  protected typeNativePopoverController: TypeNativePopoverController<Tooltip>;
73
73
  /** @private */
74
74
  _internals: ElementInternals;
75
- render(): import("lit").TemplateResult<1>;
75
+ render(): import("lit-html").TemplateResult<1>;
76
76
  connectedCallback(): void;
77
77
  }
@@ -19,7 +19,7 @@ var d = class extends s {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-tooltip",
22
- version: "2.9.0"
22
+ version: "2.11.0"
23
23
  };
24
24
  }
25
25
  render() {
@@ -65,7 +65,7 @@ export declare class TreeNode extends LitElement {
65
65
  /** @private */
66
66
  slot: string;
67
67
  /**
68
- * Returns list of child nodes
68
+ * Returns the slotted child tree nodes.
69
69
  */
70
70
  readonly nodes: TreeNode[];
71
71
  /** @private */
@@ -86,7 +86,7 @@ export declare class TreeNode extends LitElement {
86
86
  };
87
87
  static styles: import("lit").CSSResult[];
88
88
  _internals: ElementInternals;
89
- render(): import("lit").TemplateResult<1>;
89
+ render(): import("lit-html").TemplateResult<1>;
90
90
  connectedCallback(): void;
91
91
  disconnectedCallback(): void;
92
92
  /** opens and sets the expanded state automatically if behaviorExpand is true */
@@ -44,7 +44,7 @@ var E = class extends b {
44
44
  static {
45
45
  this.metadata = {
46
46
  tag: "nve-tree-node",
47
- version: "2.9.0",
47
+ version: "2.11.0",
48
48
  parents: ["nve-tree", "nve-tree-node"]
49
49
  };
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node2.js","names":[],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n I18nController,\n TypeExpandableController,\n TypeSelectableController,\n attachInternals,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n scopedRegistry,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns list of child nodes\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /** @private */\n @state() indeterminate = false;\n\n /** @private */\n @state() behaviorExpand = false;\n\n /** @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <slot class=\"node-title\" @click=${this.#nodeHeaderClick}></slot>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keydown', this.#onKeydown);\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this.#onKeydown);\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeydown = (e: KeyboardEvent) => {\n const isSelectionKey = this.selectable && e.code === 'Space';\n const isExpansionKey = this.#isExpandable && (e.code === 'ArrowLeft' || e.code === 'ArrowRight');\n\n if (e.target === this && (isSelectionKey || isExpansionKey)) {\n e.preventDefault();\n }\n };\n\n #onKeyup = (e: KeyboardEvent) => {\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree-node2.js","names":[],"sources":["../../src/tree/tree-node.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';\nimport {\n I18nController,\n TypeExpandableController,\n TypeSelectableController,\n attachInternals,\n audit,\n getFlattenedFocusableItems,\n hostAttr,\n scopedRegistry,\n stateExpanded,\n stateHighlighted,\n stateSelected,\n typeAnchor,\n typeSSR,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport { Checkbox } from '@nvidia-elements/core/checkbox';\nimport type { Tree } from './tree.js';\nimport styles from './tree-node.css?inline';\nimport { updateNodeSelection } from './utils.js';\n\n/**\n * @element nve-tree-node\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @event open - Dispatched when the node opens.\n * @event close - Dispatched when the node closes.\n * @event select - Dispatched when the node selection state changes.\n * @command --select - use to select the node\n * @command --deselect - use to deselect the node\n * @command --toggle-select - use to toggle the node selection state\n * @command --open - use to open the node\n * @command --close - use to close the node\n * @command --toggle - use to toggle open / closed state of the node\n * @slot - Use default slot for basic text content or nested <nve-tree-node> elements.\n * @slot content - Use only for extended long form content containing interactive elements or form inputs.\n * @cssprop --color\n * @cssprop --border-radius\n * @cssprop --font-size\n * @cssprop --min-height\n * @cssprop --text-wrap\n * @cssprop --font-weight\n * @cssprop --width\n\n * @csspart icon-button - The icon button element\n * @csspart icon - The icon element\n * @csspart checkbox - The checkbox element\n\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@typeSSR({ log: false }) // warning about ssr mismatch disabled as tree node will never be a 1:1 match in ssr due to performance constraints and slot complexity\n@typeAnchor()\n@stateSelected()\n@stateExpanded()\n@scopedRegistry()\n@stateHighlighted()\nexport class TreeNode extends LitElement {\n /**\n * Determines if node is in an expanded state.\n */\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Determines whether if node is in a selected state.\n */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /**\n * Determines whether a node can be expandable. Expandable by default if slotted nodes exist.\n */\n @property({ type: Boolean }) expandable = false;\n\n /**\n * Determines whether a node can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines the highlighted state of the element. Highlighted states serve non-interactive selections where nodes may relate to other selected portions of the UI.\n */\n @property({ type: Boolean }) highlighted = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Updates internal string values for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** @private */\n @hostAttr() slot = 'nodes';\n\n get #tree() {\n return this.closest<Tree>('nve-tree');\n }\n\n /**\n * Returns the slotted child tree nodes.\n */\n @queryAssignedElements({ slot: 'nodes' }) readonly nodes!: TreeNode[];\n\n /** @private */\n @state() indeterminate = false;\n\n /** @private */\n @state() behaviorExpand = false;\n\n /** @private */\n @state() behaviorSelect = false;\n\n #typeExpandableController = new TypeExpandableController(this);\n\n #typeSelectableController = new TypeSelectableController(this);\n\n get #isExpandable() {\n return this.expandable || this.expanded || !!this.nodes?.length;\n }\n\n static metadata = {\n tag: 'nve-tree-node',\n version: '0.0.0',\n parents: ['nve-tree', 'nve-tree-node']\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton,\n [Icon.metadata.tag]: Icon,\n [Checkbox.metadata.tag]: Checkbox\n };\n\n static styles = useStyles([styles]);\n\n declare _internals: ElementInternals;\n\n /* eslint-disable @nvidia-elements/lint/no-missing-control-label */\n render() {\n return html`\n <div internal-host @slotchange=${this.#nodeUpdate}>\n <div part=\"_node\">\n ${\n this.#isExpandable\n ? html`\n <nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @pointerup=${this.#toggleExpand} role=\"presentation\" tabindex=\"-1\" size=\"sm\" container=\"inline\" nofocus>\n <nve-icon part=\"icon\" name=\"caret\" direction=${this.expanded ? 'down' : 'right'} size=\"sm\"></nve-icon>\n </nve-icon-button>`\n : nothing\n }\n ${\n this.selectable === 'multi'\n ? html`\n <nve-checkbox part=\"checkbox\" nofocus>\n <input type=\"checkbox\" @change=${this.#toggleMultiSelection} .checked=${this.selected} .indeterminate=${this.indeterminate} .ariaLabel=${this.i18n.expand} tabindex=\"-1\" />\n </nve-checkbox>`\n : nothing\n }\n <div tabindex=\"0\" part=\"_node-header\">\n <slot class=\"node-title\" @click=${this.#nodeHeaderClick}></slot>\n <slot name=\"content\" part=\"_content\"></slot>\n </div>\n </div>\n <div role=\"group\" part=\"_nodes\"><slot name=\"nodes\"></slot></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n this._internals.role = 'treeitem';\n this.addEventListener('keydown', this.#onKeydown);\n this.addEventListener('keyup', this.#onKeyup);\n this.#nodeUpdate();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this.#onKeydown);\n this.removeEventListener('keyup', this.#onKeyup);\n }\n\n /** opens and sets the expanded state automatically if behaviorExpand is true */\n open() {\n this.#typeExpandableController.open();\n }\n\n /** closes and sets the expanded state automatically if behaviorExpand is true */\n close() {\n this.#typeExpandableController.close();\n }\n\n #nodeUpdate() {\n this.requestUpdate();\n this.#toggleExpandableState();\n }\n\n #toggleExpandableState() {\n this.#isExpandable ? this._internals.states.add('is-expandable') : this._internals.states.delete('is-expandable');\n }\n\n #onKeydown = (e: KeyboardEvent) => {\n const isSelectionKey = this.selectable && e.code === 'Space';\n const isExpansionKey = this.#isExpandable && (e.code === 'ArrowLeft' || e.code === 'ArrowRight');\n\n if (e.target === this && (isSelectionKey || isExpansionKey)) {\n e.preventDefault();\n }\n };\n\n #onKeyup = (e: KeyboardEvent) => {\n if (this.#isExpandable && e.code === 'ArrowLeft' && e.target === this) {\n this.close();\n }\n\n if (this.#isExpandable && e.code === 'ArrowRight' && e.target === this) {\n this.open();\n }\n\n if (e.code === 'Space' && e.target === this && this.selectable) {\n this.#toggleSelection();\n }\n };\n\n #nodeHeaderClick(e: Event) {\n const hasFocusableElements = getFlattenedFocusableItems(e.currentTarget as HTMLElement).length;\n if (this.#isExpandable && !this.selectable && !hasFocusableElements) {\n this.#toggleExpand();\n }\n\n if (this.selectable && (!hasFocusableElements || (e.target as HTMLElement).localName === 'a')) {\n this.#toggleSelection();\n }\n }\n\n #toggleExpand() {\n this.#typeExpandableController.toggle();\n }\n\n #toggleSelection() {\n if (this.selectable === 'single') {\n this.#toggleSingleSelection();\n }\n\n if (this.selectable === 'multi') {\n this.#toggleMultiSelection();\n }\n }\n\n #toggleSingleSelection() {\n this.#typeSelectableController.toggle();\n if (this.behaviorSelect) {\n this.#tree!.nodes.filter(n => n !== this).forEach(n => (n.selected = false));\n }\n }\n\n #toggleMultiSelection() {\n this.#typeSelectableController.toggle();\n\n if (this.behaviorSelect) {\n this.nodes.forEach(n => {\n n.selected = this.selected;\n n.indeterminate = false;\n });\n this.#tree!.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":"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"}
@@ -42,12 +42,13 @@ export declare class Tree extends LitElement {
42
42
  children: string[];
43
43
  };
44
44
  _internals: ElementInternals;
45
+ /** Returns the tree nodes in document order. */
45
46
  get nodes(): TreeNode[];
46
47
  /** @private */
47
48
  get keynavListConfig(): KeynavListConfig;
48
49
  /** @private */
49
50
  get openNodes(): TreeNode[];
50
- render(): import("lit").TemplateResult<1>;
51
+ render(): import("lit-html").TemplateResult<1>;
51
52
  connectedCallback(): void;
52
53
  disconnectedCallback(): void;
53
54
  updated(props: PropertyValues<this>): Promise<void>;
@@ -22,7 +22,7 @@ var m = class extends d {
22
22
  static {
23
23
  this.metadata = {
24
24
  tag: "nve-tree",
25
- version: "2.9.0",
25
+ version: "2.11.0",
26
26
  children: ["nve-tree-node"]
27
27
  };
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tree2.js","names":[],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport {\n appendRootNodeStyle,\n attachInternals,\n audit,\n keyNavigationList,\n onChildListMutation,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqCO,IAAM,IAAN,cAAmB,EAAW;;EA4DF,aAnD2C,KAAA,iBAAA,IAKA,KAAA,iBAAA,IAKvB,KAAA,SAAA,IAyCpB,KAAA,KAAA,CAAC;;;EAvClB,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAIA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQ,EAAK,WAAY,cAAc,yBAAuB,CAAC,CAAC,CACpE,QAAQ,MAA0B,MAAO,IAAI;GAChD,QAAQ;EACV;CACF;CAGA,IAAI,YAAwB;EAC1B,OAAO,KAAK,MAAM,QAChB,MAAQ,EAAK,YAAa,EAAK,WAAwB,YAAa,EAAK,eAAwB,IACnG;CACF;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,EAAoB,MAAM,CAAY,GACtC,KAAK,WAAW,OAAO,QAEvB,KAAK,GAAW,KACd,EACE,YACM;GACJ,KAAK,GAAW;EAClB,GACA,EAAE,SAAS,GAAK,CAClB,CACF;CACF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAK,GAAW,SAAQ,MAAK,EAAE,WAAW,CAAC;CAC7C;CAEA,MAAM,QAAQ,GAA6B;EAGzC,AAFA,MAAM,QAAQ,CAAK,GACnB,MAAM,KAAK,gBACX,KAAK,GAAW;CAClB;CAEA,KAAa;EAEX,AADA,KAAK,GAAiB,GACtB,KAAK,GAAoB;CAC3B;CAEA,KAAmB;EACjB,KAAK,MAAM,SAAQ,MAAQ;GAGzB,AAFA,EAAK,aAAa,KAAK,YACvB,EAAK,iBAAiB,KAAK,gBAC3B,EAAK,iBAAiB,KAAK;EAC7B,CAAC;CACH;CAEA,KAAsB;EACpB,AAAI,KAAK,kBAAkB,KAAK,eAAe,WAC7C,KAAK,MAAM,SAAQ,MAAQ,EAAoB,CAAI,CAAC;CAExD;AACF;AAxGG,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,cAAA,KAAA,CAAA,GAKzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxD,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxD,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GArB3C,IAAA,EAAA,CAAA,EAAM,GACN,EAAwB,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"tree2.js","names":[],"sources":["../../src/tree/tree.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PropertyValues } from 'lit';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport {\n appendRootNodeStyle,\n attachInternals,\n audit,\n keyNavigationList,\n onChildListMutation,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { updateNodeSelection } from './utils.js';\nimport { TreeNode } from './tree-node.js';\nimport styles from './tree.css?inline';\nimport globalStyles from './tree.global.css?inline';\n\n/**\n * @element nve-tree\n * @description A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children can expand or collapse to show or hide the children.\n * @documentation https://nvidia.github.io/elements/docs/elements/tree/\n * @since 1.2.0\n * @entrypoint \\@nvidia-elements/core/tree\n * @slot - tree nodes\n * @cssprop --max-width\n * @cssprop --node-border - Border style for tree node depth indicator\n * @event open - Dispatched from a child nve-tree-node when opened.\n * @event close - Dispatched from a child nve-tree-node when closed.\n * @event select - Dispatched from a child nve-tree-node when its selection state changes.\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/treeview/\n *\n */\n@audit()\n@keyNavigationList<Tree>()\nexport class Tree extends LitElement {\n /**\n * Determines whether all nodes can be in a selected state. Nodes can be in a single or multi select state.\n */\n @property({ type: String }) selectable: 'single' | 'multi';\n\n /**\n * Determines whether the tree nodes should handle auto-expanding behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-expand' }) behaviorExpand = false;\n\n /**\n * Determines whether the tree nodes should handle auto-select behavior.\n */\n @property({ type: Boolean, attribute: 'behavior-select' }) behaviorSelect = false;\n\n /**\n * Determines if the node depth border renders.\n */\n @property({ type: Boolean, reflect: true }) border = false;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-tree',\n version: '0.0.0',\n children: ['nve-tree-node']\n };\n\n _internals: ElementInternals;\n\n /** Returns the tree nodes in document order. */\n get nodes() {\n return Array.from(this.querySelectorAll<TreeNode>(TreeNode.metadata.tag));\n }\n\n /** @private */\n get keynavListConfig(): KeynavListConfig {\n return {\n items: this.openNodes\n .map(node => node.shadowRoot!.querySelector('[part=\"_node-header\"]'))\n .filter((el): el is HTMLElement => el !== null),\n layout: 'vertical'\n };\n }\n\n /** @private */\n get openNodes(): TreeNode[] {\n return this.nodes.filter(\n node => node.expanded || (node.parentNode as TreeNode).expanded || (node.parentNode as Tree) === this\n );\n }\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"nodes\"></slot>\n </div>\n `;\n }\n\n #observers: MutationObserver[] = [];\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this._internals.role = 'tree';\n\n this.#observers.push(\n onChildListMutation(\n this,\n () => {\n this.#syncNodes();\n },\n { subtree: true }\n )\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#observers.forEach(o => o.disconnect());\n }\n\n async updated(props: PropertyValues<this>) {\n super.updated(props);\n await this.updateComplete;\n this.#syncNodes();\n }\n\n #syncNodes() {\n this.#syncNodeOptions();\n this.#syncNodeSelections();\n }\n\n #syncNodeOptions() {\n this.nodes.forEach(node => {\n node.selectable = this.selectable;\n node.behaviorExpand = this.behaviorExpand;\n node.behaviorSelect = this.behaviorSelect;\n });\n }\n\n #syncNodeSelections() {\n if (this.behaviorSelect && this.selectable === 'multi') {\n this.nodes.forEach(node => updateNodeSelection(node));\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqCO,IAAM,IAAN,cAAmB,EAAW;;EA6DF,aApD2C,KAAA,iBAAA,IAKA,KAAA,iBAAA,IAKvB,KAAA,SAAA,IA0CpB,KAAA,KAAA,CAAC;;;EAxClB,KAAA,SAAA,EAAU,CAAC,CAAM,CAAC;;;EAEP,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;GACT,UAAU,CAAC,eAAe;EAC5B;;CAKA,IAAI,QAAQ;EACV,OAAO,MAAM,KAAK,KAAK,iBAA2B,EAAS,SAAS,GAAG,CAAC;CAC1E;CAGA,IAAI,mBAAqC;EACvC,OAAO;GACL,OAAO,KAAK,UACT,KAAI,MAAQ,EAAK,WAAY,cAAc,yBAAuB,CAAC,CAAC,CACpE,QAAQ,MAA0B,MAAO,IAAI;GAChD,QAAQ;EACV;CACF;CAGA,IAAI,YAAwB;EAC1B,OAAO,KAAK,MAAM,QAChB,MAAQ,EAAK,YAAa,EAAK,WAAwB,YAAa,EAAK,eAAwB,IACnG;CACF;CAEA,SAAS;EACP,OAAO,CAAI;CAKb;CAEA;CAEA,oBAAoB;EAMlB,AALA,MAAM,kBAAkB,GACxB,EAAgB,IAAI,GACpB,EAAoB,MAAM,CAAY,GACtC,KAAK,WAAW,OAAO,QAEvB,KAAK,GAAW,KACd,EACE,YACM;GACJ,KAAK,GAAW;EAClB,GACA,EAAE,SAAS,GAAK,CAClB,CACF;CACF;CAEA,uBAAuB;EAErB,AADA,MAAM,qBAAqB,GAC3B,KAAK,GAAW,SAAQ,MAAK,EAAE,WAAW,CAAC;CAC7C;CAEA,MAAM,QAAQ,GAA6B;EAGzC,AAFA,MAAM,QAAQ,CAAK,GACnB,MAAM,KAAK,gBACX,KAAK,GAAW;CAClB;CAEA,KAAa;EAEX,AADA,KAAK,GAAiB,GACtB,KAAK,GAAoB;CAC3B;CAEA,KAAmB;EACjB,KAAK,MAAM,SAAQ,MAAQ;GAGzB,AAFA,EAAK,aAAa,KAAK,YACvB,EAAK,iBAAiB,KAAK,gBAC3B,EAAK,iBAAiB,KAAK;EAC7B,CAAC;CACH;CAEA,KAAsB;EACpB,AAAI,KAAK,kBAAkB,KAAK,eAAe,WAC7C,KAAK,MAAM,SAAQ,MAAQ,EAAoB,CAAI,CAAC;CAExD;AACF;AAzGG,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,cAAA,KAAA,CAAA,GAKzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxD,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,EAAA,WAAA,kBAAA,KAAA,CAAA,GAKxD,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GArB3C,IAAA,EAAA,CAAA,EAAM,GACN,EAAwB,CAAA,GAAA,CAAA"}
@@ -1,7 +1,8 @@
1
- import { Viewport, ViewportGridlines } from '@nvidia-elements/core/viewport';
1
+ import { Viewport, ViewportGridlines, ViewportMinimap } from '@nvidia-elements/core/viewport';
2
2
  declare global {
3
3
  interface HTMLElementTagNameMap {
4
4
  'nve-viewport': Viewport;
5
5
  'nve-viewport-gridlines': ViewportGridlines;
6
+ 'nve-viewport-minimap': ViewportMinimap;
6
7
  }
7
8
  }
@@ -1,7 +1,8 @@
1
1
  import { define as e } from "../internal/utils/dom.js";
2
2
  import { Viewport as t } from "./viewport2.js";
3
3
  import { ViewportGridlines as n } from "./viewport-gridlines2.js";
4
- e(t), e(n);
4
+ import { ViewportMinimap as r } from "./viewport-minimap2.js";
5
+ e(t), e(n), e(r);
5
6
  //#endregion
6
7
 
7
8
  //# sourceMappingURL=define.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","names":[],"sources":["../../src/viewport/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { Viewport, ViewportGridlines } from '@nvidia-elements/core/viewport';\n\ndefine(Viewport);\ndefine(ViewportGridlines);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-viewport': Viewport;\n 'nve-viewport-gridlines': ViewportGridlines;\n }\n}\n"],"mappings":";;;AAMA,EAAO,CAAQ,GACf,EAAO,CAAiB"}
1
+ {"version":3,"file":"define.js","names":[],"sources":["../../src/viewport/define.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { define } from '@nvidia-elements/core/internal';\nimport { Viewport, ViewportGridlines, ViewportMinimap } from '@nvidia-elements/core/viewport';\n\ndefine(Viewport);\ndefine(ViewportGridlines);\ndefine(ViewportMinimap);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nve-viewport': Viewport;\n 'nve-viewport-gridlines': ViewportGridlines;\n 'nve-viewport-minimap': ViewportMinimap;\n }\n}\n"],"mappings":";;;;AAMA,EAAO,CAAQ,GACf,EAAO,CAAiB,GACxB,EAAO,CAAe"}
@@ -1,3 +1,4 @@
1
1
  export * from './viewport.js';
2
2
  export * from './viewport-gridlines.js';
3
- export type { ViewportAnimationOptions, ViewportDiscretePanDetail, ViewportPanBehavior, ViewportPanDetail, ViewportPanEndDetail, ViewportPanEndReason, ViewportPoint, ViewportPointerPanDetail, ViewportRect, ViewportRevealOptions, ViewportTransform, ViewportWheelPanDetail, ViewportZoomDetail } from './viewport.types.js';
3
+ export * from './viewport-minimap.js';
4
+ export type { ViewportAnimationOptions, ViewportDiscretePanDetail, ViewportPanBehavior, ViewportPanDetail, ViewportPanEndDetail, ViewportPanEndReason, ViewportNavigationSource, ViewportPanProposal, ViewportPanUpdateProposal, ViewportPanEndRequest, ViewportPanSession, ViewportZoomProposal, ViewportZoomRequestOptions, ViewportPoint, ViewportPointerPanDetail, ViewportRect, ViewportRevealOptions, ViewportTransform, ViewportWheelPanDetail, ViewportZoomDetail } from './viewport.types.js';
@@ -1,3 +1,4 @@
1
1
  import { Viewport as e } from "./viewport2.js";
2
2
  import { ViewportGridlines as t } from "./viewport-gridlines2.js";
3
- export { e as Viewport, t as ViewportGridlines };
3
+ import { ViewportMinimap as n } from "./viewport-minimap2.js";
4
+ export { e as Viewport, t as ViewportGridlines, n as ViewportMinimap };
@@ -1,29 +1,27 @@
1
1
  import type { ReactiveController, ReactiveControllerHost } from 'lit';
2
- import type { ViewportPanBehavior, ViewportPoint, ViewportTransform } from './viewport.types.js';
3
- import type { ViewportNavigationEventDelegate } from './viewport-navigation.types.js';
2
+ import type { ViewportPanBehavior, ViewportPanSession, ViewportPanProposal, ViewportPoint, ViewportTransform, ViewportZoomProposal } from './viewport.types.js';
4
3
  type ViewportGestureNavigationHost = HTMLElement & ReactiveControllerHost & {
5
4
  readonly _internals: ElementInternals;
6
5
  readonly behaviorPan: ViewportPanBehavior;
7
- readonly behaviorZoom: boolean;
6
+ readonly pannable: boolean;
7
+ readonly zoomable: boolean;
8
8
  readonly dragThreshold: number;
9
+ requestPan(proposal: ViewportPanProposal): boolean;
10
+ requestZoom(proposal: ViewportZoomProposal): boolean;
11
+ startPan(proposal: ViewportPanProposal): ViewportPanSession | undefined;
9
12
  };
10
- export interface ViewportGestureNavigationDelegate {
11
- readonly commitTransform: (next: ViewportTransform) => boolean;
12
- readonly cancelAnimation: () => void;
13
+ interface ViewportGestureNavigationDelegate {
13
14
  readonly clampScale: (value: number) => number;
14
15
  readonly clientToViewport: (clientX: number, clientY: number) => ViewportPoint;
15
- readonly consumeAutoFit: () => void;
16
- readonly events: ViewportNavigationEventDelegate;
17
16
  readonly getTransform: () => ViewportTransform;
17
+ readonly requestAdmittedPinchZoom: (proposal: ViewportZoomProposal) => boolean;
18
18
  }
19
- /** Coordinates the viewport's opt-in pointer, touch, pinch, and wheel navigation behavior. */
20
19
  export declare class ViewportGestureNavigationController implements ReactiveController {
21
20
  #private;
22
21
  constructor(host: ViewportGestureNavigationHost, delegate: ViewportGestureNavigationDelegate);
23
22
  hostConnected(): void;
24
23
  hostDisconnected(): void;
25
24
  hostUpdated(): void;
26
- /** Rebase in-progress pointer math synchronously after an independent transform change. */
27
25
  rebasePointerSessions(): void;
28
26
  }
29
27
  export {};
@@ -39,11 +39,11 @@ var a = class {
39
39
  this.#U();
40
40
  }
41
41
  #d() {
42
- let e = this.#e.behaviorPan, t = this.#e.behaviorZoom, n = !!e || t, r = this.#i.size > 0;
43
- this.#r.enabled = this.#o && e === "space", this.#n.target = this.#o && (n || r) ? this.#e : void 0, this.#Z(this.#o && e === "space"), this.#Q(this.#o && (!!e || this.#a.size > 0)), this.#f(e);
42
+ let e = this.#e.behaviorPan, t = this.#e.pannable || this.#e.zoomable, n = this.#i.size > 0;
43
+ this.#r.enabled = this.#o && e === "space", this.#n.target = this.#o && (t || n) ? this.#e : void 0, this.#Z(this.#o && e === "space"), this.#Q(this.#o && (this.#e.pannable || this.#a.size > 0)), this.#f();
44
44
  }
45
- #f(e) {
46
- e || (this.#l = !1, this.#e._internals?.states.delete("pan-eligible"));
45
+ #f() {
46
+ this.#e.pannable || (this.#l = !1, this.#e._internals?.states.delete("pan-eligible"));
47
47
  }
48
48
  #p = (e) => {
49
49
  let t = e.detail;
@@ -52,13 +52,13 @@ var a = class {
52
52
  #m(e) {
53
53
  let t = e.event;
54
54
  this.#q(t.pointerId);
55
- let n = t.pointerType === "touch", r = n ? !!this.#e.behaviorPan : this.#L(t), i = n && this.#e.behaviorZoom;
55
+ let n = t.pointerType === "touch", r = n ? this.#e.pannable : this.#L(t), i = n && this.#e.zoomable;
56
56
  if (!r && !i) return this.#h(t);
57
57
  if (!e.claim({
58
58
  kind: r ? "pan" : void 0,
59
59
  pinchCandidate: i
60
60
  })) return;
61
- n || this.#e.focus({ preventScroll: !0 }), t.button === 1 && t.preventDefault(), this.#t.consumeAutoFit();
61
+ n || this.#e.focus({ preventScroll: !0 }), t.button === 1 && t.preventDefault();
62
62
  let a = this.#t.getTransform();
63
63
  this.#i.set(t.pointerId, {
64
64
  button: t.button,
@@ -86,17 +86,23 @@ var a = class {
86
86
  return this.#u = void 0, !0;
87
87
  }
88
88
  #v(e, t, n) {
89
+ if (t.lifecycle.state === "pending") {
90
+ t.pendingEnd = {
91
+ event: e.event,
92
+ interrupted: e.interrupted || n,
93
+ reason: e.reason
94
+ };
95
+ return;
96
+ }
89
97
  if (t.lifecycle.state !== "active") return;
90
- this.#j(t), this.#Y();
91
98
  let r = e.interrupted || n;
92
- this.#M(e, t, r), !r && this.#E(e.event.pointerId, t)?.state === "suppressed" && this.#K(e.event.pointerId, t);
99
+ this.#M(e, t, r), this.#j(t), this.#Y(), !r && this.#E(e.event.pointerId, t)?.state === "suppressed" && this.#K(e.event.pointerId, t);
93
100
  }
94
101
  #y(e) {
95
102
  n(this.#e) && (e.event.ctrlKey || e.event.metaKey ? this.#b(e) : this.#x(e));
96
103
  }
97
104
  #b(e) {
98
- if (!this.#e.behaviorZoom || !e.claim()) return;
99
- this.#t.consumeAutoFit(), this.#t.cancelAnimation();
105
+ if (!this.#e.zoomable || !e.claim()) return;
100
106
  let t = this.#t.getTransform(), n = this.#t.clientToViewport(e.clientX, e.clientY), a = i(n.x, n.y, t), o = this.#n.getWheelZoomFactor(e), s = r(a, n, this.#t.clampScale(t.scale * o)), c = {
101
107
  anchor: a,
102
108
  clientX: e.clientX,
@@ -104,14 +110,12 @@ var a = class {
104
110
  event: e.event,
105
111
  factor: o,
106
112
  next: s,
107
- source: "wheel",
108
- start: t
113
+ source: "wheel"
109
114
  };
110
- this.#t.events.dispatchZoom(c) && this.#t.commitTransform(s) && this.rebasePointerSessions();
115
+ this.#e.requestZoom(c);
111
116
  }
112
117
  #x(e) {
113
- if (!this.#e.behaviorPan || !e.claim()) return;
114
- this.#t.consumeAutoFit(), this.#t.cancelAnimation();
118
+ if (!this.#e.pannable || !e.claim()) return;
115
119
  let t = this.#t.getTransform(), n = {
116
120
  scale: t.scale,
117
121
  x: t.x + e.deltaX / t.scale,
@@ -123,10 +127,9 @@ var a = class {
123
127
  deltaY: e.deltaY,
124
128
  event: e.event,
125
129
  next: n,
126
- source: "wheel",
127
- start: t
130
+ source: "wheel"
128
131
  };
129
- this.#t.events.dispatchPan(r) && this.#t.commitTransform(n) && this.rebasePointerSessions();
132
+ this.#e.requestPan(r);
130
133
  }
131
134
  #S = (e) => {
132
135
  let t = e.detail;
@@ -134,47 +137,45 @@ var a = class {
134
137
  };
135
138
  #C(e) {
136
139
  let t = e.event.pointerId, n = this.#i.get(t);
137
- if (!n || n.lifecycle.state === "suppressed" || (n.lastTotalDisplacementX = e.totalDisplacementX, n.lastTotalDisplacementY = e.totalDisplacementY, n.lifecycle.state === "pending" && !this.#T(t, n, e)) || n.lifecycle.state !== "active") return;
138
- this.#t.cancelAnimation();
139
- let r = e.totalDisplacementX - n.transformStartDisplacementX, i = e.totalDisplacementY - n.transformStartDisplacementY, a = {
140
- scale: n.transformStart.scale,
141
- x: n.transformStart.x - r / n.transformStart.scale,
142
- y: n.transformStart.y - i / n.transformStart.scale
143
- }, o = {
140
+ if (!n || n.lifecycle.state === "suppressed") return;
141
+ n.lastTotalDisplacementX = e.totalDisplacementX, n.lastTotalDisplacementY = e.totalDisplacementY;
142
+ let r = this.#w(e, n);
143
+ n.lifecycle.state === "pending" ? this.#T(e, n, r) : n.lifecycle.navigation.update(r);
144
+ }
145
+ #w(e, t) {
146
+ let n = e.totalDisplacementX - t.transformStartDisplacementX, r = e.totalDisplacementY - t.transformStartDisplacementY, i = {
147
+ scale: t.transformStart.scale,
148
+ x: t.transformStart.x - n / t.transformStart.scale,
149
+ y: t.transformStart.y - r / t.transformStart.scale
150
+ };
151
+ return {
144
152
  ...e,
145
- next: a,
146
- source: "pointer",
147
- start: n.start
153
+ next: i
148
154
  };
149
- this.#w(t, n, o);
150
- }
151
- #w(e, t, n) {
152
- let r = this.#t.events.dispatchPan(n), i = this.#E(e, t);
153
- r && i?.state === "active" && i.defaultAction === "apply" && this.#t.commitTransform(n.next);
154
155
  }
155
156
  #T(e, t, n) {
156
- if (t.lifecycle.state !== "pending" || n.totalDisplacementX ** 2 + n.totalDisplacementY ** 2 < t.dragThreshold ** 2) return !1;
157
- let r = n.totalDisplacementX - t.transformStartDisplacementX, i = n.totalDisplacementY - t.transformStartDisplacementY, a = {
158
- scale: t.transformStart.scale,
159
- x: t.transformStart.x - r / t.transformStart.scale,
160
- y: t.transformStart.y - i / t.transformStart.scale
161
- }, o = {
157
+ if (e.totalDisplacementX ** 2 + e.totalDisplacementY ** 2 < t.dragThreshold ** 2) return;
158
+ let r = this.#e.startPan({
162
159
  ...n,
163
- next: a,
164
- source: "pointer",
165
- start: t.start
166
- }, s = this.#t.events.dispatchPanStart(o) ? "apply" : "skip";
167
- return this.#E(e, t)?.state === "pending" && (t.lifecycle = {
168
- defaultAction: s,
169
- state: "active"
170
- }, this.#Y(), !0);
160
+ source: "pointer"
161
+ });
162
+ if (r) {
163
+ if (this.#E(e.event.pointerId, t)?.state !== "pending") {
164
+ t.pendingEnd && r.end(t.pendingEnd);
165
+ return;
166
+ }
167
+ t.lifecycle = {
168
+ state: "active",
169
+ navigation: r
170
+ }, this.#Y();
171
+ }
171
172
  }
172
173
  #E(e, t) {
173
174
  let n = this.#i.get(e);
174
175
  return n === t ? n.lifecycle : void 0;
175
176
  }
176
177
  #D(e) {
177
- this.#t.cancelAnimation(), this.#k(e.event);
178
+ this.#k(e.event);
178
179
  let t = this.#t.clientToViewport(e.centerClientX, e.centerClientY), n = this.#t.clampScale(e.context.start.scale * e.scale), i = r(e.context.anchor, t, n), a = {
179
180
  anchor: e.context.anchor,
180
181
  clientX: e.centerClientX,
@@ -182,12 +183,12 @@ var a = class {
182
183
  event: e.event,
183
184
  factor: e.scale,
184
185
  next: i,
185
- source: "pinch",
186
- start: e.context.start
186
+ source: "pinch"
187
187
  };
188
- this.#t.events.dispatchZoom(a) && this.#t.commitTransform(i) && this.rebasePointerSessions();
188
+ this.#t.requestAdmittedPinchZoom(a);
189
189
  }
190
190
  #O = (e) => {
191
+ if (!this.#e.zoomable) return;
191
192
  let t = this.#t.getTransform(), n = this.#t.clientToViewport(e.startCenterClientX, e.startCenterClientY), r = {
192
193
  anchor: i(n.x, n.y, t),
193
194
  start: t
@@ -209,21 +210,20 @@ var a = class {
209
210
  }
210
211
  #A(e, t) {
211
212
  let n = t.lifecycle.state === "active";
212
- this.#j(t), n && this.#M(e, t, !0);
213
+ t.lifecycle.state === "pending" && (t.pendingEnd = {
214
+ ...e,
215
+ interrupted: !0
216
+ }), n && this.#M(e, t, !0), this.#j(t);
213
217
  }
214
218
  #j(e) {
215
219
  e.lifecycle.state !== "suppressed" && (e.lifecycle = { state: "suppressed" });
216
220
  }
217
221
  #M(e, t, n) {
218
- let r = {
222
+ t.lifecycle.state === "active" && t.lifecycle.navigation.end({
219
223
  event: e.event,
220
224
  interrupted: n,
221
- reason: e.reason,
222
- source: "pointer",
223
- start: t.start,
224
- transform: this.#t.getTransform()
225
- };
226
- this.#t.events.dispatchPanEnd(r);
225
+ reason: e.reason
226
+ });
227
227
  }
228
228
  #N = (e) => {
229
229
  e.code === "Space" && this.#e.behaviorPan === "space" && n(this.#e) && e.preventDefault();
@@ -235,18 +235,18 @@ var a = class {
235
235
  this.#e._internals.states.delete("pan-eligible");
236
236
  };
237
237
  #I = (e) => {
238
- this.#e.behaviorPan && (this.#l = o(e, this.#e), this.#X());
238
+ this.#e.pannable && (this.#l = s(e, this.#e), this.#X());
239
239
  };
240
240
  #L(e) {
241
- return e.button === 0 ? this.#e.behaviorPan === !0 || this.#e.behaviorPan === "space" && this.#R() : e.button === 1 && !!this.#e.behaviorPan;
241
+ return e.button === 0 ? this.#e.behaviorPan === !0 || this.#e.behaviorPan === "space" && this.#R() : e.button === 1 && this.#e.pannable;
242
242
  }
243
243
  #R() {
244
244
  return this.#r.isPressed("Space") && n(this.#e);
245
245
  }
246
- #z = (e) => e.type === "dragstart" && !this.#e.behaviorPan || o(e, this.#e);
246
+ #z = (e) => e.type === "dragstart" && !this.#e.pannable || o(e, this.#e) || s(e, this.#e);
247
247
  #B = (e) => e.ctrlKey ? this.#e.behaviorPan === !0 || this.#e.behaviorPan === "space" && this.#R() : !1;
248
248
  #V = (e) => this.#e.behaviorPan === "space" && this.#R() && (e.pointerType === "mouse" || e.pointerType === "pen") && e.button === 0;
249
- #H = () => this.#e.behaviorPan || this.#e.behaviorZoom || this.#i.size > 0 ? "none" : void 0;
249
+ #H = () => this.#e.pannable || this.#e.zoomable || this.#i.size > 0 ? "none" : void 0;
250
250
  #U() {
251
251
  let e = this.#t.getTransform();
252
252
  for (let t of this.#i.values()) this.#W(t, e);
@@ -295,14 +295,21 @@ var a = class {
295
295
  function o(e, t) {
296
296
  for (let n of e.composedPath()) {
297
297
  if (n === t) break;
298
- if (n instanceof Element && s(n)) return !0;
298
+ if (n instanceof Element && n.parentElement === t && n.slot === "overlay") return !0;
299
299
  }
300
300
  return !1;
301
301
  }
302
- function s(e) {
303
- return e.matches("button, input, textarea, select, a[href], [contenteditable], [tabindex]") || c(e);
302
+ function s(e, t) {
303
+ for (let n of e.composedPath()) {
304
+ if (n === t) break;
305
+ if (n instanceof Element && c(n)) return !0;
306
+ }
307
+ return !1;
304
308
  }
305
309
  function c(e) {
310
+ return e.matches("button, input, textarea, select, a[href], [contenteditable], [tabindex]") || l(e);
311
+ }
312
+ function l(e) {
306
313
  return e.localName.includes("-") ? e.constructor.formAssociated === !0 : !1;
307
314
  }
308
315
  //#endregion