@nxgt/material 3.79.0 → 3.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +45 -6
  3. package/dist/{alert-dialog-653apk3f.js → alert-dialog-DgHtXZuB.js} +1 -1
  4. package/dist/{async-slice-CXLbQuOc.js → async-slice-YBQsGtQT.js} +1 -1
  5. package/dist/{button-3op3rtZh.js → button-_vm-xSBU.js} +1 -1
  6. package/dist/{calculator-KqIMBXSh.js → calculator-CTd_S23A.js} +10 -10
  7. package/dist/calculator-field.js +6 -6
  8. package/dist/{calculator-segment-BlJE1LaS.js → calculator-segment-OI1BT3bA.js} +1 -1
  9. package/dist/calculator.js +1 -1
  10. package/dist/charts.js +3 -3
  11. package/dist/{chip-MuKDwtkG.js → chip-DumcVzUO.js} +2 -2
  12. package/dist/{code-editor-Bp2RrdNx.js → code-editor-CiwgfSOK.js} +4 -4
  13. package/dist/code-editor.js +4 -4
  14. package/dist/{code-language-items-B7WR5ua_.js → code-language-items-Dip0xnmc.js} +2 -2
  15. package/dist/components/components.css +3 -0
  16. package/dist/components/ui/actions/fab/fab-dock.css +19 -6
  17. package/dist/components/ui/layout/app-search/app-search.css +62 -0
  18. package/dist/components/ui/layout/app-shell/activity-backdrop.css +10 -2
  19. package/dist/components/ui/layout/app-shell/app-header.css +108 -0
  20. package/dist/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
  21. package/dist/{components-ConMf2w-.js → components-CJFHhkZv.js} +21800 -17785
  22. package/dist/components.js +37 -37
  23. package/dist/{conversion-variant-BDFAxqe9.js → conversion-variant-CqrPwPjC.js} +3 -3
  24. package/dist/{currency-field-DWHB5oms.js → currency-field-CMFvctye.js} +4 -4
  25. package/dist/{dialog-Bm5LvVlB.js → dialog-B0iU3fmh.js} +3 -3
  26. package/dist/dnd.js +2 -2
  27. package/dist/{dropdown-menu-xlZ6NYUA.js → dropdown-menu-CPOgcajv.js} +1 -1
  28. package/dist/editor.js +7 -7
  29. package/dist/{empty-state-C0kviQdW.js → empty-state-D3Jggupu.js} +1 -1
  30. package/dist/{financial-variant-CggTpad2.js → financial-variant-BdyfYhnp.js} +5 -5
  31. package/dist/{hooks-Dg94jPRq.js → hooks-Z7KKbv4G.js} +2 -2
  32. package/dist/hooks.js +2 -2
  33. package/dist/{hover-card-B1g55Hi6.js → hover-card-CFGIX6kg.js} +1 -1
  34. package/dist/i18n.js +3 -3
  35. package/dist/{icon-badge-BcW66bRk.js → icon-badge-kxGWUvcO.js} +1 -1
  36. package/dist/{icon-button-Cogxy1cy.js → icon-button-BamxMwZs.js} +1 -1
  37. package/dist/lib/components/ui/collections/server-table/partials/server-table-band-classes.d.ts +13 -0
  38. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  39. package/dist/lib/components/ui/layout/app-bar/top-app-bar.d.ts +18 -3
  40. package/dist/lib/components/ui/layout/app-search/app-search-bar.d.ts +11 -0
  41. package/dist/lib/components/ui/layout/app-search/app-search.types.d.ts +47 -0
  42. package/dist/lib/components/ui/layout/app-search/index.d.ts +3 -0
  43. package/dist/lib/components/ui/layout/app-search/partials/on-phone.d.ts +2 -0
  44. package/dist/lib/components/ui/layout/app-search/partials/phone-search.d.ts +3 -0
  45. package/dist/lib/components/ui/layout/app-search/partials/pill-search.d.ts +3 -0
  46. package/dist/lib/components/ui/layout/app-search/pill-form.d.ts +18 -0
  47. package/dist/lib/components/ui/layout/app-search/search-panel.d.ts +24 -0
  48. package/dist/lib/components/ui/layout/app-search/search-results.d.ts +14 -0
  49. package/dist/lib/components/ui/layout/app-search/search-shortcut.d.ts +15 -0
  50. package/dist/lib/components/ui/layout/app-search/search-view.d.ts +22 -0
  51. package/dist/lib/components/ui/layout/app-search/use-pill-panel.d.ts +22 -0
  52. package/dist/lib/components/ui/layout/app-search/use-search-text.d.ts +8 -0
  53. package/dist/lib/components/ui/layout/app-shell/activity-app-bar.d.ts +35 -0
  54. package/dist/lib/components/ui/layout/app-shell/activity-chrome.d.ts +26 -3
  55. package/dist/lib/components/ui/layout/app-shell/activity-column-props.d.ts +22 -0
  56. package/dist/lib/components/ui/layout/app-shell/activity-column.d.ts +10 -2
  57. package/dist/lib/components/ui/layout/app-shell/activity-layout-navigation.types.d.ts +94 -0
  58. package/dist/lib/components/ui/layout/app-shell/activity-layout.d.ts +8 -1
  59. package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +2 -1
  60. package/dist/lib/components/ui/layout/app-shell/activity-rails.d.ts +16 -0
  61. package/dist/lib/components/ui/layout/app-shell/activity-sidebar-lane.d.ts +22 -0
  62. package/dist/lib/components/ui/layout/app-shell/activity-top-nav.d.ts +11 -0
  63. package/dist/lib/components/ui/layout/app-shell/activity-two-level-lane.d.ts +14 -0
  64. package/dist/lib/components/ui/layout/app-shell/app-back.d.ts +22 -0
  65. package/dist/lib/components/ui/layout/app-shell/app-header-row.d.ts +3 -0
  66. package/dist/lib/components/ui/layout/app-shell/app-header.d.ts +33 -1
  67. package/dist/lib/components/ui/layout/app-shell/app-shell.utils.d.ts +8 -0
  68. package/dist/lib/components/ui/layout/app-shell/app-sidebar-entries.d.ts +13 -0
  69. package/dist/lib/components/ui/layout/app-shell/app-sidebar-label-item.d.ts +3 -1
  70. package/dist/lib/components/ui/layout/app-shell/bottom-chrome.d.ts +13 -0
  71. package/dist/lib/components/ui/layout/app-shell/header-title.d.ts +18 -2
  72. package/dist/lib/components/ui/layout/app-shell/header.utils.d.ts +37 -0
  73. package/dist/lib/components/ui/layout/app-shell/index.d.ts +3 -0
  74. package/dist/lib/components/ui/layout/app-shell/navigation-parts.d.ts +38 -0
  75. package/dist/lib/components/ui/layout/app-shell/navigation.utils.d.ts +36 -0
  76. package/dist/lib/components/ui/layout/app-shell/page-title-scope.d.ts +14 -0
  77. package/dist/lib/components/ui/layout/app-shell/page-title.d.ts +12 -1
  78. package/dist/lib/components/ui/layout/app-shell/shell-scroll.d.ts +32 -0
  79. package/dist/lib/components/ui/layout/app-shell/sticky-offset.d.ts +8 -0
  80. package/dist/lib/components/ui/layout/app-shell/types.d.ts +14 -0
  81. package/dist/lib/components/ui/layout/app-shell/use-focus-while-hidden.d.ts +9 -0
  82. package/dist/lib/components/ui/layout/app-shell/use-header-height.d.ts +12 -0
  83. package/dist/lib/components/ui/layout/app-shell/use-header-scroll.d.ts +19 -0
  84. package/dist/lib/components/ui/layout/app-shell/use-shell-header.d.ts +20 -0
  85. package/dist/lib/components/ui/layout/auth-card/auth-card-split.d.ts +14 -0
  86. package/dist/lib/components/ui/layout/auth-card/auth-card.d.ts +13 -1
  87. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid-context.d.ts +21 -0
  88. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.d.ts +9 -0
  89. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.state.d.ts +30 -0
  90. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.tiles.d.ts +8 -0
  91. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.types.d.ts +50 -0
  92. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.utils.d.ts +70 -0
  93. package/dist/lib/components/ui/layout/dashboard-grid/dashboard-tile.d.ts +7 -0
  94. package/dist/lib/components/ui/layout/dashboard-grid/index.d.ts +4 -0
  95. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-announcer.d.ts +6 -0
  96. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-edit-bar.d.ts +11 -0
  97. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-move-buttons.d.ts +9 -0
  98. package/dist/lib/components/ui/layout/dashboard-grid/partials/dashboard-toolbar.d.ts +7 -0
  99. package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-grid.d.ts +21 -0
  100. package/dist/lib/components/ui/layout/dashboard-grid/use-dashboard-moves.d.ts +22 -0
  101. package/dist/lib/components/ui/layout/doc/doc-context.d.ts +2 -0
  102. package/dist/lib/components/ui/layout/doc/doc.d.ts +5 -0
  103. package/dist/lib/components/ui/layout/doc/index.d.ts +1 -1
  104. package/dist/lib/components/ui/layout/doc/partials/doc-embedded-bar.d.ts +9 -0
  105. package/dist/lib/components/ui/layout/doc/partials/doc-embedded.d.ts +8 -0
  106. package/dist/lib/components/ui/layout/doc/use-doc.d.ts +9 -1
  107. package/dist/lib/components/ui/layout/editor-layout/editor-layout.d.ts +14 -0
  108. package/dist/lib/components/ui/layout/editor-layout/editor-layout.types.d.ts +31 -0
  109. package/dist/lib/components/ui/layout/editor-layout/index.d.ts +4 -0
  110. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-body.d.ts +11 -0
  111. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-canvas.d.ts +8 -0
  112. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-context.d.ts +12 -0
  113. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-start.d.ts +8 -0
  114. package/dist/lib/components/ui/layout/editor-layout/partials/editor-layout-triggers.d.ts +10 -0
  115. package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-names.d.ts +8 -0
  116. package/dist/lib/components/ui/layout/editor-layout/partials/use-editor-layout-state.d.ts +21 -0
  117. package/dist/lib/components/ui/layout/index.d.ts +9 -0
  118. package/dist/lib/components/ui/layout/landing/index.d.ts +6 -0
  119. package/dist/lib/components/ui/layout/landing/landing-layout.d.ts +15 -0
  120. package/dist/lib/components/ui/layout/landing/landing-layout.types.d.ts +27 -0
  121. package/dist/lib/components/ui/layout/landing/landing-section.d.ts +12 -0
  122. package/dist/lib/components/ui/layout/landing/landing-section.types.d.ts +32 -0
  123. package/dist/lib/components/ui/layout/landing/landing.classes.d.ts +20 -0
  124. package/dist/lib/components/ui/layout/landing/partials/landing-header.d.ts +11 -0
  125. package/dist/lib/components/ui/layout/landing/partials/landing-section-intro.d.ts +13 -0
  126. package/dist/lib/components/ui/layout/landing/partials/site-footer-group.d.ts +8 -0
  127. package/dist/lib/components/ui/layout/landing/site-footer.d.ts +13 -0
  128. package/dist/lib/components/ui/layout/landing/site-footer.types.d.ts +29 -0
  129. package/dist/lib/components/ui/layout/list-details-layout/internal.d.ts +2 -0
  130. package/dist/lib/components/ui/layout/list-details-layout/list-details-layout.d.ts +9 -17
  131. package/dist/lib/components/ui/layout/list-details-layout/partials/history-mark.d.ts +2 -0
  132. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-context.d.ts +17 -1
  133. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-history.d.ts +8 -0
  134. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-inspector.d.ts +21 -0
  135. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-layout.types.d.ts +47 -0
  136. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-resizer.d.ts +9 -0
  137. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-root.d.ts +3 -0
  138. package/dist/lib/components/ui/layout/list-details-layout/partials/list-details-trigger.d.ts +13 -4
  139. package/dist/lib/components/ui/layout/list-details-layout/partials/use-inspector-focus.d.ts +8 -0
  140. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-param.d.ts +26 -0
  141. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-details-state.d.ts +15 -0
  142. package/dist/lib/components/ui/layout/list-details-layout/partials/use-list-width.d.ts +16 -0
  143. package/dist/lib/components/ui/layout/list-details-layout/partials/use-pane-focus.d.ts +6 -4
  144. package/dist/lib/components/ui/layout/navigation-bar/index.d.ts +3 -0
  145. package/dist/lib/components/ui/layout/navigation-bar/internal.d.ts +4 -0
  146. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.classes.d.ts +14 -0
  147. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.d.ts +35 -0
  148. package/dist/lib/components/ui/layout/navigation-bar/navigation-bar.utils.d.ts +19 -0
  149. package/dist/lib/components/ui/layout/navigation-bar/partials/bar-badge.d.ts +5 -0
  150. package/dist/lib/components/ui/layout/navigation-bar/partials/bar-entry.d.ts +12 -0
  151. package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-item.d.ts +22 -0
  152. package/dist/lib/components/ui/layout/navigation-bar/partials/navigation-bar-more.d.ts +24 -0
  153. package/dist/lib/components/ui/layout/navigation-bar/use-nav-bar-inset.d.ts +12 -0
  154. package/dist/lib/components/ui/layout/navigation-drawer/index.d.ts +5 -0
  155. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.classes.d.ts +9 -0
  156. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.d.ts +45 -0
  157. package/dist/lib/components/ui/layout/navigation-drawer/navigation-drawer.utils.d.ts +14 -0
  158. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-body.d.ts +3 -0
  159. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-item.d.ts +20 -0
  160. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-modal.d.ts +17 -0
  161. package/dist/lib/components/ui/layout/navigation-drawer/partials/navigation-drawer-section.d.ts +15 -0
  162. package/dist/lib/components/ui/layout/navigation-rail/index.d.ts +3 -0
  163. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail-panel.d.ts +26 -0
  164. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.classes.d.ts +23 -0
  165. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.d.ts +42 -1
  166. package/dist/lib/components/ui/layout/navigation-rail/navigation-rail.utils.d.ts +4 -0
  167. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-body.d.ts +3 -0
  168. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-item.d.ts +20 -0
  169. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-panel-item.d.ts +7 -0
  170. package/dist/lib/components/ui/layout/navigation-rail/partials/navigation-rail-toggle.d.ts +7 -0
  171. package/dist/lib/components/ui/layout/navigation-rail/use-rail-expanded.d.ts +13 -0
  172. package/dist/lib/components/ui/layout/navigation-toolbar/index.d.ts +2 -0
  173. package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.classes.d.ts +20 -0
  174. package/dist/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.d.ts +51 -0
  175. package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-item.d.ts +25 -0
  176. package/dist/lib/components/ui/layout/navigation-toolbar/partials/navigation-toolbar-more.d.ts +3 -0
  177. package/dist/lib/components/ui/layout/pane-layout/internal.d.ts +3 -0
  178. package/dist/lib/components/ui/layout/pane-layout/pane-layout.d.ts +16 -2
  179. package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-classes.d.ts +7 -0
  180. package/dist/lib/components/ui/layout/pane-layout/partials/pane-layout-context.d.ts +13 -0
  181. package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-layout-state.d.ts +16 -0
  182. package/dist/lib/components/ui/layout/pane-layout/partials/use-pane-narrow.d.ts +6 -0
  183. package/dist/lib/components/ui/layout/responsive-grid/index.d.ts +4 -1
  184. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-item.d.ts +19 -0
  185. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid-spans.d.ts +19 -0
  186. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.d.ts +24 -2
  187. package/dist/lib/components/ui/layout/responsive-grid/responsive-grid.utils.d.ts +12 -0
  188. package/dist/lib/components/ui/layout/settings-layout/index.d.ts +2 -0
  189. package/dist/lib/components/ui/layout/settings-layout/partials/settings-link.d.ts +7 -0
  190. package/dist/lib/components/ui/layout/settings-layout/partials/settings-list.d.ts +11 -0
  191. package/dist/lib/components/ui/layout/settings-layout/partials/settings-page.d.ts +5 -0
  192. package/dist/lib/components/ui/layout/settings-layout/settings-layout.d.ts +10 -0
  193. package/dist/lib/components/ui/layout/settings-layout/settings-layout.types.d.ts +33 -0
  194. package/dist/lib/components/ui/layout/settings-layout/settings-layout.utils.d.ts +13 -0
  195. package/dist/lib/components/ui/layout/thread-layout/thread-layout-classes.d.ts +17 -0
  196. package/dist/lib/components/ui/layout/thread-layout/thread-layout-parts.d.ts +14 -0
  197. package/dist/lib/components/ui/layout/thread-layout/thread-layout-stepper.d.ts +11 -0
  198. package/dist/lib/components/ui/layout/thread-layout/thread-layout.d.ts +30 -3
  199. package/dist/lib/components/ui/layout/top-nav/index.d.ts +5 -0
  200. package/dist/lib/components/ui/layout/top-nav/partials/top-nav-item.d.ts +23 -0
  201. package/dist/lib/components/ui/layout/top-nav/partials/top-nav-menu.d.ts +22 -0
  202. package/dist/lib/components/ui/layout/top-nav/top-nav.classes.d.ts +10 -0
  203. package/dist/lib/components/ui/layout/top-nav/top-nav.d.ts +34 -0
  204. package/dist/lib/components/ui/layout/top-nav/top-nav.utils.d.ts +10 -0
  205. package/dist/lib/components/ui/widgets/kanban/index.d.ts +1 -1
  206. package/dist/lib/components/ui/widgets/kanban/kanban-context.d.ts +5 -2
  207. package/dist/lib/components/ui/widgets/kanban/kanban.d.ts +11 -2
  208. package/dist/lib/components/ui/widgets/kanban/kanban.slice.d.ts +32 -0
  209. package/dist/lib/components/ui/widgets/kanban/kanban.utils.d.ts +9 -0
  210. package/dist/lib/components/ui/widgets/kanban/partials/kanban-card-preview.d.ts +3 -1
  211. package/dist/lib/components/ui/widgets/kanban/partials/kanban-column.d.ts +6 -0
  212. package/dist/lib/components/ui/widgets/kanban/partials/kanban-move-to.d.ts +13 -0
  213. package/dist/lib/components/ui/widgets/kanban/partials/kanban-phone-tabs.d.ts +10 -0
  214. package/dist/lib/components/ui/widgets/kanban/types.d.ts +7 -0
  215. package/dist/lib/components/ui/widgets/kanban/use-kanban-board-keys.d.ts +7 -0
  216. package/dist/lib/components/ui/widgets/kanban/use-kanban-item-actions.d.ts +5 -0
  217. package/dist/lib/components/ui/widgets/kanban/use-kanban-phone-column.d.ts +18 -0
  218. package/dist/lib/components/ui/widgets/kanban/use-kanban.d.ts +6 -1
  219. package/dist/lib/i18n/resources/en/en.d.ts +50 -0
  220. package/dist/lib/i18n/resources/en/material.json.d.ts +52 -2
  221. package/dist/lib/i18n/resources/fr/fr.d.ts +50 -0
  222. package/dist/lib/i18n/resources/fr/material.json.d.ts +52 -2
  223. package/dist/lib/i18n/resources/resources.d.ts +100 -0
  224. package/dist/lib/i18n/translator.d.ts +1 -1
  225. package/dist/lib.js +1 -1
  226. package/dist/main.js +52 -52
  227. package/dist/map.js +7 -7
  228. package/dist/material.css +1 -1
  229. package/dist/pdf-reader.js +1 -1
  230. package/dist/{percent-field--WIXV5dX.js → percent-field-C2LNr8NA.js} +1 -1
  231. package/dist/{picker-surface-CV09H7Nb.js → picker-surface-BUCFMoAZ.js} +4 -4
  232. package/dist/{popover-Cd7DkND4.js → popover-DFRwQF12.js} +1 -1
  233. package/dist/{pos-types-DKCkOTYy.js → pos-types-CXnEdjdy.js} +1 -1
  234. package/dist/{pos-variant-GrUfbTTP.js → pos-variant-DMwn_7is.js} +4 -4
  235. package/dist/print.js +1 -1
  236. package/dist/{programmer-variant-eKJNKENL.js → programmer-variant-Bo4eiDFi.js} +2 -2
  237. package/dist/{public-y6g4ddxd.js → public-CyQPkkSR.js} +9 -9
  238. package/dist/{rich-code-block-CRQ0iyLb.js → rich-code-block-iK7UcZdc.js} +5 -5
  239. package/dist/{scientific-variant-2y3UxAAU.js → scientific-variant-B9ScTgfx.js} +2 -2
  240. package/dist/{sortable-provider-DdiI3Fwk.js → sortable-provider-BZwVjSVU.js} +3 -3
  241. package/dist/{spinner-C1QIewWv.js → spinner-RITOxvpH.js} +2 -2
  242. package/dist/{tabs-KGKvve3y.js → tabs-DSo4eCUn.js} +1 -1
  243. package/dist/theme-picker.js +2 -2
  244. package/dist/{theme-toggle-C_VeiiCm.js → theme-toggle-3gbzQX0x.js} +1 -1
  245. package/dist/{toolbar-items-D310xDuM.js → toolbar-items-Bt5RK-Nx.js} +4 -4
  246. package/dist/{translate-material-BypJJ1l5.js → translate-material-CZTGqgen.js} +1 -1
  247. package/dist/{translator-DJkf4J7t.js → translator-DTlOlIoq.js} +108 -4
  248. package/dist/{use-chat-composer-BFhRMHcX.js → use-chat-composer-DBY01IpX.js} +16 -16
  249. package/dist/{use-heading-spy-DJR8YYm6.js → use-heading-spy-Dt48bBts.js} +4 -4
  250. package/dist/{use-material-translation-CD6QoVal.js → use-material-translation-BJucC_xe.js} +1 -1
  251. package/dist/{use-return-focus-Cevw_6yq.js → use-return-focus-BS1JLcnq.js} +1 -1
  252. package/docs/README.md +1 -0
  253. package/docs/components/data-display.md +4 -0
  254. package/docs/components/data-table-filter-and-lists.md +2 -0
  255. package/docs/components/navigation-and-layout.md +944 -27
  256. package/docs/components/rich-widgets.md +26 -0
  257. package/docs/guides/app-shell.md +641 -2
  258. package/docs/guides/i18n.md +13 -1
  259. package/docs/guides/layouts.md +215 -0
  260. package/docs/guides/ssr.md +1 -1
  261. package/docs/previews/navigation-layout-appshell-page-ground.webp +0 -0
  262. package/docs/previews/navigation-layout-appshell.webp +0 -0
  263. package/docs/previews/navigation-layout-authcard-split.webp +0 -0
  264. package/docs/previews/navigation-layout-authcard.webp +0 -0
  265. package/docs/previews/navigation-layout-dashboardgrid.webp +0 -0
  266. package/docs/previews/navigation-layout-editorlayout.webp +0 -0
  267. package/docs/previews/navigation-layout-landinglayout.webp +0 -0
  268. package/docs/previews/navigation-layout-panelayout.webp +0 -0
  269. package/docs/previews/navigation-layout-settingslayout.webp +0 -0
  270. package/docs/previews/navigation-layout-threadlayout-pages.webp +0 -0
  271. package/docs/previews/navigation-layout-threadlayout.webp +0 -0
  272. package/docs/roadmap.md +10 -2
  273. package/lib/components/components.css +3 -0
  274. package/lib/components/ui/actions/fab/fab-dock.css +19 -6
  275. package/lib/components/ui/layout/app-search/app-search.css +62 -0
  276. package/lib/components/ui/layout/app-shell/activity-backdrop.css +10 -2
  277. package/lib/components/ui/layout/app-shell/app-header.css +108 -0
  278. package/lib/components/ui/layout/navigation-toolbar/navigation-toolbar.css +43 -0
  279. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
1
  import { PropsWithChildren, ReactNode } from 'react';
2
+ import { AppSearchBarProps } from '../app-search/app-search.types.js';
3
+ import { ShellBack } from './activity-layout-navigation.types.js';
2
4
  import { AppLogo, AppShellLinkComponent, MenuItem } from './types.js';
3
5
  export type AppHeaderProps = {
4
6
  className?: string;
@@ -6,6 +8,8 @@ export type AppHeaderProps = {
6
8
  items: MenuItem[];
7
9
  /** The link of each menu entry; see {@link AppShellLinkComponent}. */
8
10
  linkComponent?: AppShellLinkComponent;
11
+ /** The classes hiding the top navigation (`navigation="top"`) where it does not show, drawn right after the menu button with the brand; undefined: none. */
12
+ topNav?: string;
9
13
  /** Rendered before the avatar — notifications, help, a theme toggle. */
10
14
  actions?: ReactNode;
11
15
  /** An image URL, or a whole node when the app renders its own. */
@@ -29,6 +33,34 @@ export type AppHeaderProps = {
29
33
  menuOpen?: boolean;
30
34
  /** Asked for every change of the menu sheet: the button, Escape, a link, a new location. */
31
35
  onMenuOpenChange?: (open: boolean) => void;
36
+ /**
37
+ * The bar's look. `'small'` (the default): one row. `'center'`: the title
38
+ * centred. `'medium'` and `'large'`: with a `headline`, a second row under
39
+ * the first, in display type, collapsing into the first as the shell scrolls;
40
+ * without one they draw as `'small'`.
41
+ */
42
+ variant?: 'small' | 'center' | 'medium' | 'large';
43
+ /** Whether a `medium` or `large` bar collapses while the shell scrolls. @default true */
44
+ collapse?: boolean;
45
+ /** Slides the bar away while the shell scrolls down, back on the way up: `inert` while away. @default false */
46
+ hideOnScroll?: boolean;
47
+ /** A search after the titles: a pill from 768px, a button for the full-screen view on a phone. Unset: none. */
48
+ search?: AppSearchBarProps;
49
+ /**
50
+ * A tab row under the bar (a `TabsNav`), stuck to it: it stays under the bar
51
+ * while a `medium` or `large` one collapses, and stays pinned at the top of
52
+ * the window when `hideOnScroll` slides the bar away. Unset: none.
53
+ */
54
+ tabs?: ReactNode;
55
+ /**
56
+ * A back arrow at the start of the bar: `{ to, label? }` links to `to`, `true`
57
+ * goes back in the history (or up one level when this is the first page of
58
+ * the visit). It comes first, before the menu button and the title; the
59
+ * phone's menu button follows it. Unset: none.
60
+ */
61
+ back?: ShellBack;
62
+ /** The page's title for a `medium` or `large` bar: its second row, which should carry the page's `h1`. */
63
+ headline?: ReactNode;
32
64
  } & PropsWithChildren;
33
65
  /**
34
66
  * The top bar. On mobile it also *is* the navigation: the sidebar is hidden by
@@ -43,4 +75,4 @@ export type AppHeaderProps = {
43
75
  * {@link ActivityLayout}: the menu sheet reads the location to close when it
44
76
  * changes, and `useLocation` throws outside a router.
45
77
  */
46
- export declare function AppHeader({ items, linkComponent, className, children, actions, avatar, brand, logo, name, context, menuOpen, onMenuOpenChange, showMenuIcon, }: AppHeaderProps): import("react").JSX.Element;
78
+ export declare function AppHeader({ className, children, variant, collapse, hideOnScroll, headline, tabs, ...row }: AppHeaderProps): import("react").JSX.Element;
@@ -42,3 +42,11 @@ export declare function isMenuItemActive(pathname: string, url: string): boolean
42
42
  * urls are the same url — so first-longest is deterministic.
43
43
  */
44
44
  export declare function findActiveMenuItem(pathname: string, items: MenuItem[]): MenuItem | undefined;
45
+ /** Every entry and, after each, its children: the list the location is matched against. */
46
+ export declare function flattenItems(items: MenuItem[]): MenuItem[];
47
+ /**
48
+ * The top-level entry the location belongs to: the one whose own url or whose
49
+ * descendant's url is the most specific match. A child living outside its
50
+ * parent's url (`/archive` under `/projects`) still lights the parent.
51
+ */
52
+ export declare function findActiveSection(pathname: string, items: MenuItem[]): MenuItem | undefined;
@@ -0,0 +1,13 @@
1
+ import { AppShellLinkComponent, MenuItem } from './types.js';
2
+ /**
3
+ * The sidebar's entries: a link per item, an icon button for `display: 'icon'`.
4
+ * Expanded (the sidebar open, the phone's menu sheet), an entry's `children`
5
+ * are nested under it, indented.
6
+ */
7
+ export declare function AppSidebarEntries({ items, activeUrl, linkComponent, expanded, }: {
8
+ items: MenuItem[];
9
+ /** The `url` of the one current entry, a child included. */
10
+ activeUrl?: string;
11
+ linkComponent: AppShellLinkComponent;
12
+ expanded?: boolean;
13
+ }): import("react").JSX.Element[];
@@ -4,8 +4,10 @@ import { AppShellLinkComponent, MenuItem } from './types.js';
4
4
  * with its badge. The twin of {@link AppSidebarIconItem}, which draws an
5
5
  * entry with `display: 'icon'`.
6
6
  */
7
- export declare function AppSidebarLabelItem({ item, active, linkComponent: ownLink, }: {
7
+ export declare function AppSidebarLabelItem({ item, active, linkComponent: ownLink, nested, }: {
8
8
  item: MenuItem;
9
9
  active: boolean;
10
+ /** A child of another entry: indented under it. */
11
+ nested?: boolean;
10
12
  linkComponent?: AppShellLinkComponent;
11
13
  }): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The room a bottom navigation bar and a docked media bar take at the bottom
3
+ * of the screen, as a CSS length: `--nxgt-bottom-chrome` when set, else the
4
+ * two added (`--nxgt-nav-bar` and `--nxgt-media-dock`, 0 when unset). The
5
+ * bar's room already holds the bottom safe-area inset, and so does a dock
6
+ * alone: the inset is cleared once, never added on top.
7
+ */
8
+ export declare const BOTTOM_CHROME = "var(--nxgt-bottom-chrome, calc(var(--nxgt-nav-bar, 0px) + var(--nxgt-media-dock, 0px)))";
9
+ /**
10
+ * What a floating element clears at the bottom: the bottom safe-area inset or
11
+ * the chrome, whichever is taller (the chrome holds the inset when it shows).
12
+ */
13
+ export declare const BOTTOM_CLEARANCE = "max(env(safe-area-inset-bottom, 0px), var(--nxgt-bottom-chrome, calc(var(--nxgt-nav-bar, 0px) + var(--nxgt-media-dock, 0px))))";
@@ -7,16 +7,28 @@ import { ReactNode } from 'react';
7
7
  * (`sr-only`) and stays in the accessibility tree (#1693): a container query
8
8
  * on the bar, so the server markup is unchanged.
9
9
  */
10
- export declare function HeaderTitle({ children, shrinks, }: {
10
+ export declare function HeaderTitle({ children, shrinks, center, }: {
11
11
  children?: ReactNode;
12
+ /** Centre it, for the `'center'` header. */
13
+ center?: boolean;
12
14
  /** The page's title shares the bar: this one gives it room. */
13
15
  shrinks?: boolean;
14
16
  }): import("react").JSX.Element | null;
17
+ /**
18
+ * The page's title in the small bar of a medium or large header, a copy of the
19
+ * headline's text for the eye: hidden from the accessibility tree (the headline
20
+ * is the page's `h1`) and faded in by app-header.css as the headline collapses.
21
+ */
22
+ export declare function CollapsedTitle({ children, separated, }: {
23
+ children: ReactNode;
24
+ /** A leading title precedes it: a thin rule between them. */
25
+ separated?: boolean;
26
+ }): import("react").JSX.Element;
15
27
  /**
16
28
  * The app bar's titles: the leading `headerTitle`, then the page's title (a
17
29
  * route's `handle.title`, the page's `h1`) after a thin rule when both are set.
18
30
  */
19
- export declare function AppBarTitles({ headerTitle, pageTitle, pageTitleAfter, headerContext, titleId, }: {
31
+ export declare function AppBarTitles({ headerTitle, pageTitle, pageTitleAfter, headerContext, titleId, center, collapsedTitle, }: {
20
32
  headerTitle?: ReactNode;
21
33
  pageTitle?: ReactNode;
22
34
  /** The slot right after the page's title, outside its `h1`. */
@@ -24,4 +36,8 @@ export declare function AppBarTitles({ headerTitle, pageTitle, pageTitleAfter, h
24
36
  /** The small muted context line after the title, from `md` up. */
25
37
  headerContext?: ReactNode;
26
38
  titleId?: string;
39
+ /** The `'center'` header: the titles are centred. */
40
+ center?: boolean;
41
+ /** The page's title for a medium or large header, whose headline row carries the `h1`: the bar shows this copy once collapsed. */
42
+ collapsedTitle?: ReactNode;
27
43
  }): import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { UIMatch } from 'react-router';
2
+ import { ShellBack, ShellHeaderOptions, ShellHeaderVariant } from './activity-layout-navigation.types.js';
3
+ /** What `header` and a route's `handle.header` take. */
4
+ export type ShellHeaderInput = ShellHeaderVariant | ShellHeaderOptions;
5
+ /** The px a `medium` or `large` header gives back while it collapses (the headline row), in rem: 16px each. */
6
+ export declare const HEADLINE_REM: {
7
+ readonly medium: 5;
8
+ readonly large: 8;
9
+ };
10
+ /** Px of scroll past which a header that hides on scroll goes away. */
11
+ export declare const HIDE_AFTER = 64;
12
+ /**
13
+ * The `handle.back` of the deepest matched route that declares one, or
14
+ * `undefined`. Read from the matches, like the header, so the server draws
15
+ * the same bar.
16
+ */
17
+ export declare function resolveRouteBack(matches: UIMatch[]): ShellBack | undefined;
18
+ /**
19
+ * The `handle.header` of the deepest matched route that declares one, or
20
+ * `undefined`: read from the matches, which the router has before it renders
21
+ * anything, so the server draws the same header.
22
+ */
23
+ export declare function resolveRouteHeader(matches: UIMatch[]): ShellHeaderInput | undefined;
24
+ /**
25
+ * The header a screen gets: the layout's `header` with the route's
26
+ * `handle.header` on top, option by option. A route that only names a variant
27
+ * keeps the layout's `hideOnScroll`.
28
+ */
29
+ export declare function mergeHeader(layout?: ShellHeaderInput, route?: ShellHeaderInput): import('./navigation.utils.js').ResolvedHeader;
30
+ /**
31
+ * How far a collapsing header has gone, 0 (expanded) to 1 (collapsed), after
32
+ * `offset` px of scroll over `range` px. Under reduced motion it snaps at the
33
+ * middle instead of following the scroll.
34
+ */
35
+ export declare function collapseProgress(offset: number, range: number, reducedMotion?: boolean): number;
36
+ /** Whether a header that hides on scroll is away: scrolling down, past `after` px. */
37
+ export declare function isHeaderHidden(direction: 'up' | 'down' | 'none', offset: number, after?: number): boolean;
@@ -1,11 +1,14 @@
1
1
  export * from './activity-content.js';
2
2
  export type * from './activity-content-aside.types.js';
3
3
  export * from './activity-layout.js';
4
+ export type * from './activity-layout-navigation.types.js';
4
5
  export * from './app-breadcrumb.js';
5
6
  export * from './app-header.js';
6
7
  export * from './app-shell.utils.js';
7
8
  export * from './app-sidebar.js';
9
+ export { DEFAULT_NAVIGATION, navigationClasses, type ResolvedHeader, type ResolvedNavigation, resolveHeader, resolveNavigation, } from './navigation.utils.js';
8
10
  export { usePageTitleFocus } from './page-title-focus.js';
9
11
  export type { AppShellHandle, PageTitle } from './page-title-scope.js';
10
12
  export { ROUTE_TRANSITION_CLASS, type RouteTransition, } from './route-transition.js';
13
+ export { ShellScrollContext, type ShellScrollDirection, type ShellScrollOptions, ShellScrollProvider, type ShellScrollState, useScrollTracker, useShellScroll, } from './shell-scroll.js';
11
14
  export * from './types.js';
@@ -0,0 +1,38 @@
1
+ import { ShellNavigation } from './activity-layout-navigation.types.js';
2
+ import { ResolvedNavigation } from './navigation.utils.js';
3
+ /**
4
+ * Whether the shell draws each preset; one still to come is `false` and draws
5
+ * what its size has by default. Every `ShellNavigation` name is drawn today.
6
+ */
7
+ export declare const DRAWN: Record<ShellNavigation, boolean>;
8
+ export type ShellParts = {
9
+ /** Present when a bar shows at some size: the classes that hide it elsewhere, and its `--nxgt-nav-bar` for the first paint. */
10
+ bar?: {
11
+ hide: string;
12
+ vars: string;
13
+ };
14
+ /** The classes hiding the rail where it does not show; undefined: no rail. */
15
+ rail?: string;
16
+ /** The classes hiding the wide navigation rail where it does not show; undefined: no such rail. */
17
+ wide?: string;
18
+ /** The classes hiding the permanent drawer where it does not show; undefined: no such drawer. */
19
+ drawer?: string;
20
+ /** The classes hiding the collapsible sidebar where it does not show; undefined: no sidebar. */
21
+ sidebar?: string;
22
+ /** The classes hiding the top navigation (in the app header) where it does not show; undefined: no top navigation. */
23
+ top?: string;
24
+ /** The classes hiding the two-level navigation (rail and section panel) where it does not show; undefined: none. */
25
+ twoLevel?: string;
26
+ /** Present when the floating navigation toolbar shows at some size: the classes that hide it elsewhere, its first-paint `--nxgt-nav-bar`, and whether it slides away on scroll. */
27
+ floating?: {
28
+ hide: string;
29
+ vars: string;
30
+ hideOnScroll: boolean;
31
+ };
32
+ /** The key the wide rail keeps its state under. */
33
+ persistKey?: string;
34
+ /** Whether the phone has the app bar's menu button (the modal drawer). */
35
+ menu: boolean;
36
+ };
37
+ /** What the shell renders for a resolved navigation, each part switched by CSS classes. */
38
+ export declare function shellParts(navigation: ResolvedNavigation): ShellParts;
@@ -0,0 +1,36 @@
1
+ import { AppSearchBarProps } from '../app-search/app-search.types.js';
2
+ import { ShellHeaderOptions, ShellHeaderVariant, ShellNavigation, ShellNavigationOptions } from './activity-layout-navigation.types.js';
3
+ /** What the shell draws today, and what an unset `navigation` resolves to. */
4
+ export declare const DEFAULT_NAVIGATION: {
5
+ readonly phone: "modal-drawer";
6
+ readonly tablet: "rail";
7
+ readonly desktop: "rail";
8
+ };
9
+ export type ResolvedNavigation = {
10
+ phone: ShellNavigation;
11
+ tablet: ShellNavigation;
12
+ desktop: ShellNavigation;
13
+ hideOnScroll: boolean;
14
+ persistKey?: string;
15
+ };
16
+ export type ResolvedHeader = {
17
+ variant: ShellHeaderVariant;
18
+ collapse: boolean;
19
+ hideOnScroll: boolean;
20
+ tabs: ShellHeaderOptions['tabs'];
21
+ /** The search's props, `{}` for `search: true`; undefined: none. */
22
+ search: AppSearchBarProps | undefined;
23
+ };
24
+ /** Whether `preset` is drawn on a phone at all: no rail, no top bar and no two levels (the sidebar and the drawer only when named for it). */
25
+ export declare function drawnOnPhone(preset: ShellNavigation): boolean;
26
+ /** A preset name alone applies to every window size it is drawn at: a phone keeps its menu sheet for the rails, the sidebar, the drawer, the top bar and the two-level navigation, and the bottom bar is the phone's alone (`{ tablet: 'bar' }` asks for it from 768px). */
27
+ export declare function resolveNavigation(navigation?: ShellNavigation | ShellNavigationOptions): ResolvedNavigation;
28
+ export declare function resolveHeader(header?: ShellHeaderVariant | ShellHeaderOptions): ResolvedHeader;
29
+ /** The classes hiding a part at the sizes its 3-character key (phone, tablet, desktop; 1 = shown) leaves out. */
30
+ export declare function hideClasses(key: string): string;
31
+ /**
32
+ * For each preset the navigation uses, the classes that show it only at the
33
+ * window sizes it is configured for (`'rail'` on the tablet and the desktop:
34
+ * `max-md:hidden`). Presets not in use have no entry.
35
+ */
36
+ export declare function navigationClasses(navigation: ResolvedNavigation): Partial<Record<ShellNavigation, string>>;
@@ -1,5 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { UIMatch } from 'react-router';
3
+ import { ShellBack } from './activity-layout-navigation.types.js';
4
+ import { ShellHeaderInput } from './header.utils.js';
3
5
  /**
4
6
  * A route's `handle.title`: the page's title in the app bar. A node, or a
5
7
  * function of the matched route (its `params`, its loader `data`) returning
@@ -21,6 +23,18 @@ export type AppShellHandle<Data = unknown> = {
21
23
  * shows no page title.
22
24
  */
23
25
  titleAfter?: PageTitle<Data>;
26
+ /**
27
+ * The app bar for this route: a variant (`'small'`, `'center'`, `'medium'`,
28
+ * `'large'`, `'none'`) or the variant with its options, on top of
29
+ * `ActivityLayout`'s `header`. The deepest route declaring one wins.
30
+ */
31
+ header?: ShellHeaderInput;
32
+ /**
33
+ * A back arrow at the start of this route's app bar: `{ to, label? }` or
34
+ * `true` (history back, up one level when the visit started here). On a
35
+ * phone the menu button follows it. The deepest route declaring one wins.
36
+ */
37
+ back?: ShellBack;
24
38
  };
25
39
  /**
26
40
  * The title of the deepest matched route that declares a `handle.title`, or
@@ -1,4 +1,10 @@
1
1
  import { ReactNode } from 'react';
2
+ /** The type step and the fit of each size. */
3
+ declare const SIZES: {
4
+ readonly bar: readonly ["title-medium", "min-w-0 max-md:line-clamp-2 max-md:break-words md:truncate"];
5
+ readonly headline: readonly ["headline-lg", "min-w-0 truncate"];
6
+ readonly display: readonly ["display-md", "min-w-0 line-clamp-2 break-words"];
7
+ };
2
8
  /**
3
9
  * The page's one `h1`, in the app bar: from `md` up truncated with an
4
10
  * ellipsis when long, on a phone wrapped to two lines first (a record's number
@@ -6,11 +12,16 @@ import { ReactNode } from 'react';
6
12
  * with the full text (as the header's leading title does, #629); the accessible name is the content itself.
7
13
  * The display face is `--font-display`, the body face without it.
8
14
  */
9
- export declare function PageHeading({ children, id, after, context, }: {
15
+ export declare function PageHeading({ children, id, after, context, size, center, }: {
10
16
  children?: ReactNode;
11
17
  id?: string;
12
18
  /** The slot right after the title, outside the `h1`: it never truncates, the title does. */
13
19
  after?: ReactNode;
14
20
  /** The small muted context line (the tenant), last in the row, from `md` up. */
15
21
  context?: ReactNode;
22
+ /** `'bar'`: the title in the app bar. `'headline'` and `'display'`: the second row of a medium and a large header, which wraps (display up to two lines). */
23
+ size?: keyof typeof SIZES;
24
+ /** Centre it, for the `'center'` header. */
25
+ center?: boolean;
16
26
  }): import("react").JSX.Element | null;
27
+ export {};
@@ -0,0 +1,32 @@
1
+ import { ReactNode, RefObject } from 'react';
2
+ export type ShellScrollDirection = 'up' | 'down' | 'none';
3
+ export type ShellScrollState = {
4
+ /** Where the scrolling went last, once it moved by more than the threshold; `'none'` at the top. */
5
+ direction: ShellScrollDirection;
6
+ /** The scroll offset in px (0 at the top). */
7
+ offset: number;
8
+ /** Whether the user asked for reduced motion: skip the slide and snap. */
9
+ reducedMotion: boolean;
10
+ };
11
+ /** The shell's scroll state; idle outside a {@link ShellScrollProvider}. */
12
+ export declare const ShellScrollContext: import('react').Context<ShellScrollState>;
13
+ /** The shell's scroll direction and offset, for a header or bar that hides on scroll. */
14
+ export declare function useShellScroll(): ShellScrollState;
15
+ export type ShellScrollOptions = {
16
+ /** The scrolling box; `null` (default) is the window. */
17
+ container?: RefObject<HTMLElement | null> | null;
18
+ /** Px of movement before the direction flips. @default 8 */
19
+ threshold?: number;
20
+ /** `false`: track nothing (no listener, no frame) and stay idle. @default true */
21
+ enabled?: boolean;
22
+ };
23
+ /**
24
+ * Tracks one scroller: reads once per animation frame, flips the direction
25
+ * only after `threshold` px of movement the other way (hysteresis). Idle on
26
+ * the server and until mounted.
27
+ */
28
+ export declare function useScrollTracker({ container, threshold, enabled, }?: ShellScrollOptions): ShellScrollState;
29
+ /** Provides {@link useShellScroll} for one scroller (the window, or `container`). */
30
+ export declare function ShellScrollProvider({ children, ...options }: ShellScrollOptions & {
31
+ children: ReactNode;
32
+ }): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Under the app bar: the bar's gutter, its whole height (`--nxgt-header-total`:
3
+ * the row, a headline row and the tabs, measured by `useHeaderHeight`, or
4
+ * worked out by app-header.css before it runs) and the gap below it. In a
5
+ * `scroll="container"` shell the region scrolls below the bar, so the panel
6
+ * sticks to the region's top and leaves room for the breadcrumb.
7
+ */
8
+ export declare const STICKY_OFFSET: string;
@@ -49,6 +49,20 @@ export type MenuItem = {
49
49
  * badge reads nothing unless you give one.
50
50
  */
51
51
  badgeLabel?: string;
52
+ /**
53
+ * Sub-entries. `navigation="top"` opens them in a dropdown under the entry
54
+ * (which then is a button, not a link) and the expanded sidebar and the
55
+ * phone's menu sheet nest them under it; `navigation="two-level"` lists them
56
+ * in the panel beside the rail (one level); the collapsed rail and the other
57
+ * presets list the top level only.
58
+ */
59
+ children?: MenuItem[];
60
+ /** The section this entry belongs to, already translated: the drawer draws one section per group. */
61
+ group?: string;
62
+ /** Whether a bottom navigation bar shows this entry (the others go under "More"): the bar and the floating toolbar. */
63
+ bar?: boolean;
64
+ /** Orders the entries a bar keeps when there is room for fewer: higher stays. */
65
+ priority?: number;
52
66
  };
53
67
  /** An image logo: its URL, and the text it stands for when no `name` is given. */
54
68
  export type AppLogoImage = {
@@ -0,0 +1,9 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Keeps the focus out of a bar that slides away (it turns `inert`): focus
4
+ * inside it moves to the content region (or is released when the page has
5
+ * none), and returns to where it was once the bar is back, unless the user
6
+ * went elsewhere meanwhile. `keep` names the focused elements that stay on
7
+ * screen and so are left alone (the header's tabs).
8
+ */
9
+ export declare function useFocusWhileHidden(ref: RefObject<HTMLElement | null>, hidden: boolean, keep?: (active: Element) => boolean): void;
@@ -0,0 +1,12 @@
1
+ import { RefObject } from 'react';
2
+ /** The CSS variable on the layout root: the bar's whole height, tabs and any extra row included. */
3
+ export declare const HEADER_TOTAL_VAR = "--nxgt-header-total";
4
+ /**
5
+ * Publishes the bar's real height (the row, a headline row, the tabs) as
6
+ * `--nxgt-header-total` on the closest `ActivityLayout` root, so the sticky
7
+ * panels (`STICKY_OFFSET`) stick below all of it. Measured with a
8
+ * `ResizeObserver`, through the CSSOM (no `style` attribute). On the server,
9
+ * before mount, and without a `ResizeObserver`, app-header.css computes it from
10
+ * the bar's variant and tabs. It writes only on change, at most once per frame, and not while a collapsing bar is between its two states. Outside an `ActivityLayout` it does nothing.
11
+ */
12
+ export declare function useHeaderHeight(ref: RefObject<HTMLElement | null>): void;
@@ -0,0 +1,19 @@
1
+ import { RefObject } from 'react';
2
+ /** The CSS variable app-header.css reads: 0 expanded, 1 collapsed. */
3
+ export declare const PROGRESS_VAR = "--nxgt-header-progress";
4
+ /**
5
+ * Drives an app bar from the shell's scroll ({@link useShellScroll}, the
6
+ * window or the content region): how far its headline has collapsed, set as a
7
+ * CSS variable on the element (never an inline style string), and whether it
8
+ * has slid away. Idle (expanded, shown) on the server, outside a provider and
9
+ * before mount. Focus inside a bar that goes away moves out and comes back ({@link useFocusWhileHidden}).
10
+ */
11
+ export declare function useHeaderScroll(ref: RefObject<HTMLElement | null>, { range, hideOnScroll, }: {
12
+ /** Px of scroll the collapse takes; 0: the bar does not collapse. */
13
+ range: number;
14
+ hideOnScroll: boolean;
15
+ }): {
16
+ progress: number;
17
+ hidden: boolean;
18
+ collapsed: boolean;
19
+ };
@@ -0,0 +1,20 @@
1
+ import { ShellBack } from './activity-layout-navigation.types.js';
2
+ import { ShellHeaderInput } from './header.utils.js';
3
+ /**
4
+ * The header of the matched route: `ActivityLayout`'s `header` with the
5
+ * deepest `handle.header` on top. Read from the matches, so the server and
6
+ * the browser agree.
7
+ */
8
+ export declare function useShellHeader(header?: ShellHeaderInput): import('./navigation.utils.js').ResolvedHeader;
9
+ /** The back arrow of the matched route (`handle.back`), or `undefined`. */
10
+ export declare function useShellBack(): ShellBack | undefined;
11
+ /**
12
+ * The attributes `ActivityLayout` puts on its root for app-header.css, which
13
+ * works the bar's height out from them before any script runs: `data-header`
14
+ * (`medium` or `large`, only with a page title to put in the headline row) and
15
+ * `data-header-tabs`.
16
+ */
17
+ export declare function useHeaderRootAttributes(header?: ShellHeaderInput): {
18
+ 'data-header': import('./activity-layout-navigation.types.js').ShellHeaderVariant | undefined;
19
+ 'data-header-tabs': string | undefined;
20
+ };
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ /** The page's safe-area padding, as classes (no style attribute). */
3
+ export declare const SAFE_PADDING = "pt-[max(1rem,env(safe-area-inset-top))] pr-[max(1rem,env(safe-area-inset-right))] pb-[max(1rem,env(safe-area-inset-bottom))] pl-[max(1rem,env(safe-area-inset-left))]";
4
+ /**
5
+ * The two columns of `layout="split"`: the `visual` side from 768px (hidden
6
+ * on a phone, which keeps the form only under its compact brand row) and the
7
+ * form side, opaque so text and controls never sit on the backdrop. Placed by
8
+ * CSS breakpoint classes only, so the server and the client render the same
9
+ * markup.
10
+ */
11
+ export declare function AuthCardSplit({ visual, children, }: {
12
+ visual?: ReactNode;
13
+ children: ReactNode;
14
+ }): import("react").JSX.Element;
@@ -40,6 +40,18 @@ export type AuthCardProps = Omit<ComponentProps<'main'>, 'title'> & {
40
40
  * or card).
41
41
  */
42
42
  keepClear?: boolean | 'gaps';
43
+ /**
44
+ * `'card'` (the default) is a centred card; `'split'` is two columns from
45
+ * 768px, the `visual` side and the form side, and the form alone (under
46
+ * the brand row) on a phone.
47
+ */
48
+ layout?: 'card' | 'split';
49
+ /**
50
+ * With `layout="split"`: the side beside the form, from 768px (a `Background`
51
+ * preset with `className="absolute inset-0"`, a picture, a tagline). It is
52
+ * hidden on a phone; mark a purely decorative one `aria-hidden`.
53
+ */
54
+ visual?: ReactNode;
43
55
  /** The form. */
44
56
  children: ReactNode;
45
57
  };
@@ -48,4 +60,4 @@ export type AuthCardProps = Omit<ComponentProps<'main'>, 'title'> & {
48
60
  * `main`, a centred card whose title is the page's `h1`, a row above it for
49
61
  * the brand and a toolbar, padded clear of a phone's notch and home bar.
50
62
  */
51
- export declare function AuthCard({ title, description, notice, noticeTone, focusTitle, brand, toolbar, banner, footer, backdrop, keepClear, className, children, ...props }: AuthCardProps): import("react").JSX.Element;
63
+ export declare function AuthCard({ title, description, notice, noticeTone, focusTitle, brand, toolbar, banner, footer, backdrop, keepClear, layout, visual, className, children, ...props }: AuthCardProps): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import { DashboardColumns, ReorderDirection } from './dashboard-grid.utils.js';
2
+ /** Which control of a tile takes the focus back after the tile has moved. */
3
+ export type DashboardFocusTarget = 'handle' | 'earlier' | 'later';
4
+ export type DashboardGridContextValue = {
5
+ editing: boolean;
6
+ order: string[];
7
+ columns: Required<DashboardColumns>;
8
+ grabbedId: string | null;
9
+ /** The id of the element describing the keys, for the handles. */
10
+ hintId: string;
11
+ /** Space, arrows, Escape on a handle; returns true when the key was used. */
12
+ onHandleKey: (id: string, key: string, rtl: boolean) => boolean;
13
+ onHandleBlur: (id: string) => void;
14
+ /** The earlier / later buttons of the narrow layout. */
15
+ onMove: (id: string, direction: ReorderDirection, focus: DashboardFocusTarget) => void;
16
+ /** The control to focus once, after the tile moved. */
17
+ takeFocus: (id: string) => DashboardFocusTarget | null;
18
+ };
19
+ export declare const DashboardGridProvider: import('react').Provider<DashboardGridContextValue | null>;
20
+ /** The grid a tile sits in, or `null` for a tile outside any grid. */
21
+ export declare const useDashboardGridContext: () => DashboardGridContextValue | null;
@@ -0,0 +1,9 @@
1
+ import { DashboardGridProps } from './dashboard-grid.types.js';
2
+ /**
3
+ * DashboardGrid - tiles in a responsive grid that the user can rearrange.
4
+ * An "Edit layout" button turns on edit mode: each tile gets a handle to drag
5
+ * with a pointer, or to pick up with Space, move with the arrows and drop
6
+ * with Space (Escape cancels); below 768px the tiles also get earlier / later
7
+ * buttons. The order is the app's: pass `order` and `onOrderChange`.
8
+ */
9
+ export declare function DashboardGrid(props: DashboardGridProps): import("react").JSX.Element;
@@ -0,0 +1,30 @@
1
+ export type DashboardNoteKind = 'grabbed' | 'moved' | 'dropped' | 'cancelled';
2
+ export type DashboardState = {
3
+ /** The tile picked up with the keyboard, and the order to put back on Escape. */
4
+ grabbed: {
5
+ id: string;
6
+ origin: string[];
7
+ } | null;
8
+ /** The last thing to say to a screen reader; `seq` repeats an identical message. */
9
+ note: {
10
+ kind: DashboardNoteKind;
11
+ id: string;
12
+ /** The order the note is about, so a lagging controlled `order` cannot misreport the position. */
13
+ order: string[];
14
+ seq: number;
15
+ } | null;
16
+ };
17
+ export type DashboardAction = {
18
+ type: 'grab';
19
+ id: string;
20
+ origin: string[];
21
+ } | {
22
+ type: 'release';
23
+ } | {
24
+ type: 'note';
25
+ kind: DashboardNoteKind;
26
+ id: string;
27
+ order: string[];
28
+ };
29
+ export declare const INITIAL_STATE: DashboardState;
30
+ export declare function dashboardReducer(state: DashboardState, action: DashboardAction): DashboardState;
@@ -0,0 +1,8 @@
1
+ import { ReactElement } from 'react';
2
+ import { DashboardGridProps } from './dashboard-grid.types.js';
3
+ /** The tiles among the children by id, in the order they were written, with the name each answers to. */
4
+ export declare function readTiles(children: DashboardGridProps['children']): {
5
+ elements: Map<string, ReactElement<unknown, string | import('react').JSXElementConstructor<any>>>;
6
+ labels: Record<string, string>;
7
+ ids: string[];
8
+ };
@@ -0,0 +1,50 @@
1
+ import { ComponentProps, ReactNode } from 'react';
2
+ import { ResponsiveGridGap } from '../responsive-grid/responsive-grid.utils.js';
3
+ import { GridRowSpan, GridSpan, ResponsiveValue } from '../responsive-grid/responsive-grid-spans.js';
4
+ import { DashboardColumns } from './dashboard-grid.utils.js';
5
+ export type DashboardGridProps = Omit<ComponentProps<'div'>, 'children'> & {
6
+ /** `DashboardTile`s, written directly here (not inside a fragment or a wrapper): each one's `id` places it in the order. */
7
+ children: ReactNode;
8
+ /**
9
+ * The tiles' ids in display order (controlled). A tile `order` does not
10
+ * list goes after the listed ones, in the order it is written; an id with
11
+ * no tile is ignored. The app stores it (a user's saved layout) and
12
+ * passes it back from `onOrderChange`.
13
+ */
14
+ order?: string[];
15
+ /** The initial order when `order` is not controlled. Default: the order the tiles are written in. */
16
+ defaultOrder?: string[];
17
+ /** Called with the whole new order after a drop, a keyboard move or a move button. */
18
+ onOrderChange?: (order: string[]) => void;
19
+ /** Edit mode (controlled): tiles show a handle and can be reordered. */
20
+ editing?: boolean;
21
+ /** Edit mode at first, when `editing` is not controlled. */
22
+ defaultEditing?: boolean;
23
+ onEditingChange?: (editing: boolean) => void;
24
+ /** The "Edit layout" / "Done" button above the grid. `false` hides it, for an app that toggles `editing` itself. Default `true`. */
25
+ editButton?: boolean;
26
+ /**
27
+ * Columns by container width: `{ base: 1, md: 2, xl: 4 }`, the default
28
+ * (`md` is 768px, `xl` 1280px). A tile's span is held to the columns of
29
+ * its width.
30
+ */
31
+ columns?: DashboardColumns;
32
+ /** The space between tiles: `sm` 0.5rem, `md` 1rem (default), `lg` 1.5rem. */
33
+ gap?: ResponsiveGridGap;
34
+ /** Fill the holes a wide tile leaves by moving later, smaller tiles up. The visual order then differs from the tab order. */
35
+ dense?: boolean;
36
+ };
37
+ export type DashboardTileProps = Omit<ComponentProps<'div'>, 'title' | 'id'> & {
38
+ /** Names the tile in the order (`order` lists these ids). Unique in the grid. */
39
+ id: string;
40
+ /** A heading at the top of the tile (an `h3`), also its accessible name and the name of its handle. */
41
+ title?: ReactNode;
42
+ /** Columns the tile covers: a number, `'full'`, or one per width. Held to the grid's columns. */
43
+ span?: ResponsiveValue<GridSpan>;
44
+ /** Rows the tile covers (1 to 4), or one per width. */
45
+ rowSpan?: ResponsiveValue<GridRowSpan>;
46
+ /** Draws no card (border, background, padding) of its own: for a child that is a card already (`StatCard`, `Card`). */
47
+ plain?: boolean;
48
+ /** Names the tile for its handle and the announcements when `title` is not text. */
49
+ label?: string;
50
+ };