@nxgt/material 3.79.1 → 3.80.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 +48 -0
- package/README.md +45 -6
- package/dist/{alert-dialog-653apk3f.js → alert-dialog-DgHtXZuB.js} +1 -1
- package/dist/{async-slice-CXLbQuOc.js → async-slice-YBQsGtQT.js} +1 -1
- package/dist/{button-3op3rtZh.js → button-_vm-xSBU.js} +1 -1
- package/dist/{calculator-KqIMBXSh.js → calculator-CTd_S23A.js} +10 -10
- package/dist/calculator-field.js +6 -6
- package/dist/{calculator-segment-BlJE1LaS.js → calculator-segment-OI1BT3bA.js} +1 -1
- package/dist/calculator.js +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-MuKDwtkG.js → chip-DumcVzUO.js} +2 -2
- package/dist/{code-editor-Bp2RrdNx.js → code-editor-CiwgfSOK.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-B7WR5ua_.js → code-language-items-Dip0xnmc.js} +2 -2
- package/dist/components/components.css +3 -0
- package/dist/components/ui/actions/fab/fab-dock.css +19 -6
- package/dist/components/ui/layout/app-search/app-search.css +62 -0
- package/dist/components/ui/layout/app-shell/activity-backdrop.css +10 -2
- package/dist/components/ui/layout/app-shell/app-header.css +108 -0
- package/dist/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
- package/dist/{components-CTyNC_zW.js → components-CJFHhkZv.js} +21798 -17784
- package/dist/components.js +37 -37
- package/dist/{conversion-variant-BDFAxqe9.js → conversion-variant-CqrPwPjC.js} +3 -3
- package/dist/{currency-field-DWHB5oms.js → currency-field-CMFvctye.js} +4 -4
- package/dist/{dialog-Bm5LvVlB.js → dialog-B0iU3fmh.js} +3 -3
- package/dist/dnd.js +2 -2
- package/dist/{dropdown-menu-xlZ6NYUA.js → dropdown-menu-CPOgcajv.js} +1 -1
- package/dist/editor.js +7 -7
- package/dist/{empty-state-C0kviQdW.js → empty-state-D3Jggupu.js} +1 -1
- package/dist/{financial-variant-CggTpad2.js → financial-variant-BdyfYhnp.js} +5 -5
- package/dist/{hooks-Dg94jPRq.js → hooks-Z7KKbv4G.js} +2 -2
- package/dist/hooks.js +2 -2
- package/dist/{hover-card-B1g55Hi6.js → hover-card-CFGIX6kg.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-BcW66bRk.js → icon-badge-kxGWUvcO.js} +1 -1
- package/dist/{icon-button-Cogxy1cy.js → icon-button-BamxMwZs.js} +1 -1
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-bar/top-app-bar.d.ts +18 -3
- package/dist/lib/components/ui/layout/app-search/app-search-bar.d.ts +11 -0
- package/dist/lib/components/ui/layout/app-search/app-search.types.d.ts +47 -0
- package/dist/lib/components/ui/layout/app-search/index.d.ts +3 -0
- package/dist/lib/components/ui/layout/app-search/partials/on-phone.d.ts +2 -0
- package/dist/lib/components/ui/layout/app-search/partials/phone-search.d.ts +3 -0
- package/dist/lib/components/ui/layout/app-search/partials/pill-search.d.ts +3 -0
- package/dist/lib/components/ui/layout/app-search/pill-form.d.ts +18 -0
- package/dist/lib/components/ui/layout/app-search/search-panel.d.ts +24 -0
- package/dist/lib/components/ui/layout/app-search/search-results.d.ts +14 -0
- package/dist/lib/components/ui/layout/app-search/search-shortcut.d.ts +15 -0
- package/dist/lib/components/ui/layout/app-search/search-view.d.ts +22 -0
- package/dist/lib/components/ui/layout/app-search/use-pill-panel.d.ts +22 -0
- package/dist/lib/components/ui/layout/app-search/use-search-text.d.ts +8 -0
- package/dist/lib/components/ui/layout/app-shell/activity-app-bar.d.ts +35 -0
- package/dist/lib/components/ui/layout/app-shell/activity-chrome.d.ts +26 -3
- package/dist/lib/components/ui/layout/app-shell/activity-column-props.d.ts +22 -0
- package/dist/lib/components/ui/layout/app-shell/activity-column.d.ts +10 -2
- package/dist/lib/components/ui/layout/app-shell/activity-layout-navigation.types.d.ts +94 -0
- package/dist/lib/components/ui/layout/app-shell/activity-layout.d.ts +8 -1
- package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +2 -1
- package/dist/lib/components/ui/layout/app-shell/activity-rails.d.ts +16 -0
- package/dist/lib/components/ui/layout/app-shell/activity-sidebar-lane.d.ts +22 -0
- package/dist/lib/components/ui/layout/app-shell/activity-top-nav.d.ts +11 -0
- package/dist/lib/components/ui/layout/app-shell/activity-two-level-lane.d.ts +14 -0
- package/dist/lib/components/ui/layout/app-shell/app-back.d.ts +22 -0
- package/dist/lib/components/ui/layout/app-shell/app-header-row.d.ts +3 -0
- package/dist/lib/components/ui/layout/app-shell/app-header.d.ts +33 -1
- package/dist/lib/components/ui/layout/app-shell/app-shell.utils.d.ts +8 -0
- package/dist/lib/components/ui/layout/app-shell/app-sidebar-entries.d.ts +13 -0
- package/dist/lib/components/ui/layout/app-shell/app-sidebar-label-item.d.ts +3 -1
- package/dist/lib/components/ui/layout/app-shell/bottom-chrome.d.ts +13 -0
- package/dist/lib/components/ui/layout/app-shell/header-title.d.ts +18 -2
- package/dist/lib/components/ui/layout/app-shell/header.utils.d.ts +37 -0
- package/dist/lib/components/ui/layout/app-shell/index.d.ts +3 -0
- package/dist/lib/components/ui/layout/app-shell/navigation-parts.d.ts +38 -0
- package/dist/lib/components/ui/layout/app-shell/navigation.utils.d.ts +36 -0
- package/dist/lib/components/ui/layout/app-shell/page-title-scope.d.ts +14 -0
- package/dist/lib/components/ui/layout/app-shell/page-title.d.ts +12 -1
- package/dist/lib/components/ui/layout/app-shell/shell-scroll.d.ts +32 -0
- package/dist/lib/components/ui/layout/app-shell/sticky-offset.d.ts +8 -0
- package/dist/lib/components/ui/layout/app-shell/types.d.ts +14 -0
- package/dist/lib/components/ui/layout/app-shell/use-focus-while-hidden.d.ts +9 -0
- package/dist/lib/components/ui/layout/app-shell/use-header-height.d.ts +12 -0
- package/dist/lib/components/ui/layout/app-shell/use-header-scroll.d.ts +19 -0
- package/dist/lib/components/ui/layout/app-shell/use-shell-header.d.ts +20 -0
- package/dist/lib/components/ui/layout/auth-card/auth-card-split.d.ts +14 -0
- package/dist/lib/components/ui/layout/auth-card/auth-card.d.ts +13 -1
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid-context.d.ts +21 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.d.ts +9 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.state.d.ts +30 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.tiles.d.ts +8 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.types.d.ts +50 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.utils.d.ts +70 -0
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-tile.d.ts +7 -0
- package/dist/lib/components/ui/layout/dashboard-grid/index.d.ts +4 -0
- package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-announcer.d.ts +6 -0
- package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-edit-bar.d.ts +11 -0
- package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-move-buttons.d.ts +9 -0
- package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-toolbar.d.ts +7 -0
- package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-grid.d.ts +21 -0
- package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-moves.d.ts +22 -0
- package/dist/lib/components/ui/layout/doc/doc-context.d.ts +2 -0
- package/dist/lib/components/ui/layout/doc/doc.d.ts +5 -0
- package/dist/lib/components/ui/layout/doc/index.d.ts +1 -1
- package/dist/lib/components/ui/layout/doc/partials/doc-embedded-bar.d.ts +9 -0
- package/dist/lib/components/ui/layout/doc/partials/doc-embedded.d.ts +8 -0
- package/dist/lib/components/ui/layout/doc/use-doc.d.ts +9 -1
- package/dist/lib/components/ui/layout/editor-layout/editor-layout.d.ts +14 -0
- package/dist/lib/components/ui/layout/editor-layout/editor-layout.types.d.ts +31 -0
- package/dist/lib/components/ui/layout/editor-layout/index.d.ts +4 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-body.d.ts +11 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-canvas.d.ts +8 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-context.d.ts +12 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-start.d.ts +8 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-triggers.d.ts +10 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-names.d.ts +8 -0
- package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-state.d.ts +21 -0
- package/dist/lib/components/ui/layout/index.d.ts +9 -0
- package/dist/lib/components/ui/layout/landing/index.d.ts +6 -0
- package/dist/lib/components/ui/layout/landing/landing-layout.d.ts +15 -0
- package/dist/lib/components/ui/layout/landing/landing-layout.types.d.ts +27 -0
- package/dist/lib/components/ui/layout/landing/landing-section.d.ts +12 -0
- package/dist/lib/components/ui/layout/landing/landing-section.types.d.ts +32 -0
- package/dist/lib/components/ui/layout/landing/landing.classes.d.ts +20 -0
- package/dist/lib/components/ui/layout/landing/partials/landing-header.d.ts +11 -0
- package/dist/lib/components/ui/layout/landing/partials/landing-section-intro.d.ts +13 -0
- package/dist/lib/components/ui/layout/landing/partials/site-footer-group.d.ts +8 -0
- package/dist/lib/components/ui/layout/landing/site-footer.d.ts +13 -0
- package/dist/lib/components/ui/layout/landing/site-footer.types.d.ts +29 -0
- package/dist/lib/components/ui/layout/list-details-layout/internal.d.ts +2 -0
- package/dist/lib/components/ui/layout/list-details-layout/list-details-layout.d.ts +9 -17
- package/dist/lib/components/ui/layout/list-details-layout/partials/history-mark.d.ts +2 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-context.d.ts +17 -1
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-history.d.ts +8 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-inspector.d.ts +21 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-layout.types.d.ts +47 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-resizer.d.ts +9 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-root.d.ts +3 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-trigger.d.ts +13 -4
- package/dist/lib/components/ui/layout/list-details-layout/partials/use-inspector-focus.d.ts +8 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-param.d.ts +26 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-state.d.ts +15 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-width.d.ts +16 -0
- package/dist/lib/components/ui/layout/list-details-layout/partials/use-pane-focus.d.ts +6 -4
- package/dist/lib/components/ui/layout/navigation-bar/index.d.ts +3 -0
- package/dist/lib/components/ui/layout/navigation-bar/internal.d.ts +4 -0
- package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.classes.d.ts +14 -0
- package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.d.ts +35 -0
- package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.utils.d.ts +19 -0
- package/dist/lib/components/ui/layout/navigation-bar/partials/bar-badge.d.ts +5 -0
- package/dist/lib/components/ui/layout/navigation-bar/partials/bar-entry.d.ts +12 -0
- package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-item.d.ts +22 -0
- package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-more.d.ts +24 -0
- package/dist/lib/components/ui/layout/navigation-bar/use-nav-bar-inset.d.ts +12 -0
- package/dist/lib/components/ui/layout/navigation-drawer/index.d.ts +5 -0
- package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.classes.d.ts +9 -0
- package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.d.ts +45 -0
- package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.utils.d.ts +14 -0
- package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-body.d.ts +3 -0
- package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-item.d.ts +20 -0
- package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-modal.d.ts +17 -0
- package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-section.d.ts +15 -0
- package/dist/lib/components/ui/layout/navigation-rail/index.d.ts +3 -0
- package/dist/lib/components/ui/layout/navigation-rail/navigation-rail-panel.d.ts +26 -0
- package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.classes.d.ts +23 -0
- package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.d.ts +42 -1
- package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.utils.d.ts +4 -0
- package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-body.d.ts +3 -0
- package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-item.d.ts +20 -0
- package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-panel-item.d.ts +7 -0
- package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-toggle.d.ts +7 -0
- package/dist/lib/components/ui/layout/navigation-rail/use-rail-expanded.d.ts +13 -0
- package/dist/lib/components/ui/layout/navigation-toolbar/index.d.ts +2 -0
- package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.classes.d.ts +20 -0
- package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.d.ts +51 -0
- package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-item.d.ts +25 -0
- package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-more.d.ts +3 -0
- package/dist/lib/components/ui/layout/pane-layout/internal.d.ts +3 -0
- package/dist/lib/components/ui/layout/pane-layout/pane-layout.d.ts +16 -2
- package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-classes.d.ts +7 -0
- package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-context.d.ts +13 -0
- package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-layout-state.d.ts +16 -0
- package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-narrow.d.ts +6 -0
- package/dist/lib/components/ui/layout/responsive-grid/index.d.ts +4 -1
- package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-item.d.ts +19 -0
- package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-spans.d.ts +19 -0
- package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.d.ts +24 -2
- package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.utils.d.ts +12 -0
- package/dist/lib/components/ui/layout/settings-layout/index.d.ts +2 -0
- package/dist/lib/components/ui/layout/settings-layout/partials/settings-link.d.ts +7 -0
- package/dist/lib/components/ui/layout/settings-layout/partials/settings-list.d.ts +11 -0
- package/dist/lib/components/ui/layout/settings-layout/partials/settings-page.d.ts +5 -0
- package/dist/lib/components/ui/layout/settings-layout/settings-layout.d.ts +10 -0
- package/dist/lib/components/ui/layout/settings-layout/settings-layout.types.d.ts +33 -0
- package/dist/lib/components/ui/layout/settings-layout/settings-layout.utils.d.ts +13 -0
- package/dist/lib/components/ui/layout/thread-layout/thread-layout-classes.d.ts +17 -0
- package/dist/lib/components/ui/layout/thread-layout/thread-layout-parts.d.ts +14 -0
- package/dist/lib/components/ui/layout/thread-layout/thread-layout-stepper.d.ts +11 -0
- package/dist/lib/components/ui/layout/thread-layout/thread-layout.d.ts +30 -3
- package/dist/lib/components/ui/layout/top-nav/index.d.ts +5 -0
- package/dist/lib/components/ui/layout/top-nav/partials/top-nav-item.d.ts +23 -0
- package/dist/lib/components/ui/layout/top-nav/partials/top-nav-menu.d.ts +22 -0
- package/dist/lib/components/ui/layout/top-nav/top-nav.classes.d.ts +10 -0
- package/dist/lib/components/ui/layout/top-nav/top-nav.d.ts +34 -0
- package/dist/lib/components/ui/layout/top-nav/top-nav.utils.d.ts +10 -0
- package/dist/lib/components/ui/widgets/kanban/index.d.ts +1 -1
- package/dist/lib/components/ui/widgets/kanban/kanban-context.d.ts +5 -2
- package/dist/lib/components/ui/widgets/kanban/kanban.d.ts +11 -2
- package/dist/lib/components/ui/widgets/kanban/kanban.slice.d.ts +32 -0
- package/dist/lib/components/ui/widgets/kanban/kanban.utils.d.ts +9 -0
- package/dist/lib/components/ui/widgets/kanban/partials/kanban-card-preview.d.ts +3 -1
- package/dist/lib/components/ui/widgets/kanban/partials/kanban-column.d.ts +6 -0
- package/dist/lib/components/ui/widgets/kanban/partials/kanban-move-to.d.ts +13 -0
- package/dist/lib/components/ui/widgets/kanban/partials/kanban-phone-tabs.d.ts +10 -0
- package/dist/lib/components/ui/widgets/kanban/types.d.ts +7 -0
- package/dist/lib/components/ui/widgets/kanban/use-kanban-board-keys.d.ts +7 -0
- package/dist/lib/components/ui/widgets/kanban/use-kanban-item-actions.d.ts +5 -0
- package/dist/lib/components/ui/widgets/kanban/use-kanban-phone-column.d.ts +18 -0
- package/dist/lib/components/ui/widgets/kanban/use-kanban.d.ts +6 -1
- package/dist/lib/i18n/resources/en/en.d.ts +50 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +52 -2
- package/dist/lib/i18n/resources/fr/fr.d.ts +50 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +52 -2
- package/dist/lib/i18n/resources/resources.d.ts +100 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +52 -52
- package/dist/map.js +7 -7
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/{percent-field--WIXV5dX.js → percent-field-C2LNr8NA.js} +1 -1
- package/dist/{picker-surface-CV09H7Nb.js → picker-surface-BUCFMoAZ.js} +4 -4
- package/dist/{popover-Cd7DkND4.js → popover-DFRwQF12.js} +1 -1
- package/dist/{pos-types-DKCkOTYy.js → pos-types-CXnEdjdy.js} +1 -1
- package/dist/{pos-variant-GrUfbTTP.js → pos-variant-DMwn_7is.js} +4 -4
- package/dist/print.js +1 -1
- package/dist/{programmer-variant-eKJNKENL.js → programmer-variant-Bo4eiDFi.js} +2 -2
- package/dist/{public-y6g4ddxd.js → public-CyQPkkSR.js} +9 -9
- package/dist/{rich-code-block-CRQ0iyLb.js → rich-code-block-iK7UcZdc.js} +5 -5
- package/dist/{scientific-variant-2y3UxAAU.js → scientific-variant-B9ScTgfx.js} +2 -2
- package/dist/{sortable-provider-DdiI3Fwk.js → sortable-provider-BZwVjSVU.js} +3 -3
- package/dist/{spinner-C1QIewWv.js → spinner-RITOxvpH.js} +2 -2
- package/dist/{tabs-KGKvve3y.js → tabs-DSo4eCUn.js} +1 -1
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-C_VeiiCm.js → theme-toggle-3gbzQX0x.js} +1 -1
- package/dist/{toolbar-items-D310xDuM.js → toolbar-items-Bt5RK-Nx.js} +4 -4
- package/dist/{translate-material-BypJJ1l5.js → translate-material-CZTGqgen.js} +1 -1
- package/dist/{translator-DJkf4J7t.js → translator-DTlOlIoq.js} +108 -4
- package/dist/{use-chat-composer-BFhRMHcX.js → use-chat-composer-DBY01IpX.js} +16 -16
- package/dist/{use-heading-spy-DJR8YYm6.js → use-heading-spy-Dt48bBts.js} +4 -4
- package/dist/{use-material-translation-CD6QoVal.js → use-material-translation-BJucC_xe.js} +1 -1
- package/dist/{use-return-focus-Cevw_6yq.js → use-return-focus-BS1JLcnq.js} +1 -1
- package/docs/README.md +1 -0
- package/docs/components/data-display.md +4 -0
- package/docs/components/navigation-and-layout.md +944 -27
- package/docs/components/rich-widgets.md +26 -0
- package/docs/guides/app-shell.md +641 -2
- package/docs/guides/i18n.md +13 -1
- package/docs/guides/layouts.md +215 -0
- package/docs/guides/ssr.md +1 -1
- package/docs/previews/navigation-layout-appshell-page-ground.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-dashboardgrid.webp +0 -0
- package/docs/previews/navigation-layout-editorlayout.webp +0 -0
- package/docs/previews/navigation-layout-landinglayout.webp +0 -0
- package/docs/previews/navigation-layout-panelayout.webp +0 -0
- package/docs/previews/navigation-layout-settingslayout.webp +0 -0
- package/docs/previews/navigation-layout-threadlayout-pages.webp +0 -0
- package/docs/previews/navigation-layout-threadlayout.webp +0 -0
- package/docs/roadmap.md +10 -2
- package/lib/components/components.css +3 -0
- package/lib/components/ui/actions/fab/fab-dock.css +19 -6
- package/lib/components/ui/layout/app-search/app-search.css +62 -0
- package/lib/components/ui/layout/app-shell/activity-backdrop.css +10 -2
- package/lib/components/ui/layout/app-shell/app-header.css +108 -0
- package/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
- package/package.json +1 -1
package/docs/guides/i18n.md
CHANGED
|
@@ -236,7 +236,8 @@ the camera's button, toggle and image (`material.camera.capture`, `captured`,
|
|
|
236
236
|
barcode accessible names, the calendar's navigation tooltips
|
|
237
237
|
(`material.calendar.*`), the data table's selection checkboxes, the filter's
|
|
238
238
|
presets and `Min`/`Max` fields, the `variant="4"` spinner's label,
|
|
239
|
-
`ScrollToTop`, the
|
|
239
|
+
`ScrollToTop`, the bottom bar's `material.navigation.more` and `.close` (not shown
|
|
240
|
+
until the bar is drawn), the `ThreadLayout` stepper's `nav` name `material.navigation.steps` ("Progress"), the network upload field's `Retry` and `Remove {name}`, the map's
|
|
240
241
|
`You are here` and zoom buttons, and the icon-only close button of
|
|
241
242
|
`DialogClose`, `DrawerClose`, `SheetClose` and `SheetContent`'s
|
|
242
243
|
`withCloseButton`. A range `Slider`'s readout inputs read
|
|
@@ -331,6 +332,17 @@ and its emoji buttons (`material['rich-text-editor'].placeholder` /
|
|
|
331
332
|
(`material['circular-progress'].label`); `MediaPlayer`'s "Media player" for a
|
|
332
333
|
track without a title (`material['media-player'].label`); `PaneLayoutPane`'s
|
|
333
334
|
sheet title on a phone (`material['pane-layout']['sheet-title']`);
|
|
335
|
+
`EditorLayout`'s region names, "Toolbar", "Canvas", "Outline" and "Properties"
|
|
336
|
+
(`material['editor-layout'].toolbar` / `canvas` / `start` / `properties`; French
|
|
337
|
+
"Barre d'outils", "Zone de travail", "Plan", "Propriétés");
|
|
338
|
+
`ListDetailsLayout`'s way back, inspector close and back buttons and the list
|
|
339
|
+
separator's name (`material['list-details'].back` / `inspector-back` /
|
|
340
|
+
`inspector-close` / `resize`);
|
|
341
|
+
`SettingsLayout`'s default title, search name and empty message
|
|
342
|
+
(`material['settings-layout'].title` / `search` / `empty`);
|
|
343
|
+
`LandingLayout`'s phone menu button, "Menu", and `SiteFooter`'s links landmark,
|
|
344
|
+
"Footer" and new-tab hint, "opens in a new tab" (`material.landing.menu` / `footer` /
|
|
345
|
+
`new-tab`; French "Menu", "Pied de page" and "s'ouvre dans un nouvel onglet");
|
|
334
346
|
`JsonViewer`'s "Empty JSON" (`material['json-viewer'].empty`);
|
|
335
347
|
`TimePicker`'s AM / PM (`material['time-picker'].am` / `pm`, "a.m." / "p.m." in
|
|
336
348
|
French); and the names of `DurationField`'s inputs, "Hours" and "Minutes"
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Layouts
|
|
2
|
+
|
|
3
|
+
A map of the layouts `@nxgt/material` draws, to pick from by need: how the app
|
|
4
|
+
navigates, what its header looks like, and which layout a page takes. Every
|
|
5
|
+
choice is a prop or a component; nothing here is on unless you ask, and the
|
|
6
|
+
shell's default is unchanged. Each section gives a working example and links
|
|
7
|
+
the page that has the full props. Every component in the snippets is imported
|
|
8
|
+
from `@nxgt/material/components`.
|
|
9
|
+
|
|
10
|
+
Three sizes decide what is drawn, by CSS only (so the server and the client
|
|
11
|
+
agree): a **phone** below 768px, a **tablet** from 768px to 1279px and a
|
|
12
|
+
**desktop** from 1280px.
|
|
13
|
+
|
|
14
|
+
## Pick a navigation
|
|
15
|
+
|
|
16
|
+
`ActivityLayout` takes `navigation`: one name for every size, or one per size.
|
|
17
|
+
|
|
18
|
+
| The app needs | Use | Notes |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| three to five main destinations, one thumb away | `'bar'` | a bottom bar on a phone only (below 768px); from 768px the default rail shows, and `{ tablet: 'bar' }` keeps the bar there; the rest go under "More"; badges on the icons |
|
|
21
|
+
| a compact column of icons | `'rail'` | a rail with an optional FAB (`navigationFab`); a phone never draws it: it keeps its menu sheet |
|
|
22
|
+
| the same, with labels and a primary action | `'rail-expanded'` | a wider rail, extended FAB; a phone never draws it: it keeps its menu sheet |
|
|
23
|
+
| many destinations in groups | `'drawer'` | a standard drawer; modal on a phone |
|
|
24
|
+
| a dense tool with the sidebar the user collapses | `'sidebar'` | remembered with `persistKey` |
|
|
25
|
+
| a website-like app with menus | `'top'` | a top navigation with dropdowns; nested in the phone menu |
|
|
26
|
+
| two levels: sections, then pages | `'two-level'` | a rail beside a panel of the section's pages |
|
|
27
|
+
| a content app that wants the whole screen | `'floating'` | a pill of links at the bottom, `hideOnScroll` |
|
|
28
|
+
| the default: a menu sheet on a phone, a rail from 768px | `'modal-drawer'` (the phone preset) | what an unset `navigation` draws |
|
|
29
|
+
| no navigation of its own | `'none'` | |
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { ActivityLayout, type MenuItem } from '@nxgt/material/components';
|
|
33
|
+
import { Outlet } from 'react-router';
|
|
34
|
+
|
|
35
|
+
const items: MenuItem[] = [
|
|
36
|
+
{ label: 'Home', url: '/', icon: 'house' },
|
|
37
|
+
{ label: 'Inbox', url: '/inbox', icon: 'envelope', badge: 3 },
|
|
38
|
+
{ label: 'Tasks', url: '/tasks', icon: 'check' },
|
|
39
|
+
{ label: 'Settings', url: '/settings', icon: 'gear', priority: -1 },
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
// a bottom bar on a phone, a rail with a button on a tablet, a sidebar on a desktop
|
|
43
|
+
export function Shell() {
|
|
44
|
+
return (
|
|
45
|
+
<ActivityLayout
|
|
46
|
+
items={items}
|
|
47
|
+
logo="/logo.svg"
|
|
48
|
+
name="Acme"
|
|
49
|
+
navigation={{ phone: 'bar', tablet: 'rail', desktop: 'sidebar', persistKey: 'acme-nav' }}
|
|
50
|
+
>
|
|
51
|
+
<Outlet />
|
|
52
|
+
</ActivityLayout>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Each preset is also exported as a part (`NavigationBar`, `NavigationRail`,
|
|
58
|
+
`NavigationDrawer`, `TopNav`, `NavigationRailPanel`, `NavigationToolbar`) for a
|
|
59
|
+
layout of your own. Every preset, its entries (`bar`, `priority`, `group`,
|
|
60
|
+
`children`, `badge`) and its accessibility are in the
|
|
61
|
+
[app shell guide](app-shell.md#navigation-and-header).
|
|
62
|
+
|
|
63
|
+
## Pick a header
|
|
64
|
+
|
|
65
|
+
`header` takes a name or `{ variant, collapse, hideOnScroll, tabs, search }`.
|
|
66
|
+
|
|
67
|
+
| Variant | What it is |
|
|
68
|
+
| --- | --- |
|
|
69
|
+
| `'small'` | the default bar: title at the start, actions at the end |
|
|
70
|
+
| `'center'` | the title centred |
|
|
71
|
+
| `'medium'`, `'large'` | a taller bar whose headline collapses to the small one on scroll |
|
|
72
|
+
| `'none'` | no bar (a full-bleed page) |
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
<ActivityLayout
|
|
76
|
+
items={items}
|
|
77
|
+
header={{
|
|
78
|
+
variant: 'large',
|
|
79
|
+
hideOnScroll: true,
|
|
80
|
+
search: { placeholder: 'Search projects', shortcut: '/' },
|
|
81
|
+
tabs: (
|
|
82
|
+
<TabsNav aria-label="Project sections" value="activity">
|
|
83
|
+
<TabsNavLink to="/projects/overview" value="overview">Overview</TabsNavLink>
|
|
84
|
+
<TabsNavLink to="/projects/activity" value="activity">Activity</TabsNavLink>
|
|
85
|
+
</TabsNav>
|
|
86
|
+
),
|
|
87
|
+
}}
|
|
88
|
+
>
|
|
89
|
+
<Outlet />
|
|
90
|
+
</ActivityLayout>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
A route changes its own bar with a handle, and draws a back arrow:
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
export const handle = {
|
|
97
|
+
title: 'Atlas redesign',
|
|
98
|
+
header: { variant: 'medium' },
|
|
99
|
+
back: { to: '/projects', label: 'Projects' },
|
|
100
|
+
} satisfies AppShellHandle;
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The search is a pill with a docked results panel from 768px and a full-screen
|
|
104
|
+
view on a phone. See [The app bar variants](app-shell.md#the-app-bar-variants),
|
|
105
|
+
[the search](app-shell.md#the-app-bars-search),
|
|
106
|
+
[the tabs](app-shell.md#tabs-under-the-app-bar) and
|
|
107
|
+
[the back arrow](app-shell.md#the-back-arrow).
|
|
108
|
+
|
|
109
|
+
## Pick a page layout
|
|
110
|
+
|
|
111
|
+
Inside the shell, a page is one of these. All of them follow the width of their
|
|
112
|
+
own container where noted, so they also work in a dialog or a split pane.
|
|
113
|
+
|
|
114
|
+
| The page is | Use | Phone |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| a list beside the selected record | `ListDetailsLayout` (`inspector` adds a third pane) | one view at a time, with a back bar |
|
|
117
|
+
| content with a side panel (filters, folders) | `PaneLayout` | the pane is a sheet (`phone="sheet"`, `"bottom"` or `"stack"`) |
|
|
118
|
+
| a form, a wizard or a conversation in a centred column | `ThreadLayout` | the same column, full width |
|
|
119
|
+
| grouped settings | `SettingsLayout` | the list, then the section's page |
|
|
120
|
+
| cards or tiles | `ResponsiveGrid` (spans, masonry) | one column |
|
|
121
|
+
| tiles the user rearranges | `DashboardGrid` | one or two columns |
|
|
122
|
+
| a board of columns | `Kanban` with `phoneLayout="tabs"` | one column per tab, swipe |
|
|
123
|
+
| a tool with a canvas | `EditorLayout` | properties in a bottom sheet |
|
|
124
|
+
| a public page outside the shell | `LandingLayout` | the links in a drawer |
|
|
125
|
+
| sign-in and sign-up | `AuthCard` with `layout="split"` | the card alone |
|
|
126
|
+
| documentation | `Doc` with `chrome="embedded"` inside the shell | the tree in a sheet |
|
|
127
|
+
|
|
128
|
+
A settings screen, from sections:
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
import { SettingsLayout } from '@nxgt/material/components';
|
|
132
|
+
|
|
133
|
+
<SettingsLayout
|
|
134
|
+
search
|
|
135
|
+
sections={[
|
|
136
|
+
{ id: 'profile', group: 'Account', title: 'Profile', description: 'Name and language', content: <ProfileForm /> },
|
|
137
|
+
{ id: 'alerts', group: 'Preferences', title: 'Notifications', description: 'Email and push', content: <AlertsForm /> },
|
|
138
|
+
]}
|
|
139
|
+
/>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
A list with its detail, selected in the URL. `history="push"` keeps the view in
|
|
143
|
+
`?view=`, so the browser's Back goes from the details to the list on a phone, and
|
|
144
|
+
`useListDetailsParam()` reads and sets the selected id:
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
const [id, select] = useListDetailsParam();
|
|
148
|
+
|
|
149
|
+
<ListDetailsLayout history="push">
|
|
150
|
+
<ListDetailsLayout.List>
|
|
151
|
+
{patients.map((p) => <Row key={p.id} onClick={() => select(p.id, { open: 'details' })} />)}
|
|
152
|
+
</ListDetailsLayout.List>
|
|
153
|
+
<ListDetailsLayout.Details back="Patients"><Sheet id={id} /></ListDetailsLayout.Details>
|
|
154
|
+
</ListDetailsLayout>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
An editor, with its properties in a sheet on a phone:
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
<EditorLayout
|
|
161
|
+
className="h-dvh"
|
|
162
|
+
toolbar={<><UndoRedoButtons /><span className="flex-1" /><EditorLayout.PropertiesTrigger /></>}
|
|
163
|
+
properties={<SelectionForm />}
|
|
164
|
+
>
|
|
165
|
+
<Artboard />
|
|
166
|
+
</EditorLayout>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
A dashboard the user rearranges (the order is yours to store):
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
<DashboardGrid aria-label="Dashboard" order={order} onOrderChange={setOrder}>
|
|
173
|
+
<DashboardTile id="revenue" title="Revenue" span={{ base: 1, md: 2 }}><RevenueChart /></DashboardTile>
|
|
174
|
+
<DashboardTile id="orders" title="Orders"><OrdersCount /></DashboardTile>
|
|
175
|
+
</DashboardGrid>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
A landing page, outside the shell (it needs a router, like the shell):
|
|
179
|
+
|
|
180
|
+
```tsx
|
|
181
|
+
<LandingLayout
|
|
182
|
+
name="Acme"
|
|
183
|
+
items={[{ label: 'Pricing', url: '/pricing', icon: 'tag' }]}
|
|
184
|
+
actions={<LinkButton to="/start" variant="filled">Get started</LinkButton>}
|
|
185
|
+
hero={<LandingSection variant="hero" tone="ground" title="Plan the work" />}
|
|
186
|
+
footer={<SiteFooter brand="Acme" groups={[]} legal="© 2026 Acme" />}
|
|
187
|
+
>
|
|
188
|
+
<LandingSection title="Everything in one place">…</LandingSection>
|
|
189
|
+
</LandingLayout>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The props of each are in
|
|
193
|
+
[Navigation & layout](../components/navigation-and-layout.md):
|
|
194
|
+
[`ListDetailsLayout`](../components/navigation-and-layout.md#listdetailslayout)
|
|
195
|
+
(with `PaneLayout` and `ThreadLayout`),
|
|
196
|
+
[`SettingsLayout`](../components/navigation-and-layout.md#settingslayout),
|
|
197
|
+
[`ResponsiveGrid`](../components/navigation-and-layout.md#responsivegrid),
|
|
198
|
+
[`DashboardGrid`](../components/navigation-and-layout.md#dashboardgrid),
|
|
199
|
+
[`EditorLayout`](../components/navigation-and-layout.md#editorlayout) and
|
|
200
|
+
[`LandingLayout`](../components/navigation-and-layout.md#landinglayout).
|
|
201
|
+
|
|
202
|
+
## Whole screens to start from
|
|
203
|
+
|
|
204
|
+
The `Guides/Recipes` stories in Storybook are tested whole screens (the code
|
|
205
|
+
ships with the `screen-recipes` skill of the `nxgt-material` plugin): a home
|
|
206
|
+
dashboard, a list and detail, a form and dialog, a table and settings, a dense
|
|
207
|
+
detail page, a status board and a landing page. Start from the closest one and
|
|
208
|
+
replace the data.
|
|
209
|
+
|
|
210
|
+
## See also
|
|
211
|
+
|
|
212
|
+
- [App shell](app-shell.md): `items`, breadcrumbs, the page's title, the
|
|
213
|
+
background and the route transitions.
|
|
214
|
+
- [Cards and tiles](cards-and-tiles.md): what goes inside a grid.
|
|
215
|
+
- [Themes](themes.md): the surfaces the layouts sit on.
|
package/docs/guides/ssr.md
CHANGED
|
@@ -167,7 +167,7 @@ State the server cannot know must be resolved the same way on both sides:
|
|
|
167
167
|
| Language | no `localStorage`: `defaultLanguage` | Resolve it from the request and pass `initialLanguage` to `I18nProvider`. See [i18n](i18n.md#server-rendering) |
|
|
168
168
|
| Theme | no preference: light | An inline boot script in `<head>`, and `suppressHydrationWarning` on `<html>`. See [theming](theming.md#no-flash-on-load-a-boot-script) |
|
|
169
169
|
| `formatAmount`, `formatDate` | the server's locale and time zone, unless you pass them | Use `useFormatters({ timeZone })`, which follows the `I18nProvider` language, or pass `locale` and `timeZone` (`createFormatters` binds them). A date-only `YYYY-MM-DD` is the same everywhere. See [printing](printing.md#formatamount-and-formatdate) |
|
|
170
|
-
| Screen width, `prefers-color-scheme` (`useIsMobile`, `useTheme`, `AppHeader`, `DataTable`, `TimeField`, `PaneLayout`, `ListDetailsLayout`, the code blocks, …) | no screen: a desktop, light | Nothing: a hydrating client renders the same, then switches on a phone or a dark screen |
|
|
170
|
+
| Screen width, `prefers-color-scheme` (`useIsMobile`, `useTheme`, `AppHeader`, `DataTable`, `TimeField`, `PaneLayout`, `ListDetailsLayout`, the code blocks, …) | no screen: a desktop, light | Nothing: a hydrating client renders the same, then switches on a phone or a dark screen (`ListDetailsLayout`'s `listWidth` is the default width until then; its inspector is switched by CSS) |
|
|
171
171
|
| An attribute's `DATETIME` / `TIME` instant (`AttributesSummary`, `AttributesEditor`), the opening hours' first day of the week | the server's time zone and Intl data differ from the browser's | Nothing: the instant is written in UTC and the week starts on the language's first day until mount, then the viewer's zone and the locale's week info take over, so hydration matches |
|
|
172
172
|
| `Stepper` layout, `Timeline` sides | CSS breakpoints and a container query, no screen width in JavaScript | Nothing: server and client markup are the same |
|
|
173
173
|
| `Timeline` `grouped` | the server's time zone and clock differ from the browser's | Pass `timeZone` and `now` to group on the server too; without them the day headings appear after mount (the items do not remount) |
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -169,8 +169,10 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
169
169
|
|
|
170
170
|
## Next
|
|
171
171
|
|
|
172
|
-
- **
|
|
173
|
-
|
|
172
|
+
- **Seven more layout recipes** — Feed, Gallery, Auth, Thread, settings,
|
|
173
|
+
dashboard and editor screens, each a tested Storybook recipe under
|
|
174
|
+
Guides/Recipes with its code beside it, on the layouts the shell now ships
|
|
175
|
+
([#2413](https://github.com/softistx/nxgt-material/issues/2413)).
|
|
174
176
|
- **FilterBar "Add a filter" stays on its row** — the button no longer wraps
|
|
175
177
|
alone onto a second row on a desktop screen ([#1752](https://github.com/softistx/nxgt-material/issues/1752)).
|
|
176
178
|
|
|
@@ -259,6 +261,10 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
259
261
|
|
|
260
262
|
## Later
|
|
261
263
|
|
|
264
|
+
- **A lighter first load for the app shell** — `ActivityLayout` pulls about
|
|
265
|
+
831 KB gzipped through the library's single shared chunk; splitting it so the
|
|
266
|
+
shell costs tens of KB at first load, the rest loaded where a page uses it
|
|
267
|
+
(#2417; measured by `scripts/shell-size.spec.ts`).
|
|
262
268
|
- **One `onUpload` options object (next major)** — the upload fields'
|
|
263
269
|
`onUpload(file, onProgress?, signal?)` becomes `onUpload(file, { onProgress,
|
|
264
270
|
signal })`, like the editor's upload context.
|
|
@@ -377,6 +383,8 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
377
383
|
|
|
378
384
|
## Shipped
|
|
379
385
|
|
|
386
|
+
- **Layouts: adaptive navigation, headers and page layouts (next minor)** — `ActivityLayout` takes `navigation` (a bottom bar with More and badges, a rail with a FAB or expanded, a standard or modal drawer, a collapsible sidebar, a top navigation with dropdowns, two-level navigation, a floating toolbar or none, chosen for phone, tablet and desktop) and `header` (small, center-aligned, medium and large collapsing on scroll, hide on scroll, a search bar that opens full screen on a phone, sticky tabs), and a route adds a back arrow with `handle.back`; each piece is also exported. Page layouts grow with it: an inspector pane and the selection in the URL for `ListDetailsLayout`, phone modes and a container breakpoint for `PaneLayout`, a centred form and wizard for `ThreadLayout`, a split `AuthCard`, spans and masonry for `ResponsiveGrid`, tabs for `Kanban` on a phone, `Doc` drawn inside the shell, and new `SettingsLayout`, `DashboardGrid` (tiles the user rearranges), `EditorLayout` and `LandingLayout` (with `LandingSection` and `SiteFooter`). Everything is opt-in; the shell's default is unchanged. [Layouts guide](guides/layouts.md) ([#2103](https://github.com/softistx/nxgt-material/issues/2103)). Follow-ups: a resize handle for `EditorLayout`'s properties panel and a separate open state for its phone sheet.
|
|
387
|
+
|
|
380
388
|
- **Moment (3.74.0)** — a transient full-screen announcement for a one-off event (a player is eliminated, a role is revealed): a modal dialog named by its title, with an illustration, description, action and tone, dismissed by Escape, a tap, its action or a timer, and no motion under reduced motion ([#2220](https://github.com/softistx/nxgt-material/issues/2220), [#2247](https://github.com/softistx/nxgt-material/pull/2247)). A `modal={false}` variant for live events (focus stays, taps pass through, polite status) follows in the next minor ([#2313](https://github.com/softistx/nxgt-material/issues/2313)).
|
|
381
389
|
- **RecordActionsMenu (next minor)** — one menu for a record's lifecycle: archive with an Undo toast (or confirm first with `archivePolicy="confirm"`), restore, and delete that always confirms and shows the backend's refusal, with `ConfirmDialog` gaining `details` and `refusal` slots.
|
|
382
390
|
- **Assistant approval card (next minor)** — `ChatActionProposal` shows an action an assistant proposes, with its status, deadline and Confirm / Reject, and `ChatToolActivity` is a compact row for a tool step in a chat thread ([#2134](https://github.com/softistx/nxgt-material/issues/2134)).
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
@import "./ui/actions/button-group/button-group-standard.css";
|
|
55
55
|
/* ActivityLayout: the route transition (cross-fade, none under reduced motion). */
|
|
56
56
|
@import "./ui/layout/app-shell/route-transition.css";
|
|
57
|
+
@import "./ui/layout/app-shell/app-header.css";
|
|
57
58
|
@import "./ui/layout/app-shell/activity-backdrop.css";
|
|
58
59
|
@import "./ui/layout/app-shell/activity-backdrop-shapes.css";
|
|
59
60
|
@import "./ui/layout/auth-card/auth-card-backdrop.css";
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
@import "./ui/actions/toolbar/toolbar-morph-slots.css";
|
|
98
99
|
@import "./ui/actions/toolbar/toolbar-morph-widen.css";
|
|
99
100
|
@import "./ui/actions/toolbar/toolbar-expressive-look.css";
|
|
101
|
+
@import "./ui/layout/navigation-toolbar/navigation-toolbar.css";
|
|
100
102
|
@import "./ui/actions/toolbar/toolbar-density.css";
|
|
101
103
|
@import "./editor-toolbar-expressive.css";
|
|
102
104
|
@import "./editor-floating-bar.css";
|
|
@@ -206,6 +208,7 @@
|
|
|
206
208
|
@import "./ui/fields/attributes/attributes.css";
|
|
207
209
|
/* Background: the gradient preset's CSS, shared (lib/backgrounds/css); the other presets are opt-in: backgrounds.css. */
|
|
208
210
|
@import "./background-shared.css";
|
|
211
|
+
@import "./ui/layout/app-search/app-search.css"; /* AppSearchBar, SearchView */
|
|
209
212
|
@import "./ui/widgets/drawing/drawing.css"; /* @nxgt/material/draw: role colours, focus ring */
|
|
210
213
|
@import "./ui/widgets/drawing/drawing-animate.css";
|
|
211
214
|
@import "./ui/widgets/barcode/barcode.css"; /* @nxgt/material/barcode: symbol colours, label sheet */
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/* FabDock: the bottom-end corner, 16px in (24px from 840px wide, M3's
|
|
2
|
-
* medium window), above the home indicator
|
|
3
|
-
*
|
|
2
|
+
* medium window), above the home indicator, above a docked bar that sets
|
|
3
|
+
* --nxgt-media-dock and above a bottom navigation bar (--nxgt-nav-bar);
|
|
4
|
+
* --nxgt-bottom-chrome is the two together. The bar's room holds the
|
|
5
|
+
* safe area, so the dock clears the taller of the two, not their sum. `contained` places it in its
|
|
6
|
+
* positioned parent.
|
|
4
7
|
* While a FabMenu in it is open, a light scrim covers the page (contained:
|
|
5
8
|
* the pane) behind the pills. The menu is modal, so the whole page is inert
|
|
6
9
|
* either way. */
|
|
@@ -11,8 +14,13 @@
|
|
|
11
14
|
inset-inline-end: var(--fab-dock-gap);
|
|
12
15
|
inset-block-end: calc(
|
|
13
16
|
var(--fab-dock-gap) +
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
max(
|
|
18
|
+
env(safe-area-inset-bottom, 0px),
|
|
19
|
+
var(
|
|
20
|
+
--nxgt-bottom-chrome,
|
|
21
|
+
calc(var(--nxgt-nav-bar, 0px) + var(--nxgt-media-dock, 0px))
|
|
22
|
+
)
|
|
23
|
+
)
|
|
16
24
|
);
|
|
17
25
|
z-index: 40;
|
|
18
26
|
display: flex;
|
|
@@ -33,8 +41,13 @@
|
|
|
33
41
|
padding: var(--fab-dock-gap);
|
|
34
42
|
padding-block-end: calc(
|
|
35
43
|
var(--fab-dock-gap) +
|
|
36
|
-
|
|
37
|
-
|
|
44
|
+
max(
|
|
45
|
+
env(safe-area-inset-bottom, 0px),
|
|
46
|
+
var(
|
|
47
|
+
--nxgt-bottom-chrome,
|
|
48
|
+
calc(var(--nxgt-nav-bar, 0px) + var(--nxgt-media-dock, 0px))
|
|
49
|
+
)
|
|
50
|
+
)
|
|
38
51
|
);
|
|
39
52
|
}
|
|
40
53
|
@media (min-width: 840px) {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* The app bar's search (app-search-bar.tsx, search-view.tsx). One source for
|
|
2
|
+
* the sizes: --nxgt-search-h is the pill's height, 2.75rem in the bar and
|
|
3
|
+
* 3rem (a 48px target) in the phone's full-screen view; the back arrow, the
|
|
4
|
+
* phone's button and the field read it. The pill is a filled, fully rounded
|
|
5
|
+
* field box: no border at rest, the field box's focus ring when focused.
|
|
6
|
+
* Classes in the `components` layer: a utility passed as `className` wins. */
|
|
7
|
+
@layer components {
|
|
8
|
+
.nxgt-search-bar {
|
|
9
|
+
--nxgt-search-h: 2.75rem;
|
|
10
|
+
}
|
|
11
|
+
.nxgt-search-button {
|
|
12
|
+
--nxgt-search-h: 3rem;
|
|
13
|
+
}
|
|
14
|
+
.nxgt-search-view {
|
|
15
|
+
--nxgt-search-h: 3rem;
|
|
16
|
+
}
|
|
17
|
+
.nxgt-search-pill {
|
|
18
|
+
--nxgt-field-radius: calc(var(--nxgt-search-h) / 2);
|
|
19
|
+
}
|
|
20
|
+
.nxgt-search-pill [data-slot="input-group"] {
|
|
21
|
+
height: var(--nxgt-search-h);
|
|
22
|
+
border-color: transparent;
|
|
23
|
+
background-color: var(--muted);
|
|
24
|
+
}
|
|
25
|
+
.nxgt-search-pill [data-slot="input-group"]:focus-within {
|
|
26
|
+
background-color: var(--background);
|
|
27
|
+
}
|
|
28
|
+
/* The bar's pill: grows to a comfortable width and gives way to the title. */
|
|
29
|
+
.nxgt-search-bar {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: 0.5rem;
|
|
33
|
+
flex: 0 1 28rem;
|
|
34
|
+
min-width: 0;
|
|
35
|
+
}
|
|
36
|
+
.nxgt-search-form {
|
|
37
|
+
flex: 1 1 auto;
|
|
38
|
+
min-width: 0;
|
|
39
|
+
}
|
|
40
|
+
.nxgt-search-button {
|
|
41
|
+
flex: none;
|
|
42
|
+
}
|
|
43
|
+
.nxgt-search-view-row {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
gap: 0.5rem;
|
|
47
|
+
padding: 0.5rem;
|
|
48
|
+
padding-top: max(0.5rem, env(safe-area-inset-top));
|
|
49
|
+
padding-left: max(0.5rem, env(safe-area-inset-left));
|
|
50
|
+
padding-right: max(0.5rem, env(safe-area-inset-right));
|
|
51
|
+
}
|
|
52
|
+
.nxgt-search-view-back {
|
|
53
|
+
flex: none;
|
|
54
|
+
}
|
|
55
|
+
.nxgt-search-view-results {
|
|
56
|
+
min-height: 0;
|
|
57
|
+
overflow-y: auto;
|
|
58
|
+
overscroll-behavior: contain;
|
|
59
|
+
padding: 0.5rem 1rem;
|
|
60
|
+
padding-bottom: max(0.5rem, env(safe-area-inset-bottom));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -82,8 +82,16 @@
|
|
|
82
82
|
--nxgt-backdrop-height: calc(
|
|
83
83
|
100dvh -
|
|
84
84
|
var(--nxgt-backdrop-top) -
|
|
85
|
-
max(
|
|
86
|
-
|
|
85
|
+
max(
|
|
86
|
+
max(0.5rem, env(safe-area-inset-bottom)),
|
|
87
|
+
calc(
|
|
88
|
+
0.5rem +
|
|
89
|
+
var(
|
|
90
|
+
--nxgt-bottom-chrome,
|
|
91
|
+
calc(var(--nxgt-nav-bar, 0px) + var(--nxgt-media-dock, 0px))
|
|
92
|
+
)
|
|
93
|
+
)
|
|
94
|
+
)
|
|
87
95
|
);
|
|
88
96
|
position: sticky;
|
|
89
97
|
top: var(--nxgt-backdrop-top);
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* The app bar's variants (app-header.tsx). A medium or large bar is a first row
|
|
2
|
+
* (the small bar) and a headline row under it. `--nxgt-header-progress` (0
|
|
3
|
+
* expanded, 1 collapsed) is set on the bar by use-header-scroll.ts as the shell
|
|
4
|
+
* scrolls; unset (the server, a bar outside the shell) it is 0, the expanded
|
|
5
|
+
* bar. Scoped to the bar's `data-variant`: the default small bar is untouched. */
|
|
6
|
+
[data-slot="app-header"][data-variant="medium"] {
|
|
7
|
+
--nxgt-header-extra: 5rem;
|
|
8
|
+
}
|
|
9
|
+
[data-slot="app-header"][data-variant="large"] {
|
|
10
|
+
--nxgt-header-extra: 8rem;
|
|
11
|
+
}
|
|
12
|
+
/* The bar's height now: the row, and the headline's share still showing. */
|
|
13
|
+
[data-slot="app-header"][data-variant] {
|
|
14
|
+
--nxgt-header-h: var(--nxgt-header-height);
|
|
15
|
+
}
|
|
16
|
+
[data-slot="app-header"]:is([data-variant="medium"], [data-variant="large"]) {
|
|
17
|
+
--nxgt-header-h: calc(
|
|
18
|
+
var(--nxgt-header-height) +
|
|
19
|
+
var(--nxgt-header-extra) *
|
|
20
|
+
(1 - var(--nxgt-header-progress, 0))
|
|
21
|
+
);
|
|
22
|
+
height: var(--nxgt-header-h);
|
|
23
|
+
}
|
|
24
|
+
[data-slot="app-header-headline"] {
|
|
25
|
+
min-height: 0;
|
|
26
|
+
opacity: clamp(0, calc(1 - var(--nxgt-header-progress, 0) * 1.6), 1);
|
|
27
|
+
transform: translateY(calc(var(--nxgt-header-progress, 0) * -0.75rem));
|
|
28
|
+
}
|
|
29
|
+
/* Not collapsing: the headline stays. */
|
|
30
|
+
[data-slot="app-header"]:not([data-collapsible])
|
|
31
|
+
[data-slot="app-header-headline"] {
|
|
32
|
+
opacity: 1;
|
|
33
|
+
transform: none;
|
|
34
|
+
}
|
|
35
|
+
/* The copy of the title in the small row appears once the headline is going. */
|
|
36
|
+
[data-slot="app-header-collapsed-title"] {
|
|
37
|
+
opacity: clamp(0, calc((var(--nxgt-header-progress, 0) - 0.5) * 2), 1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Hide on scroll: the bar slides up under the gutter, and out of the tab order
|
|
41
|
+
* (`inert`, set with data-hidden). A bar in a contained shell is in the flow,
|
|
42
|
+
* so it also gives its room back. */
|
|
43
|
+
[data-slot="app-header"][data-variant] {
|
|
44
|
+
transition: transform 200ms ease;
|
|
45
|
+
}
|
|
46
|
+
[data-slot="app-header"][data-hidden] {
|
|
47
|
+
transform: translateY(calc(-100% - 1rem - env(safe-area-inset-top, 0px)));
|
|
48
|
+
}
|
|
49
|
+
[data-slot="activity-layout"][data-scroll="container"]
|
|
50
|
+
[data-slot="app-header"][data-hidden] {
|
|
51
|
+
margin-bottom: calc(-1 * var(--nxgt-header-h) - 0.5rem);
|
|
52
|
+
}
|
|
53
|
+
@media (prefers-reduced-motion: reduce) {
|
|
54
|
+
[data-slot="app-header"][data-variant] {
|
|
55
|
+
transition: none;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Tabs: a row of one size under the bar, stuck to it (app-header.tsx). The bar
|
|
60
|
+
* is that much taller; while it hides on scroll it slides up by everything but
|
|
61
|
+
* the tabs, which stay pinned at the top of the window. */
|
|
62
|
+
[data-slot="app-header"] {
|
|
63
|
+
--nxgt-header-tabs: 3rem;
|
|
64
|
+
}
|
|
65
|
+
[data-slot="app-header"][data-tabs]:is(
|
|
66
|
+
[data-variant="medium"],
|
|
67
|
+
[data-variant="large"]
|
|
68
|
+
) {
|
|
69
|
+
height: calc(var(--nxgt-header-h) + var(--nxgt-header-tabs));
|
|
70
|
+
}
|
|
71
|
+
[data-slot="app-header"][data-tabs][data-hidden] {
|
|
72
|
+
transform: translateY(calc(var(--nxgt-header-tabs) - 100%));
|
|
73
|
+
}
|
|
74
|
+
[data-slot="activity-layout"][data-scroll="container"]
|
|
75
|
+
[data-slot="app-header"][data-tabs][data-hidden] {
|
|
76
|
+
margin-bottom: calc(-1 * var(--nxgt-header-h));
|
|
77
|
+
}
|
|
78
|
+
/* The headline's bottom padding goes with the collapse when tabs close the bar,
|
|
79
|
+
* else it would keep 1rem the tabs have no room for. */
|
|
80
|
+
[data-slot="app-header"][data-tabs] [data-slot="app-header-headline"] {
|
|
81
|
+
padding-bottom: calc(1rem * (1 - var(--nxgt-header-progress, 0)));
|
|
82
|
+
}
|
|
83
|
+
[data-slot="app-header"][data-tabs]:not([data-collapsible])
|
|
84
|
+
[data-slot="app-header-headline"] {
|
|
85
|
+
padding-bottom: 1rem;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* The bar's whole height on the layout root (ActivityLayout sets data-header and
|
|
89
|
+
* data-header-tabs on it: nothing restyles the page from a descendant), for the sticky panels
|
|
90
|
+
* (sticky-offset.ts): worked out here from the bar's variant and tabs so the
|
|
91
|
+
* server's first paint is right; use-header-height.ts then replaces it with the
|
|
92
|
+
* measured height (a custom row, a wrapped tab bar). */
|
|
93
|
+
[data-slot="activity-layout"] {
|
|
94
|
+
--nxgt-header-total: calc(
|
|
95
|
+
var(--nxgt-header-height, 4rem) +
|
|
96
|
+
var(--nxgt-header-total-extra, 0rem) +
|
|
97
|
+
var(--nxgt-header-total-tabs, 0rem)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
[data-slot="activity-layout"][data-header="medium"] {
|
|
101
|
+
--nxgt-header-total-extra: 5rem;
|
|
102
|
+
}
|
|
103
|
+
[data-slot="activity-layout"][data-header="large"] {
|
|
104
|
+
--nxgt-header-total-extra: 8rem;
|
|
105
|
+
}
|
|
106
|
+
[data-slot="activity-layout"][data-header-tabs] {
|
|
107
|
+
--nxgt-header-total-tabs: 3rem;
|
|
108
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* The navigation toolbar: the floating Toolbar's pill (its tokens, shadow and
|
|
2
|
+
* the slide away, toolbar.css and toolbar-variants.css, are used as they are)
|
|
3
|
+
* holding navigation links instead of actions. What differs: it is fixed at
|
|
4
|
+
* the bottom centre, an item is a 48px link at every pointer, and the current
|
|
5
|
+
* page (data-active, beside aria-current) takes the pressed look of toolbar-selected.css. Sizes
|
|
6
|
+
* are mirrored in navigation-toolbar.classes.ts. */
|
|
7
|
+
@layer components {
|
|
8
|
+
.nxgt-toolbar.nxgt-nav-toolbar {
|
|
9
|
+
--nxgt-nav-toolbar-gap: 1rem;
|
|
10
|
+
--tb-item: 3rem;
|
|
11
|
+
--tb-icon: 1.5rem;
|
|
12
|
+
position: fixed;
|
|
13
|
+
inset-inline: 0;
|
|
14
|
+
/* A docked media bar sits above the pill (its bottom is --nxgt-nav-bar). */
|
|
15
|
+
bottom: calc(
|
|
16
|
+
env(safe-area-inset-bottom, 0px) +
|
|
17
|
+
var(--nxgt-nav-toolbar-gap)
|
|
18
|
+
);
|
|
19
|
+
z-index: 30;
|
|
20
|
+
margin-inline: auto;
|
|
21
|
+
max-width: calc(100% - 1rem);
|
|
22
|
+
}
|
|
23
|
+
.nxgt-nav-toolbar .nxgt-toolbar-item {
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
}
|
|
26
|
+
.nxgt-nav-toolbar .nxgt-toolbar-item[data-active],
|
|
27
|
+
.nxgt-nav-toolbar .nxgt-toolbar-item[data-active]:is(:hover, :active) {
|
|
28
|
+
background: var(--tb-on);
|
|
29
|
+
color: var(--tb-on-fg);
|
|
30
|
+
}
|
|
31
|
+
/* Reduced motion: it snaps away instead of sliding. */
|
|
32
|
+
@media (prefers-reduced-motion: reduce) {
|
|
33
|
+
.nxgt-toolbar.nxgt-nav-toolbar {
|
|
34
|
+
transition: none;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
@media (forced-colors: active) {
|
|
38
|
+
.nxgt-nav-toolbar .nxgt-toolbar-item[data-active] {
|
|
39
|
+
outline: 2px solid Highlight;
|
|
40
|
+
outline-offset: -2px;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|