@nxgt/material 3.93.0 → 3.95.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 (414) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +8 -3
  3. package/dist/{alert-dialog-D37eph4I.js → alert-dialog-D4r0Kn9h.js} +1 -1
  4. package/dist/{async-slice-BSqwhAj-.js → async-slice-Bx438UlG.js} +1 -1
  5. package/dist/{button-CG9SBAT-.js → button-Z_xcg10A.js} +1 -1
  6. package/dist/{calculator-YD3I3y-I.js → calculator-DGxClOmW.js} +10 -10
  7. package/dist/calculator-field.js +6 -6
  8. package/dist/{calculator-segment-Cjec9zi7.js → calculator-segment-DQE1EFdw.js} +1 -1
  9. package/dist/calculator.js +1 -1
  10. package/dist/charts.js +3 -3
  11. package/dist/{chip-BbUSBl3i.js → chip-Bb9SM3Ly.js} +2 -2
  12. package/dist/{code-editor-ZEM7AAcs.js → code-editor-Cw-dOrn2.js} +4 -4
  13. package/dist/code-editor.js +4 -4
  14. package/dist/{code-language-items-CAuHPrHd.js → code-language-items-BVfxGKiv.js} +2 -2
  15. package/dist/components/components.css +7 -1
  16. package/dist/components/theme-tokens.css +7 -0
  17. package/dist/components/ui/dates/duration-field/duration-field-expressive.css +2 -63
  18. package/dist/components/ui/dates/picker-trigger/typed-box-expressive.css +30 -21
  19. package/dist/components/ui/fields/number-field/number-field-score.css +151 -0
  20. package/dist/components/ui/fields/quantity-field/quantity-field.css +117 -0
  21. package/dist/components/ui/primitives/field-box/field-box-parts.css +1 -2
  22. package/dist/components/ui/primitives/field-box/field-box-tokens.css +54 -36
  23. package/dist/components/ui/primitives/field-box/field-box.css +44 -86
  24. package/dist/components/ui/primitives/field-box/field-stepper.css +129 -0
  25. package/dist/{components-CuFTrmGy.js → components-5n6qa3vr.js} +19380 -18872
  26. package/dist/components.js +37 -38
  27. package/dist/{conversion-variant-DmEtTCSP.js → conversion-variant-BjIJep32.js} +4 -4
  28. package/dist/currency-field-DzLtJtDI.js +303 -0
  29. package/dist/{dialog-Jhpx6ulb.js → dialog-CFuONiW5.js} +3 -3
  30. package/dist/dnd.js +1 -1
  31. package/dist/{dropdown-menu-nl0Q3tQ2.js → dropdown-menu-BvtBDoSD.js} +1 -1
  32. package/dist/editor.js +442 -442
  33. package/dist/{empty-state-mrJuqph3.js → empty-state-n2zb23YG.js} +1 -1
  34. package/dist/{financial-variant-P8gFA9aI.js → financial-variant-CniddOSL.js} +7 -7
  35. package/dist/{hooks-CjSpziWf.js → hooks-zyRsvilJ.js} +2 -2
  36. package/dist/hooks.js +2 -2
  37. package/dist/{hover-card-BNb1M8ij.js → hover-card-BJ15hu7B.js} +1 -1
  38. package/dist/i18n.js +3 -3
  39. package/dist/{icon-badge-CVMHwdFm.js → icon-badge-B2ns44Cz.js} +1 -1
  40. package/dist/{icon-button-Ch0PThsa.js → icon-button-BG438okX.js} +1 -1
  41. package/dist/lib/components/ui/display/entity-header/entity-metadata.d.ts +0 -7
  42. package/dist/lib/components/ui/display/entity-header/entity-stats.d.ts +2 -1
  43. package/dist/lib/components/ui/display/markdown/markdown.d.ts +2 -2
  44. package/dist/lib/components/ui/display/markdown/rehype-katex-classes.d.ts +21 -0
  45. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  46. package/dist/lib/components/ui/fields/index.d.ts +1 -0
  47. package/dist/lib/components/ui/fields/markdown-textarea-field/index.d.ts +2 -0
  48. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-preview.d.ts +6 -0
  49. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-syntax-help.d.ts +4 -0
  50. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-tabs.d.ts +13 -0
  51. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-field.d.ts +23 -0
  52. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-form-field.d.ts +3 -0
  53. package/dist/lib/components/ui/fields/markdown-textarea-field/use-text-value.d.ts +6 -0
  54. package/dist/lib/components/ui/fields/number-field/number-control.d.ts +10 -3
  55. package/dist/lib/components/ui/fields/number-field/number-field-base.d.ts +2 -0
  56. package/dist/lib/components/ui/fields/number-field/number-field.d.ts +7 -1
  57. package/dist/lib/components/ui/fields/number-field/number-field.types.d.ts +13 -0
  58. package/dist/lib/components/ui/fields/number-field/number-score-control.d.ts +19 -0
  59. package/dist/lib/components/ui/fields/number-field/number-stepper.d.ts +16 -2
  60. package/dist/lib/components/ui/fields/quantity-field/quantity-field.d.ts +4 -3
  61. package/dist/lib/components/ui/fields/quantity-field/quantity-row.d.ts +5 -9
  62. package/dist/lib/components/ui/fields/quantity-field/quantity-unit-menu.d.ts +19 -0
  63. package/dist/lib/components/ui/fields/quantity-field/quantity-unit.d.ts +11 -4
  64. package/dist/lib/components/ui/fields/quantity-field/use-unit-chip-name.d.ts +14 -0
  65. package/dist/lib/components/ui/fields/switch/partials/switch-row.d.ts +2 -2
  66. package/dist/lib/components/ui/fields/switch/switch.d.ts +2 -2
  67. package/dist/lib/components/ui/fields/text-field/text-field-units.d.ts +22 -0
  68. package/dist/lib/components/ui/fields/text-field/text-field.d.ts +9 -0
  69. package/dist/lib/components/ui/fields/verification-code/partials/code-surface.d.ts +13 -6
  70. package/dist/lib/components/ui/fields/verification-code/partials/recovery-input.d.ts +1 -1
  71. package/dist/lib/components/ui/layout/app-shell/app-sidebar-group.d.ts +12 -0
  72. package/dist/lib/components/ui/layout/app-shell/types.d.ts +7 -0
  73. package/dist/lib/components/ui/primitives/input-group/input-group.d.ts +1 -1
  74. package/dist/lib/components/ui/widgets/education/questions/index.d.ts +1 -1
  75. package/dist/lib/components/ui/widgets/education/questions/partials/question-hints.d.ts +9 -0
  76. package/dist/lib/components/ui/widgets/education/questions/partials/question-reveal.d.ts +13 -0
  77. package/dist/lib/components/ui/widgets/education/questions/partials/rich-text.d.ts +17 -0
  78. package/dist/lib/components/ui/widgets/education/questions/types.d.ts +40 -1
  79. package/dist/lib/i18n/resources/en/en.d.ts +29 -0
  80. package/dist/lib/i18n/resources/en/material.json.d.ts +31 -2
  81. package/dist/lib/i18n/resources/fr/fr.d.ts +29 -0
  82. package/dist/lib/i18n/resources/fr/material.json.d.ts +31 -2
  83. package/dist/lib/i18n/resources/resources.d.ts +58 -0
  84. package/dist/lib/i18n/translator.d.ts +1 -1
  85. package/dist/lib.js +1 -1
  86. package/dist/main.js +53 -54
  87. package/dist/map.js +8 -8
  88. package/dist/material.css +1 -1
  89. package/dist/pdf-reader.js +1 -1
  90. package/dist/percent-field-CeDpzUTS.js +137 -0
  91. package/dist/{picker-surface-CoNsDWxX.js → picker-surface-Cr2n42qv.js} +4 -4
  92. package/dist/{popover-BA1U82Wk.js → popover-XBAX2Shp.js} +1 -1
  93. package/dist/{pos-types-BQqv-kb6.js → pos-types-BFVWeJki.js} +1 -1
  94. package/dist/{pos-variant-D043n5y8.js → pos-variant-DWB8Bc12.js} +4 -4
  95. package/dist/print.js +1 -1
  96. package/dist/{programmer-variant-jneMqtLs.js → programmer-variant-B-wPnDeX.js} +2 -2
  97. package/dist/{public-DgrbdeZj.js → public-D1bH-KPQ.js} +9 -9
  98. package/dist/{rich-code-block-CGNjHawR.js → rich-code-block-DP2RT7pV.js} +5 -5
  99. package/dist/{scientific-variant-1L7brNNT.js → scientific-variant-BP08Mo0g.js} +2 -2
  100. package/dist/{sortable-provider-DZLV_svg.js → sortable-provider-CHGZrS0f.js} +2 -2
  101. package/dist/{spinner-CQqRWxAW.js → spinner-rk8J5y9O.js} +1 -1
  102. package/dist/styles.css +2 -0
  103. package/dist/{tabs-DQTx3C8e.js → tabs-nuYLggwC.js} +1 -1
  104. package/dist/text-field-DxKSPY0T.js +154 -0
  105. package/dist/theme-picker.js +2 -2
  106. package/dist/{theme-toggle-3NQ3VmJH.js → theme-toggle-5waw9Wk8.js} +1 -1
  107. package/dist/{toolbar-items-BYCdJGUf.js → toolbar-items-Bo-nMzKJ.js} +4 -4
  108. package/dist/{translate-material-jxfcGlD5.js → translate-material-H5GMStyF.js} +1 -1
  109. package/dist/{translator-6XuDmqUJ.js → translator-gdpQeToI.js} +62 -4
  110. package/dist/{use-chat-composer-1eb4I1kM.js → use-chat-composer-yTODkjut.js} +24 -25
  111. package/dist/{use-heading-spy-CzPujlKr.js → use-heading-spy-n_wPa5jC.js} +4 -4
  112. package/dist/{use-material-translation-BUPqNmAg.js → use-material-translation-BW5HZMwt.js} +1 -1
  113. package/dist/{use-return-focus-B_enQxp5.js → use-return-focus-BC4sGh1b.js} +1 -1
  114. package/docs/README.md +1 -0
  115. package/docs/components/data-display.md +7 -6
  116. package/docs/components/date-and-time.md +25 -23
  117. package/docs/components/form-fields.md +119 -26
  118. package/docs/components/navigation-and-layout.md +1 -1
  119. package/docs/components/rich-widgets.md +29 -0
  120. package/docs/guides/app-shell.md +15 -0
  121. package/docs/guides/csp.md +20 -8
  122. package/docs/guides/field-look-2-x.md +10 -4
  123. package/docs/guides/field-look-refined.md +130 -0
  124. package/docs/guides/forms.md +1 -0
  125. package/docs/guides/i18n.md +1 -1
  126. package/docs/guides/layouts.md +2 -1
  127. package/docs/guides/theming.md +39 -31
  128. package/docs/previews/backgrounds-icons-quiet-band.webp +0 -0
  129. package/docs/previews/backgrounds-icons.webp +0 -0
  130. package/docs/previews/backgrounds-matrix.webp +0 -0
  131. package/docs/previews/buttons-actions-actioncard.webp +0 -0
  132. package/docs/previews/buttons-actions-backlink.webp +0 -0
  133. package/docs/previews/buttons-actions-button.webp +0 -0
  134. package/docs/previews/buttons-actions-buttongroup.webp +0 -0
  135. package/docs/previews/buttons-actions-fab.webp +0 -0
  136. package/docs/previews/buttons-actions-fabmenu.webp +0 -0
  137. package/docs/previews/buttons-actions-iconbutton.webp +0 -0
  138. package/docs/previews/buttons-actions-languageswitcher.webp +0 -0
  139. package/docs/previews/buttons-actions-linkbutton.webp +0 -0
  140. package/docs/previews/buttons-actions-loadmorebutton.webp +0 -0
  141. package/docs/previews/buttons-actions-loadmorefooter.webp +0 -0
  142. package/docs/previews/buttons-actions-responsivebutton.webp +0 -0
  143. package/docs/previews/buttons-actions-scrolltolatestbutton.webp +0 -0
  144. package/docs/previews/buttons-actions-scrolltotop.webp +0 -0
  145. package/docs/previews/buttons-actions-splitbutton.webp +0 -0
  146. package/docs/previews/buttons-actions-themetoggle.webp +0 -0
  147. package/docs/previews/buttons-actions-toolbar-density-and-keyboard.webp +0 -0
  148. package/docs/previews/buttons-actions-toolbar.webp +0 -0
  149. package/docs/previews/data-display-accordioncard.webp +0 -0
  150. package/docs/previews/data-display-apiendpoint.webp +0 -0
  151. package/docs/previews/data-display-apioperation.webp +0 -0
  152. package/docs/previews/data-display-avatar.webp +0 -0
  153. package/docs/previews/data-display-badge.webp +0 -0
  154. package/docs/previews/data-display-card-presets.webp +0 -0
  155. package/docs/previews/data-display-changehistory.webp +0 -0
  156. package/docs/previews/data-display-chip.webp +0 -0
  157. package/docs/previews/data-display-codegroup.webp +0 -0
  158. package/docs/previews/data-display-description.webp +0 -0
  159. package/docs/previews/data-display-enrolmentcard.webp +0 -0
  160. package/docs/previews/data-display-enrolmentsecret.webp +0 -0
  161. package/docs/previews/data-display-entityheader.webp +0 -0
  162. package/docs/previews/data-display-metric-cards.webp +0 -0
  163. package/docs/previews/data-display-periodcards.webp +0 -0
  164. package/docs/previews/data-display-recoverycodes.webp +0 -0
  165. package/docs/previews/data-display-recoverycodesstatus.webp +0 -0
  166. package/docs/previews/data-display-secretcard.webp +0 -0
  167. package/docs/previews/data-display-terminal.webp +0 -0
  168. package/docs/previews/data-display-timeline.webp +0 -0
  169. package/docs/previews/data-display-tonevalue.webp +0 -0
  170. package/docs/previews/data-display-votetally.webp +0 -0
  171. package/docs/previews/data-table-filter-lists-datagrid.webp +0 -0
  172. package/docs/previews/data-table-filter-lists-datatable.webp +0 -0
  173. package/docs/previews/data-table-filter-lists-daygroupedlist.webp +0 -0
  174. package/docs/previews/data-table-filter-lists-drag-and-drop.webp +0 -0
  175. package/docs/previews/data-table-filter-lists-facetgroup.webp +0 -0
  176. package/docs/previews/data-table-filter-lists-filter.webp +0 -0
  177. package/docs/previews/data-table-filter-lists-listempty.webp +0 -0
  178. package/docs/previews/data-table-filter-lists-listpane.webp +0 -0
  179. package/docs/previews/data-table-filter-lists-markinglist.webp +0 -0
  180. package/docs/previews/data-table-filter-lists-pagination.webp +0 -0
  181. package/docs/previews/data-table-filter-lists-servertable.webp +0 -0
  182. package/docs/previews/data-table-filter-lists-tree.webp +0 -0
  183. package/docs/previews/date-time-agefield.webp +0 -0
  184. package/docs/previews/date-time-calendar-expressive.webp +0 -0
  185. package/docs/previews/date-time-calendar.webp +0 -0
  186. package/docs/previews/date-time-datefield.webp +0 -0
  187. package/docs/previews/date-time-daterangefield.webp +0 -0
  188. package/docs/previews/date-time-durationfield.webp +0 -0
  189. package/docs/previews/date-time-fields-expressive.webp +0 -0
  190. package/docs/previews/date-time-halfdayrangefield.webp +0 -0
  191. package/docs/previews/date-time-nowindicator.webp +0 -0
  192. package/docs/previews/date-time-timefield.webp +0 -0
  193. package/docs/previews/date-time-timepicker-tiles.webp +0 -0
  194. package/docs/previews/date-time-timepicker.webp +0 -0
  195. package/docs/previews/feedback-status-alert.webp +0 -0
  196. package/docs/previews/feedback-status-alertdialog.webp +0 -0
  197. package/docs/previews/feedback-status-celebration.webp +0 -0
  198. package/docs/previews/feedback-status-circularprogress.webp +0 -0
  199. package/docs/previews/feedback-status-confirmationdialog.webp +0 -0
  200. package/docs/previews/feedback-status-confirmdialog.webp +0 -0
  201. package/docs/previews/feedback-status-countdowntimer.webp +0 -0
  202. package/docs/previews/feedback-status-customalertdialog.webp +0 -0
  203. package/docs/previews/feedback-status-customdialog.webp +0 -0
  204. package/docs/previews/feedback-status-emptystate.webp +0 -0
  205. package/docs/previews/feedback-status-errorstate.webp +0 -0
  206. package/docs/previews/feedback-status-hydrateloading.webp +0 -0
  207. package/docs/previews/feedback-status-illustration-education.webp +0 -0
  208. package/docs/previews/feedback-status-illustration-game.webp +0 -0
  209. package/docs/previews/feedback-status-illustration-health.webp +0 -0
  210. package/docs/previews/feedback-status-illustration.webp +0 -0
  211. package/docs/previews/feedback-status-notificationrow.webp +0 -0
  212. package/docs/previews/feedback-status-notifications.webp +0 -0
  213. package/docs/previews/feedback-status-pageloadfailed.webp +0 -0
  214. package/docs/previews/feedback-status-progress.webp +0 -0
  215. package/docs/previews/feedback-status-skeleton.webp +0 -0
  216. package/docs/previews/feedback-status-spinner.webp +0 -0
  217. package/docs/previews/feedback-status-stalenotice.webp +0 -0
  218. package/docs/previews/feedback-status-stepupdialog-retry.webp +0 -0
  219. package/docs/previews/feedback-status-stepupdialog.webp +0 -0
  220. package/docs/previews/feedback-status-toast.webp +0 -0
  221. package/docs/previews/feedback-status-typingindicator.webp +0 -0
  222. package/docs/previews/feedback-status-unsaveddialog.webp +0 -0
  223. package/docs/previews/form-fields-attributes.webp +0 -0
  224. package/docs/previews/form-fields-choicelistfield.webp +0 -0
  225. package/docs/previews/form-fields-colorfield.webp +0 -0
  226. package/docs/previews/form-fields-contacts.webp +0 -0
  227. package/docs/previews/form-fields-countryfield.webp +0 -0
  228. package/docs/previews/form-fields-currencyfield.webp +0 -0
  229. package/docs/previews/form-fields-emailfield.webp +0 -0
  230. package/docs/previews/form-fields-field.webp +0 -0
  231. package/docs/previews/form-fields-formsection.webp +0 -0
  232. package/docs/previews/form-fields-inlineedit.webp +0 -0
  233. package/docs/previews/form-fields-inputgroupfield.webp +0 -0
  234. package/docs/previews/form-fields-localizedtextfields.webp +0 -0
  235. package/docs/previews/form-fields-markdowntextareafield.webp +0 -0
  236. package/docs/previews/form-fields-numberfield.webp +0 -0
  237. package/docs/previews/form-fields-openinghours.webp +0 -0
  238. package/docs/previews/form-fields-otpfield.webp +0 -0
  239. package/docs/previews/form-fields-passwordfield.webp +0 -0
  240. package/docs/previews/form-fields-percentfield.webp +0 -0
  241. package/docs/previews/form-fields-phonefield.webp +0 -0
  242. package/docs/previews/form-fields-postaladdress.webp +0 -0
  243. package/docs/previews/form-fields-repeatablegroup.webp +0 -0
  244. package/docs/previews/form-fields-searchfield.webp +0 -0
  245. package/docs/previews/form-fields-slider.webp +0 -0
  246. package/docs/previews/form-fields-switch.webp +0 -0
  247. package/docs/previews/form-fields-textareafield.webp +0 -0
  248. package/docs/previews/form-fields-textfield.webp +0 -0
  249. package/docs/previews/form-fields-timezonefield.webp +0 -0
  250. package/docs/previews/form-fields-urlfield.webp +0 -0
  251. package/docs/previews/form-fields-verificationcode.webp +0 -0
  252. package/docs/previews/foundations-themes-gallery.webp +0 -0
  253. package/docs/previews/foundations-themes-icon-motifs.webp +0 -0
  254. package/docs/previews/foundations-themes-nesting.webp +0 -0
  255. package/docs/previews/foundations-themes-provider.webp +0 -0
  256. package/docs/previews/foundations-themes-themepicker.webp +0 -0
  257. package/docs/previews/guides-i18n-i18nprovider.webp +0 -0
  258. package/docs/previews/guides-i18n-translated-components.webp +0 -0
  259. package/docs/previews/media-files-audioplayer.webp +0 -0
  260. package/docs/previews/media-files-camera.webp +0 -0
  261. package/docs/previews/media-files-carousel.webp +0 -0
  262. package/docs/previews/media-files-filelist.webp +0 -0
  263. package/docs/previews/media-files-filelistfield.webp +0 -0
  264. package/docs/previews/media-files-filepreview.webp +0 -0
  265. package/docs/previews/media-files-gallery-image-lists.webp +0 -0
  266. package/docs/previews/media-files-gallery-video.webp +0 -0
  267. package/docs/previews/media-files-gallery-viewer.webp +0 -0
  268. package/docs/previews/media-files-gallery.webp +0 -0
  269. package/docs/previews/media-files-imagecropper.webp +0 -0
  270. package/docs/previews/media-files-imageeditor.webp +0 -0
  271. package/docs/previews/media-files-imagefield.webp +0 -0
  272. package/docs/previews/media-files-lightboxgallery.webp +0 -0
  273. package/docs/previews/media-files-map.webp +0 -0
  274. package/docs/previews/media-files-mediaplayer.webp +0 -0
  275. package/docs/previews/media-files-mediaplayerhost.webp +0 -0
  276. package/docs/previews/media-files-mediaplayerlightbox.webp +0 -0
  277. package/docs/previews/media-files-mediaplayermini.webp +0 -0
  278. package/docs/previews/media-files-minigallery.webp +0 -0
  279. package/docs/previews/media-files-pdfreader.webp +0 -0
  280. package/docs/previews/media-files-uploadfield.webp +0 -0
  281. package/docs/previews/navigation-layout-appshell-blue-moon.webp +0 -0
  282. package/docs/previews/navigation-layout-appshell-footer-icon.webp +0 -0
  283. package/docs/previews/navigation-layout-appshell-menu-badge.webp +0 -0
  284. package/docs/previews/navigation-layout-appshell-page-ground.webp +0 -0
  285. package/docs/previews/navigation-layout-appshell-themes.webp +0 -0
  286. package/docs/previews/navigation-layout-appshell.webp +0 -0
  287. package/docs/previews/navigation-layout-authcard-split.webp +0 -0
  288. package/docs/previews/navigation-layout-authcard.webp +0 -0
  289. package/docs/previews/navigation-layout-background.webp +0 -0
  290. package/docs/previews/navigation-layout-breadcrumb.webp +0 -0
  291. package/docs/previews/navigation-layout-doc-api.webp +0 -0
  292. package/docs/previews/navigation-layout-doc-blocks.webp +0 -0
  293. package/docs/previews/navigation-layout-doc.webp +0 -0
  294. package/docs/previews/navigation-layout-editorlayout.webp +0 -0
  295. package/docs/previews/navigation-layout-hero.webp +0 -0
  296. package/docs/previews/navigation-layout-landinglayout.webp +0 -0
  297. package/docs/previews/navigation-layout-listdetailslayout.webp +0 -0
  298. package/docs/previews/navigation-layout-pager.webp +0 -0
  299. package/docs/previews/navigation-layout-recordpage.webp +0 -0
  300. package/docs/previews/navigation-layout-settingslayout.webp +0 -0
  301. package/docs/previews/navigation-layout-sidebar.webp +0 -0
  302. package/docs/previews/navigation-layout-steps.webp +0 -0
  303. package/docs/previews/navigation-layout-stickyactionbar.webp +0 -0
  304. package/docs/previews/navigation-layout-threadlayout-pages.webp +0 -0
  305. package/docs/previews/navigation-layout-toc.webp +0 -0
  306. package/docs/previews/overlays-menus-contextmenu.webp +0 -0
  307. package/docs/previews/overlays-menus-dialog.webp +0 -0
  308. package/docs/previews/overlays-menus-drawer.webp +0 -0
  309. package/docs/previews/overlays-menus-dropdownmenu.webp +0 -0
  310. package/docs/previews/overlays-menus-hovercard.webp +0 -0
  311. package/docs/previews/overlays-menus-popover.webp +0 -0
  312. package/docs/previews/overlays-menus-sheet.webp +0 -0
  313. package/docs/previews/overlays-menus-tooltip.webp +0 -0
  314. package/docs/previews/primitives-accordion.webp +0 -0
  315. package/docs/previews/primitives-card.webp +0 -0
  316. package/docs/previews/primitives-collapsible.webp +0 -0
  317. package/docs/previews/primitives-extendedlabel.webp +0 -0
  318. package/docs/previews/primitives-helpertext.webp +0 -0
  319. package/docs/previews/primitives-input.webp +0 -0
  320. package/docs/previews/primitives-inputgroup.webp +0 -0
  321. package/docs/previews/primitives-label.webp +0 -0
  322. package/docs/previews/primitives-scrollarea.webp +0 -0
  323. package/docs/previews/primitives-segmentednav.webp +0 -0
  324. package/docs/previews/primitives-tabs.webp +0 -0
  325. package/docs/previews/primitives-tabsnav.webp +0 -0
  326. package/docs/previews/primitives-textarea.webp +0 -0
  327. package/docs/previews/primitives-toggle.webp +0 -0
  328. package/docs/previews/primitives-togglegroup.webp +0 -0
  329. package/docs/previews/primitives-typography.webp +0 -0
  330. package/docs/previews/rich-widgets-calculator-conversion.webp +0 -0
  331. package/docs/previews/rich-widgets-chat-action-proposal.webp +0 -0
  332. package/docs/previews/rich-widgets-chat-advanced.webp +0 -0
  333. package/docs/previews/rich-widgets-chat-composer.webp +0 -0
  334. package/docs/previews/rich-widgets-chat-inbox.webp +0 -0
  335. package/docs/previews/rich-widgets-chat-overview.webp +0 -0
  336. package/docs/previews/rich-widgets-chat-thread.webp +0 -0
  337. package/docs/previews/rich-widgets-chat-widget.webp +0 -0
  338. package/docs/previews/rich-widgets-codeeditor.webp +0 -0
  339. package/docs/previews/rich-widgets-compacteditor.webp +0 -0
  340. package/docs/previews/rich-widgets-documenteditor.webp +0 -0
  341. package/docs/previews/rich-widgets-drawing.webp +0 -0
  342. package/docs/previews/rich-widgets-emojipicker.webp +0 -0
  343. package/docs/previews/rich-widgets-eventcalendar.webp +0 -0
  344. package/docs/previews/rich-widgets-kanban-phone-layout.webp +0 -0
  345. package/docs/previews/rich-widgets-kanban.webp +0 -0
  346. package/docs/previews/rich-widgets-mentionlist.webp +0 -0
  347. package/docs/previews/rich-widgets-native-charts-areachart.webp +0 -0
  348. package/docs/previews/rich-widgets-native-charts-barchart.webp +0 -0
  349. package/docs/previews/rich-widgets-native-charts-combochart.webp +0 -0
  350. package/docs/previews/rich-widgets-native-charts-donutchart.webp +0 -0
  351. package/docs/previews/rich-widgets-native-charts-funnelchart.webp +0 -0
  352. package/docs/previews/rich-widgets-native-charts-heatmapchart.webp +0 -0
  353. package/docs/previews/rich-widgets-native-charts-linechart-reference.webp +0 -0
  354. package/docs/previews/rich-widgets-native-charts-linechart.webp +0 -0
  355. package/docs/previews/rich-widgets-native-charts-palette.webp +0 -0
  356. package/docs/previews/rich-widgets-native-charts-piechart.webp +0 -0
  357. package/docs/previews/rich-widgets-native-charts-radarchart.webp +0 -0
  358. package/docs/previews/rich-widgets-native-charts-radialbarchart.webp +0 -0
  359. package/docs/previews/rich-widgets-native-charts-scatterchart.webp +0 -0
  360. package/docs/previews/rich-widgets-questioncard-rich-content.webp +0 -0
  361. package/docs/previews/rich-widgets-questionmediaview.webp +0 -0
  362. package/docs/previews/rich-widgets-questionnavigator.webp +0 -0
  363. package/docs/previews/rich-widgets-quiz.webp +0 -0
  364. package/docs/previews/rich-widgets-richchatcomposer.webp +0 -0
  365. package/docs/previews/rich-widgets-richtexteditor.webp +0 -0
  366. package/docs/previews/rich-widgets-richtextviewer.webp +0 -0
  367. package/docs/previews/selection-choice-autocomplete.webp +0 -0
  368. package/docs/previews/selection-choice-checkbox.webp +0 -0
  369. package/docs/previews/selection-choice-checkboxgroup.webp +0 -0
  370. package/docs/previews/selection-choice-checkcardfield.webp +0 -0
  371. package/docs/previews/selection-choice-chipgroupfield.webp +0 -0
  372. package/docs/previews/selection-choice-choicecardgroup.webp +0 -0
  373. package/docs/previews/selection-choice-combobox.webp +0 -0
  374. package/docs/previews/selection-choice-comboboxfield.webp +0 -0
  375. package/docs/previews/selection-choice-optiontile.webp +0 -0
  376. package/docs/previews/selection-choice-radiogroup.webp +0 -0
  377. package/docs/previews/selection-choice-select.webp +0 -0
  378. package/docs/previews/selection-choice-selectfield.webp +0 -0
  379. package/docs/previews/selection-choice-sortablelist.webp +0 -0
  380. package/docs/previews/selection-choice-switcher.webp +0 -0
  381. package/docs/previews/selection-choice-transferlist.webp +0 -0
  382. package/docs/previews/selection-choice-treeselectfield.webp +0 -0
  383. package/docs/roadmap.md +13 -10
  384. package/docs/troubleshooting.md +66 -6
  385. package/lib/components/components.css +7 -1
  386. package/lib/components/theme-tokens.css +7 -0
  387. package/lib/components/ui/dates/duration-field/duration-field-expressive.css +2 -63
  388. package/lib/components/ui/dates/picker-trigger/typed-box-expressive.css +30 -21
  389. package/lib/components/ui/fields/number-field/number-field-score.css +151 -0
  390. package/lib/components/ui/fields/quantity-field/quantity-field.css +117 -0
  391. package/lib/components/ui/primitives/field-box/field-box-parts.css +1 -2
  392. package/lib/components/ui/primitives/field-box/field-box-tokens.css +54 -36
  393. package/lib/components/ui/primitives/field-box/field-box.css +44 -86
  394. package/lib/components/ui/primitives/field-box/field-stepper.css +129 -0
  395. package/lib/styles.css +2 -0
  396. package/lib/themes/ambre.css +5 -1
  397. package/lib/themes/ardoise.css +5 -1
  398. package/lib/themes/bleumono.css +5 -1
  399. package/lib/themes/bluemoon.css +5 -1
  400. package/lib/themes/corail.css +5 -1
  401. package/lib/themes/foret.css +5 -1
  402. package/lib/themes/lavande.css +5 -1
  403. package/lib/themes/menthe.css +5 -1
  404. package/lib/themes/ocean.css +5 -1
  405. package/lib/themes/pink.css +5 -1
  406. package/lib/themes/prune.css +5 -1
  407. package/lib/themes/sable.css +5 -1
  408. package/lib/themes/slate.css +5 -1
  409. package/lib/themes/teal.css +5 -1
  410. package/package.json +2 -2
  411. package/dist/currency-field-CabGnVO9.js +0 -289
  412. package/dist/input-group-CPMSQcBx.js +0 -70
  413. package/dist/percent-field-TWyupyr_.js +0 -14
  414. package/dist/text-field-BAdY-kpO.js +0 -59
@@ -3,39 +3,48 @@
3
3
  * only, so not in the shared theme-tokens.css. Declared again under .dark so
4
4
  * a dark wrapper computes them from its own colours. Unlayered, like the
5
5
  * theme tokens: an app's own `:root` / `.dark` rule after the import wins.
6
- * The filled tint is translucent, as `bg-primary/10` (the tint fields had
7
- * before, which light keeps exactly). Dark: the filled tint is stronger,
8
- * so a filled field still reads apart from an empty one on the near-black
9
- * page (≥ 1.10:1 between the two, ≥ 1.15:1 against the page;
10
- * Guides/Accessibility/Field contrast measures both). */
6
+ * The Refined look: the surface is the card, the rest border keeps 3:1
7
+ * against it (1.4.11; Guides/Accessibility/Field contrast measures both
8
+ * themes), the focus ring is 4px. There is no filled tint any more: the
9
+ * `-filled` tokens stay, as aliases of the rest values, so a read resolves;
10
+ * an override no longer paints: style on `data-filled` instead. */
11
11
  :root,
12
12
  [data-nxgt-theme] {
13
- --nxgt-field-bg: color-mix(in oklab, var(--foreground) 2%, var(--background));
13
+ --nxgt-field-bg: var(--card);
14
14
  --nxgt-field-bg-hover: color-mix(
15
15
  in oklab,
16
- var(--foreground) 6.5%,
17
- var(--background)
16
+ var(--foreground) 2.5%,
17
+ var(--card)
18
18
  );
19
- --nxgt-field-bg-filled: color-mix(in oklab, var(--primary) 10%, transparent);
20
- --nxgt-field-bg-filled-hover: color-mix(
19
+ /* Aliases: a filled field looks like an empty one. */
20
+ --nxgt-field-bg-filled: var(--nxgt-field-bg);
21
+ --nxgt-field-bg-filled-hover: var(--nxgt-field-bg-hover);
22
+ --nxgt-field-bg-invalid: var(--nxgt-field-bg);
23
+ --nxgt-field-bg-disabled: color-mix(
21
24
  in oklab,
22
- var(--primary) 14%,
23
- transparent
25
+ var(--foreground) 5%,
26
+ var(--card)
24
27
  );
25
- --nxgt-field-bg-invalid: color-mix(
28
+ --nxgt-field-border: color-mix(in oklab, var(--foreground) 52%, var(--card));
29
+ --nxgt-field-border-hover: color-mix(
26
30
  in oklab,
27
- var(--error) 5%,
28
- var(--background)
31
+ var(--foreground) 74%,
32
+ var(--card)
29
33
  );
30
- --nxgt-field-border: color-mix(in oklab, var(--foreground) 14%, transparent);
31
- --nxgt-field-border-hover: color-mix(
34
+ --nxgt-field-border-readonly: color-mix(
35
+ in oklab,
36
+ var(--foreground) 50%,
37
+ var(--card)
38
+ );
39
+ --nxgt-field-border-disabled: color-mix(
32
40
  in oklab,
33
41
  var(--foreground) 24%,
34
- transparent
42
+ var(--card)
35
43
  );
36
44
  --nxgt-field-focus: var(--primary-text);
37
- --nxgt-field-halo: color-mix(in oklab, var(--primary-text) 22%, transparent);
38
- --nxgt-field-halo-invalid: color-mix(in oklab, var(--error) 22%, transparent);
45
+ --nxgt-field-error: var(--error-text);
46
+ --nxgt-field-halo: color-mix(in oklab, var(--primary-text) 24%, transparent);
47
+ --nxgt-field-halo-invalid: color-mix(in oklab, var(--error) 26%, transparent);
39
48
  --nxgt-field-well: color-mix(in oklab, var(--foreground) 6%, transparent);
40
49
  --nxgt-field-radius: 0.5rem;
41
50
  --nxgt-field-inner-radius: 0.25rem;
@@ -70,32 +79,41 @@
70
79
  var(--muted-foreground) 78%,
71
80
  var(--foreground)
72
81
  );
73
- --nxgt-field-bg: color-mix(in oklab, var(--foreground) 5%, var(--background));
82
+ --nxgt-field-bg: var(--card);
74
83
  --nxgt-field-bg-hover: color-mix(
75
84
  in oklab,
76
- var(--foreground) 9%,
77
- var(--background)
85
+ var(--foreground) 2.5%,
86
+ var(--card)
78
87
  );
79
- --nxgt-field-bg-filled: color-mix(in oklab, var(--primary) 26%, transparent);
80
- --nxgt-field-bg-filled-hover: color-mix(
88
+ /* Aliases: a filled field looks like an empty one. */
89
+ --nxgt-field-bg-filled: var(--nxgt-field-bg);
90
+ --nxgt-field-bg-filled-hover: var(--nxgt-field-bg-hover);
91
+ --nxgt-field-bg-invalid: var(--nxgt-field-bg);
92
+ --nxgt-field-bg-disabled: color-mix(
81
93
  in oklab,
82
- var(--primary) 32%,
83
- transparent
94
+ var(--foreground) 5%,
95
+ var(--card)
84
96
  );
85
- --nxgt-field-bg-invalid: color-mix(
97
+ --nxgt-field-border: color-mix(in oklab, var(--foreground) 52%, var(--card));
98
+ --nxgt-field-border-hover: color-mix(
86
99
  in oklab,
87
- var(--error) 10%,
88
- var(--background)
100
+ var(--foreground) 74%,
101
+ var(--card)
89
102
  );
90
- --nxgt-field-border: color-mix(in oklab, var(--foreground) 16%, transparent);
91
- --nxgt-field-border-hover: color-mix(
103
+ --nxgt-field-border-readonly: color-mix(
104
+ in oklab,
105
+ var(--foreground) 50%,
106
+ var(--card)
107
+ );
108
+ --nxgt-field-border-disabled: color-mix(
92
109
  in oklab,
93
- var(--foreground) 32%,
94
- transparent
110
+ var(--foreground) 24%,
111
+ var(--card)
95
112
  );
96
113
  --nxgt-field-focus: var(--primary-text);
97
- --nxgt-field-halo: color-mix(in oklab, var(--primary-text) 35%, transparent);
98
- --nxgt-field-halo-invalid: color-mix(in oklab, var(--error) 40%, transparent);
114
+ --nxgt-field-error: var(--error-text);
115
+ --nxgt-field-halo: color-mix(in oklab, var(--primary-text) 24%, transparent);
116
+ --nxgt-field-halo-invalid: color-mix(in oklab, var(--error) 26%, transparent);
99
117
  --nxgt-field-well: color-mix(in oklab, var(--foreground) 10%, transparent);
100
118
  --nxgt-field-list-shadow:
101
119
  0 0 0 1px color-mix(in oklab, var(--foreground) 12%, transparent),
@@ -1,18 +1,14 @@
1
1
  /* The field box: the look of every text field and picker trigger (Input,
2
- * Textarea, InputGroup, then Select, Combobox, the date fields). A soft
3
- * neutral surface, the primary tint once it holds a value, a hairline that
4
- * firms on hover, the border in primary with a 3px halo on focus.
2
+ * Textarea, InputGroup, then Select, Combobox, the date fields). The
3
+ * Refined look: the card as surface, a 1px border that keeps 3:1 and firms
4
+ * on hover, the primary border with a 4px ring on focus. A filled field
5
+ * looks like an empty one.
5
6
  * Look only: height and padding stay with each component, and a utility
6
7
  * class still wins (this is @layer components).
7
8
  *
8
- * Filled: `:placeholder-shown` for an <input> or <textarea> (CSS alone, no
9
- * state: the same markup on the server); `data-filled` on any other box,
10
- * which never matches the pseudo-class (#324), and on a file, date, time,
11
- * month, week, colour or range input, which never shows a placeholder; a
12
- * box holding an input-group control reads the control's; a <select> is
13
- * filled while its chosen option has a value, a Select trigger while
14
- * Radix does not mark it `data-placeholder`, and a chips box while it
15
- * holds a chip.
9
+ * Filled: `data-filled` stays on a box that holds a value (components set
10
+ * it, apps may style on it), but it paints nothing: the `-filled` tokens
11
+ * alias the rest ones.
16
12
  * Focus: the box itself, or an input or a combobox button directly in it
17
13
  * (TreeSelectField's box beside its chips), or the input among a chips
18
14
  * box's values.
@@ -23,7 +19,7 @@
23
19
  * field-box-modes.css. */
24
20
  @layer components {
25
21
  .nxgt-field-box {
26
- /* The surface at rest and under the pointer; filled swaps both. */
22
+ /* The surface at rest and under the pointer. */
27
23
  --_field-rest: var(--nxgt-field-bg);
28
24
  --_field-hover: var(--nxgt-field-bg-hover);
29
25
  border: 1px solid var(--nxgt-field-border);
@@ -41,53 +37,8 @@
41
37
  var(--nxgt-spring-fast, ease-out);
42
38
  }
43
39
 
44
- /* Filled. A file, date, time, month, week, colour or range input never
45
- * shows its placeholder, so `:placeholder-shown` cannot tell it is
46
- * empty: such an input tints only with `data-filled`. */
47
- .nxgt-field-box:where(
48
- :is(
49
- input:not(
50
- :is(
51
- [type="file"],
52
- [type="date"],
53
- [type="time"],
54
- [type="datetime-local"],
55
- [type="month"],
56
- [type="week"],
57
- [type="color"],
58
- [type="range"]
59
- )
60
- ),
61
- textarea
62
- ):not(:placeholder-shown),
63
- [data-filled]:not([data-filled="false"]),
64
- select:has(option:checked:not([value=""])),
65
- [data-slot="select-trigger"]:not([data-placeholder]),
66
- [data-slot="combobox-chips"]:has(
67
- [data-slot="combobox-chip"],
68
- [data-slot="chip"]
69
- ),
70
- :has(
71
- [data-slot="input-group-control"]:not(
72
- :is(
73
- [type="file"],
74
- [type="date"],
75
- [type="time"],
76
- [type="datetime-local"],
77
- [type="month"],
78
- [type="week"],
79
- [type="color"],
80
- [type="range"]
81
- )
82
- ):not(:placeholder-shown)
83
- )
84
- ) {
85
- --_field-rest: var(--nxgt-field-bg-filled);
86
- --_field-hover: var(--nxgt-field-bg-filled-hover);
87
- }
88
-
89
40
  /* Every state below is wrapped in :where(), so they all weigh one class
90
- * and their order decides: hover, focus, error, read-only, disabled. */
41
+ * and their order decides: hover, read-only, disabled, focus, error. */
91
42
 
92
43
  /* Hover: never on a disabled or read-only box. */
93
44
  .nxgt-field-box:where(:hover):where(
@@ -103,7 +54,31 @@
103
54
  background-color: var(--_field-hover);
104
55
  }
105
56
 
106
- /* Focus: the border in primary and a soft halo outside. */
57
+ /* Read-only: no surface, a dashed hairline. Before the focus rule, so a
58
+ * focused read-only box still shows its ring. */
59
+ .nxgt-field-box:where(
60
+ :is([readonly], [data-readonly]):not(:disabled),
61
+ :has([data-slot="input-group-control"][readonly])
62
+ ) {
63
+ border-style: dashed;
64
+ border-color: var(--nxgt-field-border-readonly);
65
+ background-color: transparent;
66
+ }
67
+
68
+ /* Disabled: a recessed surface and a light border, the box at 62 %. */
69
+ .nxgt-field-box:where(
70
+ :disabled,
71
+ [data-disabled],
72
+ :has([data-slot="input-group-control"]:disabled)
73
+ ) {
74
+ cursor: not-allowed;
75
+ border-color: var(--nxgt-field-border-disabled);
76
+ background-color: var(--nxgt-field-bg-disabled);
77
+ opacity: 0.62;
78
+ }
79
+
80
+ /* Focus: the 1px border and a 1px line in primary, and a 4px ring
81
+ * outside (it replaces the 3px halo). */
107
82
  .nxgt-field-box:where(
108
83
  :is(input, textarea, select, button, [role="combobox"]):focus-visible,
109
84
  [data-focused],
@@ -112,17 +87,19 @@
112
87
  :has([data-slot="input-group-control"]:focus-visible)
113
88
  ) {
114
89
  border-color: var(--nxgt-field-focus);
115
- box-shadow: 0 0 0 3px var(--nxgt-field-halo);
90
+ box-shadow:
91
+ 0 0 0 1px var(--nxgt-field-focus),
92
+ 0 0 0 4px var(--nxgt-field-halo);
116
93
  }
117
94
 
118
- /* Error: the border in the error colour and a faint error wash. */
95
+ /* Error: the border in the error text colour and a 1px line inside it. */
119
96
  .nxgt-field-box:where(
120
97
  [aria-invalid="true"],
121
98
  [data-invalid]:not([data-invalid="false"]),
122
99
  :has([data-slot][aria-invalid="true"])
123
100
  ) {
124
- border-color: var(--error);
125
- background-color: var(--nxgt-field-bg-invalid);
101
+ border-color: var(--nxgt-field-error);
102
+ box-shadow: inset 0 0 0 1px var(--nxgt-field-error);
126
103
  }
127
104
  .nxgt-field-box:where(
128
105
  [aria-invalid="true"],
@@ -135,7 +112,9 @@
135
112
  :has(> [data-slot="combobox-chips-values"] > input:focus-visible),
136
113
  :has([data-slot="input-group-control"]:focus-visible)
137
114
  ) {
138
- box-shadow: 0 0 0 3px var(--nxgt-field-halo-invalid);
115
+ box-shadow:
116
+ 0 0 0 1px var(--nxgt-field-error),
117
+ 0 0 0 4px var(--nxgt-field-halo-invalid);
139
118
  }
140
119
  /* Open in error: the error border stays (it outranks the open border,
141
120
  * field-box-parts.css), the error being still there. */
@@ -144,28 +123,7 @@
144
123
  [data-invalid]:not([data-invalid="false"]),
145
124
  :has([data-slot][aria-invalid="true"])
146
125
  ) {
147
- border-color: var(--error);
148
- }
149
-
150
- /* Read-only: no surface, a dashed hairline. */
151
- .nxgt-field-box:where(
152
- :is([readonly], [data-readonly]):not(:disabled),
153
- :has([data-slot="input-group-control"][readonly])
154
- ) {
155
- border-style: dashed;
156
- background-color: transparent;
157
- }
158
-
159
- /* Disabled: the whole box at half strength, on the neutral surface
160
- * (never the filled tint). */
161
- .nxgt-field-box:where(
162
- :disabled,
163
- [data-disabled],
164
- :has([data-slot="input-group-control"]:disabled)
165
- ) {
166
- cursor: not-allowed;
167
- background-color: var(--nxgt-field-bg);
168
- opacity: 0.5;
126
+ border-color: var(--nxgt-field-error);
169
127
  }
170
128
 
171
129
  /* A Select trigger shows the chosen item's children (Radix clones them
@@ -0,0 +1,129 @@
1
+ /* The −/+ pair at the end of a field's box: two tinted round buttons side by
2
+ * side, no divider. DurationField (`.nxgt-duration-step`, its box defines
3
+ * `--_dd-*`) and NumberField (`.nxgt-field-step` inside `.nxgt-field-steps`,
4
+ * which defines them) share these rules. Focus rings are drawn inside the
5
+ * button (an inset outline), never clipped. A coarse pointer gets a 44px
6
+ * target. */
7
+ @layer components {
8
+ .nxgt-field-steps {
9
+ --_dd-btn: color-mix(in oklab, var(--primary) 14%, var(--background));
10
+ --_dd-btn-hover: color-mix(in oklab, var(--primary) 22%, var(--background));
11
+ --_dd-step: 2rem;
12
+ display: flex;
13
+ flex: none;
14
+ align-items: center;
15
+ align-self: stretch;
16
+ gap: 0.5rem;
17
+ padding-inline-end: 0.25rem;
18
+ cursor: default;
19
+ }
20
+ :is(.dark, [data-theme="dark"]) .nxgt-field-steps {
21
+ --_dd-btn: color-mix(in oklab, var(--primary) 34%, var(--background));
22
+ --_dd-btn-hover: color-mix(in oklab, var(--primary) 44%, var(--background));
23
+ }
24
+
25
+ /* The −/+ pair: round, 4px apart on a fine pointer (12px on a coarse one),
26
+ * a ring inside each button. */
27
+ :is(.nxgt-duration-step, .nxgt-field-step) {
28
+ display: grid;
29
+ flex: none;
30
+ place-items: center;
31
+ inline-size: var(--_dd-step);
32
+ block-size: var(--_dd-step);
33
+ border-radius: var(--nxgt-shape-corner-full);
34
+ background: var(--_dd-btn);
35
+ color: var(--primary-text);
36
+ cursor: pointer;
37
+ transition: background-color var(--nxgt-motion-effects-default-duration)
38
+ var(--nxgt-motion-effects-default);
39
+ }
40
+ :is(.nxgt-duration-step, .nxgt-field-step)
41
+ + :is(.nxgt-duration-step, .nxgt-field-step) {
42
+ margin-inline-start: -0.25rem;
43
+ }
44
+ :is(.nxgt-duration-step, .nxgt-field-step):hover:not(
45
+ :disabled,
46
+ [aria-disabled="true"]
47
+ ) {
48
+ background: var(--_dd-btn-hover);
49
+ }
50
+ :is(.nxgt-duration-step, .nxgt-field-step):focus-visible {
51
+ outline: 2px solid var(--_fx-line, var(--nxgt-field-focus));
52
+ outline-offset: -2px;
53
+ }
54
+ :is(.nxgt-duration-step, .nxgt-field-step):is(
55
+ :disabled,
56
+ [aria-disabled="true"]
57
+ ) {
58
+ cursor: not-allowed;
59
+ }
60
+ :is(.nxgt-duration-step, .nxgt-field-step)[aria-disabled="true"]:not(
61
+ :disabled
62
+ ),
63
+ .nxgt-field-step:disabled {
64
+ opacity: 0.38;
65
+ }
66
+ .nxgt-duration-box[data-disabled] .nxgt-duration-step,
67
+ .nxgt-field-steps[data-disabled] .nxgt-field-step {
68
+ background: transparent;
69
+ }
70
+ :is(.nxgt-duration-step, .nxgt-field-step) svg {
71
+ inline-size: 1rem;
72
+ block-size: 1rem;
73
+ }
74
+
75
+ /* NumberField: the box is 44px tall on a coarse pointer, so the circle
76
+ * stays 32px and a transparent 6px ring makes the 44px target. */
77
+ @media (pointer: coarse) {
78
+ .nxgt-field-step {
79
+ inline-size: 2.75rem;
80
+ block-size: 2.75rem;
81
+ border: 0.375rem solid transparent;
82
+ background-clip: padding-box;
83
+ }
84
+ .nxgt-field-step + .nxgt-field-step {
85
+ margin-inline-start: -0.5rem;
86
+ }
87
+ .nxgt-field-step:focus-visible {
88
+ outline-offset: -0.375rem;
89
+ }
90
+ }
91
+
92
+ @media (forced-colors: active) and (pointer: coarse) {
93
+ /* Keep the 44px target: the transparent ring stays, the 1px outline of
94
+ * the circle is an inset ring. */
95
+ .nxgt-field-step {
96
+ border: 0.375rem solid transparent;
97
+ background-clip: padding-box;
98
+ box-shadow: inset 0 0 0 1px ButtonBorder;
99
+ }
100
+ .nxgt-field-step[aria-disabled="true"],
101
+ .nxgt-field-step:disabled {
102
+ box-shadow: inset 0 0 0 1px GrayText;
103
+ }
104
+ }
105
+
106
+ @media (prefers-reduced-motion: reduce) {
107
+ :is(.nxgt-duration-step, .nxgt-field-step) {
108
+ transition: none;
109
+ }
110
+ }
111
+ @media (forced-colors: active) {
112
+ :is(.nxgt-duration-step, .nxgt-field-step) {
113
+ forced-color-adjust: none;
114
+ border: 1px solid ButtonBorder;
115
+ background: ButtonFace;
116
+ color: ButtonText;
117
+ }
118
+ :is(.nxgt-duration-step, .nxgt-field-step)[aria-disabled="true"],
119
+ .nxgt-field-step:disabled,
120
+ .nxgt-duration-step:disabled {
121
+ border-color: GrayText;
122
+ color: GrayText;
123
+ opacity: 1;
124
+ }
125
+ :is(.nxgt-duration-step, .nxgt-field-step):focus-visible {
126
+ outline-color: Highlight;
127
+ }
128
+ }
129
+ }
package/lib/styles.css CHANGED
@@ -92,10 +92,12 @@
92
92
  --color-error-text: var(--error-text);
93
93
  --color-success: var(--success);
94
94
  --color-success-foreground: var(--success-foreground);
95
+ --color-success-text: var(--success-text);
95
96
  --color-info: var(--info);
96
97
  --color-info-foreground: var(--info-foreground);
97
98
  --color-warning: var(--warning);
98
99
  --color-warning-foreground: var(--warning-foreground);
100
+ --color-warning-text: var(--warning-text);
99
101
  --color-destructive: var(--destructive);
100
102
  --color-border: var(--border);
101
103
  --color-input: var(--input);
@@ -1,6 +1,6 @@
1
1
  /* Theme "ambre", generated.
2
2
  * Seeds: primary oklch(0.52 0.13 48), secondary oklch(0.5 0.09 95), tertiary oklch(0.5 0.14 350), neutral hue 65, tint 0.85.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  * hue-near-status: The primary's hue 48 is 14° from warning (62): they may read alike. Keep an icon and a word with every status.
5
5
  */
6
6
  [data-nxgt-theme="ambre"] {
@@ -37,10 +37,12 @@
37
37
  --error-text: color-mix(in oklab, var(--error) 92%, black);
38
38
  --success: oklch(0.46 0.118 184.7);
39
39
  --success-foreground: oklch(0.984 0.003 65);
40
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
40
41
  --info: oklch(0.48 0.165 254.62);
41
42
  --info-foreground: oklch(0.984 0.003 65);
42
43
  --warning: oklch(0.52 0.13 62);
43
44
  --warning-foreground: oklch(0.984 0.003 65);
45
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
44
46
  --destructive: var(--error);
45
47
  --border: oklch(0.912 0.0136 65);
46
48
  --input: oklch(0.912 0.0136 65);
@@ -108,10 +110,12 @@
108
110
  --error-text: color-mix(in oklab, var(--error) 76%, white);
109
111
  --success: oklch(0.6 0.118 184.7);
110
112
  --success-foreground: oklch(0.995 0.002 65);
113
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
111
114
  --info: oklch(0.707 0.165 254.62);
112
115
  --info-foreground: oklch(0.995 0.002 65);
113
116
  --warning: oklch(0.7 0.15 70);
114
117
  --warning-foreground: oklch(0.995 0.002 65);
118
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
115
119
  --destructive: oklch(0.704 0.191 22.216);
116
120
  --border: oklch(0.289 0.0213 65);
117
121
  --input: oklch(0.328 0.0229 65);
@@ -1,6 +1,6 @@
1
1
  /* Theme "ardoise", generated.
2
2
  * Seeds: primary oklch(0.45 0.065 252), secondary oklch(0.48 0.05 215), tertiary oklch(0.48 0.1 290), neutral hue 250, tint 0.7.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  */
5
5
  [data-nxgt-theme="ardoise"] {
6
6
  --radius: 0.375rem;
@@ -36,10 +36,12 @@
36
36
  --error-text: color-mix(in oklab, var(--error) 92%, black);
37
37
  --success: oklch(0.46 0.118 184.7);
38
38
  --success-foreground: oklch(0.984 0.003 250);
39
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
39
40
  --info: oklch(0.48 0.165 254.62);
40
41
  --info-foreground: oklch(0.984 0.003 250);
41
42
  --warning: oklch(0.52 0.13 62);
42
43
  --warning-foreground: oklch(0.984 0.003 250);
44
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
43
45
  --destructive: var(--error);
44
46
  --border: oklch(0.912 0.0112 250);
45
47
  --input: oklch(0.912 0.0112 250);
@@ -107,10 +109,12 @@
107
109
  --error-text: color-mix(in oklab, var(--error) 76%, white);
108
110
  --success: oklch(0.6 0.118 184.7);
109
111
  --success-foreground: oklch(0.995 0.002 250);
112
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
110
113
  --info: oklch(0.707 0.165 254.62);
111
114
  --info-foreground: oklch(0.995 0.002 250);
112
115
  --warning: oklch(0.7 0.15 70);
113
116
  --warning-foreground: oklch(0.995 0.002 250);
117
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
114
118
  --destructive: oklch(0.704 0.191 22.216);
115
119
  --border: oklch(0.289 0.0175 250);
116
120
  --input: oklch(0.328 0.0189 250);
@@ -1,6 +1,6 @@
1
1
  /* Theme "bleumono", generated.
2
2
  * Seeds: primary oklch(0.46 0.13 255), secondary oklch(0.55 0.06 255), tertiary oklch(0.38 0.17 255), neutral hue 255, tint 1.1.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  * lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
5
5
  * chroma-lowered: tertiary: chroma 0.170 to 0.125 (lowered to fit sRGB or AA).
6
6
  * hue-near-status: The primary's hue 255 is 0° from info (254.624): they may read alike. Keep an icon and a word with every status.
@@ -39,10 +39,12 @@
39
39
  --error-text: color-mix(in oklab, var(--error) 92%, black);
40
40
  --success: oklch(0.46 0.118 184.7);
41
41
  --success-foreground: oklch(0.984 0.003 255);
42
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
42
43
  --info: oklch(0.48 0.165 254.62);
43
44
  --info-foreground: oklch(0.984 0.003 255);
44
45
  --warning: oklch(0.52 0.13 62);
45
46
  --warning-foreground: oklch(0.984 0.003 255);
47
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
46
48
  --destructive: var(--error);
47
49
  --border: oklch(0.912 0.0176 255);
48
50
  --input: oklch(0.912 0.0176 255);
@@ -110,10 +112,12 @@
110
112
  --error-text: color-mix(in oklab, var(--error) 76%, white);
111
113
  --success: oklch(0.6 0.118 184.7);
112
114
  --success-foreground: oklch(0.995 0.002 255);
115
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
113
116
  --info: oklch(0.707 0.165 254.62);
114
117
  --info-foreground: oklch(0.995 0.002 255);
115
118
  --warning: oklch(0.7 0.15 70);
116
119
  --warning-foreground: oklch(0.995 0.002 255);
120
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
117
121
  --destructive: oklch(0.704 0.191 22.216);
118
122
  --border: oklch(0.289 0.0275 255);
119
123
  --input: oklch(0.328 0.0297 255);
@@ -1,6 +1,6 @@
1
1
  /* Theme "bluemoon", generated.
2
2
  * Seeds: primary oklch(0.45 0.12 265), secondary oklch(0.55 0.02 250), tertiary oklch(0.62 0.08 290), neutral hue 265, tint 1.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  * lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
5
5
  * lightness-moved: tertiary: lightness 0.620 to 0.563 for AA.
6
6
  * hue-near-status: The primary's hue 265 is 10° from info (254.624): they may read alike. Keep an icon and a word with every status.
@@ -39,10 +39,12 @@
39
39
  --error-text: color-mix(in oklab, var(--error) 92%, black);
40
40
  --success: oklch(0.46 0.118 184.7);
41
41
  --success-foreground: oklch(0.984 0.003 265);
42
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
42
43
  --info: oklch(0.48 0.165 254.62);
43
44
  --info-foreground: oklch(0.984 0.003 265);
44
45
  --warning: oklch(0.52 0.13 62);
45
46
  --warning-foreground: oklch(0.984 0.003 265);
47
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
46
48
  --destructive: var(--error);
47
49
  --border: oklch(0.912 0.016 265);
48
50
  --input: oklch(0.912 0.016 265);
@@ -110,10 +112,12 @@
110
112
  --error-text: color-mix(in oklab, var(--error) 76%, white);
111
113
  --success: oklch(0.6 0.118 184.7);
112
114
  --success-foreground: oklch(0.995 0.002 265);
115
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
113
116
  --info: oklch(0.707 0.165 254.62);
114
117
  --info-foreground: oklch(0.995 0.002 265);
115
118
  --warning: oklch(0.7 0.15 70);
116
119
  --warning-foreground: oklch(0.995 0.002 265);
120
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
117
121
  --destructive: oklch(0.704 0.191 22.216);
118
122
  --border: oklch(0.289 0.025 265);
119
123
  --input: oklch(0.328 0.027 265);
@@ -1,6 +1,6 @@
1
1
  /* Theme "corail", generated.
2
2
  * Seeds: primary oklch(0.58 0.17 35), secondary oklch(0.52 0.1 70), tertiary oklch(0.5 0.1 200), neutral hue 30, tint 0.8.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  * lightness-moved: primary: lightness 0.580 to 0.575 for AA.
5
5
  * chroma-lowered: tertiary: chroma 0.100 to 0.085 (lowered to fit sRGB or AA).
6
6
  * hue-near-status: The primary's hue 35 is 8° from error (27.325): they may read alike. Keep an icon and a word with every status.
@@ -39,10 +39,12 @@
39
39
  --error-text: color-mix(in oklab, var(--error) 92%, black);
40
40
  --success: oklch(0.46 0.118 184.7);
41
41
  --success-foreground: oklch(0.984 0.003 30);
42
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
42
43
  --info: oklch(0.48 0.165 254.62);
43
44
  --info-foreground: oklch(0.984 0.003 30);
44
45
  --warning: oklch(0.52 0.13 62);
45
46
  --warning-foreground: oklch(0.984 0.003 30);
47
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
46
48
  --destructive: var(--error);
47
49
  --border: oklch(0.912 0.0128 30);
48
50
  --input: oklch(0.912 0.0128 30);
@@ -110,10 +112,12 @@
110
112
  --error-text: color-mix(in oklab, var(--error) 76%, white);
111
113
  --success: oklch(0.6 0.118 184.7);
112
114
  --success-foreground: oklch(0.995 0.002 30);
115
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
113
116
  --info: oklch(0.707 0.165 254.62);
114
117
  --info-foreground: oklch(0.995 0.002 30);
115
118
  --warning: oklch(0.7 0.15 70);
116
119
  --warning-foreground: oklch(0.995 0.002 30);
120
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
117
121
  --destructive: oklch(0.704 0.191 22.216);
118
122
  --border: oklch(0.289 0.02 30);
119
123
  --input: oklch(0.328 0.0216 30);
@@ -1,6 +1,6 @@
1
1
  /* Theme "foret", generated.
2
2
  * Seeds: primary oklch(0.48 0.1 152), secondary oklch(0.5 0.08 118), tertiary oklch(0.5 0.1 55), neutral hue 140, tint 0.8.
3
- * Contrast: 81 pairs, 0 failing.
3
+ * Contrast: 89 pairs, 0 failing.
4
4
  */
5
5
  [data-nxgt-theme="foret"] {
6
6
  --radius: 0.5rem;
@@ -36,10 +36,12 @@
36
36
  --error-text: color-mix(in oklab, var(--error) 92%, black);
37
37
  --success: oklch(0.46 0.118 184.7);
38
38
  --success-foreground: oklch(0.984 0.003 140);
39
+ --success-text: color-mix(in oklab, var(--success) 92%, black);
39
40
  --info: oklch(0.48 0.165 254.62);
40
41
  --info-foreground: oklch(0.984 0.003 140);
41
42
  --warning: oklch(0.52 0.13 62);
42
43
  --warning-foreground: oklch(0.984 0.003 140);
44
+ --warning-text: color-mix(in oklab, var(--warning) 92%, black);
43
45
  --destructive: var(--error);
44
46
  --border: oklch(0.912 0.0128 140);
45
47
  --input: oklch(0.912 0.0128 140);
@@ -107,10 +109,12 @@
107
109
  --error-text: color-mix(in oklab, var(--error) 76%, white);
108
110
  --success: oklch(0.6 0.118 184.7);
109
111
  --success-foreground: oklch(0.995 0.002 140);
112
+ --success-text: color-mix(in oklab, var(--success) 76%, white);
110
113
  --info: oklch(0.707 0.165 254.62);
111
114
  --info-foreground: oklch(0.995 0.002 140);
112
115
  --warning: oklch(0.7 0.15 70);
113
116
  --warning-foreground: oklch(0.995 0.002 140);
117
+ --warning-text: color-mix(in oklab, var(--warning) 76%, white);
114
118
  --destructive: oklch(0.704 0.191 22.216);
115
119
  --border: oklch(0.289 0.02 140);
116
120
  --input: oklch(0.328 0.0216 140);