@nova-design-system/nova-webcomponents 3.27.0 → 3.29.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 (494) hide show
  1. package/dist/cjs/{index-Cfkoz1kc.js → index-eLt3bBQs.js} +13 -1
  2. package/dist/cjs/index.cjs.js +6 -0
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/native.cjs.js +2 -2
  5. package/dist/cjs/nova-datetime-DOtVgYBB.js +10643 -0
  6. package/dist/cjs/nv-accordion-item.cjs.entry.js +3 -3
  7. package/dist/cjs/nv-accordion.cjs.entry.js +1 -1
  8. package/dist/cjs/nv-alert.cjs.entry.js +2 -2
  9. package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
  10. package/dist/cjs/nv-badge_2.cjs.entry.js +8 -7
  11. package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
  12. package/dist/cjs/nv-breadcrumbs.cjs.entry.js +1 -1
  13. package/dist/cjs/nv-button.cjs.entry.js +1 -1
  14. package/dist/cjs/nv-buttongroup.cjs.entry.js +1 -1
  15. package/dist/cjs/nv-calendar.cjs.entry.js +1 -1
  16. package/dist/cjs/nv-col.cjs.entry.js +2 -2
  17. package/dist/cjs/nv-datagrid.cjs.entry.js +1 -1
  18. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
  19. package/dist/cjs/nv-datetest.cjs.entry.js +66 -0
  20. package/dist/cjs/nv-datetimetest.cjs.entry.js +54 -0
  21. package/dist/cjs/nv-dialog.cjs.entry.js +2 -2
  22. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +7 -5
  23. package/dist/cjs/nv-drawer.cjs.entry.js +2 -2
  24. package/dist/cjs/nv-drawerfooter_2.cjs.entry.js +5 -3
  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 +15 -12
  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 +2 -2
  45. package/dist/cjs/nv-notificationcontainer.cjs.entry.js +2 -14
  46. package/dist/cjs/nv-pagination-nav.cjs.entry.js +2 -2
  47. package/dist/cjs/nv-paginationtable.cjs.entry.js +2 -2
  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 +2 -2
  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-table.cjs.entry.js +3 -3
  62. package/dist/cjs/nv-tableheader.cjs.entry.js +2 -2
  63. package/dist/cjs/nv-timetest.cjs.entry.js +72 -0
  64. package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
  65. package/dist/cjs/nv-togglebutton.cjs.entry.js +2 -2
  66. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +2 -2
  67. package/dist/cjs/nv-tooltip.cjs.entry.js +9 -4
  68. package/dist/collection/collection-manifest.json +3 -0
  69. package/dist/collection/components/nv-accordion/nv-accordion.docs.js +1 -0
  70. package/dist/collection/components/nv-accordion-item/nv-accordion-item.docs.js +69 -1
  71. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +2 -2
  72. package/dist/collection/components/nv-alert/nv-alert.docs.js +1 -0
  73. package/dist/collection/components/nv-alert/nv-alert.js +15 -5
  74. package/dist/collection/components/nv-avatar/nv-avatar.docs.js +1 -0
  75. package/dist/collection/components/nv-badge/nv-badge.docs.js +1 -0
  76. package/dist/collection/components/nv-badge/nv-badge.js +32 -11
  77. package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.docs.js +36 -1
  78. package/dist/collection/components/nv-breadcrumbs/nv-breadcrumbs.docs.js +1 -0
  79. package/dist/collection/components/nv-button/nv-button.docs.js +1 -0
  80. package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js +1 -0
  81. package/dist/collection/components/nv-calendar/nv-calendar.docs.js +1 -0
  82. package/dist/collection/components/nv-col/nv-col.docs.js +2 -0
  83. package/dist/collection/components/nv-col/nv-col.js +2 -1
  84. package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js +3 -2
  85. package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.docs.js +25 -1
  86. package/dist/collection/components/nv-datetest/nv-datetest.css +15 -0
  87. package/dist/collection/components/nv-datetest/nv-datetest.docs.js +12 -0
  88. package/dist/collection/components/nv-datetest/nv-datetest.js +242 -0
  89. package/dist/collection/components/nv-datetimetest/nv-datetimetest.css +15 -0
  90. package/dist/collection/components/nv-datetimetest/nv-datetimetest.docs.js +5 -0
  91. package/dist/collection/components/nv-datetimetest/nv-datetimetest.js +197 -0
  92. package/dist/collection/components/nv-dialog/nv-dialog.docs.js +1 -0
  93. package/dist/collection/components/nv-dialog/nv-dialog.js +1 -1
  94. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.docs.js +9 -1
  95. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +35 -13
  96. package/dist/collection/components/nv-dialogheader/nv-dialogheader.docs.js +9 -1
  97. package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
  98. package/dist/collection/components/nv-drawer/nv-drawer.docs.js +1 -0
  99. package/dist/collection/components/nv-drawer/nv-drawer.js +1 -1
  100. package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.docs.js +9 -1
  101. package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.js +31 -9
  102. package/dist/collection/components/nv-drawerheader/nv-drawerheader.docs.js +9 -1
  103. package/dist/collection/components/nv-drawerheader/nv-drawerheader.js +1 -1
  104. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.docs.js +1 -0
  105. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +4 -4
  106. package/dist/collection/components/nv-fielddate/nv-fielddate.docs.js +1 -0
  107. package/dist/collection/components/nv-fielddate/nv-fielddate.js +6 -6
  108. package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +3 -0
  109. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js +1 -0
  110. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +6 -6
  111. package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +3 -0
  112. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js +1 -0
  113. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +4 -4
  114. package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +3 -0
  115. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.docs.js +54 -1
  116. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
  117. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.css +1 -1
  118. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.docs.js +42 -1
  119. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
  120. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +1 -0
  121. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +119 -84
  122. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +13 -2
  123. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +3 -0
  124. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js +1 -0
  125. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +4 -4
  126. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +3 -0
  127. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.docs.js +1 -0
  128. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +4 -4
  129. package/dist/collection/components/nv-fieldradio/nv-fieldradio.docs.js +1 -0
  130. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  131. package/dist/collection/components/nv-fieldselect/nv-fieldselect.docs.js +1 -0
  132. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  133. package/dist/collection/components/nv-fieldselect/styles/nv-fieldselect.css +3 -0
  134. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +1 -0
  135. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
  136. package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +3 -0
  137. package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js +3 -1
  138. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +4 -4
  139. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +3 -0
  140. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.docs.js +1 -0
  141. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  142. package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js +1 -0
  143. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +13 -10
  144. package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +3 -0
  145. package/dist/collection/components/nv-icon/nv-icon.docs.js +1 -0
  146. package/dist/collection/components/nv-icon/nv-icon.js +7 -4
  147. package/dist/collection/components/nv-icon/nv-icons.js +4 -0
  148. package/dist/collection/components/nv-iconbutton/nv-iconbutton.docs.js +1 -0
  149. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +7 -4
  150. package/dist/collection/components/nv-loader/nv-loader.docs.js +1 -0
  151. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  152. package/dist/collection/components/nv-menu/nv-menu.docs.js +1 -0
  153. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  154. package/dist/collection/components/nv-menuitem/nv-menuitem.docs.js +20 -1
  155. package/dist/collection/components/nv-menuitem/nv-menuitem.js +6 -3
  156. package/dist/collection/components/nv-notification/nv-notification.docs.js +1 -0
  157. package/dist/collection/components/nv-notification/nv-notification.js +15 -5
  158. package/dist/collection/components/nv-notification-bullet/nv-notification-bullet.docs.js +1 -0
  159. package/dist/collection/components/nv-notificationcontainer/nv-notificationcontainer.docs.js +24 -1
  160. package/dist/collection/components/nv-notificationcontainer/nv-notificationcontainer.js +1 -15
  161. package/dist/collection/components/nv-pagination-nav/nv-pagination-nav.js +1 -1
  162. package/dist/collection/components/nv-paginationtable/nv-paginationtable.docs.js +1 -0
  163. package/dist/collection/components/nv-paginationtable/nv-paginationtable.js +1 -1
  164. package/dist/collection/components/nv-popover/nv-popover.docs.js +1 -0
  165. package/dist/collection/components/nv-popover/nv-popover.js +1 -1
  166. package/dist/collection/components/nv-row/nv-row.docs.js +2 -0
  167. package/dist/collection/components/nv-row/nv-row.js +2 -1
  168. package/dist/collection/components/nv-sidebar/nv-sidebar.docs.js +1 -0
  169. package/dist/collection/components/nv-sidebar/nv-sidebar.js +1 -1
  170. package/dist/collection/components/nv-sidebarcontent/nv-sidebarcontent.docs.js +14 -1
  171. package/dist/collection/components/nv-sidebarcontent/nv-sidebarcontent.js +1 -1
  172. package/dist/collection/components/nv-sidebardivider/nv-sidebardivider.docs.js +15 -1
  173. package/dist/collection/components/nv-sidebardivider/nv-sidebardivider.js +1 -1
  174. package/dist/collection/components/nv-sidebarfooter/nv-sidebarfooter.docs.js +9 -1
  175. package/dist/collection/components/nv-sidebarfooter/nv-sidebarfooter.js +1 -1
  176. package/dist/collection/components/nv-sidebargroup/nv-sidebargroup.docs.js +15 -1
  177. package/dist/collection/components/nv-sidebargroup/nv-sidebargroup.js +1 -1
  178. package/dist/collection/components/nv-sidebarheader/nv-sidebarheader.docs.js +9 -1
  179. package/dist/collection/components/nv-sidebarheader/nv-sidebarheader.js +1 -1
  180. package/dist/collection/components/nv-sidebarlogo/nv-sidebarlogo.docs.js +10 -1
  181. package/dist/collection/components/nv-sidebarlogo/nv-sidebarlogo.js +1 -1
  182. package/dist/collection/components/nv-sidebarnavitem/nv-sidebarnavitem.docs.js +16 -1
  183. package/dist/collection/components/nv-sidebarnavitem/nv-sidebarnavitem.js +8 -5
  184. package/dist/collection/components/nv-sidebarnavsubitem/nv-sidebarnavsubitem.docs.js +15 -1
  185. package/dist/collection/components/nv-sidebarnavsubitem/nv-sidebarnavsubitem.js +1 -1
  186. package/dist/collection/components/nv-split/nv-split.docs.js +1 -0
  187. package/dist/collection/components/nv-split/nv-split.js +1 -1
  188. package/dist/collection/components/nv-stack/nv-stack.docs.js +1 -0
  189. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  190. package/dist/collection/components/nv-table/nv-table.docs.js +1 -0
  191. package/dist/collection/components/nv-table/nv-table.js +1 -1
  192. package/dist/collection/components/nv-table/styles/nv-table.css +19 -2
  193. package/dist/collection/components/nv-tableheader/nv-tableheader.docs.js +1 -0
  194. package/dist/collection/components/nv-tableheader/nv-tableheader.js +1 -1
  195. package/dist/collection/components/nv-timetest/nv-timetest.css +15 -0
  196. package/dist/collection/components/nv-timetest/nv-timetest.docs.js +5 -0
  197. package/dist/collection/components/nv-timetest/nv-timetest.js +248 -0
  198. package/dist/collection/components/nv-toggle/nv-toggle.docs.js +1 -0
  199. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  200. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js +48 -1
  201. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +1 -1
  202. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +1 -0
  203. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +1 -1
  204. package/dist/collection/components/nv-tooltip/nv-tooltip.docs.js +1 -0
  205. package/dist/collection/components/nv-tooltip/nv-tooltip.js +8 -3
  206. package/dist/collection/index.js +3 -0
  207. package/dist/collection/interfaces/dates.js +1 -0
  208. package/dist/collection/utils/nova-datetime.js +144 -0
  209. package/dist/collection/utils/test/nova-datetime.test.js +230 -0
  210. package/dist/components/index.js +1 -1
  211. package/dist/components/nv-accordion-item.js +1 -1
  212. package/dist/components/nv-accordion.js +1 -1
  213. package/dist/components/nv-alert.js +1 -1
  214. package/dist/components/nv-avatar.js +1 -1
  215. package/dist/components/nv-badge.js +1 -1
  216. package/dist/components/nv-breadcrumb.js +1 -1
  217. package/dist/components/nv-breadcrumbs.js +1 -1
  218. package/dist/components/nv-button.js +1 -1
  219. package/dist/components/nv-buttongroup.js +1 -1
  220. package/dist/components/nv-calendar.js +1 -1
  221. package/dist/components/nv-col.js +1 -1
  222. package/dist/components/nv-datagrid.js +1 -1
  223. package/dist/components/nv-datagridcolumn.js +1 -1
  224. package/dist/components/nv-datetest.d.ts +11 -0
  225. package/dist/components/nv-datetest.js +1 -0
  226. package/dist/components/nv-datetimetest.d.ts +11 -0
  227. package/dist/components/nv-datetimetest.js +1 -0
  228. package/dist/components/nv-dialog.js +1 -1
  229. package/dist/components/nv-dialogfooter.js +1 -1
  230. package/dist/components/nv-dialogheader.js +1 -1
  231. package/dist/components/nv-drawer.js +1 -1
  232. package/dist/components/nv-drawerfooter.js +1 -1
  233. package/dist/components/nv-drawerheader.js +1 -1
  234. package/dist/components/nv-fieldcheckbox.js +1 -1
  235. package/dist/components/nv-fielddate.js +1 -1
  236. package/dist/components/nv-fielddaterange.js +1 -1
  237. package/dist/components/nv-fielddropdown.js +1 -1
  238. package/dist/components/nv-fielddropdownitem.js +1 -1
  239. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  240. package/dist/components/nv-fieldmultiselect.js +1 -1
  241. package/dist/components/nv-fieldnumber.js +1 -1
  242. package/dist/components/nv-fieldpassword.js +1 -1
  243. package/dist/components/nv-fieldradio.js +1 -1
  244. package/dist/components/nv-fieldselect.js +1 -1
  245. package/dist/components/nv-fieldslider.js +1 -1
  246. package/dist/components/nv-fieldtext.js +1 -1
  247. package/dist/components/nv-fieldtextarea.js +1 -1
  248. package/dist/components/nv-fieldtime.js +1 -1
  249. package/dist/components/nv-icon.js +1 -1
  250. package/dist/components/nv-iconbutton.js +1 -1
  251. package/dist/components/nv-loader.js +1 -1
  252. package/dist/components/nv-menu.js +1 -1
  253. package/dist/components/nv-menuitem.js +1 -1
  254. package/dist/components/nv-notification-bullet.js +1 -1
  255. package/dist/components/nv-notification.js +1 -1
  256. package/dist/components/nv-notificationcontainer.js +1 -1
  257. package/dist/components/nv-pagination-nav.js +1 -1
  258. package/dist/components/nv-paginationtable.js +1 -1
  259. package/dist/components/nv-popover.js +1 -1
  260. package/dist/components/nv-row.js +1 -1
  261. package/dist/components/nv-sidebar.js +1 -1
  262. package/dist/components/nv-sidebarcontent.js +1 -1
  263. package/dist/components/nv-sidebardivider.js +1 -1
  264. package/dist/components/nv-sidebarfooter.js +1 -1
  265. package/dist/components/nv-sidebargroup.js +1 -1
  266. package/dist/components/nv-sidebarheader.js +1 -1
  267. package/dist/components/nv-sidebarlogo.js +1 -1
  268. package/dist/components/nv-sidebarnavitem.js +1 -1
  269. package/dist/components/nv-sidebarnavsubitem.js +1 -1
  270. package/dist/components/nv-split.js +1 -1
  271. package/dist/components/nv-stack.js +1 -1
  272. package/dist/components/nv-table.js +1 -1
  273. package/dist/components/nv-tableheader.js +1 -1
  274. package/dist/components/nv-timetest.d.ts +11 -0
  275. package/dist/components/nv-timetest.js +1 -0
  276. package/dist/components/nv-toggle.js +1 -1
  277. package/dist/components/nv-togglebutton.js +1 -1
  278. package/dist/components/nv-togglebuttongroup.js +1 -1
  279. package/dist/components/nv-tooltip.js +1 -1
  280. package/dist/components/{p-CAGzfU3O.js → p-Bl7rc9YV.js} +1 -1
  281. package/dist/components/{p-BBy1Mdgv.js → p-Bytxo1iR.js} +1 -1
  282. package/dist/components/p-C47vpaBp.js +1 -0
  283. package/dist/components/{p-BMpkyzCW.js → p-C99g_PrG.js} +1 -1
  284. package/dist/components/{p-BvxuoODv.js → p-CBlrNW6n.js} +1 -1
  285. package/dist/components/{p-DlOgBZa8.js → p-CD12QIMB.js} +2 -2
  286. package/dist/components/{p-Ho_7-x5W.js → p-CT782LKx.js} +1 -1
  287. package/dist/components/{p-D-MnI-R8.js → p-CUjRfVPl.js} +1 -1
  288. package/dist/components/{p-kMTGXpRx.js → p-CfOVizcp.js} +1 -1
  289. package/dist/components/{p-S18SgvAW.js → p-CgufQqes.js} +1 -1
  290. package/dist/components/p-ChVdX6FG.js +1 -0
  291. package/dist/components/{p-Ba1zVklG.js → p-Cnlbk416.js} +1 -1
  292. package/dist/components/p-Cr_-lRNo.js +1 -0
  293. package/dist/components/{p-BwYt1BAb.js → p-Cuq_uNwY.js} +1 -1
  294. package/dist/components/p-CyL2J6O4.js +74 -0
  295. package/dist/components/p-D1psKXwD.js +1 -0
  296. package/dist/components/{p-T-bBxAoT.js → p-D3JDACHw.js} +1 -1
  297. package/dist/components/p-DKgmDzJ1.js +1 -0
  298. package/dist/components/p-DdcXhR3I.js +1 -0
  299. package/dist/components/p-EV8CtE4q.js +1 -0
  300. package/dist/components/{p-DrgqO3gF.js → p-RYxAzR3m.js} +1 -1
  301. package/dist/components/{p-Db4JZxyy.js → p-_zOMJBOq.js} +1 -1
  302. package/dist/components/{p-6nAIGZFL.js → p-flcatmxD.js} +1 -1
  303. package/dist/components/p-p1ofW2Cs.js +1 -0
  304. package/dist/esm/{index-BCjiE1MF.js → index-DU3Vhh_k.js} +13 -1
  305. package/dist/esm/index.js +5 -0
  306. package/dist/esm/loader.js +3 -3
  307. package/dist/esm/native.js +3 -3
  308. package/dist/esm/nova-datetime-CyL2J6O4.js +10636 -0
  309. package/dist/esm/nv-accordion-item.entry.js +3 -3
  310. package/dist/esm/nv-accordion.entry.js +1 -1
  311. package/dist/esm/nv-alert.entry.js +2 -2
  312. package/dist/esm/nv-avatar.entry.js +1 -1
  313. package/dist/esm/nv-badge_2.entry.js +8 -7
  314. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  315. package/dist/esm/nv-breadcrumbs.entry.js +1 -1
  316. package/dist/esm/nv-button.entry.js +1 -1
  317. package/dist/esm/nv-buttongroup.entry.js +1 -1
  318. package/dist/esm/nv-calendar.entry.js +1 -1
  319. package/dist/esm/nv-col.entry.js +2 -2
  320. package/dist/esm/nv-datagrid.entry.js +1 -1
  321. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  322. package/dist/esm/nv-datetest.entry.js +64 -0
  323. package/dist/esm/nv-datetimetest.entry.js +52 -0
  324. package/dist/esm/nv-dialog.entry.js +2 -2
  325. package/dist/esm/nv-dialogfooter_2.entry.js +7 -5
  326. package/dist/esm/nv-drawer.entry.js +2 -2
  327. package/dist/esm/nv-drawerfooter_2.entry.js +5 -3
  328. package/dist/esm/nv-fieldcheckbox.entry.js +5 -5
  329. package/dist/esm/nv-fielddate.entry.js +8 -8
  330. package/dist/esm/nv-fielddaterange.entry.js +8 -8
  331. package/dist/esm/nv-fielddropdown.entry.js +6 -6
  332. package/dist/esm/nv-fielddropdownitem.entry.js +2 -2
  333. package/dist/esm/nv-fieldmultiselect.entry.js +115 -86
  334. package/dist/esm/nv-fieldnumber.entry.js +6 -6
  335. package/dist/esm/nv-fieldpassword.entry.js +6 -6
  336. package/dist/esm/nv-fieldradio.entry.js +4 -4
  337. package/dist/esm/nv-fieldselect.entry.js +7 -7
  338. package/dist/esm/nv-fieldslider.entry.js +4 -4
  339. package/dist/esm/nv-fieldtext.entry.js +6 -6
  340. package/dist/esm/nv-fieldtextarea.entry.js +5 -5
  341. package/dist/esm/nv-fieldtime.entry.js +15 -12
  342. package/dist/esm/nv-icon.entry.js +3 -3
  343. package/dist/esm/nv-iconbutton_2.entry.js +3 -3
  344. package/dist/esm/nv-menu.entry.js +2 -2
  345. package/dist/esm/nv-menuitem.entry.js +2 -2
  346. package/dist/esm/nv-notification-bullet.entry.js +1 -1
  347. package/dist/esm/nv-notification.entry.js +2 -2
  348. package/dist/esm/nv-notificationcontainer.entry.js +2 -14
  349. package/dist/esm/nv-pagination-nav.entry.js +2 -2
  350. package/dist/esm/nv-paginationtable.entry.js +2 -2
  351. package/dist/esm/nv-popover.entry.js +2 -2
  352. package/dist/esm/nv-row.entry.js +2 -2
  353. package/dist/esm/nv-sidebar.entry.js +2 -2
  354. package/dist/esm/nv-sidebarcontent.entry.js +2 -2
  355. package/dist/esm/nv-sidebardivider.entry.js +2 -2
  356. package/dist/esm/nv-sidebarfooter.entry.js +2 -2
  357. package/dist/esm/nv-sidebargroup.entry.js +2 -2
  358. package/dist/esm/nv-sidebarheader.entry.js +2 -2
  359. package/dist/esm/nv-sidebarlogo.entry.js +2 -2
  360. package/dist/esm/nv-sidebarnavitem.entry.js +3 -3
  361. package/dist/esm/nv-sidebarnavsubitem.entry.js +2 -2
  362. package/dist/esm/nv-split.entry.js +2 -2
  363. package/dist/esm/nv-stack.entry.js +2 -2
  364. package/dist/esm/nv-table.entry.js +3 -3
  365. package/dist/esm/nv-tableheader.entry.js +2 -2
  366. package/dist/esm/nv-timetest.entry.js +70 -0
  367. package/dist/esm/nv-toggle.entry.js +3 -3
  368. package/dist/esm/nv-togglebutton.entry.js +2 -2
  369. package/dist/esm/nv-togglebuttongroup.entry.js +2 -2
  370. package/dist/esm/nv-tooltip.entry.js +9 -4
  371. package/dist/lib/generators/docs-blazor.js +11 -2
  372. package/dist/lib/utils/parseToCSharpTypes.js +114 -18
  373. package/dist/lib/utils/test/parseToCSharpTypes.test.js +95 -1
  374. package/dist/native/index.esm.js +1 -1
  375. package/dist/native/native.css +1 -1
  376. package/dist/native/native.esm.js +1 -1
  377. package/dist/native/p-04e40a1e.entry.js +1 -0
  378. package/dist/native/p-0770997b.entry.js +1 -0
  379. package/dist/native/p-07f3200b.entry.js +1 -0
  380. package/dist/native/{p-a6b3256b.entry.js → p-0a17050f.entry.js} +1 -1
  381. package/dist/native/{p-7d49e88d.entry.js → p-0d03b6ed.entry.js} +1 -1
  382. package/dist/native/p-0d3ab890.entry.js +1 -0
  383. package/dist/native/{p-b3964a1c.entry.js → p-0f59cb66.entry.js} +1 -1
  384. package/dist/native/{p-87758615.entry.js → p-0f9a284e.entry.js} +1 -1
  385. package/dist/native/{p-90b8b889.entry.js → p-12269ed5.entry.js} +1 -1
  386. package/dist/native/{p-fd5e27ae.entry.js → p-1450d746.entry.js} +1 -1
  387. package/dist/native/{p-f9612edf.entry.js → p-16600d93.entry.js} +1 -1
  388. package/dist/native/{p-1e0ca4df.entry.js → p-1bc76216.entry.js} +1 -1
  389. package/dist/native/p-1ea2a804.entry.js +1 -0
  390. package/dist/native/{p-24ce0c8d.entry.js → p-26c0c34b.entry.js} +1 -1
  391. package/dist/native/{p-9709c7d5.entry.js → p-27ecae3c.entry.js} +1 -1
  392. package/dist/native/{p-5a7e46ad.entry.js → p-2b1efb98.entry.js} +1 -1
  393. package/dist/native/{p-927b655d.entry.js → p-2d37df11.entry.js} +1 -1
  394. package/dist/native/{p-eb8ba7a2.entry.js → p-2d5189eb.entry.js} +1 -1
  395. package/dist/native/{p-157c5ac8.entry.js → p-2e40d5d9.entry.js} +1 -1
  396. package/dist/native/{p-0fe84123.entry.js → p-2e932ca4.entry.js} +1 -1
  397. package/dist/native/{p-5c003e50.entry.js → p-336d63c4.entry.js} +1 -1
  398. package/dist/native/p-3afa34d1.entry.js +1 -0
  399. package/dist/native/{p-24f69387.entry.js → p-3ddc967e.entry.js} +1 -1
  400. package/dist/native/p-48c1bab4.entry.js +1 -0
  401. package/dist/native/{p-6742f88f.entry.js → p-49c6d122.entry.js} +1 -1
  402. package/dist/native/{p-8a0dc37b.entry.js → p-4badca4e.entry.js} +1 -1
  403. package/dist/native/{p-bb43a3b4.entry.js → p-4bb9b387.entry.js} +1 -1
  404. package/dist/native/{p-39366f18.entry.js → p-568fbdac.entry.js} +1 -1
  405. package/dist/native/{p-8f76e030.entry.js → p-59ecaf60.entry.js} +1 -1
  406. package/dist/native/p-5cefca3c.entry.js +1 -0
  407. package/dist/native/{p-148c1d3e.entry.js → p-5f6e45ca.entry.js} +1 -1
  408. package/dist/native/{p-fb34fc7d.entry.js → p-6f1213fb.entry.js} +1 -1
  409. package/dist/native/{p-5ce3d30b.entry.js → p-6f91712c.entry.js} +1 -1
  410. package/dist/native/{p-1aea6fe0.entry.js → p-706eeea4.entry.js} +1 -1
  411. package/dist/native/{p-d6e2e120.entry.js → p-7126f67e.entry.js} +1 -1
  412. package/dist/native/{p-1f8cc03a.entry.js → p-748661f0.entry.js} +1 -1
  413. package/dist/native/{p-6f3c3e2a.entry.js → p-7b545176.entry.js} +1 -1
  414. package/dist/native/{p-ecce3e66.entry.js → p-7bb2536f.entry.js} +1 -1
  415. package/dist/native/{p-a16f8a14.entry.js → p-7fd6f0b0.entry.js} +1 -1
  416. package/dist/native/p-803759ef.entry.js +1 -0
  417. package/dist/native/{p-d12a2841.entry.js → p-8e05077a.entry.js} +1 -1
  418. package/dist/native/{p-25ef7329.entry.js → p-92539825.entry.js} +1 -1
  419. package/dist/native/p-943a4dfd.entry.js +1 -0
  420. package/dist/native/{p-7ec28d5d.entry.js → p-96078a63.entry.js} +1 -1
  421. package/dist/native/{p-56593bf0.entry.js → p-9a05395d.entry.js} +1 -1
  422. package/dist/native/{p-f9e4daf7.entry.js → p-9b8478a7.entry.js} +1 -1
  423. package/dist/native/p-CyL2J6O4.js +74 -0
  424. package/dist/native/{p-BCjiE1MF.js → p-DU3Vhh_k.js} +1 -1
  425. package/dist/native/{p-67e0680e.entry.js → p-a5e39524.entry.js} +1 -1
  426. package/dist/native/{p-31ba86b3.entry.js → p-b7436a14.entry.js} +1 -1
  427. package/dist/native/{p-9fda1976.entry.js → p-bff549dd.entry.js} +1 -1
  428. package/dist/native/p-c20e0b5f.entry.js +1 -0
  429. package/dist/native/p-ca4ab8a5.entry.js +1 -0
  430. package/dist/native/{p-591f3dcc.entry.js → p-d468c445.entry.js} +1 -1
  431. package/dist/native/p-d5060f92.entry.js +1 -0
  432. package/dist/native/{p-539c04ad.entry.js → p-d5e931c9.entry.js} +1 -1
  433. package/dist/native/p-dc647a64.entry.js +1 -0
  434. package/dist/native/p-df5c6b0c.entry.js +1 -0
  435. package/dist/native/p-e8569a99.entry.js +1 -0
  436. package/dist/native/p-eb737344.entry.js +1 -0
  437. package/dist/native/{p-ebff7ddb.entry.js → p-f078f10a.entry.js} +1 -1
  438. package/dist/native/p-f3756dfd.entry.js +1 -0
  439. package/dist/native/p-f3ded7e8.entry.js +1 -0
  440. package/dist/native/{p-3a35cf46.entry.js → p-f7fdca43.entry.js} +1 -1
  441. package/dist/types/components/nv-alert/nv-alert.d.ts +3 -1
  442. package/dist/types/components/nv-badge/nv-badge.d.ts +6 -3
  443. package/dist/types/components/nv-col/nv-col.d.ts +1 -0
  444. package/dist/types/components/nv-datetest/nv-datetest.d.ts +48 -0
  445. package/dist/types/components/nv-datetest/nv-datetest.docs.d.ts +4 -0
  446. package/dist/types/components/nv-datetimetest/nv-datetimetest.d.ts +44 -0
  447. package/dist/types/components/nv-datetimetest/nv-datetimetest.docs.d.ts +4 -0
  448. package/dist/types/components/nv-dialogfooter/nv-dialogfooter.d.ts +5 -2
  449. package/dist/types/components/nv-drawerfooter/nv-drawerfooter.d.ts +5 -2
  450. package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +16 -11
  451. package/dist/types/components/nv-icon/nv-icon.d.ts +2 -1
  452. package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
  453. package/dist/types/components/nv-iconbutton/nv-iconbutton.d.ts +2 -1
  454. package/dist/types/components/nv-menuitem/nv-menuitem.d.ts +1 -0
  455. package/dist/types/components/nv-notification/nv-notification.d.ts +3 -1
  456. package/dist/types/components/nv-notificationcontainer/nv-notificationcontainer.d.ts +0 -6
  457. package/dist/types/components/nv-row/nv-row.d.ts +1 -0
  458. package/dist/types/components/nv-sidebarnavitem/nv-sidebarnavitem.d.ts +2 -1
  459. package/dist/types/components/nv-timetest/nv-timetest.d.ts +48 -0
  460. package/dist/types/components/nv-timetest/nv-timetest.docs.d.ts +4 -0
  461. package/dist/types/components.d.ts +349 -44
  462. package/dist/types/index.d.ts +2 -0
  463. package/dist/types/interfaces/dates.d.ts +8 -0
  464. package/dist/types/nova-docs.d.ts +8 -0
  465. package/dist/types/utils/nova-datetime.d.ts +79 -0
  466. package/dist/types/utils/test/nova-datetime.test.d.ts +1 -0
  467. package/dist/vscode-data.json +18259 -2581
  468. package/hydrate/index.js +11008 -219
  469. package/hydrate/index.mjs +11008 -219
  470. package/package.json +14 -1
  471. package/dist/components/p-CV12ukSl.js +0 -1
  472. package/dist/components/p-CZkFkVd8.js +0 -1
  473. package/dist/components/p-CcmfuwSa.js +0 -1
  474. package/dist/components/p-CqJqzGJS.js +0 -1
  475. package/dist/components/p-D0bGRzSN.js +0 -1
  476. package/dist/components/p-DC_2597n.js +0 -1
  477. package/dist/components/p-IzPWk8zx.js +0 -1
  478. package/dist/components/p-uAXqRBhx.js +0 -1
  479. package/dist/native/p-03cc1f2c.entry.js +0 -1
  480. package/dist/native/p-18bdc07a.entry.js +0 -1
  481. package/dist/native/p-1c97c353.entry.js +0 -1
  482. package/dist/native/p-23f0ca96.entry.js +0 -1
  483. package/dist/native/p-34e19b6e.entry.js +0 -1
  484. package/dist/native/p-46267895.entry.js +0 -1
  485. package/dist/native/p-597cac0f.entry.js +0 -1
  486. package/dist/native/p-5f42a7f1.entry.js +0 -1
  487. package/dist/native/p-7aac0b1a.entry.js +0 -1
  488. package/dist/native/p-855f7be1.entry.js +0 -1
  489. package/dist/native/p-99726dd4.entry.js +0 -1
  490. package/dist/native/p-c0b05d6f.entry.js +0 -1
  491. package/dist/native/p-c214e4af.entry.js +0 -1
  492. package/dist/native/p-c29dc907.entry.js +0 -1
  493. package/dist/native/p-d46bd21a.entry.js +0 -1
  494. package/dist/native/p-ddedc9c1.entry.js +0 -1
@@ -658,11 +658,11 @@ export class NvFielddropdown {
658
658
  ? ariaRequiredAttrValue === 'true' || ariaRequiredAttrValue === ''
659
659
  : undefined;
660
660
  const useNativeRequired = this.required && (!useAriaRequired || ariaRequiredValue === true);
661
- return (h(Host, { key: 'fc83e8834e38142ad102d17495b5978283699576', role: "combobox", "aria-expanded": this.open.toString(), "aria-haspopup": "listbox", "aria-label": this.label }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: '5a1eb965296909556869a025a6e4da609f2cbf90', htmlFor: this.inputId, onClick: this.syncToggleDropdown.bind(this) }, h("slot", { key: 'd5d4f3607e07e248c4083c3ea934a3bd1d7a7467', name: "label" }, this.label))), h("nv-popover", { key: '17e42a4d729dbc735db49f398ec14e0c296ff8ee', triggerMode: "controlled", placement: "bottom-start", open: this.open, onOpenChanged: e => this.openChanged.emit(e.detail) }, h("div", { key: 'a665ff2d2142acf5335d52e9a304ea2995750e5f', class: "input-wrapper", slot: "trigger" }, h("slot", { key: 'bddb24c6404ea0ea7da33485f8d497d0a635f3e2', name: "before-input" }), h("div", { key: '7275a9a99c9b4476b405f3966f128ce9ce92801a', class: "input-container" }, h("slot", { key: 'ede3c4442f365377eb83524f5d70d2922cd2a38b', name: "leading-input" }), this.filterable || this.disabled || this.readonly ? (h("input", { "data-scope": "focusable", id: this.inputId, type: "search", ref: e => (this.inputElement = e), autofocus: this.autofocus, autocomplete: this.autocomplete, placeholder: this.placeholder, name: this.name, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
661
+ return (h(Host, { key: 'b41a60470da47b175fac17a8bc88b8719b56cc14', role: "combobox", "aria-expanded": this.open.toString(), "aria-haspopup": "listbox", "aria-label": this.label }, (this.label || this.el.querySelector('[slot="label"]')) && (h("label", { key: 'adf93f21febb5404b931b821595eed91b24da55b', htmlFor: this.inputId, onClick: this.syncToggleDropdown.bind(this) }, h("slot", { key: 'c8b8256e6e06695a3b6778cec0a696bc0713e6dc', name: "label" }, this.label))), h("nv-popover", { key: '66895b00c801a5c1889da8bc73d9f519d3fe4b70', triggerMode: "controlled", placement: "bottom-start", open: this.open, onOpenChanged: e => this.openChanged.emit(e.detail) }, h("div", { key: 'e468646cb1d08f7f26a8c427040d14f843279fd0', class: "input-wrapper", slot: "trigger" }, h("slot", { key: 'd5567eb82b1e9230507963ed7ca76656f1415855', name: "before-input" }), h("div", { key: '872a8f01aeba95f52209e8dbe2bb1cff3c65c46f', class: "input-container" }, h("slot", { key: 'f8038d509899b3dbe895c9f042f39a1274d1b681', name: "leading-input" }), this.filterable || this.disabled || this.readonly ? (h("input", { "data-scope": "focusable", id: this.inputId, type: "search", ref: e => (this.inputElement = e), autofocus: this.autofocus, autocomplete: this.autocomplete, placeholder: this.placeholder, name: this.name, required: useNativeRequired ? this.required : undefined, ...(ariaRequiredValue !== undefined && {
662
662
  'aria-required': String(ariaRequiredValue),
663
- }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleFilterInput })) : (h("p", { "data-scope": "focusable", id: this.inputId, ref: el => (this.selectElement = el), class: "non-filterable-text", tabIndex: this.disabled ? -1 : 0 }, this.getSelectedLabel() || this.value || this.placeholder)), this.filterable && this.filterText && (h("nv-iconbutton", { key: 'd1aa81c5d14601ea85cec133a94f2b071ca98358', name: "x", size: "md", emphasis: "lower", class: "clear-button", onClick: this.clearFilter.bind(this), "aria-label": "Clear input" })), this.error && (h("nv-icon", { key: 'd49e30222d63ffdcc4d952d959a98946b943685f', name: "alert-circle", class: "validation", size: "md" })), h("nv-iconbutton", { key: '6e157ce63f3f6faa08df5b7b9b7e6fd3ae9d0c31', "data-scope": "toggle-dropdown", ref: el => (this.toggleElement = el), name: this.open ? 'chevron-top' : 'chevron-down', size: "md", emphasis: "lower", "aria-label": this.open ? 'Hide dropdown' : 'Show dropdown', onClick: this.syncToggleDropdown.bind(this), tabIndex: this.disabled ? -1 : 0 })), h("slot", { key: '665519b43abbd562ea1c3e36355b15ffb3e6fea2', name: "after-input" })), h("div", { key: 'da97b6498e93d5f6c427bec6963db697c41c2d9a', slot: "content", style: this.maxHeight ? { maxHeight: this.maxHeight } : {} }, this.options?.length > 0 && (h("ul", { key: '0db57a711680aad61c32993b5f3afe304ec9066f' }, this.options.map(option => (h("nv-fielddropdownitem", { label: option.label, value: option.value, disabled: option.disabled, selected: option.value === this.value }))))), h("slot", { key: '5c7643c6436c42efa63bab75f416b684b662812b', name: "content" }))), (this.description ||
664
- this.el.querySelector('[slot="description"]')) && (h("div", { key: '0ade462a96a16bb0cf6fb9d49d4ead0d98a6234b', class: "description" }, h("slot", { key: 'bb2d0c3340bdc0d0b3ac77feab8bc70a73b89a00', name: "description" }, this.description))), (this.errorDescription ||
665
- this.el.querySelector('[slot="error-description"]')) && (h("div", { key: 'c04c2329d71e088b262a46441bb3bd9592d304e8', hidden: !this.error, class: "error-description" }, h("slot", { key: 'b85d769f12c4bf2a2ba5aba69c20566d17801f0a', name: "error-description" }, this.errorDescription)))));
663
+ }), disabled: this.disabled, readOnly: this.readonly, onInput: this.handleFilterInput })) : (h("p", { "data-scope": "focusable", id: this.inputId, ref: el => (this.selectElement = el), class: "non-filterable-text", tabIndex: this.disabled ? -1 : 0 }, this.getSelectedLabel() || this.value || this.placeholder)), this.filterable && this.filterText && (h("nv-iconbutton", { key: 'b5b48972a2529eee9dd2fd68871859bf289d472a', name: "x", size: "md", emphasis: "lower", class: "clear-button", onClick: this.clearFilter.bind(this), "aria-label": "Clear input" })), this.error && (h("nv-icon", { key: '2cca314634242b1e697ba2b26298b095f0742582', name: "alert-circle", class: "validation", size: "md" })), h("nv-iconbutton", { key: 'eac277cbb66ac82547d5c4c6a6aec3443f2fb593', "data-scope": "toggle-dropdown", ref: el => (this.toggleElement = el), name: this.open ? 'chevron-top' : 'chevron-down', size: "md", emphasis: "lower", "aria-label": this.open ? 'Hide dropdown' : 'Show dropdown', onClick: this.syncToggleDropdown.bind(this), tabIndex: this.disabled ? -1 : 0 })), h("slot", { key: '25f05b5425937ca89e1c8c4f2be9fbde2e39959a', name: "after-input" })), h("div", { key: '064a1701a6f4678e1443d7e028f3681e2e41dfd9', slot: "content", style: this.maxHeight ? { maxHeight: this.maxHeight } : {} }, this.options?.length > 0 && (h("ul", { key: 'a9e489d4eb5551044f43a5aacaed94457ddbcacc' }, this.options.map(option => (h("nv-fielddropdownitem", { label: option.label, value: option.value, disabled: option.disabled, selected: option.value === this.value }))))), h("slot", { key: '4dda850901378ea3416260e1c0adda7af9a153c7', name: "content" }))), (this.description ||
664
+ this.el.querySelector('[slot="description"]')) && (h("div", { key: 'a878da5beb9572bc8d3a318d3879517ee84c7bac', class: "description" }, h("slot", { key: '04618e824a1b5d67a4ccbe70f13d9ca818f607bd', name: "description" }, this.description))), (this.errorDescription ||
665
+ this.el.querySelector('[slot="error-description"]')) && (h("div", { key: '007314310806e8dcc5b2b48af65bc66de4ba9f7a', hidden: !this.error, class: "error-description" }, h("slot", { key: '237a4e37e5869f8b66c631559027ec6551005ec6', name: "error-description" }, this.errorDescription)))));
666
666
  }
667
667
  static get is() { return "nv-fielddropdown"; }
668
668
  static get formAssociated() { return true; }
@@ -285,4 +285,7 @@ nv-fielddropdown .error-description {
285
285
  font-style: normal;
286
286
  line-height: var(--form-description-line-height);
287
287
  color: var(--components-form-text-description-error);
288
+ }
289
+ nv-fielddropdown .error-description[hidden] {
290
+ display: none;
288
291
  }
@@ -1,5 +1,58 @@
1
+ import { h } from "@stencil/core";
2
+ import { nameof } from "../../utils/class.utils";
1
3
  const NvFielddropdownitemDocs = {
2
4
  component: 'nv-fielddropdownitem',
3
- skip: true,
5
+ parentGroup: 'Fields/NvFielddropdown',
6
+ subcomponents: ['nv-fielddropdown', 'nv-icon', 'nv-avatar', 'nv-badge'],
7
+ stories: [
8
+ // Default
9
+ {
10
+ name: 'Default',
11
+ description: 'Basic dropdown item within a fielddropdown',
12
+ template: (h("nv-fielddropdown", { label: "Select an option" }, h("nv-fielddropdownitem", { "data-storybook-args": true, value: "item1" }, "Item 1"), h("nv-fielddropdownitem", { value: "item2" }, "Item 2"), h("nv-fielddropdownitem", { value: "item3" }, "Item 3"))),
13
+ },
14
+ // value
15
+ {
16
+ name: nameof(x => x.value),
17
+ description: 'Dropdown item with a specific value',
18
+ template: (h("nv-fielddropdown", { label: "Select a city" }, h("nv-fielddropdownitem", { value: "paris" }, "Paris"), h("nv-fielddropdownitem", { "data-storybook-args": true, value: "london" }, "London"), h("nv-fielddropdownitem", { value: "tokyo" }, "Tokyo"))),
19
+ },
20
+ // disabled
21
+ {
22
+ name: nameof(x => x.disabled),
23
+ description: 'Disabled dropdown item that cannot be selected',
24
+ args: {
25
+ disabled: true,
26
+ },
27
+ template: (h("nv-fielddropdown", { label: "Select an option" }, h("nv-fielddropdownitem", { value: "item1" }, "Item 1"), h("nv-fielddropdownitem", { "data-storybook-args": true, value: "item2", disabled: true }, "Item 2 (Disabled)"), h("nv-fielddropdownitem", { value: "item3" }, "Item 3"))),
28
+ },
29
+ // detached
30
+ {
31
+ name: nameof(x => x.detached),
32
+ description: 'Detached dropdown item that remains visible when filtering',
33
+ args: {
34
+ detached: true,
35
+ },
36
+ template: (h("nv-fielddropdown", { label: "Search items", filterable: true }, h("nv-fielddropdownitem", { "data-storybook-args": true, value: "all", detached: true }, "All Items"), h("nv-fielddropdownitem", { value: "item1" }, "Item 1"), h("nv-fielddropdownitem", { value: "item2" }, "Item 2"), h("nv-fielddropdownitem", { value: "item3" }, "Item 3"))),
37
+ },
38
+ // WithIcon
39
+ {
40
+ name: 'WithIcon',
41
+ description: 'Dropdown item with leading icon',
42
+ template: (h("nv-fielddropdown", { label: "Select with icons" }, h("nv-fielddropdownitem", { value: "home" }, h("nv-icon", { slot: "leading-icon", name: "home" }), "Home"), h("nv-fielddropdownitem", { value: "user" }, h("nv-icon", { slot: "leading-icon", name: "user" }), "Profile"), h("nv-fielddropdownitem", { value: "settings" }, h("nv-icon", { slot: "leading-icon", name: "settings" }), "Settings"))),
43
+ },
44
+ // WithAvatar
45
+ {
46
+ name: 'WithAvatar',
47
+ description: 'Dropdown item with avatar',
48
+ template: (h("nv-fielddropdown", { label: "Select user" }, h("nv-fielddropdownitem", { value: "user1" }, h("nv-avatar", { slot: "leading-icon", initials: "JD", size: "xs" }), "John Doe"), h("nv-fielddropdownitem", { value: "user2" }, h("nv-avatar", { slot: "leading-icon", initials: "JS", size: "xs" }), "Jane Smith"))),
49
+ },
50
+ // WithBadge
51
+ {
52
+ name: 'WithBadge',
53
+ description: 'Dropdown item with trailing badge',
54
+ template: (h("nv-fielddropdown", { label: "Select status" }, h("nv-fielddropdownitem", { value: "active" }, "Active", h("nv-badge", { slot: "trailing-icon", color: "success", label: "New" })), h("nv-fielddropdownitem", { value: "pending" }, "Pending", h("nv-badge", { slot: "trailing-icon", color: "warning", label: "3" })), h("nv-fielddropdownitem", { value: "inactive" }, "Inactive"))),
55
+ },
56
+ ],
4
57
  };
5
58
  export default NvFielddropdownitemDocs;
@@ -53,7 +53,7 @@ export class NvFielddropdownitem {
53
53
  /****************************************************************************/
54
54
  //#region RENDER
55
55
  render() {
56
- return (h(Host, { key: '6d50463d72a8e2dde08ba3d7bc6f3ba21021163e', role: "menuitem", tabindex: '-1', onClick: this.handleSelected }, h("slot", { key: 'b38c59fc95f124c3395ff1ab0b7dfc4ecc27823b' }, h("div", { key: 'a5ba5d4b636847e5ce6c1bab6cbbce418b70a1af', class: "text-wrapper" }, h("span", { key: 'f01a0aa5ee475a9640c7abefe321f605ea5e7cdf', "data-scope": "text" }, this.label))), this.selected && (h("nv-icon", { key: '9cd1b5532a4d2f5c2546e9432262f483bd5c8d69', name: "check", "aria-hidden": "true", "data-scope": "selected" }))));
56
+ return (h(Host, { key: '40733c82ff3f46a260e536b8a5cfe95a06a5ef4c', role: "menuitem", tabindex: '-1', onClick: this.handleSelected }, h("slot", { key: 'a0fcbde0a3d70e8493d9c38428ea14d36d71fb84' }, h("div", { key: 'a88818483f7fe88d5e7d562bccf9c247c8189442', class: "text-wrapper" }, h("span", { key: '80cbccdb3cf0d86c22130a399f6cf70c7bc8c32b', "data-scope": "text" }, this.label))), this.selected && (h("nv-icon", { key: 'b89ab45c47eb08b37c29f93c78036121a33ab041', name: "check", "aria-hidden": "true", "data-scope": "selected" }))));
57
57
  }
58
58
  static get is() { return "nv-fielddropdownitem"; }
59
59
  static get originalStyleUrls() {
@@ -8,6 +8,6 @@ nv-fielddropdownitemcheck {
8
8
  padding: var(--list-dropdown-item-padding-y) var(--list-dropdown-item-padding-x);
9
9
  border-radius: var(--list-dropdown-item-radius);
10
10
  }
11
- nv-fielddropdownitemcheck:hover {
11
+ nv-fielddropdownitemcheck:hover, nv-fielddropdownitemcheck[data-state=highlighted] {
12
12
  background-color: var(--components-list-dropdown-item-background-hover);
13
13
  }
@@ -1,5 +1,46 @@
1
+ import { h } from "@stencil/core";
2
+ import { nameof } from "../../utils/class.utils";
1
3
  const NvFielddropdownitemcheckDocs = {
2
4
  component: 'nv-fielddropdownitemcheck',
3
- skip: true,
5
+ parentGroup: 'Fields/NvFielddropdown',
6
+ subcomponents: ['nv-fielddropdown', 'nv-icon'],
7
+ stories: [
8
+ // Default
9
+ {
10
+ name: 'Default',
11
+ description: 'Checkbox dropdown item for multi-select',
12
+ template: (h("nv-fielddropdown", { label: "Select multiple options" }, h("nv-fielddropdownitemcheck", { "data-storybook-args": true, value: "option1" }, "Option 1"), h("nv-fielddropdownitemcheck", { value: "option2" }, "Option 2"), h("nv-fielddropdownitemcheck", { value: "option3" }, "Option 3"))),
13
+ },
14
+ // value
15
+ {
16
+ name: nameof(x => x.value),
17
+ description: 'Checkbox item with specific value',
18
+ template: (h("nv-fielddropdown", { label: "Select features" }, h("nv-fielddropdownitemcheck", { value: "feature1" }, "Feature 1"), h("nv-fielddropdownitemcheck", { "data-storybook-args": true, value: "feature2" }, "Feature 2"), h("nv-fielddropdownitemcheck", { value: "feature3" }, "Feature 3"))),
19
+ },
20
+ // disabled
21
+ {
22
+ name: nameof(x => x.disabled),
23
+ description: 'Disabled checkbox item',
24
+ args: {
25
+ disabled: true,
26
+ },
27
+ template: (h("nv-fielddropdown", { label: "Select options" }, h("nv-fielddropdownitemcheck", { value: "option1" }, "Option 1"), h("nv-fielddropdownitemcheck", { "data-storybook-args": true, value: "option2", disabled: true }, "Option 2 (Disabled)"), h("nv-fielddropdownitemcheck", { value: "option3" }, "Option 3"))),
28
+ },
29
+ // checked
30
+ {
31
+ name: nameof(x => x.checked),
32
+ description: 'Pre-checked checkbox item',
33
+ args: {
34
+ checked: true,
35
+ },
36
+ template: (h("nv-fielddropdown", { label: "Select options" }, h("nv-fielddropdownitemcheck", { "data-storybook-args": true, value: "option1", checked: true }, "Option 1 (Pre-selected)"), h("nv-fielddropdownitemcheck", { value: "option2" }, "Option 2"), h("nv-fielddropdownitemcheck", { value: "option3" }, "Option 3"))),
37
+ },
38
+ // WithIcon
39
+ {
40
+ name: 'WithIcon',
41
+ description: 'Checkbox item with icon',
42
+ template: (h("nv-fielddropdown", { label: "Select with icons" }, h("nv-fielddropdownitemcheck", { value: "email" }, h("nv-icon", { slot: "leading-icon", name: "mail" }), "Email"), h("nv-fielddropdownitemcheck", { value: "sms" }, h("nv-icon", { slot: "leading-icon", name: "message" }), "SMS"), h("nv-fielddropdownitemcheck", { value: "push" }, h("nv-icon", { slot: "leading-icon", name: "bell" }), "Push Notification"))),
43
+ },
44
+ ],
4
45
  };
5
46
  export default NvFielddropdownitemcheckDocs;
@@ -52,7 +52,7 @@ export class NvFielddropdownitemcheck {
52
52
  /****************************************************************************/
53
53
  //#region RENDER
54
54
  render() {
55
- return (h(Host, { key: '6c5bc9f6060ac711a1360dd45da58dddf7d7d563', onClick: this.handleClick }, h("nv-fieldcheckbox", { key: 'f3efe64e5f03411f1fe7433821a46c50cd18e10e', checked: this.checked, name: this.label || this.value, label: this.label || this.value, labelPlacement: "after", description: this.description, disabled: this.disabled, tabindex: "-1", onCheckedChanged: this.onFieldcheckboxChanged }, h("slot", { key: 'e603490efb497f0ef62049e7b44c34d91c8989d2' }), h("slot", { key: '6774a2ab5bf182297929afbcec8c489bf620bcab', name: "main" }), h("slot", { key: '5ca19cd56a5917ed125eb20c6713e25dc512fb45', name: "label" }), h("slot", { key: '847864bfbc3302bb07088f77d9c2d200fac8b505', name: "description" }))));
55
+ return (h(Host, { key: '52f3eeee8d22ab9b45723403c58edc3f16905a07', onClick: this.handleClick }, h("nv-fieldcheckbox", { key: 'b06def71aa859fca784140d5c961ffa6cd8cdccc', checked: this.checked, name: this.label || this.value, label: this.label || this.value, labelPlacement: "after", description: this.description, disabled: this.disabled, tabindex: "-1", onCheckedChanged: this.onFieldcheckboxChanged }, h("slot", { key: 'cc53d2732969cb2812d08f978b3d7eeb5cdaa02a' }), h("slot", { key: '67336141a3dcfdab0bdc749e1937797222eaaded', name: "main" }), h("slot", { key: '165a860ee2dbd1783d4bf391c3a07da6756d7013', name: "label" }), h("slot", { key: '27c6e04f85b608a267ef2b280326d125c22dd970', name: "description" }))));
56
56
  }
57
57
  static get is() { return "nv-fielddropdownitemcheck"; }
58
58
  static get originalStyleUrls() {
@@ -2,6 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { nameof } from "../../utils/class.utils";
3
3
  const NvFieldmultiselectDocs = {
4
4
  component: 'nv-fieldmultiselect',
5
+ parentGroup: 'Fields',
5
6
  subcomponents: [
6
7
  'nv-fielddropdownitemcheck',
7
8
  'nv-badge',
@@ -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,6 +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',
5
6
  subcomponents: ['nv-button', 'nv-badge'],
6
7
  stories: [
7
8
  // Default