@nova-design-system/nova-webcomponents 3.28.0 → 3.30.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 (467) hide show
  1. package/dist/cjs/{constants-BugGJYqL.js → constants-BSdCE1ZF.js} +5 -0
  2. package/dist/cjs/index-Bj9nnTVm.js +4856 -0
  3. package/dist/cjs/index.cjs.js +5 -1
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/native.cjs.js +2 -2
  6. package/dist/cjs/nv-accordion-item.cjs.entry.js +3 -3
  7. package/dist/cjs/nv-accordion.cjs.entry.js +2 -2
  8. package/dist/cjs/nv-alert.cjs.entry.js +3 -3
  9. package/dist/cjs/nv-avatar.cjs.entry.js +3 -3
  10. package/dist/cjs/nv-badge_2.cjs.entry.js +8 -7
  11. package/dist/cjs/nv-breadcrumb.cjs.entry.js +2 -2
  12. package/dist/cjs/nv-breadcrumbs.cjs.entry.js +2 -2
  13. package/dist/cjs/nv-button.cjs.entry.js +3 -3
  14. package/dist/cjs/nv-buttongroup.cjs.entry.js +2 -2
  15. package/dist/cjs/nv-calendar.cjs.entry.js +4 -4
  16. package/dist/cjs/nv-col.cjs.entry.js +2 -2
  17. package/dist/cjs/nv-datagrid.cjs.entry.js +4 -4
  18. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +2 -2
  19. package/dist/cjs/nv-datetest.cjs.entry.js +2 -2
  20. package/dist/cjs/nv-datetimetest.cjs.entry.js +1 -1
  21. package/dist/cjs/nv-dialog.cjs.entry.js +3 -3
  22. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +8 -6
  23. package/dist/cjs/nv-drawer.cjs.entry.js +3 -3
  24. package/dist/cjs/nv-drawerfooter_2.cjs.entry.js +6 -4
  25. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +5 -5
  26. package/dist/cjs/nv-fielddate.cjs.entry.js +8 -8
  27. package/dist/cjs/nv-fielddaterange.cjs.entry.js +8 -8
  28. package/dist/cjs/nv-fielddropdown.cjs.entry.js +6 -6
  29. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +2 -2
  30. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +115 -86
  31. package/dist/cjs/nv-fieldnumber.cjs.entry.js +6 -6
  32. package/dist/cjs/nv-fieldpassword.cjs.entry.js +6 -6
  33. package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
  34. package/dist/cjs/nv-fieldselect.cjs.entry.js +7 -7
  35. package/dist/cjs/nv-fieldslider.cjs.entry.js +4 -4
  36. package/dist/cjs/nv-fieldtext.cjs.entry.js +6 -6
  37. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +5 -5
  38. package/dist/cjs/nv-fieldtime.cjs.entry.js +16 -13
  39. package/dist/cjs/nv-icon.cjs.entry.js +3 -3
  40. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +3 -3
  41. package/dist/cjs/nv-menu.cjs.entry.js +2 -2
  42. package/dist/cjs/nv-menuitem.cjs.entry.js +2 -2
  43. package/dist/cjs/nv-notification-bullet.cjs.entry.js +1 -1
  44. package/dist/cjs/nv-notification.cjs.entry.js +3 -3
  45. package/dist/cjs/nv-notificationcontainer.cjs.entry.js +2 -2
  46. package/dist/cjs/nv-pagination-nav.cjs.entry.js +2 -2
  47. package/dist/cjs/nv-paginationtable.cjs.entry.js +19 -3
  48. package/dist/cjs/nv-popover.cjs.entry.js +2 -2
  49. package/dist/cjs/nv-row.cjs.entry.js +2 -2
  50. package/dist/cjs/nv-sidebar.cjs.entry.js +178 -4
  51. package/dist/cjs/nv-sidebarcontent.cjs.entry.js +2 -2
  52. package/dist/cjs/nv-sidebardivider.cjs.entry.js +2 -2
  53. package/dist/cjs/nv-sidebarfooter.cjs.entry.js +2 -2
  54. package/dist/cjs/nv-sidebargroup.cjs.entry.js +2 -2
  55. package/dist/cjs/nv-sidebarheader.cjs.entry.js +2 -2
  56. package/dist/cjs/nv-sidebarlogo.cjs.entry.js +2 -2
  57. package/dist/cjs/nv-sidebarnavitem.cjs.entry.js +3 -3
  58. package/dist/cjs/nv-sidebarnavsubitem.cjs.entry.js +2 -2
  59. package/dist/cjs/nv-split.cjs.entry.js +2 -2
  60. package/dist/cjs/nv-stack.cjs.entry.js +2 -2
  61. package/dist/cjs/nv-statusindicator.cjs.entry.js +39 -0
  62. package/dist/cjs/nv-table.cjs.entry.js +3 -3
  63. package/dist/cjs/nv-tableheader.cjs.entry.js +2 -2
  64. package/dist/cjs/nv-tag.cjs.entry.js +82 -0
  65. package/dist/cjs/nv-timetest.cjs.entry.js +2 -2
  66. package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
  67. package/dist/cjs/nv-togglebutton.cjs.entry.js +2 -2
  68. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +2 -2
  69. package/dist/cjs/nv-tooltip.cjs.entry.js +2 -2
  70. package/dist/collection/collection-manifest.json +2 -0
  71. package/dist/collection/components/nv-accordion/nv-accordion.js +1 -1
  72. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +2 -2
  73. package/dist/collection/components/nv-alert/nv-alert.docs.js +1 -1
  74. package/dist/collection/components/nv-alert/nv-alert.js +15 -5
  75. package/dist/collection/components/nv-avatar/nv-avatar.js +1 -1
  76. package/dist/collection/components/nv-badge/nv-badge.js +32 -11
  77. package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.js +1 -1
  78. package/dist/collection/components/nv-breadcrumbs/nv-breadcrumbs.js +1 -1
  79. package/dist/collection/components/nv-button/nv-button.js +1 -1
  80. package/dist/collection/components/nv-buttongroup/nv-buttongroup.js +1 -1
  81. package/dist/collection/components/nv-calendar/nv-calendar.js +2 -2
  82. package/dist/collection/components/nv-col/nv-col.docs.js +2 -1
  83. package/dist/collection/components/nv-col/nv-col.js +2 -1
  84. package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js +2 -2
  85. package/dist/collection/components/nv-datagrid/nv-datagrid.js +2 -2
  86. package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +1 -1
  87. package/dist/collection/components/nv-datetest/nv-datetest.js +1 -1
  88. package/dist/collection/components/nv-dialog/nv-dialog.js +1 -1
  89. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +35 -13
  90. package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
  91. package/dist/collection/components/nv-drawer/nv-drawer.js +1 -1
  92. package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.js +31 -9
  93. package/dist/collection/components/nv-drawerheader/nv-drawerheader.js +1 -1
  94. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.docs.js +1 -1
  95. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +4 -4
  96. package/dist/collection/components/nv-fielddate/nv-fielddate.docs.js +1 -1
  97. package/dist/collection/components/nv-fielddate/nv-fielddate.js +6 -6
  98. package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +3 -0
  99. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js +1 -1
  100. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +6 -6
  101. package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +3 -0
  102. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js +1 -1
  103. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +4 -4
  104. package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +3 -0
  105. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.docs.js +1 -1
  106. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
  107. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.css +1 -1
  108. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.docs.js +2 -2
  109. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
  110. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +1 -1
  111. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +119 -84
  112. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +13 -2
  113. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +3 -0
  114. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js +1 -1
  115. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +4 -4
  116. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +3 -0
  117. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.docs.js +1 -1
  118. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +4 -4
  119. package/dist/collection/components/nv-fieldradio/nv-fieldradio.docs.js +1 -1
  120. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  121. package/dist/collection/components/nv-fieldselect/nv-fieldselect.docs.js +1 -1
  122. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  123. package/dist/collection/components/nv-fieldselect/styles/nv-fieldselect.css +3 -0
  124. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +1 -1
  125. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
  126. package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +3 -0
  127. package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js +3 -2
  128. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +4 -4
  129. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +3 -0
  130. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.docs.js +1 -1
  131. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  132. package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js +1 -1
  133. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +13 -10
  134. package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +3 -0
  135. package/dist/collection/components/nv-icon/nv-icon.js +7 -4
  136. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +7 -4
  137. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  138. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  139. package/dist/collection/components/nv-menuitem/nv-menuitem.js +5 -2
  140. package/dist/collection/components/nv-notification/nv-notification.js +15 -5
  141. package/dist/collection/components/nv-notificationcontainer/nv-notificationcontainer.js +1 -1
  142. package/dist/collection/components/nv-pagination-nav/nv-pagination-nav.js +1 -1
  143. package/dist/collection/components/nv-paginationtable/nv-paginationtable.js +6 -3
  144. package/dist/collection/components/nv-paginationtable/nv-paginationtable.utils.js +13 -0
  145. package/dist/collection/components/nv-paginationtable/test/nv-paginationtable.utils.test.js +26 -1
  146. package/dist/collection/components/nv-popover/nv-popover.js +1 -1
  147. package/dist/collection/components/nv-row/nv-row.docs.js +1 -0
  148. package/dist/collection/components/nv-row/nv-row.js +2 -1
  149. package/dist/collection/components/nv-sidebar/nv-sidebar.docs.js +7 -0
  150. package/dist/collection/components/nv-sidebar/nv-sidebar.js +274 -2
  151. package/dist/collection/components/nv-sidebar/styles/nv-sidebar.css +26 -0
  152. package/dist/collection/components/nv-sidebarcontent/nv-sidebarcontent.js +1 -1
  153. package/dist/collection/components/nv-sidebardivider/nv-sidebardivider.js +1 -1
  154. package/dist/collection/components/nv-sidebarfooter/nv-sidebarfooter.js +1 -1
  155. package/dist/collection/components/nv-sidebargroup/nv-sidebargroup.js +1 -1
  156. package/dist/collection/components/nv-sidebarheader/nv-sidebarheader.js +1 -1
  157. package/dist/collection/components/nv-sidebarlogo/nv-sidebarlogo.js +1 -1
  158. package/dist/collection/components/nv-sidebarnavitem/nv-sidebarnavitem.js +7 -4
  159. package/dist/collection/components/nv-sidebarnavsubitem/nv-sidebarnavsubitem.js +1 -1
  160. package/dist/collection/components/nv-split/nv-split.js +2 -1
  161. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  162. package/dist/collection/components/nv-statusindicator/nv-statusindicator.css +73 -0
  163. package/dist/collection/components/nv-statusindicator/nv-statusindicator.docs.js +34 -0
  164. package/dist/collection/components/nv-statusindicator/nv-statusindicator.js +122 -0
  165. package/dist/collection/components/nv-table/nv-table.js +1 -1
  166. package/dist/collection/components/nv-table/styles/nv-table.css +37 -1
  167. package/dist/collection/components/nv-tableheader/nv-tableheader.js +1 -1
  168. package/dist/collection/components/nv-tag/nv-tag.css +228 -0
  169. package/dist/collection/components/nv-tag/nv-tag.docs.js +114 -0
  170. package/dist/collection/components/nv-tag/nv-tag.js +251 -0
  171. package/dist/collection/components/nv-timetest/nv-timetest.js +1 -1
  172. package/dist/collection/components/nv-toggle/nv-toggle.docs.js +1 -1
  173. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  174. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js +2 -2
  175. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +1 -1
  176. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +1 -1
  177. package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
  178. package/dist/collection/utils/constants.js +5 -0
  179. package/dist/components/index.js +1 -1
  180. package/dist/components/nv-accordion-item.js +1 -1
  181. package/dist/components/nv-accordion.js +1 -1
  182. package/dist/components/nv-alert.js +1 -1
  183. package/dist/components/nv-avatar.js +1 -1
  184. package/dist/components/nv-badge.js +1 -1
  185. package/dist/components/nv-breadcrumb.js +1 -1
  186. package/dist/components/nv-breadcrumbs.js +1 -1
  187. package/dist/components/nv-button.js +1 -1
  188. package/dist/components/nv-buttongroup.js +1 -1
  189. package/dist/components/nv-calendar.js +1 -1
  190. package/dist/components/nv-col.js +1 -1
  191. package/dist/components/nv-datagrid.js +1 -1
  192. package/dist/components/nv-datagridcolumn.js +1 -1
  193. package/dist/components/nv-datetest.js +1 -1
  194. package/dist/components/nv-datetimetest.js +1 -1
  195. package/dist/components/nv-dialog.js +1 -1
  196. package/dist/components/nv-dialogfooter.js +1 -1
  197. package/dist/components/nv-dialogheader.js +1 -1
  198. package/dist/components/nv-drawer.js +1 -1
  199. package/dist/components/nv-drawerfooter.js +1 -1
  200. package/dist/components/nv-drawerheader.js +1 -1
  201. package/dist/components/nv-fieldcheckbox.js +1 -1
  202. package/dist/components/nv-fielddate.js +1 -1
  203. package/dist/components/nv-fielddaterange.js +1 -1
  204. package/dist/components/nv-fielddropdown.js +1 -1
  205. package/dist/components/nv-fielddropdownitem.js +1 -1
  206. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  207. package/dist/components/nv-fieldmultiselect.js +1 -1
  208. package/dist/components/nv-fieldnumber.js +1 -1
  209. package/dist/components/nv-fieldpassword.js +1 -1
  210. package/dist/components/nv-fieldradio.js +1 -1
  211. package/dist/components/nv-fieldselect.js +1 -1
  212. package/dist/components/nv-fieldslider.js +1 -1
  213. package/dist/components/nv-fieldtext.js +1 -1
  214. package/dist/components/nv-fieldtextarea.js +1 -1
  215. package/dist/components/nv-fieldtime.js +1 -1
  216. package/dist/components/nv-icon.js +1 -1
  217. package/dist/components/nv-iconbutton.js +1 -1
  218. package/dist/components/nv-loader.js +1 -1
  219. package/dist/components/nv-menu.js +1 -1
  220. package/dist/components/nv-menuitem.js +1 -1
  221. package/dist/components/nv-notification-bullet.js +1 -1
  222. package/dist/components/nv-notification.js +1 -1
  223. package/dist/components/nv-notificationcontainer.js +1 -1
  224. package/dist/components/nv-pagination-nav.js +1 -1
  225. package/dist/components/nv-paginationtable.js +1 -1
  226. package/dist/components/nv-popover.js +1 -1
  227. package/dist/components/nv-row.js +1 -1
  228. package/dist/components/nv-sidebar.js +1 -1
  229. package/dist/components/nv-sidebarcontent.js +1 -1
  230. package/dist/components/nv-sidebardivider.js +1 -1
  231. package/dist/components/nv-sidebarfooter.js +1 -1
  232. package/dist/components/nv-sidebargroup.js +1 -1
  233. package/dist/components/nv-sidebarheader.js +1 -1
  234. package/dist/components/nv-sidebarlogo.js +1 -1
  235. package/dist/components/nv-sidebarnavitem.js +1 -1
  236. package/dist/components/nv-sidebarnavsubitem.js +1 -1
  237. package/dist/components/nv-split.js +1 -1
  238. package/dist/components/nv-stack.js +1 -1
  239. package/dist/components/nv-statusindicator.d.ts +11 -0
  240. package/dist/components/nv-statusindicator.js +1 -0
  241. package/dist/components/nv-table.js +1 -1
  242. package/dist/components/nv-tableheader.js +1 -1
  243. package/dist/components/nv-tag.d.ts +11 -0
  244. package/dist/components/nv-tag.js +1 -0
  245. package/dist/components/nv-timetest.js +1 -1
  246. package/dist/components/nv-toggle.js +1 -1
  247. package/dist/components/nv-togglebutton.js +1 -1
  248. package/dist/components/nv-togglebuttongroup.js +1 -1
  249. package/dist/components/nv-tooltip.js +1 -1
  250. package/dist/components/{p-Du3Fh0jQ.js → p-B4qcUV0M.js} +1 -1
  251. package/dist/components/p-B8yJMa0S.js +1 -0
  252. package/dist/components/{p-xrXEz2WP.js → p-BU3AWnne.js} +1 -1
  253. package/dist/components/{p-qkNH2RHl.js → p-BYrgllP3.js} +1 -1
  254. package/dist/components/p-BhRpSdkR.js +1 -0
  255. package/dist/components/{p-C5J7jtrC.js → p-Bu90dktV.js} +1 -1
  256. package/dist/components/{p-BwYt1BAb.js → p-CObbk0-q.js} +1 -1
  257. package/dist/components/{p-DlOgBZa8.js → p-CTISxdir.js} +2 -2
  258. package/dist/components/{p-nzxGC8BS.js → p-Cj6urNtm.js} +1 -1
  259. package/dist/components/{p-DE792Sds.js → p-Cx5CLy9v.js} +1 -1
  260. package/dist/components/{p-CAGzfU3O.js → p-Cyn4-37z.js} +1 -1
  261. package/dist/components/p-CzRJpv7x.js +1 -0
  262. package/dist/components/{p-CKFXHAaU.js → p-CzRlra4z.js} +1 -1
  263. package/dist/components/{p-DGj-fiRX.js → p-D54x8OFu.js} +1 -1
  264. package/dist/components/{p-DUaenjr8.js → p-DP_K3tkj.js} +1 -1
  265. package/dist/components/{p-VXpV-BUK.js → p-DQuJvZ4Z.js} +1 -1
  266. package/dist/components/{p-DwtLxfU5.js → p-DZdOQQrW.js} +1 -1
  267. package/dist/components/{p-Co8IghI-.js → p-Dg-Ac5i4.js} +1 -1
  268. package/dist/components/p-DiwYO24j.js +2 -0
  269. package/dist/components/p-GDyaHbt9.js +1 -0
  270. package/dist/components/{p-h3cPA0Cx.js → p-L7U51TAH.js} +1 -1
  271. package/dist/components/{p-CLzCfsnq.js → p-MLanePUO.js} +1 -1
  272. package/dist/components/p-gOKBmbgZ.js +1 -0
  273. package/dist/components/{p-f8OUzde-.js → p-yPMU6HZQ.js} +1 -1
  274. package/dist/esm/{constants-BReL3Lsa.js → constants-gOKBmbgZ.js} +6 -1
  275. package/dist/esm/index-CTmBvINI.js +4820 -0
  276. package/dist/esm/index.js +1 -1
  277. package/dist/esm/loader.js +3 -3
  278. package/dist/esm/native.js +3 -3
  279. package/dist/esm/nv-accordion-item.entry.js +3 -3
  280. package/dist/esm/nv-accordion.entry.js +2 -2
  281. package/dist/esm/nv-alert.entry.js +3 -3
  282. package/dist/esm/nv-avatar.entry.js +3 -3
  283. package/dist/esm/nv-badge_2.entry.js +8 -7
  284. package/dist/esm/nv-breadcrumb.entry.js +2 -2
  285. package/dist/esm/nv-breadcrumbs.entry.js +2 -2
  286. package/dist/esm/nv-button.entry.js +3 -3
  287. package/dist/esm/nv-buttongroup.entry.js +2 -2
  288. package/dist/esm/nv-calendar.entry.js +4 -4
  289. package/dist/esm/nv-col.entry.js +2 -2
  290. package/dist/esm/nv-datagrid.entry.js +4 -4
  291. package/dist/esm/nv-datagridcolumn.entry.js +2 -2
  292. package/dist/esm/nv-datetest.entry.js +2 -2
  293. package/dist/esm/nv-datetimetest.entry.js +1 -1
  294. package/dist/esm/nv-dialog.entry.js +3 -3
  295. package/dist/esm/nv-dialogfooter_2.entry.js +8 -6
  296. package/dist/esm/nv-drawer.entry.js +3 -3
  297. package/dist/esm/nv-drawerfooter_2.entry.js +6 -4
  298. package/dist/esm/nv-fieldcheckbox.entry.js +5 -5
  299. package/dist/esm/nv-fielddate.entry.js +8 -8
  300. package/dist/esm/nv-fielddaterange.entry.js +8 -8
  301. package/dist/esm/nv-fielddropdown.entry.js +6 -6
  302. package/dist/esm/nv-fielddropdownitem.entry.js +2 -2
  303. package/dist/esm/nv-fieldmultiselect.entry.js +115 -86
  304. package/dist/esm/nv-fieldnumber.entry.js +6 -6
  305. package/dist/esm/nv-fieldpassword.entry.js +6 -6
  306. package/dist/esm/nv-fieldradio.entry.js +4 -4
  307. package/dist/esm/nv-fieldselect.entry.js +7 -7
  308. package/dist/esm/nv-fieldslider.entry.js +4 -4
  309. package/dist/esm/nv-fieldtext.entry.js +6 -6
  310. package/dist/esm/nv-fieldtextarea.entry.js +5 -5
  311. package/dist/esm/nv-fieldtime.entry.js +16 -13
  312. package/dist/esm/nv-icon.entry.js +3 -3
  313. package/dist/esm/nv-iconbutton_2.entry.js +3 -3
  314. package/dist/esm/nv-menu.entry.js +2 -2
  315. package/dist/esm/nv-menuitem.entry.js +2 -2
  316. package/dist/esm/nv-notification-bullet.entry.js +1 -1
  317. package/dist/esm/nv-notification.entry.js +3 -3
  318. package/dist/esm/nv-notificationcontainer.entry.js +2 -2
  319. package/dist/esm/nv-pagination-nav.entry.js +2 -2
  320. package/dist/esm/nv-paginationtable.entry.js +19 -3
  321. package/dist/esm/nv-popover.entry.js +2 -2
  322. package/dist/esm/nv-row.entry.js +2 -2
  323. package/dist/esm/nv-sidebar.entry.js +178 -4
  324. package/dist/esm/nv-sidebarcontent.entry.js +2 -2
  325. package/dist/esm/nv-sidebardivider.entry.js +2 -2
  326. package/dist/esm/nv-sidebarfooter.entry.js +2 -2
  327. package/dist/esm/nv-sidebargroup.entry.js +2 -2
  328. package/dist/esm/nv-sidebarheader.entry.js +2 -2
  329. package/dist/esm/nv-sidebarlogo.entry.js +2 -2
  330. package/dist/esm/nv-sidebarnavitem.entry.js +3 -3
  331. package/dist/esm/nv-sidebarnavsubitem.entry.js +2 -2
  332. package/dist/esm/nv-split.entry.js +2 -2
  333. package/dist/esm/nv-stack.entry.js +2 -2
  334. package/dist/esm/nv-statusindicator.entry.js +37 -0
  335. package/dist/esm/nv-table.entry.js +3 -3
  336. package/dist/esm/nv-tableheader.entry.js +2 -2
  337. package/dist/esm/nv-tag.entry.js +80 -0
  338. package/dist/esm/nv-timetest.entry.js +2 -2
  339. package/dist/esm/nv-toggle.entry.js +3 -3
  340. package/dist/esm/nv-togglebutton.entry.js +2 -2
  341. package/dist/esm/nv-togglebuttongroup.entry.js +2 -2
  342. package/dist/esm/nv-tooltip.entry.js +2 -2
  343. package/dist/lib/generators/docs-blazor.js +7 -1
  344. package/dist/native/index.esm.js +1 -1
  345. package/dist/native/native.css +5711 -1
  346. package/dist/native/native.esm.js +1 -1
  347. package/dist/native/{p-0bb64497.entry.js → p-04011d0f.entry.js} +1 -1
  348. package/dist/native/{p-4bf96114.entry.js → p-0c65e726.entry.js} +1 -1
  349. package/dist/native/{p-767ee0fc.entry.js → p-10dee67d.entry.js} +1 -1
  350. package/dist/native/p-16037ec8.entry.js +1 -0
  351. package/dist/native/{p-63f2f87f.entry.js → p-189647e4.entry.js} +1 -1
  352. package/dist/native/{p-213c5836.entry.js → p-270bf467.entry.js} +1 -1
  353. package/dist/native/{p-89348af5.entry.js → p-287c67e1.entry.js} +1 -1
  354. package/dist/native/p-298d893d.entry.js +1 -0
  355. package/dist/native/{p-8e1bcadc.entry.js → p-29acf903.entry.js} +1 -1
  356. package/dist/native/{p-05f7bad5.entry.js → p-2afcd5e4.entry.js} +1 -1
  357. package/dist/native/p-33889f52.entry.js +1 -0
  358. package/dist/native/p-34d30b90.entry.js +1 -0
  359. package/dist/native/p-352854eb.entry.js +1 -0
  360. package/dist/native/{p-cfa0eb58.entry.js → p-37c42bed.entry.js} +1 -1
  361. package/dist/native/{p-5ea697a7.entry.js → p-3969a700.entry.js} +1 -1
  362. package/dist/native/{p-e3fb16af.entry.js → p-3f888601.entry.js} +1 -1
  363. package/dist/native/{p-291b297d.entry.js → p-40000df1.entry.js} +1 -1
  364. package/dist/native/p-410c21e3.entry.js +1 -0
  365. package/dist/native/{p-1e03fc3c.entry.js → p-4514a6a4.entry.js} +1 -1
  366. package/dist/native/{p-b3477504.entry.js → p-49745be2.entry.js} +1 -1
  367. package/dist/native/{p-7aa4605d.entry.js → p-5375ddc6.entry.js} +1 -1
  368. package/dist/native/p-5690757b.entry.js +1 -0
  369. package/dist/native/p-5c321768.entry.js +1 -0
  370. package/dist/native/{p-a16f8a14.entry.js → p-5df9c196.entry.js} +1 -1
  371. package/dist/native/{p-2af6d988.entry.js → p-5ef11914.entry.js} +1 -1
  372. package/dist/native/{p-c5d97054.entry.js → p-64649214.entry.js} +1 -1
  373. package/dist/native/{p-9709c7d5.entry.js → p-6bb02337.entry.js} +1 -1
  374. package/dist/native/{p-3c4114b8.entry.js → p-6ccc84c8.entry.js} +1 -1
  375. package/dist/native/{p-0fe84123.entry.js → p-6dab2e90.entry.js} +1 -1
  376. package/dist/native/{p-fd5e27ae.entry.js → p-728f09d5.entry.js} +1 -1
  377. package/dist/native/{p-72d8cb56.entry.js → p-7b1c369b.entry.js} +1 -1
  378. package/dist/native/p-7b3853be.entry.js +1 -0
  379. package/dist/native/p-7c9e1f01.entry.js +1 -0
  380. package/dist/native/p-7cbc09f0.entry.js +1 -0
  381. package/dist/native/p-859b24ed.entry.js +1 -0
  382. package/dist/native/{p-083b39c5.entry.js → p-8decb323.entry.js} +1 -1
  383. package/dist/native/{p-12a8443b.entry.js → p-8dfcfb72.entry.js} +1 -1
  384. package/dist/native/p-8faf3e05.entry.js +1 -0
  385. package/dist/native/p-915fe20c.entry.js +1 -0
  386. package/dist/native/p-91cb5c65.entry.js +1 -0
  387. package/dist/native/{p-1029a266.entry.js → p-93d2bfab.entry.js} +1 -1
  388. package/dist/native/{p-f9612edf.entry.js → p-9affde0d.entry.js} +1 -1
  389. package/dist/native/p-CTmBvINI.js +2 -0
  390. package/dist/native/{p-f7522dac.entry.js → p-a1ef6740.entry.js} +1 -1
  391. package/dist/native/{p-d3e66306.entry.js → p-b2c31350.entry.js} +1 -1
  392. package/dist/native/p-b2ef61bc.entry.js +1 -0
  393. package/dist/native/{p-67e0680e.entry.js → p-b7a10751.entry.js} +1 -1
  394. package/dist/native/p-b88dcd21.entry.js +1 -0
  395. package/dist/native/p-b99ad8a7.entry.js +1 -0
  396. package/dist/native/{p-fab2f2b3.entry.js → p-be2e4cf0.entry.js} +1 -1
  397. package/dist/native/{p-493c1bb5.entry.js → p-befb5e4e.entry.js} +1 -1
  398. package/dist/native/{p-dc2ce8ee.entry.js → p-c1faed1f.entry.js} +1 -1
  399. package/dist/native/{p-4ac8181c.entry.js → p-c305f1c6.entry.js} +1 -1
  400. package/dist/native/{p-7c00f6da.entry.js → p-c5261442.entry.js} +1 -1
  401. package/dist/native/{p-90b8b889.entry.js → p-cd21a60d.entry.js} +1 -1
  402. package/dist/native/{p-d8120afd.entry.js → p-d0dfa700.entry.js} +1 -1
  403. package/dist/native/{p-58966e0f.entry.js → p-d4d04530.entry.js} +1 -1
  404. package/dist/native/{p-5c003e50.entry.js → p-dc000c85.entry.js} +1 -1
  405. package/dist/native/p-df3ab86a.entry.js +1 -0
  406. package/dist/native/p-dfb46af1.entry.js +1 -0
  407. package/dist/native/{p-6d8d2088.entry.js → p-dfd364de.entry.js} +1 -1
  408. package/dist/native/{p-644ecff8.entry.js → p-e7a73a7c.entry.js} +1 -1
  409. package/dist/native/p-eab25bfa.entry.js +1 -0
  410. package/dist/native/{p-95a9d385.entry.js → p-ec919a10.entry.js} +1 -1
  411. package/dist/native/{p-37c41059.entry.js → p-ffc9e2a0.entry.js} +1 -1
  412. package/dist/native/p-gOKBmbgZ.js +1 -0
  413. package/dist/types/components/nv-alert/nv-alert.d.ts +3 -1
  414. package/dist/types/components/nv-badge/nv-badge.d.ts +6 -3
  415. package/dist/types/components/nv-col/nv-col.d.ts +1 -0
  416. package/dist/types/components/nv-dialogfooter/nv-dialogfooter.d.ts +5 -2
  417. package/dist/types/components/nv-drawerfooter/nv-drawerfooter.d.ts +5 -2
  418. package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +16 -11
  419. package/dist/types/components/nv-icon/nv-icon.d.ts +2 -1
  420. package/dist/types/components/nv-iconbutton/nv-iconbutton.d.ts +2 -1
  421. package/dist/types/components/nv-menuitem/nv-menuitem.d.ts +1 -0
  422. package/dist/types/components/nv-notification/nv-notification.d.ts +3 -1
  423. package/dist/types/components/nv-paginationtable/nv-paginationtable.utils.d.ts +9 -0
  424. package/dist/types/components/nv-row/nv-row.d.ts +1 -0
  425. package/dist/types/components/nv-sidebar/nv-sidebar.d.ts +43 -0
  426. package/dist/types/components/nv-sidebarnavitem/nv-sidebarnavitem.d.ts +2 -1
  427. package/dist/types/components/nv-split/nv-split.d.ts +1 -0
  428. package/dist/types/components/nv-statusindicator/nv-statusindicator.d.ts +22 -0
  429. package/dist/types/components/nv-statusindicator/nv-statusindicator.docs.d.ts +4 -0
  430. package/dist/types/components/nv-tag/nv-tag.d.ts +64 -0
  431. package/dist/types/components/nv-tag/nv-tag.docs.d.ts +4 -0
  432. package/dist/types/components.d.ts +286 -30
  433. package/dist/types/index.d.ts +1 -1
  434. package/dist/types/utils/constants.d.ts +4 -0
  435. package/dist/vscode-data.json +18399 -2634
  436. package/hydrate/index.js +606 -220
  437. package/hydrate/index.mjs +606 -220
  438. package/package.json +21 -9
  439. package/dist/cjs/index-Cfkoz1kc.js +0 -4848
  440. package/dist/components/p-6nAIGZFL.js +0 -2
  441. package/dist/components/p-BReL3Lsa.js +0 -1
  442. package/dist/components/p-CnkB4kvn.js +0 -1
  443. package/dist/components/p-CrRawrjU.js +0 -1
  444. package/dist/components/p-D2C_Qr5O.js +0 -1
  445. package/dist/components/p-DVFofrTe.js +0 -1
  446. package/dist/esm/index-BCjiE1MF.js +0 -4812
  447. package/dist/native/p-148c1d3e.entry.js +0 -1
  448. package/dist/native/p-1d7a27bb.entry.js +0 -1
  449. package/dist/native/p-25ef7329.entry.js +0 -1
  450. package/dist/native/p-343c04db.entry.js +0 -1
  451. package/dist/native/p-46267895.entry.js +0 -1
  452. package/dist/native/p-544b34d4.entry.js +0 -1
  453. package/dist/native/p-5ce3d30b.entry.js +0 -1
  454. package/dist/native/p-5ef0ed10.entry.js +0 -1
  455. package/dist/native/p-75a2a2ac.entry.js +0 -1
  456. package/dist/native/p-7d164a7a.entry.js +0 -1
  457. package/dist/native/p-7ec28d5d.entry.js +0 -1
  458. package/dist/native/p-9fc95cf3.entry.js +0 -1
  459. package/dist/native/p-BCjiE1MF.js +0 -2
  460. package/dist/native/p-BReL3Lsa.js +0 -1
  461. package/dist/native/p-ac765e6a.entry.js +0 -1
  462. package/dist/native/p-c2c826a4.entry.js +0 -1
  463. package/dist/native/p-c56ffa82.entry.js +0 -1
  464. package/dist/native/p-d5f5a6e1.entry.js +0 -1
  465. package/dist/native/p-e46c35a0.entry.js +0 -1
  466. package/dist/native/p-ec23ce93.entry.js +0 -1
  467. package/dist/native/p-fb34fc7d.entry.js +0 -1
@@ -241,23 +241,6 @@ export class NvFieldmultiselect {
241
241
  this.resetFilter();
242
242
  this.hasFilterResults = true;
243
243
  };
244
- /**
245
- * Handle input blur for options mode.
246
- */
247
- this.handleInputBlurOptions = () => {
248
- setTimeout(() => {
249
- if (this.preventBlurClose) {
250
- this.preventBlurClose = false;
251
- return; // Don't close the popover
252
- }
253
- if (!this.el.contains(document.activeElement)) {
254
- this.open = false; // Close the popover on blur
255
- if (this.filterable) {
256
- this.clearFilterText(); // Clear filter text on blur
257
- }
258
- }
259
- }, 150);
260
- };
261
244
  /**
262
245
  * Handle click on the input container for options mode.
263
246
  * @param {MouseEvent} event - The click event.
@@ -361,23 +344,6 @@ export class NvFieldmultiselect {
361
344
  }
362
345
  this.open = true;
363
346
  };
364
- /**
365
- * Handle input blur for slots mode.
366
- */
367
- this.handleInputBlurSlots = () => {
368
- setTimeout(() => {
369
- if (this.preventBlurClose) {
370
- this.preventBlurClose = false;
371
- return; // Don't close the popover
372
- }
373
- if (!this.el.contains(document.activeElement)) {
374
- this.open = false; // Close the popover on blur
375
- if (this.filterable) {
376
- this.clearFilterText(); // Clear filter text on blur
377
- }
378
- }
379
- }, 150);
380
- };
381
347
  /**
382
348
  * Toggle the multiselect popover for options mode.
383
349
  */
@@ -502,6 +468,17 @@ export class NvFieldmultiselect {
502
468
  };
503
469
  this.handleMouseDownPreventBlur = () => {
504
470
  this.preventBlurClose = true;
471
+ // Scope the flag to the immediate click cycle only. Synchronous focus
472
+ // events fired during this click (mousedown → focusout → mouseup → click)
473
+ // run before the next macrotask, so any focusout that *should* be
474
+ // suppressed will already have consumed the flag by the time this clears.
475
+ // Without this cleanup, a click on a non-focus-taking target (e.g. the
476
+ // chevron when nothing inside the host had focus, or the tabindex="-1"
477
+ // clear-filter button) leaves the flag set and the user's next Tab-out
478
+ // gets silently swallowed instead of closing the popover.
479
+ setTimeout(() => {
480
+ this.preventBlurClose = false;
481
+ }, 0);
505
482
  };
506
483
  //#endregion METHODS
507
484
  /****************************************************************************/
@@ -516,7 +493,7 @@ export class NvFieldmultiselect {
516
493
  : undefined, ...(this.getRequiredAttributes().ariaRequiredValue !==
517
494
  undefined && {
518
495
  'aria-required': String(this.getRequiredAttributes().ariaRequiredValue),
519
- }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInputOptions, onFocus: this.handleInputFocusOptions, onBlur: this.handleInputBlurOptions, onKeyDown: this.handleKeyDown, "data-scope": "focusable", "aria-label": this.label, "aria-controls": `${this.inputId}-listbox` })) : (h(Fragment, null, h("input", { id: this.inputId, type: "text", style: {
496
+ }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInputOptions, onFocus: this.handleInputFocusOptions, onKeyDown: this.handleKeyDown, "data-scope": "focusable", "aria-label": this.label, "aria-controls": `${this.inputId}-listbox` })) : (h(Fragment, null, h("input", { id: this.inputId, type: "text", style: {
520
497
  position: 'absolute',
521
498
  opacity: '0',
522
499
  width: '0',
@@ -537,7 +514,7 @@ export class NvFieldmultiselect {
537
514
  : undefined, ...(this.getRequiredAttributes().ariaRequiredValue !==
538
515
  undefined && {
539
516
  'aria-required': String(this.getRequiredAttributes().ariaRequiredValue),
540
- }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInputSlots, onFocus: this.handleInputFocusSlots, onBlur: this.handleInputBlurSlots, onKeyDown: this.handleKeyDown, "data-scope": "focusable", "aria-label": this.label, "aria-controls": `${this.inputId}-listbox` })) : (h(Fragment, null, h("input", { id: this.inputId, type: "text", style: {
517
+ }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInputSlots, onFocus: this.handleInputFocusSlots, onKeyDown: this.handleKeyDown, "data-scope": "focusable", "aria-label": this.label, "aria-controls": `${this.inputId}-listbox` })) : (h(Fragment, null, h("input", { id: this.inputId, type: "text", style: {
541
518
  position: 'absolute',
542
519
  opacity: '0',
543
520
  width: '0',
@@ -652,6 +629,31 @@ export class NvFieldmultiselect {
652
629
  });
653
630
  }
654
631
  }
632
+ /**
633
+ * Close the dropdown when keyboard focus leaves the component.
634
+ * Uses focusout (which bubbles) so it covers every internal focusable
635
+ * (filter input, hidden input, trigger `<p>`, chevron iconbutton,
636
+ * clear-filter iconbutton, dropdown items, badge close button) without
637
+ * needing per-element onBlur wiring.
638
+ * @param {FocusEvent} event - The focus event.
639
+ */
640
+ handleFocusOut(event) {
641
+ if (this.preventBlurClose) {
642
+ this.preventBlurClose = false;
643
+ return;
644
+ }
645
+ // Focus moved to another element inside the component → keep open.
646
+ if (event.relatedTarget instanceof Node &&
647
+ this.el.contains(event.relatedTarget)) {
648
+ return;
649
+ }
650
+ // Focus moved outside the component (external element, body, or
651
+ // programmatic blur where relatedTarget is null) → close the popover.
652
+ this.open = false;
653
+ if (this.filterable) {
654
+ this.clearFilterText();
655
+ }
656
+ }
655
657
  /**
656
658
  * Handle keyboard events & arrow key navigation.
657
659
  * If the multiselect is not open, opens it and focuses on the first item if the list is not filterable.
@@ -659,6 +661,8 @@ export class NvFieldmultiselect {
659
661
  * @param {KeyboardEvent} event - The keyboard event.
660
662
  */
661
663
  async handleKeyDown(event) {
664
+ if (this.disabled || this.readonly)
665
+ return;
662
666
  if (event.key === 'Escape') {
663
667
  this.open = false;
664
668
  return;
@@ -677,12 +681,22 @@ export class NvFieldmultiselect {
677
681
  }
678
682
  return;
679
683
  }
680
- const items = Array.from(this.el.querySelectorAll('nv-fielddropdownitemcheck:not([style*="display: none"])'));
684
+ // Sort by computed flex `order` so arrow keys follow the visual order
685
+ // (selected items first), with DOM order as tie-breaker.
686
+ const items = Array.from(this.el.querySelectorAll('nv-fielddropdownitemcheck:not([style*="display: none"])')).sort((a, b) => {
687
+ const orderA = parseInt(window.getComputedStyle(a).order || '0', 10);
688
+ const orderB = parseInt(window.getComputedStyle(b).order || '0', 10);
689
+ if (orderA !== orderB)
690
+ return orderA - orderB;
691
+ return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING
692
+ ? -1
693
+ : 1;
694
+ });
681
695
  if (items.length === 0) {
682
696
  console.warn('No visible items found to navigate');
683
697
  return;
684
698
  }
685
- let currentIndex = items.findIndex(item => item.classList.contains('highlighted'));
699
+ let currentIndex = items.findIndex(item => item.getAttribute('data-state') === 'highlighted');
686
700
  if (event.key === 'ArrowDown') {
687
701
  event.preventDefault();
688
702
  currentIndex =
@@ -697,7 +711,15 @@ export class NvFieldmultiselect {
697
711
  : (currentIndex - 1 + items.length) % items.length;
698
712
  this.updateHighlightedItem(items, currentIndex);
699
713
  }
700
- else if (event.key === 'Enter' && currentIndex >= 0) {
714
+ else if ((event.key === 'Enter' || event.key === ' ') &&
715
+ currentIndex >= 0) {
716
+ // If the key event came from the chevron toggle button, nv-iconbutton
717
+ // has already handled open/close via its own keydown listener. Do not
718
+ // also toggle the highlighted item — that is a double-action bug.
719
+ const target = event.target;
720
+ if (target?.closest?.('[data-scope="toggle-dropdown"]')) {
721
+ return;
722
+ }
701
723
  event.preventDefault();
702
724
  const selectedItem = items[currentIndex];
703
725
  // Toggle the checked state
@@ -901,7 +923,9 @@ export class NvFieldmultiselect {
901
923
  }
902
924
  }
903
925
  /**
904
- * Reorder the content of the slot.
926
+ * Reorder the content of the slot using CSS flex `order` so the
927
+ * underlying DOM order is preserved (clearing the selection restores
928
+ * the original visual order automatically).
905
929
  */
906
930
  reorderSlotContent() {
907
931
  if (this.options)
@@ -909,50 +933,47 @@ export class NvFieldmultiselect {
909
933
  const ul = this.el.querySelector('ul');
910
934
  if (!ul)
911
935
  return;
912
- // Remove all existing <hr class="multiselect-divider">
913
- ul.querySelectorAll('hr.multiselect-divider').forEach(divider => divider.remove());
914
936
  // Retrieve all items (not hidden)
915
937
  const items = Array.from(this.el.querySelectorAll('nv-fielddropdownitemcheck')).filter(item => item.style.display !== 'none');
916
- // If you possibly have a "No results" message:
938
+ // If a "No results" message is currently shown, hide the divider
939
+ // and skip the per-item ordering work.
917
940
  const hasEmptyMessage = ul.querySelector('[data-empty]');
918
941
  if (hasEmptyMessage) {
919
- // if there is a "No results found" message, do not reorder
942
+ this.manageDivider(ul, [], []);
920
943
  return;
921
944
  }
922
- // Separate checked vs unchecked
923
- const selectedItems = items.filter(item => (this.value || []).includes(item.getAttribute('value') || ''));
924
- const unselectedItems = items.filter(item => !(this.value || []).includes(item.getAttribute('value') || ''));
925
- // Reinsert CHECKED items FIRST
926
- // appendChild() moves the element without recreating it
927
- // this is not trigger a re-rendering of the component in the platforms
928
- selectedItems.forEach(item => {
929
- ul.appendChild(item); // <-- The <li> (or <nv-fielddropdownitemcheck>) is just "moved" to the end of the list
930
- });
931
- // Add a divider if needed
932
- if (selectedItems.length > 0 && unselectedItems.length > 0) {
933
- const divider = document.createElement('hr');
934
- divider.className = 'multiselect-divider';
935
- ul.appendChild(divider);
936
- }
937
- // Reinsert UNCHECKED items at the end
938
- unselectedItems.forEach(item => {
939
- ul.appendChild(item);
945
+ const selectedItems = [];
946
+ const unselectedItems = [];
947
+ items.forEach(item => {
948
+ const isSelected = (this.value || []).includes(item.getAttribute('value') || '');
949
+ item.style.order = isSelected ? '10' : '30';
950
+ if (isSelected)
951
+ selectedItems.push(item);
952
+ else
953
+ unselectedItems.push(item);
940
954
  });
955
+ this.manageDivider(ul, selectedItems, unselectedItems);
941
956
  }
942
957
  /**
943
- * Reorder the content for options mode with async handling
958
+ * Reorder the content for options mode using CSS flex `order` so the
959
+ * underlying DOM order is preserved (clearing the selection restores
960
+ * the original visual order automatically).
944
961
  */
945
962
  reorderOptionsContent() {
946
963
  const ul = this.el.querySelector('ul');
947
964
  if (!ul)
948
965
  return;
949
966
  const items = Array.from(ul.querySelectorAll('nv-fielddropdownitemcheck')).filter(item => item.style.display !== 'none');
950
- const selectedItems = items.filter(item => (this.value || []).includes(item.getAttribute('value') || ''));
951
- const unselectedItems = items.filter(item => !(this.value || []).includes(item.getAttribute('value') || ''));
952
- // Reorder the elements
953
- selectedItems.forEach(item => ul.appendChild(item));
954
- unselectedItems.forEach(item => ul.appendChild(item));
955
- // Manage the divider after the reordering
967
+ const selectedItems = [];
968
+ const unselectedItems = [];
969
+ items.forEach(item => {
970
+ const isSelected = (this.value || []).includes(item.getAttribute('value') || '');
971
+ item.style.order = isSelected ? '10' : '30';
972
+ if (isSelected)
973
+ selectedItems.push(item);
974
+ else
975
+ unselectedItems.push(item);
976
+ });
956
977
  this.manageDivider(ul, selectedItems, unselectedItems);
957
978
  }
958
979
  /**
@@ -1034,6 +1055,8 @@ export class NvFieldmultiselect {
1034
1055
  emptyMessage.setAttribute('data-empty', 'true');
1035
1056
  emptyMessage.textContent = this.emptyResult;
1036
1057
  emptyMessage.classList.add('no-results-message');
1058
+ // Keep the message after any item rows under the flex `order` projection.
1059
+ emptyMessage.style.order = '40';
1037
1060
  ul.appendChild(emptyMessage);
1038
1061
  }
1039
1062
  else if (result.truncated) {
@@ -1169,6 +1192,8 @@ export class NvFieldmultiselect {
1169
1192
  truncatedItem.setAttribute('data-truncated', 'true');
1170
1193
  truncatedItem.className = 'truncated-message no-results-message';
1171
1194
  truncatedItem.textContent = formatTruncatedResults(textTemplate, shown, total);
1195
+ // Keep the message after any item rows under the flex `order` projection.
1196
+ truncatedItem.style.order = '40';
1172
1197
  ul.appendChild(truncatedItem);
1173
1198
  }
1174
1199
  handleClickOutside(event) {
@@ -1187,7 +1212,7 @@ export class NvFieldmultiselect {
1187
1212
  updateHighlightedItem(items, index) {
1188
1213
  items.forEach((item, i) => {
1189
1214
  if (i === index) {
1190
- item.classList.add('highlighted');
1215
+ item.setAttribute('data-state', 'highlighted');
1191
1216
  item.setAttribute('tabindex', '0');
1192
1217
  item.scrollIntoView({ block: 'nearest' });
1193
1218
  // Focus on the nv-fieldcheckbox inside
@@ -1197,19 +1222,30 @@ export class NvFieldmultiselect {
1197
1222
  }
1198
1223
  }
1199
1224
  else {
1200
- item.classList.remove('highlighted');
1225
+ item.removeAttribute('data-state');
1201
1226
  item.setAttribute('tabindex', '-1');
1202
1227
  }
1203
1228
  });
1204
1229
  }
1205
1230
  /**
1206
- * Focus on the first item in the dropdown list.
1231
+ * Focus on the first item in the dropdown list (visual order).
1207
1232
  */
1208
1233
  focusFirstItem() {
1209
- const firstItem = this.el.querySelector('nv-fielddropdownitemcheck:not([style*="display: none"])');
1234
+ // Sort by computed flex `order` so the "first" item is the first one
1235
+ // visually (selected items are projected to the top via `order: 10`).
1236
+ const items = Array.from(this.el.querySelectorAll('nv-fielddropdownitemcheck:not([style*="display: none"])')).sort((a, b) => {
1237
+ const orderA = parseInt(window.getComputedStyle(a).order || '0', 10);
1238
+ const orderB = parseInt(window.getComputedStyle(b).order || '0', 10);
1239
+ if (orderA !== orderB)
1240
+ return orderA - orderB;
1241
+ return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING
1242
+ ? -1
1243
+ : 1;
1244
+ });
1245
+ const firstItem = items[0];
1210
1246
  if (firstItem) {
1211
1247
  firstItem.setAttribute('tabindex', '0');
1212
- firstItem.classList.add('highlighted');
1248
+ firstItem.setAttribute('data-state', 'highlighted');
1213
1249
  firstItem.scrollIntoView({ block: 'nearest' });
1214
1250
  // Focus on the nv-fieldcheckbox inside
1215
1251
  const checkbox = firstItem.querySelector('nv-fieldcheckbox');
@@ -1228,16 +1264,9 @@ export class NvFieldmultiselect {
1228
1264
  divider.className = 'multiselect-divider';
1229
1265
  ul.appendChild(divider);
1230
1266
  }
1231
- const shouldShowDivider = selectedItems.length > 0 && unselectedItems.length > 0;
1232
- if (shouldShowDivider) {
1233
- // Place the divider after the last selected item
1234
- const lastSelectedItem = selectedItems[selectedItems.length - 1];
1235
- lastSelectedItem.after(divider);
1236
- divider.style.display = '';
1237
- }
1238
- else {
1239
- divider.style.display = 'none';
1240
- }
1267
+ divider.style.order = '20';
1268
+ const shouldShow = selectedItems.length > 0 && unselectedItems.length > 0;
1269
+ divider.style.display = shouldShow ? '' : 'none';
1241
1270
  }
1242
1271
  /**
1243
1272
  * Synchronizes the checked state of all child nv-fielddropdownitemcheck components
@@ -2381,6 +2410,12 @@ export class NvFieldmultiselect {
2381
2410
  "target": undefined,
2382
2411
  "capture": false,
2383
2412
  "passive": false
2413
+ }, {
2414
+ "name": "focusout",
2415
+ "method": "handleFocusOut",
2416
+ "target": undefined,
2417
+ "capture": true,
2418
+ "passive": true
2384
2419
  }, {
2385
2420
  "name": "keydown",
2386
2421
  "method": "handleKeyDown",
@@ -77,12 +77,12 @@ nv-fieldmultiselect[error]:not([error=false]) {
77
77
  --nv-field-border-readonly: var(--nv-field-border-default);
78
78
  --nv-field-focus-box-shadow: var(--color-focus-destructive-in-field);
79
79
  }
80
- nv-fieldmultiselect[required]:not([required=false]) label::after, nv-fieldmultiselect[aria-required=true] label::after {
80
+ nv-fieldmultiselect[required]:not([required=false]) > label::after, nv-fieldmultiselect[aria-required=true] > label::after {
81
81
  content: "*";
82
82
  color: var(--components-form-text-required);
83
83
  font-weight: var(--font-weight-high-emphasis);
84
84
  }
85
- nv-fieldmultiselect label {
85
+ nv-fieldmultiselect > label {
86
86
  display: flex;
87
87
  align-items: center;
88
88
  gap: var(--form-label-gap);
@@ -132,6 +132,13 @@ nv-fieldmultiselect nv-popover div[slot=content] {
132
132
  overflow-y: auto;
133
133
  position: relative;
134
134
  }
135
+ nv-fieldmultiselect nv-popover div[slot=content] ul[role=listbox] {
136
+ display: flex;
137
+ flex-direction: column;
138
+ }
139
+ nv-fieldmultiselect nv-popover div[slot=content] ul[role=listbox] > *:not(nv-fielddropdownitemcheck):not(hr.multiselect-divider) {
140
+ order: 40;
141
+ }
135
142
  nv-fieldmultiselect .input-wrapper-multiselect {
136
143
  display: flex;
137
144
  flex-wrap: wrap;
@@ -284,6 +291,9 @@ nv-fieldmultiselect .error-description {
284
291
  line-height: var(--form-description-line-height);
285
292
  color: var(--components-form-text-description-error);
286
293
  }
294
+ nv-fieldmultiselect .error-description[hidden] {
295
+ display: none;
296
+ }
287
297
 
288
298
  .no-results-message {
289
299
  cursor: not-allowed;
@@ -299,6 +309,7 @@ nv-fieldmultiselect .error-description {
299
309
  background-color: var(--components-list-dropdown-separator);
300
310
  margin: var(--list-dropdown-item-padding-y) 0;
301
311
  border: 0;
312
+ flex-shrink: 0;
302
313
  }
303
314
 
304
315
  .select-all-container {
@@ -246,4 +246,7 @@ nv-fieldnumber .error-description {
246
246
  font-style: normal;
247
247
  line-height: var(--form-description-line-height);
248
248
  color: var(--components-form-text-description-error);
249
+ }
250
+ nv-fieldnumber .error-description[hidden] {
251
+ display: none;
249
252
  }
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldnumberDocs = {
4
4
  component: 'nv-fieldnumber',
5
- parentGroup: 'Fields/nv-fieldnumber',
5
+ parentGroup: 'Fields',
6
6
  subcomponents: ['nv-button', 'nv-badge'],
7
7
  stories: [
8
8
  // Default
@@ -169,11 +169,11 @@ export class NvFieldnumber {
169
169
  ? ariaRequiredAttrValue === 'true' || ariaRequiredAttrValue === ''
170
170
  : undefined;
171
171
  const useNativeRequired = this.required && (!useAriaRequired || ariaRequiredValue === true);
172
- return (h(Host, { key: 'a26895be78d7080e86d761ce0cb3b918f352f1d9' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '2b3f13fa1bb3564b1e384bcf080fa666e480147a', htmlFor: this.inputId }, h("slot", { key: '03d7432458720d231948341a552102c865fe07ff', name: "label" }, this.label))), h("div", { key: '1a01b65d78732da4ef177cf86c4f13ecfde31f1e', class: "input-wrapper" }, h("slot", { key: 'bad1d59a59eecc2f4c45d16818ac521916d71731', name: "before-input" }), h("div", { key: '295e8c0f1953673fedb9a48784f507823f45e7af', class: "input-container", onClick: this.handleInputContainerClick }, h("slot", { key: '54a81573b069471adbcda4e1bbaff97fc1fe1eeb', name: "leading-input" }), h("input", { key: '067f32480f74f78a33192a0761e46a7e04bc886b', id: this.inputId, ref: e => (this.inputElement = e), placeholder: this.placeholder, name: this.name, type: "number", autofocus: this.autofocus, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
172
+ return (h(Host, { key: 'bd60dd6875bab03a11f68c8cdeb40503dd11387b' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '9b11d71766cb20870e42e3d86509c30ec0bbc1df', htmlFor: this.inputId }, h("slot", { key: 'b1b84003346a9d9240a9a2072629701545eb8a4e', name: "label" }, this.label))), h("div", { key: 'de3100bb6e5d0befca657857b5011929621c0856', class: "input-wrapper" }, h("slot", { key: 'ae056ee9445d741e449ad926b998614e45268dd1', name: "before-input" }), h("div", { key: 'ec029f917a8472d207776b279e2a9ae2ed3c87d2', class: "input-container", onClick: this.handleInputContainerClick }, h("slot", { key: '3156846b24658fb8b033345038ba8a19e5ed39cf', name: "leading-input" }), h("input", { key: '9978de0b82a67650629ccedc7f400d7f3e17810f', id: this.inputId, ref: e => (this.inputElement = e), placeholder: this.placeholder, name: this.name, type: "number", autofocus: this.autofocus, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
173
173
  'aria-required': String(ariaRequiredValue),
174
- }), max: this.max, min: this.min, step: this.step, value: typeof this.value === 'number' ? this.value : undefined, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput }), h("slot", { key: '6e652469a6ef16dd590349db418397626a64e9ba', name: "trailing-input" }), this.error && (h("nv-icon", { key: '2a4eae5e0fd7a26d21315e0d76e09bac7bf22bed', name: "alert-circle", class: "validation", size: "md" })), this.success && (h("nv-icon", { key: '7d33539993e294ab5cbc31e60903daa664743ee3', name: "circle-check", class: "validation", size: "md" })), h("div", { key: '33a87b9c4446d718d34ba04faaf3ab0cffaa5941', class: "stepper" }, h("nv-iconbutton", { key: '6830b021b13acc955d0e333ae65bfec4efb8616d', size: "md", name: "minus", emphasis: "lower", onClick: this.handleMinus, disabled: this.isMinValueReached(), onMouseDown: this.preventSelection, tabindex: "-1" }), h("nv-iconbutton", { key: 'c83226f3dbdbf009c9a7748abea950a30b975a77', size: "md", name: "plus", emphasis: "lower", onClick: this.handlePlus, disabled: this.isMaxValueReached(), onMouseDown: this.preventSelection, tabindex: "-1" }))), h("slot", { key: '1ad95195471abf0962b958cf32088552f4b51205', name: "after-input" })), (this.description ||
175
- this.el.querySelector('[slot="description"]')) && (h("div", { key: 'b6d229a54b3c88d53b787047d5c94ebfa197d2ab', class: "description" }, h("slot", { key: 'd33c1f6c4015594e0096e70828934b859da40883', name: "description" }, this.description))), (this.errorDescription ||
176
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '80e7c2709f0d83d427829f6e92b376dff51dbe87', hidden: !this.error, class: "error-description" }, h("slot", { key: '5fb07dba33795dfb968ad5b5c3d3ae8726c0a754', name: "error-description" }, this.errorDescription)))));
174
+ }), max: this.max, min: this.min, step: this.step, value: typeof this.value === 'number' ? this.value : undefined, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput }), h("slot", { key: '6a65f9360ac4aae869f47a386f964d7121ee62b7', name: "trailing-input" }), this.error && (h("nv-icon", { key: '3f6d5f2ac11907170c57fffa8e080adaa9f2445d', name: "alert-circle", class: "validation", size: "md" })), this.success && (h("nv-icon", { key: 'f47db690daa520fe1611a72ef52bd4e8824843e0', name: "circle-check", class: "validation", size: "md" })), h("div", { key: '97d545f25f81e0089fadd33c53caf38aa8dbda85', class: "stepper" }, h("nv-iconbutton", { key: 'fa6e78061e8f90564aaed2416ee27996cbddf794', size: "md", name: "minus", emphasis: "lower", onClick: this.handleMinus, disabled: this.isMinValueReached(), onMouseDown: this.preventSelection, tabindex: "-1" }), h("nv-iconbutton", { key: 'efca8a29e9c5af8136ab557744e9642b60717915', size: "md", name: "plus", emphasis: "lower", onClick: this.handlePlus, disabled: this.isMaxValueReached(), onMouseDown: this.preventSelection, tabindex: "-1" }))), h("slot", { key: 'b99033fd0ecfbca1c791e1f0ad867fab41fc2716', name: "after-input" })), (this.description ||
175
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: 'fd843a1bb551f1d706de5045658356582667048d', class: "description" }, h("slot", { key: 'e9e1699a36a6485063eb4d90f920b1b48a03c280', name: "description" }, this.description))), (this.errorDescription ||
176
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '7216797fc4a37dee59086111e9160401f5567c09', hidden: !this.error, class: "error-description" }, h("slot", { key: '93cee823eec935644372d062db6cd009a2f16357', name: "error-description" }, this.errorDescription)))));
177
177
  }
178
178
  static get is() { return "nv-fieldnumber"; }
179
179
  static get formAssociated() { return true; }
@@ -207,4 +207,7 @@ nv-fieldpassword .error-description {
207
207
  font-style: normal;
208
208
  line-height: var(--form-description-line-height);
209
209
  color: var(--components-form-text-description-error);
210
+ }
211
+ nv-fieldpassword .error-description[hidden] {
212
+ display: none;
210
213
  }
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldpasswordDocs = {
4
4
  component: 'nv-fieldpassword',
5
- parentGroup: 'Fields/nv-fieldpassword',
5
+ parentGroup: 'Fields',
6
6
  subcomponents: ['nv-button', 'nv-badge'],
7
7
  stories: [
8
8
  // Default
@@ -146,11 +146,11 @@ export class NvFieldpassword {
146
146
  ? ariaRequiredAttrValue === 'true' || ariaRequiredAttrValue === ''
147
147
  : undefined;
148
148
  const useNativeRequired = this.required && (!useAriaRequired || ariaRequiredValue === true);
149
- return (h(Host, { key: '30f853d7d12cd12f4093c3a185e497eb5374fecd' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: 'a0a4557d38448ea9101f255b8080eb298107906e', htmlFor: this.inputId }, h("slot", { key: '76eccd0d2ef97d4a714f9d72f736e7b8a3b1ac9d', name: "label" }, this.label))), h("div", { key: 'd1042d63c628c26614aabe08155848f265dd67d1', class: "input-wrapper" }, h("slot", { key: '1412d40db63a8a1bcea9a941ca0c263d3227cbbc', name: "before-input" }), h("div", { key: '683b678a05a524258ee6924148c2bea9be68690a', class: "input-container", onClick: this.handleInputContainerClick }, h("slot", { key: '34f2878c425e6544ab7862cb1e3e892da399c23f', name: "leading-input" }), h("input", { key: '153fa6a7aac31180e6355dcf7a0b3e2fbaa75ce0', id: this.inputId, ref: e => (this.inputElement = e), autofocus: this.autofocus, autocomplete: this.autocomplete, placeholder: this.placeholder, name: this.name, type: this.showPasswordState ? 'text' : 'password', inputMode: this.mode, value: this.value, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
149
+ return (h(Host, { key: 'e24affee3586427a9d7b2dbf2205dc4ac62b7491' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '3ce9065dc2d72992d5c6e3e856df4c1447717ed2', htmlFor: this.inputId }, h("slot", { key: 'ed16a44bfdcf67f371d0a1f083bc0d6e6009350b', name: "label" }, this.label))), h("div", { key: 'b43e17d340383e0b70bcb4fb5fa061d479baf46a', class: "input-wrapper" }, h("slot", { key: '2f101c6bf63c88fc4a6ad8aee5622097c133245b', name: "before-input" }), h("div", { key: '37fe8f5efd8f4374b9a237f4f5d1ebe9af9f6e05', class: "input-container", onClick: this.handleInputContainerClick }, h("slot", { key: '4ca0f2ce27bded082e2fe49598ef6310db1ac0b3', name: "leading-input" }), h("input", { key: '302e86558f7843f44486b47987d37df6ac7f50ac', id: this.inputId, ref: e => (this.inputElement = e), autofocus: this.autofocus, autocomplete: this.autocomplete, placeholder: this.placeholder, name: this.name, type: this.showPasswordState ? 'text' : 'password', inputMode: this.mode, value: this.value, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
150
150
  'aria-required': String(ariaRequiredValue),
151
- }), maxlength: this.maxlength, minlength: this.minlength, pattern: this.pattern, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput }), (this.success || this.error) && (h("nv-icon", { key: '3b024daa690eb7ff8d34da6000d37ce6ae182112', name: this.success ? 'circle-check' : 'alert-circle', class: "validation", size: "md" })), !this.hidePasswordIcon && (h("nv-iconbutton", { key: 'c8877e4d7d2c106161bfd1b27e3e3dc664cec313', name: this.showPasswordState ? 'eye' : 'eye-off', size: "md", emphasis: "lower", onClick: this.togglePasswordVisibility, "aria-label": this.showPasswordState ? 'Hide password' : 'Show password', "aria-pressed": this.showPasswordState.toString() }))), h("slot", { key: 'c3b428593383be23101c2dead68421f620e25d38', name: "after-input" })), (this.description ||
152
- this.el.querySelector('[slot="description"]')) && (h("div", { key: '56a5ebc137e6864570626e0ce75aca0fff6314d3', class: "description" }, h("slot", { key: 'eb8c5141c3a79359ca606defea0c0b7dbc0f5bd6', name: "description" }, this.description))), (this.errorDescription ||
153
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '4aaf597ca070227517d231b7e673e0db280ccab1', hidden: !this.error, class: "error-description" }, h("slot", { key: '6815df2fc9b2ec36cfe1f88cebaeaf88e11ec882', name: "error-description" }, this.errorDescription)))));
151
+ }), maxlength: this.maxlength, minlength: this.minlength, pattern: this.pattern, disabled: this.disabled, readOnly: this.readonly, onInput: this.handleInput }), (this.success || this.error) && (h("nv-icon", { key: 'c8874ce153ceddb132f9be42178bd3ff150005d2', name: this.success ? 'circle-check' : 'alert-circle', class: "validation", size: "md" })), !this.hidePasswordIcon && (h("nv-iconbutton", { key: '90b7e1f592e67ea60194b581931fa842af695ef4', name: this.showPasswordState ? 'eye' : 'eye-off', size: "md", emphasis: "lower", onClick: this.togglePasswordVisibility, "aria-label": this.showPasswordState ? 'Hide password' : 'Show password', "aria-pressed": this.showPasswordState.toString() }))), h("slot", { key: '71add973e9ce73cc172d074492a9dbb2c20caaf9', name: "after-input" })), (this.description ||
152
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: 'c2d8551e86c028619f2c7c810597353df24cf83a', class: "description" }, h("slot", { key: '8ebe471324eba4eb9734ccd5a3aa600cc44512d9', name: "description" }, this.description))), (this.errorDescription ||
153
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '71d0c4737a51c030ba8ca859d1fd0b26d5a48772', hidden: !this.error, class: "error-description" }, h("slot", { key: '70e23fc8738958e2f2518079e0289a5a839903cd', name: "error-description" }, this.errorDescription)))));
154
154
  }
155
155
  static get is() { return "nv-fieldpassword"; }
156
156
  static get formAssociated() { return true; }
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldradioDocs = {
4
4
  component: 'nv-fieldradio',
5
- parentGroup: 'Fields/nv-fieldradio',
5
+ parentGroup: 'Fields',
6
6
  stories: [
7
7
  // Default
8
8
  {
@@ -83,9 +83,9 @@ export class NvFieldradio {
83
83
  /****************************************************************************/
84
84
  //#region RENDER
85
85
  render() {
86
- return (h(Host, { key: '66de1f9bfcf3981e3cfc94ac1bc1c7fa1940676d', class: clsx(this.labelPlacement === 'before' && 'label-placement-before', this.error && 'error') }, h("input", { key: 'ee32e5617e50888d9064d7d4d00fbdaf55b97e89', type: "radio", id: this.inputId, name: this.name, autofocus: this.autofocus, autocomplete: "off", value: this.value, checked: this.checked, disabled: this.disabled }), h("div", { key: '16f867329f8c9a735c9728a466fd49ff1b9b8e8a', class: "text-container" }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '50bbb783254086da1f6c4ff3ce6ae432567d5585', htmlFor: this.inputId }, h("slot", { key: 'd6801fd892c2b82c39eb8b2b906ad0d148edd63f', name: "label" }, this.label))), (this.description ||
87
- this.el.querySelector('[slot="description"]')) && (h("div", { key: '6810da8129a5e70a6069a5212b6755017efe9856', class: "description" }, h("slot", { key: '70539fb3789af1183fe92fbd9fdb18520633ef97', name: "description" }, this.description))), (this.errorDescription ||
88
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '9c8059dd1f5335c99a28a84eb5db7ed0726933bd', hidden: !this.error, class: "error-description" }, h("slot", { key: 'ec4c1d7a36cb892c2a97593a6e3341f69791a721', name: "error-description" }, this.errorDescription))))));
86
+ return (h(Host, { key: '53e418bfab22c9019f8efae9e474e6e729532a73', class: clsx(this.labelPlacement === 'before' && 'label-placement-before', this.error && 'error') }, h("input", { key: '85ab7c010dfa893e9e92bebd39b845a604ca0069', type: "radio", id: this.inputId, name: this.name, autofocus: this.autofocus, autocomplete: "off", value: this.value, checked: this.checked, disabled: this.disabled }), h("div", { key: '851587d22af2d0739e5531f361cbefe3e282b914', class: "text-container" }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '475cad34dea78bd00bf822ccafbfb18ddba4264a', htmlFor: this.inputId }, h("slot", { key: 'd6c84f56f1913d97e71ce79fd112362f4880acd0', name: "label" }, this.label))), (this.description ||
87
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: '8e1f4d0e9cbd00630cadde99923f2952d4dd492c', class: "description" }, h("slot", { key: 'dea3d8661dc83a237a8d290e02b365ea47491b51', name: "description" }, this.description))), (this.errorDescription ||
88
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: 'f67d73864db0c32013605343ac22f451b37047e9', hidden: !this.error, class: "error-description" }, h("slot", { key: 'ebd467b48c874db8b3649ec940d950f0d2218417', name: "error-description" }, this.errorDescription))))));
89
89
  }
90
90
  static get is() { return "nv-fieldradio"; }
91
91
  static get formAssociated() { return true; }
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldselectDocs = {
4
4
  component: 'nv-fieldselect',
5
- parentGroup: 'Fields/nv-fieldselect',
5
+ parentGroup: 'Fields',
6
6
  subcomponents: ['nv-badge', 'nv-button'],
7
7
  stories: [
8
8
  // Default
@@ -372,15 +372,15 @@ export class NvFieldselect {
372
372
  ? ariaRequiredAttrValue === 'true' || ariaRequiredAttrValue === ''
373
373
  : undefined;
374
374
  const useNativeRequired = this.required && (!useAriaRequired || ariaRequiredValue === true);
375
- return (h(Host, { key: 'b137c4e0d0db3cda5f0c4ab42315b939f311b163' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: 'c9809608e4e5ac5618b9790a007939d7769f4c55', htmlFor: this.inputId }, h("slot", { key: '2a0ba344b4f3ad3de25c3d3826d3750f84b82262', name: "label" }, this.label))), h("div", { key: 'ce10e4affb9941f030b832303bd6a7ac6c298f39', class: "select-wrapper" }, h("slot", { key: 'fe3261e1bc772d87487e0332ac645e15f2615ec7', name: "before-input" }), h("div", { key: '9c8b7cdb5c213339e77892356e1d7cf911f9e9d6', class: "select-container", onClick: this.handleSelectContainerClick }, h("slot", { key: '4e9dc10fed7e6cb137d6ceb9fdeca5f4148f0547', name: "leading-input" }), this.internalReadonly && (h("input", { key: '1575949664305c6f5503833505416e7c6091c519', id: this.inputId + '-readonly', type: "text", value: this.computedDisplayValue, readonly: true, class: "readonly-input", "aria-readonly": "true", "aria-label": this.label, "aria-describedby": this.error
375
+ return (h(Host, { key: 'ee72e67a671b7061d3af5f76796d09c0372b38fa' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '8bec44fa26d9360b585e0a5bccd4fdd7ed8cfc92', htmlFor: this.inputId }, h("slot", { key: '35b2a393d88b37141a6dd7ea90f860fcee1d840e', name: "label" }, this.label))), h("div", { key: '151b1e03cd50911b024ae692fa7eb25e5c7c8938', class: "select-wrapper" }, h("slot", { key: 'b82c37856a7a616a9addb1bd5a4d79aeeb2587b4', name: "before-input" }), h("div", { key: 'cf5713c682e4ea9e08bb0ee6db5ab369cdaaf713', class: "select-container", onClick: this.handleSelectContainerClick }, h("slot", { key: '4fc79bed93ab1dfdf31a18805b5e72c5b35cd641', name: "leading-input" }), this.internalReadonly && (h("input", { key: '316cc1f0bf08ead5f7f5d8d1306cbc02b91fde54', id: this.inputId + '-readonly', type: "text", value: this.computedDisplayValue, readonly: true, class: "readonly-input", "aria-readonly": "true", "aria-label": this.label, "aria-describedby": this.error
376
376
  ? `${this.inputId}-error`
377
- : `${this.inputId}-description` })), h("select", { key: 'c049ed0b2f977d210b9a742553c772f75f4333c0', id: this.inputId, ref: el => (this.selectElement = el), name: this.name, autofocus: this.autofocus, disabled: this.disabled, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
377
+ : `${this.inputId}-description` })), h("select", { key: '1e1676c50ee4915bd6750677b501f6683d34fa25', id: this.inputId, ref: el => (this.selectElement = el), name: this.name, autofocus: this.autofocus, disabled: this.disabled, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
378
378
  'aria-required': String(ariaRequiredValue),
379
379
  }), multiple: this.multiple, onChange: this.handleSelectChange, class: this.internalReadonly ? 'hidden' : '', "aria-label": this.label, "aria-describedby": this.error
380
380
  ? `${this.inputId}-error`
381
- : `${this.inputId}-description` }, this.options && this.options.length > 0 ? (this.options.map(option => (h("option", { value: option.value, selected: option.selected, disabled: option.disabled }, option.label)))) : (h("slot", null))), h("div", { key: '8e0b029b8374189dc97e3835a3790428744b7567', class: "select-icons" }, this.error && (h("nv-icon", { key: '0114760160ce710a20273942cdd2f9fbd1871b8e', name: "alert-circle", class: "validation", size: "md" })), this.success && (h("nv-icon", { key: '2deff4438b6617fb8d7de59bbb8cf237981941bb', name: "circle-check", class: "validation", size: "md" })), !this.multiple && (h("nv-iconbutton", { key: '070d69fc2812ace583d61041536b9148adffde6d', name: "chevron-down", size: "md", emphasis: "lower", tabindex: -1 })))), h("slot", { key: '4a3bff3a810e4b1248b3b7036eba72bc51fd668b', name: "after-input" })), (this.description ||
382
- this.el.querySelector('[slot="description"]')) && (h("div", { key: 'cba88e7ce48085753e17b0278fc63f384493029a', class: "description", id: `${this.inputId}-description` }, h("slot", { key: 'a0ab0527bd1f016ed471bb362309d9d54be80209', name: "description" }, this.description))), (this.errorDescription ||
383
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '8d1ad1f4ef096e4183ed2f230e2fbf7d5fa6e963', class: "error-description", id: `${this.inputId}-error` }, h("slot", { key: '75a77e48a392229b84a41cb014b6eb00d361f914', name: "error-description" }, this.errorDescription)))));
381
+ : `${this.inputId}-description` }, this.options && this.options.length > 0 ? (this.options.map(option => (h("option", { value: option.value, selected: option.selected, disabled: option.disabled }, option.label)))) : (h("slot", null))), h("div", { key: 'df1132a8bb20d35d94daec1b7e32f5769c9e6ec8', class: "select-icons" }, this.error && (h("nv-icon", { key: '39825cc8efd80f89b29644525d4e9fe9ae9e5edb', name: "alert-circle", class: "validation", size: "md" })), this.success && (h("nv-icon", { key: 'c9123ff11d354283e53470991a4d8755cc89b552', name: "circle-check", class: "validation", size: "md" })), !this.multiple && (h("nv-iconbutton", { key: '7f6dacc97b04100c4ddbbc503d16f31282365232', name: "chevron-down", size: "md", emphasis: "lower", tabindex: -1 })))), h("slot", { key: '61b4d062cc94f90ebe02113950f02940a2765d36', name: "after-input" })), (this.description ||
382
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: '0685de6f40b839ea062c6088c60a10d72490fab0', class: "description", id: `${this.inputId}-description` }, h("slot", { key: '1d15fa435a00efef9a75295149c44dfc407fcc63', name: "description" }, this.description))), (this.errorDescription ||
383
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '623d7af55f6b523e834159769a2f783fb63052f7', class: "error-description", id: `${this.inputId}-error` }, h("slot", { key: '2f2c9b6ea72ae9093ccd5735813bc5c3415a39cc', name: "error-description" }, this.errorDescription)))));
384
384
  }
385
385
  static get is() { return "nv-fieldselect"; }
386
386
  static get formAssociated() { return true; }
@@ -357,4 +357,7 @@ nv-fieldselect .error-description {
357
357
  font-style: normal;
358
358
  line-height: var(--form-description-line-height);
359
359
  color: var(--components-form-text-description-error);
360
+ }
361
+ nv-fieldselect .error-description[hidden] {
362
+ display: none;
360
363
  }
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldsliderDocs = {
4
4
  component: 'nv-fieldslider',
5
- parentGroup: 'Fields/nv-fieldslider',
5
+ parentGroup: 'Fields',
6
6
  stories: [
7
7
  // Default
8
8
  {
@@ -464,11 +464,11 @@ export class NvFieldslider {
464
464
  /****************************************************************************/
465
465
  //#region RENDER
466
466
  render() {
467
- return (h(Host, { key: '99dc83ee04a8531714fc706204a8f0f7d041335d' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '4f2438a448fdf2b488bcd277bf40ff6645c6c526', htmlFor: this.startInputId }, h("slot", { key: 'd6a272526f313de63d39301a7e7b6fd0dd45bc98', name: "label" }, this.label))), h("div", { key: 'f95047b008d87f60eee6cac74447ae96bdb8a2e7', class: "slider-container" }, this.range ? (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, index: 0, inputId: this.startInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name, endName: this.endName })) : null, h("div", { key: '087808de2ce793d7c2317cfecd1cd0382c4f58c7', class: "track-container" }, h("div", { key: 'ca08ad86d4b66e93fd4f1482c7a6ebbeafbff700', class: "track", onPointerDown: this.onTrackInteraction }, this.range ? (h(RangeThumb, { rangeValue: this.rangeValueInternal, rawRangePosition: this.rawRangePosition, activeDragThumb: this.activeDragThumb, isDragging: this.isDragging, snap: this.snap, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onKeyDown: this.onKeyDown, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue })) : (h(SingleThumb, { value: this.valueInternal, min: this.min, max: this.max, step: this.step, rawPosition: this.rawPosition, isDragging: this.isDragging, snap: this.snap, disabled: this.disabled, readonly: this.readonly, onKeyDown: this.onKeyDown, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue }))), h(TickMarks, { key: '2bf097761208511839e3df0d37d0af9b21090e36', ticks: this.internalTicks, min: this.min, max: this.max })), this.range ? (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, index: 1, inputId: this.endInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name, endName: this.endName })) : (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, inputId: this.startInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name }))), (this.success ||
467
+ return (h(Host, { key: '1251891d0796093b0b199218304444cb5e530367' }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: 'dfb2f64d6b289ad18ac9b5a8ca6e445bf591add9', htmlFor: this.startInputId }, h("slot", { key: '96cce5982bf52a76f92afcf027277955fe30ce2e', name: "label" }, this.label))), h("div", { key: '84d9150d80d5a971180f04872fb2de07817e2e90', class: "slider-container" }, this.range ? (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, index: 0, inputId: this.startInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name, endName: this.endName })) : null, h("div", { key: 'acea0634b80251ef76b91e85a447dcafa636924d', class: "track-container" }, h("div", { key: 'b323a5da0449af8ca8f9463bbfbceac3e9310796', class: "track", onPointerDown: this.onTrackInteraction }, this.range ? (h(RangeThumb, { rangeValue: this.rangeValueInternal, rawRangePosition: this.rawRangePosition, activeDragThumb: this.activeDragThumb, isDragging: this.isDragging, snap: this.snap, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onKeyDown: this.onKeyDown, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue })) : (h(SingleThumb, { value: this.valueInternal, min: this.min, max: this.max, step: this.step, rawPosition: this.rawPosition, isDragging: this.isDragging, snap: this.snap, disabled: this.disabled, readonly: this.readonly, onKeyDown: this.onKeyDown, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue }))), h(TickMarks, { key: 'b3fdbe669889f22309a6f6a717f850b117a91cc8', ticks: this.internalTicks, min: this.min, max: this.max })), this.range ? (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, index: 1, inputId: this.endInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name, endName: this.endName })) : (h(FieldInput, { range: this.range, hasField: this.hasField, value: this.valueInternal, rangeValue: this.rangeValueInternal, inputId: this.startInputId, min: this.min, max: this.max, step: this.step, disabled: this.disabled, readonly: this.readonly, onInput: this.handleFieldChange, labelBeforeValue: this.labelBeforeValue, labelAfterValue: this.labelAfterValue, name: this.name }))), (this.success ||
468
468
  this.description ||
469
- this.el.querySelector('[slot="description"]')) && (h("div", { key: '35d6a7f7d9331430504b264dd51c71c4c71e4c71', class: "description" }, this.success && (h("nv-icon", { key: '60fe2a36eff25142617f79f54c719e1d7a001fcf', name: "circle-check", class: "validation", size: "md" })), h("slot", { key: 'd494185a548c60b39e96accc41739cb77c5f40dc', name: "description" }, this.description))), (this.error ||
469
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: '53b4e7236c469b87d96a666c4711b0fd9f060be9', class: "description" }, this.success && (h("nv-icon", { key: '332161c24c7aa882de0d07e0e7c4264bf5dc02b0', name: "circle-check", class: "validation", size: "md" })), h("slot", { key: 'd0ab58883e0d3d079511738835eba8a6c5caebd8', name: "description" }, this.description))), (this.error ||
470
470
  this.errorDescription ||
471
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: 'a555a0e343e9f22b7a717afdbf3b7d7d6b965fcb', class: "error-description", hidden: !this.error }, this.error && (h("nv-icon", { key: 'a9221bda376b32b8031ff6da8677d04846e84451', name: "alert-circle", class: "validation", size: "md" })), h("slot", { key: '7133562b2734136cff58428d88a2ce899245487d', name: "error-description" }, this.errorDescription)))));
471
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '8ead9d45a545ba2e1abad6a855e88c655bbc5254', class: "error-description", hidden: !this.error }, this.error && (h("nv-icon", { key: '09d224201d747651dcd0f0ce22d9d81a784e75eb', name: "alert-circle", class: "validation", size: "md" })), h("slot", { key: '8c8a0e621a54dcf67569ad4e6818b3a4bc0a3a19', name: "error-description" }, this.errorDescription)))));
472
472
  }
473
473
  static get is() { return "nv-fieldslider"; }
474
474
  static get formAssociated() { return true; }
@@ -201,4 +201,7 @@ nv-fieldtext > .error-description {
201
201
  font-style: normal;
202
202
  line-height: var(--form-description-line-height);
203
203
  color: var(--components-form-text-description-error);
204
+ }
205
+ nv-fieldtext > .error-description[hidden] {
206
+ display: none;
204
207
  }