@nvidia-elements/core 2.23.0 → 2.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/accordion/accordion2.js +4 -4
  3. package/dist/alert/alert-group2.js +1 -1
  4. package/dist/alert/alert2.js +1 -1
  5. package/dist/avatar/avatar-group2.js +1 -1
  6. package/dist/avatar/avatar2.js +1 -1
  7. package/dist/badge/badge2.js +1 -1
  8. package/dist/breadcrumb/breadcrumb2.js +1 -1
  9. package/dist/bundles/index.d.ts +21 -1
  10. package/dist/button/button2.js +1 -1
  11. package/dist/button-group/button-group2.js +1 -1
  12. package/dist/card/card2.js +4 -4
  13. package/dist/chat-message/chat-message2.js +1 -1
  14. package/dist/checkbox/checkbox-group2.js +1 -1
  15. package/dist/checkbox/checkbox2.js +1 -1
  16. package/dist/color/color2.js +1 -1
  17. package/dist/combobox/combobox2.js +1 -1
  18. package/dist/copy-button/copy-button2.js +1 -1
  19. package/dist/custom-elements.json +6 -339
  20. package/dist/data.snippets.json +27 -27
  21. package/dist/date/date2.js +1 -1
  22. package/dist/datetime/datetime2.js +1 -1
  23. package/dist/dialog/dialog-footer2.js +1 -1
  24. package/dist/dialog/dialog-header2.js +1 -1
  25. package/dist/dialog/dialog2.js +1 -1
  26. package/dist/divider/divider2.js +1 -1
  27. package/dist/dot/dot2.js +1 -1
  28. package/dist/drag-handle/drag-handle2.js +1 -1
  29. package/dist/drawer/drawer-content2.js +1 -1
  30. package/dist/drawer/drawer-footer2.js +1 -1
  31. package/dist/drawer/drawer-header2.js +1 -1
  32. package/dist/drawer/drawer2.js +1 -1
  33. package/dist/dropdown/dropdown-footer2.js +1 -1
  34. package/dist/dropdown/dropdown-header2.js +1 -1
  35. package/dist/dropdown/dropdown2.js +1 -1
  36. package/dist/dropdown-group/dropdown-group.js +1 -1
  37. package/dist/dropzone/dropzone2.js +1 -1
  38. package/dist/file/file2.js +1 -1
  39. package/dist/format-bytes/format-bytes2.js +1 -1
  40. package/dist/format-datetime/format-datetime2.js +1 -1
  41. package/dist/format-number/format-number2.js +1 -1
  42. package/dist/format-relative-time/format-relative-time2.js +1 -1
  43. package/dist/format-truncate/format-truncate2.js +1 -1
  44. package/dist/forms/control/control2.js +1 -1
  45. package/dist/forms/control-group/control-group2.js +1 -1
  46. package/dist/forms/control-message/control-message2.js +1 -1
  47. package/dist/forms/utils/layout.d.ts +0 -1
  48. package/dist/forms/utils/layout.js.map +1 -1
  49. package/dist/forms/utils/states.d.ts +0 -1
  50. package/dist/forms/utils/states.js.map +1 -1
  51. package/dist/gauge/gauge2.js +1 -1
  52. package/dist/ghost/ghost2.js +1 -1
  53. package/dist/grid/cell/cell2.js +1 -1
  54. package/dist/grid/column/column2.js +1 -1
  55. package/dist/grid/footer/footer2.js +1 -1
  56. package/dist/grid/grid2.js +1 -1
  57. package/dist/grid/header/header2.js +1 -1
  58. package/dist/grid/placeholder/placeholder2.js +1 -1
  59. package/dist/grid/row/row2.js +1 -1
  60. package/dist/icon/icon2.js +2 -2
  61. package/dist/icon-button/icon-button2.js +1 -1
  62. package/dist/iframe/iframe2.js +1 -1
  63. package/dist/index.d.ts +4 -0
  64. package/dist/index.js +1 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/input/input-group2.js +1 -1
  67. package/dist/input/input2.js +1 -1
  68. package/dist/internal/controllers/keynav-spatial.controller.d.ts +0 -1
  69. package/dist/internal/controllers/keynav-spatial.controller.js.map +1 -1
  70. package/dist/internal/controllers/type-native-popover.utils.d.ts +0 -1
  71. package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
  72. package/dist/internal/index.d.ts +0 -1
  73. package/dist/internal/index.js +116 -128
  74. package/dist/internal/index.js.map +1 -1
  75. package/dist/internal/types/index.d.ts +37 -3
  76. package/dist/internal/types/index.js.map +1 -1
  77. package/dist/internal/utils/audit-logs.d.ts +0 -1
  78. package/dist/internal/utils/audit-logs.js.map +1 -1
  79. package/dist/internal/utils/dom.d.ts +0 -5
  80. package/dist/internal/utils/dom.js +30 -46
  81. package/dist/internal/utils/dom.js.map +1 -1
  82. package/dist/internal/utils/events.d.ts +0 -1
  83. package/dist/internal/utils/events.js +4 -7
  84. package/dist/internal/utils/events.js.map +1 -1
  85. package/dist/internal/utils/keynav.d.ts +0 -1
  86. package/dist/internal/utils/keynav.js +2 -5
  87. package/dist/internal/utils/keynav.js.map +1 -1
  88. package/dist/internal/utils/objects.d.ts +0 -2
  89. package/dist/internal/utils/objects.js +2 -8
  90. package/dist/internal/utils/objects.js.map +1 -1
  91. package/dist/joystick/joystick2.js +1 -1
  92. package/dist/logo/logo2.js +1 -1
  93. package/dist/menu/menu-group2.js +1 -1
  94. package/dist/menu/menu-item2.js +1 -1
  95. package/dist/menu/menu2.js +1 -1
  96. package/dist/month/month2.js +1 -1
  97. package/dist/notification/notification-group2.js +1 -1
  98. package/dist/notification/notification2.js +1 -1
  99. package/dist/page/page-panel/page-panel-content2.js +1 -1
  100. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  101. package/dist/page/page-panel/page-panel-header2.js +1 -1
  102. package/dist/page/page-panel/page-panel2.js +1 -1
  103. package/dist/page/page2.js +1 -1
  104. package/dist/page-header/page-header2.js +1 -1
  105. package/dist/page-loader/page-loader2.js +1 -1
  106. package/dist/pagination/pagination2.js +1 -1
  107. package/dist/panel/panel2.js +4 -4
  108. package/dist/password/password2.js +1 -1
  109. package/dist/preferences-input/preferences-input2.js +1 -1
  110. package/dist/progress-bar/progress-bar2.js +1 -1
  111. package/dist/progress-dot/progress-dot2.js +1 -1
  112. package/dist/progress-ring/progress-ring2.js +1 -1
  113. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  114. package/dist/pulse/pulse2.js +1 -1
  115. package/dist/radio/radio-group2.js +1 -1
  116. package/dist/radio/radio2.js +1 -1
  117. package/dist/range/range2.js +1 -1
  118. package/dist/resize-handle/resize-handle2.js +1 -1
  119. package/dist/search/search2.js +1 -1
  120. package/dist/select/select2.js +1 -1
  121. package/dist/skeleton/skeleton2.js +1 -1
  122. package/dist/sort-button/sort-button2.js +1 -1
  123. package/dist/sparkline/sparkline2.js +1 -1
  124. package/dist/star-rating/star-rating2.js +1 -1
  125. package/dist/steps/steps2.js +2 -2
  126. package/dist/switch/switch-group2.js +1 -1
  127. package/dist/switch/switch2.js +1 -1
  128. package/dist/tabs/tabs-group2.js +1 -1
  129. package/dist/tabs/tabs-item-group2.js +1 -1
  130. package/dist/tabs/tabs2.js +2 -2
  131. package/dist/tag/tag2.js +1 -1
  132. package/dist/textarea/textarea2.js +1 -1
  133. package/dist/time/time2.js +1 -1
  134. package/dist/toast/toast2.js +1 -1
  135. package/dist/toggletip/toggletip-footer2.js +1 -1
  136. package/dist/toggletip/toggletip-header2.js +1 -1
  137. package/dist/toggletip/toggletip2.js +1 -1
  138. package/dist/toolbar/toolbar2.js +1 -1
  139. package/dist/tooltip/tooltip2.js +1 -1
  140. package/dist/tree/tree-node2.js +1 -1
  141. package/dist/tree/tree2.js +1 -1
  142. package/dist/week/week2.js +1 -1
  143. package/dist/workspace/index.d.ts +3 -0
  144. package/dist/workspace/panel/panel2.js +1 -1
  145. package/dist/workspace/panel-content/panel-content2.js +1 -1
  146. package/dist/workspace/panel-footer/panel-footer2.js +1 -1
  147. package/dist/workspace/panel-header/panel-header2.js +1 -1
  148. package/dist/workspace/workspace2.js +1 -1
  149. package/package.json +3 -3
  150. package/dist/internal/utils/supports.d.ts +0 -3
  151. package/dist/internal/utils/supports.js +0 -13
  152. package/dist/internal/utils/supports.js.map +0 -1
@@ -9,7 +9,7 @@ var i = class extends n {
9
9
  static {
10
10
  this.metadata = {
11
11
  tag: "nve-drawer-content",
12
- version: "2.23.0",
12
+ version: "2.23.1",
13
13
  parents: ["nve-drawer"]
14
14
  };
15
15
  }
@@ -9,7 +9,7 @@ var i = class extends n {
9
9
  static {
10
10
  this.metadata = {
11
11
  tag: "nve-drawer-footer",
12
- version: "2.23.0",
12
+ version: "2.23.1",
13
13
  parents: ["nve-drawer"]
14
14
  };
15
15
  }
@@ -9,7 +9,7 @@ var i = class extends n {
9
9
  static {
10
10
  this.metadata = {
11
11
  tag: "nve-drawer-header",
12
- version: "2.23.0",
12
+ version: "2.23.1",
13
13
  parents: ["nve-drawer"]
14
14
  };
15
15
  }
@@ -30,7 +30,7 @@ var p = { close: "close" }, m = class extends l {
30
30
  static {
31
31
  this.metadata = {
32
32
  tag: "nve-drawer",
33
- version: "2.23.0"
33
+ version: "2.23.1"
34
34
  };
35
35
  }
36
36
  static {
@@ -9,7 +9,7 @@ var i = class extends n {
9
9
  static {
10
10
  this.metadata = {
11
11
  tag: "nve-dropdown-footer",
12
- version: "2.23.0",
12
+ version: "2.23.1",
13
13
  parents: ["nve-dropdown"]
14
14
  };
15
15
  }
@@ -9,7 +9,7 @@ var i = class extends n {
9
9
  static {
10
10
  this.metadata = {
11
11
  tag: "nve-dropdown-header",
12
- version: "2.23.0",
12
+ version: "2.23.1",
13
13
  parents: ["nve-dropdown"]
14
14
  };
15
15
  }
@@ -21,7 +21,7 @@ var p = { close: "close" }, m = class extends c {
21
21
  static {
22
22
  this.metadata = {
23
23
  tag: "nve-dropdown",
24
- version: "2.23.0"
24
+ version: "2.23.1"
25
25
  };
26
26
  }
27
27
  static {
@@ -14,7 +14,7 @@ var d = class extends c {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-dropdown-group",
17
- version: "2.23.0",
17
+ version: "2.23.1",
18
18
  children: ["nve-dropdown"]
19
19
  };
20
20
  }
@@ -26,7 +26,7 @@ var g = {
26
26
  static {
27
27
  this.metadata = {
28
28
  tag: "nve-dropzone",
29
- version: "2.23.0",
29
+ version: "2.23.1",
30
30
  validators: [c, s],
31
31
  valueSchema: {
32
32
  type: "array",
@@ -11,7 +11,7 @@ var a = class extends n {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-file",
14
- version: "2.23.0"
14
+ version: "2.23.1"
15
15
  };
16
16
  }
17
17
  connectedCallback() {
@@ -94,7 +94,7 @@ var h = class extends i {
94
94
  static {
95
95
  this.metadata = {
96
96
  tag: "nve-format-bytes",
97
- version: "2.23.0"
97
+ version: "2.23.1"
98
98
  };
99
99
  }
100
100
  get #e() {
@@ -12,7 +12,7 @@ var s = class extends i {
12
12
  static {
13
13
  this.metadata = {
14
14
  tag: "nve-format-datetime",
15
- version: "2.23.0"
15
+ version: "2.23.1"
16
16
  };
17
17
  }
18
18
  get #e() {
@@ -28,7 +28,7 @@ var s = [
28
28
  static {
29
29
  this.metadata = {
30
30
  tag: "nve-format-number",
31
- version: "2.23.0"
31
+ version: "2.23.1"
32
32
  };
33
33
  }
34
34
  get #e() {
@@ -52,7 +52,7 @@ var s = {
52
52
  static {
53
53
  this.metadata = {
54
54
  tag: "nve-format-relative-time",
55
- version: "2.23.0"
55
+ version: "2.23.1"
56
56
  };
57
57
  }
58
58
  #e;
@@ -19,7 +19,7 @@ var d = class extends c {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-format-truncate",
22
- version: "2.23.0"
22
+ version: "2.23.1"
23
23
  };
24
24
  }
25
25
  #e;
@@ -51,7 +51,7 @@ var C = class extends _ {
51
51
  static {
52
52
  this.metadata = {
53
53
  tag: "nve-control",
54
- version: "2.23.0"
54
+ version: "2.23.1"
55
55
  };
56
56
  }
57
57
  render() {
@@ -24,7 +24,7 @@ var m = class extends d {
24
24
  static {
25
25
  this.metadata = {
26
26
  tag: "nve-control-group",
27
- version: "2.23.0"
27
+ version: "2.23.1"
28
28
  };
29
29
  }
30
30
  render() {
@@ -23,7 +23,7 @@ var l = {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-control-message",
26
- version: "2.23.0"
26
+ version: "2.23.1"
27
27
  };
28
28
  }
29
29
  static {
@@ -9,5 +9,4 @@ export declare const breakpoints: {
9
9
  export declare function setupControlLayoutStates(control: Control | ControlGroup): ResizeObserver;
10
10
  type ControlLayouts = 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';
11
11
  export declare function getControlLayout(width: number, initalLayout: ControlLayouts): ControlLayouts;
12
- export declare function isInlineInputType(input: HTMLInputElement): boolean;
13
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":["breakpoints","setupControlLayoutStates","initalLayout","control","resizeObserver","getControlLayout","entries","layout","width","layouts"],"sources":["../../../src/forms/utils/layout.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport type { Control } from '../control/control.js';\n\nexport const breakpoints = {\n vertical: 300,\n verticalInline: 400,\n horizontal: 500,\n horizontalInline: 600\n};\n\nexport function setupControlLayoutStates(control: Control | ControlGroup) {\n const initalLayout = control.layout;\n const resizeObserver = new ResizeObserver(entries => {\n if (!(control as Control).fitContent) {\n control.layout = getControlLayout(entries[0]!.contentRect.width, initalLayout);\n }\n });\n resizeObserver.observe(control);\n return resizeObserver;\n}\n\ntype ControlLayouts = 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';\n\nexport function getControlLayout(width: number, initalLayout: ControlLayouts) {\n let layout: ControlLayouts = initalLayout;\n if (width < breakpoints.vertical) {\n layout = 'vertical';\n } else if (width < breakpoints.verticalInline) {\n layout = 'vertical-inline';\n } else if (width < breakpoints.horizontal) {\n layout = 'horizontal';\n } else if (width < breakpoints.horizontalInline) {\n layout = 'horizontal-inline';\n }\n\n const layouts: ControlLayouts[] = ['vertical', 'vertical-inline', 'horizontal', 'horizontal-inline'];\n if (layouts.indexOf(initalLayout) < layouts.indexOf(layout)) {\n layout = initalLayout;\n }\n\n return layout;\n}\n\nexport function isInlineInputType(input: HTMLInputElement) {\n return input.type === 'radio' || input.type === 'checkbox';\n}\n"],"mappings":";AAMA,IAAaA,IAAc;CACzB,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,kBAAkB;AACpB;AAEA,SAAgBC,EAAyB,GAAiC;CACxE,IAAMC,IAAeC,EAAQ,QACvBC,IAAiB,IAAI,gBAAe,MAAW;EACnD,AAAMD,EAAoB,eACxB,EAAQ,SAASE,EAAiBC,EAAQ,EAAE,CAAE,YAAY,OAAOJ,CAAY;CAEjF,CAAC;CAED,OADAE,EAAe,QAAQD,CAAO,GACvBC;AACT;AAIA,SAAgBC,EAAiB,GAAe,GAA8B;CAC5E,IAAIE,IAAyBL;CAC7B,AAAIM,IAAQR,EAAY,WACtB,IAAS,aACAQ,IAAQR,EAAY,iBAC7B,IAAS,oBACAQ,IAAQR,EAAY,aAC7B,IAAS,eACAQ,IAAQR,EAAY,qBAC7B,IAAS;CAGX,IAAMS,IAA4B;EAAC;EAAY;EAAmB;EAAc;CAAmB;CAKnG,OAJIA,EAAQ,QAAQP,CAAY,IAAIO,EAAQ,QAAQF,CAAM,MACxD,IAASL,IAGJK;AACT"}
1
+ {"version":3,"file":"layout.js","names":["breakpoints","setupControlLayoutStates","initalLayout","control","resizeObserver","getControlLayout","entries","layout","width","layouts"],"sources":["../../../src/forms/utils/layout.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport type { Control } from '../control/control.js';\n\nexport const breakpoints = {\n vertical: 300,\n verticalInline: 400,\n horizontal: 500,\n horizontalInline: 600\n};\n\nexport function setupControlLayoutStates(control: Control | ControlGroup) {\n const initalLayout = control.layout;\n const resizeObserver = new ResizeObserver(entries => {\n if (!(control as Control).fitContent) {\n control.layout = getControlLayout(entries[0]!.contentRect.width, initalLayout);\n }\n });\n resizeObserver.observe(control);\n return resizeObserver;\n}\n\ntype ControlLayouts = 'vertical' | 'vertical-inline' | 'horizontal' | 'horizontal-inline';\n\nexport function getControlLayout(width: number, initalLayout: ControlLayouts) {\n let layout: ControlLayouts = initalLayout;\n if (width < breakpoints.vertical) {\n layout = 'vertical';\n } else if (width < breakpoints.verticalInline) {\n layout = 'vertical-inline';\n } else if (width < breakpoints.horizontal) {\n layout = 'horizontal';\n } else if (width < breakpoints.horizontalInline) {\n layout = 'horizontal-inline';\n }\n\n const layouts: ControlLayouts[] = ['vertical', 'vertical-inline', 'horizontal', 'horizontal-inline'];\n if (layouts.indexOf(initalLayout) < layouts.indexOf(layout)) {\n layout = initalLayout;\n }\n\n return layout;\n}\n"],"mappings":";AAMA,IAAaA,IAAc;CACzB,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,kBAAkB;AACpB;AAEA,SAAgBC,EAAyB,GAAiC;CACxE,IAAMC,IAAeC,EAAQ,QACvBC,IAAiB,IAAI,gBAAe,MAAW;EACnD,AAAMD,EAAoB,eACxB,EAAQ,SAASE,EAAiBC,EAAQ,EAAE,CAAE,YAAY,OAAOJ,CAAY;CAEjF,CAAC;CAED,OADAE,EAAe,QAAQD,CAAO,GACvBC;AACT;AAIA,SAAgBC,EAAiB,GAAe,GAA8B;CAC5E,IAAIE,IAAyBL;CAC7B,AAAIM,IAAQR,EAAY,WACtB,IAAS,aACAQ,IAAQR,EAAY,iBAC7B,IAAS,oBACAQ,IAAQR,EAAY,aAC7B,IAAS,eACAQ,IAAQR,EAAY,qBAC7B,IAAS;CAGX,IAAMS,IAA4B;EAAC;EAAY;EAAmB;EAAc;CAAmB;CAKnG,OAJIA,EAAQ,QAAQP,CAAY,IAAIO,EAAQ,QAAQF,CAAM,MACxD,IAASL,IAGJK;AACT"}
@@ -32,7 +32,6 @@ export declare function setupControlGroupStates(controlGroup: ControlGroup): Mut
32
32
  */
33
33
  export declare function setupControlStatusStates(control: Control | ControlGroup, messages: ControlMessage[]): ControlStateCleanup[];
34
34
  export declare function updateControlStatusState(control: Control | ControlGroup, message: ControlMessage): void;
35
- export declare function showNonValidationMessages(messages: ControlMessage[]): void;
36
35
  export declare function hideAllValidationMessages(messages: ControlMessage[]): void;
37
36
  export declare function showActiveValidationMessages(control: Control, messages: ControlMessage[]): void;
38
37
  export declare function hideInactiveValidationMessages(control: Control, messages: ControlMessage[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"states.js","names":["inputQuery","setupControlValidationStates","cleanups","control","messages","updateValidityState","hideInactiveValidationMessages","resetValidityState","hideAllValidationMessages","addCleanupListener","m","showActiveValidationMessages","current","ControlMessage","setupControlStates","observers","states","addControlInteractionListeners","getElementUpdate","value","e","setupControlGroupStates","toggleControlGroupDisabledState","controlGroup","getAttributeChanges","i","setupControlStatusStates","getAttributeListChanges","target","mutation","matchesElementName","updateControlStatusState","message","type","listener"],"sources":["../../../src/forms/utils/states.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n getAttributeChanges,\n getAttributeListChanges,\n getElementUpdate,\n matchesElementName\n} from '@nvidia-elements/core/internal';\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport { ControlMessage } from '../control-message/control-message.js';\nimport type { Control } from '../control/control.js';\n\nexport const inputQuery = 'input, select, selectmenu, textarea, [nve-control]';\nexport interface ControlStateCleanup {\n disconnect: () => void;\n}\n\n/**\n * Adds validation states to custom element\n * :state(valid) form control is in a valid state\n * :state(invalid) form control is in a invalid state\n */\n// eslint-disable-next-line max-lines-per-function\nexport function setupControlValidationStates(control: Control, messages: ControlMessage[]) {\n const cleanups: ControlStateCleanup[] = [];\n\n if (\n !control.input.form?.noValidate &&\n !control.input.formNoValidate &&\n !control.input.hasAttribute('formnovalidate')\n ) {\n hideAllValidationMessages(messages);\n\n /**\n * updateValidityState() logic triggered by input blur() or input() change events\n */\n const updateValidityState = () => {\n if (control.input.validity?.valid) {\n control._internals.states.delete('invalid');\n control._internals.states.add('valid');\n control.status = null!;\n }\n\n hideInactiveValidationMessages(control, messages);\n };\n\n const resetValidityState = () => {\n control.status = null!;\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n hideAllValidationMessages(messages);\n };\n\n const onBlur = () => {\n control.input.checkValidity();\n updateValidityState();\n };\n\n const onInput = () => {\n updateValidityState();\n };\n\n const onInvalid = () => {\n if (messages.find(m => m.error)) {\n hideAllValidationMessages(messages);\n showActiveValidationMessages(control, messages);\n }\n\n control.status = 'error';\n control._internals.states.delete('valid');\n control._internals.states.add('invalid');\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'invalid', onInvalid),\n addCleanupListener(control, 'reset', resetValidityState)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', resetValidityState));\n }\n }\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n if (current.find(m => !m.hidden && (m.status === 'error' || m.error))) {\n control._internals.states.add('invalid');\n } else {\n control._internals.states.add('valid');\n }\n };\n cleanups.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return cleanups;\n}\n\n/**\n * Adds control interaction states to custom element\n * :state(checked) form control is in a checked state\n * :state(disabled) form control is in a disabled state\n * :state(readonly) form control is in a readonly state\n * :state(touched) form control received focus and then blurred\n * :state(dirty) user modified the form control\n */\nexport function setupControlStates(control: Control) {\n const observers: ControlStateCleanup[] = [];\n const states = control._internals.states;\n control.input.checked ? states.add('checked') : states.delete('checked');\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate');\n\n observers.push(...addControlInteractionListeners(control));\n observers.push(\n getElementUpdate(control.input, 'readonly', value =>\n (value === '' ? true : value) ? states.add('readonly') : states.delete('readonly')\n ),\n getElementUpdate(control.input, 'checked', () =>\n control.input.checked ? states.add('checked') : states.delete('checked')\n ),\n getElementUpdate(control.input, 'disabled', value =>\n (value === '' ? true : value) ? states.add('disabled') : states.delete('disabled')\n ),\n getElementUpdate(control.input, 'indeterminate', () =>\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate')\n )\n );\n return observers;\n}\n\nfunction addControlInteractionListeners(control: Control): ControlStateCleanup[] {\n const cleanups: ControlStateCleanup[] = [];\n const states = control._internals.states;\n const onFocus = () => control._internals.states.add('focus');\n const onInput = () => control._internals.states.add('dirty');\n const onBlur = () => {\n control._internals.states.add('touched');\n control._internals.states.delete('focus');\n };\n\n const onRootChange = (e: Event) => {\n if ((e.target as HTMLInputElement).name === control.input?.name) {\n control.input.checked ? states.add('checked') : states.delete('checked');\n }\n };\n\n const onFormReset = () => {\n control._internals.states.delete('touched');\n control._internals.states.delete('dirty');\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n control.requestUpdate();\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'focus', onFocus),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input.getRootNode(), 'change', onRootChange)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', onFormReset));\n }\n\n return cleanups;\n}\n\n/**\n * Adds control group interaction states to custom element\n * :state(disabled) any form control within group is in a disabled state\n */\nexport function setupControlGroupStates(controlGroup: ControlGroup) {\n toggleControlGroupDisabledState(controlGroup);\n return getAttributeChanges(controlGroup, 'disabled', () => toggleControlGroupDisabledState(controlGroup));\n}\n\nfunction toggleControlGroupDisabledState(controlGroup: ControlGroup) {\n if (Array.from(controlGroup.inputs).find(i => i.disabled)) {\n controlGroup._internals.states.add('disabled');\n } else {\n controlGroup._internals.states.delete('disabled');\n }\n}\n\n/**\n * Adds control status states to custom element\n * :state(error) form control is in a error state\n * :state(success) form control is in a success state\n */\nexport function setupControlStatusStates(control: Control | ControlGroup, messages: ControlMessage[]) {\n updateControlStatusState(control, messages.find(m => !m.hidden)!);\n const observers: ControlStateCleanup[] = [];\n observers.push(\n getAttributeListChanges(control, ['hidden', 'status'], mutation => {\n const target = mutation.target as ControlMessage;\n if (matchesElementName(target, ControlMessage)) {\n updateControlStatusState(control, target);\n }\n })\n );\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n const message = current.find(m => m.status && !m.hidden);\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n if (message) {\n control._internals.states.add(message.status!);\n }\n };\n observers.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return observers;\n}\n\nfunction addCleanupListener(target: EventTarget, type: string, listener: EventListener): ControlStateCleanup {\n target.addEventListener(type, listener);\n return {\n disconnect: () => target.removeEventListener(type, listener)\n };\n}\n\nexport function updateControlStatusState(control: Control | ControlGroup, message: ControlMessage) {\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n\n if (message?.status?.length && !message?.hidden) {\n control._internals.states.add(message.status);\n }\n}\n\nexport function showNonValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => !m.hasAttribute('error')).forEach(m => m.removeAttribute('hidden'));\n}\n\nexport function hideAllValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => m.hasAttribute('error')).forEach(m => m.setAttribute('hidden', ''));\n}\n\nexport function showActiveValidationMessages(control: Control, messages: ControlMessage[]) {\n messages.find(m => m.error && control.input.validity[m.error])?.removeAttribute('hidden');\n}\n\nexport function hideInactiveValidationMessages(control: Control, messages: ControlMessage[]) {\n if (messages.find(m => m.error) && control.input.validity.valid) {\n messages.filter(m => m.error && !control.input.validity[m.error]).forEach(m => m.setAttribute('hidden', ''));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"states.js","names":["inputQuery","setupControlValidationStates","cleanups","control","messages","updateValidityState","hideInactiveValidationMessages","resetValidityState","hideAllValidationMessages","addCleanupListener","m","showActiveValidationMessages","current","ControlMessage","setupControlStates","observers","states","addControlInteractionListeners","getElementUpdate","value","e","setupControlGroupStates","toggleControlGroupDisabledState","controlGroup","getAttributeChanges","i","setupControlStatusStates","getAttributeListChanges","target","mutation","matchesElementName","updateControlStatusState","message","type","listener"],"sources":["../../../src/forms/utils/states.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n getAttributeChanges,\n getAttributeListChanges,\n getElementUpdate,\n matchesElementName\n} from '@nvidia-elements/core/internal';\nimport type { ControlGroup } from '../control-group/control-group.js';\nimport { ControlMessage } from '../control-message/control-message.js';\nimport type { Control } from '../control/control.js';\n\nexport const inputQuery = 'input, select, selectmenu, textarea, [nve-control]';\nexport interface ControlStateCleanup {\n disconnect: () => void;\n}\n\n/**\n * Adds validation states to custom element\n * :state(valid) form control is in a valid state\n * :state(invalid) form control is in a invalid state\n */\n// eslint-disable-next-line max-lines-per-function\nexport function setupControlValidationStates(control: Control, messages: ControlMessage[]) {\n const cleanups: ControlStateCleanup[] = [];\n\n if (\n !control.input.form?.noValidate &&\n !control.input.formNoValidate &&\n !control.input.hasAttribute('formnovalidate')\n ) {\n hideAllValidationMessages(messages);\n\n /**\n * updateValidityState() logic triggered by input blur() or input() change events\n */\n const updateValidityState = () => {\n if (control.input.validity?.valid) {\n control._internals.states.delete('invalid');\n control._internals.states.add('valid');\n control.status = null!;\n }\n\n hideInactiveValidationMessages(control, messages);\n };\n\n const resetValidityState = () => {\n control.status = null!;\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n hideAllValidationMessages(messages);\n };\n\n const onBlur = () => {\n control.input.checkValidity();\n updateValidityState();\n };\n\n const onInput = () => {\n updateValidityState();\n };\n\n const onInvalid = () => {\n if (messages.find(m => m.error)) {\n hideAllValidationMessages(messages);\n showActiveValidationMessages(control, messages);\n }\n\n control.status = 'error';\n control._internals.states.delete('valid');\n control._internals.states.add('invalid');\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'invalid', onInvalid),\n addCleanupListener(control, 'reset', resetValidityState)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', resetValidityState));\n }\n }\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n control._internals.states.delete('valid');\n control._internals.states.delete('invalid');\n if (current.find(m => !m.hidden && (m.status === 'error' || m.error))) {\n control._internals.states.add('invalid');\n } else {\n control._internals.states.add('valid');\n }\n };\n cleanups.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return cleanups;\n}\n\n/**\n * Adds control interaction states to custom element\n * :state(checked) form control is in a checked state\n * :state(disabled) form control is in a disabled state\n * :state(readonly) form control is in a readonly state\n * :state(touched) form control received focus and then blurred\n * :state(dirty) user modified the form control\n */\nexport function setupControlStates(control: Control) {\n const observers: ControlStateCleanup[] = [];\n const states = control._internals.states;\n control.input.checked ? states.add('checked') : states.delete('checked');\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate');\n\n observers.push(...addControlInteractionListeners(control));\n observers.push(\n getElementUpdate(control.input, 'readonly', value =>\n (value === '' ? true : value) ? states.add('readonly') : states.delete('readonly')\n ),\n getElementUpdate(control.input, 'checked', () =>\n control.input.checked ? states.add('checked') : states.delete('checked')\n ),\n getElementUpdate(control.input, 'disabled', value =>\n (value === '' ? true : value) ? states.add('disabled') : states.delete('disabled')\n ),\n getElementUpdate(control.input, 'indeterminate', () =>\n control.input.indeterminate ? states.add('indeterminate') : states.delete('indeterminate')\n )\n );\n return observers;\n}\n\nfunction addControlInteractionListeners(control: Control): ControlStateCleanup[] {\n const cleanups: ControlStateCleanup[] = [];\n const states = control._internals.states;\n const onFocus = () => control._internals.states.add('focus');\n const onInput = () => control._internals.states.add('dirty');\n const onBlur = () => {\n control._internals.states.add('touched');\n control._internals.states.delete('focus');\n };\n\n const onRootChange = (e: Event) => {\n if ((e.target as HTMLInputElement).name === control.input?.name) {\n control.input.checked ? states.add('checked') : states.delete('checked');\n }\n };\n\n const onFormReset = () => {\n control._internals.states.delete('touched');\n control._internals.states.delete('dirty');\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n control.requestUpdate();\n };\n\n cleanups.push(\n addCleanupListener(control.input, 'focus', onFocus),\n addCleanupListener(control.input, 'input', onInput),\n addCleanupListener(control.input, 'blur', onBlur),\n addCleanupListener(control.input.getRootNode(), 'change', onRootChange)\n );\n\n if (control.input.form) {\n cleanups.push(addCleanupListener(control.input.form, 'reset', onFormReset));\n }\n\n return cleanups;\n}\n\n/**\n * Adds control group interaction states to custom element\n * :state(disabled) any form control within group is in a disabled state\n */\nexport function setupControlGroupStates(controlGroup: ControlGroup) {\n toggleControlGroupDisabledState(controlGroup);\n return getAttributeChanges(controlGroup, 'disabled', () => toggleControlGroupDisabledState(controlGroup));\n}\n\nfunction toggleControlGroupDisabledState(controlGroup: ControlGroup) {\n if (Array.from(controlGroup.inputs).find(i => i.disabled)) {\n controlGroup._internals.states.add('disabled');\n } else {\n controlGroup._internals.states.delete('disabled');\n }\n}\n\n/**\n * Adds control status states to custom element\n * :state(error) form control is in a error state\n * :state(success) form control is in a success state\n */\nexport function setupControlStatusStates(control: Control | ControlGroup, messages: ControlMessage[]) {\n updateControlStatusState(control, messages.find(m => !m.hidden)!);\n const observers: ControlStateCleanup[] = [];\n observers.push(\n getAttributeListChanges(control, ['hidden', 'status'], mutation => {\n const target = mutation.target as ControlMessage;\n if (matchesElementName(target, ControlMessage)) {\n updateControlStatusState(control, target);\n }\n })\n );\n\n const onSlotChange = () => {\n const current = Array.from(control.querySelectorAll<ControlMessage>(ControlMessage.metadata.tag));\n const message = current.find(m => m.status && !m.hidden);\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n if (message) {\n control._internals.states.add(message.status!);\n }\n };\n observers.push(addCleanupListener(control.shadowRoot!, 'slotchange', onSlotChange));\n\n return observers;\n}\n\nfunction addCleanupListener(target: EventTarget, type: string, listener: EventListener): ControlStateCleanup {\n target.addEventListener(type, listener);\n return {\n disconnect: () => target.removeEventListener(type, listener)\n };\n}\n\nexport function updateControlStatusState(control: Control | ControlGroup, message: ControlMessage) {\n control._internals.states.delete('error');\n control._internals.states.delete('success');\n\n if (message?.status?.length && !message?.hidden) {\n control._internals.states.add(message.status);\n }\n}\n\nexport function hideAllValidationMessages(messages: ControlMessage[]) {\n messages.filter(m => m.hasAttribute('error')).forEach(m => m.setAttribute('hidden', ''));\n}\n\nexport function showActiveValidationMessages(control: Control, messages: ControlMessage[]) {\n messages.find(m => m.error && control.input.validity[m.error])?.removeAttribute('hidden');\n}\n\nexport function hideInactiveValidationMessages(control: Control, messages: ControlMessage[]) {\n if (messages.find(m => m.error) && control.input.validity.valid) {\n messages.filter(m => m.error && !control.input.validity[m.error]).forEach(m => m.setAttribute('hidden', ''));\n }\n}\n"],"mappings":"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"}
@@ -45,7 +45,7 @@ var l = {
45
45
  static {
46
46
  this.metadata = {
47
47
  tag: "nve-gauge",
48
- version: "2.23.0"
48
+ version: "2.23.1"
49
49
  };
50
50
  }
51
51
  #e;
@@ -14,7 +14,7 @@ var o = class extends r {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-ghost",
17
- version: "2.23.0"
17
+ version: "2.23.1"
18
18
  };
19
19
  }
20
20
  render() {
@@ -10,7 +10,7 @@ var a = class extends r {
10
10
  static {
11
11
  this.metadata = {
12
12
  tag: "nve-grid-cell",
13
- version: "2.23.0"
13
+ version: "2.23.1"
14
14
  };
15
15
  }
16
16
  render() {
@@ -13,7 +13,7 @@ var c = class r extends a {
13
13
  static {
14
14
  this.metadata = {
15
15
  tag: "nve-grid-column",
16
- version: "2.23.0"
16
+ version: "2.23.1"
17
17
  };
18
18
  }
19
19
  get #e() {
@@ -15,7 +15,7 @@ var s = class extends a {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-grid-footer",
18
- version: "2.23.0"
18
+ version: "2.23.1"
19
19
  };
20
20
  }
21
21
  static {
@@ -23,7 +23,7 @@ var y = class extends g {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-grid",
26
- version: "2.23.0",
26
+ version: "2.23.1",
27
27
  children: [
28
28
  d.metadata.tag,
29
29
  f.metadata.tag,
@@ -19,7 +19,7 @@ var m = class extends d {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-grid-header",
22
- version: "2.23.0",
22
+ version: "2.23.1",
23
23
  children: [s.metadata.tag]
24
24
  };
25
25
  }
@@ -10,7 +10,7 @@ var a = class extends r {
10
10
  static {
11
11
  this.metadata = {
12
12
  tag: "nve-grid-placeholder",
13
- version: "2.23.0"
13
+ version: "2.23.1"
14
14
  };
15
15
  }
16
16
  render() {
@@ -15,7 +15,7 @@ var u = class extends s {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-grid-row",
18
- version: "2.23.0",
18
+ version: "2.23.1",
19
19
  children: [a.metadata.tag]
20
20
  };
21
21
  }
@@ -16,7 +16,7 @@ var f = class n extends o {
16
16
  static {
17
17
  this.metadata = {
18
18
  tag: "nve-icon",
19
- version: "2.23.0"
19
+ version: "2.23.1"
20
20
  };
21
21
  }
22
22
  static {
@@ -103,7 +103,7 @@ a([l({
103
103
  })], f.prototype, "name", void 0), a([d()], f.prototype, "svg", void 0);
104
104
  function p(e) {
105
105
  if (typeof globalThis.customElements?.get == "function") {
106
- let t = n(e.metadata.version), i = n("2.23.0");
106
+ let t = n(e.metadata.version), i = n("2.23.1");
107
107
  t.minor <= i.minor && t.major <= i.major && (e._icons = {
108
108
  ...e._icons,
109
109
  ...r
@@ -15,7 +15,7 @@ var l = class extends a {
15
15
  static {
16
16
  this.metadata = {
17
17
  tag: "nve-icon-button",
18
- version: "2.23.0"
18
+ version: "2.23.1"
19
19
  };
20
20
  }
21
21
  static {
@@ -47,7 +47,7 @@ var a = "\n window.addEventListener('message', event => {\n if (event.so
47
47
  static {
48
48
  this.metadata = {
49
49
  tag: "nve-iframe",
50
- version: "2.23.0"
50
+ version: "2.23.1"
51
51
  };
52
52
  }
53
53
  static get observedAttributes() {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
+ /** @public */
1
2
  export declare const VERSION = "0.0.0";
3
+ /** @public */
2
4
  export declare const SCOPE = "@nvidia-elements";
5
+ /** @public */
3
6
  export { I18nService, getThemeTokens } from '@nvidia-elements/core/internal';
7
+ /** @public */
4
8
  export * from './internal/types/index.js';
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { getThemeTokens as e } from "./internal/utils/dom.js";
2
2
  import { statusIcons as t } from "./internal/types/index.js";
3
3
  import { internal_exports as n } from "./internal/index.js";
4
4
  // src/index.ts
5
- var r = "2.23.0", i = "@nvidia-elements", a = n.I18nService;
5
+ var r = "2.23.1", i = "@nvidia-elements", a = n.I18nService;
6
6
  export { a as I18nService, i as SCOPE, r as VERSION, e as getThemeTokens, t as statusIcons };
7
7
 
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["VERSION","SCOPE","I18nService","internal_exports","getThemeTokens","statusIcons"],"sources":["../src/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/// <reference types=\"./declarations\" />\nexport const VERSION = '0.0.0';\nexport const SCOPE = '@nvidia-elements';\nexport { I18nService, getThemeTokens } from '@nvidia-elements/core/internal';\nexport * from './internal/types/index.js';\n"],"mappings":";;;;AAIA,IAAaA,IAAU,SACVC,IAAQ,oB"}
1
+ {"version":3,"file":"index.js","names":["VERSION","SCOPE","I18nService","internal_exports","getThemeTokens","statusIcons"],"sources":["../src/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/// <reference types=\"./declarations\" />\n/** @public */\nexport const VERSION = '0.0.0';\n/** @public */\nexport const SCOPE = '@nvidia-elements';\n/** @public */\nexport { I18nService, getThemeTokens } from '@nvidia-elements/core/internal';\n/** @public */\nexport * from './internal/types/index.js';\n"],"mappings":";;;;AAKA,IAAaA,IAAU,SAEVC,IAAQ,oB"}
@@ -11,7 +11,7 @@ var a = class extends n {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-input-group",
14
- version: "2.23.0"
14
+ version: "2.23.1"
15
15
  };
16
16
  }
17
17
  async connectedCallback() {
@@ -14,7 +14,7 @@ var a = r, o = class extends n {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-input",
17
- version: "2.23.0"
17
+ version: "2.23.1"
18
18
  };
19
19
  }
20
20
  };
@@ -1,6 +1,5 @@
1
1
  import type { ReactiveController, ReactiveControllerHost } from 'lit';
2
2
  type SpatialKeyHost = ReactiveControllerHost & HTMLElement;
3
- export type SpatialKeyHandling = 'handled' | 'ignored';
4
3
  export interface KeyNavigationSpatialControllerOptions {
5
4
  readonly isEnabled?: () => boolean;
6
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keynav-spatial.controller.js","names":["KeyNavigationSpatialController","#host","host","#isEnabled","isEnabled","#handleKeydown","event","command","getSpatialKeyCommand"],"sources":["../../../src/internal/controllers/keynav-spatial.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\ntype SpatialKeyHost = ReactiveControllerHost & HTMLElement;\n\nexport type SpatialKeyHandling = 'handled' | 'ignored';\n\nexport interface KeyNavigationSpatialControllerOptions {\n readonly isEnabled?: () => boolean;\n}\n\nexport type SpatialKeyCommand =\n | {\n readonly ctrlKey: boolean;\n readonly event: KeyboardEvent;\n readonly kind: 'direction';\n readonly horizontal: -1 | 0 | 1;\n readonly key: 'ArrowDown' | 'ArrowLeft' | 'ArrowRight' | 'ArrowUp';\n readonly shiftKey: boolean;\n readonly vertical: -1 | 0 | 1;\n }\n | {\n readonly event: KeyboardEvent;\n readonly kind: 'zoom';\n readonly key: '+' | '-' | '=';\n };\n\n/** Converts direct-host keyboard input into spatial direction and zoom commands. */\nexport class KeyNavigationSpatialController implements ReactiveController {\n readonly #host: SpatialKeyHost;\n readonly #isEnabled: () => boolean;\n\n constructor(host: SpatialKeyHost, { isEnabled = () => true }: KeyNavigationSpatialControllerOptions = {}) {\n this.#host = host;\n this.#isEnabled = isEnabled;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#host.addEventListener('keydown', this.#handleKeydown);\n }\n\n hostDisconnected(): void {\n this.#host.removeEventListener('keydown', this.#handleKeydown);\n }\n\n #handleKeydown = (event: KeyboardEvent): void => {\n if (!this.#isEnabled() || event.composedPath()[0] !== this.#host) return;\n const command = getSpatialKeyCommand(event);\n if (!command) return;\n this.#host.dispatchEvent(\n new CustomEvent<SpatialKeyCommand>('nve-key', {\n bubbles: false,\n cancelable: false,\n composed: false,\n detail: command\n })\n );\n };\n}\n\nfunction getSpatialKeyCommand(event: KeyboardEvent): SpatialKeyCommand | undefined {\n switch (event.key) {\n case 'ArrowDown':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: -1\n };\n case 'ArrowLeft':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: -1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowRight':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowUp':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 1\n };\n case '+':\n case '-':\n case '=':\n return { event, key: event.key, kind: 'zoom' };\n default:\n return undefined;\n }\n}\n"],"mappings":";AA8BA,IAAaA,IAAb,MAA0E;CACxE;CACA;CAEA,YAAY,GAAsB,EAAE,qBAAkB,OAAgD,CAAC,GAAG;EAGxG,AAFA,KAAKC,KAAQC,GACb,KAAKC,KAAaC,GAClBF,EAAK,cAAc,IAAI;CACzB;CAEA,gBAAsB;EACpB,KAAKD,GAAM,iBAAiB,WAAW,KAAKI,EAAc;CAC5D;CAEA,mBAAyB;EACvB,KAAKJ,GAAM,oBAAoB,WAAW,KAAKI,EAAc;CAC/D;CAEA,MAAkB,MAA+B;EAC/C,IAAI,CAAC,KAAKF,GAAW,KAAKG,EAAM,aAAa,CAAC,CAAC,OAAO,KAAKL,IAAO;EAClE,IAAMM,IAAUC,EAAqBF,CAAK;EAC1C,AAAKC,KACL,KAAKN,GAAM,cACT,IAAI,YAA+B,WAAW;GAC5C,SAAS;GACT,YAAY;GACZ,UAAU;GACV,QAAQM;EACV,CAAC,CACH;CACF;AACF;AAEA,SAASC,EAAqB,GAAqD;CACjF,QAAQF,EAAM,KAAd;EACE,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,cACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,WACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK;EACL,KAAK;EACL,KAAK,KACH,OAAO;GAAE;GAAO,KAAKA,EAAM;GAAK,MAAM;EAAO;EAC/C,SACE;CACJ;AACF"}
1
+ {"version":3,"file":"keynav-spatial.controller.js","names":["KeyNavigationSpatialController","#host","host","#isEnabled","isEnabled","#handleKeydown","event","command","getSpatialKeyCommand"],"sources":["../../../src/internal/controllers/keynav-spatial.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\ntype SpatialKeyHost = ReactiveControllerHost & HTMLElement;\n\nexport interface KeyNavigationSpatialControllerOptions {\n readonly isEnabled?: () => boolean;\n}\n\nexport type SpatialKeyCommand =\n | {\n readonly ctrlKey: boolean;\n readonly event: KeyboardEvent;\n readonly kind: 'direction';\n readonly horizontal: -1 | 0 | 1;\n readonly key: 'ArrowDown' | 'ArrowLeft' | 'ArrowRight' | 'ArrowUp';\n readonly shiftKey: boolean;\n readonly vertical: -1 | 0 | 1;\n }\n | {\n readonly event: KeyboardEvent;\n readonly kind: 'zoom';\n readonly key: '+' | '-' | '=';\n };\n\n/** Converts direct-host keyboard input into spatial direction and zoom commands. */\nexport class KeyNavigationSpatialController implements ReactiveController {\n readonly #host: SpatialKeyHost;\n readonly #isEnabled: () => boolean;\n\n constructor(host: SpatialKeyHost, { isEnabled = () => true }: KeyNavigationSpatialControllerOptions = {}) {\n this.#host = host;\n this.#isEnabled = isEnabled;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#host.addEventListener('keydown', this.#handleKeydown);\n }\n\n hostDisconnected(): void {\n this.#host.removeEventListener('keydown', this.#handleKeydown);\n }\n\n #handleKeydown = (event: KeyboardEvent): void => {\n if (!this.#isEnabled() || event.composedPath()[0] !== this.#host) return;\n const command = getSpatialKeyCommand(event);\n if (!command) return;\n this.#host.dispatchEvent(\n new CustomEvent<SpatialKeyCommand>('nve-key', {\n bubbles: false,\n cancelable: false,\n composed: false,\n detail: command\n })\n );\n };\n}\n\nfunction getSpatialKeyCommand(event: KeyboardEvent): SpatialKeyCommand | undefined {\n switch (event.key) {\n case 'ArrowDown':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: -1\n };\n case 'ArrowLeft':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: -1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowRight':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowUp':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 1\n };\n case '+':\n case '-':\n case '=':\n return { event, key: event.key, kind: 'zoom' };\n default:\n return undefined;\n }\n}\n"],"mappings":";AA4BA,IAAaA,IAAb,MAA0E;CACxE;CACA;CAEA,YAAY,GAAsB,EAAE,qBAAkB,OAAgD,CAAC,GAAG;EAGxG,AAFA,KAAKC,KAAQC,GACb,KAAKC,KAAaC,GAClBF,EAAK,cAAc,IAAI;CACzB;CAEA,gBAAsB;EACpB,KAAKD,GAAM,iBAAiB,WAAW,KAAKI,EAAc;CAC5D;CAEA,mBAAyB;EACvB,KAAKJ,GAAM,oBAAoB,WAAW,KAAKI,EAAc;CAC/D;CAEA,MAAkB,MAA+B;EAC/C,IAAI,CAAC,KAAKF,GAAW,KAAKG,EAAM,aAAa,CAAC,CAAC,OAAO,KAAKL,IAAO;EAClE,IAAMM,IAAUC,EAAqBF,CAAK;EAC1C,AAAKC,KACL,KAAKN,GAAM,cACT,IAAI,YAA+B,WAAW;GAC5C,SAAS;GACT,YAAY;GACZ,UAAU;GACV,QAAQM;EACV,CAAC,CACH;CACF;AACF;AAEA,SAASC,EAAqB,GAAqD;CACjF,QAAQF,EAAM,KAAd;EACE,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,cACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,WACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK;EACL,KAAK;EACL,KAAK,KACH,OAAO;GAAE;GAAO,KAAKA,EAAM;GAAK,MAAM;EAAO;EAC/C,SACE;CACJ;AACF"}
@@ -1,4 +1,3 @@
1
- export declare function associateAnchor(host: HTMLElement, anchor: HTMLElement): void;
2
1
  export declare function getHostTrigger(element: HTMLElement, trigger: HTMLElement | string): HTMLButtonElement;
3
2
  export declare function getHostAnchor(host: HTMLElement & {
4
3
  anchor?: HTMLElement | string;
@@ -1 +1 @@
1
- {"version":3,"file":"type-native-popover.utils.js","names":["getHostTrigger","trigger","getFlattenedDOMTree","element","el","getHostAnchor","anchor","host","match","LogService","getIdMatchNotFoundWarning","hasOpenPopover"],"sources":["../../../src/internal/controllers/type-native-popover.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LogService } from '../services/log.service.js';\nimport { getIdMatchNotFoundWarning } from '../utils/audit-logs.js';\nimport { generateId, getFlattenedDOMTree, getAnchorNames, appendAnchorName } from '../utils/dom.js';\n\nexport function associateAnchor(host: HTMLElement, anchor: HTMLElement) {\n const anchorNames = getAnchorNames(anchor);\n let anchorId = anchorNames.find(name => name.startsWith('--_'));\n if (!anchorId) {\n anchorId = `--${anchor.id && !anchor.id.includes(':') ? `_${anchor.id}` : generateId()}`;\n appendAnchorName(anchor, anchorId);\n }\n host.style.positionAnchor = anchorId;\n}\n\nexport function getHostTrigger(element: HTMLElement, trigger: HTMLElement | string) {\n if (typeof trigger === 'string') {\n return (\n (getFlattenedDOMTree(element.parentNode as HTMLElement)\n .filter(el => el?.id !== '')\n .find(el => el.id === trigger) as HTMLButtonElement) ?? globalThis.document.body\n );\n } else {\n return trigger as HTMLButtonElement;\n }\n}\n\nexport function getHostAnchor(host: HTMLElement & { anchor?: HTMLElement | string }) {\n const anchor = host.anchor;\n\n if (typeof anchor === 'string' && anchor?.length) {\n const match = getFlattenedDOMTree(host.parentNode as HTMLElement).find(el => el.id === anchor);\n\n if (!match) {\n LogService.warn(getIdMatchNotFoundWarning(anchor));\n }\n\n return match ?? globalThis.document.body;\n } else if (anchor && anchor !== globalThis.document.body) {\n return anchor as HTMLElement;\n } else {\n return globalThis.document.body;\n }\n}\n\nexport function hasOpenPopover(host: HTMLElement) {\n return !!getFlattenedDOMTree(host).filter(e => e.popover && e.matches(':popover-open')).length;\n}\n"],"mappings":";;;;AAiBA,SAAgBA,EAAe,GAAsB,GAA+B;CAQhF,OAPE,OAAOC,KAAY,WAElBC,EAAoBC,EAAQ,UAAyB,CAAC,CACpD,QAAO,MAAMC,GAAI,OAAO,EAAE,CAAC,CAC3B,MAAK,MAAMA,EAAG,OAAOH,CAAO,KAA2B,WAAW,SAAS,OAGzEA;AAEX;AAEA,SAAgBI,EAAc,GAAuD;CACnF,IAAMC,IAASC,EAAK;CAEpB,IAAI,OAAOD,KAAW,YAAYA,GAAQ,QAAQ;EAChD,IAAME,IAAQN,EAAoBK,EAAK,UAAyB,CAAC,CAAC,MAAK,MAAMH,EAAG,OAAOE,CAAM;EAM7F,OAJKE,KACHC,EAAW,KAAKC,EAA0BJ,CAAM,CAAC,GAG5CE,KAAS,WAAW,SAAS;CACtC;CAGE,OAHSF,KAAUA,MAAW,WAAW,SAAS,OAC3CA,IAEA,WAAW,SAAS;AAE/B;AAEA,SAAgBK,EAAe,GAAmB;CAChD,OAAO,CAAC,CAACT,EAAoBK,CAAI,CAAC,CAAC,QAAO,MAAK,EAAE,WAAW,EAAE,QAAQ,eAAe,CAAC,CAAC,CAAC;AAC1F"}
1
+ {"version":3,"file":"type-native-popover.utils.js","names":["getHostTrigger","trigger","getFlattenedDOMTree","element","el","getHostAnchor","anchor","host","match","LogService","getIdMatchNotFoundWarning","hasOpenPopover"],"sources":["../../../src/internal/controllers/type-native-popover.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { LogService } from '../services/log.service.js';\nimport { getIdMatchNotFoundWarning } from '../utils/audit-logs.js';\nimport { getFlattenedDOMTree } from '../utils/dom.js';\n\nexport function getHostTrigger(element: HTMLElement, trigger: HTMLElement | string) {\n if (typeof trigger === 'string') {\n return (\n (getFlattenedDOMTree(element.parentNode as HTMLElement)\n .filter(el => el?.id !== '')\n .find(el => el.id === trigger) as HTMLButtonElement) ?? globalThis.document.body\n );\n } else {\n return trigger as HTMLButtonElement;\n }\n}\n\nexport function getHostAnchor(host: HTMLElement & { anchor?: HTMLElement | string }) {\n const anchor = host.anchor;\n\n if (typeof anchor === 'string' && anchor?.length) {\n const match = getFlattenedDOMTree(host.parentNode as HTMLElement).find(el => el.id === anchor);\n\n if (!match) {\n LogService.warn(getIdMatchNotFoundWarning(anchor));\n }\n\n return match ?? globalThis.document.body;\n } else if (anchor && anchor !== globalThis.document.body) {\n return anchor as HTMLElement;\n } else {\n return globalThis.document.body;\n }\n}\n\nexport function hasOpenPopover(host: HTMLElement) {\n return !!getFlattenedDOMTree(host).filter(e => e.popover && e.matches(':popover-open')).length;\n}\n"],"mappings":";;;;AAOA,SAAgBA,EAAe,GAAsB,GAA+B;CAQhF,OAPE,OAAOC,KAAY,WAElBC,EAAoBC,EAAQ,UAAyB,CAAC,CACpD,QAAO,MAAMC,GAAI,OAAO,EAAE,CAAC,CAC3B,MAAK,MAAMA,EAAG,OAAOH,CAAO,KAA2B,WAAW,SAAS,OAGzEA;AAEX;AAEA,SAAgBI,EAAc,GAAuD;CACnF,IAAMC,IAASC,EAAK;CAEpB,IAAI,OAAOD,KAAW,YAAYA,GAAQ,QAAQ;EAChD,IAAME,IAAQN,EAAoBK,EAAK,UAAyB,CAAC,CAAC,MAAK,MAAMH,EAAG,OAAOE,CAAM;EAM7F,OAJKE,KACHC,EAAW,KAAKC,EAA0BJ,CAAM,CAAC,GAG5CE,KAAS,WAAW,SAAS;CACtC;CAGE,OAHSF,KAAUA,MAAW,WAAW,SAAS,OAC3CA,IAEA,WAAW,SAAS;AAE/B;AAEA,SAAgBK,EAAe,GAAmB;CAChD,OAAO,CAAC,CAACT,EAAoBK,CAAI,CAAC,CAAC,QAAO,MAAK,EAAE,WAAW,EAAE,QAAQ,eAAe,CAAC,CAAC,CAAC;AAC1F"}
@@ -34,4 +34,3 @@ export * from './utils/strings.js';
34
34
  export * from './utils/focus.js';
35
35
  export * from './utils/keynav.js';
36
36
  export * from './utils/numeric.js';
37
- export * from './utils/supports.js';