@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.
- package/CHANGELOG.md +50 -0
- package/README.md +8 -3
- package/dist/{alert-dialog-D37eph4I.js → alert-dialog-D4r0Kn9h.js} +1 -1
- package/dist/{async-slice-BSqwhAj-.js → async-slice-Bx438UlG.js} +1 -1
- package/dist/{button-CG9SBAT-.js → button-Z_xcg10A.js} +1 -1
- package/dist/{calculator-YD3I3y-I.js → calculator-DGxClOmW.js} +10 -10
- package/dist/calculator-field.js +6 -6
- package/dist/{calculator-segment-Cjec9zi7.js → calculator-segment-DQE1EFdw.js} +1 -1
- package/dist/calculator.js +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-BbUSBl3i.js → chip-Bb9SM3Ly.js} +2 -2
- package/dist/{code-editor-ZEM7AAcs.js → code-editor-Cw-dOrn2.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-CAuHPrHd.js → code-language-items-BVfxGKiv.js} +2 -2
- package/dist/components/components.css +7 -1
- package/dist/components/theme-tokens.css +7 -0
- package/dist/components/ui/dates/duration-field/duration-field-expressive.css +2 -63
- package/dist/components/ui/dates/picker-trigger/typed-box-expressive.css +30 -21
- package/dist/components/ui/fields/number-field/number-field-score.css +151 -0
- package/dist/components/ui/fields/quantity-field/quantity-field.css +117 -0
- package/dist/components/ui/primitives/field-box/field-box-parts.css +1 -2
- package/dist/components/ui/primitives/field-box/field-box-tokens.css +54 -36
- package/dist/components/ui/primitives/field-box/field-box.css +44 -86
- package/dist/components/ui/primitives/field-box/field-stepper.css +129 -0
- package/dist/{components-CuFTrmGy.js → components-5n6qa3vr.js} +19380 -18872
- package/dist/components.js +37 -38
- package/dist/{conversion-variant-DmEtTCSP.js → conversion-variant-BjIJep32.js} +4 -4
- package/dist/currency-field-DzLtJtDI.js +303 -0
- package/dist/{dialog-Jhpx6ulb.js → dialog-CFuONiW5.js} +3 -3
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-nl0Q3tQ2.js → dropdown-menu-BvtBDoSD.js} +1 -1
- package/dist/editor.js +442 -442
- package/dist/{empty-state-mrJuqph3.js → empty-state-n2zb23YG.js} +1 -1
- package/dist/{financial-variant-P8gFA9aI.js → financial-variant-CniddOSL.js} +7 -7
- package/dist/{hooks-CjSpziWf.js → hooks-zyRsvilJ.js} +2 -2
- package/dist/hooks.js +2 -2
- package/dist/{hover-card-BNb1M8ij.js → hover-card-BJ15hu7B.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-CVMHwdFm.js → icon-badge-B2ns44Cz.js} +1 -1
- package/dist/{icon-button-Ch0PThsa.js → icon-button-BG438okX.js} +1 -1
- package/dist/lib/components/ui/display/entity-header/entity-metadata.d.ts +0 -7
- package/dist/lib/components/ui/display/entity-header/entity-stats.d.ts +2 -1
- package/dist/lib/components/ui/display/markdown/markdown.d.ts +2 -2
- package/dist/lib/components/ui/display/markdown/rehype-katex-classes.d.ts +21 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/fields/index.d.ts +1 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/index.d.ts +2 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-preview.d.ts +6 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-syntax-help.d.ts +4 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-tabs.d.ts +13 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-field.d.ts +23 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-form-field.d.ts +3 -0
- package/dist/lib/components/ui/fields/markdown-textarea-field/use-text-value.d.ts +6 -0
- package/dist/lib/components/ui/fields/number-field/number-control.d.ts +10 -3
- package/dist/lib/components/ui/fields/number-field/number-field-base.d.ts +2 -0
- package/dist/lib/components/ui/fields/number-field/number-field.d.ts +7 -1
- package/dist/lib/components/ui/fields/number-field/number-field.types.d.ts +13 -0
- package/dist/lib/components/ui/fields/number-field/number-score-control.d.ts +19 -0
- package/dist/lib/components/ui/fields/number-field/number-stepper.d.ts +16 -2
- package/dist/lib/components/ui/fields/quantity-field/quantity-field.d.ts +4 -3
- package/dist/lib/components/ui/fields/quantity-field/quantity-row.d.ts +5 -9
- package/dist/lib/components/ui/fields/quantity-field/quantity-unit-menu.d.ts +19 -0
- package/dist/lib/components/ui/fields/quantity-field/quantity-unit.d.ts +11 -4
- package/dist/lib/components/ui/fields/quantity-field/use-unit-chip-name.d.ts +14 -0
- package/dist/lib/components/ui/fields/switch/partials/switch-row.d.ts +2 -2
- package/dist/lib/components/ui/fields/switch/switch.d.ts +2 -2
- package/dist/lib/components/ui/fields/text-field/text-field-units.d.ts +22 -0
- package/dist/lib/components/ui/fields/text-field/text-field.d.ts +9 -0
- package/dist/lib/components/ui/fields/verification-code/partials/code-surface.d.ts +13 -6
- package/dist/lib/components/ui/fields/verification-code/partials/recovery-input.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/app-sidebar-group.d.ts +12 -0
- package/dist/lib/components/ui/layout/app-shell/types.d.ts +7 -0
- package/dist/lib/components/ui/primitives/input-group/input-group.d.ts +1 -1
- package/dist/lib/components/ui/widgets/education/questions/index.d.ts +1 -1
- package/dist/lib/components/ui/widgets/education/questions/partials/question-hints.d.ts +9 -0
- package/dist/lib/components/ui/widgets/education/questions/partials/question-reveal.d.ts +13 -0
- package/dist/lib/components/ui/widgets/education/questions/partials/rich-text.d.ts +17 -0
- package/dist/lib/components/ui/widgets/education/questions/types.d.ts +40 -1
- package/dist/lib/i18n/resources/en/en.d.ts +29 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +31 -2
- package/dist/lib/i18n/resources/fr/fr.d.ts +29 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +31 -2
- package/dist/lib/i18n/resources/resources.d.ts +58 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +53 -54
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/percent-field-CeDpzUTS.js +137 -0
- package/dist/{picker-surface-CoNsDWxX.js → picker-surface-Cr2n42qv.js} +4 -4
- package/dist/{popover-BA1U82Wk.js → popover-XBAX2Shp.js} +1 -1
- package/dist/{pos-types-BQqv-kb6.js → pos-types-BFVWeJki.js} +1 -1
- package/dist/{pos-variant-D043n5y8.js → pos-variant-DWB8Bc12.js} +4 -4
- package/dist/print.js +1 -1
- package/dist/{programmer-variant-jneMqtLs.js → programmer-variant-B-wPnDeX.js} +2 -2
- package/dist/{public-DgrbdeZj.js → public-D1bH-KPQ.js} +9 -9
- package/dist/{rich-code-block-CGNjHawR.js → rich-code-block-DP2RT7pV.js} +5 -5
- package/dist/{scientific-variant-1L7brNNT.js → scientific-variant-BP08Mo0g.js} +2 -2
- package/dist/{sortable-provider-DZLV_svg.js → sortable-provider-CHGZrS0f.js} +2 -2
- package/dist/{spinner-CQqRWxAW.js → spinner-rk8J5y9O.js} +1 -1
- package/dist/styles.css +2 -0
- package/dist/{tabs-DQTx3C8e.js → tabs-nuYLggwC.js} +1 -1
- package/dist/text-field-DxKSPY0T.js +154 -0
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-3NQ3VmJH.js → theme-toggle-5waw9Wk8.js} +1 -1
- package/dist/{toolbar-items-BYCdJGUf.js → toolbar-items-Bo-nMzKJ.js} +4 -4
- package/dist/{translate-material-jxfcGlD5.js → translate-material-H5GMStyF.js} +1 -1
- package/dist/{translator-6XuDmqUJ.js → translator-gdpQeToI.js} +62 -4
- package/dist/{use-chat-composer-1eb4I1kM.js → use-chat-composer-yTODkjut.js} +24 -25
- package/dist/{use-heading-spy-CzPujlKr.js → use-heading-spy-n_wPa5jC.js} +4 -4
- package/dist/{use-material-translation-BUPqNmAg.js → use-material-translation-BW5HZMwt.js} +1 -1
- package/dist/{use-return-focus-B_enQxp5.js → use-return-focus-BC4sGh1b.js} +1 -1
- package/docs/README.md +1 -0
- package/docs/components/data-display.md +7 -6
- package/docs/components/date-and-time.md +25 -23
- package/docs/components/form-fields.md +119 -26
- package/docs/components/navigation-and-layout.md +1 -1
- package/docs/components/rich-widgets.md +29 -0
- package/docs/guides/app-shell.md +15 -0
- package/docs/guides/csp.md +20 -8
- package/docs/guides/field-look-2-x.md +10 -4
- package/docs/guides/field-look-refined.md +130 -0
- package/docs/guides/forms.md +1 -0
- package/docs/guides/i18n.md +1 -1
- package/docs/guides/layouts.md +2 -1
- package/docs/guides/theming.md +39 -31
- package/docs/previews/backgrounds-icons-quiet-band.webp +0 -0
- package/docs/previews/backgrounds-icons.webp +0 -0
- package/docs/previews/backgrounds-matrix.webp +0 -0
- package/docs/previews/buttons-actions-actioncard.webp +0 -0
- package/docs/previews/buttons-actions-backlink.webp +0 -0
- package/docs/previews/buttons-actions-button.webp +0 -0
- package/docs/previews/buttons-actions-buttongroup.webp +0 -0
- package/docs/previews/buttons-actions-fab.webp +0 -0
- package/docs/previews/buttons-actions-fabmenu.webp +0 -0
- package/docs/previews/buttons-actions-iconbutton.webp +0 -0
- package/docs/previews/buttons-actions-languageswitcher.webp +0 -0
- package/docs/previews/buttons-actions-linkbutton.webp +0 -0
- package/docs/previews/buttons-actions-loadmorebutton.webp +0 -0
- package/docs/previews/buttons-actions-loadmorefooter.webp +0 -0
- package/docs/previews/buttons-actions-responsivebutton.webp +0 -0
- package/docs/previews/buttons-actions-scrolltolatestbutton.webp +0 -0
- package/docs/previews/buttons-actions-scrolltotop.webp +0 -0
- package/docs/previews/buttons-actions-splitbutton.webp +0 -0
- package/docs/previews/buttons-actions-themetoggle.webp +0 -0
- package/docs/previews/buttons-actions-toolbar-density-and-keyboard.webp +0 -0
- package/docs/previews/buttons-actions-toolbar.webp +0 -0
- package/docs/previews/data-display-accordioncard.webp +0 -0
- package/docs/previews/data-display-apiendpoint.webp +0 -0
- package/docs/previews/data-display-apioperation.webp +0 -0
- package/docs/previews/data-display-avatar.webp +0 -0
- package/docs/previews/data-display-badge.webp +0 -0
- package/docs/previews/data-display-card-presets.webp +0 -0
- package/docs/previews/data-display-changehistory.webp +0 -0
- package/docs/previews/data-display-chip.webp +0 -0
- package/docs/previews/data-display-codegroup.webp +0 -0
- package/docs/previews/data-display-description.webp +0 -0
- package/docs/previews/data-display-enrolmentcard.webp +0 -0
- package/docs/previews/data-display-enrolmentsecret.webp +0 -0
- package/docs/previews/data-display-entityheader.webp +0 -0
- package/docs/previews/data-display-metric-cards.webp +0 -0
- package/docs/previews/data-display-periodcards.webp +0 -0
- package/docs/previews/data-display-recoverycodes.webp +0 -0
- package/docs/previews/data-display-recoverycodesstatus.webp +0 -0
- package/docs/previews/data-display-secretcard.webp +0 -0
- package/docs/previews/data-display-terminal.webp +0 -0
- package/docs/previews/data-display-timeline.webp +0 -0
- package/docs/previews/data-display-tonevalue.webp +0 -0
- package/docs/previews/data-display-votetally.webp +0 -0
- package/docs/previews/data-table-filter-lists-datagrid.webp +0 -0
- package/docs/previews/data-table-filter-lists-datatable.webp +0 -0
- package/docs/previews/data-table-filter-lists-daygroupedlist.webp +0 -0
- package/docs/previews/data-table-filter-lists-drag-and-drop.webp +0 -0
- package/docs/previews/data-table-filter-lists-facetgroup.webp +0 -0
- package/docs/previews/data-table-filter-lists-filter.webp +0 -0
- package/docs/previews/data-table-filter-lists-listempty.webp +0 -0
- package/docs/previews/data-table-filter-lists-listpane.webp +0 -0
- package/docs/previews/data-table-filter-lists-markinglist.webp +0 -0
- package/docs/previews/data-table-filter-lists-pagination.webp +0 -0
- package/docs/previews/data-table-filter-lists-servertable.webp +0 -0
- package/docs/previews/data-table-filter-lists-tree.webp +0 -0
- package/docs/previews/date-time-agefield.webp +0 -0
- package/docs/previews/date-time-calendar-expressive.webp +0 -0
- package/docs/previews/date-time-calendar.webp +0 -0
- package/docs/previews/date-time-datefield.webp +0 -0
- package/docs/previews/date-time-daterangefield.webp +0 -0
- package/docs/previews/date-time-durationfield.webp +0 -0
- package/docs/previews/date-time-fields-expressive.webp +0 -0
- package/docs/previews/date-time-halfdayrangefield.webp +0 -0
- package/docs/previews/date-time-nowindicator.webp +0 -0
- package/docs/previews/date-time-timefield.webp +0 -0
- package/docs/previews/date-time-timepicker-tiles.webp +0 -0
- package/docs/previews/date-time-timepicker.webp +0 -0
- package/docs/previews/feedback-status-alert.webp +0 -0
- package/docs/previews/feedback-status-alertdialog.webp +0 -0
- package/docs/previews/feedback-status-celebration.webp +0 -0
- package/docs/previews/feedback-status-circularprogress.webp +0 -0
- package/docs/previews/feedback-status-confirmationdialog.webp +0 -0
- package/docs/previews/feedback-status-confirmdialog.webp +0 -0
- package/docs/previews/feedback-status-countdowntimer.webp +0 -0
- package/docs/previews/feedback-status-customalertdialog.webp +0 -0
- package/docs/previews/feedback-status-customdialog.webp +0 -0
- package/docs/previews/feedback-status-emptystate.webp +0 -0
- package/docs/previews/feedback-status-errorstate.webp +0 -0
- package/docs/previews/feedback-status-hydrateloading.webp +0 -0
- package/docs/previews/feedback-status-illustration-education.webp +0 -0
- package/docs/previews/feedback-status-illustration-game.webp +0 -0
- package/docs/previews/feedback-status-illustration-health.webp +0 -0
- package/docs/previews/feedback-status-illustration.webp +0 -0
- package/docs/previews/feedback-status-notificationrow.webp +0 -0
- package/docs/previews/feedback-status-notifications.webp +0 -0
- package/docs/previews/feedback-status-pageloadfailed.webp +0 -0
- package/docs/previews/feedback-status-progress.webp +0 -0
- package/docs/previews/feedback-status-skeleton.webp +0 -0
- package/docs/previews/feedback-status-spinner.webp +0 -0
- package/docs/previews/feedback-status-stalenotice.webp +0 -0
- package/docs/previews/feedback-status-stepupdialog-retry.webp +0 -0
- package/docs/previews/feedback-status-stepupdialog.webp +0 -0
- package/docs/previews/feedback-status-toast.webp +0 -0
- package/docs/previews/feedback-status-typingindicator.webp +0 -0
- package/docs/previews/feedback-status-unsaveddialog.webp +0 -0
- package/docs/previews/form-fields-attributes.webp +0 -0
- package/docs/previews/form-fields-choicelistfield.webp +0 -0
- package/docs/previews/form-fields-colorfield.webp +0 -0
- package/docs/previews/form-fields-contacts.webp +0 -0
- package/docs/previews/form-fields-countryfield.webp +0 -0
- package/docs/previews/form-fields-currencyfield.webp +0 -0
- package/docs/previews/form-fields-emailfield.webp +0 -0
- package/docs/previews/form-fields-field.webp +0 -0
- package/docs/previews/form-fields-formsection.webp +0 -0
- package/docs/previews/form-fields-inlineedit.webp +0 -0
- package/docs/previews/form-fields-inputgroupfield.webp +0 -0
- package/docs/previews/form-fields-localizedtextfields.webp +0 -0
- package/docs/previews/form-fields-markdowntextareafield.webp +0 -0
- package/docs/previews/form-fields-numberfield.webp +0 -0
- package/docs/previews/form-fields-openinghours.webp +0 -0
- package/docs/previews/form-fields-otpfield.webp +0 -0
- package/docs/previews/form-fields-passwordfield.webp +0 -0
- package/docs/previews/form-fields-percentfield.webp +0 -0
- package/docs/previews/form-fields-phonefield.webp +0 -0
- package/docs/previews/form-fields-postaladdress.webp +0 -0
- package/docs/previews/form-fields-repeatablegroup.webp +0 -0
- package/docs/previews/form-fields-searchfield.webp +0 -0
- package/docs/previews/form-fields-slider.webp +0 -0
- package/docs/previews/form-fields-switch.webp +0 -0
- package/docs/previews/form-fields-textareafield.webp +0 -0
- package/docs/previews/form-fields-textfield.webp +0 -0
- package/docs/previews/form-fields-timezonefield.webp +0 -0
- package/docs/previews/form-fields-urlfield.webp +0 -0
- package/docs/previews/form-fields-verificationcode.webp +0 -0
- package/docs/previews/foundations-themes-gallery.webp +0 -0
- package/docs/previews/foundations-themes-icon-motifs.webp +0 -0
- package/docs/previews/foundations-themes-nesting.webp +0 -0
- package/docs/previews/foundations-themes-provider.webp +0 -0
- package/docs/previews/foundations-themes-themepicker.webp +0 -0
- package/docs/previews/guides-i18n-i18nprovider.webp +0 -0
- package/docs/previews/guides-i18n-translated-components.webp +0 -0
- package/docs/previews/media-files-audioplayer.webp +0 -0
- package/docs/previews/media-files-camera.webp +0 -0
- package/docs/previews/media-files-carousel.webp +0 -0
- package/docs/previews/media-files-filelist.webp +0 -0
- package/docs/previews/media-files-filelistfield.webp +0 -0
- package/docs/previews/media-files-filepreview.webp +0 -0
- package/docs/previews/media-files-gallery-image-lists.webp +0 -0
- package/docs/previews/media-files-gallery-video.webp +0 -0
- package/docs/previews/media-files-gallery-viewer.webp +0 -0
- package/docs/previews/media-files-gallery.webp +0 -0
- package/docs/previews/media-files-imagecropper.webp +0 -0
- package/docs/previews/media-files-imageeditor.webp +0 -0
- package/docs/previews/media-files-imagefield.webp +0 -0
- package/docs/previews/media-files-lightboxgallery.webp +0 -0
- package/docs/previews/media-files-map.webp +0 -0
- package/docs/previews/media-files-mediaplayer.webp +0 -0
- package/docs/previews/media-files-mediaplayerhost.webp +0 -0
- package/docs/previews/media-files-mediaplayerlightbox.webp +0 -0
- package/docs/previews/media-files-mediaplayermini.webp +0 -0
- package/docs/previews/media-files-minigallery.webp +0 -0
- package/docs/previews/media-files-pdfreader.webp +0 -0
- package/docs/previews/media-files-uploadfield.webp +0 -0
- package/docs/previews/navigation-layout-appshell-blue-moon.webp +0 -0
- package/docs/previews/navigation-layout-appshell-footer-icon.webp +0 -0
- package/docs/previews/navigation-layout-appshell-menu-badge.webp +0 -0
- package/docs/previews/navigation-layout-appshell-page-ground.webp +0 -0
- package/docs/previews/navigation-layout-appshell-themes.webp +0 -0
- package/docs/previews/navigation-layout-appshell.webp +0 -0
- package/docs/previews/navigation-layout-authcard-split.webp +0 -0
- package/docs/previews/navigation-layout-authcard.webp +0 -0
- package/docs/previews/navigation-layout-background.webp +0 -0
- package/docs/previews/navigation-layout-breadcrumb.webp +0 -0
- package/docs/previews/navigation-layout-doc-api.webp +0 -0
- package/docs/previews/navigation-layout-doc-blocks.webp +0 -0
- package/docs/previews/navigation-layout-doc.webp +0 -0
- package/docs/previews/navigation-layout-editorlayout.webp +0 -0
- package/docs/previews/navigation-layout-hero.webp +0 -0
- package/docs/previews/navigation-layout-landinglayout.webp +0 -0
- package/docs/previews/navigation-layout-listdetailslayout.webp +0 -0
- package/docs/previews/navigation-layout-pager.webp +0 -0
- package/docs/previews/navigation-layout-recordpage.webp +0 -0
- package/docs/previews/navigation-layout-settingslayout.webp +0 -0
- package/docs/previews/navigation-layout-sidebar.webp +0 -0
- package/docs/previews/navigation-layout-steps.webp +0 -0
- package/docs/previews/navigation-layout-stickyactionbar.webp +0 -0
- package/docs/previews/navigation-layout-threadlayout-pages.webp +0 -0
- package/docs/previews/navigation-layout-toc.webp +0 -0
- package/docs/previews/overlays-menus-contextmenu.webp +0 -0
- package/docs/previews/overlays-menus-dialog.webp +0 -0
- package/docs/previews/overlays-menus-drawer.webp +0 -0
- package/docs/previews/overlays-menus-dropdownmenu.webp +0 -0
- package/docs/previews/overlays-menus-hovercard.webp +0 -0
- package/docs/previews/overlays-menus-popover.webp +0 -0
- package/docs/previews/overlays-menus-sheet.webp +0 -0
- package/docs/previews/overlays-menus-tooltip.webp +0 -0
- package/docs/previews/primitives-accordion.webp +0 -0
- package/docs/previews/primitives-card.webp +0 -0
- package/docs/previews/primitives-collapsible.webp +0 -0
- package/docs/previews/primitives-extendedlabel.webp +0 -0
- package/docs/previews/primitives-helpertext.webp +0 -0
- package/docs/previews/primitives-input.webp +0 -0
- package/docs/previews/primitives-inputgroup.webp +0 -0
- package/docs/previews/primitives-label.webp +0 -0
- package/docs/previews/primitives-scrollarea.webp +0 -0
- package/docs/previews/primitives-segmentednav.webp +0 -0
- package/docs/previews/primitives-tabs.webp +0 -0
- package/docs/previews/primitives-tabsnav.webp +0 -0
- package/docs/previews/primitives-textarea.webp +0 -0
- package/docs/previews/primitives-toggle.webp +0 -0
- package/docs/previews/primitives-togglegroup.webp +0 -0
- package/docs/previews/primitives-typography.webp +0 -0
- package/docs/previews/rich-widgets-calculator-conversion.webp +0 -0
- package/docs/previews/rich-widgets-chat-action-proposal.webp +0 -0
- package/docs/previews/rich-widgets-chat-advanced.webp +0 -0
- package/docs/previews/rich-widgets-chat-composer.webp +0 -0
- package/docs/previews/rich-widgets-chat-inbox.webp +0 -0
- package/docs/previews/rich-widgets-chat-overview.webp +0 -0
- package/docs/previews/rich-widgets-chat-thread.webp +0 -0
- package/docs/previews/rich-widgets-chat-widget.webp +0 -0
- package/docs/previews/rich-widgets-codeeditor.webp +0 -0
- package/docs/previews/rich-widgets-compacteditor.webp +0 -0
- package/docs/previews/rich-widgets-documenteditor.webp +0 -0
- package/docs/previews/rich-widgets-drawing.webp +0 -0
- package/docs/previews/rich-widgets-emojipicker.webp +0 -0
- package/docs/previews/rich-widgets-eventcalendar.webp +0 -0
- package/docs/previews/rich-widgets-kanban-phone-layout.webp +0 -0
- package/docs/previews/rich-widgets-kanban.webp +0 -0
- package/docs/previews/rich-widgets-mentionlist.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-areachart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-barchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-combochart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-donutchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-funnelchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-heatmapchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-linechart-reference.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-linechart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-palette.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-piechart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-radarchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-radialbarchart.webp +0 -0
- package/docs/previews/rich-widgets-native-charts-scatterchart.webp +0 -0
- package/docs/previews/rich-widgets-questioncard-rich-content.webp +0 -0
- package/docs/previews/rich-widgets-questionmediaview.webp +0 -0
- package/docs/previews/rich-widgets-questionnavigator.webp +0 -0
- package/docs/previews/rich-widgets-quiz.webp +0 -0
- package/docs/previews/rich-widgets-richchatcomposer.webp +0 -0
- package/docs/previews/rich-widgets-richtexteditor.webp +0 -0
- package/docs/previews/rich-widgets-richtextviewer.webp +0 -0
- package/docs/previews/selection-choice-autocomplete.webp +0 -0
- package/docs/previews/selection-choice-checkbox.webp +0 -0
- package/docs/previews/selection-choice-checkboxgroup.webp +0 -0
- package/docs/previews/selection-choice-checkcardfield.webp +0 -0
- package/docs/previews/selection-choice-chipgroupfield.webp +0 -0
- package/docs/previews/selection-choice-choicecardgroup.webp +0 -0
- package/docs/previews/selection-choice-combobox.webp +0 -0
- package/docs/previews/selection-choice-comboboxfield.webp +0 -0
- package/docs/previews/selection-choice-optiontile.webp +0 -0
- package/docs/previews/selection-choice-radiogroup.webp +0 -0
- package/docs/previews/selection-choice-select.webp +0 -0
- package/docs/previews/selection-choice-selectfield.webp +0 -0
- package/docs/previews/selection-choice-sortablelist.webp +0 -0
- package/docs/previews/selection-choice-switcher.webp +0 -0
- package/docs/previews/selection-choice-transferlist.webp +0 -0
- package/docs/previews/selection-choice-treeselectfield.webp +0 -0
- package/docs/roadmap.md +13 -10
- package/docs/troubleshooting.md +66 -6
- package/lib/components/components.css +7 -1
- package/lib/components/theme-tokens.css +7 -0
- package/lib/components/ui/dates/duration-field/duration-field-expressive.css +2 -63
- package/lib/components/ui/dates/picker-trigger/typed-box-expressive.css +30 -21
- package/lib/components/ui/fields/number-field/number-field-score.css +151 -0
- package/lib/components/ui/fields/quantity-field/quantity-field.css +117 -0
- package/lib/components/ui/primitives/field-box/field-box-parts.css +1 -2
- package/lib/components/ui/primitives/field-box/field-box-tokens.css +54 -36
- package/lib/components/ui/primitives/field-box/field-box.css +44 -86
- package/lib/components/ui/primitives/field-box/field-stepper.css +129 -0
- package/lib/styles.css +2 -0
- package/lib/themes/ambre.css +5 -1
- package/lib/themes/ardoise.css +5 -1
- package/lib/themes/bleumono.css +5 -1
- package/lib/themes/bluemoon.css +5 -1
- package/lib/themes/corail.css +5 -1
- package/lib/themes/foret.css +5 -1
- package/lib/themes/lavande.css +5 -1
- package/lib/themes/menthe.css +5 -1
- package/lib/themes/ocean.css +5 -1
- package/lib/themes/pink.css +5 -1
- package/lib/themes/prune.css +5 -1
- package/lib/themes/sable.css +5 -1
- package/lib/themes/slate.css +5 -1
- package/lib/themes/teal.css +5 -1
- package/package.json +2 -2
- package/dist/currency-field-CabGnVO9.js +0 -289
- package/dist/input-group-CPMSQcBx.js +0 -70
- package/dist/percent-field-TWyupyr_.js +0 -14
- package/dist/text-field-BAdY-kpO.js +0 -59
package/docs/guides/app-shell.md
CHANGED
|
@@ -414,6 +414,21 @@ its `url`, with its badge, for a parent page that already lists them. Unset
|
|
|
414
414
|
}
|
|
415
415
|
```
|
|
416
416
|
|
|
417
|
+
`defaultExpanded` makes an entry's `children` fold in the expanded sidebar: a
|
|
418
|
+
chevron button after the entry (named "Collapse the group" / "Expand the group",
|
|
419
|
+
`material.navigation.group-collapse` and `group-expand`) shows and hides them,
|
|
420
|
+
`true` opening them at first and `false` folding them (a folded group still opens at first when the current page is one of its children). It is ignored with `display: 'icon'`. Unset, they are always
|
|
421
|
+
listed, as before. The entry stays a link to its `url`; the state is local (not
|
|
422
|
+
remembered), and the phone's menu sheet and the other presets ignore it.
|
|
423
|
+
|
|
424
|
+
```tsx
|
|
425
|
+
{
|
|
426
|
+
label: 'Services', url: '/services', icon: 'grid-2',
|
|
427
|
+
children: [{ label: 'Lab', url: '/lab', icon: 'flask' }],
|
|
428
|
+
defaultExpanded: true, // open at first, foldable
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
417
432
|
`MenuItem` also accepts `children`, `group`, `bar` and `priority`. Each is read
|
|
418
433
|
by the presets that use it, and ignored by the others: `bar` and `priority`
|
|
419
434
|
choose the entries of the bottom bar **and** of the floating toolbar (the rest go
|
package/docs/guides/csp.md
CHANGED
|
@@ -38,7 +38,7 @@ Components outside this table need nothing more. Measured per component:
|
|
|
38
38
|
| --- | --- | --- |
|
|
39
39
|
| `PdfReader` | `worker-src 'self'` (the worker is a file of the package), `connect-src` for the PDF's and the assets' origins, and `script-src 'wasm-unsafe-eval'` for the JPEG 2000 and ICC WebAssembly decoders (without it: a JavaScript fallback for JPEG 2000, device colours for ICC profiles) | worker checked in the same Playwright run (Vite production build under `worker-src 'self'`), the rest read from pdf.js's code: [PDF reader guide](pdf-reader.md#content-security-policy) |
|
|
40
40
|
| `CodeEditor`, `CodeDiff` (Monaco) | `@monaco-editor/react` loads Monaco from `https://cdn.jsdelivr.net/npm/monaco-editor@…/min/vs` by default: that host in `style-src-elem` (Monaco's CSS) and `font-src` (its icon font), plus `worker-src blob:` | not yet verified in a browser. Safe default: allow `https://cdn.jsdelivr.net` in `script-src`, `style-src-elem` and `font-src`, and `worker-src blob:`; or stay on `'self'` by [serving Monaco yourself](#monaco-on-self) |
|
|
41
|
-
| `Markdown` (maths, mermaid, code) | nothing beyond the policy above,
|
|
41
|
+
| `Markdown` (maths, mermaid, code) | nothing beyond the policy above, on the server or the client (math needs `NonceProvider`); mermaid's mindmap and architecture diagrams still add an un-nonced `<style>` | checked in Chromium under that policy with `style-src-attr 'none'`, no `img-src data:` and no `'unsafe-eval'`: [Markdown under a strict CSP](#markdown-katex-mermaid-and-code-under-a-strict-csp) |
|
|
42
42
|
| `RichTextViewer` (`@nxgt/material/editor/viewer`) | none, but it emits `style` attributes: a text colour, a highlight, a text alignment or a table cell's background in the saved document becomes an inline `style` (only allow-listed properties with plain values survive), so a page that shows such a document needs `style-src-attr 'unsafe-inline'`. A document with none sends no style | measured by reading the renderers; a strict `style-src-attr 'none'` page shows the document without those colours |
|
|
43
43
|
| `Camera` | none: `getUserMedia` is not governed by CSP; the captured photo is a `data:` image | `media-src` for the live preview is not yet verified. Safe default: `media-src 'self' blob:` (a `srcObject` stream usually needs nothing) |
|
|
44
44
|
| `MediaPlayer` with `hlsStreaming()` | `connect-src` and `media-src blob:` for the stream; `worker-src blob:` only with `config: { enableWorker: true }` (the adapter defaults to no worker) | see the [streaming guide](media-streaming.md#content-security-policy) |
|
|
@@ -211,6 +211,7 @@ mermaid and pdf.js's font fallback are the [known gaps](#known-gaps).
|
|
|
211
211
|
| `Spinner` (variant `4`), `PdfReader` (search highlights, night mode) | nothing | their rules are in the stylesheet (`spinner.css`, `pdf-viewer.css`) |
|
|
212
212
|
| `Progress`, `CircularProgress` | nothing | the server draws SVG percentages, SMIL and path data, and the rules are in the stylesheet (`progress.css`); no `style` attribute |
|
|
213
213
|
| `ScrollArea`, `Select` (Radix) | the nonce | Radix renders a `<style>` element with `NonceProvider`'s nonce: wrap the app in [`NonceProvider`](#nonceprovider) |
|
|
214
|
+
| `Markdown` (math) | the nonce | one `<style>` of `mk-` rules replacing KaTeX's `style` attributes, with `NonceProvider`'s nonce |
|
|
214
215
|
| `RichTextEditor` (tiptap) | the nonce | tiptap, on mount, with `NonceProvider`'s nonce as `injectNonce` |
|
|
215
216
|
| `Dialog`, `AlertDialog`, `Sheet`, `ConfirmationDialog`, … (Radix scroll lock) | the nonce | react-style-singleton, when a modal opens: see below |
|
|
216
217
|
|
|
@@ -278,8 +279,17 @@ the page carry the nonce in its meta tag).
|
|
|
278
279
|
(`data-scheme`), and `maxHeight` is a custom property written through the
|
|
279
280
|
CSSOM in a layout effect (a server-rendered block is full height until
|
|
280
281
|
hydration).
|
|
281
|
-
- **KaTeX**:
|
|
282
|
-
|
|
282
|
+
- **KaTeX**: its markup carries inline `style="…"` attributes (offsets,
|
|
283
|
+
heights, widths), which `style-src-attr 'none'` blocks on a server render
|
|
284
|
+
(hydration does not rewrite them). `Markdown` turns each into a class
|
|
285
|
+
(`mk-<hash>`, one per distinct declaration list, the same on the server and
|
|
286
|
+
the client) and appends one `<style>` with the rules, given the nonce of the
|
|
287
|
+
nearest `NonceProvider`: `style-src-elem 'nonce-…'` allows it, and the
|
|
288
|
+
formula is laid out as before, with server and client rendering the same
|
|
289
|
+
markup. So `NonceProvider` is required for math under a nonce policy
|
|
290
|
+
(without it the `<style>` has no nonce and is blocked); a declaration that
|
|
291
|
+
is not a plain `property:value` is dropped, never copied to the sheet. Its
|
|
292
|
+
fonts are files ([KaTeX fonts](#katex-fonts)).
|
|
283
293
|
- **Mermaid**: the diagram stays an image, now from a `blob:` URL (revoked when
|
|
284
294
|
the diagram goes), so the SVG's own `<style>` and `style` attributes live in
|
|
285
295
|
the image and the page needs neither `data:` nor `style-src-attr` for them.
|
|
@@ -293,11 +303,13 @@ the page carry the nonce in its meta tag).
|
|
|
293
303
|
each is a pass-through once the last render ends and is restored only if
|
|
294
304
|
no other script patched it since). Unrelated calls, such as an editor
|
|
295
305
|
parsing HTML, are left alone.
|
|
296
|
-
- **Left**:
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
306
|
+
- **Left**: mermaid's mindmap and architecture diagrams (cytoscape) add a
|
|
307
|
+
`<style>` to `<head>` with no nonce, which `style-src-elem 'nonce-…'` blocks:
|
|
308
|
+
the diagram still draws, without that sheet's rules. The classes mechanism
|
|
309
|
+
above does not reach it; allow that element (a hash of the sheet, or
|
|
310
|
+
`style-src-elem 'unsafe-inline'`) only if you show those two diagram types
|
|
311
|
+
([known gaps](#known-gaps)). Flowcharts, sequence and the other types are
|
|
312
|
+
checked and need nothing.
|
|
301
313
|
|
|
302
314
|
### Known gaps
|
|
303
315
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# The field look (2.x)
|
|
2
2
|
|
|
3
|
+
> The Refined release later replaced this look (no filled tint, the card surface, a 4px ring): see [The Refined field look](field-look-refined.md). This page keeps the 2.x steps and their ways back.
|
|
4
|
+
|
|
3
5
|
Every text field and picker trigger shares one look, the **field box**: a
|
|
4
6
|
soft neutral surface, the primary tint once it holds a value, a hairline that
|
|
5
7
|
firms on hover, and the border in primary with a 3px halo on focus. It lives
|
|
@@ -411,10 +413,14 @@ the corners and colours are the `--nxgt-field-*` tokens (set them under
|
|
|
411
413
|
|
|
412
414
|
### `NumberField` and `OtpField`
|
|
413
415
|
|
|
414
|
-
The
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
416
|
+
The Refined release moved the `NumberField` steppers inside the box and changed its tab order: see [The Refined field look](field-look-refined.md#tab-order-and-roles-for-tests).
|
|
417
|
+
|
|
418
|
+
The slots of an `OtpField` take the field radius (`--nxgt-field-radius`, 8px)
|
|
419
|
+
instead of 6px, so they read as parts of the same family as the field beside
|
|
420
|
+
them. A `NumberField` is one field box: its Decrease and Increase buttons are
|
|
421
|
+
tinted round circles inside it (DurationField's look), so there is no
|
|
422
|
+
separate radius for them. There is no prop for either: override the token to
|
|
423
|
+
round them less, as every field.
|
|
418
424
|
|
|
419
425
|
```css
|
|
420
426
|
:root {
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# The Refined field look
|
|
2
|
+
|
|
3
|
+
Every text field and picker trigger shares one look, the **field box**. This
|
|
4
|
+
page describes the Refined look it has now, what changed for an app that
|
|
5
|
+
upgraded, and how to tune it or bring a detail of the earlier look back. The
|
|
6
|
+
tokens are listed in [Theming, the field box](theming.md#the-field-box); the
|
|
7
|
+
earlier steps are in [The field look (2.x)](field-look-2-x.md).
|
|
8
|
+
|
|
9
|
+
It is a minor release with no API removed. The one new prop is
|
|
10
|
+
`NumberField`'s `variant="score"`.
|
|
11
|
+
|
|
12
|
+
## What a field looks like
|
|
13
|
+
|
|
14
|
+
| State | The box |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| Rest | the card surface, a 1px border that keeps 3:1 or more against it, 8px corners |
|
|
17
|
+
| Hover | the border firms and the surface takes a 2.5% foreground wash (not on a disabled or read-only field) |
|
|
18
|
+
| Focus, or a picker open | a 1px primary border and a 4px ring (it replaces the 3px halo); one ring for the whole box whichever part has focus |
|
|
19
|
+
| Error | an error-text border with a 1px line inside and, on focus, an error ring |
|
|
20
|
+
| Read-only | a dashed border, no surface |
|
|
21
|
+
| Disabled | a recessed surface and a quieter border |
|
|
22
|
+
| Filled | the same as empty: no primary tint. `data-filled` is still set (an empty attribute, or `"true"` / `"false"` on a `Switch` row and an `UploadField`), so your own CSS can style on it |
|
|
23
|
+
|
|
24
|
+
Forced colours and reduced motion are unchanged.
|
|
25
|
+
|
|
26
|
+
Fields that draw their own box follow the same tokens: the OTP slots, the
|
|
27
|
+
verification code slots and recovery input, the inline edit display, the
|
|
28
|
+
`Switcher` search and the `ColorField` swatch. The date, time and duration
|
|
29
|
+
boxes (`DateField`, `DateRangeField`, `TimeField`, `DurationField`) take the
|
|
30
|
+
same focus ring instead of their former 2px inset boundary.
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { TextField } from '@nxgt/material/components';
|
|
34
|
+
|
|
35
|
+
<TextField label="Name" placeholder="Ada Lovelace" helperText="As on your ID." />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## What each field changed
|
|
39
|
+
|
|
40
|
+
| Field | Change |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `TextField` and the `*Field` text wrappers | `leading` / `trailing` icons and actions are muted with no well fill; a text unit (`"/ 20"`, a currency code) sits inline at the end in muted text. `CurrencyField` follows |
|
|
43
|
+
| `NumberField`, `PercentField`, `CalculatorField` | one `role="group"` box; the value is end-aligned in tabular figures, the suffix hugs it, the Decrease and Increase buttons are a tinted round pair at the end (the `DurationField` look), no dividers |
|
|
44
|
+
| `QuantityField`, `AgeField` | the value, the unit and the pair share one box; the unit is a chip that opens a menu |
|
|
45
|
+
| `NumberField variant="score"` | a big value with its maximum, no box at rest; see [the form fields page](../components/form-fields.md#numberfield) |
|
|
46
|
+
| Date, time and duration fields | the shared focus ring, a dashed hairline when read-only, the recessed surface when disabled |
|
|
47
|
+
|
|
48
|
+
### Tab order and roles (for tests)
|
|
49
|
+
|
|
50
|
+
- The `NumberField` order is the input, Decrease, Increase (it was Decrease,
|
|
51
|
+
input, Increase). With a `CalculatorField`: input, Open calculator,
|
|
52
|
+
Decrease, Increase. A `QuantityField` is value, unit, Decrease, Increase.
|
|
53
|
+
- The number box is a `group`. A test that queries an unnamed
|
|
54
|
+
`getByRole('group')` now also matches it: name the one you mean.
|
|
55
|
+
- A `QuantityField` unit is a button named "Unit: mg", not a `combobox`:
|
|
56
|
+
query `getByRole('button', { name: /unit/i })`.
|
|
57
|
+
- Visual snapshots of fields change; role and name queries hold.
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { QuantityField } from '@nxgt/material/components';
|
|
61
|
+
import type { QuantityValue } from '@nxgt/material/components';
|
|
62
|
+
import { useState } from 'react';
|
|
63
|
+
|
|
64
|
+
export function Dose() {
|
|
65
|
+
const [dose, setDose] = useState<QuantityValue>({ value: 5, unit: 'mg' });
|
|
66
|
+
return (
|
|
67
|
+
<QuantityField
|
|
68
|
+
label="Dose"
|
|
69
|
+
units={[
|
|
70
|
+
{ value: 'mg', label: 'mg' },
|
|
71
|
+
{ value: 'ml', label: 'mL' },
|
|
72
|
+
]}
|
|
73
|
+
value={dose}
|
|
74
|
+
onChange={setDose}
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Tune it
|
|
81
|
+
|
|
82
|
+
Set the tokens after the import, on `:root` and again under `.dark`
|
|
83
|
+
(`--nxgt-field-border` and the like follow `--card` and `--foreground`, so a
|
|
84
|
+
formula you write once usually serves both):
|
|
85
|
+
|
|
86
|
+
```css
|
|
87
|
+
@import "@nxgt/material/styles.css";
|
|
88
|
+
|
|
89
|
+
:root,
|
|
90
|
+
.dark,
|
|
91
|
+
[data-theme="dark"] {
|
|
92
|
+
--nxgt-field-border: color-mix(in oklab, var(--foreground) 60%, var(--card));
|
|
93
|
+
--nxgt-field-halo: color-mix(in oklab, var(--primary-text) 32%, transparent);
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Lightening the border below 3:1 against the card fails WCAG 1.4.11; the story
|
|
98
|
+
`Guides/Accessibility/Field contrast` measures the shipped values.
|
|
99
|
+
|
|
100
|
+
## Getting a detail of the earlier look back
|
|
101
|
+
|
|
102
|
+
**A tint on a filled field.** The `--nxgt-field-bg-filled` tokens are kept but
|
|
103
|
+
alias the rest surface, and nothing paints from them any more. Style on
|
|
104
|
+
`data-filled` instead; an unlayered rule beats the field box's layer. The selector excludes `"false"` because the field box sets an empty `data-filled`, while a `Switch` row and an `UploadField` write a boolean, so an off switch or an empty upload renders `data-filled="false"`:
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
.nxgt-field-box[data-filled]:not([data-filled="false"]) {
|
|
108
|
+
background-color: color-mix(in oklab, var(--primary) 10%, transparent);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.dark .nxgt-field-box[data-filled]:not([data-filled="false"]),
|
|
112
|
+
[data-theme="dark"] .nxgt-field-box[data-filled]:not([data-filled="false"]) {
|
|
113
|
+
background-color: color-mix(in oklab, var(--primary) 26%, transparent);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**The 3px halo and the translucent surface.** Set `--nxgt-field-halo` and
|
|
118
|
+
`--nxgt-field-bg` (for example to `color-mix(in oklab, var(--muted) 5%, transparent)`).
|
|
119
|
+
A halo's width is fixed at 4px.
|
|
120
|
+
|
|
121
|
+
**The 12px corners.** `--nxgt-field-radius: 0.75rem`.
|
|
122
|
+
|
|
123
|
+
**NumberField steppers, order and box.** There is no prop for the old outlined
|
|
124
|
+
buttons around the input or the old tab order.
|
|
125
|
+
|
|
126
|
+
## Related
|
|
127
|
+
|
|
128
|
+
- [Theming, the field box](theming.md#the-field-box) lists every token.
|
|
129
|
+
- [Form fields](../components/form-fields.md) has each field's props.
|
|
130
|
+
- [Troubleshooting](../troubleshooting.md#a-filled-field-has-no-primary-tint-after-upgrading) covers the lost filled tint.
|
package/docs/guides/forms.md
CHANGED
|
@@ -490,6 +490,7 @@ or fails validation.
|
|
|
490
490
|
| --- | --- | --- |
|
|
491
491
|
| `TextField` · `TextFormField` | `string`. With `type="number"`: `number \| null` | `''` |
|
|
492
492
|
| `TextareaField` · `TextareaFormField` | `string` | `''` |
|
|
493
|
+
| `MarkdownTextareaField` · `MarkdownTextareaFormField` | `string` (Markdown source) | `''` |
|
|
493
494
|
| `EmailField` · `EmailFormField` | `string` (as typed; the field shows its own "Enter a valid email" hint on blur) | `''` |
|
|
494
495
|
| `PasswordField` · `PasswordFormField` | `string` | `''` |
|
|
495
496
|
| `NumberField` · `NumberFormField` | `number \| null`. `null` when cleared; clamped to `min` / `max` on blur | `null` |
|
package/docs/guides/i18n.md
CHANGED
|
@@ -247,7 +247,7 @@ until the bar is drawn), the `ThreadLayout` stepper's `nav` name `material.navig
|
|
|
247
247
|
single value's input, when nothing names the slider, `material.slider.value`
|
|
248
248
|
("Value", "Valeur"). `CopyButton` reads `material.copy.copy`, `copied` and `failed` ("Copy", "Copied",
|
|
249
249
|
"Copy failed"). An overflowing `TabsList`'s scroll buttons read
|
|
250
|
-
`material.tabs.scroll-left` / `scroll-right` ("Scroll tabs left" / "Scroll tabs right"). The other icon-only buttons are named from it too: the
|
|
250
|
+
`material.tabs.scroll-left` / `scroll-right` ("Scroll tabs left" / "Scroll tabs right"). `QuestionCard`'s rich content reads `material.quiz.rich.*` (the hint button and names "Show hint 1 of 3" / "Hint 1 of 3", "About each answer", "References", "Examples" with its Input / Expected headers). The other icon-only buttons are named from it too: the
|
|
251
251
|
`Sidebar` toggle (`material.sidebar.toggle`), the data table's row expander
|
|
252
252
|
(`material.table.labels.toggle-row`) and its header, a hidden "Expand" / "Déplier"
|
|
253
253
|
(`material.table.labels.expand`), its loading status, "Loading data…" /
|
package/docs/guides/layouts.md
CHANGED
|
@@ -207,7 +207,8 @@ dashboard, a list and detail, a form and dialog, a table and settings, a dense
|
|
|
207
207
|
detail page, a status board, a landing page, a search dialog with its results
|
|
208
208
|
page, a team feed, the sign-in, sign-up and forgotten-password screens, a
|
|
209
209
|
gallery of pictures, settings with sections, a messages thread, an overview of
|
|
210
|
-
rearrangeable widgets on `DashboardGrid
|
|
210
|
+
rearrangeable widgets on `DashboardGrid`, a document editor and an entry sheet (one row per person with a
|
|
211
|
+
mark out of a total, a comment behind a toggle, locked rows and one sticky Save). Start from the
|
|
211
212
|
closest one and replace the data.
|
|
212
213
|
|
|
213
214
|
## See also
|
package/docs/guides/theming.md
CHANGED
|
@@ -71,6 +71,7 @@ at the top are needed is in [getting started](../getting-started.md#styles).
|
|
|
71
71
|
| `--primary-text` | `text-primary-text` | primary drawn as text or an icon on a page, card or popover surface: `Typography tone="primary"`, links, the `Alert` primary icon, selected labels. In light, `--primary` mixed toward black: 96 % at most, solved lower on a tinted page so a tonal Button label on a striped, selected or header row, or straight on the page ground, reaches 4.6:1 (79 % on teal, 76 % on corail; read the shipped theme file for each preset); in dark, `--primary` mixed 60 % with white (`color-mix(in oklab, var(--primary) 40%, white)`), well over 4.5:1 on `--background` and `--card` |
|
|
72
72
|
| `--primary-indicator` | `bg-primary-indicator`, `border-primary-indicator`, `ring-primary-indicator`, `stroke-primary-indicator` | primary drawn as a non-text mark that carries a state (WCAG 1.4.11, 3:1): an active bar or dot, a selected or focused border, a ring, a spinner arc. Equal to `--primary` in light; in dark, `--primary` mixed 25 % with white (`color-mix(in oklab, var(--primary) 75%, white)`), 4.8:1 on `--background`, 4.5:1 on `--card`, 4.2:1 on `--muted` (`--primary` itself gives 2.7, 2.5 and 2.3:1) |
|
|
73
73
|
| `--error-text` | `text-error-text` | error drawn as text: field messages, `HelperText` in its error state, form and dialog errors, `variant="error"` menu items |
|
|
74
|
+
| `--success-text`, `--warning-text` | `text-success-text`, `text-warning-text` | success and warning drawn as text: a field's valid or caution message. Solved like `--error-text` for every theme and preset: 4.5:1 or more on `--background` and `--card`, in light and dark |
|
|
74
75
|
| `--destructive` | `bg-destructive`, `text-destructive` | deprecated alias of `--error`: the light theme sets it to `var(--error)`, the dark theme keeps its own value; use `--error` |
|
|
75
76
|
| `--ground` | `bg-ground` | the page's ground under `ActivityLayout`: the tinted colour the cards stand on (see [Page ground](#page-ground)) |
|
|
76
77
|
| `--surface-container`, `--surface-container-high` | `bg-surface-container`, `bg-surface-container-high` | tinted chrome: `--surface-container` is the scrolled top app bar (draw it with a 1px `--border` hairline), the primary at 12 % over `--ground` in light (less for a very dark primary, solved per seed) and 26 % in dark; `--surface-container-high` is raised chrome such as a search field, the primary at 16 % over `--background` in light (+4 points over the solved share) and 34 % over `--ground` in dark. Foreground, muted foreground and primary text keep 4.5:1 or more on both, in every preset |
|
|
@@ -828,29 +829,36 @@ export function DangerZone() {
|
|
|
828
829
|
## The field box
|
|
829
830
|
|
|
830
831
|
Text fields and picker triggers share one look, the field box
|
|
831
|
-
(`nxgt-field-box` in `styles.css`), drawn from its own tokens
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
|
841
|
-
|
|
|
842
|
-
| `--nxgt-field-bg
|
|
843
|
-
| `--nxgt-field-
|
|
844
|
-
| `--nxgt-field-
|
|
845
|
-
| `--nxgt-field-
|
|
846
|
-
| `--nxgt-field-
|
|
847
|
-
| `--nxgt-field-
|
|
848
|
-
| `--nxgt-field-
|
|
849
|
-
| `--nxgt-field-
|
|
850
|
-
| `--nxgt-field-
|
|
851
|
-
| `--nxgt-field-
|
|
852
|
-
| `--nxgt-
|
|
853
|
-
| `--nxgt-
|
|
832
|
+
(`nxgt-field-box` in `styles.css`), drawn from its own tokens: the Refined
|
|
833
|
+
look, on the card surface, with a border that keeps 3:1 against it, a 1px
|
|
834
|
+
primary border with a 4px ring on focus, and no tint once the field holds a
|
|
835
|
+
value ([the Refined field look](field-look-refined.md) has the states and the
|
|
836
|
+
way back). `fg`, `card`, `primary-text` and `error` below stand for
|
|
837
|
+
`--foreground`, `--card`, `--primary-text` and `--error`; "a % b" is
|
|
838
|
+
`color-mix(in oklab, a %, b)`, and "a %" is the same over `transparent`. Light
|
|
839
|
+
and dark take the same formulas: they follow `--card` and `--foreground`.
|
|
840
|
+
|
|
841
|
+
| Token | Value | Used for |
|
|
842
|
+
| --- | --- | --- |
|
|
843
|
+
| `--nxgt-field-bg` | `var(--card)` | the surface |
|
|
844
|
+
| `--nxgt-field-bg-hover` | fg 2.5% card | the surface under the pointer |
|
|
845
|
+
| `--nxgt-field-bg-disabled` | fg 5% card | the recessed surface of a disabled field |
|
|
846
|
+
| `--nxgt-field-bg-filled`, `--nxgt-field-bg-filled-hover` | the two above | kept so a read resolves; an override no longer paints (nothing uses them): style on `data-filled` |
|
|
847
|
+
| `--nxgt-field-bg-invalid` | `var(--nxgt-field-bg)` | alias: an error no longer washes the surface |
|
|
848
|
+
| `--nxgt-field-border` | fg 52% card | the rest border (3:1 or more against the card) |
|
|
849
|
+
| `--nxgt-field-border-hover` | fg 74% card | the border under the pointer |
|
|
850
|
+
| `--nxgt-field-border-readonly` | fg 50% card | the dashed border of a read-only field (3:1 or more against the card and the page ground) |
|
|
851
|
+
| `--nxgt-field-border-disabled` | fg 24% card | the border of a disabled field |
|
|
852
|
+
| `--nxgt-field-focus` | `var(--primary-text)` | the focused or open border (1px) |
|
|
853
|
+
| `--nxgt-field-error` | `var(--error-text)` | the border of a field in error |
|
|
854
|
+
| `--nxgt-field-halo` | primary-text 24% | the 4px ring around a focused field |
|
|
855
|
+
| `--nxgt-field-halo-invalid` | error 26% | the ring of a focused field in error |
|
|
856
|
+
| `--nxgt-field-well` | fg 6% (dark: fg 10%) | the round well behind a trigger's chevron, flag or avatar |
|
|
857
|
+
| `--nxgt-field-radius` | `0.5rem` | the corners (8px, the buttons' radius; `0.75rem` gives the earlier 12px) |
|
|
858
|
+
| `--nxgt-field-inner-radius` | `0.25rem` | the facing corners when a picker's list opens against its trigger |
|
|
859
|
+
| `--nxgt-field-list-shadow` | a fg 9% ring and a soft drop shadow (dark: a fg 12% ring and a deeper shadow) | the shadow of that list |
|
|
860
|
+
| `--nxgt-option-ring` | primary-text 70% (dark: 50%) | the 1px keyboard ring of a list or menu row: the lightest that keeps 3:1 against the row and the popover |
|
|
861
|
+
| `--nxgt-option-muted` | muted-foreground 78% toward foreground | muted text on a row or a filled box: a row's description and suffix ("GMT+2", "+33"), a box's suffix and `TreeSelectField`'s path; keeps 4.5:1 on the 18 % chosen row |
|
|
854
862
|
|
|
855
863
|
Set them after the import. The colour tokens are declared again under
|
|
856
864
|
`.dark`, so a dark wrapper computes them from its own colours, and a colour
|
|
@@ -862,12 +870,12 @@ radii are declared once, on `:root`.
|
|
|
862
870
|
|
|
863
871
|
:root {
|
|
864
872
|
--nxgt-field-radius: 0.25rem;
|
|
865
|
-
--nxgt-field-
|
|
873
|
+
--nxgt-field-border: color-mix(in oklab, var(--foreground) 60%, var(--card));
|
|
866
874
|
}
|
|
867
875
|
|
|
868
876
|
.dark,
|
|
869
877
|
[data-theme="dark"] {
|
|
870
|
-
--nxgt-field-
|
|
878
|
+
--nxgt-field-border: color-mix(in oklab, var(--foreground) 60%, var(--card));
|
|
871
879
|
}
|
|
872
880
|
```
|
|
873
881
|
|
|
@@ -882,12 +890,12 @@ knows both, so a `className="rounded-lg"` you pass replaces the field's
|
|
|
882
890
|
radius instead of sitting beside it. Round parts (the chevron's well, a
|
|
883
891
|
colour swatch) stay `rounded-full`.
|
|
884
892
|
|
|
885
|
-
The shipped values keep the placeholder and the text at 4.5:1 or more
|
|
886
|
-
focus and error borders at 3:1
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
893
|
+
The shipped values keep the placeholder and the text at 4.5:1 or more and the
|
|
894
|
+
rest, focus and error borders at 3:1 or more against the card, in every shipped
|
|
895
|
+
theme and both modes; the story `Guides/Accessibility/Field contrast` measures
|
|
896
|
+
them. A border you lighten can fall under 3:1: check it with that story. What
|
|
897
|
+
changed, and how to get the earlier look back: [The Refined field
|
|
898
|
+
look](field-look-refined.md) and [The field look (2.x)](field-look-2-x.md).
|
|
891
899
|
|
|
892
900
|
## Links
|
|
893
901
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|