@nxgt/material 3.79.1 → 3.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/README.md +48 -8
  3. package/dist/{alert-dialog-653apk3f.js → alert-dialog-DOZ0SfQs.js} +1 -1
  4. package/dist/{async-slice-CXLbQuOc.js → async-slice-BfVokA46.js} +1 -1
  5. package/dist/{button-3op3rtZh.js → button-CSKUtMI3.js} +2 -2
  6. package/dist/{calculator-KqIMBXSh.js → calculator-Cv00UQgR.js} +10 -10
  7. package/dist/calculator-field.js +6 -6
  8. package/dist/{calculator-segment-BlJE1LaS.js → calculator-segment-CwnC2cV_.js} +1 -1
  9. package/dist/calculator.js +1 -1
  10. package/dist/charts.js +3 -3
  11. package/dist/{chip-MuKDwtkG.js → chip-BGn0V6Pt.js} +3 -3
  12. package/dist/{code-editor-Bp2RrdNx.js → code-editor-B25-mWhb.js} +4 -4
  13. package/dist/code-editor.js +4 -4
  14. package/dist/{code-language-items-B7WR5ua_.js → code-language-items-oRjtO3qV.js} +2 -2
  15. package/dist/components/base-content.css +11 -0
  16. package/dist/components/components.css +5 -0
  17. package/dist/components/ui/actions/fab/fab-dock.css +19 -6
  18. package/dist/components/ui/collections/data-table/data-table-items-tiles.css +27 -1
  19. package/dist/components/ui/display/tube-cap/tube-cap.css +87 -0
  20. package/dist/components/ui/layout/app-search/app-search.css +62 -0
  21. package/dist/components/ui/layout/app-shell/activity-backdrop.css +10 -2
  22. package/dist/components/ui/layout/app-shell/app-header.css +108 -0
  23. package/dist/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
  24. package/dist/{components-CTyNC_zW.js → components-B00kDHzJ.js} +23101 -18734
  25. package/dist/components.js +37 -37
  26. package/dist/{conversion-variant-BDFAxqe9.js → conversion-variant-wZd-G6xR.js} +3 -3
  27. package/dist/{currency-field-DWHB5oms.js → currency-field-DizBTAat.js} +4 -4
  28. package/dist/{date.utils-DUvqcjan.js → date.utils-JTEIo3mM.js} +98 -98
  29. package/dist/{dialog-Bm5LvVlB.js → dialog-B-3s-oXt.js} +3 -3
  30. package/dist/dnd.js +2 -2
  31. package/dist/{dropdown-menu-xlZ6NYUA.js → dropdown-menu-C6rcYGB9.js} +1 -1
  32. package/dist/editor.js +19 -19
  33. package/dist/{empty-state-C0kviQdW.js → empty-state-CSkghnD9.js} +1 -1
  34. package/dist/{financial-variant-CggTpad2.js → financial-variant-igpGRbGw.js} +5 -5
  35. package/dist/{hooks-Dg94jPRq.js → hooks-DvIsom2p.js} +2 -2
  36. package/dist/hooks.js +9 -8
  37. package/dist/{hover-card-B1g55Hi6.js → hover-card-DuaVVKMb.js} +1 -1
  38. package/dist/i18n.js +3 -3
  39. package/dist/{icon-badge-BcW66bRk.js → icon-badge-3ThP6EOl.js} +1 -1
  40. package/dist/{icon-button-Cogxy1cy.js → icon-button-4PKlaI1g.js} +2 -2
  41. package/dist/lib/components/ui/actions/button/button-tones.d.ts +17 -16
  42. package/dist/lib/components/ui/collections/day-grouped-list/day-grouped-list.d.ts +6 -1
  43. package/dist/lib/components/ui/collections/filter/use-filter-field-config.d.ts +2 -0
  44. package/dist/lib/components/ui/collections/server-table/types-states.d.ts +5 -1
  45. package/dist/lib/components/ui/display/index.d.ts +1 -0
  46. package/dist/lib/components/ui/display/tube-cap/index.d.ts +2 -0
  47. package/dist/lib/components/ui/display/tube-cap/tube-cap.d.ts +27 -0
  48. package/dist/lib/components/ui/display/tube-cap/tube-cap.kinds.d.ts +7 -0
  49. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  50. package/dist/lib/components/ui/fields/repeatable-group/partials/repeatable-group-row.d.ts +3 -1
  51. package/dist/lib/components/ui/fields/repeatable-group/partials/repeatable-group-rows.d.ts +2 -1
  52. package/dist/lib/components/ui/fields/repeatable-group/repeatable-group.d.ts +1 -1
  53. package/dist/lib/components/ui/fields/repeatable-group/types.d.ts +7 -0
  54. package/dist/lib/components/ui/layout/app-bar/top-app-bar.d.ts +18 -3
  55. package/dist/lib/components/ui/layout/app-search/app-search-bar.d.ts +11 -0
  56. package/dist/lib/components/ui/layout/app-search/app-search.types.d.ts +47 -0
  57. package/dist/lib/components/ui/layout/app-search/index.d.ts +3 -0
  58. package/dist/lib/components/ui/layout/app-search/partials/on-phone.d.ts +2 -0
  59. package/dist/lib/components/ui/layout/app-search/partials/phone-search.d.ts +3 -0
  60. package/dist/lib/components/ui/layout/app-search/partials/pill-search.d.ts +3 -0
  61. package/dist/lib/components/ui/layout/app-search/pill-form.d.ts +18 -0
  62. package/dist/lib/components/ui/layout/app-search/search-panel.d.ts +24 -0
  63. package/dist/lib/components/ui/layout/app-search/search-results.d.ts +14 -0
  64. package/dist/lib/components/ui/layout/app-search/search-shortcut.d.ts +15 -0
  65. package/dist/lib/components/ui/layout/app-search/search-view.d.ts +22 -0
  66. package/dist/lib/components/ui/layout/app-search/use-pill-panel.d.ts +22 -0
  67. package/dist/lib/components/ui/layout/app-search/use-search-text.d.ts +8 -0
  68. package/dist/lib/components/ui/layout/app-shell/activity-app-bar.d.ts +35 -0
  69. package/dist/lib/components/ui/layout/app-shell/activity-chrome.d.ts +26 -3
  70. package/dist/lib/components/ui/layout/app-shell/activity-column-props.d.ts +22 -0
  71. package/dist/lib/components/ui/layout/app-shell/activity-column.d.ts +10 -2
  72. package/dist/lib/components/ui/layout/app-shell/activity-layout-navigation.types.d.ts +94 -0
  73. package/dist/lib/components/ui/layout/app-shell/activity-layout.d.ts +8 -1
  74. package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +2 -1
  75. package/dist/lib/components/ui/layout/app-shell/activity-rails.d.ts +16 -0
  76. package/dist/lib/components/ui/layout/app-shell/activity-sidebar-lane.d.ts +22 -0
  77. package/dist/lib/components/ui/layout/app-shell/activity-top-nav.d.ts +11 -0
  78. package/dist/lib/components/ui/layout/app-shell/activity-two-level-lane.d.ts +14 -0
  79. package/dist/lib/components/ui/layout/app-shell/app-back.d.ts +22 -0
  80. package/dist/lib/components/ui/layout/app-shell/app-header-row.d.ts +3 -0
  81. package/dist/lib/components/ui/layout/app-shell/app-header.d.ts +33 -1
  82. package/dist/lib/components/ui/layout/app-shell/app-shell.utils.d.ts +8 -0
  83. package/dist/lib/components/ui/layout/app-shell/app-sidebar-entries.d.ts +13 -0
  84. package/dist/lib/components/ui/layout/app-shell/app-sidebar-label-item.d.ts +3 -1
  85. package/dist/lib/components/ui/layout/app-shell/bottom-chrome.d.ts +13 -0
  86. package/dist/lib/components/ui/layout/app-shell/header-title.d.ts +18 -2
  87. package/dist/lib/components/ui/layout/app-shell/header.utils.d.ts +37 -0
  88. package/dist/lib/components/ui/layout/app-shell/index.d.ts +3 -0
  89. package/dist/lib/components/ui/layout/app-shell/navigation-parts.d.ts +38 -0
  90. package/dist/lib/components/ui/layout/app-shell/navigation.utils.d.ts +36 -0
  91. package/dist/lib/components/ui/layout/app-shell/page-title-scope.d.ts +14 -0
  92. package/dist/lib/components/ui/layout/app-shell/page-title.d.ts +12 -1
  93. package/dist/lib/components/ui/layout/app-shell/shell-scroll.d.ts +32 -0
  94. package/dist/lib/components/ui/layout/app-shell/sticky-offset.d.ts +8 -0
  95. package/dist/lib/components/ui/layout/app-shell/types.d.ts +14 -0
  96. package/dist/lib/components/ui/layout/app-shell/use-focus-while-hidden.d.ts +9 -0
  97. package/dist/lib/components/ui/layout/app-shell/use-header-height.d.ts +12 -0
  98. package/dist/lib/components/ui/layout/app-shell/use-header-scroll.d.ts +19 -0
  99. package/dist/lib/components/ui/layout/app-shell/use-shell-header.d.ts +20 -0
  100. package/dist/lib/components/ui/layout/auth-card/auth-card-split.d.ts +14 -0
  101. package/dist/lib/components/ui/layout/auth-card/auth-card.d.ts +13 -1
  102. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid-context.d.ts +21 -0
  103. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.d.ts +9 -0
  104. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.state.d.ts +30 -0
  105. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.tiles.d.ts +8 -0
  106. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.types.d.ts +50 -0
  107. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.utils.d.ts +70 -0
  108. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-tile.d.ts +7 -0
  109. package/dist/lib/components/ui/layout/dashboard-grid/index.d.ts +4 -0
  110. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-announcer.d.ts +6 -0
  111. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-edit-bar.d.ts +11 -0
  112. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-move-buttons.d.ts +9 -0
  113. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-toolbar.d.ts +7 -0
  114. package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-grid.d.ts +21 -0
  115. package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-moves.d.ts +22 -0
  116. package/dist/lib/components/ui/layout/doc/doc-context.d.ts +2 -0
  117. package/dist/lib/components/ui/layout/doc/doc.d.ts +5 -0
  118. package/dist/lib/components/ui/layout/doc/index.d.ts +1 -1
  119. package/dist/lib/components/ui/layout/doc/partials/doc-embedded-bar.d.ts +9 -0
  120. package/dist/lib/components/ui/layout/doc/partials/doc-embedded.d.ts +8 -0
  121. package/dist/lib/components/ui/layout/doc/use-doc.d.ts +9 -1
  122. package/dist/lib/components/ui/layout/editor-layout/editor-layout.d.ts +14 -0
  123. package/dist/lib/components/ui/layout/editor-layout/editor-layout.types.d.ts +31 -0
  124. package/dist/lib/components/ui/layout/editor-layout/index.d.ts +4 -0
  125. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-body.d.ts +11 -0
  126. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-canvas.d.ts +8 -0
  127. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-context.d.ts +12 -0
  128. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-start.d.ts +8 -0
  129. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-triggers.d.ts +10 -0
  130. package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-names.d.ts +8 -0
  131. package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-state.d.ts +21 -0
  132. package/dist/lib/components/ui/layout/index.d.ts +9 -0
  133. package/dist/lib/components/ui/layout/landing/index.d.ts +6 -0
  134. package/dist/lib/components/ui/layout/landing/landing-layout.d.ts +15 -0
  135. package/dist/lib/components/ui/layout/landing/landing-layout.types.d.ts +27 -0
  136. package/dist/lib/components/ui/layout/landing/landing-section.d.ts +12 -0
  137. package/dist/lib/components/ui/layout/landing/landing-section.types.d.ts +32 -0
  138. package/dist/lib/components/ui/layout/landing/landing.classes.d.ts +20 -0
  139. package/dist/lib/components/ui/layout/landing/partials/landing-header.d.ts +11 -0
  140. package/dist/lib/components/ui/layout/landing/partials/landing-section-intro.d.ts +13 -0
  141. package/dist/lib/components/ui/layout/landing/partials/site-footer-group.d.ts +8 -0
  142. package/dist/lib/components/ui/layout/landing/site-footer.d.ts +13 -0
  143. package/dist/lib/components/ui/layout/landing/site-footer.types.d.ts +29 -0
  144. package/dist/lib/components/ui/layout/list-details-layout/internal.d.ts +2 -0
  145. package/dist/lib/components/ui/layout/list-details-layout/list-details-layout.d.ts +9 -17
  146. package/dist/lib/components/ui/layout/list-details-layout/partials/history-mark.d.ts +2 -0
  147. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-context.d.ts +17 -1
  148. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-history.d.ts +8 -0
  149. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-inspector.d.ts +21 -0
  150. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-layout.types.d.ts +47 -0
  151. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-resizer.d.ts +9 -0
  152. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-root.d.ts +3 -0
  153. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-trigger.d.ts +13 -4
  154. package/dist/lib/components/ui/layout/list-details-layout/partials/use-inspector-focus.d.ts +8 -0
  155. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-param.d.ts +26 -0
  156. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-state.d.ts +15 -0
  157. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-width.d.ts +16 -0
  158. package/dist/lib/components/ui/layout/list-details-layout/partials/use-pane-focus.d.ts +6 -4
  159. package/dist/lib/components/ui/layout/navigation-bar/index.d.ts +3 -0
  160. package/dist/lib/components/ui/layout/navigation-bar/internal.d.ts +4 -0
  161. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.classes.d.ts +14 -0
  162. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.d.ts +35 -0
  163. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.utils.d.ts +19 -0
  164. package/dist/lib/components/ui/layout/navigation-bar/partials/bar-badge.d.ts +5 -0
  165. package/dist/lib/components/ui/layout/navigation-bar/partials/bar-entry.d.ts +12 -0
  166. package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-item.d.ts +22 -0
  167. package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-more.d.ts +24 -0
  168. package/dist/lib/components/ui/layout/navigation-bar/use-nav-bar-inset.d.ts +12 -0
  169. package/dist/lib/components/ui/layout/navigation-drawer/index.d.ts +5 -0
  170. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.classes.d.ts +9 -0
  171. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.d.ts +45 -0
  172. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.utils.d.ts +14 -0
  173. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-body.d.ts +3 -0
  174. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-item.d.ts +20 -0
  175. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-modal.d.ts +17 -0
  176. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-section.d.ts +15 -0
  177. package/dist/lib/components/ui/layout/navigation-rail/index.d.ts +3 -0
  178. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail-panel.d.ts +26 -0
  179. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.classes.d.ts +23 -0
  180. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.d.ts +42 -1
  181. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.utils.d.ts +4 -0
  182. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-body.d.ts +3 -0
  183. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-item.d.ts +20 -0
  184. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-panel-item.d.ts +7 -0
  185. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-toggle.d.ts +7 -0
  186. package/dist/lib/components/ui/layout/navigation-rail/use-rail-expanded.d.ts +13 -0
  187. package/dist/lib/components/ui/layout/navigation-toolbar/index.d.ts +2 -0
  188. package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.classes.d.ts +20 -0
  189. package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.d.ts +51 -0
  190. package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-item.d.ts +25 -0
  191. package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-more.d.ts +3 -0
  192. package/dist/lib/components/ui/layout/pane-layout/internal.d.ts +3 -0
  193. package/dist/lib/components/ui/layout/pane-layout/pane-layout.d.ts +16 -2
  194. package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-classes.d.ts +7 -0
  195. package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-context.d.ts +13 -0
  196. package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-layout-state.d.ts +16 -0
  197. package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-narrow.d.ts +6 -0
  198. package/dist/lib/components/ui/layout/responsive-grid/index.d.ts +4 -1
  199. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-item.d.ts +19 -0
  200. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-spans.d.ts +19 -0
  201. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.d.ts +24 -2
  202. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.utils.d.ts +12 -0
  203. package/dist/lib/components/ui/layout/settings-layout/index.d.ts +2 -0
  204. package/dist/lib/components/ui/layout/settings-layout/partials/settings-link.d.ts +7 -0
  205. package/dist/lib/components/ui/layout/settings-layout/partials/settings-list.d.ts +11 -0
  206. package/dist/lib/components/ui/layout/settings-layout/partials/settings-page.d.ts +5 -0
  207. package/dist/lib/components/ui/layout/settings-layout/settings-layout.d.ts +10 -0
  208. package/dist/lib/components/ui/layout/settings-layout/settings-layout.types.d.ts +33 -0
  209. package/dist/lib/components/ui/layout/settings-layout/settings-layout.utils.d.ts +13 -0
  210. package/dist/lib/components/ui/layout/thread-layout/thread-layout-classes.d.ts +17 -0
  211. package/dist/lib/components/ui/layout/thread-layout/thread-layout-parts.d.ts +14 -0
  212. package/dist/lib/components/ui/layout/thread-layout/thread-layout-stepper.d.ts +11 -0
  213. package/dist/lib/components/ui/layout/thread-layout/thread-layout.d.ts +30 -3
  214. package/dist/lib/components/ui/layout/top-nav/index.d.ts +5 -0
  215. package/dist/lib/components/ui/layout/top-nav/partials/top-nav-item.d.ts +23 -0
  216. package/dist/lib/components/ui/layout/top-nav/partials/top-nav-menu.d.ts +22 -0
  217. package/dist/lib/components/ui/layout/top-nav/top-nav.classes.d.ts +10 -0
  218. package/dist/lib/components/ui/layout/top-nav/top-nav.d.ts +34 -0
  219. package/dist/lib/components/ui/layout/top-nav/top-nav.utils.d.ts +10 -0
  220. package/dist/lib/components/ui/media/galleries/gallery.d.ts +1 -1
  221. package/dist/lib/components/ui/media/galleries/lightbox-gallery.d.ts +1 -1
  222. package/dist/lib/components/ui/media/galleries/mini-gallery.d.ts +1 -1
  223. package/dist/lib/components/ui/overlays/dialog/dialog-parts.d.ts +1 -1
  224. package/dist/lib/components/ui/overlays/sheet/sheet-parts.d.ts +5 -0
  225. package/dist/lib/components/ui/selection/choice-card-group/choice-card-balance.d.ts +4 -0
  226. package/dist/lib/components/ui/selection/choice-card-group/choice-card-group.d.ts +3 -1
  227. package/dist/lib/components/ui/selection/choice-card-group/choice-card-group.types.d.ts +7 -0
  228. package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-body.d.ts +5 -1
  229. package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-row-parts.d.ts +2 -1
  230. package/dist/lib/components/ui/selection/sortable-list/partials/sortable-list-row-props.d.ts +8 -5
  231. package/dist/lib/components/ui/selection/sortable-list/partials/use-owed-focus.d.ts +10 -0
  232. package/dist/lib/components/ui/selection/sortable-list/sortable-list-context.d.ts +2 -0
  233. package/dist/lib/components/ui/selection/sortable-list/sortable-list.keyboard.d.ts +1 -1
  234. package/dist/lib/components/ui/widgets/event-calendar/event-calendar-context.d.ts +3 -0
  235. package/dist/lib/components/ui/widgets/event-calendar/event-calendar-shell.d.ts +15 -0
  236. package/dist/lib/components/ui/widgets/event-calendar/event-calendar-template.d.ts +9 -0
  237. package/dist/lib/components/ui/widgets/event-calendar/event-calendar.d.ts +7 -3
  238. package/dist/lib/components/ui/widgets/event-calendar/event-calendar.template.d.ts +41 -0
  239. package/dist/lib/components/ui/widgets/event-calendar/index.d.ts +1 -0
  240. package/dist/lib/components/ui/widgets/event-calendar/partials/calendar-date-nav.d.ts +2 -0
  241. package/dist/lib/components/ui/widgets/event-calendar/partials/calendar-lane-toggle.d.ts +5 -0
  242. package/dist/lib/components/ui/widgets/event-calendar/partials/time-grid-header-template.d.ts +7 -0
  243. package/dist/lib/components/ui/widgets/event-calendar/template.types.d.ts +73 -0
  244. package/dist/lib/components/ui/widgets/event-calendar/types.d.ts +2 -0
  245. package/dist/lib/components/ui/widgets/event-calendar/use-chip-event.d.ts +1 -0
  246. package/dist/lib/components/ui/widgets/event-calendar/use-drawn-events.d.ts +4 -3
  247. package/dist/lib/components/ui/widgets/event-calendar/use-template-calendar.d.ts +18 -0
  248. package/dist/lib/components/ui/widgets/event-calendar/use-template-lane.d.ts +17 -0
  249. package/dist/lib/components/ui/widgets/kanban/index.d.ts +1 -1
  250. package/dist/lib/components/ui/widgets/kanban/kanban-context.d.ts +5 -2
  251. package/dist/lib/components/ui/widgets/kanban/kanban.d.ts +11 -2
  252. package/dist/lib/components/ui/widgets/kanban/kanban.slice.d.ts +32 -0
  253. package/dist/lib/components/ui/widgets/kanban/kanban.utils.d.ts +9 -0
  254. package/dist/lib/components/ui/widgets/kanban/partials/kanban-card-preview.d.ts +3 -1
  255. package/dist/lib/components/ui/widgets/kanban/partials/kanban-column.d.ts +6 -0
  256. package/dist/lib/components/ui/widgets/kanban/partials/kanban-move-to.d.ts +13 -0
  257. package/dist/lib/components/ui/widgets/kanban/partials/kanban-phone-tabs.d.ts +10 -0
  258. package/dist/lib/components/ui/widgets/kanban/types.d.ts +7 -0
  259. package/dist/lib/components/ui/widgets/kanban/use-kanban-board-keys.d.ts +7 -0
  260. package/dist/lib/components/ui/widgets/kanban/use-kanban-item-actions.d.ts +5 -0
  261. package/dist/lib/components/ui/widgets/kanban/use-kanban-phone-column.d.ts +18 -0
  262. package/dist/lib/components/ui/widgets/kanban/use-kanban.d.ts +6 -1
  263. package/dist/lib/hooks/index.d.ts +1 -0
  264. package/dist/lib/i18n/resources/en/en.d.ts +52 -0
  265. package/dist/lib/i18n/resources/en/material.json.d.ts +54 -2
  266. package/dist/lib/i18n/resources/fr/fr.d.ts +52 -0
  267. package/dist/lib/i18n/resources/fr/material.json.d.ts +54 -2
  268. package/dist/lib/i18n/resources/resources.d.ts +104 -0
  269. package/dist/lib/i18n/translator.d.ts +1 -1
  270. package/dist/lib.js +2 -2
  271. package/dist/main.js +53 -52
  272. package/dist/map.js +7 -7
  273. package/dist/material.css +1 -1
  274. package/dist/pdf-reader.js +1 -1
  275. package/dist/{percent-field--WIXV5dX.js → percent-field-QwU1l2Q4.js} +1 -1
  276. package/dist/{picker-surface-CV09H7Nb.js → picker-surface-CiTycWgV.js} +4 -4
  277. package/dist/{popover-Cd7DkND4.js → popover-YmbzbKQG.js} +1 -1
  278. package/dist/{pos-types-DKCkOTYy.js → pos-types-BFrapNmx.js} +1 -1
  279. package/dist/{pos-variant-GrUfbTTP.js → pos-variant-CctfqieO.js} +4 -4
  280. package/dist/print.js +1 -1
  281. package/dist/{programmer-variant-eKJNKENL.js → programmer-variant-Dd0YOixn.js} +2 -2
  282. package/dist/{public-y6g4ddxd.js → public-CshR_aW7.js} +10 -10
  283. package/dist/{rich-code-block-CRQ0iyLb.js → rich-code-block-BuJLDoBu.js} +5 -5
  284. package/dist/{scientific-variant-2y3UxAAU.js → scientific-variant-CjErQxuZ.js} +2 -2
  285. package/dist/{sortable-provider-DdiI3Fwk.js → sortable-provider-DU2nvpFc.js} +3 -3
  286. package/dist/{spinner-C1QIewWv.js → spinner-DH1mm8hH.js} +2 -2
  287. package/dist/{tabs-KGKvve3y.js → tabs-Um0SFyf1.js} +1 -1
  288. package/dist/theme-picker.js +2 -2
  289. package/dist/{theme-toggle-C_VeiiCm.js → theme-toggle-C-Ih4uQU.js} +1 -1
  290. package/dist/{toolbar-items-D310xDuM.js → toolbar-items-BoEY5bkt.js} +4 -4
  291. package/dist/{translate-material-BypJJ1l5.js → translate-material-D4rn5UaQ.js} +1 -1
  292. package/dist/{translator-DJkf4J7t.js → translator-CcEgQ-H7.js} +112 -4
  293. package/dist/{use-chat-composer-BFhRMHcX.js → use-chat-composer-BBF1BI_s.js} +47 -43
  294. package/dist/{use-click-lock-BZYtTmVt.js → use-click-lock-Bwg_caHO.js} +14 -14
  295. package/dist/{use-heading-spy-DJR8YYm6.js → use-heading-spy-BgyA6SJl.js} +19 -19
  296. package/dist/{use-material-translation-CD6QoVal.js → use-material-translation-DYrfV_JJ.js} +1 -1
  297. package/dist/{use-return-focus-Cevw_6yq.js → use-return-focus-C_Qz_yTk.js} +1 -1
  298. package/docs/README.md +1 -0
  299. package/docs/components/data-display.md +40 -8
  300. package/docs/components/data-table-filter-and-lists.md +7 -3
  301. package/docs/components/form-fields.md +1 -0
  302. package/docs/components/media-and-files.md +1 -0
  303. package/docs/components/navigation-and-layout.md +946 -28
  304. package/docs/components/overlays-and-menus.md +11 -5
  305. package/docs/components/rich-widgets.md +111 -1
  306. package/docs/components/selection-and-choice.md +49 -10
  307. package/docs/guides/app-shell.md +641 -2
  308. package/docs/guides/forms.md +7 -0
  309. package/docs/guides/helpers.md +23 -0
  310. package/docs/guides/i18n.md +13 -1
  311. package/docs/guides/layouts.md +215 -0
  312. package/docs/guides/ssr.md +1 -1
  313. package/docs/guides/theming.md +7 -7
  314. package/docs/previews/data-display-tubecap.webp +0 -0
  315. package/docs/previews/navigation-layout-appshell-page-ground.webp +0 -0
  316. package/docs/previews/navigation-layout-appshell.webp +0 -0
  317. package/docs/previews/navigation-layout-authcard-split.webp +0 -0
  318. package/docs/previews/navigation-layout-authcard.webp +0 -0
  319. package/docs/previews/navigation-layout-dashboardgrid.webp +0 -0
  320. package/docs/previews/navigation-layout-editorlayout.webp +0 -0
  321. package/docs/previews/navigation-layout-landinglayout.webp +0 -0
  322. package/docs/previews/navigation-layout-panelayout.webp +0 -0
  323. package/docs/previews/navigation-layout-settingslayout.webp +0 -0
  324. package/docs/previews/navigation-layout-threadlayout-pages.webp +0 -0
  325. package/docs/previews/navigation-layout-threadlayout.webp +0 -0
  326. package/docs/previews/selection-choice-sortablelist.webp +0 -0
  327. package/docs/roadmap.md +12 -2
  328. package/docs/troubleshooting.md +50 -2
  329. package/lib/components/base-content.css +11 -0
  330. package/lib/components/components.css +5 -0
  331. package/lib/components/ui/actions/fab/fab-dock.css +19 -6
  332. package/lib/components/ui/collections/data-table/data-table-items-tiles.css +27 -1
  333. package/lib/components/ui/display/tube-cap/tube-cap.css +87 -0
  334. package/lib/components/ui/layout/app-search/app-search.css +62 -0
  335. package/lib/components/ui/layout/app-shell/activity-backdrop.css +10 -2
  336. package/lib/components/ui/layout/app-shell/app-header.css +108 -0
  337. package/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
  338. package/lib/themes/ambre.css +1 -1
  339. package/lib/themes/ardoise.css +1 -1
  340. package/lib/themes/bleumono.css +1 -1
  341. package/lib/themes/bluemoon.css +1 -1
  342. package/lib/themes/corail.css +2 -2
  343. package/lib/themes/foret.css +1 -1
  344. package/lib/themes/lavande.css +1 -1
  345. package/lib/themes/menthe.css +2 -2
  346. package/lib/themes/ocean.css +1 -1
  347. package/lib/themes/pink.css +2 -2
  348. package/lib/themes/prune.css +1 -1
  349. package/lib/themes/sable.css +1 -1
  350. package/lib/themes/slate.css +1 -1
  351. package/lib/themes/teal.css +2 -2
  352. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,99 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.81.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2428](https://github.com/softistx/nxgt-material/pull/2428) [`01db466`](https://github.com/softistx/nxgt-material/commit/01db466820ad19e33444a07bc5bff474168f7130) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ChoiceCardGroup` balances its rows: four cards in room for three now draw 2+2 instead of 3+1 (and five in room for four draw 3+2). The column count follows the group's own width through container-query classes, so the server and the client print the same markup, and four fit in one row when the space allows. The new `balance` prop (default `true`) turns it off (`balance={false}`) to keep the previous fill-every-column layout. A balanced group's root is an `@container`, so in a shrink-to-fit parent (an inline-flex box) give the parent a width or pass `balance={false}`, which adds no container. Fixes [#2423](https://github.com/softistx/nxgt-material/issues/2423).
8
+
9
+ - [#2439](https://github.com/softistx/nxgt-material/pull/2439) [`77dc449`](https://github.com/softistx/nxgt-material/commit/77dc449ca58c3354274756d7790ba5dd3ae84a3f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DayGroupedList` takes a `headingLevel` prop (`2` to `6`, default `3`, so nothing changes for existing lists) to set the level of each bucket's heading and keep the page's outline right. Fixes [#2438](https://github.com/softistx/nxgt-material/issues/2438).
10
+
11
+ - [#2454](https://github.com/softistx/nxgt-material/pull/2454) [`fd09402`](https://github.com/softistx/nxgt-material/commit/fd09402fce1e7c7b4fcbf3c682172ccfa9842483) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `EventCalendar` has a template-week mode, `mode="template"`, for a recurring week such as a school timetable. The columns are named by weekday only, and there is no date navigation, Today button, today marker or now line. Events, slots and changes are keyed by ISO weekday (1 to 7) and `HH:mm` times (`EventCalendarTemplateEvent`, `EventCalendarTemplateSlot`, `EventCalendarTemplateChange`) instead of dates. Create, move, resize and the keyboard keep working. The optional `lanes` prop (`[{ id: 'A', label: 'Week A' }, …]`, with `lane`, `defaultLane` and `onLaneChange`) adds a switch to edit two alternating weeks in the same view: an event with a `lane` belongs to that week, one with none to every week. The dated props are unchanged, but `ComponentProps<typeof EventCalendar>` is now the union of the dated and template props: type a wrapper or a handler with `EventCalendarProps` (dated) or `EventCalendarTemplateProps`. Fixes [#2371](https://github.com/softistx/nxgt-material/issues/2371).
12
+
13
+ - [#2427](https://github.com/softistx/nxgt-material/pull/2427) [`12a87b4`](https://github.com/softistx/nxgt-material/commit/12a87b4001d0c5a2dcd1b3249f04bd1cfc56a26b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material/hooks` exports `useSsrMediaQuery(query, serverValue)`, the hydration-safe media-query hook the library's own components use. Use it for a breakpoint `useIsMobile` (768px) does not cover, such as `(min-width: 80rem)`: the server and the hydrating client render `serverValue` (pass the desktop answer) and the client switches right after hydrating; a client-only render reads the real answer at once.
14
+
15
+ - [#2455](https://github.com/softistx/nxgt-material/pull/2455) [`2346f87`](https://github.com/softistx/nxgt-material/commit/2346f8762edcfc01b2fa97e0c7dcd3d222695423) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A form grid can sit flush in a container that already pads it: add `data-padding="none"` to the `.form-grid-layout` element and its fields and actions lose their padding (the fields on all sides, the actions left and right), so they line up with the page's, card's or sheet's content edge instead of being double-padded. The default is unchanged. Fixes [#2452](https://github.com/softistx/nxgt-material/issues/2452).
16
+
17
+ - [#2419](https://github.com/softistx/nxgt-material/pull/2419) [`397062b`](https://github.com/softistx/nxgt-material/commit/397062be38a5e82a649f2e7f4deed358dc6d884e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `SortableList` and `SortableListFormField` pass axe: a row holds its own buttons (grip, move, remove), so the rows are `role="listitem"` of a `role="list"` instead of `option`s of a `listbox` (axe `nested-interactive`). Tab reaches the list on one row (a roving tab stop), the arrow keys move the focus from row to row and Space, Enter, Delete and Ctrl/⌘ + arrows keep their meaning when a row has the focus; a key pressed on a row's own button is no longer the list's. The grip's name carries the item (`Drag: Ada Lovelace`), and a truncated row title or subtitle (`ListPane` rows too) keeps its full text in a `title`. The component's props and emitted value are unchanged. For tests and queries: use `getByRole('list', { name })` and `getAllByRole('listitem')` in place of `listbox` and `option`; `aria-selected`, `aria-activedescendant` and `aria-required` are gone (`aria-disabled` stays on the rows of a disabled list or item, and a disabled list has no tab stop), so `required` only draws the asterisk. Fixes [#2416](https://github.com/softistx/nxgt-material/issues/2416).
18
+
19
+ - [#2471](https://github.com/softistx/nxgt-material/pull/2471) [`55555ad`](https://github.com/softistx/nxgt-material/commit/55555ad70ba3ac23717db1e48f37353efe967ec8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `TubeCap` (`@nxgt/material/components`, Data display): a chip for a specimen tube. The cap colour follows the international tube convention (`kind`: `edta` lavender, `heparin` green, `citrate` light blue, `esr` black, `serum` red, `gel` gold, `fluoride` grey, `trace` royal blue, `other` plain), fixed and identical in light and dark and in every theme. The container's name (`label`, required) is written beside the cap, so colour never carries the meaning alone. Optional `volume`, `accession`, `action` and `size`. Fixes [#2467](https://github.com/softistx/nxgt-material/issues/2467).
20
+
21
+ ### Patch Changes
22
+
23
+ - [#2465](https://github.com/softistx/nxgt-material/pull/2465) [`8e0853d`](https://github.com/softistx/nxgt-material/commit/8e0853d6bef57b72691d39b95f773778ac0028c7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - In dark mode a tonal Button label now reaches 4.5:1 on a Card, a popover and the muted and accent surfaces, not only on the page and the ground, in every preset (teal success and secondary were 4.24 on a card, secondary 3.75 on muted). The dark secondary, info and success tonal labels are mixed toward white (80 %, 85 % and 70 % of the token). The dark success focus ring is a little lighter too. Nothing to adapt. Fixes [#2459](https://github.com/softistx/nxgt-material/issues/2459).
24
+
25
+ - [#2441](https://github.com/softistx/nxgt-material/pull/2441) [`9c2453f`](https://github.com/softistx/nxgt-material/commit/9c2453fd280520e609be48ab5fdb5cc576d10bfe) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A field never exceeds its container: the 280px minimum width of `Textarea`, `InputGroupTextarea`, the labelled `Checkbox`, `ImageField`, `UploadField` and `NetworkUploadField` is now `min(280px, 100%)`. In a wide container the floor is the same; in a container narrower than 280px (a phone card, a narrow drawer or column) the field shrinks to fit instead of overflowing it. Fixes [#2210](https://github.com/softistx/nxgt-material/issues/2210).
26
+
27
+ - [#2443](https://github.com/softistx/nxgt-material/pull/2443) [`5b14c8f`](https://github.com/softistx/nxgt-material/commit/5b14c8fe3f43bdf56abdbf2913e2a3a236ef5c5a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `SheetFooter` now stacks its buttons in the same order as `DialogFooter` on a phone: write the secondary action first and the main one last, and the main one is on top (the footer is a reversed column). Before, a sheet showed them in source order, the opposite of a dialog. A sheet footer written main-first (`Apply`, `Reset`) now shows `Reset` on top: swap the two children, or add `flex-col` to its `className`. The order is stated in the Dialog and Sheet docs. Fixes [#2394](https://github.com/softistx/nxgt-material/issues/2394).
28
+
29
+ - [#2449](https://github.com/softistx/nxgt-material/pull/2449) [`8feff2a`](https://github.com/softistx/nxgt-material/commit/8feff2a393ca4d2f267d6720b2c6badb7488e67f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Gallery` now honours the props you pass to it: an `aria-label` or `aria-labelledby` names the gallery (two galleries on a page can be told apart by screen-reader users), and `id`, `data-*` and other div props reach its root element. Without a name, the default "Gallery" label stays; a given `aria-labelledby` replaces it. `MiniGallery` and `LightboxGallery` accept the same two name props. Fixes [#2447](https://github.com/softistx/nxgt-material/issues/2447).
30
+
31
+ - [#2434](https://github.com/softistx/nxgt-material/pull/2434) [`a7173d5`](https://github.com/softistx/nxgt-material/commit/a7173d516a3fe051ddf668f02254a8828adc3435) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ListTile` `actions` no longer stretch the row: they are centred on it, so a tile with actions has the height and the title-to-subtitle rhythm of one without. Fixes [#2392](https://github.com/softistx/nxgt-material/issues/2392).
32
+
33
+ - [#2424](https://github.com/softistx/nxgt-material/pull/2424) [`92d5a03`](https://github.com/softistx/nxgt-material/commit/92d5a03d292834e95ffa6f63ed4aaefd60474b9b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - RepeatableGroup and RepeatableGroupFormField take `removeAtMin="hide"`: at `min` rows the Remove button is not rendered instead of shown disabled (default `'disable'`, unchanged). Nothing to adapt. Fixes [#2389](https://github.com/softistx/nxgt-material/issues/2389).
34
+
35
+ - [#2425](https://github.com/softistx/nxgt-material/pull/2425) [`fe38112`](https://github.com/softistx/nxgt-material/commit/fe38112ee2371789ba4ee11e660aeb78c41d2775) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The roadmap lists the layouts effort as shipped in 3.80.0.
36
+
37
+ - [#2433](https://github.com/softistx/nxgt-material/pull/2433) [`4300c78`](https://github.com/softistx/nxgt-material/commit/4300c781b06112e0d11f89aa6ffd589f93b33def) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New recipe `Guides/Recipes/Search dialog and results page`: a command dialog (Ctrl/Cmd+K and a header button) with debounced suggestions grouped by type, and a results page with type chips, a filter that appears only where it applies and highlighted result cards, with its code in the `nxgt-material` plugin's `screen-recipes` skill (2.7.0).
38
+
39
+ - [#2429](https://github.com/softistx/nxgt-material/pull/2429) [`fc72811`](https://github.com/softistx/nxgt-material/commit/fc7281170ce58ca57c1065a8b65d3f51a4280526) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ServerTable`'s `error` takes an `illustration` (a scene id, a node, `true` or `false`), as `empty.none` and `empty.noMatch` do, replacing the scene its `kind` picks. Fixes [#2388](https://github.com/softistx/nxgt-material/issues/2388).
40
+
41
+ - [#2435](https://github.com/softistx/nxgt-material/pull/2435) [`b1c0445`](https://github.com/softistx/nxgt-material/commit/b1c0445d3a0cc43058c19864578b9db6ee197203) Thanks [@SteveGT96](https://github.com/SteveGT96)! - ServerTable (and DataTable) tiles: the selection checkbox sits on the tile's title row instead of the tile's vertical middle, and the tile's content starts at the top, so a multi-line tile no longer puts the box level with its body text. `item.Row` record rows keep the box centred. The phone select-all checkbox keeps an accessible name in every state. Nothing to adapt. Fixes [#2391](https://github.com/softistx/nxgt-material/issues/2391).
42
+
43
+ - [#2436](https://github.com/softistx/nxgt-material/pull/2436) [`30ee430`](https://github.com/softistx/nxgt-material/commit/30ee430749af42cf1056b5fb106d7812f8d41a5c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `StickyActionBar` no longer adds its own 1rem of horizontal padding: its leading and trailing edges are those of the column it sits in, so its buttons line up with the cards and fields above instead of ending 16px short (sticky or inline). Below `md` it still pads clear of the left and right safe areas. Fixes [#2393](https://github.com/softistx/nxgt-material/issues/2393).
44
+
45
+ - [#2431](https://github.com/softistx/nxgt-material/pull/2431) [`ec1da47`](https://github.com/softistx/nxgt-material/commit/ec1da478f72e8987a8e13192e7752d54f5ba20ea) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A tonal Button label now reaches 4.5:1 straight on the tinted page (`--ground`), not only on a card or a striped row, in every preset and in both themes. The light `--primary-text` share is solved against the ground too (teal 92 %, corail 88 %, pink 92 %, menthe 95 %), the secondary, info and success tonal labels are mixed 10 % toward black in light, and the error one 20 %. A new contrast pair `primary-text / primary@ground15` guards it. Nothing to adapt: regenerate a theme file to take the new shares. Fixes [#2398](https://github.com/softistx/nxgt-material/issues/2398).
46
+ - Updated dependencies [[`ec1da47`](https://github.com/softistx/nxgt-material/commit/ec1da478f72e8987a8e13192e7752d54f5ba20ea)]:
47
+ - @nxgt/material-core@0.49.2
48
+
49
+ ## 3.80.0
50
+
51
+ ### Minor Changes
52
+
53
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Kanban` gains `phoneLayout` (`'tabs'`, `'swipe'`, `'columns'`; unset keeps today's board) and `phoneColumn` / `onPhoneColumnChange`. On a phone viewport (below 768px; the board measures its own width, so a narrow region switches too), `tabs` shows one column at a time under a tab list of the columns (name and count, arrow-key navigation), and `swipe` snaps full-width columns sideways; both switch by CSS only, so server and client markup match. A card's popover lists the other columns under "Move to" for moving it without dragging; "Move to" follows the board's own width, not the viewport's (in jsdom, where the width is 0, it renders). Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
54
+
55
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActivityLayout` draws the app bar in the Material 3 Expressive sizes: `header` takes `'small'` (the default, unchanged), `'center'` (the title centred), `'medium'` and `'large'` (the page's title on a second row in display type, collapsing into the small bar as the page scrolls; `collapse: false` keeps it) and `'none'`, and `{ variant, collapse, hideOnScroll }` to hide the bar on the way down and bring it back on the way up (`inert` while away, with the focus moved to the content). A route chooses its own through `handle.header` (the deepest wins, over the layout's `header`). The headline is the page's one `h1`; a medium or large header on a page with no `handle.title` stays small, and `'none'` drops the phone's menu button with the bar (pair it with `navigation="bar"`). `AppHeader` takes `variant`, `collapse`, `hideOnScroll` and `headline`, `TopAppBar` takes `variant` and `headline`, and `AppShellHandle` gains `header`. The collapse follows the shell's scroll (`useShellScroll`, the window or the content region), sets one CSS variable on the bar and snaps under reduced motion. `ActivityLayout` publishes the bar's real height, tabs and headline row included, as `--nxgt-header-total` on its root (measured with a `ResizeObserver` and written once per frame, not while the bar is collapsing; worked out in CSS from `data-header` and `data-header-tabs` on the root before script runs), and the sticky aside and `Doc` stick below all of it.
56
+
57
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ResponsiveGrid` gains `ResponsiveGrid.Item` (`span` of 1 to 6 or `'full'` and `rowSpan` of 1 to 4, each a number or `{ base, md, xl }` by the grid's own width: 768px and 1280px), `dense` (`grid-auto-flow: dense`) and `flow="masonry"` (CSS multi-column packing, the column count from `minItem` or the width; tiles read down each column, so use it for browsing, not for a sequence). New `DashboardGrid` and `DashboardTile`: tiles with spans in a grid of 1, 2 and 4 columns (`columns` changes them) that the user rearranges in an edit mode, turned on by an "Edit layout" button or by `editing` / `defaultEditing` / `onEditingChange`. In edit mode each tile has a handle: drag it, or press Space, move with the arrows (Home and End go first and last), drop with Space, cancel with Escape, with live-region announcements; below 768px each tile also has earlier and later buttons. The order is the app's: `order` and `onOrderChange` (or `defaultOrder`). Without any of the new props, `ResponsiveGrid` renders the markup it did. New `material.dashboard.*` strings in English and French. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
58
+
59
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Doc` takes `chrome="embedded"` to be drawn inside the app shell (`ActivityLayout`) instead of owning the viewport. It then has no top bar, reading bar or full-height frame: the shell's header is the page's. The page tree and the outline stick under that header at the offset `ActivityContent`'s `aside` uses (so a taller header and a `scroll="container"` shell are followed) and scroll with the shell; the tree's sheet and the page clear a bottom bar or the floating toolbar (`--nxgt-bottom-chrome`). Below `md` the tree opens from a « Browse docs » button (new `material.doc.browse` key, en and fr), named apart from the shell's « Menu », beside the search and `actions`. `useDoc` returns the mode as `frame`, and `DocChrome` is exported. The default is `chrome="standalone"`, and its markup is unchanged. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
60
+
61
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `EditorLayout`, the editor page, built on `PaneLayout`: a `toolbar`, a canvas (`children`) that scrolls on its own over a `plain`, `tinted` or `neutral` `ground`, a `properties` panel at the end and an optional `start` panel (layers, outline). It follows its own width: from 768px the properties are an inline panel (`propertiesWidth`, `propertiesOpen` / `defaultPropertiesOpen` / `onPropertiesOpenChange`), below it they open in a bottom sheet from `EditorLayout.PropertiesTrigger`; the start panel is inline from 1280px and a side sheet below, from `EditorLayout.StartTrigger`. The regions are named (`toolbarLabel`, `startLabel`, `propertiesLabel`, `canvasLabel`), the server renders the desktop markup with no `style` attribute. New `material.editor-layout.*` strings in English and French. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
62
+
63
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NavigationToolbar` is the floating navigation toolbar: a pill of round icon links at the bottom centre, over the content. It is a named `nav` of links (`aria-current="page"` on the current one, each named by a visually hidden label and a tooltip, 48px targets, badges read in the link's name), not a `role="toolbar"`: `Toolbar variant="floating"` stays for actions, and the two share the pill (the `--tb-*` tokens, shadow and slide away of `.nxgt-toolbar`). It keeps 3 to 5 destinations (`bar`, `priority`, `max`, as for `NavigationBar`) and « More » for the rest. `ActivityLayout` draws it with `navigation="floating"`: a name alone applies to every size, the phone included, where it replaces the menu sheet; `{ phone: 'floating' }` limits it. `navigation.hideOnScroll` (off by default) slides it away on the way down and back on the way up, `inert` while away, its focus moved to the content region and restored, no slide under reduced motion; `NavigationToolbar` takes `hideOnScroll` and `hidden` too. While it shows it sets `--nxgt-nav-bar` to `calc(5rem + env(safe-area-inset-bottom, 0px))` (its height, the gap and the safe area, also while slid away), and a docked `MediaPlayerHost` bar sits above it, so `FabDock`, toasts, the mini player and `StickyActionBar` stay clear. Every `ShellNavigation` name is now drawn. An unset `navigation` and the default markup are unchanged. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
64
+
65
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `LandingLayout`, `LandingSection` and `SiteFooter`: the frame of a public landing page outside the app shell. `LandingLayout` draws a top bar (the brand, your `items` as a `TopNav` from 768px or in a drawer opened by a menu button below it, and your `actions`), a `main` with the `hero` then the sections, and the `footer`; the bar sticks unless `stickyHeader={false}`. `LandingSection` is a band with `eyebrow`, `title`, `description` and `actions` over its content, on a `tone` (`background`, `muted`, `ground`, `primary`), a `width` (`narrow`, `medium`, `default`, `full`) and an `align`; `variant="hero"` draws the page's `h1` larger. `SiteFooter` shows the brand, columns of link groups, a legal line and a slot for social links or a switcher, stacked on a phone. In dark the bar and the footer take the card surface, one tone above the page. A `Guides/Recipes/Landing page` story builds a whole page from them. Needs a router, like `TopNav`. New `material.landing.*` strings in English and French. Additive: nothing existing changes. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
66
+
67
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ListDetailsLayout` gains a third pane, a URL-driven view and a resizable list, all opt-in (without them the markup is unchanged, except that the list pane now always carries an `id`, and the existing types keep their shape). `inspector` enables `ListDetailsLayout.Inspector title="…"`, open while the view is `'inspector'` (`ListDetailsView`; `activeView`/`onActiveViewChange` take it only with `inspector`, and `ListDetailsLayout.Trigger view="inspector"` needs `inspector` too): beside the details from 1280px, over them below that, switched by CSS with no flip after hydration (Escape and a close button close the overlay), and on a phone one more step after the details with a back button. Its title is a heading that names the `complementary` landmark; the focus moves to it on open and returns to the opener on close. `history="push"` (or `"replace"`, `historyParam`) keeps the view in the URL's search params through React Router, so the browser Back goes from the details to the list on a phone; `useListDetailsParam()` keeps the selected record's id (`?item=`) the same way, and `select(id, { open: 'details' })` writes the id and the view in one history entry. `listWidth` and `resizable` (with `onListWidthChange`) give the list pane a width in px and a keyboard and pointer separator (`role="separator"`, `aria-valuenow`, 240 to 480px). `useListDetails()` keeps `activeView: 'list' | 'details'` (`'details'` while the inspector is open) and also returns `inspectorOpen`, `listWidth` and `setListWidth`. New `material.list-details.*` strings (`inspector-back`, `inspector-close`, `resize`) in English and French. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
68
+
69
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NavigationBar` is the bottom navigation bar of a phone: 3 to 5 destinations with always-visible labels, an indicator pill, badges read in the link's name and a "More" sheet for the rest (`bar` and `priority` on a `MenuItem` choose them; `splitBarItems()` returns the split). `ActivityLayout` draws it with `navigation="bar"` or `{ phone: 'bar' }`: a name alone draws the bar on a phone only (below 768px), hidden by CSS from 768px, where the default rail shows (`{ tablet: 'bar' }` keeps it there), and the phone has no menu button; the shell's frame, the backdrop and the aside clear `--nxgt-bottom-chrome`. While it shows, `--nxgt-nav-bar` is `calc(4rem + env(safe-area-inset-bottom, 0px))`, so `FabDock`, the toaster, `StickyActionBar`, the thread composer, the mini player and the sticky panels clear the home indicator once, and a docked `MediaPlayerHost` bar sits above the bar (`bottom: var(--nxgt-nav-bar)`). A phone never draws `'rail'` or `'rail-expanded'`, a top bar of links or two-level navigation, given by name or in the object form: it keeps its menu sheet. Unset, the shell's markup is unchanged. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
70
+
71
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NavigationDrawer` is the Material 3 Expressive navigation drawer: destinations in sections (by the entries' `group`), each a 56px row with an icon, a label and a badge read in the link's name, the current one marked with `aria-current`; `variant="standard"` is a permanent column, `variant="modal"` the same column in a sheet that shares the app shell's menu sheet logic (`open`, `onOpenChange`, `trigger`). `NavigationDrawerSection` and `NavigationDrawerItem` compose it by hand. `ActivityLayout` draws the standard drawer with `navigation="drawer"` and the collapsible sidebar with `navigation="sidebar"`, a small chevron button expanding and collapsing it (it starts collapsed), its state controlled with `sidebarExpanded` / `defaultSidebarExpanded` / `onSidebarExpandedChange` and remembered with `navigation.persistKey` (read after hydration). A preset name alone (`navigation="sidebar"`, `"drawer"`) leaves a phone its default navigation; `{ phone: 'sidebar' }` draws it there. An unset `navigation` and the default markup are unchanged. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
72
+
73
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NavigationRail` is the Material 3 Expressive rail: destinations with an icon in an indicator pill and the label under it, badges read in the link's name, a `fab` slot for the screen's primary action and a menu button that expands it into a wide rail with the labels inline (`expanded`, `defaultExpanded`, `onExpandedChange`, and `persistKey` to remember the choice, read after hydration). Without `items` it is still the empty `div`. `ActivityLayout` draws it with `navigation="rail-expanded"` (per size, hidden by CSS elsewhere), takes its FAB from the new `navigationFab` prop and its `persistKey` from `navigation`; `'rail'` and the default markup are unchanged. A phone never draws a rail, `'rail'` or `'rail-expanded'`: below 768px it keeps its menu sheet (`{ phone: 'rail-expanded' }` resolves to it). Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
74
+
75
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PaneLayout` gains `phone` (`'sheet'`, `'bottom'` or `'stack'`: the pane as a side sheet, a bottom sheet or under the main content below 768px), `breakpoint` (`'viewport'`, the default, or `'container'` to switch by the layout's own width, for a layout in a narrow region) and `paneWidth` (`'sm'`, `'md'` or `'lg'`, token sizes with no style attribute). With `phone` or `breakpoint` set the inline pane is a named `<aside>` landmark and the context carries the new values; with `breakpoint="container"` the root is the container and the flex row moves to an inner `data-slot="pane-layout-body"`, so style the body, not the root, for row layout; left unset, the markup and the 648px side sheet are unchanged. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
76
+
77
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AppSearchBar` and `SearchView` search from the app bar. `ActivityLayout`'s `header` takes `search` (`true`, or the bar's props; a route's `handle.header` too, `search: false` drops it there): from 768px a pill, a filled and fully rounded search field with the `results` (a node, or a function of the text and a `close`) in a panel docked under it, and on a phone a search button that opens `SearchView`, a full-screen modal dialog with a back arrow and 48px targets. `value`, `defaultValue` and `onValueChange` control the text, `onSubmit`, `placeholder`, `label`, `loading`, `leading` and `trailing` shape it, `shortcut` (`"/"`, `"Ctrl+K"`) is shown as a hint and bound on the document, and `resultCount` is announced politely. The view mounts only while open, traps the focus, puts it in the field when it opens and returns it to the element that opened it; Escape, the arrow and Enter close it. New strings `material.app-header.*` in English and French. The phone button and the pill are both drawn and a breakpoint class hides one, so the server's markup and the hydrating client's match; the shortcut acts on the visible one. `header.search` was `boolean` and drew nothing; it still accepts `true`.
78
+
79
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `SettingsLayout`: the settings screen on `ListDetailsLayout`. `sections` (`id`, `title`, `description`, `icon`, `group`, `keywords`, `disabled`, `content`) show as grouped links with an icon well beside the selected section's page (heading, description, your rows); on a phone the list comes first, a tap opens the page, the focus moves to its heading, and Back returns to the tapped row. The selection is the `?section=` search param (`param`, `viewParam`), shared links open the page on a phone, and `search` adds a filter over the sections. Needs a router. `ListDetailsLayout` also moves a phone's focus to an element marked `data-pane-focus` inside the details, if there is one. New `material.settings-layout.*` strings in English and French. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
80
+
81
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActivityLayout` takes `navigation` (a preset name, or one per phone, tablet and desktop) and `header` (a variant, or a variant with options) and `MenuItem` gains `children`, `group`, `bar` and `priority`; unset, the shell draws exactly what it did. `resolveNavigation()`, `resolveHeader()` and `navigationClasses()` return what they resolve to, `useShellScroll()` with `ShellScrollProvider` gives the scroll direction and offset, and `--nxgt-nav-bar` and `--nxgt-bottom-chrome` leave room at the bottom for `FabDock`, `Toaster`, the mini player and `StickyActionBar`. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
82
+
83
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActivityLayout`'s `header` draws `tabs`, and a route's `handle.back` draws a back arrow. `header.tabs` (a `TabsNav`, on the layout or per route in `handle.header`; `tabs: null` drops them for a route) is a 48px row at the foot of the app bar: it stays under a `medium` or `large` header as it collapses, and when `hideOnScroll` slides the bar away the tabs stay pinned at the top of the window (only the bar's rows go `inert`, and a tab keeps the focus). `handle.back` is `{ to, label? }`, a link drawn with the shell's `linkComponent` named "Back" or "Back to <label>", or `true`, a button that goes back in the history (up one level when the visit started on that page); the arrow is a 48px target at the start of the bar, comes first in the bar, before the title; the phone's menu button follows it while the phone has the menu sheet, and the rail or sidebar stays from 768px. `AppHeader` takes `tabs` and `back`; the new types are `ShellBack` and `AppShellHandle['back']`. New strings `material.app-header.back` and `back-to` in English and French. Unset, the bar is the same markup as before.
84
+
85
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ThreadLayout` gains `width` (`'form'`, `'reading'` or `'wide'`: a centred column of 32, 48 or 72 rem with token classes), `footer` (a sticky action bar that stays in view and clear of `--nxgt-bottom-chrome` and the home bar) and `stepperPlacement` (`'top'` or `'side'`: the `stepper` goes in a `nav` named "Progress", a sticky rail beside the column from 1280px with `'side'`, above it below). `AuthCard` gains `layout="split"` (two columns from 768px: the new `visual` slot, which can host a `Background` preset, and an opaque form side; a phone keeps the form under its brand row) and `visual`. All of it is placed by CSS classes only, so the server and the client render the same markup; left unset the markup is unchanged. New string `material.navigation.steps`, en and fr. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
86
+
87
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `TopNav` is the Material 3 Expressive top navigation, built on Radix's navigation menu: one named `nav` of 48px pill destinations, the current one marked with `aria-current="page"`, badges read in the link's name, and an entry with `children` opening a dropdown of its child links (its trigger reads as active while a child is current; arrow keys, Escape and reduced motion follow Radix). `TopNavItem` and `TopNavMenu` compose it by hand. `ActivityLayout` draws it in the app header, after the brand, with `navigation="top"`; the phone keeps its menu sheet, which now nests an entry's `children` under it (as does the expanded sidebar). A preset name alone leaves a phone its default navigation, and `{ phone: 'top' }` keeps the menu sheet. An unset `navigation` and the default markup are unchanged. An entry with `children` is only a trigger: its `url` is never a link, so put an "all" link as the first child. Past about 5 entries the bar does not fit at 768px beside the brand and the title and pushes the header's actions out; it does not scroll (that would clip the dropdowns). Use `{ tablet: 'rail', desktop: 'top' }` for a longer menu. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
88
+
89
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NavigationRailPanel` is the second level of a two-level navigation: a `nav` beside the `NavigationRail` that lists the `children` of the top-level entry the location belongs to, under its label, the current child marked with `aria-current="page"`. It is open by default and a button folds it to a narrow strip (`aria-expanded`, focus kept); nothing opens it on hover. `ActivityLayout` draws the rail (without its own menu button) and the panel together with `navigation="two-level"` from 768px; `navigation.persistKey` remembers the panel's state under `nxgt-panel:<key>`, read after hydration. A rail entry always links to its own `url`; an entry without `children` hides the panel by CSS, its markup kept. `NavigationRail` now lights the top-level entry whose child is current, even a child outside the parent's `url`. A preset name alone leaves a phone its default navigation, and `{ phone: 'two-level' }` keeps the menu sheet. An unset `navigation` and the default markup are unchanged. New strings: `material.navigation.panel-collapse` and `panel-expand` (en, fr). Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
90
+
91
+ ### Patch Changes
92
+
93
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Toaster`'s bottom offset now clears the home indicator. `FabDock`, the layout frame and a docked `MediaPlayerHost` bar no longer add the bottom inset twice. `StickyActionBar` clears a docked `MediaPlayerHost` bar as well as the navigation bar.
94
+
95
+ - [#2421](https://github.com/softistx/nxgt-material/pull/2421) [`0b26d2c`](https://github.com/softistx/nxgt-material/commit/0b26d2c8f91a272d5ac8728580f11d8d860e0bf6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New [layouts guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/layouts.md): pick a navigation preset, an app bar variant and a page layout by need, with a working example each. The README gains a layouts section, `EditorLayout`'s `propertiesOpen` row reads more clearly and its docs preview is refreshed. Docs only. Refs [#2103](https://github.com/softistx/nxgt-material/issues/2103).
96
+
3
97
  ## 3.79.1
4
98
 
5
99
  ### Patch Changes
package/README.md CHANGED
@@ -287,6 +287,34 @@ function InviteForm({ onSubmit }: { onSubmit: (v: { email: string }) => void })
287
287
  the same pair. [Getting started](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/getting-started.md) walks through a first
288
288
  screen.
289
289
 
290
+ ### Layouts
291
+
292
+ `ActivityLayout` draws the app shell; `navigation` and `header` choose how, per
293
+ window size, and are opt-in (unset, the shell is unchanged). Page layouts go
294
+ inside it. `items`, `Outlet` (from `react-router`) and `ProfileForm` below are your own.
295
+
296
+ ```tsx
297
+ import { ActivityLayout, SettingsLayout } from '@nxgt/material/components';
298
+
299
+ // a bottom bar on a phone, a rail from 768px, a collapsible sidebar from 1280px
300
+ <ActivityLayout
301
+ items={items}
302
+ navigation={{ phone: 'bar', tablet: 'rail', desktop: 'sidebar', persistKey: 'nav' }}
303
+ header={{ variant: 'large', search: { placeholder: 'Search' } }}
304
+ >
305
+ <Outlet />
306
+ </ActivityLayout>
307
+
308
+ // grouped settings: a list then the page on a phone, the section in the URL
309
+ <SettingsLayout
310
+ sections={[{ id: 'profile', group: 'Account', title: 'Profile', content: <ProfileForm /> }]}
311
+ />
312
+ ```
313
+
314
+ Also: `ListDetailsLayout`, `PaneLayout`, `ThreadLayout`, `ResponsiveGrid`,
315
+ `DashboardGrid`, `EditorLayout` and `LandingLayout`. The [layouts guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/layouts.md)
316
+ picks one by need.
317
+
290
318
  ### Amounts and dates in your locale
291
319
 
292
320
  ```tsx
@@ -489,7 +517,8 @@ Each area a consumer starts from has its own page under `docs/guides/`.
489
517
  | --- | --- |
490
518
  | [Forms](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/forms.md) | wiring fields to React Hook Form and Zod, composite values (contacts, opening hours), config-driven `Field`, server errors, what each field emits |
491
519
  | [i18n](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/i18n.md) | adding your strings next to the package's, switching language, translated Zod messages, SSR without a text mismatch |
492
- | [App shell](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/app-shell.md) | laying out an app with `ActivityLayout` (route changes cross-fade by default, `routeTransition={false}` opts out; it draws the theme's background, `backdrop` is the exception and `backdrop={false}` a plain page), its `items` (rendered as links; `linkComponent` to pass your own), the brand (`logo`, `name`, and `context` for the phone sheet's tenant line), the header's title, a route's `handle.title` as the page's `h1` in the app bar (`AppShellHandle`, `PageTitle`; `handle.titleAfter` / `titleAfter` a slot right after it, such as a record's `Switcher`, and `headerContext` a small tenant line from md up; it labels `<main>`, and `usePageTitleFocus()` focuses it after a navigation), and `AccountMenu`, the active entry and breadcrumbs (needs a data router; `breadcrumbRoot` replaces the home icon with a text link, or with `icon: true` keeps it with its own target and name, `breadcrumb={false}` hides the trail), the `<main>` landmark, the `h1` title, document scrolling, a background preset behind the shell (`backdrop`), and the tinted page ground the cards stand on (`--ground`, the opt-out) |
520
+ | [App shell](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/app-shell.md) | laying out an app with `ActivityLayout` (its `header`: small, center, medium and large collapsing on scroll, hide on scroll, a search in the bar, sticky tabs under it, a back arrow per route with `handle.back`, per route with `handle.header`; route changes cross-fade by default, `routeTransition={false}` opts out; it draws the theme's background, `backdrop` is the exception and `backdrop={false}` a plain page), its `items` (rendered as links; `linkComponent` to pass your own), the brand (`logo`, `name`, and `context` for the phone sheet's tenant line), the header's title, a route's `handle.title` as the page's `h1` in the app bar (`AppShellHandle`, `PageTitle`; `handle.titleAfter` / `titleAfter` a slot right after it, such as a record's `Switcher`, and `headerContext` a small tenant line from md up; it labels `<main>`, and `usePageTitleFocus()` focuses it after a navigation), and `AccountMenu`, the active entry and breadcrumbs (needs a data router; `breadcrumbRoot` replaces the home icon with a text link, or with `icon: true` keeps it with its own target and name, `breadcrumb={false}` hides the trail), the `<main>` landmark, the `h1` title, document scrolling, a background preset behind the shell (`backdrop`), and the tinted page ground the cards stand on (`--ground`, the opt-out) |
521
+ | [Layouts](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/layouts.md) | choosing a navigation preset (bar, rail, drawer, sidebar, top, two-level, floating), an app bar variant or a page layout (list and details, settings, dashboard, editor, landing), with an example of each |
493
522
  | [Themes for your app](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/themes.md) | defining app themes, generating their stylesheets and types with the Vite plugin's `themes` option or the `nxgt-theme` command, the CI check |
494
523
  | [Theming](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/theming.md) | changing colours, radius or fonts, motion and corner tokens, the page ground (`--ground`, `bg-ground`: its light and dark values and the opt-out), dark mode, tones (the `data-tone` channel, app tones and the calm zone `data-density="calm"`), touch targets, using the compiled CSS without Tailwind |
495
524
  | [Printing](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md) | producing PDFs with `@nxgt/material/print` and getting the file in one call (download, new tab, preview, server `Response`) — its own entry since 2.0.0, with optional peers, a bundling trap on SSR servers, and the `next.config.ts` a Next.js route handler (and `output: 'standalone'`) needs |
@@ -685,6 +714,7 @@ Not components: what the stylesheet gives any element.
685
714
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-metric-cards.webp" width="120" alt="TrendCard"> | [`TrendCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#metric-cards), `GoalCard`, `BreakdownCard`, `RankCard`, `CompareCard`, `HeatweekCard`, `FunnelCard`, `GaugeCard`, `SparkbarCard`, `DeltaListCard`, `BandCard`, `LatencyCard`, `RatioCard`, `ThresholdCard`, `PaceCard`, `HistogramCard`, `Sparkline` | Dashboard tiles including compare, heat, funnel, gauge, spark bars, delta list, range band, latency, ratio, threshold, pace and labelled histogram. Container queries. A `tone` (named, or your app's) draws the accent in it; deltas and breaches stay semantic. | `TrendCard`, `GoalCard`, `BreakdownCard`, `RankCard`, `CompareCard`, `HeatweekCard`, `FunnelCard`, `GaugeCard`, `SparkbarCard`, `DeltaListCard`, `BandCard`, `LatencyCard`, `RatioCard`, `ThresholdCard`, `PaceCard`, `HistogramCard` |
686
715
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-card-presets.webp" width="120" alt="FeatureCard"> | [`FeatureCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#card-presets), `MediaCard`, `PricingCard`, `ProfileCard`, `QuoteCard`, `OverlayCard`, `SpotlightCard`, `CrewCard`, `SplitCard`, `TicketCard`, `NoticeCard`, `TimelineCard`, `MessageCard`, `EventCard`, `StackCard`, `LinkCard`, `AlbumCard`, `TagCard`, `ReceiptCard`, `ReviewCard`, `OfferCard`, `PlaceCard`, `FileCard`, `StatusCard`, `ScoreCard`, `ShortcutCard`, `ChecklistCard` | Card presets including overlay, ticket, inbox, event, stack, link, album, tags, receipt, review, offer, place, file, status, score, shortcuts and checklist. Container queries. | `FeatureCard`, `MediaCard`, `PricingCard`, `ProfileCard`, `QuoteCard`, `OverlayCard`, `SpotlightCard`, `CrewCard`, `SplitCard`, `TicketCard`, `NoticeCard`, `TimelineCard`, `MessageCard`, `EventCard`, `StackCard`, `LinkCard`, `AlbumCard`, `TagCard`, `ReceiptCard`, `ReviewCard`, `OfferCard`, `PlaceCard`, `FileCard`, `StatusCard`, `ScoreCard`, `ShortcutCard`, `ChecklistCard` |
687
716
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-statusindicator.webp" width="120" alt="StatusIndicator"> | [`StatusIndicator`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#statusindicator) | Coloured status dot with an optional pulse and label. | `StatusIndicator` |
717
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-tubecap.webp" width="120" alt="TubeCap"> | [`TubeCap`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#tubecap) | A specimen tube's chip: a cap in its fixed convention colour, the container's name beside it, optional volume, accession and action | (later, #2470) |
688
718
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-summarydata.webp" width="120" alt="SummaryData"> | [`SummaryData`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#summarydata) | Label / value pairs as a grid or inline; hides empty values. | `SummaryData` |
689
719
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-description.webp" width="120" alt="Description"> | [`Description`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#description) | Read-only label / value pair that renders nothing when empty. | `Description` |
690
720
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-descriptionlist.webp" width="120" alt="DescriptionList"> | [`DescriptionList`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#descriptionlist), `DescriptionList.Group` | Dense auto-fill grid of `Description`s in a `dl` (`minItem`, `maxColumns`, `meta`, `span`, `labelPosition`, `lines`), or tonal panels per group with `variant="panels"`. | — (later, [#1614](https://github.com/softistx/nxgt-material/issues/1614)) |
@@ -733,15 +763,20 @@ Not components: what the stylesheet gives any element.
733
763
 
734
764
  | Preview | Component | What it does | @nxgt/material-vue |
735
765
  | --- | --- | --- | --- |
736
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-appshell.webp" width="120" alt="ActivityLayout"> | [`ActivityLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#activitylayout), `ActivityContent`, `AppSidebar`, `AppHeader`, `AppBreadcrumb`, `AppBreadcrumbItem`, `AppBreadcrumbSeparator` | App shell: sidebar built from `items`, a header with a mobile sheet, route breadcrumbs and a titled page; entries are real links, and `linkComponent` swaps the link; it draws the theme's background (Lavande's is the gradient), `backdrop` puts a `/backgrounds` preset behind it for one screen, and `backdrop={false}` draws a plain page, and `keepClear="gaps"` lets its glyphs sit in the gaps between surfaces of a dense page. It paints the tinted page ground (`--ground`, `bg-ground`) under the content, with the sidebar and the app bar flat on `--background` and the cards on `bg-card` (`--ground: var(--background)` opts out). `ActivityContent` takes an `aside` side panel (beside the content from 1280px in CSS only, sticky under the app bar, a named `complementary` landmark, stacked below) and `width="form" \| "reading"` to cap the main column with the panel right beside it; `notice` puts an `Alert` or `Banner` above both, at their width. See the [app shell guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/app-shell.md). | `ActivityLayout`, `ActivityContent`, `AppSidebar`, `AppHeader`, `AppBreadcrumb` |
766
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-appshell.webp" width="120" alt="ActivityLayout"> | [`ActivityLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#activitylayout), `ActivityContent`, `AppSidebar`, `AppHeader`, `AppBreadcrumb`, `AppBreadcrumbItem`, `AppBreadcrumbSeparator` | App shell: sidebar built from `items`, a header with a mobile sheet (`header` picks its size: small, center, medium or large collapsing on scroll, `hideOnScroll`, a route's `handle.header`), route breadcrumbs and a titled page; entries are real links, and `linkComponent` swaps the link; it draws the theme's background (Lavande's is the gradient), `backdrop` puts a `/backgrounds` preset behind it for one screen, and `backdrop={false}` draws a plain page, and `keepClear="gaps"` lets its glyphs sit in the gaps between surfaces of a dense page. It paints the tinted page ground (`--ground`, `bg-ground`) under the content, with the sidebar and the app bar flat on `--background` and the cards on `bg-card` (`--ground: var(--background)` opts out). `ActivityContent` takes an `aside` side panel (beside the content from 1280px in CSS only, sticky under the app bar, a named `complementary` landmark, stacked below) and `width="form" \| "reading"` to cap the main column with the panel right beside it; `notice` puts an `Alert` or `Banner` above both, at their width. See the [app shell guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/app-shell.md). | `ActivityLayout`, `ActivityContent`, `AppSidebar`, `AppHeader`, `AppBreadcrumb` |
737
767
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-accountmenu.webp" width="120" alt="AccountMenu"> | [`AccountMenu`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#accountmenu) | The app bar's avatar menu: named after the account, the name and e-mail, the app's links, then an optional Theme choice (`themeChoice`) and a destructive Sign out with a busy state. | `AccountMenu` |
738
768
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-authcard.webp" width="120" alt="AuthCard"> | [`AuthCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#authcard) | The frame of a signed-out page: one `main`, a centred card whose title is the `h1` (focusable on an end state), a status or alert notice, a brand and toolbar row, safe-area padding, an optional backdrop (the theme's by default) that keeps clear of the card. | `AuthCard` |
739
769
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-sidebar.webp" width="120" alt="Sidebar"> | [`Sidebar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#sidebar), `SidebarHeader`, `SidebarContent`, `SidebarFooter`, `SidebarMenuItem`, `SidebarMenuLabel` | Collapsible navigation sidebar with icons, tooltips and active items. | `Sidebar` (same parts) |
740
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-topappbar.webp" width="120" alt="TopAppBar"> | [`TopAppBar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#topappbar), `BottomAppBar` | Top bar surface, and a bottom bar of icon actions with an active state. | `TopAppBar`, `BottomAppBar` |
770
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-topappbar.webp" width="120" alt="TopAppBar"> | [`TopAppBar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#topappbar), `BottomAppBar` | Top bar surface in four sizes (`variant`), and a bottom bar of icon actions with an active state. | `TopAppBar`, `BottomAppBar` |
771
+ | | [`AppSearchBar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#appsearchbar), `SearchView` | The app bar's search (`header.search` on `ActivityLayout`): a pill with a docked results panel from 768px (a `shortcut`, `results` as a node or a function, a polite `resultCount`), a search button opening a full-screen, focus-trapped `SearchView` on a phone. | not yet |
741
772
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-stickyactionbar.webp" width="120" alt="StickyActionBar"> | [`StickyActionBar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#stickyactionbar) | The bar of a page's main decision: stuck to the bottom on a phone above the keyboard and clear of the safe areas, inline from `md`, one primary action. | not yet |
742
773
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-breadcrumb.webp" width="120" alt="Breadcrumb"> | [`Breadcrumb`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#breadcrumb), `BreadcrumbList`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbPage`, `BreadcrumbSeparator`, `BreadcrumbEllipsis` | Breadcrumb primitives. | `Breadcrumb` (same parts) |
743
774
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-listdetailslayout.webp" width="120" alt="ListDetailsLayout"> | [`ListDetailsLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#listdetailslayout), `PaneLayout`, `ThreadLayout` | List / details that collapses to one view on mobile (a `back` bar and focus moves on the details, `breakpoint="container"` to follow its own width), a side pane that becomes a sheet, and a centred column. | `ListDetailsLayout`, `PaneLayout`, `ThreadLayout` |
744
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-responsivegrid.webp" width="120" alt="ResponsiveGrid"> | [`ResponsiveGrid`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#responsivegrid) | Container-query grid that grows from 1 to 5 columns, or fills by a minimum tile width (`minItem`) with a `gap`. | `ResponsiveGrid` |
775
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-settingslayout.webp" width="120" alt="SettingsLayout"> | [`SettingsLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#settingslayout) | The settings screen: grouped sections beside the selected one's page, list then page on a phone, the section kept in the URL, optional search. | — |
776
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-landinglayout.webp" width="120" alt="LandingLayout"> | [`LandingLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#landinglayout), `LandingSection`, `SiteFooter` | The frame of a public landing page outside the app shell: a top bar on `TopNav` (a drawer on a phone), a hero and bands on the theme's surfaces, a footer of link columns. | — |
777
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-responsivegrid.webp" width="120" alt="ResponsiveGrid"> | [`ResponsiveGrid`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#responsivegrid) | Container-query grid that grows from 1 to 5 columns, or fills by a minimum tile width (`minItem`) with a `gap`; `ResponsiveGrid.Item` spans, `dense` packing and `flow="masonry"`. | `ResponsiveGrid` |
778
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-dashboardgrid.webp" width="120" alt="DashboardGrid"> | [`DashboardGrid`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#dashboardgrid) | Tiles with spans that the user rearranges in an edit mode, by drag or keyboard; the order is the app's. | React only for now |
779
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-editorlayout.webp" width="120" alt="EditorLayout"> | [`EditorLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#editorlayout) | The editor page: a toolbar, a canvas that scrolls on its own, properties at the end (a bottom sheet on a phone) and an optional outline at the start. | — |
745
780
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-sectioncolumns.webp" width="120" alt="SectionColumns"> | [`SectionColumns`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#sectioncolumns) | Short page sections side by side from a viewport breakpoint (`from`, `columns`), stacked in source order below it; not a landmark. | — (later, [#1614](https://github.com/softistx/nxgt-material/issues/1614)) |
746
781
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-recordpage.webp" width="120" alt="RecordPage"> | [`RecordPage`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#recordpage), `RecordDetails` | The page of one record: a header card, the content, and the record's facts as a side panel from `xl` that stacks after (or before) the content, with a muted "Added on … · Updated on …" line. | — (later, [#2127](https://github.com/softistx/nxgt-material/issues/2127)) |
747
782
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-resizable.webp" width="120" alt="ResizableGroup"> | [`ResizableGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#resizablegroup), `ResizablePanel`, `ResizableSeparator` | Resizable panels with an optional grip handle. | `ResizablePanelGroup`, `ResizablePanel`, `ResizableHandle` |
@@ -752,9 +787,14 @@ Not components: what the stylesheet gives any element.
752
787
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-stepper.webp" width="120" alt="Stepper"> | [`Stepper`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#stepper), `StepperIndicator` | Clickable horizontal or vertical steps with status and progress (expressive shapes, optional steps, a phone header with Back and Next). | `Stepper` |
753
788
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-steps.webp" width="120" alt="Steps"> | [`Steps`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#steps), `StepsItem` | Numbered editorial steps that stay visible on every breakpoint. | `Steps`, `StepsItem` |
754
789
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-hero.webp" width="120" alt="Hero"> | [`Hero`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#hero) | Landing band with eyebrow, title, supporting copy and actions; `size="compact"` is a home-page greeting band, and `background` draws a `Background` behind it. | `Hero`, `HeroBackgroundProps` |
755
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-doc.webp" width="120" alt="Doc"> | [`Doc`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#doc), `DocPage`, `DocTopbar`, `DocSidebar`, `DocToc`, `DocPager`, `DocSearch`, `DocChildCards`, `DocSeeAlso`, `DocEmpty`, `DocProgress` | Documentation site shell: sidebar from `md`, TOC rail from `xl`. Reading bar, copy-page / markdown, child cards, see also, and a 404 slot. Storybook `UI/Doc/Api` composes an API page from `DocPage`, `AnchorHeading`, `ApiOperation`, `ParamTable` and `CodeGroup`. | `Doc` (same parts) |
790
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-doc.webp" width="120" alt="Doc"> | [`Doc`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#doc), `DocPage`, `DocTopbar`, `DocSidebar`, `DocToc`, `DocPager`, `DocSearch`, `DocChildCards`, `DocSeeAlso`, `DocEmpty`, `DocProgress` | Documentation site shell: sidebar from `md`, TOC rail from `xl`, or drawn inside the app shell with `chrome="embedded"`. Reading bar, copy-page / markdown, child cards, see also, and a 404 slot. Storybook `UI/Doc/Api` composes an API page from `DocPage`, `AnchorHeading`, `ApiOperation`, `ParamTable` and `CodeGroup`. | `Doc` (same parts) |
756
791
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-background.webp" width="120" alt="Background"> | [`Background`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#background) | Full-viewport gradient with blurred colour blobs; centres its children; 52 presets on `/backgrounds`, and a `sky` overlay. | `Background` |
757
- | — | [`NavigationRail`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationrail) | Placeholder: renders an empty rail container and takes no props yet. | `NavigationRail` |
792
+ | — | [`NavigationBar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationbar) | Bottom bar of 3 to 5 destinations with labels, badges and a More sheet. | `—` |
793
+ | — | [`TopNav`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#topnav) | Top navigation bar of destinations; an entry with `children` opens a dropdown; `navigation="top"` draws it in the app header. | `—` |
794
+ | — | [`NavigationDrawer`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationdrawer) | Navigation drawer in sections, `standard` (permanent) or `modal` (a sheet); `NavigationDrawerSection`, `NavigationDrawerItem`. | `—` |
795
+ | — | [`NavigationRail`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationrail) | Navigation rail with a FAB slot, badges and an expanded state (the FAB comes with `navigation="rail-expanded"`); an empty `div` without items. | `NavigationRail` (placeholder) |
796
+ | — | [`NavigationRailPanel`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationrailpanel) | Second-level panel beside the rail, listing the current entry's `children`; open by default, collapsible; `navigation="two-level"` draws both. | `—` |
797
+ | — | [`NavigationToolbar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#navigationtoolbar) | Floating pill of navigation links at the bottom centre (a `nav`, not a `role="toolbar"`), 3 to 5 destinations and More; optional hide on scroll; `navigation="floating"` draws it. | `—` |
758
798
 
759
799
  ### Overlays & menus
760
800
 
@@ -831,7 +871,7 @@ Not components: what the stylesheet gives any element.
831
871
  | --- | --- | --- | --- |
832
872
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-chat-overview.webp" width="120" alt="ChatInbox"> | [`ChatInbox`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#chat-kit), `ChatThread`, `ChatMessageList`, `ChatMessage`, `ChatComposer`, `ChatThreadHeader`, `ChatWidget`, `ChatConversationItem`, `ChatActionProposal`, `ChatToolActivity`… | Chat kit: inbox (list + thread, container queries from `@md`), bubbles grouped by sender or flat rows, read receipts, replies, reactions and a message toolbar, a pill composer with quick replies, attachments and stop, a floating chat widget, an approval card for an assistant's proposed action and a compact tool-step row; 320 px to desktop, light and dark. | `ChatInbox`, `ChatThread`, `ChatMessageList`, `ChatMessage`, `ChatComposer` (same parts; `ChatActionProposal` and `ChatToolActivity` not yet, [#2145](https://github.com/softistx/nxgt-material/issues/2145)) |
833
873
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-kanban.webp" width="120" alt="Kanban"> | [`Kanban`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#kanban) | Board with columns, swimlanes, WIP limits, search, and drag-and-drop cards and columns. | `Kanban` |
834
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-eventcalendar.webp" width="120" alt="EventCalendar"> | [`EventCalendar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#eventcalendar) | Month / week / day / agenda calendar with drag, resize and slot creation, a day view split by resource, a named time zone, a now line, a mini-month side panel and a phone layout. | `EventCalendar` |
874
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-eventcalendar.webp" width="120" alt="EventCalendar"> | [`EventCalendar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#eventcalendar) | Month / week / day / agenda calendar with drag, resize and slot creation, a day view split by resource, a named time zone, a recurring template week (`mode="template"`), a now line, a mini-month side panel and a phone layout. | `EventCalendar` |
835
875
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-native-charts-linechart.webp" width="120" alt="LineChart"> | [`LineChart`, `AreaChart`, `BarChart`, `PieChart`, `DonutChart`, `Gauge`, `RadialBarChart`, `FunnelChart`, `HeatmapChart`, `RadarChart`, `ScatterChart`, `ComboChart`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#charts) from `@nxgt/material/charts` | Native SVG charts with keyboard point navigation, a screen-reader summary, a "View data" table, `patterns`, a hide/isolate legend, zoom and phone scroll (client-only entry; [guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/charts.md)). | [not yet](https://github.com/softistx/nxgt-material/issues/1255) (#1255) |
836
876
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-emojipicker.webp" width="120" alt="EmojiPicker"> | [`EmojiPicker`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#emojipicker), `EmojiList` | Shared picker. `ChatComposer` takes `emojis`; `Markdown` expands `:shortcode:`; the RTE toolbar uses the same picker. | `EmojiPicker`, `EmojiList` |
837
877
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-mentionlist.webp" width="120" alt="MentionList"> | [`MentionList`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#mentionlist) | `@` mention list from an `items` prop (local search). ChatComposer and the RTE suggestion list use it. | `MentionList` |
@@ -892,7 +932,7 @@ which is private: adding it needs a GitHub account with access to it.
892
932
  | --- | --- |
893
933
  | skill `use-nxgt-material` | an index that picks the component by need and wires imports and `styles.css`; its references cover the tokens and themes, forms, i18n, tests by role, SSR and the other subpaths, read from these docs in `node_modules/@nxgt/material/docs/` |
894
934
  | skill `design-screens` | the library's visual language for a screen (hierarchy, rhythm, tones, surfaces, states, phone, dark, motion) and a 12-criteria grid to score a screen out of 5 |
895
- | skill `screen-recipes` | whole screens to start from (a home dashboard, a list with a detail sheet, forms and dialogs, tables and settings, a dense record page, a status board and an occupancy board), each the code of a tested `Guides/Recipes/<Name>` story |
935
+ | skill `screen-recipes` | whole screens to start from (a home dashboard, a list with a detail sheet, forms and dialogs, tables and settings, a dense record page, a status board, an occupancy board, a landing page and a search dialog with its results page), each the code of a tested `Guides/Recipes/<Name>` story |
896
936
  | agent `screen-builder` | builds a page or a form from the catalogue, with tests by role and name and an accessibility check, then looks at 360 and 1440 px screenshots in light and dark and fixes until the grid reads 4 everywhere |
897
937
  | agent `design-reviewer` | read-only: scores a screen's screenshots on the same 12 criteria and returns the fixes ranked, each with the component and prop |
898
938
  | skill `build-a-theme` + agent `theme-builder` | the app's own theme with `defineTheme`: seeds, tones, background and icon motif, generation, provider and picker; checks the AA contrast of the generated tokens in light and dark and looks at key screens |
@@ -4,7 +4,7 @@ import { o as n } from "./dist-DVRQkaTK.js";
4
4
  import { r } from "./dist-DWZXlCZR.js";
5
5
  import { a as i } from "./dist-DHdUUM1w.js";
6
6
  import { t as a } from "./in-dialog-D61Yeaol.js";
7
- import { a as o, c as s, d as c, i as l, l as u, n as d, o as f, r as p, s as m, t as h, u as g } from "./use-return-focus-Cevw_6yq.js";
7
+ import { a as o, c as s, d as c, i as l, l as u, n as d, o as f, r as p, s as m, t as h, u as g } from "./use-return-focus-C_Qz_yTk.js";
8
8
  import { i as _ } from "./escape-owner-DpaP0lm1.js";
9
9
  import * as v from "react";
10
10
  import { jsx as y, jsxs as b } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { l as e, r as t, s as n, u as r } from "./translator-DJkf4J7t.js";
1
+ import { l as e, r as t, s as n, u as r } from "./translator-CcEgQ-H7.js";
2
2
  import { t as i } from "./_baseIsEqual-C6ksIHya.js";
3
3
  import { useMemo as a } from "react";
4
4
  import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { n as t, t as n } from "./dist-DVRQkaTK.js";
3
- import { n as r, t as i } from "./spinner-C1QIewWv.js";
3
+ import { n as r, t as i } from "./spinner-DH1mm8hH.js";
4
4
  import { t as a } from "./dist-DkQbkF9T.js";
5
- import { a as o, i as s, n as c, o as l, s as u, t as d } from "./use-click-lock-BZYtTmVt.js";
5
+ import { a as o, i as s, n as c, o as l, s as u, t as d } from "./use-click-lock-Bwg_caHO.js";
6
6
  import { t as f } from "./is-production-GLw59WU8.js";
7
7
  import { t as p } from "./button-group-context-CaP0X5p_.js";
8
8
  import { t as m } from "./has-text-content-Ds2dkHX_.js";
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { n as t, r as n, t as r, u as i } from "./tabs-KGKvve3y.js";
3
- import { t as a } from "./button-3op3rtZh.js";
4
- import { t as o } from "./use-material-translation-CD6QoVal.js";
5
- import { t as s } from "./icon-button-Cogxy1cy.js";
2
+ import { n as t, r as n, t as r, u as i } from "./tabs-Um0SFyf1.js";
3
+ import { t as a } from "./button-CSKUtMI3.js";
4
+ import { t as o } from "./use-material-translation-DYrfV_JJ.js";
5
+ import { t as s } from "./icon-button-4PKlaI1g.js";
6
6
  import { t as c } from "./copy-to-clipboard-Be5Ffvs_.js";
7
7
  import { t as l } from "./useEvent-2fKq-6w8.js";
8
8
  import { t as u } from "./useLatest-C2PnQEeD.js";
@@ -11,7 +11,7 @@ import { t as f } from "./skeleton-DSdtr2qc.js";
11
11
  import { t as p } from "./live-status-BGPaN8r8.js";
12
12
  import { n as m, t as h } from "./calculator-context-BugcKuVG.js";
13
13
  import { a as g, c as _, i as v, l as y, n as b, o as ee, r as te, s as ne } from "./calculator-announce-DRd2c6Dq.js";
14
- import { i as re, t as ie } from "./pos-types-DKCkOTYy.js";
14
+ import { i as re, t as ie } from "./pos-types-BFrapNmx.js";
15
15
  import { a as ae, r as oe } from "./key-layout-cR79xfGE.js";
16
16
  import { n as x, r as se, t as ce } from "./programmer-word-CNCF7DJF.js";
17
17
  import { t as le } from "./standard-layout-BuSRr3TY.js";
@@ -279,11 +279,11 @@ function Le({ helpId: e }) {
279
279
  //#endregion
280
280
  //#region lib/components/ui/widgets/calculator/variants/variant-loader.ts
281
281
  var Re = {
282
- scientific: () => import("./scientific-variant-2y3UxAAU.js"),
283
- pos: () => import("./pos-variant-GrUfbTTP.js"),
284
- programmer: () => import("./programmer-variant-eKJNKENL.js"),
285
- financial: () => import("./financial-variant-CggTpad2.js"),
286
- conversion: () => import("./conversion-variant-BDFAxqe9.js")
282
+ scientific: () => import("./scientific-variant-CjErQxuZ.js"),
283
+ pos: () => import("./pos-variant-CctfqieO.js"),
284
+ programmer: () => import("./programmer-variant-Dd0YOixn.js"),
285
+ financial: () => import("./financial-variant-igpGRbGw.js"),
286
+ conversion: () => import("./conversion-variant-wZd-G6xR.js")
287
287
  }, B = "failed", V = /* @__PURE__ */ new Map(), H = /* @__PURE__ */ new Map(), U = /* @__PURE__ */ new Set(), W = () => {
288
288
  for (let e of U) e();
289
289
  };
@@ -1,11 +1,11 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { t } from "./button-3op3rtZh.js";
3
- import { t as n } from "./use-material-translation-CD6QoVal.js";
4
- import { t as r } from "./icon-button-Cogxy1cy.js";
5
- import { a as i, i as a, n as o, r as s, t as c } from "./picker-surface-CV09H7Nb.js";
6
- import { r as l, t as u } from "./currency-field-DWHB5oms.js";
2
+ import { t } from "./button-CSKUtMI3.js";
3
+ import { t as n } from "./use-material-translation-DYrfV_JJ.js";
4
+ import { t as r } from "./icon-button-4PKlaI1g.js";
5
+ import { a as i, i as a, n as o, r as s, t as c } from "./picker-surface-CiTycWgV.js";
6
+ import { r as l, t as u } from "./currency-field-DizBTAat.js";
7
7
  import { r as d, t as f } from "./field-blur-DkiZOVNV.js";
8
- import { t as p } from "./calculator-KqIMBXSh.js";
8
+ import { t as p } from "./calculator-Cv00UQgR.js";
9
9
  import { useId as m, useState as h } from "react";
10
10
  import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
11
  import { Calculator as y } from "lucide-react";
@@ -1,4 +1,4 @@
1
- import { t as e } from "./use-material-translation-CD6QoVal.js";
1
+ import { t as e } from "./use-material-translation-DYrfV_JJ.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  //#region lib/components/ui/widgets/calculator/partials/calculator-segment.tsx
4
4
  function n({ label: n, choices: r, value: i, nameKey: a, onChange: o }) {
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./calculator-KqIMBXSh.js";
1
+ import { n as e, t } from "./calculator-Cv00UQgR.js";
2
2
  export { e as CALCULATOR_VARIANTS, t as Calculator };
package/dist/charts.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { t as e } from "./ui.utils-CAnKTCw5.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { t as n } from "./warn-once-C_e47JM8.js";
4
- import { t as r } from "./button-3op3rtZh.js";
5
- import { t as i } from "./use-material-translation-CD6QoVal.js";
4
+ import { t as r } from "./button-CSKUtMI3.js";
5
+ import { t as i } from "./use-material-translation-DYrfV_JJ.js";
6
6
  import { t as a } from "./use-ssr-media-query-C6M5m8sf.js";
7
7
  import { i as o, n as s, r as c, t as l } from "./util-4heV2LPI.js";
8
8
  import { t as u } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
9
- import { t as d } from "./chip-MuKDwtkG.js";
9
+ import { t as d } from "./chip-BGn0V6Pt.js";
10
10
  import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
11
11
  import { t as b } from "./live-status-BGPaN8r8.js";
12
12
  import { t as x } from "./linear-G97mfnKF.js";
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { n as t } from "./spinner-C1QIewWv.js";
3
- import { s as n } from "./use-click-lock-BZYtTmVt.js";
4
- import { t as r } from "./use-material-translation-CD6QoVal.js";
2
+ import { n as t } from "./spinner-DH1mm8hH.js";
3
+ import { s as n } from "./use-click-lock-Bwg_caHO.js";
4
+ import { t as r } from "./use-material-translation-DYrfV_JJ.js";
5
5
  import { t as i } from "./react-node-text-Crkpfpco.js";
6
6
  import { cloneElement as a, isValidElement as o } from "react";
7
7
  import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
@@ -1,12 +1,12 @@
1
1
  import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { t as n } from "./dist-DWZXlCZR.js";
4
- import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-xlZ6NYUA.js";
4
+ import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-C6rcYGB9.js";
5
5
  import { a as c, i as l, n as u } from "./field-blur-context-BLGgf_3z.js";
6
- import { a as d, o as f, r as p, s as m, t as h } from "./toolbar-items-D310xDuM.js";
6
+ import { a as d, o as f, r as p, s as m, t as h } from "./toolbar-items-BoEY5bkt.js";
7
7
  import { t as g } from "./is-production-GLw59WU8.js";
8
- import { t as _ } from "./use-material-translation-CD6QoVal.js";
9
- import { i as v, n as y, o as b, t as x } from "./code-language-items-B7WR5ua_.js";
8
+ import { t as _ } from "./use-material-translation-DYrfV_JJ.js";
9
+ import { i as v, n as y, o as b, t as x } from "./code-language-items-oRjtO3qV.js";
10
10
  import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
11
11
  import { n as C, t as w } from "./escape-owner-DpaP0lm1.js";
12
12
  import { t as T } from "./skeleton-DSdtr2qc.js";
@@ -1,13 +1,13 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { t } from "./dist-DWZXlCZR.js";
3
- import { o as n, r, s as i, t as a } from "./toolbar-items-D310xDuM.js";
4
- import { t as o } from "./use-material-translation-CD6QoVal.js";
5
- import { i as s, n as c, o as l } from "./code-language-items-B7WR5ua_.js";
3
+ import { o as n, r, s as i, t as a } from "./toolbar-items-BoEY5bkt.js";
4
+ import { t as o } from "./use-material-translation-DYrfV_JJ.js";
5
+ import { i as s, n as c, o as l } from "./code-language-items-oRjtO3qV.js";
6
6
  import { t as u } from "./skeleton-DSdtr2qc.js";
7
7
  import { t as d } from "./live-status-BGPaN8r8.js";
8
8
  import { t as f } from "./use-mobile-BDro060N.js";
9
9
  import { t as p } from "./react-node-text-Crkpfpco.js";
10
- import { a as m, c as h, d as g, f as _, i as v, l as y, m as b, o as x, p as S, r as C, s as w, t as T, u as E } from "./code-editor-Bp2RrdNx.js";
10
+ import { a as m, c as h, d as g, f as _, i as v, l as y, m as b, o as x, p as S, r as C, s as w, t as T, u as E } from "./code-editor-B25-mWhb.js";
11
11
  import { r as D, t as O } from "./field-blur-DkiZOVNV.js";
12
12
  import { useEffect as k, useRef as A, useState as j } from "react";
13
13
  import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { d as e, f as t } from "./dropdown-menu-xlZ6NYUA.js";
2
- import { t as n } from "./use-material-translation-CD6QoVal.js";
1
+ import { d as e, f as t } from "./dropdown-menu-C6rcYGB9.js";
2
+ import { t as n } from "./use-material-translation-DYrfV_JJ.js";
3
3
  import { t as r } from "./copy-to-clipboard-Be5Ffvs_.js";
4
4
  import { t as i } from "./live-status-BGPaN8r8.js";
5
5
  import { useEffect as a, useRef as o, useState as s } from "react";
@@ -162,6 +162,17 @@
162
162
  [data-slot="form-actions"] {
163
163
  @apply sticky bottom-0 z-10 flex w-full justify-end gap-2 bg-background/80 border-t-8 border-transparent px-4 pb-[max(1rem,env(safe-area-inset-bottom))] backdrop-blur-sm max-sm:*:flex-1;
164
164
  }
165
+ /* `data-padding="none"`: the form sits flush in a container that
166
+ already pads it (a page, a card, a sheet): no inset on the fields or
167
+ the actions, so both align with the container's content edge. */
168
+ &[data-padding="none"] {
169
+ [data-slot="form-fields"] {
170
+ @apply p-0;
171
+ }
172
+ [data-slot="form-actions"] {
173
+ @apply px-0;
174
+ }
175
+ }
165
176
  }
166
177
 
167
178
  /* No height cap and no scroll of its own: the page (or the overlay) is
@@ -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";
@@ -142,6 +144,8 @@
142
144
  @import "./ui/display/seat-ring/seat-ring-ring.css";
143
145
  /* VoteTally: ranked bars with counts, shares and voters. */
144
146
  @import "./ui/display/vote-tally/vote-tally.css";
147
+ /* TubeCap: a specimen tube chip, cap colours fixed by the tube convention. */
148
+ @import "./ui/display/tube-cap/tube-cap.css";
145
149
  /* SecretCard: a face that is not rendered until it is revealed. */
146
150
  @import "./ui/display/secret-card/secret-card.css";
147
151
  /* Alert and Banner span the row in the form grids (#1497). */
@@ -206,6 +210,7 @@
206
210
  @import "./ui/fields/attributes/attributes.css";
207
211
  /* Background: the gradient preset's CSS, shared (lib/backgrounds/css); the other presets are opt-in: backgrounds.css. */
208
212
  @import "./background-shared.css";
213
+ @import "./ui/layout/app-search/app-search.css"; /* AppSearchBar, SearchView */
209
214
  @import "./ui/widgets/drawing/drawing.css"; /* @nxgt/material/draw: role colours, focus ring */
210
215
  @import "./ui/widgets/drawing/drawing-animate.css";
211
216
  @import "./ui/widgets/barcode/barcode.css"; /* @nxgt/material/barcode: symbol colours, label sheet */