@nvidia-elements/core 2.18.4 → 2.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/_virtual/_rolldown/runtime.js +17 -0
  3. package/dist/accordion/accordion2.js +60 -57
  4. package/dist/accordion/accordion2.js.map +1 -1
  5. package/dist/alert/alert-group2.js +1 -1
  6. package/dist/alert/alert2.js +37 -31
  7. package/dist/alert/alert2.js.map +1 -1
  8. package/dist/avatar/avatar-group2.js +1 -1
  9. package/dist/avatar/avatar2.js +1 -1
  10. package/dist/badge/badge.d.ts +0 -6
  11. package/dist/badge/badge2.js +31 -36
  12. package/dist/badge/badge2.js.map +1 -1
  13. package/dist/breadcrumb/breadcrumb2.js +1 -1
  14. package/dist/bundles/index.d.ts +31 -27
  15. package/dist/bundles/index.js +8 -8
  16. package/dist/button/button2.js +1 -1
  17. package/dist/button-group/button-group2.js +1 -1
  18. package/dist/card/card2.js +4 -4
  19. package/dist/chat-message/chat-message2.js +1 -1
  20. package/dist/checkbox/checkbox-group2.js +1 -1
  21. package/dist/checkbox/checkbox2.js +1 -1
  22. package/dist/color/color.d.ts +2 -0
  23. package/dist/color/color2.js +7 -4
  24. package/dist/color/color2.js.map +1 -1
  25. package/dist/combobox/combobox.d.ts +2 -0
  26. package/dist/combobox/combobox2.js +14 -6
  27. package/dist/combobox/combobox2.js.map +1 -1
  28. package/dist/copy-button/copy-button2.js +26 -23
  29. package/dist/copy-button/copy-button2.js.map +1 -1
  30. package/dist/custom-elements-jsx.d.ts +6 -4
  31. package/dist/custom-elements-vue.d.ts +6 -4
  32. package/dist/custom-elements.json +90 -174
  33. package/dist/data.html.json +10 -10
  34. package/dist/data.snippets.json +60 -60
  35. package/dist/date/date.d.ts +2 -0
  36. package/dist/date/date2.js +7 -4
  37. package/dist/date/date2.js.map +1 -1
  38. package/dist/datetime/datetime.d.ts +2 -0
  39. package/dist/datetime/datetime2.js +7 -4
  40. package/dist/datetime/datetime2.js.map +1 -1
  41. package/dist/dialog/dialog-footer2.js +1 -1
  42. package/dist/dialog/dialog-header2.js +1 -1
  43. package/dist/dialog/dialog2.js +27 -27
  44. package/dist/dialog/dialog2.js.map +1 -1
  45. package/dist/divider/divider2.js +1 -1
  46. package/dist/dot/dot2.js +1 -1
  47. package/dist/drag-handle/drag-handle2.js +1 -1
  48. package/dist/drawer/drawer-content2.js +1 -1
  49. package/dist/drawer/drawer-footer2.js +1 -1
  50. package/dist/drawer/drawer-header2.js +1 -1
  51. package/dist/drawer/drawer2.js +27 -27
  52. package/dist/drawer/drawer2.js.map +1 -1
  53. package/dist/dropdown/dropdown-footer2.js +1 -1
  54. package/dist/dropdown/dropdown-header2.js +1 -1
  55. package/dist/dropdown/dropdown2.js +23 -23
  56. package/dist/dropdown/dropdown2.js.map +1 -1
  57. package/dist/dropdown-group/dropdown-group.js +1 -1
  58. package/dist/dropzone/dropzone2.js +28 -22
  59. package/dist/dropzone/dropzone2.js.map +1 -1
  60. package/dist/file/file2.js +1 -1
  61. package/dist/format-bytes/format-bytes2.js +1 -1
  62. package/dist/format-datetime/format-datetime2.js +1 -1
  63. package/dist/format-number/format-number2.js +1 -1
  64. package/dist/format-relative-time/format-relative-time2.js +1 -1
  65. package/dist/format-truncate/format-truncate2.js +1 -1
  66. package/dist/forms/control/control.d.ts +3 -0
  67. package/dist/forms/control/control2.js +34 -31
  68. package/dist/forms/control/control2.js.map +1 -1
  69. package/dist/forms/control-group/control-group2.js +1 -1
  70. package/dist/forms/control-message/control-message2.js +1 -1
  71. package/dist/gauge/gauge2.js +26 -21
  72. package/dist/gauge/gauge2.js.map +1 -1
  73. package/dist/grid/cell/cell2.js +1 -1
  74. package/dist/grid/column/column2.js +1 -1
  75. package/dist/grid/footer/footer2.js +1 -1
  76. package/dist/grid/grid2.js +1 -1
  77. package/dist/grid/header/header2.js +1 -1
  78. package/dist/grid/placeholder/placeholder2.js +1 -1
  79. package/dist/grid/row/row2.js +1 -1
  80. package/dist/icon/icon2.js +2 -2
  81. package/dist/icon-button/icon-button2.js +1 -1
  82. package/dist/iframe/iframe2.js +1 -1
  83. package/dist/index.js +5 -6
  84. package/dist/input/input-group2.js +1 -1
  85. package/dist/input/input2.js +1 -1
  86. package/dist/internal/index.d.ts +1 -2
  87. package/dist/internal/index.js +150 -33
  88. package/dist/internal/index.js.map +1 -0
  89. package/dist/internal/types/index.d.ts +1 -1
  90. package/dist/internal/types/index.js.map +1 -1
  91. package/dist/logo/logo2.js +1 -1
  92. package/dist/menu/menu-group2.js +1 -1
  93. package/dist/menu/menu-item2.js +1 -1
  94. package/dist/menu/menu2.js +1 -1
  95. package/dist/month/month.d.ts +2 -0
  96. package/dist/month/month2.js +7 -4
  97. package/dist/month/month2.js.map +1 -1
  98. package/dist/notification/notification-group2.js +1 -1
  99. package/dist/notification/notification2.js +38 -32
  100. package/dist/notification/notification2.js.map +1 -1
  101. package/dist/page/page-panel/page-panel-content2.js +1 -1
  102. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  103. package/dist/page/page-panel/page-panel-header2.js +1 -1
  104. package/dist/page/page-panel/page-panel.d.ts +0 -7
  105. package/dist/page/page-panel/page-panel2.js +18 -20
  106. package/dist/page/page-panel/page-panel2.js.map +1 -1
  107. package/dist/page/page2.js +1 -1
  108. package/dist/page-header/page-header2.js +1 -1
  109. package/dist/page-loader/page-loader2.js +1 -1
  110. package/dist/pagination/pagination2.js +45 -38
  111. package/dist/pagination/pagination2.js.map +1 -1
  112. package/dist/panel/panel2.js +43 -38
  113. package/dist/panel/panel2.js.map +1 -1
  114. package/dist/password/password.d.ts +2 -0
  115. package/dist/password/password2.js +10 -4
  116. package/dist/password/password2.js.map +1 -1
  117. package/dist/preferences-input/preferences-input2.js +32 -27
  118. package/dist/preferences-input/preferences-input2.js.map +1 -1
  119. package/dist/progress-bar/progress-bar2.js +1 -1
  120. package/dist/progress-dot/progress-dot2.js +17 -17
  121. package/dist/progress-dot/progress-dot2.js.map +1 -1
  122. package/dist/progress-ring/progress-ring2.js +27 -22
  123. package/dist/progress-ring/progress-ring2.js.map +1 -1
  124. package/dist/progressive-filter-chip/progressive-filter-chip2.js +30 -30
  125. package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
  126. package/dist/pulse/pulse2.js +1 -1
  127. package/dist/radio/radio-group2.js +1 -1
  128. package/dist/radio/radio2.js +1 -1
  129. package/dist/range/range2.js +1 -1
  130. package/dist/resize-handle/resize-handle2.js +17 -17
  131. package/dist/resize-handle/resize-handle2.js.map +1 -1
  132. package/dist/search/search2.js +1 -1
  133. package/dist/select/select2.js +44 -41
  134. package/dist/select/select2.js.map +1 -1
  135. package/dist/skeleton/skeleton2.js +1 -1
  136. package/dist/sort-button/sort-button2.js +20 -20
  137. package/dist/sort-button/sort-button2.js.map +1 -1
  138. package/dist/sparkline/sparkline2.js +1 -1
  139. package/dist/star-rating/star-rating2.js +1 -1
  140. package/dist/steps/steps2.js +2 -2
  141. package/dist/switch/switch-group2.js +1 -1
  142. package/dist/switch/switch2.js +1 -1
  143. package/dist/tabs/tabs-group2.js +1 -1
  144. package/dist/tabs/tabs-item-group2.js +1 -1
  145. package/dist/tabs/tabs2.js +2 -2
  146. package/dist/tag/tag2.js +19 -19
  147. package/dist/tag/tag2.js.map +1 -1
  148. package/dist/textarea/textarea2.js +1 -1
  149. package/dist/time/time.d.ts +2 -0
  150. package/dist/time/time2.js +7 -4
  151. package/dist/time/time2.js.map +1 -1
  152. package/dist/toast/toast2.js +35 -29
  153. package/dist/toast/toast2.js.map +1 -1
  154. package/dist/toggletip/toggletip-footer2.js +1 -1
  155. package/dist/toggletip/toggletip-header2.js +1 -1
  156. package/dist/toggletip/toggletip2.js +25 -25
  157. package/dist/toggletip/toggletip2.js.map +1 -1
  158. package/dist/toolbar/toolbar2.js +1 -1
  159. package/dist/tooltip/tooltip2.js +1 -1
  160. package/dist/tree/tree-node.d.ts +6 -0
  161. package/dist/tree/tree-node2.js +43 -30
  162. package/dist/tree/tree-node2.js.map +1 -1
  163. package/dist/tree/tree.examples.js.map +1 -1
  164. package/dist/tree/tree.examples.json +9 -0
  165. package/dist/tree/tree2.js +1 -1
  166. package/dist/week/week.d.ts +2 -0
  167. package/dist/week/week2.js +7 -4
  168. package/dist/week/week2.js.map +1 -1
  169. package/package.json +4 -4
  170. package/dist/internal/controllers/i18n.controller.d.ts +0 -19
  171. package/dist/internal/controllers/i18n.controller.examples.js +0 -6
  172. package/dist/internal/controllers/i18n.controller.examples.js.map +0 -1
  173. package/dist/internal/controllers/i18n.controller.examples.json +0 -16
  174. package/dist/internal/controllers/i18n.controller.js +0 -38
  175. package/dist/internal/controllers/i18n.controller.js.map +0 -1
  176. package/dist/internal/services/i18n.service.d.ts +0 -64
  177. package/dist/internal/services/i18n.service.js +0 -73
  178. package/dist/internal/services/i18n.service.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown2.js","names":[],"sources":["../../src/dropdown/dropdown.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport type { PopoverAlign, PopoverPosition, PopoverType } from '@nvidia-elements/core/internal';\nimport {\n audit,\n excessiveInstanceLimit,\n I18nController,\n popoverStyles,\n scopedRegistry,\n TypeNativePopoverController,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport styles from './dropdown.css?inline';\n\n/**\n * @element nve-dropdown\n * @description Generic dropdown element for rendering a variety of different content such as interactive navigation or form controls.\n * @documentation https://nvidia.github.io/elements/docs/elements/dropdown/\n * @since 0.6.0\n * @entrypoint \\@nvidia-elements/core/dropdown\n * @event beforetoggle - Dispatched on a popover just before showing or hiding.\n * @event toggle - Dispatched on a popover element just after showing or hiding.\n * @event open - Dispatched when the dropdown opens.\n * @event close - Dispatched when the dropdown closes.\n * @slot - default slot for dropdown content\n * @cssprop --border\n * @cssprop --border-radius\n * @cssprop --background\n * @cssprop --color\n * @cssprop --padding\n * @cssprop --box-shadow\n * @cssprop --width\n * @cssprop --min-width\n * @cssprop --gap\n * @cssprop --arrow-transform - Transform applied to the popover arrow\n * @cssprop --animation-duration - Duration of dropdown open/close animations\n * @csspart icon-button - The close icon button element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/menubar/\n */\n@audit({ excessiveInstanceLimit })\n@scopedRegistry()\nexport class Dropdown extends LitElement {\n static styles = useStyles([popoverStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-dropdown',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n /**\n * (optional) By default the popover will automatically anchor itself relative to the trigger element.\n * Pass an optional custom anchor element as an idref string within the same render root or a HTMLElement DOM reference.\n */\n @property({ type: String }) anchor: string | HTMLElement;\n\n /**\n * @deprecated Use the popover API instead.\n * The trigger defines what element triggers an `open` interaction event.\n * A trigger can accept a idref string within the same render root or a HTMLElement DOM reference.\n */\n @property({ type: String }) trigger: string | HTMLElement;\n\n /**\n * Sets the side position of the popover relative to the provided anchor element.\n */\n @property({ type: String, reflect: true }) position: PopoverPosition = 'bottom';\n\n /**\n * Sets the alignment of the popover relative to the provided anchor element.\n * If an arrow exists the alginment will be relative to the arrow against the anchor.\n */\n @property({ type: String, reflect: true }) alignment: PopoverAlign = 'start';\n\n /**\n * @deprecated Use the popover API instead.\n * Determines if popover visibility behavior should be automatically controlled by the trigger.\n */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-trigger' }) behaviorTrigger: boolean;\n\n /**\n * Determines if a close button should render within dropdown. Non-closable\n * dropdowns suit menu or selection patterns.\n */\n @property({ type: Boolean }) closable = false;\n\n /**\n * Determines if an arrow renders.\n */\n @property({ type: Boolean }) arrow = false;\n\n /** @private */\n @property({ type: Boolean, reflect: true }) modal = true;\n\n /** @private */\n @property({ type: String, attribute: 'popover-type' }) popoverType: PopoverType = 'auto';\n\n /** @private */\n @query('.arrow') popoverArrow: HTMLElement;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n protected typeNativePopoverController = new TypeNativePopoverController<Dropdown>(this);\n\n /** @private */\n get popoverDismissible() {\n return this.modal;\n }\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"header\"></slot>\n ${this.closable ? html`<nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @click=${this.hidePopover} icon-name=\"cancel\" container=\"flat\" size=\"sm\" .ariaLabel=${this.i18n.close}></nve-icon-button>` : ''}\n <slot></slot>\n <slot name=\"footer\"></slot>\n ${this.arrow ? html`<div class=\"arrow\"></div>` : ''}\n </div>\n `;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA8CO,IAAM,IAAN,cAAuB,EAAW;;EA0EJ,aA9CoC,KAAA,WAAA,UAMF,KAAA,YAAA,SAY7B,KAAA,WAAA,IAKH,KAAA,QAAA,IAGe,KAAA,QAAA,IAG8B,KAAA,cAAA,QAK1C,KAAA,KAAA,IAAI,EAAqB,IAAI,GAE7B,KAAA,8BAAA,IAAI,EAAsC,IAAI,GAUnD,KAAA,OAAA,KAAK,GAAgB;;;EAzExC,KAAA,SAAA,EAAU,CAAC,GAAe,CAAM,CAAC;;;EAEtB,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAoDA;CAKA,IAAI,qBAAqB;EACvB,OAAO,KAAK;CACd;CAOA,SAAS;EACP,OAAO,CAAI,iDAGP,KAAK,WAAW,CAAI,mFAAkF,KAAK,YAAY,8DAA4D,KAAK,KAAK,MAAM,wBAAuB,GAAG,0CAG7N,KAAK,QAAQ,CAAI,8BAA8B,GAAG;CAGxD;AACF;AAvEG,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GAOzB,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA,GAKzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAMxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAMxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;AAAmB,CAAC,CAAA,GAAA,EAAA,WAAA,mBAAA,KAAA,CAAA,GAMxE,EAAA,CAAA,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAK1B,EAAA,CAAA,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GAG1B,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GAGzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,WAAW;AAAe,CAAC,CAAA,GAAA,EAAA,WAAA,eAAA,KAAA,CAAA,GAGpD,EAAA,CAAA,EAAM,QAAQ,CAAA,GAAA,EAAA,WAAA,gBAAA,KAAA,CAAA,GAcd,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,GA5E3B,IAAA,EAAA,CAAA,EAAM,EAAE,wBAAA,GAAuB,CAAC,GAChC,EAAe,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"dropdown2.js","names":[],"sources":["../../src/dropdown/dropdown.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { IconButton } from '@nvidia-elements/core/icon-button';\nimport type { PopoverAlign, PopoverPosition, PopoverType } from '@nvidia-elements/core/internal';\nimport {\n audit,\n excessiveInstanceLimit,\n popoverStyles,\n scopedRegistry,\n TypeNativePopoverController,\n useStyles\n} from '@nvidia-elements/core/internal';\nimport { I18nController, type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport styles from './dropdown.css?inline';\n\nconst i18nDefaults = {\n close: 'close'\n} satisfies I18nDefaults;\n\n/**\n * @element nve-dropdown\n * @description Generic dropdown element for rendering a variety of different content such as interactive navigation or form controls.\n * @documentation https://nvidia.github.io/elements/docs/elements/dropdown/\n * @since 0.6.0\n * @entrypoint \\@nvidia-elements/core/dropdown\n * @event beforetoggle - Dispatched on a popover just before showing or hiding.\n * @event toggle - Dispatched on a popover element just after showing or hiding.\n * @event open - Dispatched when the dropdown opens.\n * @event close - Dispatched when the dropdown closes.\n * @slot - default slot for dropdown content\n * @cssprop --border\n * @cssprop --border-radius\n * @cssprop --background\n * @cssprop --color\n * @cssprop --padding\n * @cssprop --box-shadow\n * @cssprop --width\n * @cssprop --min-width\n * @cssprop --gap\n * @cssprop --arrow-transform - Transform applied to the popover arrow\n * @cssprop --animation-duration - Duration of dropdown open/close animations\n * @csspart icon-button - The close icon button element\n * @aria https://www.w3.org/WAI/ARIA/apg/patterns/menubar/\n */\n@audit({ excessiveInstanceLimit })\n@scopedRegistry()\nexport class Dropdown extends LitElement {\n static styles = useStyles([popoverStyles, styles]);\n\n static readonly metadata = {\n tag: 'nve-dropdown',\n version: '0.0.0'\n };\n\n static elementDefinitions = {\n [IconButton.metadata.tag]: IconButton\n };\n\n /**\n * (optional) By default the popover will automatically anchor itself relative to the trigger element.\n * Pass an optional custom anchor element as an idref string within the same render root or a HTMLElement DOM reference.\n */\n @property({ type: String }) anchor: string | HTMLElement;\n\n /**\n * @deprecated Use the popover API instead.\n * The trigger defines what element triggers an `open` interaction event.\n * A trigger can accept a idref string within the same render root or a HTMLElement DOM reference.\n */\n @property({ type: String }) trigger: string | HTMLElement;\n\n /**\n * Sets the side position of the popover relative to the provided anchor element.\n */\n @property({ type: String, reflect: true }) position: PopoverPosition = 'bottom';\n\n /**\n * Sets the alignment of the popover relative to the provided anchor element.\n * If an arrow exists the alginment will be relative to the arrow against the anchor.\n */\n @property({ type: String, reflect: true }) alignment: PopoverAlign = 'start';\n\n /**\n * @deprecated Use the popover API instead.\n * Determines if popover visibility behavior should be automatically controlled by the trigger.\n */\n @property({ type: Boolean, reflect: true, attribute: 'behavior-trigger' }) behaviorTrigger: boolean;\n\n /**\n * Determines if a close button should render within dropdown. Non-closable\n * dropdowns suit menu or selection patterns.\n */\n @property({ type: Boolean }) closable = false;\n\n /**\n * Determines if an arrow renders.\n */\n @property({ type: Boolean }) arrow = false;\n\n /** @private */\n @property({ type: Boolean, reflect: true }) modal = true;\n\n /** @private */\n @property({ type: String, attribute: 'popover-type' }) popoverType: PopoverType = 'auto';\n\n /** @private */\n @query('.arrow') popoverArrow: HTMLElement;\n\n #i18nController: I18nController<this> = new I18nController<this>(this, i18nDefaults);\n\n protected typeNativePopoverController = new TypeNativePopoverController<Dropdown>(this);\n\n /** @private */\n get popoverDismissible() {\n return this.modal;\n }\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n render() {\n return html`\n <div internal-host>\n <slot name=\"header\"></slot>\n ${this.closable ? html`<nve-icon-button part=\"icon-button\" exportparts=\"icon:icon-button-icon\" @click=${this.hidePopover} icon-name=\"cancel\" container=\"flat\" size=\"sm\" .ariaLabel=${this.i18n.close}></nve-icon-button>` : ''}\n <slot></slot>\n <slot name=\"footer\"></slot>\n ${this.arrow ? html`<div class=\"arrow\"></div>` : ''}\n </div>\n `;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAM,IAAe,EACnB,OAAO,QACT,GA6Ba,IAAN,cAAuB,EAAW;;EA0EJ,aA9CoC,KAAA,WAAA,UAMF,KAAA,YAAA,SAY7B,KAAA,WAAA,IAKH,KAAA,QAAA,IAGe,KAAA,QAAA,IAG8B,KAAA,cAAA,QAK1C,KAAA,KAAA,IAAI,EAAqB,MAAM,CAAY,GAE3C,KAAA,8BAAA,IAAI,EAAsC,IAAI,GAUnD,KAAA,OAAA,KAAK,GAAgB;;;EAzExC,KAAA,SAAA,EAAU,CAAC,GAAe,CAAM,CAAC;;;EAEtB,KAAA,WAAA;GACzB,KAAK;GACL,SAAS;EACX;;;EAE4B,KAAA,qBAAA,GACzB,EAAW,SAAS,MAAM,EAC7B;;CAoDA;CAKA,IAAI,qBAAqB;EACvB,OAAO,KAAK;CACd;CAOA,SAAS;EACP,OAAO,CAAI,iDAGP,KAAK,WAAW,CAAI,mFAAkF,KAAK,YAAY,8DAA4D,KAAK,KAAK,MAAM,wBAAuB,GAAG,0CAG7N,KAAK,QAAQ,CAAI,8BAA8B,GAAG;CAGxD;AACF;AAvEG,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,UAAA,KAAA,CAAA,GAOzB,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,WAAA,KAAA,CAAA,GAKzB,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAMxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,aAAA,KAAA,CAAA,GAMxC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;AAAmB,CAAC,CAAA,GAAA,EAAA,WAAA,mBAAA,KAAA,CAAA,GAMxE,EAAA,CAAA,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,EAAA,WAAA,YAAA,KAAA,CAAA,GAK1B,EAAA,CAAA,EAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GAG1B,EAAA,CAAA,EAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,EAAA,WAAA,SAAA,KAAA,CAAA,GAGzC,EAAA,CAAA,EAAS;CAAE,MAAM;CAAQ,WAAW;AAAe,CAAC,CAAA,GAAA,EAAA,WAAA,eAAA,KAAA,CAAA,GAGpD,EAAA,CAAA,EAAM,QAAQ,CAAA,GAAA,EAAA,WAAA,gBAAA,KAAA,CAAA,GAcd,EAAA,CAAA,EAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,EAAA,WAAA,QAAA,KAAA,CAAA,GA5E3B,IAAA,EAAA,CAAA,EAAM,EAAE,wBAAA,GAAuB,CAAC,GAChC,EAAe,CAAA,GAAA,CAAA"}
@@ -14,7 +14,7 @@ var d = class extends c {
14
14
  static {
15
15
  this.metadata = {
16
16
  tag: "nve-dropdown-group",
17
- version: "2.18.4",
17
+ version: "2.19.1",
18
18
  children: ["nve-dropdown"]
19
19
  };
20
20
  }
@@ -1,27 +1,33 @@
1
1
  import { formatFileSize as e } from "../internal/utils/strings.js";
2
- import { I18nController as t } from "../internal/controllers/i18n.controller.js";
3
- import { removeEmptyTextNode as n } from "../internal/utils/dom.js";
4
- import { scopedRegistry as r } from "../internal/decorators/scoped-registry.js";
5
- import { useStyles as i } from "../internal/styles/index.js";
6
- import a from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
7
- import { Icon as o } from "../icon/icon2.js";
8
- import s from "./dropzone.js";
9
- import { fileSizeValidator as c, fileTypeValidator as l, getFileTypeSpecifiers as u } from "./dropzone.util.js";
10
- import { LitElement as d, html as f } from "lit";
11
- import { property as p } from "lit/decorators/property.js";
2
+ import { removeEmptyTextNode as t } from "../internal/utils/dom.js";
3
+ import { scopedRegistry as n } from "../internal/decorators/scoped-registry.js";
4
+ import { useStyles as r } from "../internal/styles/index.js";
5
+ import i from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
6
+ import { Icon as a } from "../icon/icon2.js";
7
+ import o from "./dropzone.js";
8
+ import { fileSizeValidator as s, fileTypeValidator as c, getFileTypeSpecifiers as l } from "./dropzone.util.js";
9
+ import { LitElement as u, html as d } from "lit";
10
+ import { property as f } from "lit/decorators/property.js";
11
+ import { I18nController as p } from "@nvidia-elements/foundations/internal/i18n";
12
12
  import { FormControlMixin as m } from "@nvidia-elements/forms/mixins";
13
13
  import { query as h } from "lit/decorators/query.js";
14
14
  //#region src/dropzone/dropzone.ts
15
- var g = class extends m(d) {
15
+ var g = {
16
+ or: "or",
17
+ files: "files",
18
+ dragAndDrop: "drag & drop",
19
+ browseFiles: "browse files",
20
+ maxFileSize: "max file size"
21
+ }, _ = class extends m(u) {
16
22
  #e;
17
23
  static {
18
- this.styles = i([s]);
24
+ this.styles = r([o]);
19
25
  }
20
26
  static {
21
27
  this.metadata = {
22
28
  tag: "nve-dropzone",
23
- version: "2.18.4",
24
- validators: [l, c],
29
+ version: "2.19.1",
30
+ validators: [c, s],
25
31
  valueSchema: {
26
32
  type: "array",
27
33
  items: {
@@ -36,13 +42,13 @@ var g = class extends m(d) {
36
42
  };
37
43
  }
38
44
  static {
39
- this.elementDefinitions = { [o.metadata.tag]: o };
45
+ this.elementDefinitions = { [a.metadata.tag]: a };
40
46
  }
41
47
  formResetCallback() {
42
48
  this.value = [], this.requestUpdate();
43
49
  }
44
50
  constructor() {
45
- super(), this.accept = "image/gif, image/jpeg, image/png, image/svg+xml", this.maxFileSize = 2 * 1024 ** 2, this.#e = new t(this), this.i18n = this.#e.i18n, this.value = [];
51
+ super(), this.accept = "image/gif, image/jpeg, image/png, image/svg+xml", this.maxFileSize = 2 * 1024 ** 2, this.#e = new p(this, g), this.i18n = this.#e.i18n, this.value = [];
46
52
  }
47
53
  connectedCallback() {
48
54
  super.connectedCallback(), this.setAttribute("nve-control", ""), globalThis.document.addEventListener("dragover", this.#t), globalThis.document.addEventListener("drop", this.#t);
@@ -79,7 +85,7 @@ var g = class extends m(d) {
79
85
  this.value = [...this.value ?? [], ...e], this.dispatchChangeEvent();
80
86
  }
81
87
  #l(e) {
82
- let t = u(e);
88
+ let t = l(e);
83
89
  if (t.length === 1) return t[0].toUpperCase();
84
90
  let n = t.pop();
85
91
  return `${t.join(", ").toUpperCase()} or ${n.toUpperCase()}`;
@@ -88,17 +94,17 @@ var g = class extends m(d) {
88
94
  this.toggleAttribute("highlighted", e);
89
95
  }
90
96
  #d(e) {
91
- e.target.assignedNodes().forEach((e) => n(e));
97
+ e.target.assignedNodes().forEach((e) => t(e));
92
98
  }
93
99
  render() {
94
- return f`<div internal-host><div class="container" @click="${this.#n}" @dragenter="${this.#r}" @dragover="${this.#i}" @dragleave="${this.#a}" @drop="${this.#o}"><svg class="dropzone-border" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="none" rx="4" ry="4" stroke="currentColor" stroke-width="2" stroke-dasharray="6,6" stroke-dashoffset="0" stroke-linecap="square"/></svg><slot name="icon"><nve-icon part="icon" class="icon" name="upload"></nve-icon></slot><slot @slotchange="${this.#d}"><div class="dropzone-text-center"><div class="dropzone-text-bold">${this.i18n.dragAndDrop} ${this.i18n.files} ${this.i18n.or} <span class="text-emphasized">${this.i18n.browseFiles}</span></div><div class="text-muted">${this.#l(this.accept)} — ${this.i18n.maxFileSize} ${e(this.maxFileSize)}</div></div></slot><input id="dropzone-input" type="file" accept="${this.accept}" @change="${this.#s}" multiple="multiple" hidden></div></div>`;
100
+ return d`<div internal-host><div class="container" @click="${this.#n}" @dragenter="${this.#r}" @dragover="${this.#i}" @dragleave="${this.#a}" @drop="${this.#o}"><svg class="dropzone-border" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="none" rx="4" ry="4" stroke="currentColor" stroke-width="2" stroke-dasharray="6,6" stroke-dashoffset="0" stroke-linecap="square"/></svg><slot name="icon"><nve-icon part="icon" class="icon" name="upload"></nve-icon></slot><slot @slotchange="${this.#d}"><div class="dropzone-text-center"><div class="dropzone-text-bold">${this.i18n.dragAndDrop} ${this.i18n.files} ${this.i18n.or} <span class="text-emphasized">${this.i18n.browseFiles}</span></div><div class="text-muted">${this.#l(this.accept)} — ${this.i18n.maxFileSize} ${e(this.maxFileSize)}</div></div></slot><input id="dropzone-input" type="file" accept="${this.accept}" @change="${this.#s}" multiple="multiple" hidden></div></div>`;
95
101
  }
96
102
  };
97
- a([p()], g.prototype, "accept", void 0), a([p({
103
+ i([f()], _.prototype, "accept", void 0), i([f({
98
104
  attribute: "max-file-size",
99
105
  type: Number
100
- })], g.prototype, "maxFileSize", void 0), a([p({ type: Object })], g.prototype, "i18n", void 0), a([h("#dropzone-input")], g.prototype, "fileInput", void 0), g = a([r()], g);
106
+ })], _.prototype, "maxFileSize", void 0), i([f({ type: Object })], _.prototype, "i18n", void 0), i([h("#dropzone-input")], _.prototype, "fileInput", void 0), _ = i([n()], _);
101
107
  //#endregion
102
- export { g as Dropzone };
108
+ export { _ as Dropzone };
103
109
 
104
110
  //# sourceMappingURL=dropzone2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropzone2.js","names":[],"sources":["../../src/dropzone/dropzone.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport {\n formatFileSize,\n useStyles,\n removeEmptyTextNode,\n I18nController,\n scopedRegistry\n} from '@nvidia-elements/core/internal';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './dropzone.css?inline';\nimport { FormControlMixin } from '@nvidia-elements/forms/mixins';\nimport { fileTypeValidator, fileSizeValidator, getFileTypeSpecifiers } from './dropzone.util';\n\n/* eslint-disable jsdoc/no-types */\n// Explicit JSDoc type because the CEM analyzer loses the inherited generic specialization.\n\n/**\n * @element nve-dropzone\n * @description A dropzone form control that enables users to drag and drop files onto it.\n * @documentation https://nvidia.github.io/elements/docs/elements/dropzone/\n * @since 1.29.0\n * @entrypoint \\@nvidia-elements/core/dropzone\n * @property {File[]} value - Files selected or dropped by the user. Assign files through the JavaScript property; the HTML `value` attribute is not supported.\n * @event change - Dispatched when the value has changed (files located in event.target)\n * @slot - Custom messaging that replaces the default upload instructions.\n * @cssprop --background\n * @cssprop --border-color\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --min-height\n * @cssprop --color\n * @slot icon - Custom icon that replaces the default upload icon.\n * @csspart icon - The upload icon element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file\n */\n@scopedRegistry()\nexport class Dropzone extends FormControlMixin<typeof LitElement, File[]>(LitElement) {\n /** Comma-separated file extensions or MIME types accepted by the dropzone. */\n @property()\n accept: string = `image/gif, image/jpeg, image/png, image/svg+xml`;\n\n /** File size limit in bytes. */\n @property({ attribute: 'max-file-size', type: Number })\n maxFileSize: number = 2 * 1024 ** 2;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n @query('#dropzone-input')\n private fileInput: HTMLInputElement;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-dropzone',\n version: '0.0.0',\n validators: [fileTypeValidator, fileSizeValidator],\n valueSchema: {\n type: 'array' as const,\n items: {\n type: 'object' as const,\n properties: {\n name: { type: 'string' as const },\n size: { type: 'number' as const },\n type: { type: 'string' as const }\n }\n }\n }\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n /** @protected */\n formResetCallback() {\n this.value = [];\n this.requestUpdate();\n }\n\n constructor() {\n super();\n this.value = [];\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('nve-control', '');\n globalThis.document.addEventListener('dragover', this.#preventDefaults);\n globalThis.document.addEventListener('drop', this.#preventDefaults);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n globalThis.document.removeEventListener('dragover', this.#preventDefaults);\n globalThis.document.removeEventListener('drop', this.#preventDefaults);\n }\n\n #preventDefaults(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n #handleClick() {\n this.fileInput.click();\n }\n\n #handleDragEnter(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(true);\n }\n\n #handleDragOver(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(true);\n }\n\n #handleDragLeave(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(false);\n }\n\n #handleDrop(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(false);\n\n const files = Array.from(event.dataTransfer!.files);\n this.#addFiles(files);\n }\n\n #handleFileInputChange(event: Event) {\n this.#preventDefaults(event);\n\n const files = Array.from(this.fileInput.files!);\n this.#addFiles(files);\n\n this.fileInput.value = '';\n }\n\n #addFiles(files: File[]) {\n this.value = [...(this.value ?? []), ...files];\n this.dispatchChangeEvent();\n }\n\n #formatFileTypeSpecifiers(acceptTypes: string) {\n const types = getFileTypeSpecifiers(acceptTypes);\n\n if (types.length === 1) {\n return types[0]!.toUpperCase();\n }\n\n const lastType = types.pop();\n return `${types.join(', ').toUpperCase()} or ${lastType!.toUpperCase()}`;\n }\n\n #toggleHighlighted(highlighted: boolean) {\n this.toggleAttribute('highlighted', highlighted);\n }\n\n #removeEmptyNodes(e: Event) {\n (e.target as HTMLSlotElement).assignedNodes().forEach((node: Node) => removeEmptyTextNode(node));\n }\n\n render() {\n return html`<div internal-host>\n <div class=\"container\"\n @click=${this.#handleClick} \n @dragenter=${this.#handleDragEnter}\n @dragover=${this.#handleDragOver}\n @dragleave=${this.#handleDragLeave}\n @drop=${this.#handleDrop}>\n <svg class=\"dropzone-border\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"100%\" height=\"100%\" fill=\"none\" rx=\"4\" ry=\"4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"6,6\" stroke-dashoffset=\"0\" stroke-linecap=\"square\" />\n </svg>\n <slot name=\"icon\"><nve-icon part=\"icon\" class=\"icon\" name=\"upload\"></nve-icon></slot>\n <slot @slotchange=${this.#removeEmptyNodes}>\n <div class=\"dropzone-text-center\">\n <div class=\"dropzone-text-bold\">${this.i18n.dragAndDrop} ${this.i18n.files} ${this.i18n.or} <span class=\"text-emphasized\">${this.i18n.browseFiles}</span></div>\n <div class=\"text-muted\">${this.#formatFileTypeSpecifiers(this.accept)} &mdash; ${this.i18n.maxFileSize} ${formatFileSize(this.maxFileSize)}</div>\n </div>\n </slot>\n <input id=\"dropzone-input\" type=\"file\" accept=${this.accept} @change=${this.#handleFileInputChange} multiple hidden></input>\n </div>\n </div>`;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropzone2.js","names":[],"sources":["../../src/dropzone/dropzone.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { formatFileSize, useStyles, removeEmptyTextNode, scopedRegistry } from '@nvidia-elements/core/internal';\nimport { I18nController, type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport { Icon } from '@nvidia-elements/core/icon';\nimport styles from './dropzone.css?inline';\nimport { FormControlMixin } from '@nvidia-elements/forms/mixins';\nimport { fileTypeValidator, fileSizeValidator, getFileTypeSpecifiers } from './dropzone.util';\n\nconst i18nDefaults = {\n or: 'or',\n files: 'files',\n dragAndDrop: 'drag & drop',\n browseFiles: 'browse files',\n maxFileSize: 'max file size'\n} satisfies I18nDefaults;\n\n/* eslint-disable jsdoc/no-types */\n// Explicit JSDoc type because the CEM analyzer loses the inherited generic specialization.\n\n/**\n * @element nve-dropzone\n * @description A dropzone form control that enables users to drag and drop files onto it.\n * @documentation https://nvidia.github.io/elements/docs/elements/dropzone/\n * @since 1.29.0\n * @entrypoint \\@nvidia-elements/core/dropzone\n * @property {File[]} value - Files selected or dropped by the user. Assign files through the JavaScript property; the HTML `value` attribute is not supported.\n * @event change - Dispatched when the value has changed (files located in event.target)\n * @slot - Custom messaging that replaces the default upload instructions.\n * @cssprop --background\n * @cssprop --border-color\n * @cssprop --border-radius\n * @cssprop --padding\n * @cssprop --min-height\n * @cssprop --color\n * @slot icon - Custom icon that replaces the default upload icon.\n * @csspart icon - The upload icon element\n * @aria https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file\n */\n@scopedRegistry()\nexport class Dropzone extends FormControlMixin<typeof LitElement, File[]>(LitElement) {\n /** Comma-separated file extensions or MIME types accepted by the dropzone. */\n @property()\n accept: string = `image/gif, image/jpeg, image/png, image/svg+xml`;\n\n /** File size limit in bytes. */\n @property({ attribute: 'max-file-size', type: Number })\n maxFileSize: number = 2 * 1024 ** 2;\n\n #i18nController: I18nController<this> = new I18nController<this>(this, i18nDefaults);\n\n /**\n * Enables internal string values to update for internationalization.\n */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n @query('#dropzone-input')\n private fileInput: HTMLInputElement;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-dropzone',\n version: '0.0.0',\n validators: [fileTypeValidator, fileSizeValidator],\n valueSchema: {\n type: 'array' as const,\n items: {\n type: 'object' as const,\n properties: {\n name: { type: 'string' as const },\n size: { type: 'number' as const },\n type: { type: 'string' as const }\n }\n }\n }\n };\n\n static elementDefinitions = {\n [Icon.metadata.tag]: Icon\n };\n\n /** @protected */\n formResetCallback() {\n this.value = [];\n this.requestUpdate();\n }\n\n constructor() {\n super();\n this.value = [];\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('nve-control', '');\n globalThis.document.addEventListener('dragover', this.#preventDefaults);\n globalThis.document.addEventListener('drop', this.#preventDefaults);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n globalThis.document.removeEventListener('dragover', this.#preventDefaults);\n globalThis.document.removeEventListener('drop', this.#preventDefaults);\n }\n\n #preventDefaults(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n #handleClick() {\n this.fileInput.click();\n }\n\n #handleDragEnter(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(true);\n }\n\n #handleDragOver(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(true);\n }\n\n #handleDragLeave(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(false);\n }\n\n #handleDrop(event: DragEvent) {\n this.#preventDefaults(event);\n this.#toggleHighlighted(false);\n\n const files = Array.from(event.dataTransfer!.files);\n this.#addFiles(files);\n }\n\n #handleFileInputChange(event: Event) {\n this.#preventDefaults(event);\n\n const files = Array.from(this.fileInput.files!);\n this.#addFiles(files);\n\n this.fileInput.value = '';\n }\n\n #addFiles(files: File[]) {\n this.value = [...(this.value ?? []), ...files];\n this.dispatchChangeEvent();\n }\n\n #formatFileTypeSpecifiers(acceptTypes: string) {\n const types = getFileTypeSpecifiers(acceptTypes);\n\n if (types.length === 1) {\n return types[0]!.toUpperCase();\n }\n\n const lastType = types.pop();\n return `${types.join(', ').toUpperCase()} or ${lastType!.toUpperCase()}`;\n }\n\n #toggleHighlighted(highlighted: boolean) {\n this.toggleAttribute('highlighted', highlighted);\n }\n\n #removeEmptyNodes(e: Event) {\n (e.target as HTMLSlotElement).assignedNodes().forEach((node: Node) => removeEmptyTextNode(node));\n }\n\n render() {\n return html`<div internal-host>\n <div class=\"container\"\n @click=${this.#handleClick} \n @dragenter=${this.#handleDragEnter}\n @dragover=${this.#handleDragOver}\n @dragleave=${this.#handleDragLeave}\n @drop=${this.#handleDrop}>\n <svg class=\"dropzone-border\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"100%\" height=\"100%\" fill=\"none\" rx=\"4\" ry=\"4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"6,6\" stroke-dashoffset=\"0\" stroke-linecap=\"square\" />\n </svg>\n <slot name=\"icon\"><nve-icon part=\"icon\" class=\"icon\" name=\"upload\"></nve-icon></slot>\n <slot @slotchange=${this.#removeEmptyNodes}>\n <div class=\"dropzone-text-center\">\n <div class=\"dropzone-text-bold\">${this.i18n.dragAndDrop} ${this.i18n.files} ${this.i18n.or} <span class=\"text-emphasized\">${this.i18n.browseFiles}</span></div>\n <div class=\"text-muted\">${this.#formatFileTypeSpecifiers(this.accept)} &mdash; ${this.i18n.maxFileSize} ${formatFileSize(this.maxFileSize)}</div>\n </div>\n </slot>\n <input id=\"dropzone-input\" type=\"file\" accept=${this.accept} @change=${this.#handleFileInputChange} multiple hidden></input>\n </div>\n </div>`;\n }\n}\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ var a = class extends n {
11
11
  static {
12
12
  this.metadata = {
13
13
  tag: "nve-file",
14
- version: "2.18.4"
14
+ version: "2.19.1"
15
15
  };
16
16
  }
17
17
  connectedCallback() {
@@ -94,7 +94,7 @@ var h = class extends i {
94
94
  static {
95
95
  this.metadata = {
96
96
  tag: "nve-format-bytes",
97
- version: "2.18.4"
97
+ version: "2.19.1"
98
98
  };
99
99
  }
100
100
  get #e() {
@@ -12,7 +12,7 @@ var s = class extends i {
12
12
  static {
13
13
  this.metadata = {
14
14
  tag: "nve-format-datetime",
15
- version: "2.18.4"
15
+ version: "2.19.1"
16
16
  };
17
17
  }
18
18
  get #e() {
@@ -28,7 +28,7 @@ var s = [
28
28
  static {
29
29
  this.metadata = {
30
30
  tag: "nve-format-number",
31
- version: "2.18.4"
31
+ version: "2.19.1"
32
32
  };
33
33
  }
34
34
  get #e() {
@@ -52,7 +52,7 @@ var s = {
52
52
  static {
53
53
  this.metadata = {
54
54
  tag: "nve-format-relative-time",
55
- version: "2.18.4"
55
+ version: "2.19.1"
56
56
  };
57
57
  }
58
58
  #e;
@@ -19,7 +19,7 @@ var d = class extends c {
19
19
  static {
20
20
  this.metadata = {
21
21
  tag: "nve-format-truncate",
22
- version: "2.18.4"
22
+ version: "2.19.1"
23
23
  };
24
24
  }
25
25
  #e;
@@ -1,5 +1,6 @@
1
1
  import type { TemplateResult } from 'lit';
2
2
  import { LitElement, nothing } from 'lit';
3
+ import { type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';
3
4
  /**
4
5
  * @element nve-control
5
6
  * @description Wraps a form input with its associated label and validation messages, managing layout and accessibility associations.
@@ -31,6 +32,8 @@ export declare class Control extends LitElement {
31
32
  fitText: boolean;
32
33
  /** Sets the input to match native default content block */
33
34
  fitContent: boolean;
35
+ /** Component-specific defaults supplied by a derived control. */
36
+ protected get i18nDefaults(): I18nDefaults;
34
37
  /** Enables internal string values to update for internationalization. */
35
38
  i18n: Partial<import("@nvidia-elements/core/internal").I18nStrings & {
36
39
  __set: boolean;
@@ -1,25 +1,28 @@
1
- import { I18nController as e } from "../../internal/controllers/i18n.controller.js";
2
- import { appendRootNodeStyle as t, getAttributeListChanges as n } from "../../internal/utils/dom.js";
3
- import { associateAriaDescribedBy as r, associateDataList as i, associateLabel as a, attachInternals as o } from "../../internal/utils/a11y.js";
4
- import { typeSSR as s } from "../../internal/controllers/type-ssr.controller.js";
5
- import { hostAttr as c } from "../../internal/decorators/host-attr.js";
6
- import { useStyles as l } from "../../internal/styles/index.js";
7
- import u from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
8
- import { inputQuery as d, setupControlStates as f, setupControlStatusStates as p, setupControlValidationStates as m } from "../utils/states.js";
9
- import { setupControlLayoutStates as h } from "../utils/layout.js";
10
- import g from "./control.global.js";
11
- import _ from "./control.js";
12
- import { LitElement as v, html as y, isServer as b, nothing as x } from "lit";
13
- import { property as S } from "lit/decorators/property.js";
1
+ import { appendRootNodeStyle as e, getAttributeListChanges as t } from "../../internal/utils/dom.js";
2
+ import { associateAriaDescribedBy as n, associateDataList as r, associateLabel as i, attachInternals as a } from "../../internal/utils/a11y.js";
3
+ import { typeSSR as o } from "../../internal/controllers/type-ssr.controller.js";
4
+ import { hostAttr as s } from "../../internal/decorators/host-attr.js";
5
+ import { useStyles as c } from "../../internal/styles/index.js";
6
+ import l from "../../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
7
+ import { inputQuery as u, setupControlStates as d, setupControlStatusStates as f, setupControlValidationStates as p } from "../utils/states.js";
8
+ import { setupControlLayoutStates as m } from "../utils/layout.js";
9
+ import h from "./control.global.js";
10
+ import g from "./control.js";
11
+ import { LitElement as _, html as v, isServer as y, nothing as b } from "lit";
12
+ import { property as x } from "lit/decorators/property.js";
13
+ import { I18nController as S } from "@nvidia-elements/foundations/internal/i18n";
14
14
  //#region src/forms/control/control.ts
15
- var C = class extends v {
16
- constructor(...t) {
17
- super(...t), this.fitText = !1, this.fitContent = !1, this.#e = new e(this), this.i18n = this.#e.i18n, this.nveControl = "", this.#i = [], this._associateDatalist = !0, this.#a = () => {
15
+ var C = class extends _ {
16
+ constructor(...e) {
17
+ super(...e), this.fitText = !1, this.fitContent = !1, this.#e = new S(this, this.i18nDefaults), this.i18n = this.#e.i18n, this.nveControl = "", this.#i = [], this._associateDatalist = !0, this.#a = () => {
18
18
  this.#f(), this.input && this.#i.length === 0 && this.#l();
19
19
  }, this.#u = () => {
20
20
  this.#f(), this.#p();
21
21
  };
22
22
  }
23
+ get i18nDefaults() {
24
+ return {};
25
+ }
23
26
  #e;
24
27
  get #t() {
25
28
  return this.shadowRoot?.querySelector("slot[name=\"label\"]")?.assignedElements({ flatten: !0 })?.[0];
@@ -29,33 +32,33 @@ var C = class extends v {
29
32
  }
30
33
  #r;
31
34
  get input() {
32
- if (!b && !this.#r) {
35
+ if (!y && !this.#r) {
33
36
  let e = this.querySelector("slot")?.assignedElements()?.find((e) => e.matches("input, select, selectmenu, textarea, [nve-control]")) ?? Array.from(this.shadowRoot.querySelector("slot")?.assignedElements({ flatten: !0 }) ?? []).find((e) => e.matches("input, select, selectmenu, textarea, [nve-control]"));
34
- this.#r = e || this.querySelector(d);
37
+ this.#r = e || this.querySelector(u);
35
38
  }
36
39
  return this.#r;
37
40
  }
38
41
  get prefixContent() {
39
- return x;
42
+ return b;
40
43
  }
41
44
  get suffixContent() {
42
- return x;
45
+ return b;
43
46
  }
44
47
  #i;
45
48
  static {
46
- this.styles = l([_]);
49
+ this.styles = c([g]);
47
50
  }
48
51
  static {
49
52
  this.metadata = {
50
53
  tag: "nve-control",
51
- version: "2.18.4"
54
+ version: "2.19.1"
52
55
  };
53
56
  }
54
57
  render() {
55
- return this.nveControl === "inline" ? y`<div internal-host part="_internal-host"><div input part="_input"><slot interaction-state></slot></div><slot name="label" part="_label"></slot><slot name="messages" part="_messages"></slot></div>` : y`<div internal-host part="_internal-host"><slot name="label" part="_label"></slot><div input part="_input">${this.prefixContent}<slot></slot>${this.suffixContent}</div><slot name="messages" part="_messages"></slot></div>`;
58
+ return this.nveControl === "inline" ? v`<div internal-host part="_internal-host"><div input part="_input"><slot interaction-state></slot></div><slot name="label" part="_label"></slot><slot name="messages" part="_messages"></slot></div>` : v`<div internal-host part="_internal-host"><slot name="label" part="_label"></slot><div input part="_input">${this.prefixContent}<slot></slot>${this.suffixContent}</div><slot name="messages" part="_messages"></slot></div>`;
56
59
  }
57
60
  connectedCallback() {
58
- super.connectedCallback(), o(this), t(this, g), this.shadowRoot.addEventListener("slotchange", this.#a);
61
+ super.connectedCallback(), a(this), e(this, h), this.shadowRoot.addEventListener("slotchange", this.#a);
59
62
  }
60
63
  disconnectedCallback() {
61
64
  super.disconnectedCallback(), this.shadowRoot.removeEventListener("slotchange", this.#a), this.shadowRoot.removeEventListener("slotchange", this.#u), this.#i.forEach((e) => e.disconnect()), this.#i.length = 0;
@@ -86,7 +89,7 @@ var C = class extends v {
86
89
  return e instanceof HTMLInputElement && (e.type === "checkbox" || e.type === "radio");
87
90
  }
88
91
  #l() {
89
- this.#i.push(...m(this, this.#n), ...f(this), ...p(this, this.#n), h(this), n(this, ["hidden", "status"], () => this.#f())), this.#d(), this.#p(), this.shadowRoot.addEventListener("slotchange", this.#u);
92
+ this.#i.push(...p(this, this.#n), ...d(this), ...f(this, this.#n), m(this), t(this, ["hidden", "status"], () => this.#f())), this.#d(), this.#p(), this.shadowRoot.addEventListener("slotchange", this.#u);
90
93
  }
91
94
  #u;
92
95
  #d() {
@@ -96,7 +99,7 @@ var C = class extends v {
96
99
  this.input && (this.toggleAttribute("multiple", this.input?.multiple), this.input?.hasAttribute("size") ? this.setAttribute("size", "") : this.removeAttribute("size"));
97
100
  }
98
101
  #p() {
99
- this.#m(), a(this.#t, this.input), r(Array.from(this.#n), this.input), this._associateDatalist && i(this.querySelector("datalist"), this.input);
102
+ this.#m(), i(this.#t, this.input), n(Array.from(this.#n), this.input), this._associateDatalist && r(this.querySelector("datalist"), this.input);
100
103
  }
101
104
  #m() {
102
105
  let e = this.querySelector("label") || this.shadowRoot.querySelector("slot").assignedNodes({ flatten: !0 }).find((e) => e.tagName === "LABEL");
@@ -108,21 +111,21 @@ var C = class extends v {
108
111
  } catch {}
109
112
  }
110
113
  };
111
- u([S({ type: String })], C.prototype, "status", void 0), u([S({
114
+ l([x({ type: String })], C.prototype, "status", void 0), l([x({
112
115
  type: String,
113
116
  reflect: !0
114
- })], C.prototype, "layout", void 0), u([S({
117
+ })], C.prototype, "layout", void 0), l([x({
115
118
  type: Boolean,
116
119
  reflect: !0,
117
120
  attribute: "fit-text"
118
- })], C.prototype, "fitText", void 0), u([S({
121
+ })], C.prototype, "fitText", void 0), l([x({
119
122
  type: Boolean,
120
123
  reflect: !0,
121
124
  attribute: "fit-content"
122
- })], C.prototype, "fitContent", void 0), u([S({ type: Object })], C.prototype, "i18n", void 0), u([S({
125
+ })], C.prototype, "fitContent", void 0), l([x({ type: Object })], C.prototype, "i18n", void 0), l([x({
123
126
  type: String,
124
127
  reflect: !0
125
- })], C.prototype, "prominence", void 0), u([c({ attribute: "nve-control" })], C.prototype, "nveControl", void 0), C = u([s()], C);
128
+ })], C.prototype, "prominence", void 0), l([s({ attribute: "nve-control" })], C.prototype, "nveControl", void 0), C = l([o()], C);
126
129
  //#endregion
127
130
  export { C as Control };
128
131
 
@@ -1 +1 @@
1
- {"version":3,"file":"control2.js","names":[],"sources":["../../../src/forms/control/control.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TemplateResult } from 'lit';\nimport { LitElement, html, nothing, isServer } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport {\n attachInternals,\n useStyles,\n associateLabel,\n associateAriaDescribedBy,\n associateDataList,\n appendRootNodeStyle,\n getAttributeListChanges,\n I18nController,\n hostAttr,\n typeSSR\n} from '@nvidia-elements/core/internal';\nimport type { ControlMessage } from '../control-message/control-message.js';\nimport {\n setupControlValidationStates,\n setupControlStates,\n setupControlStatusStates,\n inputQuery,\n type ControlStateCleanup\n} from '../utils/states.js';\nimport { setupControlLayoutStates } from '../utils/layout.js';\nimport globalStyles from './control.global.css?inline';\nimport styles from './control.css?inline';\n\ninterface ResettableControl {\n getAttribute: Element['getAttribute'];\n value: string;\n}\n\ntype ControlInput = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | ResettableControl;\n\n/**\n * @element nve-control\n * @description Wraps a form input with its associated label and validation messages, managing layout and accessibility associations.\n * @documentation https://nvidia.github.io/elements/docs/elements/control/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/forms\n * @slot - Control input element\n * @slot label - Label element\n * @cssprop --cursor\n * @cssprop --accent-color\n * @cssprop --color\n * @cssprop --label-color\n * @cssprop --label-width\n * @cssprop --label-font-weight\n * @cssprop --label-font-size\n * @cssprop --control-width\n * @cssprop --control-height\n\n * @aria https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals\n * @package true\n */\n@typeSSR()\nexport class Control extends LitElement {\n /** Set current visual state for control. This overrides any validation states active. */\n @property({ type: String }) status: 'warning' | 'error' | 'success' | 'disabled';\n\n /** Set current control + label + control message layout. Layouts will collapse based on available container space. */\n @property({ type: String, reflect: true }) layout:\n | 'vertical'\n | 'vertical-inline'\n | 'horizontal'\n | 'horizontal-inline';\n\n /** Sets the input to match the width of the active text content of the control value. Only applicable to vertical input box type controls (input, select) */\n @property({ type: Boolean, reflect: true, attribute: 'fit-text' }) fitText = false;\n\n /** Sets the input to match native default content block */\n @property({ type: Boolean, reflect: true, attribute: 'fit-content' }) fitContent = false;\n\n #i18nController: I18nController<this> = new I18nController<this>(this);\n\n /** Enables internal string values to update for internationalization. */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** Set the visual prominence of the control */\n @property({ type: String, reflect: true }) prominence: 'muted';\n\n get #label() {\n return this.shadowRoot\n ?.querySelector<HTMLSlotElement>('slot[name=\"label\"]')\n ?.assignedElements({ flatten: true })?.[0] as HTMLLabelElement;\n }\n\n get #messages() {\n return (this.shadowRoot\n ?.querySelector<HTMLSlotElement>('slot[name=\"messages\"]')\n ?.assignedElements({ flatten: true }) ?? []) as ControlMessage[];\n }\n\n #input: HTMLInputElement;\n\n /** @private */\n get input(): HTMLInputElement {\n if (!isServer && !this.#input) {\n const slotted =\n this.querySelector('slot')\n ?.assignedElements()\n ?.find(i => i.matches(inputQuery)) ??\n Array.from(this.shadowRoot!.querySelector('slot')?.assignedElements({ flatten: true }) ?? []).find(i =>\n i.matches(inputQuery)\n );\n this.#input = (slotted ? slotted : this.querySelector(inputQuery)) as HTMLInputElement;\n }\n\n return this.#input;\n }\n\n /** @private */\n protected get prefixContent(): typeof nothing | TemplateResult {\n return nothing;\n }\n\n /** @private */\n protected get suffixContent(): typeof nothing | TemplateResult {\n return nothing;\n }\n\n @hostAttr({ attribute: 'nve-control' }) protected nveControl = '';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #observers: (MutationObserver | ResizeObserver | ControlStateCleanup)[] = [];\n\n protected _associateDatalist = true;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-control',\n version: '0.0.0'\n };\n\n render() {\n return this.nveControl !== 'inline'\n ? html`\n <div internal-host part=\"_internal-host\">\n <slot name=\"label\" part=\"_label\"></slot>\n <div input part=\"_input\">\n ${this.prefixContent}\n <slot></slot>\n ${this.suffixContent}\n </div>\n <slot name=\"messages\" part=\"_messages\"></slot>\n </div>\n `\n : html`\n <div internal-host part=\"_internal-host\">\n <div input part=\"_input\"><slot interaction-state></slot></div>\n <slot name=\"label\" part=\"_label\"></slot>\n <slot name=\"messages\" part=\"_messages\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this.shadowRoot!.addEventListener('slotchange', this.#onRootSlotchange);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.shadowRoot!.removeEventListener('slotchange', this.#onRootSlotchange);\n this.shadowRoot!.removeEventListener('slotchange', this.#onInputSlotchange);\n this.#observers.forEach(observer => observer.disconnect());\n this.#observers.length = 0;\n }\n\n #onRootSlotchange = () => {\n this.#updateStyleStates();\n\n if (this.input && this.#observers.length === 0) {\n this.#setupInput();\n }\n };\n\n /** Resets control value to initial attribute value and clears any active validation rules. */\n reset() {\n this.#resetInputValue(this.input);\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('reset', { bubbles: true, composed: true }));\n }\n\n #resetInputValue(input: ControlInput) {\n if (input instanceof HTMLSelectElement) {\n this.#resetSelectValue(input);\n return;\n }\n\n if (this.#isCheckedInput(input)) {\n input.checked = input.defaultChecked;\n input.indeterminate = false;\n return;\n }\n\n input.value =\n input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement\n ? input.defaultValue\n : (input.getAttribute('value') ?? '');\n }\n\n #resetSelectValue(input: HTMLSelectElement) {\n const hasDefaultSelection = Array.from(input.options).some(option => option.defaultSelected);\n Array.from(input.options).forEach(option => (option.selected = option.defaultSelected));\n if (!input.multiple && !hasDefaultSelection) input.selectedIndex = 0;\n }\n\n #isCheckedInput(input: ControlInput): input is HTMLInputElement {\n return input instanceof HTMLInputElement && (input.type === 'checkbox' || input.type === 'radio');\n }\n\n #setupInput() {\n this.#observers.push(\n ...setupControlValidationStates(this, this.#messages),\n ...setupControlStates(this),\n ...setupControlStatusStates(this, this.#messages),\n setupControlLayoutStates(this),\n getAttributeListChanges(this, ['hidden', 'status'], () => this.#updateStyleStates())\n );\n\n this.#polyfillShowPicker();\n this.#updateAssociations();\n this.shadowRoot!.addEventListener('slotchange', this.#onInputSlotchange);\n }\n\n #onInputSlotchange = () => {\n this.#updateStyleStates();\n this.#updateAssociations();\n };\n\n #polyfillShowPicker() {\n if (!this.input.showPicker) {\n this.input.showPicker = () => this.input.focus();\n }\n }\n\n #updateStyleStates() {\n if (this.input) {\n this.toggleAttribute('multiple', this.input?.multiple);\n this.input?.hasAttribute('size') ? this.setAttribute('size', '') : this.removeAttribute('size');\n }\n }\n\n #updateAssociations() {\n this.#assignLabel();\n associateLabel(this.#label, this.input);\n associateAriaDescribedBy(Array.from(this.#messages), this.input);\n\n if (this._associateDatalist) {\n associateDataList(this.querySelector<HTMLDataListElement>('datalist')!, this.input);\n }\n }\n\n #assignLabel() {\n const label =\n this.querySelector('label') ||\n (this.shadowRoot!.querySelector('slot')!\n .assignedNodes({ flatten: true })\n .find((i: Node) => (i as HTMLElement).tagName === 'LABEL') as HTMLLabelElement);\n if (label) {\n label.slot = 'label';\n }\n }\n\n protected showPicker() {\n try {\n this.input.showPicker();\n } catch {\n //\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"control2.js","names":[],"sources":["../../../src/forms/control/control.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TemplateResult } from 'lit';\nimport { LitElement, html, nothing, isServer } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport {\n attachInternals,\n useStyles,\n associateLabel,\n associateAriaDescribedBy,\n associateDataList,\n appendRootNodeStyle,\n getAttributeListChanges,\n hostAttr,\n typeSSR\n} from '@nvidia-elements/core/internal';\nimport { I18nController, type I18nDefaults } from '@nvidia-elements/foundations/internal/i18n';\nimport type { ControlMessage } from '../control-message/control-message.js';\nimport {\n setupControlValidationStates,\n setupControlStates,\n setupControlStatusStates,\n inputQuery,\n type ControlStateCleanup\n} from '../utils/states.js';\nimport { setupControlLayoutStates } from '../utils/layout.js';\nimport globalStyles from './control.global.css?inline';\nimport styles from './control.css?inline';\n\ninterface ResettableControl {\n getAttribute: Element['getAttribute'];\n value: string;\n}\n\ntype ControlInput = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | ResettableControl;\n\n/**\n * @element nve-control\n * @description Wraps a form input with its associated label and validation messages, managing layout and accessibility associations.\n * @documentation https://nvidia.github.io/elements/docs/elements/control/\n * @since 0.3.0\n * @entrypoint \\@nvidia-elements/core/forms\n * @slot - Control input element\n * @slot label - Label element\n * @cssprop --cursor\n * @cssprop --accent-color\n * @cssprop --color\n * @cssprop --label-color\n * @cssprop --label-width\n * @cssprop --label-font-weight\n * @cssprop --label-font-size\n * @cssprop --control-width\n * @cssprop --control-height\n\n * @aria https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals\n * @package true\n */\n@typeSSR()\nexport class Control extends LitElement {\n /** Set current visual state for control. This overrides any validation states active. */\n @property({ type: String }) status: 'warning' | 'error' | 'success' | 'disabled';\n\n /** Set current control + label + control message layout. Layouts will collapse based on available container space. */\n @property({ type: String, reflect: true }) layout:\n | 'vertical'\n | 'vertical-inline'\n | 'horizontal'\n | 'horizontal-inline';\n\n /** Sets the input to match the width of the active text content of the control value. Only applicable to vertical input box type controls (input, select) */\n @property({ type: Boolean, reflect: true, attribute: 'fit-text' }) fitText = false;\n\n /** Sets the input to match native default content block */\n @property({ type: Boolean, reflect: true, attribute: 'fit-content' }) fitContent = false;\n\n /** Component-specific defaults supplied by a derived control. */\n protected get i18nDefaults(): I18nDefaults {\n return {};\n }\n\n #i18nController: I18nController<this> = new I18nController<this>(this, this.i18nDefaults);\n\n /** Enables internal string values to update for internationalization. */\n @property({ type: Object }) i18n = this.#i18nController.i18n;\n\n /** Set the visual prominence of the control */\n @property({ type: String, reflect: true }) prominence: 'muted';\n\n get #label() {\n return this.shadowRoot\n ?.querySelector<HTMLSlotElement>('slot[name=\"label\"]')\n ?.assignedElements({ flatten: true })?.[0] as HTMLLabelElement;\n }\n\n get #messages() {\n return (this.shadowRoot\n ?.querySelector<HTMLSlotElement>('slot[name=\"messages\"]')\n ?.assignedElements({ flatten: true }) ?? []) as ControlMessage[];\n }\n\n #input: HTMLInputElement;\n\n /** @private */\n get input(): HTMLInputElement {\n if (!isServer && !this.#input) {\n const slotted =\n this.querySelector('slot')\n ?.assignedElements()\n ?.find(i => i.matches(inputQuery)) ??\n Array.from(this.shadowRoot!.querySelector('slot')?.assignedElements({ flatten: true }) ?? []).find(i =>\n i.matches(inputQuery)\n );\n this.#input = (slotted ? slotted : this.querySelector(inputQuery)) as HTMLInputElement;\n }\n\n return this.#input;\n }\n\n /** @private */\n protected get prefixContent(): typeof nothing | TemplateResult {\n return nothing;\n }\n\n /** @private */\n protected get suffixContent(): typeof nothing | TemplateResult {\n return nothing;\n }\n\n @hostAttr({ attribute: 'nve-control' }) protected nveControl = '';\n\n /** @private */\n declare _internals: ElementInternals;\n\n #observers: (MutationObserver | ResizeObserver | ControlStateCleanup)[] = [];\n\n protected _associateDatalist = true;\n\n static styles = useStyles([styles]);\n\n static readonly metadata = {\n tag: 'nve-control',\n version: '0.0.0'\n };\n\n render() {\n return this.nveControl !== 'inline'\n ? html`\n <div internal-host part=\"_internal-host\">\n <slot name=\"label\" part=\"_label\"></slot>\n <div input part=\"_input\">\n ${this.prefixContent}\n <slot></slot>\n ${this.suffixContent}\n </div>\n <slot name=\"messages\" part=\"_messages\"></slot>\n </div>\n `\n : html`\n <div internal-host part=\"_internal-host\">\n <div input part=\"_input\"><slot interaction-state></slot></div>\n <slot name=\"label\" part=\"_label\"></slot>\n <slot name=\"messages\" part=\"_messages\"></slot>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n attachInternals(this);\n appendRootNodeStyle(this, globalStyles);\n this.shadowRoot!.addEventListener('slotchange', this.#onRootSlotchange);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.shadowRoot!.removeEventListener('slotchange', this.#onRootSlotchange);\n this.shadowRoot!.removeEventListener('slotchange', this.#onInputSlotchange);\n this.#observers.forEach(observer => observer.disconnect());\n this.#observers.length = 0;\n }\n\n #onRootSlotchange = () => {\n this.#updateStyleStates();\n\n if (this.input && this.#observers.length === 0) {\n this.#setupInput();\n }\n };\n\n /** Resets control value to initial attribute value and clears any active validation rules. */\n reset() {\n this.#resetInputValue(this.input);\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('reset', { bubbles: true, composed: true }));\n }\n\n #resetInputValue(input: ControlInput) {\n if (input instanceof HTMLSelectElement) {\n this.#resetSelectValue(input);\n return;\n }\n\n if (this.#isCheckedInput(input)) {\n input.checked = input.defaultChecked;\n input.indeterminate = false;\n return;\n }\n\n input.value =\n input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement\n ? input.defaultValue\n : (input.getAttribute('value') ?? '');\n }\n\n #resetSelectValue(input: HTMLSelectElement) {\n const hasDefaultSelection = Array.from(input.options).some(option => option.defaultSelected);\n Array.from(input.options).forEach(option => (option.selected = option.defaultSelected));\n if (!input.multiple && !hasDefaultSelection) input.selectedIndex = 0;\n }\n\n #isCheckedInput(input: ControlInput): input is HTMLInputElement {\n return input instanceof HTMLInputElement && (input.type === 'checkbox' || input.type === 'radio');\n }\n\n #setupInput() {\n this.#observers.push(\n ...setupControlValidationStates(this, this.#messages),\n ...setupControlStates(this),\n ...setupControlStatusStates(this, this.#messages),\n setupControlLayoutStates(this),\n getAttributeListChanges(this, ['hidden', 'status'], () => this.#updateStyleStates())\n );\n\n this.#polyfillShowPicker();\n this.#updateAssociations();\n this.shadowRoot!.addEventListener('slotchange', this.#onInputSlotchange);\n }\n\n #onInputSlotchange = () => {\n this.#updateStyleStates();\n this.#updateAssociations();\n };\n\n #polyfillShowPicker() {\n if (!this.input.showPicker) {\n this.input.showPicker = () => this.input.focus();\n }\n }\n\n #updateStyleStates() {\n if (this.input) {\n this.toggleAttribute('multiple', this.input?.multiple);\n this.input?.hasAttribute('size') ? this.setAttribute('size', '') : this.removeAttribute('size');\n }\n }\n\n #updateAssociations() {\n this.#assignLabel();\n associateLabel(this.#label, this.input);\n associateAriaDescribedBy(Array.from(this.#messages), this.input);\n\n if (this._associateDatalist) {\n associateDataList(this.querySelector<HTMLDataListElement>('datalist')!, this.input);\n }\n }\n\n #assignLabel() {\n const label =\n this.querySelector('label') ||\n (this.shadowRoot!.querySelector('slot')!\n .assignedNodes({ flatten: true })\n .find((i: Node) => (i as HTMLElement).tagName === 'LABEL') as HTMLLabelElement);\n if (label) {\n label.slot = 'label';\n }\n }\n\n protected showPicker() {\n try {\n this.input.showPicker();\n } catch {\n //\n }\n }\n}\n"],"mappings":"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"}
@@ -24,7 +24,7 @@ var m = class extends d {
24
24
  static {
25
25
  this.metadata = {
26
26
  tag: "nve-control-group",
27
- version: "2.18.4"
27
+ version: "2.19.1"
28
28
  };
29
29
  }
30
30
  render() {
@@ -23,7 +23,7 @@ var l = {
23
23
  static {
24
24
  this.metadata = {
25
25
  tag: "nve-control-message",
26
- version: "2.18.4"
26
+ version: "2.19.1"
27
27
  };
28
28
  }
29
29
  static {
@@ -1,10 +1,10 @@
1
- import { I18nController as e } from "../internal/controllers/i18n.controller.js";
2
- import { attachInternals as t } from "../internal/utils/a11y.js";
3
- import { useStyles as n } from "../internal/styles/index.js";
4
- import r from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
5
- import i from "./gauge.js";
6
- import { LitElement as a, html as o } from "lit";
7
- import { property as s } from "lit/decorators/property.js";
1
+ import { attachInternals as e } from "../internal/utils/a11y.js";
2
+ import { useStyles as t } from "../internal/styles/index.js";
3
+ import n from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
4
+ import r from "./gauge.js";
5
+ import { LitElement as i, html as a } from "lit";
6
+ import { property as o } from "lit/decorators/property.js";
7
+ import { I18nController as s } from "@nvidia-elements/foundations/internal/i18n";
8
8
  import { styleMap as c } from "lit/directives/style-map.js";
9
9
  //#region src/gauge/gauge.ts
10
10
  var l = {
@@ -30,17 +30,22 @@ var l = {
30
30
  [`--_${e}-angle`]: `${t}deg`,
31
31
  [`--_${e}-origin`]: `${n.center}px ${n.center}px`,
32
32
  [`--_${e}-start-angle`]: `${n.startAngle}deg`
33
- }), d = class extends a {
34
- constructor(...t) {
35
- super(...t), this.value = 0, this.max = 100, this.status = "neutral", this.thumb = "fill", this.#e = new e(this), this.i18n = this.#e.i18n, this.#t = 0, this.#r = 0;
33
+ }), d = {
34
+ danger: "danger",
35
+ information: "information",
36
+ success: "success",
37
+ warning: "warning"
38
+ }, f = class extends i {
39
+ constructor(...e) {
40
+ super(...e), this.value = 0, this.max = 100, this.status = "neutral", this.thumb = "fill", this.#e = new s(this, d), this.i18n = this.#e.i18n, this.#t = 0, this.#r = 0;
36
41
  }
37
42
  static {
38
- this.styles = n([i]);
43
+ this.styles = t([r]);
39
44
  }
40
45
  static {
41
46
  this.metadata = {
42
47
  tag: "nve-gauge",
43
- version: "2.18.4"
48
+ version: "2.19.1"
44
49
  };
45
50
  }
46
51
  #e;
@@ -55,11 +60,11 @@ var l = {
55
60
  };
56
61
  }
57
62
  render() {
58
- let e = this.#f(), t = this.#t, n = this.#p(), r = this.#l(e, t), i = this.#u(e, t), a = n === "fill", s = t > 0 && (n === "fill" || n === "dot");
59
- return o`<div internal-host><svg viewBox="${e.viewBox}" role="presentation" aria-hidden="true"><defs><mask id="background-mask" maskUnits="userSpaceOnUse" x="0" y="0" width="128" height="${e.surfaceHeight}"><path d="${e.path}" class="background"></path></mask><mask id="fill-mask" maskUnits="userSpaceOnUse" x="0" y="0" width="128" height="${e.surfaceHeight}"><path d="${i}" class="gauge" ?empty="${t <= 0}"></path></mask></defs><foreignObject width="128" height="${e.surfaceHeight}" mask="url(#background-mask)"><div xmlns="http://www.w3.org/1999/xhtml" class="background-surface"></div></foreignObject><foreignObject class="fill-layer" width="128" height="${e.surfaceHeight}" mask="url(#fill-mask)" ?hidden="${!a || t <= 0}"><div xmlns="http://www.w3.org/1999/xhtml" class="fill-surface"></div></foreignObject><circle class="fill-dot-end" cx="${e.center + e.radius}" cy="${e.center}" ?hidden="${!s}" style="${c(u("dot", r, e))}"></circle><g class="needle" ?hidden="${n !== "needle"}" style="${c(u("needle", r, e))}"><line class="needle-line" x1="${e.center}" y1="${e.center}" x2="${e.center + 40}" y2="${e.center}"></line><circle class="needle-hub" cx="${e.center}" cy="${e.center}"></circle></g></svg><slot></slot></div>`;
63
+ let e = this.#f(), t = this.#t, n = this.#p(), r = this.#l(e, t), i = this.#u(e, t), o = n === "fill", s = t > 0 && (n === "fill" || n === "dot");
64
+ return a`<div internal-host><svg viewBox="${e.viewBox}" role="presentation" aria-hidden="true"><defs><mask id="background-mask" maskUnits="userSpaceOnUse" x="0" y="0" width="128" height="${e.surfaceHeight}"><path d="${e.path}" class="background"></path></mask><mask id="fill-mask" maskUnits="userSpaceOnUse" x="0" y="0" width="128" height="${e.surfaceHeight}"><path d="${i}" class="gauge" ?empty="${t <= 0}"></path></mask></defs><foreignObject width="128" height="${e.surfaceHeight}" mask="url(#background-mask)"><div xmlns="http://www.w3.org/1999/xhtml" class="background-surface"></div></foreignObject><foreignObject class="fill-layer" width="128" height="${e.surfaceHeight}" mask="url(#fill-mask)" ?hidden="${!o || t <= 0}"><div xmlns="http://www.w3.org/1999/xhtml" class="fill-surface"></div></foreignObject><circle class="fill-dot-end" cx="${e.center + e.radius}" cy="${e.center}" ?hidden="${!s}" style="${c(u("dot", r, e))}"></circle><g class="needle" ?hidden="${n !== "needle"}" style="${c(u("needle", r, e))}"><line class="needle-line" x1="${e.center}" y1="${e.center}" x2="${e.center + 40}" y2="${e.center}"></line><circle class="needle-hub" cx="${e.center}" cy="${e.center}"></circle></g></svg><slot></slot></div>`;
60
65
  }
61
66
  connectedCallback() {
62
- super.connectedCallback(), t(this), this._internals.role = "progressbar";
67
+ super.connectedCallback(), e(this), this._internals.role = "progressbar";
63
68
  }
64
69
  disconnectedCallback() {
65
70
  super.disconnectedCallback(), this.#n && (this.#s(), this.#t = this.#a(), this.requestUpdate());
@@ -124,20 +129,20 @@ var l = {
124
129
  return this.thumb === "dot" || this.thumb === "needle" ? this.thumb : "fill";
125
130
  }
126
131
  };
127
- r([s({ type: Number })], d.prototype, "value", void 0), r([s({ type: Number })], d.prototype, "max", void 0), r([s({
132
+ n([o({ type: Number })], f.prototype, "value", void 0), n([o({ type: Number })], f.prototype, "max", void 0), n([o({
128
133
  type: String,
129
134
  reflect: !0
130
- })], d.prototype, "status", void 0), r([s({
135
+ })], f.prototype, "status", void 0), n([o({
131
136
  type: String,
132
137
  reflect: !0
133
- })], d.prototype, "shape", void 0), r([s({
138
+ })], f.prototype, "shape", void 0), n([o({
134
139
  type: String,
135
140
  reflect: !0
136
- })], d.prototype, "thumb", void 0), r([s({
141
+ })], f.prototype, "thumb", void 0), n([o({
137
142
  type: String,
138
143
  reflect: !0
139
- })], d.prototype, "size", void 0), r([s({ type: Object })], d.prototype, "i18n", void 0);
144
+ })], f.prototype, "size", void 0), n([o({ type: Object })], f.prototype, "i18n", void 0);
140
145
  //#endregion
141
- export { d as Gauge };
146
+ export { f as Gauge };
142
147
 
143
148
  //# sourceMappingURL=gauge2.js.map